From: Zhou Jie <zhoujie2011@cn.fujitsu.com>
To: qemu-devel@nongnu.org, alex.williamson@redhat.com
Cc: izumi.taku@jp.fujitsu.com, mst@redhat.com,
caoj.fnst@cn.fujitsu.com, Chen Fan <chen.fan.fnst@cn.fujitsu.com>
Subject: [Qemu-devel] [PATCH 07/12] pci: add a pci_function_is_valid callback to check function if valid
Date: Wed, 18 May 2016 11:31:05 +0800 [thread overview]
Message-ID: <1463542270-3409-8-git-send-email-zhoujie2011@cn.fujitsu.com> (raw)
In-Reply-To: <1463542270-3409-1-git-send-email-zhoujie2011@cn.fujitsu.com>
From: Chen Fan <chen.fan.fnst@cn.fujitsu.com>
PCI hotplug requires that function 0 is added last to close the
slot. Since vfio supporting AER, we require that the VM bus
contains the same set of devices as the host bus to support AER,
we can perform an AER validation test whenever a function 0 in
the VM is hot-added.
Signed-off-by: Chen Fan <chen.fan.fnst@cn.fujitsu.com>
---
hw/pci/pci.c | 32 ++++++++++++++++++++++++++++++++
include/hw/pci/pci.h | 1 +
2 files changed, 33 insertions(+)
diff --git a/hw/pci/pci.c b/hw/pci/pci.c
index bb605ef..acd48eb 100644
--- a/hw/pci/pci.c
+++ b/hw/pci/pci.c
@@ -1841,6 +1841,22 @@ PCIDevice *pci_find_device(PCIBus *bus, int bus_num, uint8_t devfn)
return bus->devices[devfn];
}
+static void pci_function_is_valid(PCIBus *bus, PCIDevice *d, void *opaque)
+{
+ PCIDeviceClass *pc = PCI_DEVICE_GET_CLASS(d);
+ Error **errp = opaque;
+
+ if (*errp) {
+ return;
+ }
+
+ if (!pc->is_valid_func) {
+ return;
+ }
+
+ pc->is_valid_func(d, errp);
+}
+
static void pci_qdev_realize(DeviceState *qdev, Error **errp)
{
PCIDevice *pci_dev = (PCIDevice *)qdev;
@@ -1883,6 +1899,22 @@ static void pci_qdev_realize(DeviceState *qdev, Error **errp)
pci_qdev_unrealize(DEVICE(pci_dev), NULL);
return;
}
+
+ /*
+ * If the function number is 0, indicate the closure of the slot.
+ * then we get the chance to check all functions on same device
+ * if valid.
+ */
+ if (DEVICE(pci_dev)->hotplugged &&
+ pci_get_function_0(pci_dev) == pci_dev) {
+ pci_for_each_device(bus, pci_bus_num(bus),
+ pci_function_is_valid, &local_err);
+ if (local_err) {
+ error_propagate(errp, local_err);
+ pci_qdev_unrealize(DEVICE(pci_dev), NULL);
+ return;
+ }
+ }
}
static void pci_default_realize(PCIDevice *dev, Error **errp)
diff --git a/include/hw/pci/pci.h b/include/hw/pci/pci.h
index ef6ba51..848fa7b 100644
--- a/include/hw/pci/pci.h
+++ b/include/hw/pci/pci.h
@@ -197,6 +197,7 @@ typedef struct PCIDeviceClass {
void (*realize)(PCIDevice *dev, Error **errp);
int (*init)(PCIDevice *dev);/* TODO convert to realize() and remove */
+ void (*is_valid_func)(PCIDevice *dev, Error **errp);
PCIUnregisterFunc *exit;
PCIConfigReadFunc *config_read;
PCIConfigWriteFunc *config_write;
--
1.8.3.1
next prev parent reply other threads:[~2016-05-18 3:33 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-18 3:30 [Qemu-devel] [PATCH v7 00/12] vfio-pci: pass the aer error to guest Zhou Jie
2016-05-18 3:30 ` [Qemu-devel] [PATCH 01/12] vfio: extract vfio_get_hot_reset_info as a single function Zhou Jie
2016-05-18 3:31 ` [Qemu-devel] [PATCH 02/12] vfio: squeeze out vfio_pci_do_hot_reset for support bus reset Zhou Jie
2016-05-18 3:31 ` [Qemu-devel] [PATCH 03/12] vfio: add pcie extended capability support Zhou Jie
2016-06-28 20:04 ` Laszlo Ersek
2016-05-18 3:31 ` [Qemu-devel] [PATCH 04/12] vfio: add aer support for vfio device Zhou Jie
2016-05-18 3:31 ` [Qemu-devel] [PATCH 05/12] vfio: refine function vfio_pci_host_match Zhou Jie
2016-05-18 3:31 ` [Qemu-devel] [PATCH 06/12] vfio: add check host bus reset is support or not Zhou Jie
2016-05-18 3:31 ` Zhou Jie [this message]
2016-05-18 3:31 ` [Qemu-devel] [PATCH 08/12] vfio: add check aer functionality for hotplug device Zhou Jie
2016-05-18 3:31 ` [Qemu-devel] [PATCH 09/12] vfio: vote the function 0 to do host bus reset when aer occurred Zhou Jie
2016-05-18 3:31 ` [Qemu-devel] [PATCH 10/12] vfio-pci: pass the aer error to guest Zhou Jie
2016-05-18 3:31 ` [Qemu-devel] [PATCH 11/12] vfio: register aer resume notification handler for aer resume Zhou Jie
2016-05-18 18:26 ` Alex Williamson
2016-05-19 1:49 ` Zhou Jie
2016-05-19 2:18 ` Alex Williamson
2016-05-19 2:41 ` Zhou Jie
2016-05-19 2:41 ` Zhou Jie
2016-05-25 6:23 ` Zhou Jie
2016-05-25 14:06 ` Zhou Jie
2016-05-18 3:31 ` [Qemu-devel] [PATCH 12/12] vfio: add 'aer' property to expose aercap Zhou Jie
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1463542270-3409-8-git-send-email-zhoujie2011@cn.fujitsu.com \
--to=zhoujie2011@cn.fujitsu.com \
--cc=alex.williamson@redhat.com \
--cc=caoj.fnst@cn.fujitsu.com \
--cc=chen.fan.fnst@cn.fujitsu.com \
--cc=izumi.taku@jp.fujitsu.com \
--cc=mst@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).