|
|
76daa3 |
From 7b3c2e676cd62e947e9b020bba9309a171e94c9e Mon Sep 17 00:00:00 2001
|
|
|
76daa3 |
From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
|
|
|
76daa3 |
Date: Thu, 9 Feb 2017 13:06:18 +0100
|
|
|
76daa3 |
Subject: migcompat/e1000e: Work around 7.3 msi/intr_state field
|
|
|
76daa3 |
|
|
|
76daa3 |
RH-Author: Dr. David Alan Gilbert <dgilbert@redhat.com>
|
|
|
76daa3 |
Message-id: <20170209130618.20328-1-dgilbert@redhat.com>
|
|
|
76daa3 |
Patchwork-id: 73730
|
|
|
76daa3 |
O-Subject: [RHEL-7.4 qemu-kvm-rhev PATCH 1/1] migcompat/e1000e: Work around 7.3 msi/intr_state field
|
|
|
76daa3 |
Bugzilla: 1420216
|
|
|
76daa3 |
RH-Acked-by: Thomas Huth <thuth@redhat.com>
|
|
|
76daa3 |
RH-Acked-by: Xiao Wang <jasowang@redhat.com>
|
|
|
76daa3 |
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
|
76daa3 |
|
|
|
76daa3 |
From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
|
|
|
76daa3 |
|
|
|
76daa3 |
bz: https://bugzilla.redhat.com/show_bug.cgi?id=1420216
|
|
|
76daa3 |
brew: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=12518741
|
|
|
76daa3 |
upstream: No, fixing downstream inconsistency
|
|
|
76daa3 |
|
|
|
76daa3 |
Our 7.3 e1000e model has an 'intr_state' field that's used
|
|
|
76daa3 |
only in the cleanup of msi & msix.
|
|
|
76daa3 |
|
|
|
76daa3 |
e1000e was introducing in 2.7 but was backported to the 2.6 based
|
|
|
76daa3 |
qemu-kvm-rhev 7.3 by backporting 6f3fbe4 and 103916.
|
|
|
76daa3 |
|
|
|
76daa3 |
During the 2.7rc's the migration structure was changed by
|
|
|
76daa3 |
e0af5a0e8 and 66bf7d but we never pulled those into 7.3 which
|
|
|
76daa3 |
removed the 'intr_state' field.
|
|
|
76daa3 |
|
|
|
76daa3 |
For compatibility add the field back (guarded by a property on 7.3)
|
|
|
76daa3 |
and populate the values based on the source MSI state.
|
|
|
76daa3 |
Since the flags were only used for cleanup I don't think
|
|
|
76daa3 |
we need to pay attention to the value we receive.
|
|
|
76daa3 |
|
|
|
76daa3 |
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
|
|
|
76daa3 |
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
|
76daa3 |
(cherry picked from commit 4ed53cd6a385c6dca4a088cf406d03165d17c28d)
|
|
|
76daa3 |
(cherry picked from commit ee177ab97e10a60746ec59032d83aa5bd1a26445)
|
|
|
76daa3 |
---
|
|
|
76daa3 |
hw/net/e1000e.c | 21 +++++++++++++++++++++
|
|
|
76daa3 |
include/hw/compat.h | 4 ++++
|
|
|
76daa3 |
2 files changed, 25 insertions(+)
|
|
|
76daa3 |
|
|
|
76daa3 |
diff --git a/hw/net/e1000e.c b/hw/net/e1000e.c
|
|
|
76daa3 |
index e849f79..f36f211 100644
|
|
|
76daa3 |
--- a/hw/net/e1000e.c
|
|
|
76daa3 |
+++ b/hw/net/e1000e.c
|
|
|
76daa3 |
@@ -73,6 +73,11 @@ typedef struct E1000EState {
|
|
|
76daa3 |
|
|
|
76daa3 |
E1000ECore core;
|
|
|
76daa3 |
|
|
|
76daa3 |
+ /* 7.3 had the intr_state field that was in the original e1000e code
|
|
|
76daa3 |
+ * but that was removed prior to 2.7's release
|
|
|
76daa3 |
+ */
|
|
|
76daa3 |
+ bool redhat_7_3_intr_state_enable;
|
|
|
76daa3 |
+ uint32_t redhat_7_3_intr_state;
|
|
|
76daa3 |
} E1000EState;
|
|
|
76daa3 |
|
|
|
76daa3 |
#define E1000E_MMIO_IDX 0
|
|
|
76daa3 |
@@ -88,6 +93,10 @@ typedef struct E1000EState {
|
|
|
76daa3 |
#define E1000E_MSIX_TABLE (0x0000)
|
|
|
76daa3 |
#define E1000E_MSIX_PBA (0x2000)
|
|
|
76daa3 |
|
|
|
76daa3 |
+/* Values as in RHEL 7.3 build and original upstream */
|
|
|
76daa3 |
+#define RH_E1000E_USE_MSI BIT(0)
|
|
|
76daa3 |
+#define RH_E1000E_USE_MSIX BIT(1)
|
|
|
76daa3 |
+
|
|
|
76daa3 |
static uint64_t
|
|
|
76daa3 |
e1000e_mmio_read(void *opaque, hwaddr addr, unsigned size)
|
|
|
76daa3 |
{
|
|
|
76daa3 |
@@ -299,6 +308,8 @@ e1000e_init_msix(E1000EState *s)
|
|
|
76daa3 |
} else {
|
|
|
76daa3 |
if (!e1000e_use_msix_vectors(s, E1000E_MSIX_VEC_NUM)) {
|
|
|
76daa3 |
msix_uninit(d, &s->msix, &s->msix);
|
|
|
76daa3 |
+ } else {
|
|
|
76daa3 |
+ s->redhat_7_3_intr_state |= RH_E1000E_USE_MSIX;
|
|
|
76daa3 |
}
|
|
|
76daa3 |
}
|
|
|
76daa3 |
}
|
|
|
76daa3 |
@@ -465,6 +476,8 @@ static void e1000e_pci_realize(PCIDevice *pci_dev, Error **errp)
|
|
|
76daa3 |
ret = msi_init(PCI_DEVICE(s), 0xD0, 1, true, false, NULL);
|
|
|
76daa3 |
if (ret) {
|
|
|
76daa3 |
trace_e1000e_msi_init_fail(ret);
|
|
|
76daa3 |
+ } else {
|
|
|
76daa3 |
+ s->redhat_7_3_intr_state |= RH_E1000E_USE_MSI;
|
|
|
76daa3 |
}
|
|
|
76daa3 |
|
|
|
76daa3 |
if (e1000e_add_pm_capability(pci_dev, e1000e_pmrb_offset,
|
|
|
76daa3 |
@@ -586,6 +599,11 @@ static const VMStateDescription e1000e_vmstate_intr_timer = {
|
|
|
76daa3 |
VMSTATE_STRUCT_ARRAY(_f, _s, _num, 0, \
|
|
|
76daa3 |
e1000e_vmstate_intr_timer, E1000IntrDelayTimer)
|
|
|
76daa3 |
|
|
|
76daa3 |
+static bool rhel_7_3_check(void *opaque, int version_id)
|
|
|
76daa3 |
+{
|
|
|
76daa3 |
+ return ((E1000EState *)opaque)->redhat_7_3_intr_state_enable;
|
|
|
76daa3 |
+}
|
|
|
76daa3 |
+
|
|
|
76daa3 |
static const VMStateDescription e1000e_vmstate = {
|
|
|
76daa3 |
.name = "e1000e",
|
|
|
76daa3 |
.version_id = 1,
|
|
|
76daa3 |
@@ -597,6 +615,7 @@ static const VMStateDescription e1000e_vmstate = {
|
|
|
76daa3 |
VMSTATE_MSIX(parent_obj, E1000EState),
|
|
|
76daa3 |
|
|
|
76daa3 |
VMSTATE_UINT32(ioaddr, E1000EState),
|
|
|
76daa3 |
+ VMSTATE_UINT32_TEST(redhat_7_3_intr_state, E1000EState, rhel_7_3_check),
|
|
|
76daa3 |
VMSTATE_UINT32(core.rxbuf_min_shift, E1000EState),
|
|
|
76daa3 |
VMSTATE_UINT8(core.rx_desc_len, E1000EState),
|
|
|
76daa3 |
VMSTATE_UINT32_ARRAY(core.rxbuf_sizes, E1000EState,
|
|
|
76daa3 |
@@ -645,6 +664,8 @@ static PropertyInfo e1000e_prop_disable_vnet,
|
|
|
76daa3 |
|
|
|
76daa3 |
static Property e1000e_properties[] = {
|
|
|
76daa3 |
DEFINE_NIC_PROPERTIES(E1000EState, conf),
|
|
|
76daa3 |
+ DEFINE_PROP_BOOL("__redhat_e1000e_7_3_intr_state", E1000EState,
|
|
|
76daa3 |
+ redhat_7_3_intr_state_enable, false),
|
|
|
76daa3 |
DEFINE_PROP_DEFAULT("disable_vnet_hdr", E1000EState, disable_vnet, false,
|
|
|
76daa3 |
e1000e_prop_disable_vnet, bool),
|
|
|
76daa3 |
DEFINE_PROP_DEFAULT("subsys_ven", E1000EState, subsys_ven,
|
|
|
76daa3 |
diff --git a/include/hw/compat.h b/include/hw/compat.h
|
|
|
76daa3 |
index 6f64306..66320b5 100644
|
|
|
76daa3 |
--- a/include/hw/compat.h
|
|
|
76daa3 |
+++ b/include/hw/compat.h
|
|
|
76daa3 |
@@ -324,6 +324,10 @@
|
|
|
76daa3 |
.driver = "virtio-pci",\
|
|
|
76daa3 |
.property = "x-ignore-backend-features",\
|
|
|
76daa3 |
.value = "on",\
|
|
|
76daa3 |
+ },{ /* HW_COMPAT_RHEL7_3 */ \
|
|
|
76daa3 |
+ .driver = "e1000e",\
|
|
|
76daa3 |
+ .property = "__redhat_e1000e_7_3_intr_state",\
|
|
|
76daa3 |
+ .value = "on",\
|
|
|
76daa3 |
},
|
|
|
76daa3 |
|
|
|
76daa3 |
#endif /* HW_COMPAT_H */
|
|
|
76daa3 |
--
|
|
|
76daa3 |
1.8.3.1
|
|
|
76daa3 |
|