From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755843AbdCGQa5 (ORCPT ); Tue, 7 Mar 2017 11:30:57 -0500 Received: from aserp1050.oracle.com ([141.146.126.70]:24255 "EHLO aserp1050.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755476AbdCGQab (ORCPT ); Tue, 7 Mar 2017 11:30:31 -0500 Subject: Re: [PATCH 5/7] xen/9pfs: send requests to the backend To: Stefano Stabellini , xen-devel@lists.xenproject.org References: <1488830488-18506-1-git-send-email-sstabellini@kernel.org> <1488830488-18506-5-git-send-email-sstabellini@kernel.org> Cc: linux-kernel@vger.kernel.org, Stefano Stabellini , jgross@suse.com, Eric Van Hensbergen , Ron Minnich , Latchesar Ionkov , v9fs-developer@lists.sourceforge.net From: Boris Ostrovsky Message-ID: <5351d729-6b53-aa30-55e8-dd3f55324831@oracle.com> Date: Tue, 7 Mar 2017 10:27:18 -0500 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.6.0 MIME-Version: 1.0 In-Reply-To: <1488830488-18506-5-git-send-email-sstabellini@kernel.org> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 8bit X-Source-IP: aserp1040.oracle.com [141.146.126.69] Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 03/06/2017 03:01 PM, Stefano Stabellini wrote: > Implement struct p9_trans_module create and close functions by looking > at the available Xen 9pfs frontend-backend connections. We don't expect > many frontend-backend connections, thus walking a list is OK. > > Send requests to the backend by copying each request to one of the > available rings (each frontend-backend connection comes with multiple > rings). Handle the ring and notifications following the 9pfs > specification. If there are not enough free bytes on the ring for the > request, wait on the wait_queue: the backend will send a notification > after consuming more requests. > > Signed-off-by: Stefano Stabellini > CC: boris.ostrovsky@oracle.com > CC: jgross@suse.com > CC: Eric Van Hensbergen > CC: Ron Minnich > CC: Latchesar Ionkov > CC: v9fs-developer@lists.sourceforge.net > --- > net/9p/trans_xen.c | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++- > 1 file changed, 82 insertions(+), 1 deletion(-) > > diff --git a/net/9p/trans_xen.c b/net/9p/trans_xen.c > index 9f6cf8d..4e26556 100644 > --- a/net/9p/trans_xen.c > +++ b/net/9p/trans_xen.c > @@ -47,22 +47,103 @@ struct xen_9pfs_front_priv { > }; > static LIST_HEAD(xen_9pfs_devs); > > +/* We don't currently allow canceling of requests */ > static int p9_xen_cancel(struct p9_client *client, struct p9_req_t *req) > { > - return 0; > + return 1; > } > > static int p9_xen_create(struct p9_client *client, const char *addr, char *args) > { > + struct xen_9pfs_front_priv *priv = NULL; > + > + list_for_each_entry(priv, &xen_9pfs_devs, list) { > + if (!strcmp(priv->tag, addr)) > + break; > + } You could simplify this (and p9_xen_close()) but assigning client and returning from inside the 'if' statement. I am also not sure you need to initialize priv. > + if (!priv || strcmp(priv->tag, addr)) > + return -EINVAL; > + > + priv->client = client; > return 0; > } > > static void p9_xen_close(struct p9_client *client) > { > + struct xen_9pfs_front_priv *priv = NULL; > + > + list_for_each_entry(priv, &xen_9pfs_devs, list) { > + if (priv->client == client) > + break; > + } > + if (!priv || priv->client != client) > + return; > + > + priv->client = NULL; > + return; > +} > + > +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(). BTW, where is xen_9pfs_queued() defined? I couldn't find it. Same for xen_9pfs_mask() and xen_9pfs_write_packet(). -boris > + spin_unlock_irqrestore(&ring->lock, flags); > + goto again; > + } > + > + masked_prod = xen_9pfs_mask(prod, XEN_9PFS_RING_SIZE); > + masked_cons = xen_9pfs_mask(cons, XEN_9PFS_RING_SIZE); > + > + xen_9pfs_write_packet(ring->ring.out, > + &masked_prod, masked_cons, > + XEN_9PFS_RING_SIZE, p9_req->tc->sdata, size); > + > + p9_req->status = REQ_STATUS_SENT; > + wmb(); /* write ring before updating pointer */ > + prod += size; > + ring->intf->out_prod = prod; > + spin_unlock_irqrestore(&ring->lock, flags); > + notify_remote_via_irq(ring->irq); > + > return 0; > } > > From mboxrd@z Thu Jan 1 00:00:00 1970 From: Boris Ostrovsky Subject: Re: [PATCH 5/7] xen/9pfs: send requests to the backend Date: Tue, 7 Mar 2017 10:27:18 -0500 Message-ID: <5351d729-6b53-aa30-55e8-dd3f55324831@oracle.com> References: <1488830488-18506-1-git-send-email-sstabellini@kernel.org> <1488830488-18506-5-git-send-email-sstabellini@kernel.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1clH0M-0001tZ-Aw for xen-devel@lists.xenproject.org; Tue, 07 Mar 2017 15:26:26 +0000 In-Reply-To: <1488830488-18506-5-git-send-email-sstabellini@kernel.org> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Stefano Stabellini , xen-devel@lists.xenproject.org Cc: jgross@suse.com, Latchesar Ionkov , Eric Van Hensbergen , linux-kernel@vger.kernel.org, Stefano Stabellini , v9fs-developer@lists.sourceforge.net, Ron Minnich List-Id: xen-devel@lists.xenproject.org T24gMDMvMDYvMjAxNyAwMzowMSBQTSwgU3RlZmFubyBTdGFiZWxsaW5pIHdyb3RlOgo+IEltcGxl bWVudCBzdHJ1Y3QgcDlfdHJhbnNfbW9kdWxlIGNyZWF0ZSBhbmQgY2xvc2UgZnVuY3Rpb25zIGJ5 IGxvb2tpbmcKPiBhdCB0aGUgYXZhaWxhYmxlIFhlbiA5cGZzIGZyb250ZW5kLWJhY2tlbmQgY29u bmVjdGlvbnMuIFdlIGRvbid0IGV4cGVjdAo+IG1hbnkgZnJvbnRlbmQtYmFja2VuZCBjb25uZWN0 aW9ucywgdGh1cyB3YWxraW5nIGEgbGlzdCBpcyBPSy4KPiAKPiBTZW5kIHJlcXVlc3RzIHRvIHRo ZSBiYWNrZW5kIGJ5IGNvcHlpbmcgZWFjaCByZXF1ZXN0IHRvIG9uZSBvZiB0aGUKPiBhdmFpbGFi bGUgcmluZ3MgKGVhY2ggZnJvbnRlbmQtYmFja2VuZCBjb25uZWN0aW9uIGNvbWVzIHdpdGggbXVs dGlwbGUKPiByaW5ncykuIEhhbmRsZSB0aGUgcmluZyBhbmQgbm90aWZpY2F0aW9ucyBmb2xsb3dp bmcgdGhlIDlwZnMKPiBzcGVjaWZpY2F0aW9uLiBJZiB0aGVyZSBhcmUgbm90IGVub3VnaCBmcmVl IGJ5dGVzIG9uIHRoZSByaW5nIGZvciB0aGUKPiByZXF1ZXN0LCB3YWl0IG9uIHRoZSB3YWl0X3F1 ZXVlOiB0aGUgYmFja2VuZCB3aWxsIHNlbmQgYSBub3RpZmljYXRpb24KPiBhZnRlciBjb25zdW1p bmcgbW9yZSByZXF1ZXN0cy4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBTdGVmYW5vIFN0YWJlbGxpbmkg PHN0ZWZhbm9AYXBvcmV0by5jb20+Cj4gQ0M6IGJvcmlzLm9zdHJvdnNreUBvcmFjbGUuY29tCj4g Q0M6IGpncm9zc0BzdXNlLmNvbQo+IENDOiBFcmljIFZhbiBIZW5zYmVyZ2VuIDxlcmljdmhAZ21h aWwuY29tPgo+IENDOiBSb24gTWlubmljaCA8cm1pbm5pY2hAc2FuZGlhLmdvdj4KPiBDQzogTGF0 Y2hlc2FyIElvbmtvdiA8bHVjaG9AaW9ua292Lm5ldD4KPiBDQzogdjlmcy1kZXZlbG9wZXJAbGlz dHMuc291cmNlZm9yZ2UubmV0Cj4gLS0tCj4gIG5ldC85cC90cmFuc194ZW4uYyB8IDgzICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQo+ICAxIGZp bGUgY2hhbmdlZCwgODIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQo+IAo+IGRpZmYgLS1n aXQgYS9uZXQvOXAvdHJhbnNfeGVuLmMgYi9uZXQvOXAvdHJhbnNfeGVuLmMKPiBpbmRleCA5ZjZj ZjhkLi40ZTI2NTU2IDEwMDY0NAo+IC0tLSBhL25ldC85cC90cmFuc194ZW4uYwo+ICsrKyBiL25l dC85cC90cmFuc194ZW4uYwo+IEBAIC00NywyMiArNDcsMTAzIEBAIHN0cnVjdCB4ZW5fOXBmc19m cm9udF9wcml2IHsKPiAgfTsKPiAgc3RhdGljIExJU1RfSEVBRCh4ZW5fOXBmc19kZXZzKTsKPiAg Cj4gKy8qIFdlIGRvbid0IGN1cnJlbnRseSBhbGxvdyBjYW5jZWxpbmcgb2YgcmVxdWVzdHMgKi8K PiAgc3RhdGljIGludCBwOV94ZW5fY2FuY2VsKHN0cnVjdCBwOV9jbGllbnQgKmNsaWVudCwgc3Ry dWN0IHA5X3JlcV90ICpyZXEpCj4gIHsKPiAtCXJldHVybiAwOwo+ICsJcmV0dXJuIDE7Cj4gIH0K PiAgCj4gIHN0YXRpYyBpbnQgcDlfeGVuX2NyZWF0ZShzdHJ1Y3QgcDlfY2xpZW50ICpjbGllbnQs IGNvbnN0IGNoYXIgKmFkZHIsIGNoYXIgKmFyZ3MpCj4gIHsKPiArCXN0cnVjdCB4ZW5fOXBmc19m cm9udF9wcml2ICpwcml2ID0gTlVMTDsKPiArCj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHByaXYs ICZ4ZW5fOXBmc19kZXZzLCBsaXN0KSB7Cj4gKwkJaWYgKCFzdHJjbXAocHJpdi0+dGFnLCBhZGRy KSkKPiArCQkJYnJlYWs7Cj4gKwl9CgoKWW91IGNvdWxkIHNpbXBsaWZ5IHRoaXMgKGFuZCBwOV94 ZW5fY2xvc2UoKSkgYnV0IGFzc2lnbmluZyBjbGllbnQgYW5kCnJldHVybmluZyBmcm9tIGluc2lk ZSB0aGUgJ2lmJyBzdGF0ZW1lbnQuCgpJIGFtIGFsc28gbm90IHN1cmUgeW91IG5lZWQgdG8gaW5p dGlhbGl6ZSBwcml2LgoKCj4gKwlpZiAoIXByaXYgfHwgc3RyY21wKHByaXYtPnRhZywgYWRkcikp Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJcHJpdi0+Y2xpZW50ID0gY2xpZW50OyAKPiAg CXJldHVybiAwOwo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZCBwOV94ZW5fY2xvc2Uoc3RydWN0IHA5 X2NsaWVudCAqY2xpZW50KQo+ICB7Cj4gKwlzdHJ1Y3QgeGVuXzlwZnNfZnJvbnRfcHJpdiAqcHJp diA9IE5VTEw7Cj4gKwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShwcml2LCAmeGVuXzlwZnNfZGV2 cywgbGlzdCkgewo+ICsJCWlmIChwcml2LT5jbGllbnQgPT0gY2xpZW50KQo+ICsJCQlicmVhazsK PiArCX0KPiArCWlmICghcHJpdiB8fCBwcml2LT5jbGllbnQgIT0gY2xpZW50KQo+ICsJCXJldHVy bjsKPiArCj4gKwlwcml2LT5jbGllbnQgPSBOVUxMOyAKPiArCXJldHVybjsKPiArfQo+ICsKPiAr c3RhdGljIGludCBwOV94ZW5fd3JpdGVfdG9kbyhzdHJ1Y3QgeGVuXzlwZnNfZGF0YXJpbmcgKnJp bmcsIFJJTkdfSURYIHNpemUpCj4gK3sKPiArCVJJTkdfSURYIGNvbnMsIHByb2Q7Cj4gKwo+ICsJ Y29ucyA9IHJpbmctPmludGYtPm91dF9jb25zOwo+ICsJcHJvZCA9IHJpbmctPmludGYtPm91dF9w cm9kOwo+ICsJbWIoKTsKPiArCj4gKwlpZiAoWEVOXzlQRlNfUklOR19TSVpFIC0geGVuXzlwZnNf cXVldWVkKHByb2QsIGNvbnMsIFhFTl85UEZTX1JJTkdfU0laRSkgPj0gc2l6ZSkKPiArCQlyZXR1 cm4gMTsKPiArCWVsc2UKPiArCQlyZXR1cm4gMDsKPiAgfQo+ICAKPiAgc3RhdGljIGludCBwOV94 ZW5fcmVxdWVzdChzdHJ1Y3QgcDlfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBwOV9yZXFfdCAqcDlf cmVxKQo+ICB7Cj4gKwlzdHJ1Y3QgeGVuXzlwZnNfZnJvbnRfcHJpdiAqcHJpdiA9IE5VTEw7Cj4g KwlSSU5HX0lEWCBjb25zLCBwcm9kLCBtYXNrZWRfY29ucywgbWFza2VkX3Byb2Q7Cj4gKwl1bnNp Z25lZCBsb25nIGZsYWdzOwo+ICsJdWludDMyX3Qgc2l6ZSA9IHA5X3JlcS0+dGMtPnNpemU7Cj4g KwlzdHJ1Y3QgeGVuXzlwZnNfZGF0YXJpbmcgKnJpbmc7Cj4gKwlpbnQgbnVtOwo+ICsKPiArCWxp c3RfZm9yX2VhY2hfZW50cnkocHJpdiwgJnhlbl85cGZzX2RldnMsIGxpc3QpIHsKPiArCQlpZiAo cHJpdi0+Y2xpZW50ID09IGNsaWVudCkKPiArCQkJYnJlYWs7Cj4gKwl9Cj4gKwlpZiAocHJpdiA9 PSBOVUxMIHx8IHByaXYtPmNsaWVudCAhPSBjbGllbnQpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4g Kwo+ICsJbnVtID0gcDlfcmVxLT50Yy0+dGFnICUgcHJpdi0+bnVtX3JpbmdzOwo+ICsJcmluZyA9 ICZwcml2LT5yaW5nc1tudW1dOwo+ICsKPiArYWdhaW46Cj4gKwl3aGlsZSAod2FpdF9ldmVudF9p bnRlcnJ1cHRpYmxlKHJpbmctPndxLAo+ICsJCQkJcDlfeGVuX3dyaXRlX3RvZG8ocmluZywgc2l6 ZSkgPiAwKSAhPSAwKTsKPiArCj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmluZy0+bG9jaywgZmxh Z3MpOwo+ICsJY29ucyA9IHJpbmctPmludGYtPm91dF9jb25zOwo+ICsJcHJvZCA9IHJpbmctPmlu dGYtPm91dF9wcm9kOwo+ICsJbWIoKTsKPiArCj4gKwlpZiAoWEVOXzlQRlNfUklOR19TSVpFIC0g eGVuXzlwZnNfcXVldWVkKHByb2QsIGNvbnMsIFhFTl85UEZTX1JJTkdfU0laRSkgPCBzaXplKSB7 CgoKVGhpcyBsb29rcyBsaWtlIHA5X3hlbl93cml0ZV90b2RvKCkuIEJUVywgd2hlcmUgaXMgeGVu XzlwZnNfcXVldWVkKCkKZGVmaW5lZD8gSSBjb3VsZG4ndCBmaW5kIGl0LiBTYW1lIGZvciB4ZW5f OXBmc19tYXNrKCkgYW5kCnhlbl85cGZzX3dyaXRlX3BhY2tldCgpLgoKLWJvcmlzCgoKPiArCQlz cGluX3VubG9ja19pcnFyZXN0b3JlKCZyaW5nLT5sb2NrLCBmbGFncyk7Cj4gKwkJZ290byBhZ2Fp bjsKPiArCX0KPiArCj4gKwltYXNrZWRfcHJvZCA9IHhlbl85cGZzX21hc2socHJvZCwgWEVOXzlQ RlNfUklOR19TSVpFKTsKPiArCW1hc2tlZF9jb25zID0geGVuXzlwZnNfbWFzayhjb25zLCBYRU5f OVBGU19SSU5HX1NJWkUpOwo+ICsKPiArCXhlbl85cGZzX3dyaXRlX3BhY2tldChyaW5nLT5yaW5n Lm91dCwKPiArCQkJCSZtYXNrZWRfcHJvZCwgbWFza2VkX2NvbnMsCj4gKwkJCQlYRU5fOVBGU19S SU5HX1NJWkUsIHA5X3JlcS0+dGMtPnNkYXRhLCBzaXplKTsKPiArCj4gKwlwOV9yZXEtPnN0YXR1 cyA9IFJFUV9TVEFUVVNfU0VOVDsKPiArCXdtYigpOwkJCS8qIHdyaXRlIHJpbmcgYmVmb3JlIHVw ZGF0aW5nIHBvaW50ZXIgKi8KPiArCXByb2QgKz0gc2l6ZTsKPiArCXJpbmctPmludGYtPm91dF9w cm9kID0gcHJvZDsKPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJpbmctPmxvY2ssIGZsYWdz KTsKPiArCW5vdGlmeV9yZW1vdGVfdmlhX2lycShyaW5nLT5pcnEpOwo+ICsKPiAgCXJldHVybiAw Owo+ICB9Cj4gIAo+IAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0 cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=