qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Eric Auger <eric.auger@linaro.org>
To: eric.auger@st.com, christoffer.dall@linaro.org,
	qemu-devel@nongnu.org, agraf@suse.de, pbonzini@redhat.com,
	kim.phillips@freescale.com, a.rigo@virtualopensystems.com,
	manish.jaggi@caviumnetworks.com, joel.schopp@amd.com,
	zhaoshenglong@huawei.com, ard.biesheuvel@linaro.org
Cc: peter.maydell@linaro.org, patches@linaro.org,
	eric.auger@linaro.org, will.deacon@arm.com,
	stuart.yoder@freescale.com, Bharat.Bhushan@freescale.com,
	alex.williamson@redhat.com, a.motakis@virtualopensystems.com,
	kvmarm@lists.cs.columbia.edu
Subject: [Qemu-devel] [PATCH v8 05/19] hw/vfio/pci: add type, name and group fields in VFIODevice
Date: Sun, 30 Nov 2014 18:35:10 +0000	[thread overview]
Message-ID: <1417372524-12936-6-git-send-email-eric.auger@linaro.org> (raw)
In-Reply-To: <1417372524-12936-1-git-send-email-eric.auger@linaro.org>

Add 3 new fields in the VFIODevice struct. Type is set to
VFIO_DEVICE_TYPE_PCI. The type enum value will later be used
to discriminate between VFIO PCI and platform devices. The name is
set to domain:bus:slot:function. Currently used to test whether
the device already is attached to the group. Later on, the name
will be used to simplify all traces. The group is simply moved
from VFIOPCIDevice to VFIODevice.

Signed-off-by: Eric Auger <eric.auger@linaro.org>
---
 hw/vfio/pci.c | 27 ++++++++++++++++++---------
 1 file changed, 18 insertions(+), 9 deletions(-)

diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c
index cd9ce4e..157e1a5 100644
--- a/hw/vfio/pci.c
+++ b/hw/vfio/pci.c
@@ -48,6 +48,10 @@
 #define VFIO_ALLOW_KVM_MSI 1
 #define VFIO_ALLOW_KVM_MSIX 1
 
