qemu-s390x
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [qemu-s390x] [PATCH v2 2/6] s390x/vfio: ap: Use the APdevice as a ch


From: Pierre Morel
Subject: Re: [qemu-s390x] [PATCH v2 2/6] s390x/vfio: ap: Use the APdevice as a child of the APBus
Date: Thu, 29 Nov 2018 13:36:31 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.2.1

On 29/11/2018 12:45, Cornelia Huck wrote:
On Thu, 22 Nov 2018 17:35:51 +0100
Pierre Morel <address@hidden> wrote:

Two good reasons to use the base device as a child of the
AP BUS:
- We can easily find the device without traversing the qtree.
- In case we have different APdevice instantiation, VFIO with
   interception or emulation, we will need the APDevice as
   a parent device.

Signed-off-by: Pierre Morel <address@hidden>
---
  hw/s390x/ap-device.c         | 22 ++++++++++++++++++++++
  hw/vfio/ap.c                 | 16 ++++++----------
  include/hw/s390x/ap-device.h |  2 ++
  3 files changed, 30 insertions(+), 10 deletions(-)

diff --git a/hw/s390x/ap-device.c b/hw/s390x/ap-device.c
index f5ac8db..554d5aa 100644
--- a/hw/s390x/ap-device.c
+++ b/hw/s390x/ap-device.c
@@ -11,13 +11,35 @@
  #include "qemu/module.h"
  #include "qapi/error.h"
  #include "hw/qdev.h"
+#include "hw/s390x/ap-bridge.h"
  #include "hw/s390x/ap-device.h"
+APDevice *s390_get_ap(void)
+{
+    static DeviceState *apb;
+    BusState *bus;
+    BusChild *child;
+    static APDevice *ap;
+
+    if (ap) {
+        return ap;
+    }
+
+    apb = s390_get_ap_bridge();
+    /* We have only a single child on the BUS */

So, there'll never a mixed environment? Or would that have a 'hybrid'
ap device?

Not for now, we only support VFIOAPDevice and we can only have one single VFIO device per guest.


+    bus = qdev_get_child_bus(apb, TYPE_AP_BUS);
+    child = QTAILQ_FIRST(&bus->children);
+    assert(child != NULL);
+    ap = DO_UPCAST(APDevice, parent_obj, child->child);
+    return ap;
+}
+
  static void ap_class_init(ObjectClass *klass, void *data)
  {
      DeviceClass *dc = DEVICE_CLASS(klass);
dc->desc = "AP device class";
+    dc->bus_type = TYPE_AP_BUS;
      dc->hotpluggable = false;
  }
diff --git a/hw/vfio/ap.c b/hw/vfio/ap.c
index 65de952..94e5a1a 100644
--- a/hw/vfio/ap.c
+++ b/hw/vfio/ap.c
@@ -35,9 +35,6 @@ typedef struct VFIOAPDevice {
      VFIODevice vdev;
  } VFIOAPDevice;
-#define VFIO_AP_DEVICE(obj) \
-        OBJECT_CHECK(VFIOAPDevice, (obj), VFIO_AP_DEVICE_TYPE)

Hm?

We do not need this anymore.
We used to plug directly the VFIOAPDevice on the BUS but the APDevice is now plugged on the APBUS.

The VFIOAPDevice is plugged on the APBus through its APDevice.

This will allow to have different APDevice childs using APDevice features.
Usable for interception or emulation.



-
  static void vfio_ap_compute_needs_reset(VFIODevice *vdev)
  {
      vdev->needs_reset = false;



--
Pierre Morel
Linux/KVM/QEMU in Böblingen - Germany




reply via email to

[Prev in Thread] Current Thread [Next in Thread]