[1/5] net/virtio: split virtio-net and virtio status
Checks
Commit Message
Currently, the same field is being used to store both the generic virtio
device status and the virtio-net-specific status.
This can become problematic since they have different sets of status
bits that may collide (e.g: VIRTIO_CONFIG_STATUS_ACK and
VIRTIO_NET_S_LINK_UP).
Split them in different fields.
Signed-off-by: Adrian Moreno <amorenoz@redhat.com>
---
drivers/net/virtio/virtio_user/virtio_user_dev.h | 5 ++++-
drivers/net/virtio/virtio_user_ethdev.c | 11 ++++++-----
2 files changed, 10 insertions(+), 6 deletions(-)
@@ -43,7 +43,10 @@ struct virtio_user_dev {
uint64_t protocol_features; /* negotiated protocol features
* (Vhost-user only)
*/
- uint8_t status;
+
+ uint8_t virtio_net_status; /* virtio-net device status */
+ uint8_t status; /* virtio device status */
+
uint16_t port_id;
uint8_t mac_addr[RTE_ETHER_ADDR_LEN];
char path[PATH_MAX];
@@ -205,7 +205,8 @@ virtio_user_read_dev_config(struct virtio_hw *hw, size_t offset,
}
r = recv(dev->vhostfd, buf, 128, MSG_PEEK);
if (r == 0 || (r < 0 && errno != EAGAIN)) {
- dev->status &= (~VIRTIO_NET_S_LINK_UP);
+ dev->virtio_net_status &=
+ (~VIRTIO_NET_S_LINK_UP);
PMD_DRV_LOG(ERR, "virtio-user port %u is down",
hw->port_id);
@@ -217,7 +218,7 @@ virtio_user_read_dev_config(struct virtio_hw *hw, size_t offset,
virtio_user_delayed_handler,
(void *)hw);
} else {
- dev->status |= VIRTIO_NET_S_LINK_UP;
+ dev->virtio_net_status |= VIRTIO_NET_S_LINK_UP;
}
if (fcntl(dev->vhostfd, F_SETFL,
flags & ~O_NONBLOCK) == -1) {
@@ -225,12 +226,12 @@ virtio_user_read_dev_config(struct virtio_hw *hw, size_t offset,
return;
}
} else if (dev->is_server) {
- dev->status &= (~VIRTIO_NET_S_LINK_UP);
+ dev->virtio_net_status &= (~VIRTIO_NET_S_LINK_UP);
if (virtio_user_server_reconnect(dev) >= 0)
- dev->status |= VIRTIO_NET_S_LINK_UP;
+ dev->virtio_net_status |= VIRTIO_NET_S_LINK_UP;
}
- *(uint16_t *)dst = dev->status;
+ *(uint16_t *)dst = dev->virtio_net_status;
}
if (offset == offsetof(struct virtio_net_config, max_virtqueue_pairs))