All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v4 0/7] vmxnet3: Fine-tune device capabilities
@ 2015-12-24  7:17 Shmulik Ladkani
  2015-12-24  7:17 ` [Qemu-devel] [PATCH v4 1/7] vmxnet3: Change offsets of msi/msix pci capabilities Shmulik Ladkani
                   ` (7 more replies)
  0 siblings, 8 replies; 9+ messages in thread
From: Shmulik Ladkani @ 2015-12-24  7:17 UTC (permalink / raw)
  To: Jason Wang, Dmitry Fleytman; +Cc: idan.brown, qemu-devel, Shmulik Ladkani

Various fixes to what the vmxnet3 device reports in its PCI
configuration space, in order to be aligned with VMware virtual hardware
exposed by ESXi/Workstation.

Since v3: Place back-compat flags into HW_COMPAT_2_5 
Since v2: Introduce the compatability properties in separate patches,
          per Jason Wang's comment
Since v1: Added migration compatability, per Jason Wang's comment

Shmulik Ladkani (7):
  vmxnet3: Change offsets of msi/msix pci capabilities
  vmxnet3: Change the offset of the MSIX PBA table
  vmxnet3: Introduce 'x-old-msi-offsets' backword compatability property
  vmxnet3: coding: Introduce VMXNET3Class
  vmxnet3: The vmxnet3 device is a PCIE endpoint
  vmxnet3: Introduce 'x-disable-pcie' backword compatability property
  vmxnet3: Report the Device Serial Number capability

 hw/net/vmxnet3.c    | 114 +++++++++++++++++++++++++++++++++++++++++++++++++---
 include/hw/compat.h |  10 ++++-
 2 files changed, 117 insertions(+), 7 deletions(-)

-- 
1.9.1

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Qemu-devel] [PATCH v4 1/7] vmxnet3: Change offsets of msi/msix pci capabilities
  2015-12-24  7:17 [Qemu-devel] [PATCH v4 0/7] vmxnet3: Fine-tune device capabilities Shmulik Ladkani