+enum {
+    VFIO_DEVICE_TYPE_PCI = 0,
+};
+
 struct VFIOPCIDevice;
 
 typedef struct VFIOQuirk {
@@ -186,7 +190,10 @@ typedef struct VFIOMSIXInfo {
 } VFIOMSIXInfo;
 
 typedef struct VFIODevice {
+    struct VFIOGroup *group;
+    char *name;
     int fd;
+    int type;
 } VFIODevice;
 
 typedef struct VFIOPCIDevice {
@@ -208,7 +215,6 @@ typedef struct VFIOPCIDevice {
     VFIOVGA vga; /* 0xa0000, 0x3b0, 0x3c0 */
     PCIHostDeviceAddress host;
     QLIST_ENTRY(VFIOPCIDevice) next;
-    struct VFIOGroup *group;
     EventNotifier err_notifier;
     uint32_t features;
 #define VFIO_FEATURE_ENABLE_VGA_BIT 0
@@ -3924,7 +3930,7 @@ static int vfio_get_device(VFIOGroup *group, const char *name,
     }
 
     vdev->vbasedev.fd = ret;
-    vdev->group = group;
+    vdev->vbasedev.group = group;
     QLIST_INSERT_HEAD(&group->device_list, vdev, next);
 
     /* Sanity check device */
@@ -4054,7 +4060,7 @@ static int vfio_get_device(VFIOGroup *group, const char *name,
 error:
     if (ret) {
         QLIST_REMOVE(vdev, next);
-        vdev->group = NULL;
+        vdev->vbasedev.group = NULL;
         close(vdev->vbasedev.fd);
     }
     return ret;
@@ -4063,9 +4069,10 @@ error:
 static void vfio_put_device(VFIOPCIDevice *vdev)
 {
     QLIST_REMOVE(vdev, next);
-    vdev->group = NULL;
+    vdev->vbasedev.group = NULL;
     trace_vfio_put_device(vdev->vbasedev.fd);
     close(vdev->vbasedev.fd);
+    g_free(vdev->vbasedev.name);
     if (vdev->msix) {
         g_free(vdev->msix);
         vdev->msix = NULL;
@@ -4197,6 +4204,11 @@ static int vfio_initfn(PCIDevice *pdev)
         return -errno;
     }
 
+    vdev->vbasedev.type = VFIO_DEVICE_TYPE_PCI;
+    g_strdup_printf(vdev->vbasedev.name, "%04x:%02x:%02x.%01x",
+            vdev->host.domain, vdev->host.bus, vdev->host.slot,
+            vdev->host.function);
+
     strncat(path, "iommu_group", sizeof(path) - strlen(path) - 1);
 
     len = readlink(path, iommu_group_path, sizeof(path));
@@ -4227,10 +4239,7 @@ static int vfio_initfn(PCIDevice *pdev)
             vdev->host.function);
 
     QLIST_FOREACH(pvdev, &group->device_list, next) {
-        if (pvdev->host.domain == vdev->host.domain &&
-            pvdev->host.bus == vdev->host.bus &&
-            pvdev->host.slot == vdev->host.slot &&
-            pvdev->host.function == vdev->host.function) {
+        if (strcmp(pvdev->vbasedev.name, vdev->vbasedev.name) == 0) {
 
             error_report("vfio: error: device %s is already attached", path);
             vfio_put_group(group);
@@ -4333,7 +4342,7 @@ out_put:
 static void vfio_exitfn(PCIDevice *pdev)
 {
     VFIOPCIDevice *vdev = DO_UPCAST(VFIOPCIDevice, pdev, pdev);
-    VFIOGroup *group = vdev->group;
+    VFIOGroup *group = vdev->vbasedev.group;
 
     vfio_unregister_err_notifier(vdev);
     pci_device_set_intx_routing_notifier(&vdev->pdev, NULL);
-- 
1.8.3.2

  parent reply	other threads:[~2014-11-30 18:35 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-11-30 18:35 [Qemu-devel] [PATCH v8 00/19] KVM platform device passthrough Eric Auger
2014-11-30 18:35 ` [Qemu-devel] [PATCH v8 01/19] vfio: move hw/misc/vfio.c to hw/vfio/pci.c Move vfio.h into include/hw/vfio Eric Auger
2014-11-30 18:35 ` [Qemu-devel] [PATCH v8 02/19] hw/vfio/pci: Rename VFIODevice into VFIOPCIDevice Eric Auger
2014-11-30 18:35 ` [Qemu-devel] [PATCH v8 03/19] hw/vfio/pci: generalize mask/unmask to any IRQ index Eric Auger
2014-11-30 18:35 ` [Qemu-devel] [PATCH v8 04/19] hw/vfio/pci: introduce minimalist VFIODevice with fd Eric Auger
2014-11-30 18:35 ` Eric Auger [this message]
2014-11-30 18:35 ` [Qemu-devel] [PATCH v8 06/19] hw/vfio/pci: handle reset at VFIODevice Eric Auger
2014-11-30 18:35 ` [Qemu-devel] [PATCH v8 07/19] hw/vfio/pci: Introduce VFIORegion Eric Auger
2014-11-30 18:35 ` [Qemu-devel] [PATCH v8 08/19] hw/vfio/pci: split vfio_get_device Eric Auger
2014-11-30 18:35 ` [Qemu-devel] [PATCH v8 09/19] hw/vfio/pci: rename group_list into vfio_group_list Eric Auger
2014-11-30 18:35 ` [Qemu-devel] [PATCH v8 10/19] hw/vfio/pci: use name field in format strings Eric Auger
2014-11-30 18:35 ` [Qemu-devel] [PATCH v8 11/19] hw/vfio: create common module Eric Auger
2014-11-30 18:35 ` [Qemu-devel] [PATCH v8 12/19] hw/vfio/platform: add vfio-platform support Eric Auger
2014-11-30 18:35 ` [Qemu-devel] [PATCH v8 13/19] hw/vfio: calxeda xgmac device Eric Auger
2014-11-30 18:35 ` [Qemu-devel] [PATCH v8 14/19] hw/arm/virt: add support for VFIO devices Eric Auger
2014-11-30 18:35 ` [Qemu-devel] [PATCH v8 15/19] hw/arm/sysbus-fdt: enable vfio-calxeda-xgmac dynamic instantiation Eric Auger
2014-11-30 18:35 ` [Qemu-devel] [PATCH v8 16/19] hw/vfio/platform: Add irqfd support Eric Auger
2014-11-30 18:35 ` [Qemu-devel] [PATCH v8 17/19] linux-headers: Update KVM headers from linux-next tag ToBeFilled Eric Auger
2014-11-30 18:35 ` [Qemu-devel] [PATCH v8 18/19] hw/vfio/common: vfio_kvm_device_fd moved in the common header Eric Auger
2014-11-30 18:35 ` [Qemu-devel] [PATCH v8 19/19] hw/vfio/platform: add forwarded irq support Eric Auger
2014-12-08 17:04 ` [Qemu-devel] [PATCH v8 00/19] KVM platform device passthrough Alex Williamson
2014-12-08 17:35   ` Eric Auger

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=1417372524-12936-6-git-send-email-eric.auger@linaro.org \
    --to=eric.auger@linaro.org \
    --cc=Bharat.Bhushan@freescale.com \
    --cc=a.motakis@virtualopensystems.com \
    --cc=a.rigo@virtualopensystems.com \
    --cc=agraf@suse.de \
    --cc=alex.williamson@redhat.com \
    --cc=ard.biesheuvel@linaro.org \
    --cc=christoffer.dall@linaro.org \
    --cc=eric.auger@st.com \
    --cc=joel.schopp@amd.com \
    --cc=kim.phillips@freescale.com \
    --cc=kvmarm@lists.cs.columbia.edu \
    --cc=manish.jaggi@caviumnetworks.com \
    --cc=patches@linaro.org \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=stuart.yoder@freescale.com \
    --cc=will.deacon@arm.com \
    --cc=zhaoshenglong@huawei.com \
    /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).