[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2 6/9] xen/9pfs: receive requests from the fron
From: |
Stefano Stabellini |
Subject: |
Re: [Qemu-devel] [PATCH v2 6/9] xen/9pfs: receive requests from the frontend |
Date: |
Wed, 15 Mar 2017 15:03:12 -0700 (PDT) |
User-agent: |
Alpine 2.10 (DEB 1266 2009-07-14) |
On Wed, 15 Mar 2017, Greg Kurz wrote:
> On Mon, 13 Mar 2017 16:55:57 -0700
> Stefano Stabellini <address@hidden> wrote:
>
> > Upon receiving an event channel notification from the frontend, schedule
> > the bottom half. From the bottom half, read one request from the ring,
> > create a pdu and call pdu_submit to handle it.
> >
> > For now, only handle one request per ring at a time.
> >
> > Signed-off-by: Stefano Stabellini <address@hidden>
> > CC: address@hidden
> > CC: address@hidden
> > CC: Aneesh Kumar K.V <address@hidden>
> > CC: Greg Kurz <address@hidden>
> > ---
>
> Oops, one more remark I forgot in my the previous mail. See below.
>
> > hw/9pfs/xen-9p-backend.c | 47
> > +++++++++++++++++++++++++++++++++++++++++++++++
> > 1 file changed, 47 insertions(+)
> >
> > diff --git a/hw/9pfs/xen-9p-backend.c b/hw/9pfs/xen-9p-backend.c
> > index 0e4a133..741dd31 100644
> > --- a/hw/9pfs/xen-9p-backend.c
> > +++ b/hw/9pfs/xen-9p-backend.c
> > @@ -94,12 +94,59 @@ static int xen_9pfs_init(struct XenDevice *xendev)
> > return 0;
> > }
> >
> > +static int xen_9pfs_receive(struct Xen9pfsRing *ring)
> > +{
> > + struct xen_9pfs_header h;
> > + RING_IDX cons, prod, masked_prod, masked_cons;
> > + V9fsPDU *pdu;
> > +
> > + if (ring->inprogress) {
> > + return 0;
> > + }
> > +
> > + cons = ring->intf->out_cons;
> > + prod = ring->intf->out_prod;
> > + xen_rmb();
> > +
> > + if (xen_9pfs_queued(prod, cons, XEN_9PFS_RING_SIZE) < sizeof(h)) {
> > + return 0;
> > + }
> > + ring->inprogress = true;
> > +
> > + masked_prod = xen_9pfs_mask(prod, XEN_9PFS_RING_SIZE);
> > + masked_cons = xen_9pfs_mask(cons, XEN_9PFS_RING_SIZE);
> > +
> > + xen_9pfs_read_packet(ring->ring.out, masked_prod, &masked_cons,
> > + XEN_9PFS_RING_SIZE, (uint8_t*) &h, sizeof(h));
> > +
> > + pdu = pdu_alloc(&ring->priv->state);
> > + pdu->size = h.size;
>
> 9P uses little-endian, so this should be:
>
> pdu->size = le32_to_cpu(h.size);
>
> > + pdu->id = h.id;
> > + pdu->tag = h.tag;
>
> and:
>
> pdu->tag = le16_to_cpu(h.tag);
>
> > + ring->out_size = h.size;
> > + ring->out_cons = cons + h.size;
>
> Same here.
OK, thanks. Xen doesn't support big endian today, but they don't hurt.
> > +
> > + qemu_co_queue_init(&pdu->complete);
> > + pdu_submit(pdu);
> > +
> > + return 0;
> > +}
> > +
> > static void xen_9pfs_bh(void *opaque)
> > {
> > + struct Xen9pfsRing *ring = opaque;
> > + xen_9pfs_receive(ring);
> > }
> >
> > static void xen_9pfs_evtchn_event(void *opaque)
> > {
> > + struct Xen9pfsRing *ring = opaque;
> > + evtchn_port_t port;
> > +
> > + port = xenevtchn_pending(ring->evtchndev);
> > + xenevtchn_unmask(ring->evtchndev, port);
> > +
> > + qemu_bh_schedule(ring->bh);
> > }
> >
> > static int xen_9pfs_free(struct XenDevice *xendev)
>
>
- Re: [Qemu-devel] [PATCH v2 5/9] xen/9pfs: connect to the frontend, (continued)
[Qemu-devel] [PATCH v2 7/9] xen/9pfs: implement in/out_iov_from_pdu and vmarshal/vunmarshal, Stefano Stabellini, 2017/03/13
[Qemu-devel] [PATCH v2 9/9] xen/9pfs: build and register Xen 9pfs backend, Stefano Stabellini, 2017/03/13
[Qemu-devel] [PATCH v2 6/9] xen/9pfs: receive requests from the frontend, Stefano Stabellini, 2017/03/13
Re: [Qemu-devel] [PATCH v2 6/9] xen/9pfs: receive requests from the frontend, Greg Kurz, 2017/03/15
Re: [Qemu-devel] [PATCH v2 6/9] xen/9pfs: receive requests from the frontend,
Stefano Stabellini <=
[Qemu-devel] [PATCH v2 8/9] xen/9pfs: send responses back to the frontend, Stefano Stabellini, 2017/03/13
Re: [Qemu-devel] [PATCH v2 1/9] configure: change CONFIG_XEN_BACKEND to be a target property, Paolo Bonzini, 2017/03/14
- Re: [Qemu-devel] [PATCH v2 1/9] configure: change CONFIG_XEN_BACKEND to be a target property, Stefano Stabellini, 2017/03/14
- Re: [Qemu-devel] [PATCH v2 1/9] configure: change CONFIG_XEN_BACKEND to be a target property, Stefano Stabellini, 2017/03/14
- Re: [Qemu-devel] [PATCH v2 1/9] configure: change CONFIG_XEN_BACKEND to be a target property, Greg Kurz, 2017/03/14
- Re: [Qemu-devel] [PATCH v2 1/9] configure: change CONFIG_XEN_BACKEND to be a target property, Paolo Bonzini, 2017/03/15
- Re: [Qemu-devel] [PATCH v2 1/9] configure: change CONFIG_XEN_BACKEND to be a target property, Stefano Stabellini, 2017/03/15