summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorTiwei Bie <tiwei.bie@intel.com>2018-10-29 13:28:08 +0800
committerFerruh Yigit <ferruh.yigit@intel.com>2018-11-05 15:01:25 +0100
commit5db1684e7593c6fc8769b19765c8c6b9d4697f45 (patch)
tree2014a28347e2ebfde4d3783bfc01ba0ca9dd125c /drivers
parentbd9568f32121123f90bb39095f64f7a3ada0fe29 (diff)
downloaddpdk-5db1684e7593c6fc8769b19765c8c6b9d4697f45.zip
dpdk-5db1684e7593c6fc8769b19765c8c6b9d4697f45.tar.gz
dpdk-5db1684e7593c6fc8769b19765c8c6b9d4697f45.tar.xz
net/virtio: fix guest announce support
We need to check the status field in virtio net config structure instead of the bits read from ISR register to know whether we need to do guest announce. Fixes: 7365504f77e3 ("net/virtio: support guest announce") Cc: stable@dpdk.org Signed-off-by: Tiwei Bie <tiwei.bie@intel.com> Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/virtio/virtio_ethdev.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c
index da87177..cb6248e 100644
--- a/drivers/net/virtio/virtio_ethdev.c
+++ b/drivers/net/virtio/virtio_ethdev.c
@@ -1288,6 +1288,7 @@ virtio_interrupt_handler(void *param)
struct rte_eth_dev *dev = param;
struct virtio_hw *hw = dev->data->dev_private;
uint8_t isr;
+ uint16_t status;
/* Read interrupt status which clears interrupt */
isr = vtpci_isr(hw);
@@ -1301,12 +1302,17 @@ virtio_interrupt_handler(void *param)
_rte_eth_dev_callback_process(dev,
RTE_ETH_EVENT_INTR_LSC,
NULL);
- }
- if (isr & VIRTIO_NET_S_ANNOUNCE) {
- virtio_notify_peers(dev);
- if (hw->cvq)
- virtio_ack_link_announce(dev);
+ if (vtpci_with_feature(hw, VIRTIO_NET_F_STATUS)) {
+ vtpci_read_dev_config(hw,
+ offsetof(struct virtio_net_config, status),
+ &status, sizeof(status));
+ if (status & VIRTIO_NET_S_ANNOUNCE) {
+ virtio_notify_peers(dev);
+ if (hw->cvq)
+ virtio_ack_link_announce(dev);
+ }
+ }
}
}