From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:50405) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fEbBk-0004wg-A9 for qemu-devel@nongnu.org; Fri, 04 May 2018 09:55:57 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fEbBf-0003R5-Si for qemu-devel@nongnu.org; Fri, 04 May 2018 09:55:56 -0400 From: Paul Durrant Date: Fri, 4 May 2018 14:55:30 +0100 Message-ID: <1525442134-20488-5-git-send-email-paul.durrant@citrix.com> In-Reply-To: <1525442134-20488-1-git-send-email-paul.durrant@citrix.com> References: <1525442134-20488-1-git-send-email-paul.durrant@citrix.com> MIME-Version: 1.0 Content-Type: text/plain Subject: [Qemu-devel] [PATCH v2 4/8] xen_backend: add an emulation of grant copy List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: xen-devel@lists.xenproject.org, qemu-block@nongnu.org, qemu-devel@nongnu.org Cc: Paul Durrant , Stefano Stabellini , Anthony Perard Not all Xen environments support the xengnttab_grant_copy() operation. E.g. where the OS is FreeBSD or Xen is older than 4.8.0. This patch introduces an emulation of that operation using xengnttab_map_domain_grant_refs() and memcpy() for those environments. Signed-off-by: Paul Durrant --- Cc: Stefano Stabellini Cc: Anthony Perard v2: - New in v2 --- hw/xen/xen_backend.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/hw/xen/xen_backend.c b/hw/xen/xen_backend.c index 50412d6..3c3fc2c 100644 --- a/hw/xen/xen_backend.c +++ b/hw/xen/xen_backend.c @@ -146,6 +146,55 @@ void xen_be_unmap_grant_refs(struct XenDevice *xendev, void *ptr, } } +static int compat_copy_grant_refs(struct XenDevice *xendev, + bool to_domain, + XenGrantCopySegment segs[], + unsigned int nr_segs) +{ + uint32_t *refs = g_new(uint32_t, nr_segs); + int prot = to_domain ? PROT_WRITE : PROT_READ; + void *pages; + unsigned int i; + + for (i = 0; i < nr_segs; i++) { + XenGrantCopySegment *seg = &segs[i]; + + refs[i] = to_domain ? + seg->dest.foreign.ref : seg->source.foreign.ref; + } + + pages = xengnttab_map_domain_grant_refs(xendev->gnttabdev, nr_segs, + xen_domid, refs, prot); + if (!pages) { + xen_pv_printf(xendev, 0, + "xengnttab_map_domain_grant_refs failed: %s\n", + strerror(errno)); + g_free(refs); + return -1; + } + + for (i = 0; i < nr_segs; i++) { + XenGrantCopySegment *seg = &segs[i]; + void *page = pages + (i * XC_PAGE_SIZE); + + if (to_domain) { + memcpy(page + seg->dest.foreign.offset, seg->source.virt, + seg->len); + } else { + memcpy(seg->dest.virt, page + seg->source.foreign.offset, + seg->len); + } + } + + if (xengnttab_unmap(xendev->gnttabdev, pages, nr_segs)) { + xen_pv_printf(xendev, 0, "xengnttab_unmap failed: %s\n", + strerror(errno)); + } + + g_free(refs); + return 0; +} + int xen_be_copy_grant_refs(struct XenDevice *xendev, bool to_domain, XenGrantCopySegment segs[], @@ -157,6 +206,10 @@ int xen_be_copy_grant_refs(struct XenDevice *xendev, assert(xendev->ops->flags & DEVOPS_FLAG_NEED_GNTDEV); + if (!xen_feature_grant_copy) { + return compat_copy_grant_refs(xendev, to_domain, segs, nr_segs); + } + xengnttab_segs = g_new0(xengnttab_grant_copy_segment_t, nr_segs); for (i = 0; i < nr_segs; i++) { -- 2.1.4 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paul Durrant Subject: [PATCH v2 4/8] xen_backend: add an emulation of grant copy Date: Fri, 4 May 2018 14:55:30 +0100 Message-ID: <1525442134-20488-5-git-send-email-paul.durrant@citrix.com> References: <1525442134-20488-1-git-send-email-paul.durrant@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1fEbBf-0006w7-Q0 for xen-devel@lists.xenproject.org; Fri, 04 May 2018 13:55:51 +0000 In-Reply-To: <1525442134-20488-1-git-send-email-paul.durrant@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org, qemu-block@nongnu.org, qemu-devel@nongnu.org Cc: Anthony Perard , Paul Durrant , Stefano Stabellini List-Id: xen-devel@lists.xenproject.org Tm90IGFsbCBYZW4gZW52aXJvbm1lbnRzIHN1cHBvcnQgdGhlIHhlbmdudHRhYl9ncmFudF9jb3B5 KCkgb3BlcmF0aW9uLgpFLmcuIHdoZXJlIHRoZSBPUyBpcyBGcmVlQlNEIG9yIFhlbiBpcyBvbGRl ciB0aGFuIDQuOC4wLgoKVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGFuIGVtdWxhdGlvbiBvZiB0aGF0 IG9wZXJhdGlvbiB1c2luZwp4ZW5nbnR0YWJfbWFwX2RvbWFpbl9ncmFudF9yZWZzKCkgYW5kIG1l bWNweSgpIGZvciB0aG9zZSBlbnZpcm9ubWVudHMuCgpTaWduZWQtb2ZmLWJ5OiBQYXVsIER1cnJh bnQgPHBhdWwuZHVycmFudEBjaXRyaXguY29tPgotLS0KQ2M6IFN0ZWZhbm8gU3RhYmVsbGluaSA8 c3N0YWJlbGxpbmlAa2VybmVsLm9yZz4KQ2M6IEFudGhvbnkgUGVyYXJkIDxhbnRob255LnBlcmFy ZEBjaXRyaXguY29tPgoKdjI6CiAtIE5ldyBpbiB2MgotLS0KIGh3L3hlbi94ZW5fYmFja2VuZC5j IHwgNTMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KwogMSBmaWxlIGNoYW5nZWQsIDUzIGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9ody94ZW4v eGVuX2JhY2tlbmQuYyBiL2h3L3hlbi94ZW5fYmFja2VuZC5jCmluZGV4IDUwNDEyZDYuLjNjM2Zj MmMgMTAwNjQ0Ci0tLSBhL2h3L3hlbi94ZW5fYmFja2VuZC5jCisrKyBiL2h3L3hlbi94ZW5fYmFj a2VuZC5jCkBAIC0xNDYsNiArMTQ2LDU1IEBAIHZvaWQgeGVuX2JlX3VubWFwX2dyYW50X3JlZnMo c3RydWN0IFhlbkRldmljZSAqeGVuZGV2LCB2b2lkICpwdHIsCiAgICAgfQogfQogCitzdGF0aWMg aW50IGNvbXBhdF9jb3B5X2dyYW50X3JlZnMoc3RydWN0IFhlbkRldmljZSAqeGVuZGV2LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdG9fZG9tYWluLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFhlbkdyYW50Q29weVNlZ21lbnQgc2Vnc1tdLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBucl9zZWdzKQorewor ICAgIHVpbnQzMl90ICpyZWZzID0gZ19uZXcodWludDMyX3QsIG5yX3NlZ3MpOworICAgIGludCBw cm90ID0gdG9fZG9tYWluID8gUFJPVF9XUklURSA6IFBST1RfUkVBRDsKKyAgICB2b2lkICpwYWdl czsKKyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBucl9zZWdzOyBp KyspIHsKKyAgICAgICAgWGVuR3JhbnRDb3B5U2VnbWVudCAqc2VnID0gJnNlZ3NbaV07CisKKyAg ICAgICAgcmVmc1tpXSA9IHRvX2RvbWFpbiA/CisgICAgICAgICAgICBzZWctPmRlc3QuZm9yZWln bi5yZWYgOiBzZWctPnNvdXJjZS5mb3JlaWduLnJlZjsKKyAgICB9CisKKyAgICBwYWdlcyA9IHhl bmdudHRhYl9tYXBfZG9tYWluX2dyYW50X3JlZnMoeGVuZGV2LT5nbnR0YWJkZXYsIG5yX3NlZ3Ms CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhlbl9kb21pZCwg cmVmcywgcHJvdCk7CisgICAgaWYgKCFwYWdlcykgeworICAgICAgICB4ZW5fcHZfcHJpbnRmKHhl bmRldiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAieGVuZ250dGFiX21hcF9kb21haW5fZ3Jh bnRfcmVmcyBmYWlsZWQ6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgIHN0cmVycm9yKGVy cm5vKSk7CisgICAgICAgIGdfZnJlZShyZWZzKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0K KworICAgIGZvciAoaSA9IDA7IGkgPCBucl9zZWdzOyBpKyspIHsKKyAgICAgICAgWGVuR3JhbnRD b3B5U2VnbWVudCAqc2VnID0gJnNlZ3NbaV07CisgICAgICAgIHZvaWQgKnBhZ2UgPSBwYWdlcyAr IChpICogWENfUEFHRV9TSVpFKTsKKworICAgICAgICBpZiAodG9fZG9tYWluKSB7CisgICAgICAg ICAgICBtZW1jcHkocGFnZSArIHNlZy0+ZGVzdC5mb3JlaWduLm9mZnNldCwgc2VnLT5zb3VyY2Uu dmlydCwKKyAgICAgICAgICAgICAgICAgICBzZWctPmxlbik7CisgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICBtZW1jcHkoc2VnLT5kZXN0LnZpcnQsIHBhZ2UgKyBzZWctPnNvdXJjZS5mb3Jl aWduLm9mZnNldCwKKyAgICAgICAgICAgICAgICAgICBzZWctPmxlbik7CisgICAgICAgIH0KKyAg ICB9CisKKyAgICBpZiAoeGVuZ250dGFiX3VubWFwKHhlbmRldi0+Z250dGFiZGV2LCBwYWdlcywg bnJfc2VncykpIHsKKyAgICAgICAgeGVuX3B2X3ByaW50Zih4ZW5kZXYsIDAsICJ4ZW5nbnR0YWJf dW5tYXAgZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICBzdHJlcnJvcihlcnJu bykpOworICAgIH0KKworICAgIGdfZnJlZShyZWZzKTsKKyAgICByZXR1cm4gMDsKK30KKwogaW50 IHhlbl9iZV9jb3B5X2dyYW50X3JlZnMoc3RydWN0IFhlbkRldmljZSAqeGVuZGV2LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgYm9vbCB0b19kb21haW4sCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBYZW5HcmFudENvcHlTZWdtZW50IHNlZ3NbXSwKQEAgLTE1Nyw2ICsyMDYsMTAgQEAg aW50IHhlbl9iZV9jb3B5X2dyYW50X3JlZnMoc3RydWN0IFhlbkRldmljZSAqeGVuZGV2LAogCiAg ICAgYXNzZXJ0KHhlbmRldi0+b3BzLT5mbGFncyAmIERFVk9QU19GTEFHX05FRURfR05UREVWKTsK IAorICAgIGlmICgheGVuX2ZlYXR1cmVfZ3JhbnRfY29weSkgeworICAgICAgICByZXR1cm4gY29t cGF0X2NvcHlfZ3JhbnRfcmVmcyh4ZW5kZXYsIHRvX2RvbWFpbiwgc2VncywgbnJfc2Vncyk7Cisg ICAgfQorCiAgICAgeGVuZ250dGFiX3NlZ3MgPSBnX25ldzAoeGVuZ250dGFiX2dyYW50X2NvcHlf c2VnbWVudF90LCBucl9zZWdzKTsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBucl9zZWdzOyBpKysp IHsKLS0gCjIuMS40CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5v cmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3hlbi1kZXZl bA==