@ 2015-12-24  7:17 ` Shmulik Ladkani
  2015-12-24  7:17 ` [Qemu-devel] [PATCH v4 2/7] vmxnet3: Change the offset of the MSIX PBA table Shmulik Ladkani
                   ` (6 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Shmulik Ladkani @ 2015-12-24  7:17 UTC (permalink / raw)
  To: Jason Wang, Dmitry Fleytman; +Cc: idan.brown, qemu-devel, Shmulik Ladkani

Place device reported PCI capabilities at the same offsets as placed by
the VMware virtual hardware: MSI at [84], MSI-X at [9c].

Signed-off-by: Shmulik Ladkani <shmulik.ladkani@ravellosystems.com>
---
 hw/net/vmxnet3.c | 18 +++++++++++++++---
 1 file changed, 15 insertions(+), 3 deletions(-)

diff --git a/hw/net/vmxnet3.c b/hw/net/vmxnet3.c
index 37373e5..d323895 100644
--- a/hw/net/vmxnet3.c
+++ b/hw/net/vmxnet3.c
@@ -36,6 +36,16 @@
 #define VMXNET3_MSIX_BAR_SIZE 0x2000
 #define MIN_BUF_SIZE 60
 
+/* Compatability flags for migration */
+#define VMXNET3_COMPAT_FLAG_OLD_MSI_OFFSETS_BIT 0
+#define VMXNET3_COMPAT_FLAG_OLD_MSI_OFFSETS \
+    (1 << VMXNET3_COMPAT_FLAG_OLD_MSI_OFFSETS_BIT)
+
+#define VMXNET3_MSI_OFFSET(s) \
+    ((s)->compat_flags & VMXNET3_COMPAT_FLAG_OLD_MSI_OFFSETS ? 0x50 : 0x84)
+#define VMXNET3_MSIX_OFFSET(s) \
+    ((s)->compat_flags & VMXNET3_COMPAT_FLAG_OLD_MSI_OFFSETS ? 0 : 0x9c)
+
 #define VMXNET3_BAR0_IDX      (0)
 #define VMXNET3_BAR1_IDX      (1)
 #define VMXNET3_MSIX_BAR_IDX  (2)
@@ -313,6 +323,9 @@ typedef struct {
         MACAddr *mcast_list;
         uint32_t mcast_list_len;
         uint32_t mcast_list_buff_size; /* needed for live migration. */
+
+        /* Compatability flags for migration */
+        uint32_t compat_flags;
 } VMXNET3State;
 
 /* Interrupt management */
@@ -2102,7 +2115,7 @@ vmxnet3_init_msix(VMXNET3State *s)
                         VMXNET3_MSIX_BAR_IDX, VMXNET3_OFF_MSIX_TABLE,
                         &s->msix_bar,
                         VMXNET3_MSIX_BAR_IDX, VMXNET3_OFF_MSIX_PBA,
-                        0);
+                        VMXNET3_MSIX_OFFSET(s));
 
     if (0 > res) {
         VMW_WRPRN("Failed to initialize MSI-X, error %d", res);
@@ -2130,7 +2143,6 @@ vmxnet3_cleanup_msix(VMXNET3State *s)
     }
 }
 
-#define VMXNET3_MSI_OFFSET        (0x50)
 #define VMXNET3_USE_64BIT         (true)
 #define VMXNET3_PER_VECTOR_MASK   (false)
 
@@ -2140,7 +2152,7 @@ vmxnet3_init_msi(VMXNET3State *s)
     PCIDevice *d = PCI_DEVICE(s);
     int res;
 
-    res = msi_init(d, VMXNET3_MSI_OFFSET, VMXNET3_MAX_NMSIX_INTRS,
+    res = msi_init(d, VMXNET3_MSI_OFFSET(s), VMXNET3_MAX_NMSIX_INTRS,
                    VMXNET3_USE_64BIT, VMXNET3_PER_VECTOR_MASK);
     if (0 > res) {
         VMW_WRPRN("Failed to initialize MSI, error %d", res);
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [Qemu-devel] [PATCH v4 2/7] vmxnet3: Change the offset of the MSIX PBA table
  2015-12-24  7:17 [Qemu-devel] [PATCH v4 0/7] vmxnet3: Fine-tune device capabilities Shmulik Ladkani
  2015-12-24  7:17 ` [Qemu-devel] [PATCH v4 1/7] vmxnet3: Change offsets of msi/msix pci capabilities Shmulik Ladkani
@ 2015-12-24  7:17 ` Shmulik Ladkani
  2015-12-24  7:17 ` [Qemu-devel] [PATCH v4 3/7] vmxnet3: Introduce 'x-old-msi-offsets' back-compat property Shmulik Ladkani
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Shmulik Ladkani @ 2015-12-24  7:17 UTC (permalink / raw)
  To: Jason Wang, Dmitry Fleytman; +Cc: idan.brown, qemu-devel, Shmulik Ladkani

Place the PBA table at 0x1000, as placed by VMware virtual hardware.

Signed-off-by: Shmulik Ladkani <shmulik.ladkani@ravellosystems.com>
---
 hw/net/vmxnet3.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/hw/net/vmxnet3.c b/hw/net/vmxnet3.c
index d323895..97f0aea 100644
--- a/hw/net/vmxnet3.c
+++ b/hw/net/vmxnet3.c
@@ -51,7 +51,8 @@
 #define VMXNET3_MSIX_BAR_IDX  (2)
 
 #define VMXNET3_OFF_MSIX_TABLE (0x000)
-#define VMXNET3_OFF_MSIX_PBA   (0x800)
+#define VMXNET3_OFF_MSIX_PBA(s) \
+    ((s)->compat_flags & VMXNET3_COMPAT_FLAG_OLD_MSI_OFFSETS ? 0x800 : 0x1000)
 
 /* Link speed in Mbps should be shifted by 16 */
 #define VMXNET3_LINK_SPEED      (1000 << 16)
@@ -2114,7 +2115,7 @@ vmxnet3_init_msix(VMXNET3State *s)
                         &s->msix_bar,
                         VMXNET3_MSIX_BAR_IDX, VMXNET3_OFF_MSIX_TABLE,
                         &s->msix_bar,
