From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34366) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cl4ch-0008Bp-PL for qemu-devel@nongnu.org; Mon, 06 Mar 2017 21:13:14 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cl4cg-0002cn-MJ for qemu-devel@nongnu.org; Mon, 06 Mar 2017 21:13:11 -0500 Received: from mail.kernel.org ([198.145.29.136]:59638) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1cl4cg-0002cV-Bq for qemu-devel@nongnu.org; Mon, 06 Mar 2017 21:13:10 -0500 From: Stefano Stabellini Date: Mon, 6 Mar 2017 18:12:46 -0800 Message-Id: <1488852768-8935-6-git-send-email-sstabellini@kernel.org> In-Reply-To: <1488852768-8935-1-git-send-email-sstabellini@kernel.org> References: <1488852768-8935-1-git-send-email-sstabellini@kernel.org> Subject: [Qemu-devel] [PATCH 6/8] xen/9pfs: implement in/out_iov_from_pdu and vmarshal/vunmarshal List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: xen-devel@lists.xenproject.org, sstabellini@kernel.org, Stefano Stabellini , anthony.perard@citrix.com, jgross@suse.com, "Aneesh Kumar K.V" , Greg Kurz Implement xen_9pfs_init_in/out_iov_from_pdu and xen_9pfs_pdu_vmarshal/vunmarshall by creating new sg pointing to the data on the ring. This is safe as we only handle one request per ring at any given time. Signed-off-by: Stefano Stabellini CC: anthony.perard@citrix.com CC: jgross@suse.com CC: Aneesh Kumar K.V CC: Greg Kurz --- hw/9pfs/xen-9p-backend.c | 91 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 89 insertions(+), 2 deletions(-) diff --git a/hw/9pfs/xen-9p-backend.c b/hw/9pfs/xen-9p-backend.c index d4c3d36..0570e07 100644 --- a/hw/9pfs/xen-9p-backend.c +++ b/hw/9pfs/xen-9p-backend.c @@ -48,12 +48,77 @@ struct Xen9pfsDev { struct Xen9pfsRing *rings; }; +static void xen_9pfs_in_sg(struct Xen9pfsRing *ring, + struct iovec *in_sg, + int *num, + uint32_t idx, + uint32_t size) +{ + RING_IDX cons, prod, masked_prod, masked_cons; + + cons = ring->intf->in_cons; + prod = ring->intf->in_prod; + xen_rmb(); + masked_prod = xen_9pfs_mask(prod, XEN_9PFS_RING_SIZE); + masked_cons = xen_9pfs_mask(cons, XEN_9PFS_RING_SIZE); + + if (masked_prod < masked_cons) { + in_sg[0].iov_base = ring->ring.in + masked_prod; + in_sg[0].iov_len = masked_cons - masked_prod; + *num = 1; + } else { + in_sg[0].iov_base = ring->ring.in + masked_prod; + in_sg[0].iov_len = XEN_9PFS_RING_SIZE - masked_prod; + in_sg[1].iov_base = ring->ring.in; + in_sg[1].iov_len = masked_cons; + *num = 2; + } +} + +static void xen_9pfs_out_sg(struct Xen9pfsRing *ring, + struct iovec *out_sg, + int *num, + uint32_t idx) +{ + RING_IDX cons, prod, masked_prod, masked_cons; + + cons = ring->intf->out_cons; + prod = ring->intf->out_prod; + xen_rmb(); + masked_prod = xen_9pfs_mask(prod, XEN_9PFS_RING_SIZE); + masked_cons = xen_9pfs_mask(cons, XEN_9PFS_RING_SIZE); + + if (masked_cons < masked_prod) { + out_sg[0].iov_base = ring->ring.out + masked_cons; + out_sg[0].iov_len = ring->out_size; + *num = 1; + } else { + if (ring->out_size > (XEN_9PFS_RING_SIZE - masked_cons)) { + out_sg[0].iov_base = ring->ring.out + masked_cons; + out_sg[0].iov_len = XEN_9PFS_RING_SIZE - masked_cons; + out_sg[1].iov_base = ring->ring.out; + out_sg[1].iov_len = ring->out_size - (XEN_9PFS_RING_SIZE - masked_cons); + *num = 2; + } else { + out_sg[0].iov_base = ring->ring.out + masked_cons; + out_sg[0].iov_len = ring->out_size; + *num = 1; + } + } +} + static ssize_t xen_9pfs_pdu_vmarshal(V9fsPDU *pdu, size_t offset, const char *fmt, va_list ap) { - return 0; + struct Xen9pfsDev *xen_9pfs = container_of(pdu->s, struct Xen9pfsDev, state); + struct iovec in_sg[2]; + int num; + + xen_9pfs_in_sg(&xen_9pfs->rings[pdu->tag % xen_9pfs->num_rings], + in_sg, &num, pdu->idx, ROUND_UP(offset + 128, 512)); + return v9fs_iov_vmarshal(in_sg, num, offset, 0, fmt, ap); } static ssize_t xen_9pfs_pdu_vunmarshal(V9fsPDU *pdu, @@ -61,13 +126,27 @@ static ssize_t xen_9pfs_pdu_vunmarshal(V9fsPDU *pdu, const char *fmt, va_list ap) { - return 0; + struct Xen9pfsDev *xen_9pfs = container_of(pdu->s, struct Xen9pfsDev, state); + struct iovec out_sg[2]; + int num; + + xen_9pfs_out_sg(&xen_9pfs->rings[pdu->tag % xen_9pfs->num_rings], + out_sg, &num, pdu->idx); + return v9fs_iov_vunmarshal(out_sg, num, offset, 0, fmt, ap); } static void xen_9pfs_init_out_iov_from_pdu(V9fsPDU *pdu, struct iovec **piov, unsigned int *pniov) { + struct Xen9pfsDev *xen_9pfs = container_of(pdu->s, struct Xen9pfsDev, state); + struct Xen9pfsRing *ring = &xen_9pfs->rings[pdu->tag % xen_9pfs->num_rings]; + struct iovec *sg = g_malloc0(sizeof(*sg)*2); + int num; + + xen_9pfs_out_sg(ring, sg, &num, pdu->idx); + *piov = sg; + *pniov = num; } static void xen_9pfs_init_in_iov_from_pdu(V9fsPDU *pdu, @@ -75,6 +154,14 @@ static void xen_9pfs_init_in_iov_from_pdu(V9fsPDU *pdu, unsigned int *pniov, size_t size) { + struct Xen9pfsDev *xen_9pfs = container_of(pdu->s, struct Xen9pfsDev, state); + struct Xen9pfsRing *ring = &xen_9pfs->rings[pdu->tag % xen_9pfs->num_rings]; + struct iovec *sg = g_malloc0(sizeof(*sg)*2); + int num; + + xen_9pfs_in_sg(ring, sg, &num, pdu->idx, size); + *piov = sg; + *pniov = num; } static void xen_9pfs_push_and_notify(V9fsPDU *pdu) -- 1.9.1 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Stabellini Subject: [PATCH 6/8] xen/9pfs: implement in/out_iov_from_pdu and vmarshal/vunmarshal Date: Mon, 6 Mar 2017 18:12:46 -0800 Message-ID: <1488852768-8935-6-git-send-email-sstabellini@kernel.org> References: <1488852768-8935-1-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.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cl4ci-000250-LK for xen-devel@lists.xenproject.org; Tue, 07 Mar 2017 02:13:12 +0000 In-Reply-To: <1488852768-8935-1-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: qemu-devel@nongnu.org Cc: jgross@suse.com, sstabellini@kernel.org, Greg Kurz , Stefano Stabellini , "Aneesh Kumar K.V" , anthony.perard@citrix.com, xen-devel@lists.xenproject.org List-Id: xen-devel@lists.xenproject.org SW1wbGVtZW50IHhlbl85cGZzX2luaXRfaW4vb3V0X2lvdl9mcm9tX3BkdSBhbmQKeGVuXzlwZnNf cGR1X3ZtYXJzaGFsL3Z1bm1hcnNoYWxsIGJ5IGNyZWF0aW5nIG5ldyBzZyBwb2ludGluZyB0byB0 aGUKZGF0YSBvbiB0aGUgcmluZy4KClRoaXMgaXMgc2FmZSBhcyB3ZSBvbmx5IGhhbmRsZSBvbmUg cmVxdWVzdCBwZXIgcmluZyBhdCBhbnkgZ2l2ZW4gdGltZS4KClNpZ25lZC1vZmYtYnk6IFN0ZWZh bm8gU3RhYmVsbGluaSA8c3RlZmFub0BhcG9yZXRvLmNvbT4KQ0M6IGFudGhvbnkucGVyYXJkQGNp dHJpeC5jb20KQ0M6IGpncm9zc0BzdXNlLmNvbQpDQzogQW5lZXNoIEt1bWFyIEsuViA8YW5lZXNo Lmt1bWFyQGxpbnV4LnZuZXQuaWJtLmNvbT4KQ0M6IEdyZWcgS3VyeiA8Z3JvdWdAa2FvZC5vcmc+ Ci0tLQogaHcvOXBmcy94ZW4tOXAtYmFja2VuZC5jIHwgOTEgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKy0tCiAxIGZpbGUgY2hhbmdlZCwgODkgaW5zZXJ0aW9u cygrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9ody85cGZzL3hlbi05cC1iYWNrZW5k LmMgYi9ody85cGZzL3hlbi05cC1iYWNrZW5kLmMKaW5kZXggZDRjM2QzNi4uMDU3MGUwNyAxMDA2 NDQKLS0tIGEvaHcvOXBmcy94ZW4tOXAtYmFja2VuZC5jCisrKyBiL2h3LzlwZnMveGVuLTlwLWJh Y2tlbmQuYwpAQCAtNDgsMTIgKzQ4LDc3IEBAIHN0cnVjdCBYZW45cGZzRGV2IHsKICAgICBzdHJ1 Y3QgWGVuOXBmc1JpbmcgKnJpbmdzOwogfTsKIAorc3RhdGljIHZvaWQgeGVuXzlwZnNfaW5fc2co c3RydWN0IFhlbjlwZnNSaW5nICpyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IGlvdmVjICppbl9zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqbnVtLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaWR4LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSkKK3sKKyAgICBSSU5HX0lEWCBjb25zLCBwcm9kLCBt YXNrZWRfcHJvZCwgbWFza2VkX2NvbnM7CisKKyAgICBjb25zID0gcmluZy0+aW50Zi0+aW5fY29u czsKKyAgICBwcm9kID0gcmluZy0+aW50Zi0+aW5fcHJvZDsKKyAgICB4ZW5fcm1iKCk7CisgICAg bWFza2VkX3Byb2QgPSB4ZW5fOXBmc19tYXNrKHByb2QsIFhFTl85UEZTX1JJTkdfU0laRSk7Cisg ICAgbWFza2VkX2NvbnMgPSB4ZW5fOXBmc19tYXNrKGNvbnMsIFhFTl85UEZTX1JJTkdfU0laRSk7 CisKKyAgICBpZiAobWFza2VkX3Byb2QgPCBtYXNrZWRfY29ucykgeworICAgICAgICBpbl9zZ1sw XS5pb3ZfYmFzZSA9IHJpbmctPnJpbmcuaW4gKyBtYXNrZWRfcHJvZDsKKyAgICAgICAgaW5fc2db MF0uaW92X2xlbiA9IG1hc2tlZF9jb25zIC0gbWFza2VkX3Byb2Q7CisgICAgICAgICpudW0gPSAx OworICAgIH0gZWxzZSB7CisgICAgICAgIGluX3NnWzBdLmlvdl9iYXNlID0gcmluZy0+cmluZy5p biArIG1hc2tlZF9wcm9kOworICAgICAgICBpbl9zZ1swXS5pb3ZfbGVuID0gWEVOXzlQRlNfUklO R19TSVpFIC0gbWFza2VkX3Byb2Q7CisgICAgICAgIGluX3NnWzFdLmlvdl9iYXNlID0gcmluZy0+ cmluZy5pbjsKKyAgICAgICAgaW5fc2dbMV0uaW92X2xlbiA9IG1hc2tlZF9jb25zOworICAgICAg ICAqbnVtID0gMjsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHhlbl85cGZzX291dF9zZyhzdHJ1 Y3QgWGVuOXBmc1JpbmcgKnJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IGlvdmVjICpvdXRfc2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpudW0sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaWR4KQoreworICAgIFJJTkdfSURY IGNvbnMsIHByb2QsIG1hc2tlZF9wcm9kLCBtYXNrZWRfY29uczsKKworICAgIGNvbnMgPSByaW5n LT5pbnRmLT5vdXRfY29uczsKKyAgICBwcm9kID0gcmluZy0+aW50Zi0+b3V0X3Byb2Q7CisgICAg eGVuX3JtYigpOworICAgIG1hc2tlZF9wcm9kID0geGVuXzlwZnNfbWFzayhwcm9kLCBYRU5fOVBG U19SSU5HX1NJWkUpOworICAgIG1hc2tlZF9jb25zID0geGVuXzlwZnNfbWFzayhjb25zLCBYRU5f OVBGU19SSU5HX1NJWkUpOworCisgICAgaWYgKG1hc2tlZF9jb25zIDwgbWFza2VkX3Byb2QpIHsK KyAgICAgICAgb3V0X3NnWzBdLmlvdl9iYXNlID0gcmluZy0+cmluZy5vdXQgKyBtYXNrZWRfY29u czsKKyAgICAgICAgb3V0X3NnWzBdLmlvdl9sZW4gPSByaW5nLT5vdXRfc2l6ZTsKKyAgICAgICAg Km51bSA9IDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHJpbmctPm91dF9zaXplID4gKFhF Tl85UEZTX1JJTkdfU0laRSAtIG1hc2tlZF9jb25zKSkgeworICAgICAgICAgICAgb3V0X3NnWzBd Lmlvdl9iYXNlID0gcmluZy0+cmluZy5vdXQgKyBtYXNrZWRfY29uczsKKyAgICAgICAgICAgIG91 dF9zZ1swXS5pb3ZfbGVuID0gWEVOXzlQRlNfUklOR19TSVpFIC0gbWFza2VkX2NvbnM7CisgICAg ICAgICAgICBvdXRfc2dbMV0uaW92X2Jhc2UgPSByaW5nLT5yaW5nLm91dDsKKyAgICAgICAgICAg IG91dF9zZ1sxXS5pb3ZfbGVuID0gcmluZy0+b3V0X3NpemUgLSAoWEVOXzlQRlNfUklOR19TSVpF IC0gbWFza2VkX2NvbnMpOworICAgICAgICAgICAgKm51bSA9IDI7CisgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICBvdXRfc2dbMF0uaW92X2Jhc2UgPSByaW5nLT5yaW5nLm91dCArIG1hc2tl ZF9jb25zOworICAgICAgICAgICAgb3V0X3NnWzBdLmlvdl9sZW4gPSByaW5nLT5vdXRfc2l6ZTsK KyAgICAgICAgICAgICpudW0gPSAxOworICAgICAgICB9CisgICAgfQorfQorCiBzdGF0aWMgc3Np emVfdCB4ZW5fOXBmc19wZHVfdm1hcnNoYWwoVjlmc1BEVSAqcGR1LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm10LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZhX2xpc3QgYXApCiB7Ci0gICAgcmV0dXJuIDA7CisgICAgc3RydWN0 IFhlbjlwZnNEZXYgKnhlbl85cGZzID0gY29udGFpbmVyX29mKHBkdS0+cywgc3RydWN0IFhlbjlw ZnNEZXYsIHN0YXRlKTsKKyAgICBzdHJ1Y3QgaW92ZWMgaW5fc2dbMl07CisgICAgaW50IG51bTsK KworICAgIHhlbl85cGZzX2luX3NnKCZ4ZW5fOXBmcy0+cmluZ3NbcGR1LT50YWcgJSB4ZW5fOXBm cy0+bnVtX3JpbmdzXSwKKyAgICAgICAgICAgICAgICAgICBpbl9zZywgJm51bSwgcGR1LT5pZHgs IFJPVU5EX1VQKG9mZnNldCArIDEyOCwgNTEyKSk7CisgICAgcmV0dXJuIHY5ZnNfaW92X3ZtYXJz aGFsKGluX3NnLCBudW0sIG9mZnNldCwgMCwgZm10LCBhcCk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90 IHhlbl85cGZzX3BkdV92dW5tYXJzaGFsKFY5ZnNQRFUgKnBkdSwKQEAgLTYxLDEzICsxMjYsMjcg QEAgc3RhdGljIHNzaXplX3QgeGVuXzlwZnNfcGR1X3Z1bm1hcnNoYWwoVjlmc1BEVSAqcGR1LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm10LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCBhcCkKIHsKLSAg ICByZXR1cm4gMDsKKyAgICBzdHJ1Y3QgWGVuOXBmc0RldiAqeGVuXzlwZnMgPSBjb250YWluZXJf b2YocGR1LT5zLCBzdHJ1Y3QgWGVuOXBmc0Rldiwgc3RhdGUpOworICAgIHN0cnVjdCBpb3ZlYyBv dXRfc2dbMl07CisgICAgaW50IG51bTsKKworICAgIHhlbl85cGZzX291dF9zZygmeGVuXzlwZnMt PnJpbmdzW3BkdS0+dGFnICUgeGVuXzlwZnMtPm51bV9yaW5nc10sCisgICAgICAgICAgICAgICAg ICAgIG91dF9zZywgJm51bSwgcGR1LT5pZHgpOworICAgIHJldHVybiB2OWZzX2lvdl92dW5tYXJz aGFsKG91dF9zZywgbnVtLCBvZmZzZXQsIDAsIGZtdCwgYXApOwogfQogCiBzdGF0aWMgdm9pZCB4 ZW5fOXBmc19pbml0X291dF9pb3ZfZnJvbV9wZHUoVjlmc1BEVSAqcGR1LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpb3ZlYyAqKnBpb3YsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpwbmlv dikKIHsKKyAgICBzdHJ1Y3QgWGVuOXBmc0RldiAqeGVuXzlwZnMgPSBjb250YWluZXJfb2YocGR1 LT5zLCBzdHJ1Y3QgWGVuOXBmc0Rldiwgc3RhdGUpOworICAgIHN0cnVjdCBYZW45cGZzUmluZyAq cmluZyA9ICZ4ZW5fOXBmcy0+cmluZ3NbcGR1LT50YWcgJSB4ZW5fOXBmcy0+bnVtX3JpbmdzXTsK KyAgICBzdHJ1Y3QgaW92ZWMgKnNnID0gZ19tYWxsb2MwKHNpemVvZigqc2cpKjIpOworICAgIGlu dCBudW07CisKKyAgICB4ZW5fOXBmc19vdXRfc2cocmluZywgc2csICZudW0sIHBkdS0+aWR4KTsK KyAgICAqcGlvdiA9IHNnOworICAgICpwbmlvdiA9IG51bTsKIH0KIAogc3RhdGljIHZvaWQgeGVu XzlwZnNfaW5pdF9pbl9pb3ZfZnJvbV9wZHUoVjlmc1BEVSAqcGR1LApAQCAtNzUsNiArMTU0LDE0 IEBAIHN0YXRpYyB2b2lkIHhlbl85cGZzX2luaXRfaW5faW92X2Zyb21fcGR1KFY5ZnNQRFUgKnBk dSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu dCAqcG5pb3YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl X3Qgc2l6ZSkKIHsKKyAgICBzdHJ1Y3QgWGVuOXBmc0RldiAqeGVuXzlwZnMgPSBjb250YWluZXJf b2YocGR1LT5zLCBzdHJ1Y3QgWGVuOXBmc0Rldiwgc3RhdGUpOworICAgIHN0cnVjdCBYZW45cGZz UmluZyAqcmluZyA9ICZ4ZW5fOXBmcy0+cmluZ3NbcGR1LT50YWcgJSB4ZW5fOXBmcy0+bnVtX3Jp bmdzXTsKKyAgICBzdHJ1Y3QgaW92ZWMgKnNnID0gZ19tYWxsb2MwKHNpemVvZigqc2cpKjIpOwor ICAgIGludCBudW07CisKKyAgICB4ZW5fOXBmc19pbl9zZyhyaW5nLCBzZywgJm51bSwgcGR1LT5p ZHgsIHNpemUpOworICAgICpwaW92ID0gc2c7CisgICAgKnBuaW92ID0gbnVtOwogfQogCiBzdGF0 aWMgdm9pZCB4ZW5fOXBmc19wdXNoX2FuZF9ub3RpZnkoVjlmc1BEVSAqcGR1KQotLSAKMS45LjEK CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2 ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVu Lm9yZy94ZW4tZGV2ZWwK