[{"id":1773304,"web_url":"http://patchwork.ozlabs.org/comment/1773304/","msgid":"<AM5PR0401MB254525F47824ADD5A73EF2DB9A670@AM5PR0401MB2545.eurprd04.prod.outlook.com>","list_archive_url":null,"date":"2017-09-22T06:52:18","subject":"Re: [Qemu-devel] [RFC v4 09/16] virtio-iommu: Implement translate","submitter":{"id":70741,"url":"http://patchwork.ozlabs.org/api/people/70741/","name":"Bharat Bhushan","email":"bharat.bhushan@nxp.com"},"content":"> -----Original Message-----\n> From: Eric Auger [mailto:eric.auger@redhat.com]\n> Sent: Tuesday, September 19, 2017 1:17 PM\n> To: eric.auger.pro@gmail.com; eric.auger@redhat.com;\n> peter.maydell@linaro.org; alex.williamson@redhat.com; mst@redhat.com;\n> qemu-arm@nongnu.org; qemu-devel@nongnu.org; jean-\n> philippe.brucker@arm.com\n> Cc: will.deacon@arm.com; kevin.tian@intel.com; marc.zyngier@arm.com;\n> christoffer.dall@linaro.org; drjones@redhat.com; wei@redhat.com;\n> tn@semihalf.com; Bharat Bhushan <bharat.bhushan@nxp.com>;\n> peterx@redhat.com; linuc.decode@gmail.com\n> Subject: [RFC v4 09/16] virtio-iommu: Implement translate\n> \n> This patch implements the translate callback\n> \n> Signed-off-by: Eric Auger <eric.auger@redhat.com>\n> ---\n>  hw/virtio/trace-events   |  1 +\n>  hw/virtio/virtio-iommu.c | 39\n> +++++++++++++++++++++++++++++++++++++--\n>  2 files changed, 38 insertions(+), 2 deletions(-)\n> \n> diff --git a/hw/virtio/trace-events b/hw/virtio/trace-events index\n> da298c1..9010fbd 100644\n> --- a/hw/virtio/trace-events\n> +++ b/hw/virtio/trace-events\n> @@ -45,3 +45,4 @@ virtio_iommu_put_as(uint32_t asid) \"Free asid=%d\"\n>  virtio_iommu_unmap_left_interval(uint64_t low, uint64_t high, uint64_t\n> next_low, uint64_t next_high) \"Unmap left [0x%\"PRIx64\",0x%\"PRIx64\"],\n> new interval=[0x%\"PRIx64\",0x%\"PRIx64\"]\"\n>  virtio_iommu_unmap_right_interval(uint64_t low, uint64_t high, uint64_t\n> next_low, uint64_t next_high) \"Unmap right [0x%\"PRIx64\",0x%\"PRIx64\"],\n> new interval=[0x%\"PRIx64\",0x%\"PRIx64\"]\"\n>  virtio_iommu_unmap_inc_interval(uint64_t low, uint64_t high) \"Unmap inc\n> [0x%\"PRIx64\",0x%\"PRIx64\"]\"\n> +virtio_iommu_translate_out(uint64_t virt_addr, uint64_t phys_addr,\n> uint32_t sid) \"0x%\"PRIx64\" -> 0x%\"PRIx64 \" for sid=%d\"\n> diff --git a/hw/virtio/virtio-iommu.c b/hw/virtio/virtio-iommu.c index\n> 6f1a7d1..db46a91 100644\n> --- a/hw/virtio/virtio-iommu.c\n> +++ b/hw/virtio/virtio-iommu.c\n> @@ -496,19 +496,54 @@ static IOMMUTLBEntry\n> virtio_iommu_translate(IOMMUMemoryRegion *mr, hwaddr addr,\n>                                              IOMMUAccessFlags flag)  {\n>      IOMMUDevice *sdev = container_of(mr, IOMMUDevice, iommu_mr);\n> +    VirtIOIOMMU *s = sdev->viommu;\n>      uint32_t sid;\n> +    viommu_dev *dev;\n> +    viommu_mapping *mapping;\n> +    viommu_interval interval;\n> +\n> +    interval.low = addr;\n> +    interval.high = addr + 1;\n> \n>      IOMMUTLBEntry entry = {\n>          .target_as = &address_space_memory,\n>          .iova = addr,\n>          .translated_addr = addr,\n> -        .addr_mask = ~(hwaddr)0,\n> -        .perm = IOMMU_NONE,\n> +        .addr_mask = (1 << ctz32(s->config.page_size_mask)) - 1,\n> +        .perm = flag,\n>      };\n> \n>      sid = virtio_iommu_get_sid(sdev);\n> \n>      trace_virtio_iommu_translate(mr->parent_obj.name, sid, addr, flag);\n> +    qemu_mutex_lock(&s->mutex);\n> +\n> +    dev = g_tree_lookup(s->devices, GUINT_TO_POINTER(sid));\n> +    if (!dev) {\n> +        /* device cannot be attached to another as */\n> +        printf(\"%s sid=%d is not known!!\\n\", __func__, sid);\n> +        goto unlock;\n> +    }\n> +\n> +    mapping = g_tree_lookup(dev->as->mappings, (gpointer)(&interval));\n\nShould check of !dev->as before accessing this.\n\nThanks\n-Bharat \n\n> +    if (!mapping) {\n> +        printf(\"%s no mapping for 0x%\"PRIx64\" for sid=%d\\n\", __func__,\n> +               addr, sid);\n> +        goto unlock;\n> +    }\n> +\n> +    if (((flag & IOMMU_RO) && !(mapping->flags &\n> VIRTIO_IOMMU_MAP_F_READ)) ||\n> +        ((flag & IOMMU_WO) && !(mapping->flags &\n> VIRTIO_IOMMU_MAP_F_WRITE))) {\n> +        error_report(\"Permission error on 0x%\"PRIx64\"(%d): allowed=%d\",\n> +                     addr, flag, mapping->flags);\n> +        entry.perm = IOMMU_NONE;\n> +        goto unlock;\n> +    }\n> +    entry.translated_addr = addr - mapping->virt_addr + mapping-\n> >phys_addr,\n> +    trace_virtio_iommu_translate_out(addr, entry.translated_addr, sid);\n> +\n> +unlock:\n> +    qemu_mutex_unlock(&s->mutex);\n>      return entry;\n>  }\n> \n> --\n> 2.5.5","headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@bilbo.ozlabs.org","Authentication-Results":["ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=nongnu.org\n\t(client-ip=2001:4830:134:3::11; helo=lists.gnu.org;\n\tenvelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n\treceiver=<UNKNOWN>)","ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=nxp.com header.i=@nxp.com header.b=\"kNHz30gd\";\n\tdkim-atps=neutral","spf=none (sender IP is )\n\tsmtp.mailfrom=bharat.bhushan@nxp.com; "],"Received":["from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11])\n\t(using TLSv1 with cipher AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xz41b3m4Gz9sNw\n\tfor <incoming@patchwork.ozlabs.org>;\n\tFri, 22 Sep 2017 16:53:07 +1000 (AEST)","from localhost ([::1]:56962 helo=lists.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.71) (envelope-from\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>)\n\tid 1dvHpf-0004hc-PL\n\tfor incoming@patchwork.ozlabs.org; Fri, 22 Sep 2017 02:53:03 -0400","from eggs.gnu.org ([2001:4830:134:3::10]:54008)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <bharat.bhushan@nxp.com>) id 1dvHp7-0004ge-SZ\n\tfor qemu-devel@nongnu.org; Fri, 22 Sep 2017 02:52:31 -0400","from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <bharat.bhushan@nxp.com>) id 1dvHp6-0000FK-Kd\n\tfor qemu-devel@nongnu.org; Fri, 22 Sep 2017 02:52:29 -0400","from mail-he1eur01on0052.outbound.protection.outlook.com\n\t([104.47.0.52]:63616\n\thelo=EUR01-HE1-obe.outbound.protection.outlook.com)\n\tby eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32)\n\t(Exim 4.71) (envelope-from <bharat.bhushan@nxp.com>)\n\tid 1dvHp0-0000AR-6J; Fri, 22 Sep 2017 02:52:22 -0400","from AM5PR0401MB2545.eurprd04.prod.outlook.com (10.169.245.8) by\n\tAM5PR0401MB2545.eurprd04.prod.outlook.com (10.169.245.8) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id\n\t15.20.77.7; Fri, 22 Sep 2017 06:52:18 +0000","from AM5PR0401MB2545.eurprd04.prod.outlook.com\n\t([fe80::a470:3643:ce8f:6327]) by\n\tAM5PR0401MB2545.eurprd04.prod.outlook.com\n\t([fe80::a470:3643:ce8f:6327%18]) with mapi id 15.20.0077.011;\n\tFri, 22 Sep 2017 06:52:18 +0000"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1;\n\th=From:Date:Subject:Message-ID:Content-Type:MIME-Version;\n\tbh=TcqWwvyVpIkF7B0Ywik4aBRzcXxru9d3IKM54Q3XvFA=;\n\tb=kNHz30gdPezrSPWtA318m77lTXBRRfd2VmVvGRsp6HJMUmKYkiyCO1eVAdyGKkkyB9IyD1+NscpjYXF+5fGAgu86/rXyAmr43k/eVBQywaqEKkscpAvFVT7RU/Po0wuoGTburN31XKP+LeqRD1kDhzKPyY176M3f3Supms4xg7g=","From":"Bharat Bhushan <bharat.bhushan@nxp.com>","To":"Eric Auger <eric.auger@redhat.com>, \"eric.auger.pro@gmail.com\"\n\t<eric.auger.pro@gmail.com>, \"peter.maydell@linaro.org\"\n\t<peter.maydell@linaro.org>, \"alex.williamson@redhat.com\"\n\t<alex.williamson@redhat.com>, \"mst@redhat.com\" <mst@redhat.com>,\n\t\"qemu-arm@nongnu.org\" <qemu-arm@nongnu.org>, \"qemu-devel@nongnu.org\"\n\t<qemu-devel@nongnu.org>, \"jean-philippe.brucker@arm.com\"\n\t<jean-philippe.brucker@arm.com>","Thread-Topic":"[RFC v4 09/16] virtio-iommu: Implement translate","Thread-Index":"AQHTMRvAI7uJ8TEjsU68XPILEWpGzaLAfCXA","Date":"Fri, 22 Sep 2017 06:52:18 +0000","Message-ID":"<AM5PR0401MB254525F47824ADD5A73EF2DB9A670@AM5PR0401MB2545.eurprd04.prod.outlook.com>","References":"<1505807208-9063-1-git-send-email-eric.auger@redhat.com>\n\t<1505807208-9063-10-git-send-email-eric.auger@redhat.com>","In-Reply-To":"<1505807208-9063-10-git-send-email-eric.auger@redhat.com>","Accept-Language":"en-US","Content-Language":"en-US","X-MS-Has-Attach":"","X-MS-TNEF-Correlator":"","authentication-results":["ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=nongnu.org\n\t(client-ip=2001:4830:134:3::11; helo=lists.gnu.org;\n\tenvelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n\treceiver=<UNKNOWN>)","ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=nxp.com header.i=@nxp.com header.b=\"kNHz30gd\";\n\tdkim-atps=neutral","spf=none (sender IP is )\n\tsmtp.mailfrom=bharat.bhushan@nxp.com; "],"x-originating-ip":"[192.88.169.1]","x-ms-publictraffictype":"Email","x-microsoft-exchange-diagnostics":"1; AM5PR0401MB2545;\n\t6:lkSDAk+F0loO/SEIZgXenBr1OUyUsvXR2Cpz6lqG/m5JEni2nBwnwvAU0NlRSMQtreynXy2OjT4nA0xXmXIzmflxxrfAdRQTCBhSdrh4W2ZFD82nN/Ktql4bOtv61pZemOsMg9d+meeKxI+Q5i90y/ini7Ktrvv269tTJ9+2WjFcIZowreX3E/OOMcx+EkY5baDRPus8E0qowrxJHbuQFzhvSKcmd7nOiZqCtBJeMBL4Py96PY49YGNTR4LfMV80/3S0VlSVx/J/U5yttQISmCjGv1cU9J0KweIYqRie+0jJbAkiDtQ+wBwJKRPRu0q5Dl9BkqbRrNIKlhsWOCpJQg==;\n\t5:pjH3ljyJ1YukVnRvFDBY7tF5aZ6G639v0CUwPaWOfaqjDCgjpJDCMavDjAEPLLNPn/x8FpENWUQS5XEq/vFX2fXgyBqw2No36KFBz2/Z0WTPHbFASW6vq1VKyp+EaP59nH+QcOgIxeVCjbcG6xscQA==;\n\t24:yZkQU2k7olvrOYNMCxSi6LxlDW1BAtZLId6s9W2ZTjasJbesyiGLOq5w17Z4l1Pw/UEaJ5KS3kCDsxLItFKPj7tKJ+zwNGeENCHr/RyHba8=;\n\t7:pPlHoFZgdw6JrpSnEnDPhql1mfEJ2LXgFqArM+M05rdGXUGsSZKz5YJ/YBaCXfwgYOpgMGOgGdFChu7w252LdEImLcsoJicVCnjNaUZiMPYfyCTG1lmbyf8lXdQcHdIOAj7mFZcRx0r0N+pSjqK8siLprsCVAXla1ZWEF0erUkTHRRDdNcN42bJ4KE2axC+WeOP+K+lZ0D4z1bP9ydLnTrOq4/fWfhAZvljwPU6oAwY=","x-ms-exchange-antispam-srfa-diagnostics":"SSOS;","x-ms-office365-filtering-correlation-id":"98d820a8-2428-460c-112d-08d5018677b9","x-ms-office365-filtering-ht":"Tenant","x-microsoft-antispam":"UriScan:; BCL:0; PCL:0;\n\tRULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254152)(48565401081)(300000503095)(300135400095)(2017052603199)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095);\n\tSRVR:AM5PR0401MB2545; ","x-ms-traffictypediagnostic":"AM5PR0401MB2545:","x-exchange-antispam-report-test":"UriScan:(180628864354917)(185117386973197)(228905959029699); ","x-microsoft-antispam-prvs":"<AM5PR0401MB254527C22CCBE506537987699A670@AM5PR0401MB2545.eurprd04.prod.outlook.com>","x-exchange-antispam-report-cfa-test":"BCL:0; PCL:0;\n\tRULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(5005006)(8121501046)(100000703101)(100105400095)(93006095)(93001095)(3002001)(10201501046)(6055026)(6041248)(20161123558100)(20161123562025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123555025)(20161123560025)(20161123564025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);\n\tSRVR:AM5PR0401MB2545; BCL:0; PCL:0;\n\tRULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);\n\tSRVR:AM5PR0401MB2545; ","x-forefront-prvs":"0438F90F17","x-forefront-antispam-report":"SFV:NSPM;\n\tSFS:(10009020)(6009001)(376002)(346002)(39860400002)(189002)(199003)(13464003)(377454003)(7736002)(50986999)(5660300001)(6436002)(14454004)(68736007)(39060400002)(2950100002)(6506006)(5890100001)(5250100002)(74316002)(25786009)(316002)(101416001)(2900100001)(2201001)(76176999)(2906002)(189998001)(54356999)(7696004)(110136005)(2501003)(305945005)(54906003)(229853002)(33656002)(106356001)(3846002)(7416002)(53936002)(6246003)(66066001)(3660700001)(102836003)(4326008)(8676002)(6116002)(81166006)(53546010)(86362001)(97736004)(99286003)(478600001)(3280700002)(105586002)(55016002)(8936002)(9686003)(81156014);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:AM5PR0401MB2545;\n\tH:AM5PR0401MB2545.eurprd04.prod.outlook.com; FPR:; SPF:None;\n\tPTR:InfoNoRecords; MX:1; A:1; LANG:en; ","received-spf":"None (protection.outlook.com: nxp.com does not designate\n\tpermitted sender hosts)","spamdiagnosticoutput":"1:99","spamdiagnosticmetadata":"NSPM","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"quoted-printable","MIME-Version":"1.0","X-OriginatorOrg":"nxp.com","X-MS-Exchange-CrossTenant-originalarrivaltime":"22 Sep 2017 06:52:18.7562\n\t(UTC)","X-MS-Exchange-CrossTenant-fromentityheader":"Hosted","X-MS-Exchange-CrossTenant-id":"686ea1d3-bc2b-4c6f-a92c-d99c5c301635","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"AM5PR0401MB2545","X-detected-operating-system":"by eggs.gnu.org: Windows 7 or 8 [fuzzy]","X-Received-From":"104.47.0.52","Subject":"Re: [Qemu-devel] [RFC v4 09/16] virtio-iommu: Implement translate","X-BeenThere":"qemu-devel@nongnu.org","X-Mailman-Version":"2.1.21","Precedence":"list","List-Id":"<qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<http://lists.nongnu.org/archive/html/qemu-devel/>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Cc":"\"wei@redhat.com\" <wei@redhat.com>,\n\t\"kevin.tian@intel.com\" <kevin.tian@intel.com>,\n\t\"marc.zyngier@arm.com\" <marc.zyngier@arm.com>,\n\t\"tn@semihalf.com\" <tn@semihalf.com>,\n\t\"will.deacon@arm.com\" <will.deacon@arm.com>,\n\t\"drjones@redhat.com\" <drjones@redhat.com>,\n\t\"peterx@redhat.com\" <peterx@redhat.com>,\n\t\"linuc.decode@gmail.com\" <linuc.decode@gmail.com>,\n\t\"christoffer.dall@linaro.org\" <christoffer.dall@linaro.org>","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"\"Qemu-devel\"\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>"}}]