From: Thanos Makatos <thanos.makatos@nutanix.com>
To: Jagannathan Raman <jag.raman@oracle.com>,
"qemu-devel@nongnu.org" <qemu-devel@nongnu.org>
Cc: "elena.ufimtseva@oracle.com" <elena.ufimtseva@oracle.com>,
"john.g.johnson@oracle.com" <john.g.johnson@oracle.com>,
Swapnil Ingle <swapnil.ingle@nutanix.com>,
John Levon <john.levon@nutanix.com>,
"alex.williamson@redhat.com" <alex.williamson@redhat.com>,
"stefanha@redhat.com" <stefanha@redhat.com>
Subject: RE: [PATCH RFC server 05/11] vfio-user: run vfio-user context
Date: Tue, 20 Jul 2021 14:17:29 +0000 [thread overview]
Message-ID: <CH0PR02MB7898528462CB5A47FE31F0E48BE29@CH0PR02MB7898.namprd02.prod.outlook.com> (raw)
In-Reply-To: <9ea4e77a39aaff3dfac3e463d3de76b0e4e1844f.1626722742.git.jag.raman@oracle.com>
> -----Original Message-----
> From: Jagannathan Raman <jag.raman@oracle.com>
> Sent: 19 July 2021 21:00
> To: qemu-devel@nongnu.org
> Cc: stefanha@redhat.com; alex.williamson@redhat.com;
> elena.ufimtseva@oracle.com; John Levon <john.levon@nutanix.com>;
> john.g.johnson@oracle.com; Thanos Makatos
> <thanos.makatos@nutanix.com>; Swapnil Ingle
> <swapnil.ingle@nutanix.com>; jag.raman@oracle.com
> Subject: [PATCH RFC server 05/11] vfio-user: run vfio-user context
>
> Setup a separate thread to run the vfio-user context. The thread acts as
> the main loop for the device.
In your "vfio-user: instantiate vfio-user context" patch you create the vfu context in blocking-mode, so the only way to run device emulation is in a separate thread.
Were you going to create a separate thread anyway? You can run device emulation in polling mode therefore you can avoid creating a separate thread, thus saving resources. Do plan to do that in the future?
>
> 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>
> ---
> hw/remote/vfio-user-obj.c | 44
> ++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 44 insertions(+)
>
> diff --git a/hw/remote/vfio-user-obj.c b/hw/remote/vfio-user-obj.c
> index e362709..6a2d0f5 100644
> --- a/hw/remote/vfio-user-obj.c
> +++ b/hw/remote/vfio-user-obj.c
> @@ -35,6 +35,7 @@
> #include "trace.h"
> #include "sysemu/runstate.h"
> #include "qemu/notify.h"
> +#include "qemu/thread.h"
> #include "qapi/error.h"
> #include "sysemu/sysemu.h"
> #include "hw/qdev-core.h"
> @@ -66,6 +67,8 @@ struct VfuObject {
> vfu_ctx_t *vfu_ctx;
>
> PCIDevice *pci_dev;
> +
> + QemuThread vfu_ctx_thread;
> };
>
> static void vfu_object_set_socket(Object *obj, const char *str, Error **errp)
> @@ -90,6 +93,44 @@ static void vfu_object_set_devid(Object *obj, const
> char *str, Error **errp)
> trace_vfu_prop("devid", str);
> }
>
> +static void *vfu_object_ctx_run(void *opaque)
> +{
> + VfuObject *o = opaque;
> + int ret;
> +
> + ret = vfu_realize_ctx(o->vfu_ctx);
> + if (ret < 0) {
> + error_setg(&error_abort, "vfu: Failed to realize device %s- %s",
> + o->devid, strerror(errno));
> + return NULL;
> + }
> +
> + ret = vfu_attach_ctx(o->vfu_ctx);
> + if (ret < 0) {
> + error_setg(&error_abort,
> + "vfu: Failed to attach device %s to context - %s",
> + o->devid, strerror(errno));
> + return NULL;
> + }
> +
> + do {
> + ret = vfu_run_ctx(o->vfu_ctx);
> + if (ret < 0) {
> + if (errno == EINTR) {
> + ret = 0;
> + } else if (errno == ENOTCONN) {
> + object_unparent(OBJECT(o));
> + break;
> + } else {
> + error_setg(&error_abort, "vfu: Failed to run device %s - %s",
> + o->devid, strerror(errno));
> + }
> + }
> + } while (ret == 0);
> +
> + return NULL;
> +}
> +
> static void vfu_object_machine_done(Notifier *notifier, void *data)
> {
> VfuObject *o = container_of(notifier, VfuObject, machine_done);
> @@ -125,6 +166,9 @@ static void vfu_object_machine_done(Notifier
> *notifier, void *data)
> pci_get_word(o->pci_dev->config + PCI_DEVICE_ID),
> pci_get_word(o->pci_dev->config +
> PCI_SUBSYSTEM_VENDOR_ID),
> pci_get_word(o->pci_dev->config + PCI_SUBSYSTEM_ID));
> +
> + qemu_thread_create(&o->vfu_ctx_thread, "VFU ctx runner",
> vfu_object_ctx_run,
> + o, QEMU_THREAD_JOINABLE);
> }
>
> static void vfu_object_init(Object *obj)
> --
> 1.8.3.1
next prev parent reply other threads:[~2021-07-20 14:18 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-07-19 6:27 [PATCH RFC 00/19] vfio-user implementation Elena Ufimtseva
2021-07-19 6:27 ` [PATCH RFC 01/19] vfio-user: introduce vfio-user protocol specification Elena Ufimtseva
2021-07-19 6:27 ` [PATCH RFC 02/19] vfio-user: add VFIO base abstract class Elena Ufimtseva
2021-07-19 6:27 ` [PATCH RFC 03/19] vfio-user: define VFIO Proxy and communication functions Elena Ufimtseva
2021-07-27 16:34 ` Stefan Hajnoczi
2021-07-28 18:08 ` John Johnson
2021-07-29 8:06 ` Stefan Hajnoczi
2021-07-19 6:27 ` [PATCH RFC 04/19] vfio-user: Define type vfio_user_pci_dev_info Elena Ufimtseva
2021-07-28 10:16 ` Stefan Hajnoczi
2021-07-29 0:55 ` John Johnson
2021-07-29 8:22 ` Stefan Hajnoczi
2021-07-19 6:27 ` [PATCH RFC 05/19] vfio-user: connect vfio proxy to remote server Elena Ufimtseva
2021-07-19 6:27 ` [PATCH RFC 06/19] vfio-user: negotiate protocol with " Elena Ufimtseva
2021-07-19 6:27 ` [PATCH RFC 07/19] vfio-user: define vfio-user pci ops Elena Ufimtseva
2021-07-19 6:27 ` [PATCH RFC 08/19] vfio-user: VFIO container setup & teardown Elena Ufimtseva
2021-07-19 6:27 ` [PATCH RFC 09/19] vfio-user: get device info and get irq info Elena Ufimtseva
2021-07-19 6:27 ` [PATCH RFC 10/19] vfio-user: device region read/write Elena Ufimtseva
2021-07-19 6:27 ` [PATCH RFC 11/19] vfio-user: get region and DMA map/unmap operations Elena Ufimtseva
2021-07-19 6:27 ` [PATCH RFC 12/19] vfio-user: probe remote device's BARs Elena Ufimtseva
2021-07-19 22:59 ` Alex Williamson
2021-07-20 1:39 ` John Johnson
2021-07-20 3:01 ` Alex Williamson
2021-07-19 6:27 ` [PATCH RFC 13/19] vfio-user: respond to remote DMA read/write requests Elena Ufimtseva
2021-07-19 6:27 ` [PATCH RFC 14/19] vfio_user: setup MSI/X interrupts and PCI config operations Elena Ufimtseva
2021-07-19 6:27 ` [PATCH RFC 15/19] vfio-user: vfio user device realize Elena Ufimtseva
2021-07-19 6:27 ` [PATCH RFC 16/19] vfio-user: pci reset Elena Ufimtseva
2021-07-19 6:27 ` [PATCH RFC 17/19] vfio-user: probe remote device ROM BAR Elena Ufimtseva
2021-07-19 6:27 ` [PATCH RFC 18/19] vfio-user: migration support Elena Ufimtseva
2021-07-19 6:27 ` [PATCH RFC 19/19] vfio-user: add migration cli options and version negotiation Elena Ufimtseva
2021-07-19 20:00 ` [PATCH RFC server 00/11] vfio-user server in QEMU Jagannathan Raman
2021-07-19 20:00 ` [PATCH RFC server 01/11] vfio-user: build library Jagannathan Raman
2021-07-19 20:24 ` John Levon
2021-07-20 12:06 ` Jag Raman
2021-07-20 12:20 ` Marc-André Lureau
2021-07-20 13:09 ` John Levon
2021-07-19 20:00 ` [PATCH RFC server 02/11] vfio-user: define vfio-user object Jagannathan Raman
2021-07-19 20:00 ` [PATCH RFC server 03/11] vfio-user: instantiate vfio-user context Jagannathan Raman
2021-07-19 20:00 ` [PATCH RFC server 04/11] vfio-user: find and init PCI device Jagannathan Raman
2021-07-26 15:05 ` John Levon
2021-07-28 17:08 ` Jag Raman
2021-07-19 20:00 ` [PATCH RFC server 05/11] vfio-user: run vfio-user context Jagannathan Raman
2021-07-20 14:17 ` Thanos Makatos [this message]
2021-08-13 14:51 ` Jag Raman
2021-08-16 12:52 ` John Levon
2021-08-16 14:10 ` Jag Raman
2021-07-19 20:00 ` [PATCH RFC server 06/11] vfio-user: handle PCI config space accesses Jagannathan Raman
2021-07-26 15:10 ` John Levon
2021-07-19 20:00 ` [PATCH RFC server 07/11] vfio-user: handle DMA mappings Jagannathan Raman
2021-07-20 14:38 ` Thanos Makatos
2021-07-19 20:00 ` [PATCH RFC server 08/11] vfio-user: handle PCI BAR accesses Jagannathan Raman
2021-07-19 20:00 ` [PATCH RFC server 09/11] vfio-user: handle device interrupts Jagannathan Raman
2021-07-19 20:00 ` [PATCH RFC server 10/11] vfio-user: register handlers to facilitate migration Jagannathan Raman
2021-07-20 14:05 ` Thanos Makatos
2021-07-19 20:00 ` [PATCH RFC server 11/11] vfio-user: acceptance test Jagannathan Raman
2021-07-20 16:12 ` Thanos Makatos
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=CH0PR02MB7898528462CB5A47FE31F0E48BE29@CH0PR02MB7898.namprd02.prod.outlook.com \
--to=thanos.makatos@nutanix.com \
--cc=alex.williamson@redhat.com \
--cc=elena.ufimtseva@oracle.com \
--cc=jag.raman@oracle.com \
--cc=john.g.johnson@oracle.com \
--cc=john.levon@nutanix.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
--cc=swapnil.ingle@nutanix.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).