Message ID | 48d0f7214036d48b1f70b90a8c4a6c2a46363ee9.1651586203.git.jag.raman@oracle.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | vfio-user server in QEMU | expand |
Jagannathan Raman <jag.raman@oracle.com> writes: > Define vfio-user object which is remote process server for QEMU. Setup > object initialization functions and properties necessary to instantiate > the object > > Signed-off-by: Elena Ufimtseva <elena.ufimtseva@oracle.com> > Signed-off-by: John G Johnson <john.g.johnson@oracle.com> > Signed-off-by: Jagannathan Raman <jag.raman@oracle.com> > --- > qapi/qom.json | 20 +++- > include/hw/remote/machine.h | 2 + > hw/remote/machine.c | 27 +++++ > hw/remote/vfio-user-obj.c | 210 ++++++++++++++++++++++++++++++++++++ > MAINTAINERS | 1 + > hw/remote/meson.build | 1 + > hw/remote/trace-events | 3 + > 7 files changed, 262 insertions(+), 2 deletions(-) > create mode 100644 hw/remote/vfio-user-obj.c > > diff --git a/qapi/qom.json b/qapi/qom.json > index eeb5395ff3..582def0522 100644 > --- a/qapi/qom.json > +++ b/qapi/qom.json > @@ -703,6 +703,20 @@ > { 'struct': 'RemoteObjectProperties', > 'data': { 'fd': 'str', 'devid': 'str' } } > > +## > +# @VfioUserServerProperties: > +# > +# Properties for x-vfio-user-server objects. > +# > +# @socket: socket to be used by the libvfio-user library > +# > +# @device: the id of the device to be emulated at the server Suggest "the ID", because "id" is not a word. What kind of ID is this? The kind set with -device id=...? > +# > +# Since: 7.1 > +## > +{ 'struct': 'VfioUserServerProperties', > + 'data': { 'socket': 'SocketAddress', 'device': 'str' } } > + > ## > # @RngProperties: > # > @@ -842,7 +856,8 @@ > 'tls-creds-psk', > 'tls-creds-x509', > 'tls-cipher-suites', > - { 'name': 'x-remote-object', 'features': [ 'unstable' ] } > + { 'name': 'x-remote-object', 'features': [ 'unstable' ] }, > + { 'name': 'x-vfio-user-server', 'features': [ 'unstable' ] } > ] } > > ## > @@ -905,7 +920,8 @@ > 'tls-creds-psk': 'TlsCredsPskProperties', > 'tls-creds-x509': 'TlsCredsX509Properties', > 'tls-cipher-suites': 'TlsCredsProperties', > - 'x-remote-object': 'RemoteObjectProperties' > + 'x-remote-object': 'RemoteObjectProperties', > + 'x-vfio-user-server': 'VfioUserServerProperties' > } } > > ## [...]
> On May 4, 2022, at 7:45 AM, Markus Armbruster <armbru@redhat.com> wrote: > > Jagannathan Raman <jag.raman@oracle.com> writes: > >> Define vfio-user object which is remote process server for QEMU. Setup >> object initialization functions and properties necessary to instantiate >> the object >> >> Signed-off-by: Elena Ufimtseva <elena.ufimtseva@oracle.com> >> Signed-off-by: John G Johnson <john.g.johnson@oracle.com> >> Signed-off-by: Jagannathan Raman <jag.raman@oracle.com> >> --- >> qapi/qom.json | 20 +++- >> include/hw/remote/machine.h | 2 + >> hw/remote/machine.c | 27 +++++ >> hw/remote/vfio-user-obj.c | 210 ++++++++++++++++++++++++++++++++++++ >> MAINTAINERS | 1 + >> hw/remote/meson.build | 1 + >> hw/remote/trace-events | 3 + >> 7 files changed, 262 insertions(+), 2 deletions(-) >> create mode 100644 hw/remote/vfio-user-obj.c >> >> diff --git a/qapi/qom.json b/qapi/qom.json >> index eeb5395ff3..582def0522 100644 >> --- a/qapi/qom.json >> +++ b/qapi/qom.json >> @@ -703,6 +703,20 @@ >> { 'struct': 'RemoteObjectProperties', >> 'data': { 'fd': 'str', 'devid': 'str' } } >> >> +## >> +# @VfioUserServerProperties: >> +# >> +# Properties for x-vfio-user-server objects. >> +# >> +# @socket: socket to be used by the libvfio-user library >> +# >> +# @device: the id of the device to be emulated at the server > > Suggest "the ID", because "id" is not a word. > > What kind of ID is this? The kind set with -device id=...? Yes, it’s the “id” sub-option of the “-device” option. Will update this comment. Thank you! -- Jag > >> +# >> +# Since: 7.1 >> +## >> +{ 'struct': 'VfioUserServerProperties', >> + 'data': { 'socket': 'SocketAddress', 'device': 'str' } } >> + >> ## >> # @RngProperties: >> # >> @@ -842,7 +856,8 @@ >> 'tls-creds-psk', >> 'tls-creds-x509', >> 'tls-cipher-suites', >> - { 'name': 'x-remote-object', 'features': [ 'unstable' ] } >> + { 'name': 'x-remote-object', 'features': [ 'unstable' ] }, >> + { 'name': 'x-vfio-user-server', 'features': [ 'unstable' ] } >> ] } >> >> ## >> @@ -905,7 +920,8 @@ >> 'tls-creds-psk': 'TlsCredsPskProperties', >> 'tls-creds-x509': 'TlsCredsX509Properties', >> 'tls-cipher-suites': 'TlsCredsProperties', >> - 'x-remote-object': 'RemoteObjectProperties' >> + 'x-remote-object': 'RemoteObjectProperties', >> + 'x-vfio-user-server': 'VfioUserServerProperties' >> } } >> >> ## > > [...]
Jag Raman <jag.raman@oracle.com> writes: >> On May 4, 2022, at 7:45 AM, Markus Armbruster <armbru@redhat.com> wrote: >> >> Jagannathan Raman <jag.raman@oracle.com> writes: >> >>> Define vfio-user object which is remote process server for QEMU. Setup >>> object initialization functions and properties necessary to instantiate >>> the object >>> >>> Signed-off-by: Elena Ufimtseva <elena.ufimtseva@oracle.com> >>> Signed-off-by: John G Johnson <john.g.johnson@oracle.com> >>> Signed-off-by: Jagannathan Raman <jag.raman@oracle.com> >>> --- >>> qapi/qom.json | 20 +++- >>> include/hw/remote/machine.h | 2 + >>> hw/remote/machine.c | 27 +++++ >>> hw/remote/vfio-user-obj.c | 210 ++++++++++++++++++++++++++++++++++++ >>> MAINTAINERS | 1 + >>> hw/remote/meson.build | 1 + >>> hw/remote/trace-events | 3 + >>> 7 files changed, 262 insertions(+), 2 deletions(-) >>> create mode 100644 hw/remote/vfio-user-obj.c >>> >>> diff --git a/qapi/qom.json b/qapi/qom.json >>> index eeb5395ff3..582def0522 100644 >>> --- a/qapi/qom.json >>> +++ b/qapi/qom.json >>> @@ -703,6 +703,20 @@ >>> { 'struct': 'RemoteObjectProperties', >>> 'data': { 'fd': 'str', 'devid': 'str' } } >>> >>> +## >>> +# @VfioUserServerProperties: >>> +# >>> +# Properties for x-vfio-user-server objects. >>> +# >>> +# @socket: socket to be used by the libvfio-user library >>> +# >>> +# @device: the id of the device to be emulated at the server >> >> Suggest "the ID", because "id" is not a word. >> >> What kind of ID is this? The kind set with -device id=...? > > Yes, it’s the “id” sub-option of the “-device” option. Will update this comment. I was just double-checking. I think the comment is okay with "the ID". > Thank you! You're welcome!
On Wed, May 04, 2022 at 01:45:07PM +0200, Markus Armbruster wrote: > Jagannathan Raman <jag.raman@oracle.com> writes: > > > Define vfio-user object which is remote process server for QEMU. Setup > > object initialization functions and properties necessary to instantiate > > the object > > > > Signed-off-by: Elena Ufimtseva <elena.ufimtseva@oracle.com> > > Signed-off-by: John G Johnson <john.g.johnson@oracle.com> > > Signed-off-by: Jagannathan Raman <jag.raman@oracle.com> > > --- > > qapi/qom.json | 20 +++- > > include/hw/remote/machine.h | 2 + > > hw/remote/machine.c | 27 +++++ > > hw/remote/vfio-user-obj.c | 210 ++++++++++++++++++++++++++++++++++++ > > MAINTAINERS | 1 + > > hw/remote/meson.build | 1 + > > hw/remote/trace-events | 3 + > > 7 files changed, 262 insertions(+), 2 deletions(-) > > create mode 100644 hw/remote/vfio-user-obj.c > > > > diff --git a/qapi/qom.json b/qapi/qom.json > > index eeb5395ff3..582def0522 100644 > > --- a/qapi/qom.json > > +++ b/qapi/qom.json > > @@ -703,6 +703,20 @@ > > { 'struct': 'RemoteObjectProperties', > > 'data': { 'fd': 'str', 'devid': 'str' } } > > > > +## > > +# @VfioUserServerProperties: > > +# > > +# Properties for x-vfio-user-server objects. > > +# > > +# @socket: socket to be used by the libvfio-user library > > +# > > +# @device: the id of the device to be emulated at the server > > Suggest "the ID", because "id" is not a word. id (noun) 1. In Freudian theory, the division of the psyche that is totally unconscious and serves as the source of instinctual impulses and demands for immediate satisfaction of primitive needs. 2. In Weismann's doctrine of germ-plasm, the substance of inheritance or the bearer , in the germ-plasm, of the hereditary qualities of a single complete organism. 3. In the somatic idioplasm of the hereditary qualities of a group of cells or a part of a developing embryo or growing organism. https://duckduckgo.com/?q=define+id&ia=definition :D :D :D Stefan
Stefan Hajnoczi <stefanha@redhat.com> writes: > On Wed, May 04, 2022 at 01:45:07PM +0200, Markus Armbruster wrote: >> Jagannathan Raman <jag.raman@oracle.com> writes: >> >> > Define vfio-user object which is remote process server for QEMU. Setup >> > object initialization functions and properties necessary to instantiate >> > the object >> > >> > Signed-off-by: Elena Ufimtseva <elena.ufimtseva@oracle.com> >> > Signed-off-by: John G Johnson <john.g.johnson@oracle.com> >> > Signed-off-by: Jagannathan Raman <jag.raman@oracle.com> >> > --- >> > qapi/qom.json | 20 +++- >> > include/hw/remote/machine.h | 2 + >> > hw/remote/machine.c | 27 +++++ >> > hw/remote/vfio-user-obj.c | 210 ++++++++++++++++++++++++++++++++++++ >> > MAINTAINERS | 1 + >> > hw/remote/meson.build | 1 + >> > hw/remote/trace-events | 3 + >> > 7 files changed, 262 insertions(+), 2 deletions(-) >> > create mode 100644 hw/remote/vfio-user-obj.c >> > >> > diff --git a/qapi/qom.json b/qapi/qom.json >> > index eeb5395ff3..582def0522 100644 >> > --- a/qapi/qom.json >> > +++ b/qapi/qom.json >> > @@ -703,6 +703,20 @@ >> > { 'struct': 'RemoteObjectProperties', >> > 'data': { 'fd': 'str', 'devid': 'str' } } >> > >> > +## >> > +# @VfioUserServerProperties: >> > +# >> > +# Properties for x-vfio-user-server objects. >> > +# >> > +# @socket: socket to be used by the libvfio-user library >> > +# >> > +# @device: the id of the device to be emulated at the server >> >> Suggest "the ID", because "id" is not a word. > > id (noun) > 1. In Freudian theory, the division of the psyche that is totally unconscious and serves as the source of instinctual impulses and demands for immediate satisfaction of primitive needs. > 2. In Weismann's doctrine of germ-plasm, the substance of inheritance or the bearer , in the germ-plasm, of the hereditary qualities of a single complete organism. > 3. In the somatic idioplasm of the hereditary qualities of a group of cells or a part of a developing embryo or growing organism. > https://duckduckgo.com/?q=define+id&ia=definition > > :D :D :D I stand corrected! %-)
> On May 5, 2022, at 11:22 AM, Markus Armbruster <armbru@redhat.com> wrote: > > Stefan Hajnoczi <stefanha@redhat.com> writes: > >> On Wed, May 04, 2022 at 01:45:07PM +0200, Markus Armbruster wrote: >>> Jagannathan Raman <jag.raman@oracle.com> writes: >>> >>>> Define vfio-user object which is remote process server for QEMU. Setup >>>> object initialization functions and properties necessary to instantiate >>>> the object >>>> >>>> Signed-off-by: Elena Ufimtseva <elena.ufimtseva@oracle.com> >>>> Signed-off-by: John G Johnson <john.g.johnson@oracle.com> >>>> Signed-off-by: Jagannathan Raman <jag.raman@oracle.com> >>>> --- >>>> qapi/qom.json | 20 +++- >>>> include/hw/remote/machine.h | 2 + >>>> hw/remote/machine.c | 27 +++++ >>>> hw/remote/vfio-user-obj.c | 210 ++++++++++++++++++++++++++++++++++++ >>>> MAINTAINERS | 1 + >>>> hw/remote/meson.build | 1 + >>>> hw/remote/trace-events | 3 + >>>> 7 files changed, 262 insertions(+), 2 deletions(-) >>>> create mode 100644 hw/remote/vfio-user-obj.c >>>> >>>> diff --git a/qapi/qom.json b/qapi/qom.json >>>> index eeb5395ff3..582def0522 100644 >>>> --- a/qapi/qom.json >>>> +++ b/qapi/qom.json >>>> @@ -703,6 +703,20 @@ >>>> { 'struct': 'RemoteObjectProperties', >>>> 'data': { 'fd': 'str', 'devid': 'str' } } >>>> >>>> +## >>>> +# @VfioUserServerProperties: >>>> +# >>>> +# Properties for x-vfio-user-server objects. >>>> +# >>>> +# @socket: socket to be used by the libvfio-user library >>>> +# >>>> +# @device: the id of the device to be emulated at the server >>> >>> Suggest "the ID", because "id" is not a word. >> >> id (noun) >> 1. In Freudian theory, the division of the psyche that is totally unconscious and serves as the source of instinctual impulses and demands for immediate satisfaction of primitive needs. >> 2. In Weismann's doctrine of germ-plasm, the substance of inheritance or the bearer , in the germ-plasm, of the hereditary qualities of a single complete organism. >> 3. In the somatic idioplasm of the hereditary qualities of a group of cells or a part of a developing embryo or growing organism. >> https://duckduckgo.com/?q=define+id&ia=definition >> >> :D :D :D > > I stand corrected! > > %-) You guys are funny. :) >
On Tue, May 03, 2022 at 10:16:48AM -0400, Jagannathan Raman wrote: > Define vfio-user object which is remote process server for QEMU. Setup > object initialization functions and properties necessary to instantiate > the object > > Signed-off-by: Elena Ufimtseva <elena.ufimtseva@oracle.com> > Signed-off-by: John G Johnson <john.g.johnson@oracle.com> > Signed-off-by: Jagannathan Raman <jag.raman@oracle.com> > --- > qapi/qom.json | 20 +++- > include/hw/remote/machine.h | 2 + > hw/remote/machine.c | 27 +++++ > hw/remote/vfio-user-obj.c | 210 ++++++++++++++++++++++++++++++++++++ > MAINTAINERS | 1 + > hw/remote/meson.build | 1 + > hw/remote/trace-events | 3 + > 7 files changed, 262 insertions(+), 2 deletions(-) > create mode 100644 hw/remote/vfio-user-obj.c Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
diff --git a/qapi/qom.json b/qapi/qom.json index eeb5395ff3..582def0522 100644 --- a/qapi/qom.json +++ b/qapi/qom.json @@ -703,6 +703,20 @@ { 'struct': 'RemoteObjectProperties', 'data': { 'fd': 'str', 'devid': 'str' } } +## +# @VfioUserServerProperties: +# +# Properties for x-vfio-user-server objects. +# +# @socket: socket to be used by the libvfio-user library +# +# @device: the id of the device to be emulated at the server +# +# Since: 7.1 +## +{ 'struct': 'VfioUserServerProperties', + 'data': { 'socket': 'SocketAddress', 'device': 'str' } } + ## # @RngProperties: # @@ -842,7 +856,8 @@ 'tls-creds-psk', 'tls-creds-x509', 'tls-cipher-suites', - { 'name': 'x-remote-object', 'features': [ 'unstable' ] } + { 'name': 'x-remote-object', 'features': [ 'unstable' ] }, + { 'name': 'x-vfio-user-server', 'features': [ 'unstable' ] } ] } ## @@ -905,7 +920,8 @@ 'tls-creds-psk': 'TlsCredsPskProperties', 'tls-creds-x509': 'TlsCredsX509Properties', 'tls-cipher-suites': 'TlsCredsProperties', - 'x-remote-object': 'RemoteObjectProperties' + 'x-remote-object': 'RemoteObjectProperties', + 'x-vfio-user-server': 'VfioUserServerProperties' } } ## diff --git a/include/hw/remote/machine.h b/include/hw/remote/machine.h index 8d0fa98d33..ac32fda387 100644 --- a/include/hw/remote/machine.h +++ b/include/hw/remote/machine.h @@ -24,6 +24,8 @@ struct RemoteMachineState { RemoteIOHubState iohub; bool vfio_user; + + bool auto_shutdown; }; /* Used to pass to co-routine device and ioc. */ diff --git a/hw/remote/machine.c b/hw/remote/machine.c index 9f3cdc55c3..4d008ed721 100644 --- a/hw/remote/machine.c +++ b/hw/remote/machine.c @@ -77,6 +77,28 @@ static void remote_machine_set_vfio_user(Object *obj, bool value, Error **errp) s->vfio_user = value; } +static bool remote_machine_get_auto_shutdown(Object *obj, Error **errp) +{ + RemoteMachineState *s = REMOTE_MACHINE(obj); + + return s->auto_shutdown; +} + +static void remote_machine_set_auto_shutdown(Object *obj, bool value, + Error **errp) +{ + RemoteMachineState *s = REMOTE_MACHINE(obj); + + s->auto_shutdown = value; +} + +static void remote_machine_instance_init(Object *obj) +{ + RemoteMachineState *s = REMOTE_MACHINE(obj); + + s->auto_shutdown = true; +} + static void remote_machine_class_init(ObjectClass *oc, void *data) { MachineClass *mc = MACHINE_CLASS(oc); @@ -90,12 +112,17 @@ static void remote_machine_class_init(ObjectClass *oc, void *data) object_class_property_add_bool(oc, "vfio-user", remote_machine_get_vfio_user, remote_machine_set_vfio_user); + + object_class_property_add_bool(oc, "auto-shutdown", + remote_machine_get_auto_shutdown, + remote_machine_set_auto_shutdown); } static const TypeInfo remote_machine = { .name = TYPE_REMOTE_MACHINE, .parent = TYPE_MACHINE, .instance_size = sizeof(RemoteMachineState), + .instance_init = remote_machine_instance_init, .class_init = remote_machine_class_init, .interfaces = (InterfaceInfo[]) { { TYPE_HOTPLUG_HANDLER }, diff --git a/hw/remote/vfio-user-obj.c b/hw/remote/vfio-user-obj.c new file mode 100644 index 0000000000..bc49adcc27 --- /dev/null +++ b/hw/remote/vfio-user-obj.c @@ -0,0 +1,210 @@ +/** + * QEMU vfio-user-server server object + * + * Copyright © 2022 Oracle and/or its affiliates. + * + * This work is licensed under the terms of the GNU GPL-v2, version 2 or later. + * + * See the COPYING file in the top-level directory. + * + */ + +/** + * Usage: add options: + * -machine x-remote,vfio-user=on,auto-shutdown=on + * -device <PCI-device>,id=<pci-dev-id> + * -object x-vfio-user-server,id=<id>,type=unix,path=<socket-path>, + * device=<pci-dev-id> + * + * Note that x-vfio-user-server object must be used with x-remote machine only. + * This server could only support PCI devices for now. + * + * type - SocketAddress type - presently "unix" alone is supported. Required + * option + * + * path - named unix socket, it will be created by the server. It is + * a required option + * + * device - id of a device on the server, a required option. PCI devices + * alone are supported presently. + */ + +#include "qemu/osdep.h" + +#include "qom/object.h" +#include "qom/object_interfaces.h" +#include "qemu/error-report.h" +#include "trace.h" +#include "sysemu/runstate.h" +#include "hw/boards.h" +#include "hw/remote/machine.h" +#include "qapi/error.h" +#include "qapi/qapi-visit-sockets.h" + +#define TYPE_VFU_OBJECT "x-vfio-user-server" +OBJECT_DECLARE_TYPE(VfuObject, VfuObjectClass, VFU_OBJECT) + +/** + * VFU_OBJECT_ERROR - reports an error message. If auto_shutdown + * is set, it aborts the machine on error. Otherwise, it logs an + * error message without aborting. + */ +#define VFU_OBJECT_ERROR(o, fmt, ...) \ + { \ + if (vfu_object_auto_shutdown()) { \ + error_setg(&error_abort, (fmt), ## __VA_ARGS__); \ + } else { \ + error_report((fmt), ## __VA_ARGS__); \ + } \ + } \ + +struct VfuObjectClass { + ObjectClass parent_class; + + unsigned int nr_devs; +}; + +struct VfuObject { + /* private */ + Object parent; + + SocketAddress *socket; + + char *device; + + Error *err; +}; + +static bool vfu_object_auto_shutdown(void) +{ + bool auto_shutdown = true; + Error *local_err = NULL; + + if (!current_machine) { + return auto_shutdown; + } + + auto_shutdown = object_property_get_bool(OBJECT(current_machine), + "auto-shutdown", + &local_err); + + /* + * local_err would be set if no such property exists - safe to ignore. + * Unlikely scenario as auto-shutdown is always defined for + * TYPE_REMOTE_MACHINE, and TYPE_VFU_OBJECT only works with + * TYPE_REMOTE_MACHINE + */ + if (local_err) { + auto_shutdown = true; + error_free(local_err); + } + + return auto_shutdown; +} + +static void vfu_object_set_socket(Object *obj, Visitor *v, const char *name, + void *opaque, Error **errp) +{ + VfuObject *o = VFU_OBJECT(obj); + + qapi_free_SocketAddress(o->socket); + + o->socket = NULL; + + visit_type_SocketAddress(v, name, &o->socket, errp); + + if (o->socket->type != SOCKET_ADDRESS_TYPE_UNIX) { + error_setg(errp, "vfu: Unsupported socket type - %s", + SocketAddressType_str(o->socket->type)); + qapi_free_SocketAddress(o->socket); + o->socket = NULL; + return; + } + + trace_vfu_prop("socket", o->socket->u.q_unix.path); +} + +static void vfu_object_set_device(Object *obj, const char *str, Error **errp) +{ + VfuObject *o = VFU_OBJECT(obj); + + g_free(o->device); + + o->device = g_strdup(str); + + trace_vfu_prop("device", str); +} + +static void vfu_object_init(Object *obj) +{ + VfuObjectClass *k = VFU_OBJECT_GET_CLASS(obj); + VfuObject *o = VFU_OBJECT(obj); + + k->nr_devs++; + + if (!object_dynamic_cast(OBJECT(current_machine), TYPE_REMOTE_MACHINE)) { + error_setg(&o->err, "vfu: %s only compatible with %s machine", + TYPE_VFU_OBJECT, TYPE_REMOTE_MACHINE); + return; + } +} + +static void vfu_object_finalize(Object *obj) +{ + VfuObjectClass *k = VFU_OBJECT_GET_CLASS(obj); + VfuObject *o = VFU_OBJECT(obj); + + k->nr_devs--; + + qapi_free_SocketAddress(o->socket); + + o->socket = NULL; + + g_free(o->device); + + o->device = NULL; + + if (!k->nr_devs && vfu_object_auto_shutdown()) { + qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN); + } +} + +static void vfu_object_class_init(ObjectClass *klass, void *data) +{ + VfuObjectClass *k = VFU_OBJECT_CLASS(klass); + + k->nr_devs = 0; + + object_class_property_add(klass, "socket", "SocketAddress", NULL, + vfu_object_set_socket, NULL, NULL); + object_class_property_set_description(klass, "socket", + "SocketAddress " + "(ex: type=unix,path=/tmp/sock). " + "Only UNIX is presently supported"); + object_class_property_add_str(klass, "device", NULL, + vfu_object_set_device); + object_class_property_set_description(klass, "device", + "device ID - only PCI devices " + "are presently supported"); +} + +static const TypeInfo vfu_object_info = { + .name = TYPE_VFU_OBJECT, + .parent = TYPE_OBJECT, + .instance_size = sizeof(VfuObject), + .instance_init = vfu_object_init, + .instance_finalize = vfu_object_finalize, + .class_size = sizeof(VfuObjectClass), + .class_init = vfu_object_class_init, + .interfaces = (InterfaceInfo[]) { + { TYPE_USER_CREATABLE }, + { } + } +}; + +static void vfu_register_types(void) +{ + type_register_static(&vfu_object_info); +} + +type_init(vfu_register_types); diff --git a/MAINTAINERS b/MAINTAINERS index 84b0e019e8..1b5719cd89 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -3599,6 +3599,7 @@ F: include/hw/remote/proxy-memory-listener.h F: hw/remote/iohub.c F: include/hw/remote/iohub.h F: subprojects/libvfio-user +F: hw/remote/vfio-user-obj.c EBPF: M: Jason Wang <jasowang@redhat.com> diff --git a/hw/remote/meson.build b/hw/remote/meson.build index dfea6b533b..534ac5df79 100644 --- a/hw/remote/meson.build +++ b/hw/remote/meson.build @@ -6,6 +6,7 @@ remote_ss.add(when: 'CONFIG_MULTIPROCESS', if_true: files('message.c')) remote_ss.add(when: 'CONFIG_MULTIPROCESS', if_true: files('remote-obj.c')) remote_ss.add(when: 'CONFIG_MULTIPROCESS', if_true: files('proxy.c')) remote_ss.add(when: 'CONFIG_MULTIPROCESS', if_true: files('iohub.c')) +remote_ss.add(when: 'CONFIG_VFIO_USER_SERVER', if_true: files('vfio-user-obj.c')) remote_ss.add(when: 'CONFIG_VFIO_USER_SERVER', if_true: vfiouser) diff --git a/hw/remote/trace-events b/hw/remote/trace-events index 0b23974f90..7da12f0d96 100644 --- a/hw/remote/trace-events +++ b/hw/remote/trace-events @@ -2,3 +2,6 @@ mpqemu_send_io_error(int cmd, int size, int nfds) "send command %d size %d, %d file descriptors to remote process" mpqemu_recv_io_error(int cmd, int size, int nfds) "failed to receive %d size %d, %d file descriptors to remote process" + +# vfio-user-obj.c +vfu_prop(const char *prop, const char *val) "vfu: setting %s as %s"