This patch is preliminary rework to add support for getting
and setting device's config space.

In order to get or set a device config such as its MAC address,
we need to know whether the device itself support the feature,
or if it is emulated by the frontend.

Signed-off-by: Maxime Coquelin <maxime.coque...@redhat.com>
---
 drivers/net/virtio/virtio_user/virtio_user_dev.c | 10 ++--------
 drivers/net/virtio/virtio_user_ethdev.c          |  5 +++--
 2 files changed, 5 insertions(+), 10 deletions(-)

diff --git a/drivers/net/virtio/virtio_user/virtio_user_dev.c 
b/drivers/net/virtio/virtio_user/virtio_user_dev.c
index 364f43e21c..ed55cd7524 100644
--- a/drivers/net/virtio/virtio_user/virtio_user_dev.c
+++ b/drivers/net/virtio/virtio_user/virtio_user_dev.c
@@ -573,11 +573,7 @@ virtio_user_dev_init(struct virtio_user_dev *dev, char 
*path, int queues,
        if (dev->backend_type == VIRTIO_USER_BACKEND_VHOST_USER)
                dev->frontend_features |= (1ull << VIRTIO_NET_F_STATUS);
 
-       /*
-        * Device features =
-        *     (frontend_features | backend_features) & ~unsupported_features;
-        */
-       dev->device_features |= dev->frontend_features;
+       dev->frontend_features &= ~dev->unsupported_features;
        dev->device_features &= ~dev->unsupported_features;
 
        if (rte_mem_event_callback_register(VIRTIO_USER_MEM_EVENT_CLB_NAME,
@@ -980,12 +976,10 @@ virtio_user_dev_server_reconnect(struct virtio_user_dev 
*dev)
                return -1;
        }
 
-       dev->device_features |= dev->frontend_features;
-
        /* unmask vhost-user unsupported features */
        dev->device_features &= ~(dev->unsupported_features);
 
-       dev->features &= dev->device_features;
+       dev->features &= (dev->device_features | dev->frontend_features);
 
        /* For packed ring, resetting queues is required in reconnection. */
        if (virtio_with_packed_queue(hw) &&
diff --git a/drivers/net/virtio/virtio_user_ethdev.c 
b/drivers/net/virtio/virtio_user_ethdev.c
index e85906e9eb..3ecbb4184a 100644
--- a/drivers/net/virtio/virtio_user_ethdev.c
+++ b/drivers/net/virtio/virtio_user_ethdev.c
@@ -110,7 +110,8 @@ virtio_user_get_features(struct virtio_hw *hw)
        struct virtio_user_dev *dev = virtio_user_get_dev(hw);
 
        /* unmask feature bits defined in vhost user protocol */
-       return dev->device_features & VIRTIO_PMD_SUPPORTED_GUEST_FEATURES;
+       return (dev->device_features | dev->frontend_features) &
+               VIRTIO_PMD_SUPPORTED_GUEST_FEATURES;
 }
 
 static void
@@ -118,7 +119,7 @@ virtio_user_set_features(struct virtio_hw *hw, uint64_t 
features)
 {
        struct virtio_user_dev *dev = virtio_user_get_dev(hw);
 
-       dev->features = features & dev->device_features;
+       dev->features = features & (dev->device_features | 
dev->frontend_features);
 }
 
 static int
-- 
2.31.1

Reply via email to