-                        VMXNET3_MSIX_BAR_IDX, VMXNET3_OFF_MSIX_PBA,
+                        VMXNET3_MSIX_BAR_IDX, VMXNET3_OFF_MSIX_PBA(s),
                         VMXNET3_MSIX_OFFSET(s));
 
     if (0 > res) {
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [Qemu-devel] [PATCH v4 3/7] vmxnet3: Introduce 'x-old-msi-offsets' back-compat property
  2015-12-24  7:17 [Qemu-devel] [PATCH v4 0/7] vmxnet3: Fine-tune device capabilities Shmulik Ladkani
  2015-12-24  7:17 ` [Qemu-devel] [PATCH v4 1/7] vmxnet3: Change offsets of msi/msix pci capabilities Shmulik Ladkani
  2015-12-24  7:17 ` [Qemu-devel] [PATCH v4 2/7] vmxnet3: Change the offset of the MSIX PBA table Shmulik Ladkani
@ 2015-12-24  7:17 ` Shmulik Ladkani
  2015-12-24  7:17 ` [Qemu-devel] [PATCH v4 4/7] vmxnet3: coding: Introduce VMXNET3Class Shmulik Ladkani
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Shmulik Ladkani @ 2015-12-24  7:17 UTC (permalink / raw)
  To: Jason Wang, Dmitry Fleytman; +Cc: idan.brown, qemu-devel, Shmulik Ladkani

Following the previous patches, where vmxnet3's pci's msi/msix
capability offsets and msix's PBA table offsets have been changed, this
patch introduces a boolean property 'x-old-msi-offsets' to vmxnet3,
whose default is false.

Setting 'x-old-msi-offsets' to 'on' preserves the old offsets behavior,
which allows migration to older versions.

Signed-off-by: Shmulik Ladkani <shmulik.ladkani@ravellosystems.com>
---
 hw/net/vmxnet3.c    | 2 ++
 include/hw/compat.h | 6 +++++-
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/hw/net/vmxnet3.c b/hw/net/vmxnet3.c
index 97f0aea..d1fe888 100644
--- a/hw/net/vmxnet3.c
+++ b/hw/net/vmxnet3.c
@@ -2564,6 +2564,8 @@ static const VMStateDescription vmstate_vmxnet3 = {
 
 static Property vmxnet3_properties[] = {
     DEFINE_NIC_PROPERTIES(VMXNET3State, conf),
+    DEFINE_PROP_BIT("x-old-msi-offsets", VMXNET3State, compat_flags,
+                    VMXNET3_COMPAT_FLAG_OLD_MSI_OFFSETS_BIT, false),
     DEFINE_PROP_END_OF_LIST(),
 };
 
diff --git a/include/hw/compat.h b/include/hw/compat.h
index 3d8d2a9..fd20d0e 100644
--- a/include/hw/compat.h
+++ b/include/hw/compat.h
@@ -2,7 +2,11 @@
 #define HW_COMPAT_H
 
 #define HW_COMPAT_2_5 \
-    /* empty */
+    {\
+        .driver   = "vmxnet3",\
+        .property = "x-old-msi-offsets",\
+        .value    = "on",\
+    },
 
 #define HW_COMPAT_2_4 \
     {\
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [Qemu-devel] [PATCH v4 4/7] vmxnet3: coding: Introduce VMXNET3Class
  2015-12-24  7:17 [Qemu-devel] [PATCH v4 0/7] vmxnet3: Fine-tune device capabilities Shmulik Ladkani
                   ` (2 preceding siblings ...)
  2015-12-24  7:17 ` [Qemu-devel] [PATCH v4 3/7] vmxnet3: Introduce 'x-old-msi-offsets' back-compat property Shmulik Ladkani
@ 2015-12-24  7:17 ` Shmulik Ladkani
  2015-12-24  7:17 ` [Qemu-devel] [PATCH v4 5/7] vmxnet3: The vmxnet3 device is a PCIE endpoint Shmulik Ladkani
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Shmulik Ladkani @ 2015-12-24  7:17 UTC (permalink / raw)
  To: Jason Wang, Dmitry Fleytman; +Cc: idan.brown, qemu-devel, Shmulik Ladkani

Introduce a class type for vmxnet3, and the usual
DEVICE_CLASS/DEVICE_GET_CLASS macros.

No semantic change.

Signed-off-by: Shmulik Ladkani <shmulik.ladkani@ravellosystems.com>
---
 hw/net/vmxnet3.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/hw/net/vmxnet3.c b/hw/net/vmxnet3.c
index d1fe888..14d4dcb 100644
--- a/hw/net/vmxnet3.c
+++ b/hw/net/vmxnet3.c
@@ -119,9 +119,18 @@
 
 #define VMXNET_FLAG_IS_SET(field, flag) (((field) & (flag)) == (flag))
 
+typedef struct VMXNET3Class {
+    PCIDeviceClass parent_class;
+} VMXNET3Class;
+
 #define TYPE_VMXNET3 "vmxnet3"
 #define VMXNET3(obj) OBJECT_CHECK(VMXNET3State, (obj), TYPE_VMXNET3)
 
+#define VMXNET3_DEVICE_CLASS(klass) \
+    OBJECT_CLASS_CHECK(VMXNET3Class, (klass), TYPE_VMXNET3)
+#define VMXNET3_DEVICE_GET_CLASS(obj) \
+    OBJECT_GET_CLASS(VMXNET3Class, (obj), TYPE_VMXNET3)
+
 /* Cyclic ring abstraction */
 typedef struct {
     hwaddr pa;
@@ -2592,6 +2601,7 @@ static void vmxnet3_class_init(ObjectClass *class, void *data)
 static const TypeInfo vmxnet3_info = {
     .name          = TYPE_VMXNET3,
     .parent        = TYPE_PCI_DEVICE,
+    .class_size    = sizeof(VMXNET3Class),
     .instance_size = sizeof(VMXNET3State),
     .class_init    = vmxnet3_class_init,
     .instance_init = vmxnet3_instance_init,
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [Qemu-devel] [PATCH v4 5/7] vmxnet3: The vmxnet3 device is a PCIE endpoint
  2015-12-24  7:17 [Qemu-devel] [PATCH v4 0/7] vmxnet3: Fine-tune device capabilities Shmulik Ladkani
                   ` (3 preceding siblings ...)
  2015-12-24  7:17 ` [Qemu-devel] [PATCH v4 4/7] vmxnet3: coding: Introduce VMXNET3Class Shmulik Ladkani
@ 2015-12-24  7:17 ` Shmulik Ladkani
  2015-12-24  7:17 ` [Qemu-devel] [PATCH v4 6/7] vmxnet3: Introduce 'x-disable-pcie' back-compat property Shmulik Ladkani
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Shmulik Ladkani @ 2015-12-24  7:17 UTC (permalink / raw)
  To: Jason Wang, Dmitry Fleytman; +Cc: idan.brown, qemu-devel, Shmulik Ladkani

Report the 'express endpoint' capability if on a PCIE bus.

Signed-off-by: Shmulik Ladkani <shmulik.ladkani@ravellosystems.com>
---
 hw/net/vmxnet3.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 52 insertions(+), 1 deletion(-)

diff --git a/hw/net/vmxnet3.c b/hw/net/vmxnet3.c
index 14d4dcb..7ded287 100644
--- a/hw/net/vmxnet3.c
+++ b/hw/net/vmxnet3.c
@@ -40,7 +40,11 @@
 #define VMXNET3_COMPAT_FLAG_OLD_MSI_OFFSETS_BIT 0
 #define VMXNET3_COMPAT_FLAG_OLD_MSI_OFFSETS \
     (1 << VMXNET3_COMPAT_FLAG_OLD_MSI_OFFSETS_BIT)
+#define VMXNET3_COMPAT_FLAG_DISABLE_PCIE_BIT 1
+#define VMXNET3_COMPAT_FLAG_DISABLE_PCIE \
+    (1 << VMXNET3_COMPAT_FLAG_DISABLE_PCIE_BIT)
 
+#define VMXNET3_EXP_EP_OFFSET (0x48)
 #define VMXNET3_MSI_OFFSET(s) \
     ((s)->compat_flags & VMXNET3_COMPAT_FLAG_OLD_MSI_OFFSETS ? 0x50 : 0x84)
 #define VMXNET3_MSIX_OFFSET(s) \
@@ -121,6 +125,7 @@
 
 typedef struct VMXNET3Class {
     PCIDeviceClass parent_class;
+    DeviceRealize parent_dc_realize;
 } VMXNET3Class;
 
 #define TYPE_VMXNET3 "vmxnet3"
@@ -2256,6 +2261,10 @@ static void vmxnet3_pci_realize(PCIDevice *pci_dev, Error **errp)
 
     vmxnet3_net_init(s);
 
+    if (pci_is_express(pci_dev) && pci_bus_is_express(pci_dev->bus)) {
+        pcie_endpoint_cap_init(pci_dev, VMXNET3_EXP_EP_OFFSET);
+    }
+
     register_savevm(dev, "vmxnet3-msix", -1, 1,
                     vmxnet3_msix_save, vmxnet3_msix_load, s);
 }
@@ -2525,6 +2534,29 @@ static const VMStateInfo int_state_info = {
     .put = vmxnet3_put_int_state
 };
 
+static bool vmxnet3_vmstate_need_pcie_device(void *opaque)
+{
+    VMXNET3State *s = VMXNET3(opaque);
+
+    return !(s->compat_flags & VMXNET3_COMPAT_FLAG_DISABLE_PCIE);
+}
+
+static bool vmxnet3_vmstate_test_pci_device(void *opaque, int version_id)
+{
+    return !vmxnet3_vmstate_need_pcie_device(opaque);
+}
+
+static const VMStateDescription vmstate_vmxnet3_pcie_device = {
+    .name = "vmxnet3/pcie",
+    .version_id = 1,
+    .minimum_version_id = 1,
+    .needed = vmxnet3_vmstate_need_pcie_device,
+    .fields = (VMStateField[]) {
+        VMSTATE_PCIE_DEVICE(parent_obj, VMXNET3State),
+        VMSTATE_END_OF_LIST()
+    }
+};
+
 static const VMStateDescription vmstate_vmxnet3 = {
     .name = "vmxnet3",
     .version_id = 1,
@@ -2532,7 +2564,9 @@ static const VMStateDescription vmstate_vmxnet3 = {
     .pre_save = vmxnet3_pre_save,
     .post_load = vmxnet3_post_load,
     .fields = (VMStateField[]) {
-            VMSTATE_PCI_DEVICE(parent_obj, VMXNET3State),
+            VMSTATE_STRUCT_TEST(parent_obj, VMXNET3State,
+                                vmxnet3_vmstate_test_pci_device, 0,
+                                vmstate_pci_device, PCIDevice),
             VMSTATE_BOOL(rx_packets_compound, VMXNET3State),
             VMSTATE_BOOL(rx_vlan_stripping, VMXNET3State),
             VMSTATE_BOOL(lro_supported, VMXNET3State),
@@ -2567,6 +2601,7 @@ static const VMStateDescription vmstate_vmxnet3 = {
     },
     .subsections = (const VMStateDescription*[]) {
         &vmxstate_vmxnet3_mcast_list,
+        &vmstate_vmxnet3_pcie_device,
         NULL
     }
 };
@@ -2578,10 +2613,24 @@ static Property vmxnet3_properties[] = {
     DEFINE_PROP_END_OF_LIST(),
 };
 
+static void vmxnet3_realize(DeviceState *qdev, Error **errp)
+{
+    VMXNET3Class *vc = VMXNET3_DEVICE_GET_CLASS(qdev);
+    PCIDevice *pci_dev = PCI_DEVICE(qdev);
+    VMXNET3State *s = VMXNET3(qdev);
+
+    if (!(s->compat_flags & VMXNET3_COMPAT_FLAG_DISABLE_PCIE)) {
+        pci_dev->cap_present |= QEMU_PCI_CAP_EXPRESS;
+    }
+
+    vc->parent_dc_realize(qdev, errp);
+}
+
 static void vmxnet3_class_init(ObjectClass *class, void *data)
 {
     DeviceClass *dc = DEVICE_CLASS(class);
     PCIDeviceClass *c = PCI_DEVICE_CLASS(class);
+    VMXNET3Class *vc = VMXNET3_DEVICE_CLASS(class);
 
     c->realize = vmxnet3_pci_realize;
     c->exit = vmxnet3_pci_uninit;
@@ -2591,6 +2640,8 @@ static void vmxnet3_class_init(ObjectClass *class, void *data)
     c->class_id = PCI_CLASS_NETWORK_ETHERNET;
     c->subsystem_vendor_id = PCI_VENDOR_ID_VMWARE;
     c->subsystem_id = PCI_DEVICE_ID_VMWARE_VMXNET3;
+    vc->parent_dc_realize = dc->realize;
+    dc->realize = vmxnet3_realize;
     dc->desc = "VMWare Paravirtualized Ethernet v3";
     dc->reset = vmxnet3_qdev_reset;
     dc->vmsd = &vmstate_vmxnet3;
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [Qemu-devel] [PATCH v4 6/7] vmxnet3: Introduce 'x-disable-pcie' back-compat property
  2015-12-24  7:17 [Qemu-devel] [PATCH v4 0/7] vmxnet3: Fine-tune device capabilities Shmulik Ladkani
                   ` (4 preceding siblings ...)
  2015-12-24  7:17 ` [Qemu-devel] [PATCH v4 5/7] vmxnet3: The vmxnet3 device is a PCIE endpoint Shmulik Ladkani
@ 2015-12-24  7:17 ` Shmulik Ladkani
  2015-12-24  7:17 ` [Qemu-devel] [PATCH v4 7/7] vmxnet3: Report the Device Serial Number capability Shmulik Ladkani
  2015-12-28  4:18 ` [Qemu-devel] [PATCH v4 0/7] vmxnet3: Fine-tune device capabilities Jason Wang
  7 siblings, 0 replies; 9+ messages in thread
From: Shmulik Ladkani @ 2015-12-24  7:17 UTC (permalink / raw)
  To: Jason Wang, Dmitry Fleytman; +Cc: idan.brown, qemu-devel, Shmulik Ladkani

Following the previous patch which changed vmxnet3 to be a pci express
device, this patch introduces a boolean property 'x-disable-pcie' whose
default is false.

Setting 'x-disable-pcie' to 'on' preserves the old 'pci device' (non
express) behavior. This allows migration to older versions.

Signed-off-by: Shmulik Ladkani <shmulik.ladkani@ravellosystems.com>
---
 hw/net/vmxnet3.c    | 2 ++
 include/hw/compat.h | 4 ++++
 2 files changed, 6 insertions(+)

diff --git a/hw/net/vmxnet3.c b/hw/net/vmxnet3.c
index 7ded287..f9cd02b 100644
--- a/hw/net/vmxnet3.c
+++ b/hw/net/vmxnet3.c
@@ -2610,6 +2610,8 @@ static Property vmxnet3_properties[] = {
     DEFINE_NIC_PROPERTIES(VMXNET3State, conf),
     DEFINE_PROP_BIT("x-old-msi-offsets", VMXNET3State, compat_flags,
                     VMXNET3_COMPAT_FLAG_OLD_MSI_OFFSETS_BIT, false),
+    DEFINE_PROP_BIT("x-disable-pcie", VMXNET3State, compat_flags,
+                    VMXNET3_COMPAT_FLAG_DISABLE_PCIE_BIT, false),
     DEFINE_PROP_END_OF_LIST(),
 };
 
diff --git a/include/hw/compat.h b/include/hw/compat.h
index fd20d0e..98df0dd 100644
--- a/include/hw/compat.h
+++ b/include/hw/compat.h
@@ -6,6 +6,10 @@
         .driver   = "vmxnet3",\
         .property = "x-old-msi-offsets",\
         .value    = "on",\
+    },{\
+        .driver   = "vmxnet3",\
+        .property = "x-disable-pcie",\
+        .value    = "on",\
     },
 
 #define HW_COMPAT_2_4 \
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [Qemu-devel] [PATCH v4 7/7] vmxnet3: Report the Device Serial Number capability
  2015-12-24  7:17 [Qemu-devel] [PATCH v4 0/7] vmxnet3: Fine-tune device capabilities Shmulik Ladkani
                   ` (5 preceding siblings ...)
  2015-12-24  7:17 ` [Qemu-devel] [PATCH v4 6/7] vmxnet3: Introduce 'x-disable-pcie' back-compat property Shmulik Ladkani
@ 2015-12-24  7:17 ` Shmulik Ladkani
  2015-12-28  4:18 ` [Qemu-devel] [PATCH v4 0/7] vmxnet3: Fine-tune device capabilities Jason Wang
  7 siblings, 0 replies; 9+ messages in thread
From: Shmulik Ladkani @ 2015-12-24  7:17 UTC (permalink / raw)
  To: Jason Wang, Dmitry Fleytman; +Cc: idan.brown, qemu-devel, Shmulik Ladkani

Report the DSN extended PCI capability at 0x100.
DSN value is a transformation of device MAC address, as calculated
by VMware virtual hardware.

DSN is reported only if device is pcie.

Signed-off-by: Shmulik Ladkani <shmulik.ladkani@ravellosystems.com>
---
 hw/net/vmxnet3.c | 28 ++++++++++++++++++++++++++--
 1 file changed, 26 insertions(+), 2 deletions(-)

diff --git a/hw/net/vmxnet3.c b/hw/net/vmxnet3.c
index f9cd02b..2e4a5a5 100644
--- a/hw/net/vmxnet3.c
+++ b/hw/net/vmxnet3.c
@@ -49,6 +49,7 @@
     ((s)->compat_flags & VMXNET3_COMPAT_FLAG_OLD_MSI_OFFSETS ? 0x50 : 0x84)
 #define VMXNET3_MSIX_OFFSET(s) \
     ((s)->compat_flags & VMXNET3_COMPAT_FLAG_OLD_MSI_OFFSETS ? 0 : 0x9c)
+#define VMXNET3_DSN_OFFSET     (0x100)
 
 #define VMXNET3_BAR0_IDX      (0)
 #define VMXNET3_BAR1_IDX      (1)
@@ -2224,6 +2225,22 @@ static const MemoryRegionOps b1_ops = {
     },
 };
 
+static uint8_t *vmxnet3_device_serial_num(VMXNET3State *s)
+{
+    static uint64_t dsn_payload;
+    uint8_t *dsnp = (uint8_t *)&dsn_payload;
+
+    dsnp[0] = 0xfe;
+    dsnp[1] = s->conf.macaddr.a[3];
+    dsnp[2] = s->conf.macaddr.a[4];
+    dsnp[3] = s->conf.macaddr.a[5];
+    dsnp[4] = s->conf.macaddr.a[0];
+    dsnp[5] = s->conf.macaddr.a[1];
+    dsnp[6] = s->conf.macaddr.a[2];
+    dsnp[7] = 0xff;
+    return dsnp;
+}
+
 static void vmxnet3_pci_realize(PCIDevice *pci_dev, Error **errp)
 {
     DeviceState *dev = DEVICE(pci_dev);
@@ -2261,8 +2278,15 @@ static void vmxnet3_pci_realize(PCIDevice *pci_dev, Error **errp)
 
     vmxnet3_net_init(s);
 
-    if (pci_is_express(pci_dev) && pci_bus_is_express(pci_dev->bus)) {
-        pcie_endpoint_cap_init(pci_dev, VMXNET3_EXP_EP_OFFSET);
+    if (pci_is_express(pci_dev)) {
+        if (pci_bus_is_express(pci_dev->bus)) {
+            pcie_endpoint_cap_init(pci_dev, VMXNET3_EXP_EP_OFFSET);
+        }
+
+        pcie_add_capability(pci_dev, PCI_EXT_CAP_ID_DSN, 0x1,
+                            VMXNET3_DSN_OFFSET, PCI_EXT_CAP_DSN_SIZEOF);
+        memcpy(pci_dev->config + VMXNET3_DSN_OFFSET + 4,
+               vmxnet3_device_serial_num(s), sizeof(uint64_t));
     }
 
     register_savevm(dev, "vmxnet3-msix", -1, 1,
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [PATCH v4 0/7] vmxnet3: Fine-tune device capabilities
  2015-12-24  7:17 [Qemu-devel] [PATCH v4 0/7] vmxnet3: Fine-tune device capabilities Shmulik Ladkani
                   ` (6 preceding siblings ...)
  2015-12-24  7:17 ` [Qemu-devel] [PATCH v4 7/7] vmxnet3: Report the Device Serial Number capability Shmulik Ladkani
@ 2015-12-28  4:18 ` Jason Wang
  7 siblings, 0 replies; 9+ messages in thread
From: Jason Wang @ 2015-12-28  4:18 UTC (permalink / raw)
  To: Shmulik Ladkani, Dmitry Fleytman; +Cc: idan.brown, qemu-devel



On 12/24/2015 03:17 PM, Shmulik Ladkani wrote:
> Various fixes to what the vmxnet3 device reports in its PCI
> configuration space, in order to be aligned with VMware virtual hardware
> exposed by ESXi/Workstation.
>
> Since v3: Place back-compat flags into HW_COMPAT_2_5 
> Since v2: Introduce the compatability properties in separate patches,
>           per Jason Wang's comment
> Since v1: Added migration compatability, per Jason Wang's comment
>
> Shmulik Ladkani (7):
>   vmxnet3: Change offsets of msi/msix pci capabilities
>   vmxnet3: Change the offset of the MSIX PBA table
>   vmxnet3: Introduce 'x-old-msi-offsets' backword compatability property
>   vmxnet3: coding: Introduce VMXNET3Class
>   vmxnet3: The vmxnet3 device is a PCIE endpoint
>   vmxnet3: Introduce 'x-disable-pcie' backword compatability property
>   vmxnet3: Report the Device Serial Number capability
>
>  hw/net/vmxnet3.c    | 114 +++++++++++++++++++++++++++++++++++++++++++++++++---
>  include/hw/compat.h |  10 ++++-
>  2 files changed, 117 insertions(+), 7 deletions(-)
>

Applied to my -net with a small re-ordering of the patches (patch 7 was
applied before patch 6) for a better bisection behavior for migration
compatibility.

Thanks

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2015-12-28  4:18 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-12-24  7:17 [Qemu-devel] [PATCH v4 0/7] vmxnet3: Fine-tune device capabilities Shmulik Ladkani
2015-12-24  7:17 ` [Qemu-devel] [PATCH v4 1/7] vmxnet3: Change offsets of msi/msix pci capabilities Shmulik Ladkani
2015-12-24  7:17 ` [Qemu-devel] [PATCH v4 2/7] vmxnet3: Change the offset of the MSIX PBA table Shmulik Ladkani
2015-12-24  7:17 ` [Qemu-devel] [PATCH v4 3/7] vmxnet3: Introduce 'x-old-msi-offsets' back-compat property Shmulik Ladkani
2015-12-24  7:17 ` [Qemu-devel] [PATCH v4 4/7] vmxnet3: coding: Introduce VMXNET3Class Shmulik Ladkani
2015-12-24  7:17 ` [Qemu-devel] [PATCH v4 5/7] vmxnet3: The vmxnet3 device is a PCIE endpoint Shmulik Ladkani
2015-12-24  7:17 ` [Qemu-devel] [PATCH v4 6/7] vmxnet3: Introduce 'x-disable-pcie' back-compat property Shmulik Ladkani
2015-12-24  7:17 ` [Qemu-devel] [PATCH v4 7/7] vmxnet3: Report the Device Serial Number capability Shmulik Ladkani
2015-12-28  4:18 ` [Qemu-devel] [PATCH v4 0/7] vmxnet3: Fine-tune device capabilities Jason Wang

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.