mirror of
https://github.com/xemu-project/xemu.git
synced 2024-12-18 17:28:38 +00:00
Want to send earlier but most patches just come.
- fix vhost-vdpa issues when no peer - fix virtio-pci queue enabling index value - forbid reentrant RX Changes from V1: - drop the patch that has been merged -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQEcBAABAgAGBQJfH+j9AAoJEO8Ells5jWIRwyUH/jE7GTnTVh+NY5ymMMKPLMEO TRWRwtbTzOyTokQWtfQ954/twMbgE6RvR3sN6ahOSHbfARwMRa8nSqymyZptdbq6 N9K9ZBb9Ns7zBxHQhvz7iUL/Jdjaw5rQ/29gCCnMqHx9J9Fi1dAy8vMGXbpx/H+N 1AcoMGFU/ShBMuFp7UI6MX/HRaWHzyUSfhHuQmfb9XmwzdLyd22UY2g9f1UMscNz MHhUcOuGmEpmijIA5XXOzMIOTYgPoUBoAzfYEIYk3ROerdgUJbcmCAkIFgScoRDM +kBwb+G1oFeOcYVfR3Cn1wRL0CQoVxv3gQd3Q9hKNKQd16WNmWCG3C/q2WD/n1w= =kMUN -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/jasowang/tags/net-pull-request' into staging Want to send earlier but most patches just come. - fix vhost-vdpa issues when no peer - fix virtio-pci queue enabling index value - forbid reentrant RX Changes from V1: - drop the patch that has been merged # gpg: Signature made Tue 28 Jul 2020 09:59:41 BST # gpg: using RSA key EF04965B398D6211 # gpg: Good signature from "Jason Wang (Jason Wang on RedHat) <jasowang@redhat.com>" [marginal] # gpg: WARNING: This key is not certified with sufficiently trusted signatures! # gpg: It is not certain that the signature belongs to the owner. # Primary key fingerprint: 215D 46F4 8246 689E C77F 3562 EF04 965B 398D 6211 * remotes/jasowang/tags/net-pull-request: net: forbid the reentrant RX virtio-net: check the existence of peer before accessing vDPA config virtio-pci: fix wrong index in virtio_pci_queue_enabled Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
a466dd084f
@ -125,6 +125,7 @@ static void virtio_net_get_config(VirtIODevice *vdev, uint8_t *config)
|
||||
{
|
||||
VirtIONet *n = VIRTIO_NET(vdev);
|
||||
struct virtio_net_config netcfg;
|
||||
NetClientState *nc = qemu_get_queue(n->nic);
|
||||
|
||||
int ret = 0;
|
||||
memset(&netcfg, 0 , sizeof(struct virtio_net_config));
|
||||
@ -142,13 +143,16 @@ static void virtio_net_get_config(VirtIODevice *vdev, uint8_t *config)
|
||||
VIRTIO_NET_RSS_SUPPORTED_HASHES);
|
||||
memcpy(config, &netcfg, n->config_size);
|
||||
|
||||
NetClientState *nc = qemu_get_queue(n->nic);
|
||||
if (nc->peer->info->type == NET_CLIENT_DRIVER_VHOST_VDPA) {
|
||||
/*
|
||||
* Is this VDPA? No peer means not VDPA: there's no way to
|
||||
* disconnect/reconnect a VDPA peer.
|
||||
*/
|
||||
if (nc->peer && nc->peer->info->type == NET_CLIENT_DRIVER_VHOST_VDPA) {
|
||||
ret = vhost_net_get_config(get_vhost_net(nc->peer), (uint8_t *)&netcfg,
|
||||
n->config_size);
|
||||
if (ret != -1) {
|
||||
memcpy(config, &netcfg, n->config_size);
|
||||
}
|
||||
n->config_size);
|
||||
if (ret != -1) {
|
||||
memcpy(config, &netcfg, n->config_size);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -156,6 +160,7 @@ static void virtio_net_set_config(VirtIODevice *vdev, const uint8_t *config)
|
||||
{
|
||||
VirtIONet *n = VIRTIO_NET(vdev);
|
||||
struct virtio_net_config netcfg = {};
|
||||
NetClientState *nc = qemu_get_queue(n->nic);
|
||||
|
||||
memcpy(&netcfg, config, n->config_size);
|
||||
|
||||
@ -166,11 +171,14 @@ static void virtio_net_set_config(VirtIODevice *vdev, const uint8_t *config)
|
||||
qemu_format_nic_info_str(qemu_get_queue(n->nic), n->mac);
|
||||
}
|
||||
|
||||
NetClientState *nc = qemu_get_queue(n->nic);
|
||||
if (nc->peer->info->type == NET_CLIENT_DRIVER_VHOST_VDPA) {
|
||||
vhost_net_set_config(get_vhost_net(nc->peer), (uint8_t *)&netcfg,
|
||||
0, n->config_size,
|
||||
VHOST_SET_CONFIG_TYPE_MASTER);
|
||||
/*
|
||||
* Is this VDPA? No peer means not VDPA: there's no way to
|
||||
* disconnect/reconnect a VDPA peer.
|
||||
*/
|
||||
if (nc->peer && nc->peer->info->type == NET_CLIENT_DRIVER_VHOST_VDPA) {
|
||||
vhost_net_set_config(get_vhost_net(nc->peer),
|
||||
(uint8_t *)&netcfg, 0, n->config_size,
|
||||
VHOST_SET_CONFIG_TYPE_MASTER);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1113,7 +1113,7 @@ static bool virtio_pci_queue_enabled(DeviceState *d, int n)
|
||||
VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus);
|
||||
|
||||
if (virtio_vdev_has_feature(vdev, VIRTIO_F_VERSION_1)) {
|
||||
return proxy->vqs[vdev->queue_sel].enabled;
|
||||
return proxy->vqs[n].enabled;
|
||||
}
|
||||
|
||||
return virtio_queue_enabled_legacy(vdev, n);
|
||||
|
@ -250,6 +250,9 @@ void qemu_net_queue_purge(NetQueue *queue, NetClientState *from)
|
||||
|
||||
bool qemu_net_queue_flush(NetQueue *queue)
|
||||
{
|
||||
if (queue->delivering)
|
||||
return false;
|
||||
|
||||
while (!QTAILQ_EMPTY(&queue->packets)) {
|
||||
NetPacket *packet;
|
||||
int ret;
|
||||
|
Loading…
Reference in New Issue
Block a user