From: Juergen Gross <jgross@suse.com> To: Stefano Stabellini <sstabellini@kernel.org>, qemu-devel@nongnu.org Cc: xen-devel@lists.xenproject.org, anthony.perard@citrix.com, groug@kaod.org, Stefano Stabellini <stefano@aporeto.com>, "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com> Subject: Re: [Qemu-devel] [PATCH v2 5/9] xen/9pfs: connect to the frontend Date: Tue, 14 Mar 2017 08:17:34 +0100 [thread overview] Message-ID: <5c51b719-737f-82f8-849c-2f2a16aeb213@suse.com> (raw) In-Reply-To: <1489449360-14411-5-git-send-email-sstabellini@kernel.org> On 14/03/17 00:55, Stefano Stabellini wrote: > Write the limits of the backend to xenstore. Connect to the frontend. > Upon connection, allocate the rings according to the protocol > specification. > > Initialize a QEMUBH to schedule work upon receiving an event channel > notification from the frontend. > > Signed-off-by: Stefano Stabellini <stefano@aporeto.com> > CC: anthony.perard@citrix.com > CC: jgross@suse.com > CC: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> > CC: Greg Kurz <groug@kaod.org> > --- > hw/9pfs/xen-9p-backend.c | 159 ++++++++++++++++++++++++++++++++++++++++++++++- > 1 file changed, 158 insertions(+), 1 deletion(-) > > diff --git a/hw/9pfs/xen-9p-backend.c b/hw/9pfs/xen-9p-backend.c > index 35032d3..0e4a133 100644 > --- a/hw/9pfs/xen-9p-backend.c > +++ b/hw/9pfs/xen-9p-backend.c > @@ -17,8 +17,35 @@ > #include "qemu/config-file.h" > #include "fsdev/qemu-fsdev.h" > > +#define VERSIONS "1" > +#define MAX_RINGS 8 > +#define MAX_RING_ORDER 8 > + > +struct Xen9pfsRing { > + struct Xen9pfsDev *priv; > + > + int ref; > + xenevtchn_handle *evtchndev; > + int evtchn; > + int local_port; > + struct xen_9pfs_data_intf *intf; > + unsigned char *data; > + struct xen_9pfs_data ring; > + > + QEMUBH *bh; > + > + /* local copies, so that we can read/write PDU data directly from > + * the ring */ > + RING_IDX out_cons, out_size, in_cons; > + bool inprogress; > +}; > + > typedef struct Xen9pfsDev { > struct XenDevice xendev; /* must be first */ > + V9fsState state; > + > + int num_rings; > + struct Xen9pfsRing *rings; > } Xen9pfsDev; > > static ssize_t xen_9pfs_pdu_vmarshal(V9fsPDU *pdu, > @@ -67,22 +94,152 @@ static int xen_9pfs_init(struct XenDevice *xendev) > return 0; > } > > +static void xen_9pfs_bh(void *opaque) > +{ > +} > + > +static void xen_9pfs_evtchn_event(void *opaque) > +{ > +} > + > static int xen_9pfs_free(struct XenDevice *xendev) > { > - return -1; > + int i; > + struct Xen9pfsDev *xen_9pdev = container_of(xendev, struct Xen9pfsDev, xendev); > + > + for (i = 0; i < xen_9pdev->num_rings; i++) { > + if (xen_9pdev->rings[i].data != NULL) { > + xengnttab_unmap(xen_9pdev->xendev.gnttabdev, > + xen_9pdev->rings[i].data, > + (1 << XEN_9PFS_RING_ORDER)); > + } > + if (xen_9pdev->rings[i].intf != NULL) { > + xengnttab_unmap(xen_9pdev->xendev.gnttabdev, > + xen_9pdev->rings[i].intf, > + 1); > + } > + if (xen_9pdev->rings[i].evtchndev > 0) { > + qemu_set_fd_handler(xenevtchn_fd(xen_9pdev->rings[i].evtchndev), > + NULL, NULL, NULL); > + xenevtchn_unbind(xen_9pdev->rings[i].evtchndev, xen_9pdev->rings[i].local_port); > + } > + if (xen_9pdev->rings[i].bh != NULL) { > + qemu_bh_delete(xen_9pdev->rings[i].bh); > + } > + } > + g_free(xen_9pdev->rings); > + return 0; > } > > static int xen_9pfs_connect(struct XenDevice *xendev) > { > + int i; > + struct Xen9pfsDev *xen_9pdev = container_of(xendev, struct Xen9pfsDev, xendev); > + V9fsState *s = &xen_9pdev->state; > + QemuOpts *fsdev; > + char *security_model, *path; > + > + if (xenstore_read_fe_int(&xen_9pdev->xendev, "num-rings", > + &xen_9pdev->num_rings) == -1 || > + xen_9pdev->num_rings > MAX_RINGS) { What if num_rings is < 1? > + return -1; > + } > + > + xen_9pdev->rings = g_malloc0(xen_9pdev->num_rings * sizeof(struct Xen9pfsRing)); > + for (i = 0; i < xen_9pdev->num_rings; i++) { > + char str[16]; > + > + xen_9pdev->rings[i].priv = xen_9pdev; > + xen_9pdev->rings[i].evtchn = -1; > + xen_9pdev->rings[i].local_port = -1; > + > + sprintf(str, "ring-ref%u", i); use g_strdup_printf()? > + if (xenstore_read_fe_int(&xen_9pdev->xendev, str, > + &xen_9pdev->rings[i].ref) == -1) { > + goto out; > + } > + sprintf(str, "event-channel-%u", i); use g_strdup_printf()? Juergen
WARNING: multiple messages have this Message-ID (diff)
From: Juergen Gross <jgross@suse.com> To: Stefano Stabellini <sstabellini@kernel.org>, qemu-devel@nongnu.org Cc: anthony.perard@citrix.com, xen-devel@lists.xenproject.org, Stefano Stabellini <stefano@aporeto.com>, groug@kaod.org, "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com> Subject: Re: [PATCH v2 5/9] xen/9pfs: connect to the frontend Date: Tue, 14 Mar 2017 08:17:34 +0100 [thread overview] Message-ID: <5c51b719-737f-82f8-849c-2f2a16aeb213@suse.com> (raw) In-Reply-To: <1489449360-14411-5-git-send-email-sstabellini@kernel.org> On 14/03/17 00:55, Stefano Stabellini wrote: > Write the limits of the backend to xenstore. Connect to the frontend. > Upon connection, allocate the rings according to the protocol > specification. > > Initialize a QEMUBH to schedule work upon receiving an event channel > notification from the frontend. > > Signed-off-by: Stefano Stabellini <stefano@aporeto.com> > CC: anthony.perard@citrix.com > CC: jgross@suse.com > CC: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> > CC: Greg Kurz <groug@kaod.org> > --- > hw/9pfs/xen-9p-backend.c | 159 ++++++++++++++++++++++++++++++++++++++++++++++- > 1 file changed, 158 insertions(+), 1 deletion(-) > > diff --git a/hw/9pfs/xen-9p-backend.c b/hw/9pfs/xen-9p-backend.c > index 35032d3..0e4a133 100644 > --- a/hw/9pfs/xen-9p-backend.c > +++ b/hw/9pfs/xen-9p-backend.c > @@ -17,8 +17,35 @@ > #include "qemu/config-file.h" > #include "fsdev/qemu-fsdev.h" > > +#define VERSIONS "1" > +#define MAX_RINGS 8 > +#define MAX_RING_ORDER 8 > + > +struct Xen9pfsRing { > + struct Xen9pfsDev *priv; > + > + int ref; > + xenevtchn_handle *evtchndev; > + int evtchn; > + int local_port; > + struct xen_9pfs_data_intf *intf; > + unsigned char *data; > + struct xen_9pfs_data ring; > + > + QEMUBH *bh; > + > + /* local copies, so that we can read/write PDU data directly from > + * the ring */ > + RING_IDX out_cons, out_size, in_cons; > + bool inprogress; > +}; > + > typedef struct Xen9pfsDev { > struct XenDevice xendev; /* must be first */ > + V9fsState state; > + > + int num_rings; > + struct Xen9pfsRing *rings; > } Xen9pfsDev; > > static ssize_t xen_9pfs_pdu_vmarshal(V9fsPDU *pdu, > @@ -67,22 +94,152 @@ static int xen_9pfs_init(struct XenDevice *xendev) > return 0; > } > > +static void xen_9pfs_bh(void *opaque) > +{ > +} > + > +static void xen_9pfs_evtchn_event(void *opaque) > +{ > +} > + > static int xen_9pfs_free(struct XenDevice *xendev) > { > - return -1; > + int i; > + struct Xen9pfsDev *xen_9pdev = container_of(xendev, struct Xen9pfsDev, xendev); > + > + for (i = 0; i < xen_9pdev->num_rings; i++) { > + if (xen_9pdev->rings[i].data != NULL) { > + xengnttab_unmap(xen_9pdev->xendev.gnttabdev, > + xen_9pdev->rings[i].data, > + (1 << XEN_9PFS_RING_ORDER)); > + } > + if (xen_9pdev->rings[i].intf != NULL) { > + xengnttab_unmap(xen_9pdev->xendev.gnttabdev, > + xen_9pdev->rings[i].intf, > + 1); > + } > + if (xen_9pdev->rings[i].evtchndev > 0) { > + qemu_set_fd_handler(xenevtchn_fd(xen_9pdev->rings[i].evtchndev), > + NULL, NULL, NULL); > + xenevtchn_unbind(xen_9pdev->rings[i].evtchndev, xen_9pdev->rings[i].local_port); > + } > + if (xen_9pdev->rings[i].bh != NULL) { > + qemu_bh_delete(xen_9pdev->rings[i].bh); > + } > + } > + g_free(xen_9pdev->rings); > + return 0; > } > > static int xen_9pfs_connect(struct XenDevice *xendev) > { > + int i; > + struct Xen9pfsDev *xen_9pdev = container_of(xendev, struct Xen9pfsDev, xendev); > + V9fsState *s = &xen_9pdev->state; > + QemuOpts *fsdev; > + char *security_model, *path; > + > + if (xenstore_read_fe_int(&xen_9pdev->xendev, "num-rings", > + &xen_9pdev->num_rings) == -1 || > + xen_9pdev->num_rings > MAX_RINGS) { What if num_rings is < 1? > + return -1; > + } > + > + xen_9pdev->rings = g_malloc0(xen_9pdev->num_rings * sizeof(struct Xen9pfsRing)); > + for (i = 0; i < xen_9pdev->num_rings; i++) { > + char str[16]; > + > + xen_9pdev->rings[i].priv = xen_9pdev; > + xen_9pdev->rings[i].evtchn = -1; > + xen_9pdev->rings[i].local_port = -1; > + > + sprintf(str, "ring-ref%u", i); use g_strdup_printf()? > + if (xenstore_read_fe_int(&xen_9pdev->xendev, str, > + &xen_9pdev->rings[i].ref) == -1) { > + goto out; > + } > + sprintf(str, "event-channel-%u", i); use g_strdup_printf()? Juergen _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org https://lists.xen.org/xen-devel
next prev parent reply other threads:[~2017-03-14 7:17 UTC|newest] Thread overview: 72+ messages / expand[flat|nested] mbox.gz Atom feed top 2017-03-13 23:55 [Qemu-devel] [PATCH v2 0/9] xen/9pfs: introduce the Xen 9pfs backend Stefano Stabellini 2017-03-13 23:55 ` Stefano Stabellini 2017-03-13 23:55 ` [Qemu-devel] [PATCH v2 1/9] configure: change CONFIG_XEN_BACKEND to be a target property Stefano Stabellini 2017-03-13 23:55 ` Stefano Stabellini 2017-03-13 23:55 ` [Qemu-devel] [PATCH v2 2/9] xen: import ring.h from xen Stefano Stabellini 2017-03-13 23:55 ` Stefano Stabellini 2017-03-15 8:00 ` [Qemu-devel] " Greg Kurz 2017-03-15 8:00 ` Greg Kurz 2017-03-15 18:36 ` [Qemu-devel] " Stefano Stabellini 2017-03-15 18:36 ` Stefano Stabellini 2017-03-15 19:00 ` [Qemu-devel] " Greg Kurz 2017-03-15 19:00 ` Greg Kurz 2017-03-15 19:04 ` [Qemu-devel] " Stefano Stabellini 2017-03-15 19:04 ` Stefano Stabellini 2017-03-13 23:55 ` [Qemu-devel] [PATCH v2 3/9] xen: introduce the header file for the Xen 9pfs transport protocol Stefano Stabellini 2017-03-13 23:55 ` Stefano Stabellini 2017-03-15 9:06 ` [Qemu-devel] " Greg Kurz 2017-03-15 9:06 ` Greg Kurz 2017-03-15 19:02 ` [Qemu-devel] " Stefano Stabellini 2017-03-15 19:02 ` Stefano Stabellini 2017-03-13 23:55 ` [Qemu-devel] [PATCH v2 4/9] xen/9pfs: introduce Xen 9pfs backend Stefano Stabellini 2017-03-13 23:55 ` Stefano Stabellini 2017-03-14 7:11 ` [Qemu-devel] " Juergen Gross 2017-03-14 7:11 ` Juergen Gross 2017-03-14 20:07 ` [Qemu-devel] " Stefano Stabellini 2017-03-14 20:07 ` Stefano Stabellini 2017-03-13 23:55 ` [Qemu-devel] [PATCH v2 5/9] xen/9pfs: connect to the frontend Stefano Stabellini 2017-03-13 23:55 ` Stefano Stabellini 2017-03-14 7:17 ` Juergen Gross [this message] 2017-03-14 7:17 ` Juergen Gross 2017-03-14 20:14 ` [Qemu-devel] " Stefano Stabellini 2017-03-14 20:14 ` Stefano Stabellini 2017-03-15 9:48 ` [Qemu-devel] " Greg Kurz 2017-03-15 9:48 ` Greg Kurz 2017-03-15 21:30 ` [Qemu-devel] " Stefano Stabellini 2017-03-15 21:30 ` Stefano Stabellini 2017-03-13 23:55 ` [Qemu-devel] [PATCH v2 6/9] xen/9pfs: receive requests from " Stefano Stabellini 2017-03-13 23:55 ` Stefano Stabellini 2017-03-15 10:51 ` [Qemu-devel] " Greg Kurz 2017-03-15 10:51 ` Greg Kurz 2017-03-15 21:56 ` [Qemu-devel] " Stefano Stabellini 2017-03-15 21:56 ` Stefano Stabellini 2017-03-15 11:53 ` Greg Kurz 2017-03-15 11:53 ` Greg Kurz 2017-03-15 22:03 ` [Qemu-devel] " Stefano Stabellini 2017-03-15 22:03 ` Stefano Stabellini 2017-03-13 23:55 ` [Qemu-devel] [PATCH v2 7/9] xen/9pfs: implement in/out_iov_from_pdu and vmarshal/vunmarshal Stefano Stabellini 2017-03-13 23:55 ` Stefano Stabellini 2017-03-15 10:58 ` [Qemu-devel] " Greg Kurz 2017-03-15 10:58 ` Greg Kurz 2017-03-15 21:58 ` [Qemu-devel] " Stefano Stabellini 2017-03-15 21:58 ` Stefano Stabellini 2017-03-13 23:55 ` [Qemu-devel] [PATCH v2 8/9] xen/9pfs: send responses back to the frontend Stefano Stabellini 2017-03-13 23:55 ` Stefano Stabellini 2017-03-15 10:59 ` [Qemu-devel] " Greg Kurz 2017-03-15 10:59 ` Greg Kurz 2017-03-15 21:59 ` [Qemu-devel] " Stefano Stabellini 2017-03-15 21:59 ` Stefano Stabellini 2017-03-13 23:56 ` [Qemu-devel] [PATCH v2 9/9] xen/9pfs: build and register Xen 9pfs backend Stefano Stabellini 2017-03-13 23:56 ` Stefano Stabellini 2017-03-14 10:02 ` [Qemu-devel] [PATCH v2 1/9] configure: change CONFIG_XEN_BACKEND to be a target property Paolo Bonzini 2017-03-14 10:02 ` Paolo Bonzini 2017-03-14 19:07 ` [Qemu-devel] " Stefano Stabellini 2017-03-14 19:07 ` Stefano Stabellini 2017-03-14 20:23 ` [Qemu-devel] " Stefano Stabellini 2017-03-14 20:23 ` Stefano Stabellini 2017-03-15 1:03 ` [Qemu-devel] " Greg Kurz 2017-03-15 1:03 ` Greg Kurz 2017-03-15 7:41 ` [Qemu-devel] " Paolo Bonzini 2017-03-15 7:41 ` Paolo Bonzini 2017-03-15 18:42 ` [Qemu-devel] " Stefano Stabellini 2017-03-15 18:42 ` Stefano Stabellini
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=5c51b719-737f-82f8-849c-2f2a16aeb213@suse.com \ --to=jgross@suse.com \ --cc=aneesh.kumar@linux.vnet.ibm.com \ --cc=anthony.perard@citrix.com \ --cc=groug@kaod.org \ --cc=qemu-devel@nongnu.org \ --cc=sstabellini@kernel.org \ --cc=stefano@aporeto.com \ --cc=xen-devel@lists.xenproject.org \ /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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.