From: Boris Ostrovsky <boris.ostrovsky@oracle.com>
To: Stefano Stabellini <sstabellini@kernel.org>
Cc: jgross@suse.com, Latchesar Ionkov <lucho@ionkov.net>,
Eric Van Hensbergen <ericvh@gmail.com>,
linux-kernel@vger.kernel.org,
Stefano Stabellini <stefano@aporeto.com>,
v9fs-developer@lists.sourceforge.net,
Ron Minnich <rminnich@sandia.gov>,
xen-devel@lists.xenproject.org
Subject: Re: [PATCH 5/7] xen/9pfs: send requests to the backend
Date: Wed, 8 Mar 2017 08:58:12 -0500 [thread overview]
Message-ID: <c7e0ddcd-b0b4-182f-40d6-fc1b5bc2d0a1@oracle.com> (raw)
In-Reply-To: <alpine.DEB.2.10.1703071650320.17906@sstabellini-ThinkPad-X260>
>>> +}
>>> +
>>> +static int p9_xen_write_todo(struct xen_9pfs_dataring *ring, RING_IDX size)
>>> +{
>>> + RING_IDX cons, prod;
>>> +
>>> + cons = ring->intf->out_cons;
>>> + prod = ring->intf->out_prod;
>>> + mb();
>>> +
>>> + if (XEN_9PFS_RING_SIZE - xen_9pfs_queued(prod, cons, XEN_9PFS_RING_SIZE) >= size)
>>> + return 1;
>>> + else
>>> + return 0;
>>> }
>>>
>>> static int p9_xen_request(struct p9_client *client, struct p9_req_t *p9_req)
>>> {
>>> + struct xen_9pfs_front_priv *priv = NULL;
>>> + RING_IDX cons, prod, masked_cons, masked_prod;
>>> + unsigned long flags;
>>> + uint32_t size = p9_req->tc->size;
>>> + struct xen_9pfs_dataring *ring;
>>> + int num;
>>> +
>>> + list_for_each_entry(priv, &xen_9pfs_devs, list) {
>>> + if (priv->client == client)
>>> + break;
>>> + }
>>> + if (priv == NULL || priv->client != client)
>>> + return -EINVAL;
>>> +
>>> + num = p9_req->tc->tag % priv->num_rings;
>>> + ring = &priv->rings[num];
>>> +
>>> +again:
>>> + while (wait_event_interruptible(ring->wq,
>>> + p9_xen_write_todo(ring, size) > 0) != 0);
>>> +
>>> + spin_lock_irqsave(&ring->lock, flags);
>>> + cons = ring->intf->out_cons;
>>> + prod = ring->intf->out_prod;
>>> + mb();
>>> +
>>> + if (XEN_9PFS_RING_SIZE - xen_9pfs_queued(prod, cons, XEN_9PFS_RING_SIZE) < size) {
>>
>> This looks like p9_xen_write_todo().
> p9_xen_write_todo is just a wrapper around xen_9pfs_queued to provide
> a return value that works well with wait_event_interruptible.
>
> I would prefer not to call p9_xen_write_todo here, because it's simpler
> if we don't read prod and cons twice.
I was referring to the whole code fragment after spin_lock_irqsave(),
not just the last line. Isn't it exactly !p9_xen_write_todo()?
>
>
>> BTW, where is xen_9pfs_queued()
>> defined? I couldn't find it. Same for xen_9pfs_mask() and
>> xen_9pfs_write_packet().
> They are provided by the new ring macros, see
> include/xen/interface/io/ring.h (the first patch).
Oh, right. I was searching for the string literally.
-boris
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
next prev parent reply other threads:[~2017-03-08 13:57 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <alpine.DEB.2.10.1703061147250.17906@sstabellini-ThinkPad-X260>
2017-03-06 20:01 ` [PATCH 1/7] xen: import new ring macros in ring.h Stefano Stabellini
2017-03-06 20:01 ` [PATCH 2/7] xen: introduce the header file for the Xen 9pfs transport protocol Stefano Stabellini
2017-03-06 21:22 ` Boris Ostrovsky
2017-03-06 21:36 ` Stefano Stabellini
[not found] ` <alpine.DEB.2.10.1703061334520.17906@sstabellini-ThinkPad-X260>
2017-03-06 21:42 ` Boris Ostrovsky
2017-03-06 20:01 ` [PATCH 3/7] xen/9pfs: introduce Xen 9pfs transport driver Stefano Stabellini
2017-03-06 20:01 ` [PATCH 4/7] xen/9pfs: connect to the backend Stefano Stabellini
2017-03-07 15:03 ` Boris Ostrovsky
2017-03-08 0:11 ` Stefano Stabellini
2017-03-08 13:47 ` Boris Ostrovsky
2017-03-08 19:22 ` Stefano Stabellini
2017-03-07 17:37 ` Julien Grall
2017-03-08 0:49 ` Stefano Stabellini
2017-03-08 12:25 ` Julien Grall
2017-03-08 19:08 ` Stefano Stabellini
2017-03-06 20:01 ` [PATCH 5/7] xen/9pfs: send requests " Stefano Stabellini
2017-03-07 15:27 ` Boris Ostrovsky
2017-03-08 0:55 ` Stefano Stabellini
[not found] ` <alpine.DEB.2.10.1703071650320.17906@sstabellini-ThinkPad-X260>
2017-03-08 13:58 ` Boris Ostrovsky [this message]
2017-03-08 19:33 ` Stefano Stabellini
2017-03-08 20:02 ` Boris Ostrovsky
2017-03-08 20:56 ` Stefano Stabellini
2017-03-08 21:01 ` Boris Ostrovsky
2017-03-06 20:01 ` [PATCH 6/7] xen/9pfs: receive responses Stefano Stabellini
2017-03-07 15:49 ` Boris Ostrovsky
2017-03-08 1:06 ` Stefano Stabellini
2017-03-08 1:13 ` Stefano Stabellini
2017-03-08 20:11 ` Konrad Rzeszutek Wilk
2017-03-08 14:33 ` Boris Ostrovsky
2017-03-08 19:26 ` Stefano Stabellini
2017-03-06 20:01 ` [PATCH 7/7] xen/9pfs: build 9pfs Xen transport driver Stefano Stabellini
2017-03-07 17:15 ` [PATCH 1/7] xen: import new ring macros in ring.h Julien Grall
2017-03-08 0:12 ` Stefano Stabellini
2017-03-08 11:14 ` Julien Grall
2017-03-07 16:38 ` [PATCH 0/7] Xen transport for 9pfs frontend driver Roger Pau Monné
2017-03-07 18:27 ` Stefano Stabellini
2017-03-09 3:02 ` Roger Pau Monné
2017-03-13 22:36 ` 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=c7e0ddcd-b0b4-182f-40d6-fc1b5bc2d0a1@oracle.com \
--to=boris.ostrovsky@oracle.com \
--cc=ericvh@gmail.com \
--cc=jgross@suse.com \
--cc=linux-kernel@vger.kernel.org \
--cc=lucho@ionkov.net \
--cc=rminnich@sandia.gov \
--cc=sstabellini@kernel.org \
--cc=stefano@aporeto.com \
--cc=v9fs-developer@lists.sourceforge.net \
--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: 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).