X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fvirtio%2Fvirtio.c;h=d9e642f412eb9ef707cc664b4753b277115f01cb;hb=99ebada2d6d9db23be39f737f26c7bf5f0a26b9c;hp=ba3203e68b87a715d4cb57618594280521fb7d78;hpb=9328e1055c6998d46e72fb3c5ba5d13f43b36ae8;p=dpdk.git diff --git a/drivers/net/virtio/virtio.c b/drivers/net/virtio/virtio.c index ba3203e68b..d9e642f412 100644 --- a/drivers/net/virtio/virtio.c +++ b/drivers/net/virtio/virtio.c @@ -3,7 +3,10 @@ * Copyright(c) 2020 Red Hat, Inc. */ +#include + #include "virtio.h" +#include "virtio_logs.h" uint64_t virtio_negotiate_features(struct virtio_hw *hw, uint64_t host_features) @@ -38,9 +41,17 @@ virtio_write_dev_config(struct virtio_hw *hw, size_t offset, void virtio_reset(struct virtio_hw *hw) { + uint32_t retry = 0; + VIRTIO_OPS(hw)->set_status(hw, VIRTIO_CONFIG_STATUS_RESET); - /* flush status write */ - VIRTIO_OPS(hw)->get_status(hw); + /* Flush status write and wait device ready max 3 seconds. */ + while (VIRTIO_OPS(hw)->get_status(hw) != VIRTIO_CONFIG_STATUS_RESET) { + if (retry++ > 3000) { + PMD_INIT_LOG(WARNING, "port %u device reset timeout", hw->port_id); + break; + } + usleep(1000L); + } } void @@ -63,3 +74,9 @@ virtio_get_status(struct virtio_hw *hw) { return VIRTIO_OPS(hw)->get_status(hw); } + +uint8_t +virtio_get_isr(struct virtio_hw *hw) +{ + return VIRTIO_OPS(hw)->get_isr(hw); +}