Thread (149 messages) 149 messages, 6 authors, 2021-01-18

Re: [dpdk-dev] [PATCH 11/40] net/virtio: validate features at bus level

From: Maxime Coquelin <hidden>
Date: 2021-01-15 09:20:33


On 1/6/21 10:33 AM, David Marchand wrote:
On Sun, Dec 20, 2020 at 10:15 PM Maxime Coquelin
[off-list ref] wrote:
quoted
diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c
index 00aa38e4ef..91a93b2b6e 100644
--- a/drivers/net/virtio/virtio_ethdev.c
+++ b/drivers/net/virtio/virtio_ethdev.c
@@ -1315,17 +1315,16 @@ virtio_negotiate_features(struct virtio_hw *hw, uint64_t req_features)
        PMD_INIT_LOG(DEBUG, "features after negotiate = %" PRIx64,
                hw->guest_features);

-       if (hw->bus_type == VIRTIO_BUS_PCI_MODERN && !vtpci_with_feature(hw, VIRTIO_F_VERSION_1)) {
-               PMD_INIT_LOG(ERR,
-                       "VIRTIO_F_VERSION_1 features is not enabled.");
+       if (VTPCI_OPS(hw)->features_ok(hw) < 0) {
+               PMD_INIT_LOG(ERR, "Features not OK at bus level\n");
We have a log which gives more context in the modern features_ok() callback.
I don't think we need both log messages.
Yes, maybe overkill. I will remove.

Thanks,
Maxime
quoted
                return -1;
        }

-       if (hw->bus_type == VIRTIO_BUS_PCI_MODERN || hw->bus_type == VIRTIO_BUS_USER) {
+       if (vtpci_with_feature(hw, VIRTIO_F_VERSION_1)) {
                vtpci_set_status(hw, VIRTIO_CONFIG_STATUS_FEATURES_OK);
+
                if (!(vtpci_get_status(hw) & VIRTIO_CONFIG_STATUS_FEATURES_OK)) {
-                       PMD_INIT_LOG(ERR,
-                               "failed to set FEATURES_OK status!");
+                       PMD_INIT_LOG(ERR, "Failed to set FEATURES_OK status!");
                        return -1;
                }
        }
diff --git a/drivers/net/virtio/virtio_pci.c b/drivers/net/virtio/virtio_pci.c
index 599d8afa6b..3de7980b4f 100644
--- a/drivers/net/virtio/virtio_pci.c
+++ b/drivers/net/virtio/virtio_pci.c
[snip]

quoted
@@ -332,6 +339,17 @@ modern_set_features(struct virtio_hw *hw, uint64_t features)
                    &hw->common_cfg->guest_feature);
 }

+static int
+modern_features_ok(struct virtio_hw *hw)
+{
+       if (!vtpci_with_feature(hw, VIRTIO_F_VERSION_1)) {
+               PMD_INIT_LOG(ERR, "Version 1+ required with modern devices\n");
+               return -1;
+       }
+
+       return 0;
+}
+
 static uint8_t
 modern_get_status(struct virtio_hw *hw)
 {
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help