* [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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).