[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: |
Greg Kurz |
Subject: |
Re: [Qemu-devel] [PATCH v2 6/9] xen/9pfs: receive requests from the frontend |
Date: |
Wed, 15 Mar 2017 12:53:41 +0100 |
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.
> +
> + 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)
pgpRMS5XjoTXo.pgp
Description: OpenPGP digital signature
- 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 <=
Re: [Qemu-devel] [PATCH v2 6/9] xen/9pfs: receive requests from the frontend, Stefano Stabellini, 2017/03/15
[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