[PATCH RFC v2 12/13] backends/cryptodev-vhost-user: add memory isolation bool
Connor Kite <[email protected]>
| Newsgroups | org.nongnu.qemu-devel,dev.linux.lists.virtio-fs |
|---|---|
| Message-ID | <[email protected]> |
Add a memory_isolation property to CryptoDevBackendVhostUser and add add it as an optional member of CryptodevVhostUserProperties in qapi. This is needed to be able to specify memory isolation for cryptodev-vhost-user objects, and the bool will eventually be passed to vhost_user_init() in a future patch. Signed-off-by: Connor Kite <[email protected]> --- backends/cryptodev-vhost-user.c | 28 +++++++++++++++++++++++++++- qapi/qom.json | 8 +++++++- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/backends/cryptodev-vhost-user.c b/backends/cryptodev-vhost-user.c index fa1f9b76d3..be8631446b 100644 --- a/backends/cryptodev-vhost-user.c +++ b/backends/cryptodev-vhost-user.c @@ -49,6 +49,7 @@ struct CryptoDevBackendVhostUser { CharFrontend chr; char *chr_name; bool opened; + bool memory_isolation; CryptoDevBackendVhost *vhost_crypto[MAX_CRYPTO_QUEUE_NUM]; }; @@ -213,7 +214,7 @@ static void cryptodev_vhost_user_init( } } - if (!vhost_user_init(&s->vhost_user, &s->chr, false, errp)) { + if (!vhost_user_init(&s->vhost_user, &s->chr, s->memory_isolation, errp)) { return; } @@ -392,6 +393,27 @@ static void cryptodev_vhost_user_finalize(Object *obj) g_free(s->chr_name); } +static void cryptodev_vhost_user_set_mem_isolation(Object *obj, bool value, + Error **errp) +{ + CryptoDevBackendVhostUser *s = + CRYPTODEV_BACKEND_VHOST_USER(obj); + + if (s->opened) { + error_setg(errp, "Property 'memory-isolation' can no longer be set"); + } else{ + s->memory_isolation = value; + } +} + +static bool cryptodev_vhost_user_get_mem_isolation(Object *obj, Error **errp) +{ + CryptoDevBackendVhostUser *s = + CRYPTODEV_BACKEND_VHOST_USER(obj); + + return s->memory_isolation; +} + static void cryptodev_vhost_user_class_init(ObjectClass *oc, const void *data) { @@ -407,6 +429,10 @@ cryptodev_vhost_user_class_init(ObjectClass *oc, const void *data) cryptodev_vhost_user_get_chardev, cryptodev_vhost_user_set_chardev); + object_class_property_add_bool(oc, "memory-isolation", + cryptodev_vhost_user_get_mem_isolation, + cryptodev_vhost_user_set_mem_isolation); + } static const TypeInfo cryptodev_vhost_user_info = { diff --git a/qapi/qom.json b/qapi/qom.json index c55776af7d..1024027195 100644 --- a/qapi/qom.json +++ b/qapi/qom.json @@ -350,11 +350,17 @@ # @chardev: the name of a Unix domain socket character device that # connects to the vhost-user server # +# @memory-isolation: disable direct access from vhost-user back-end +# to guest memory. The back-end will instead access data via +# bounce buffers residing in the QEMU virtual address space. +# (default: false) (Since 11.2) +# # Since: 2.12 ## { 'struct': 'CryptodevVhostUserProperties', 'base': 'CryptodevBackendProperties', - 'data': { 'chardev': 'str' }, + 'data': { 'chardev': 'str', + '*memory-isolation': 'bool' }, 'if': 'CONFIG_VHOST_CRYPTO' } ## -- 2.43.0