qemu-arm
[Top][All Lists]
Advanced

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

Re: [PATCH v4 1/3] qdev: Add a granule_mode property


From: Philippe Mathieu-Daudé
Subject: Re: [PATCH v4 1/3] qdev: Add a granule_mode property
Date: Fri, 23 Feb 2024 12:39:40 +0100
User-agent: Mozilla Thunderbird

On 23/2/24 09:30, Eric Auger wrote:
Hi Philippe,

On 2/23/24 08:52, Philippe Mathieu-Daudé wrote:
Hi Eric,

On 23/2/24 08:27, Eric Auger wrote:
Introduce a new enum type property allowing to set an
IOMMU granule. Values are 4K, 8K, 16K, 64K and host.
This latter indicates the vIOMMU granule will match
the host page size.

A subsequent patch will add such a property to the
virtio-iommu device.

Signed-off-by: Eric Auger <eric.auger@redhat.com>

---

v3 -> v4:
- Add 8K
---
   include/hw/qdev-properties-system.h |  3 +++
   include/hw/virtio/virtio-iommu.h    | 11 +++++++++++
   hw/core/qdev-properties-system.c    | 15 +++++++++++++++
   hw/virtio/virtio-iommu.c            | 11 +++++++++++
   4 files changed, 40 insertions(+)


diff --git a/include/hw/virtio/virtio-iommu.h
b/include/hw/virtio/virtio-iommu.h
index 5fbe4677c2..e22327548f 100644
--- a/include/hw/virtio/virtio-iommu.h
+++ b/include/hw/virtio/virtio-iommu.h
@@ -31,6 +31,17 @@ OBJECT_DECLARE_SIMPLE_TYPE(VirtIOIOMMU, VIRTIO_IOMMU)
     #define TYPE_VIRTIO_IOMMU_MEMORY_REGION "virtio-iommu-memory-region"
   +typedef enum GranuleMode {
+    GRANULE_MODE_4K,
+    GRANULE_MODE_8K,
+    GRANULE_MODE_16K,
+    GRANULE_MODE_64K,
+    GRANULE_MODE_HOST,
+    GRANULE_MODE__MAX,
+} GranuleMode;
+
+extern const QEnumLookup GranuleMode_lookup;

Aren't this, ...

diff --git a/hw/virtio/virtio-iommu.c b/hw/virtio/virtio-iommu.c
index 2ec5ef3cd1..a9bdc03d12 100644
--- a/hw/virtio/virtio-iommu.c
+++ b/hw/virtio/virtio-iommu.c
@@ -44,6 +44,17 @@
   #define VIOMMU_DEFAULT_QUEUE_SIZE 256
   #define VIOMMU_PROBE_SIZE 512
   +const QEnumLookup GranuleMode_lookup = {
+    .array = (const char *const[]) {
+        [GRANULE_MODE_4K]   = "4K",
+        [GRANULE_MODE_8K]   = "8K",
+        [GRANULE_MODE_16K]  = "16K",
+        [GRANULE_MODE_64K]  = "64K",
+        [GRANULE_MODE_HOST] = "host",
+    },
+    .size = GRANULE_MODE__MAX
+};
... and this supposed to be QAPI generated?
If I remove both, it does not compile. How do you make it generated?

The following:

-- >8 --
diff --git a/qapi/virtio.json b/qapi/virtio.json
index 19c7c36e36..c8d38d23e2 100644
--- a/qapi/virtio.json
+++ b/qapi/virtio.json
@@ -959 +959,19 @@
   'data': { 'unused-iothread-vq-mapping': ['IOThreadVirtQueueMapping'] } }
+
+##
+# @GranuleMode:
+#
+# @4k: granule page size of 4KiB
+#
+# @8k: granule page size of 8KiB
+#
+# @16k: granule page size of 16KiB
+#
+# @64k: granule page size of 64KiB
+#
+# @host: granule matches the host page size
+#
+# Since: 9.0
+##
+{ 'enum': 'GranuleMode',
+  'data': [ '4k', '8k', '16k', '64k', 'host' ] }
---

generates in "qapi/qapi-types-virtio.h":

---
typedef enum GranuleMode {
    GRANULE_MODE_4K,
    GRANULE_MODE_8K,
    GRANULE_MODE_16K,
    GRANULE_MODE_64K,
    GRANULE_MODE_HOST,
    GRANULE_MODE__MAX,
} GranuleMode;

#define GranuleMode_str(val) \
    qapi_enum_lookup(&GranuleMode_lookup, (val))

extern const QEnumLookup GranuleMode_lookup;
---



reply via email to

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