Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/818958/?format=api
{ "id": 818958, "url": "http://patchwork.ozlabs.org/api/patches/818958/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/1506494000-31982-3-git-send-email-Bharat.Bhushan@nxp.com/", "project": { "id": 14, "url": "http://patchwork.ozlabs.org/api/projects/14/?format=api", "name": "QEMU Development", "link_name": "qemu-devel", "list_id": "qemu-devel.nongnu.org", "list_email": "qemu-devel@nongnu.org", "web_url": "", "scm_url": "", "webscm_url": "", "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<1506494000-31982-3-git-send-email-Bharat.Bhushan@nxp.com>", "list_archive_url": null, "date": "2017-09-27T06:33:17", "name": "[v4,2/5] virtio-iommu: Add iommu notifier for map/unmap", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "10c777d57977fbdd20bc7539d55b11555b1bd2ac", "submitter": { "id": 70741, "url": "http://patchwork.ozlabs.org/api/people/70741/?format=api", "name": "Bharat Bhushan", "email": "bharat.bhushan@nxp.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/1506494000-31982-3-git-send-email-Bharat.Bhushan@nxp.com/mbox/", "series": [ { "id": 5292, "url": "http://patchwork.ozlabs.org/api/series/5292/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=5292", "date": "2017-09-27T06:33:15", "name": "virtio-iommu: VFIO integration", "version": 4, "mbox": "http://patchwork.ozlabs.org/series/5292/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/818958/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/818958/checks/", "tags": {}, "related": [], "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>)", "spf=fail (sender IP is 192.88.168.50)\n\tsmtp.mailfrom=nxp.com; nxp.com; dkim=none (message not signed)\n\theader.d=none;nxp.com; dmarc=fail action=none header.from=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 3y27R82Wqsz9t1G\n\tfor <incoming@patchwork.ozlabs.org>;\n\tWed, 27 Sep 2017 16:37:24 +1000 (AEST)", "from localhost ([::1]:52410 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 1dx5yE-0001CC-BW\n\tfor incoming@patchwork.ozlabs.org; Wed, 27 Sep 2017 02:37:22 -0400", "from eggs.gnu.org ([2001:4830:134:3::10]:35553)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <Bharat.Bhushan@nxp.com>) id 1dx5xS-00019p-31\n\tfor qemu-devel@nongnu.org; Wed, 27 Sep 2017 02:36:35 -0400", "from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <Bharat.Bhushan@nxp.com>) id 1dx5xQ-0008E2-NV\n\tfor qemu-devel@nongnu.org; Wed, 27 Sep 2017 02:36:34 -0400", "from mail-by2nam03on0052.outbound.protection.outlook.com\n\t([104.47.42.52]:27506\n\thelo=NAM03-BY2-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 1dx5xJ-00089f-UU; Wed, 27 Sep 2017 02:36:26 -0400", "from BLUPR0301CA0010.namprd03.prod.outlook.com\n\t(2a01:111:e400:5259::20) by DM2PR0301MB0736.namprd03.prod.outlook.com\n\t(2a01:111:e400:3c0d::16) with Microsoft SMTP Server (version=TLS1_2, \n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.77.7;\n\tWed, 27 Sep 2017 06:36:23 +0000", "from BY2FFO11FD004.protection.gbl (2a01:111:f400:7c0c::117) by\n\tBLUPR0301CA0010.outlook.office365.com (2a01:111:e400:5259::20) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.56.9 via\n\tFrontend Transport; Wed, 27 Sep 2017 06:36:22 +0000", "from tx30smr01.am.freescale.net (192.88.168.50) by\n\tBY2FFO11FD004.mail.protection.outlook.com (10.1.14.158) with\n\tMicrosoft SMTP Server (version=TLS1_0,\n\tcipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.20.56.11\n\tvia Frontend Transport; Wed, 27 Sep 2017 06:36:22 +0000", "from localhost.localdomain.ap.freescale.net ([10.232.14.21])\n\tby tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id\n\tv8R6a2NA027330; Tue, 26 Sep 2017 23:36:16 -0700" ], "Received-SPF": "Fail (protection.outlook.com: domain of nxp.com does not\n\tdesignate 192.88.168.50 as permitted sender)\n\treceiver=protection.outlook.com; \n\tclient-ip=192.88.168.50; helo=tx30smr01.am.freescale.net;", "From": "Bharat Bhushan <Bharat.Bhushan@nxp.com>", "To": "<eric.auger@redhat.com>, <eric.auger.pro@gmail.com>,\n\t<peter.maydell@linaro.org>, <alex.williamson@redhat.com>,\n\t<mst@redhat.com>, <qemu-arm@nongnu.org>, <qemu-devel@nongnu.org>", "Date": "Wed, 27 Sep 2017 12:03:17 +0530", "Message-ID": "<1506494000-31982-3-git-send-email-Bharat.Bhushan@nxp.com>", "X-Mailer": "git-send-email 1.9.3", "In-Reply-To": "<1506494000-31982-1-git-send-email-Bharat.Bhushan@nxp.com>", "References": "<1506494000-31982-1-git-send-email-Bharat.Bhushan@nxp.com>", "X-EOPAttributedMessage": "0", "X-Matching-Connectors": "131509677823754597;\n\t(91ab9b29-cfa4-454e-5278-08d120cd25b8); ()", "X-Forefront-Antispam-Report": "CIP:192.88.168.50; IPV:NLI; CTRY:US; EFV:NLI;\n\tSFV:NSPM;\n\tSFS:(10009020)(6009001)(7966004)(336005)(39380400002)(39860400002)(376002)(346002)(2980300002)(1109001)(1110001)(339900001)(189002)(199003)(498600001)(16586007)(104016004)(72206003)(5660300001)(48376002)(77096006)(50226002)(50466002)(53936002)(2950100002)(54906003)(8656003)(356003)(106466001)(105606002)(5003940100001)(316002)(7416002)(85426001)(189998001)(39060400002)(8936002)(97736004)(86362001)(76176999)(2201001)(47776003)(50986999)(68736007)(110136005)(36756003)(4326008)(81156014)(2906002)(8676002)(81166006)(305945005)(2101003);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:DM2PR0301MB0736;\n\tH:tx30smr01.am.freescale.net; FPR:; SPF:Fail;\n\tPTR:InfoDomainNonexistent; MX:1; A:1; LANG:en; ", "X-Microsoft-Exchange-Diagnostics": [ "1; BY2FFO11FD004;\n\t1:WVZKUWgoqMpR77v7Rn1qJ2zF0lx1VCVsITVPVXvmcRYuiQ2MF+8D7kwzSlsWNIv4Y+aVHZKV0nkmxdjuqDWhSEwrZ/axiFrrMcm3XwtVRj8+RVDwmBNuMLGKb/21Vb/Z", "1; DM2PR0301MB0736;\n\t3:p+ha9Sdx38o1VbK8EbveudQIdf4Cl9pNeoBtTP6DGWdV8BFcoEEVYyqyElBvRj3FnyHsk3frnxYOXtxdUCOfNxaM5EpObWET3qckkeCdIZkVqqWVQDMesVxDLRBxNU4/3UnMbJWj1aFZNkxzLw+FTlqZ5eZGhOS9q8xB6mFq5m0SDsXM9lmjHapyWyL3EyFUDZgcLmck1YnJMpiOqhjUWDu8PffcukUTLCBD7ED8O5mfZuKydhMr5x4FaqMjz/Ey2oPje5rPBQrv59cv/v+M2hvQKetywy5Gh53enj0ZTU5fhRxxVTJYBi4xKJcsgpM/D6PBtGmfSW3kmkhI7BCgQh5DB5D34ZZ3OEC8VOJgiYM=;\n\t25:3D01FBlqCFwprwE/ab2tYjicXnhepdvCpiRhAEu/vKSWZ3B/w9zVSLDwpMGY5Ljo4wX/QxHLsFK59GNi7OUgrBbAGv7o5vL1QB4YkgYUZ5/J8XJ26MZIknxJUe7pafI33+ygPZ2CPk0pTj3vzp/CkgZr4Ldl4hds/XGzJAWsxWFdLMKKdhCXz9PiG+VRDuX4uS8zoAll2CjUn+5yGatbTQtHDdXfzUn34+6vfqknCU3p5/0ff/9C9yiYFqgPtWNLYjThnRzRX8GTWyODlqygO8Q1Wh/WJewoo4YSBcLliCVSh/xo0KR++94R00hWiICMMET0dEuWEC0JP9rpyC7wog==", "1; DM2PR0301MB0736;\n\t31:nIBIf9T2fW667WmS47NxyQDix59mH0pn2MxTq2Sl8+ywPsf7mo2Llwv/quy7BHX92TUAGO3H9Ta4IRWxySzDPy4rYL28nIPgA4gjDlThcja52DoxWX9mrpYRVvCQ69drpt3r7LinjWpHmq6zCoS3OWOCQib6GQVa3mfSG+5cubRcNfW6lFEC/gRit6pdQf4Pur2/IB1RyCf5XNeYAwhk4kRLptlxDDEjXPcVpIcJcog=;\n\t4:WqMZglp3k3Ld80UNlHLditg90cJxQKPI9OwIXQ+j4hmKex46lD8IfgmVIhXLOjW8d0LH8U+tgtkdZksIS43knfrDoSRF2l7ABxJV8zwx7d6kashUGzET24YpmiZeuyUitUJV2Dxpx2TB64dYBm5kl0r36VXIzl9gUmuHJuoQg7sByn84PYUnNqvF0GlVFqeS/RME4aV51NGImwFvxM6BcQJW4Po4Z8tghN5UiPShHnApi5qbL5BR/6iygO+4QiF2KOGnI78WoUpYHyw54P4TJDadQj42H6TOvXlkcYiKAtc=", "=?us-ascii?Q?1; DM2PR0301MB0736;\n\t23:2CJBWefJsLsELnHG+MYyQfPZI5X7+Gx+2C0hip1?=\n\tBpLJRl5CJck9Un4J0YqwJbWW2KmPHlrl016iEqGLquWjhQbzKq48m7sV0MbHUMTUx/33nyD+Ra369hibtflj4w1gfFbxrQsj1l6reAHD+R8YHaznXhnN8Mhu2JLnc8y0J66z+4YR4q10a6W1WPlpcZpLohdXaxa8BTqhon7wC+2GFijTRyyewA+uNoj/rra2W+0pNcK8p8NqwFZKMeZUaC0ogZ9i6LkLs35BRKuyTNfVF/8iqDSv+ljEkf8LfdUvHxNi8Hx6wlss1rwLb1Ahkbm/mKNp8YKXLjQamY4JNWofjJsu57AunX0qMcZClJe1bcGNLVqedk2lAOoWJLOgdtLFcYGGJOq+cikB4Ky743edYt4CT3cYyqC/9RtjPmqROvLn5GmcqEJIRBe6y3Y9l9pvVLGwNzaL8hiHt2rqZMSJomMCXhqdLImRdZB8w+GzsYXjIhEPbvwCQfv3EHuKys2B9U0Eso+hSAecr/G3e2SBokEL707WLmjRFKDZBjo2sbornJcP+AjZysnYh6t4vcrpAg0sCEKTpzdKJZasuMqkkjg4/mkqydXt+4rx1PCKvF+QYnJXux9xmFE9z3MWW6qATCrsUHQknAH4BuA5mBEDAY/TWcw7DrCRQW8RRYeMPfqBBzZSAOIIlsNC015prVmBnCEo2Wnh5M8aUXqVYB3mfin0q3rm6x9lBlAtDEw7f03cGBCBkIrTjjZk1WeiCTaIEf7hiL+IGCxfPMPd/zSkocLqJ9ZEMPWdMppmoooZ2sP7SuYaOnAjiCPcy/NzTOwMifWvcBfaCQzq+juStowITzdxUb06VX7S/xN604MCKWgbOZ75++Bh5qQRQ/II9cQV4mP4/ILSTkHoyf45ZLEk9+nAjC/UZVeVCAs8izDgr1B2+gEPxz75IF8c71wGPrqGOYl3/xfV6+jMEvs4Vwae5X0JgzfrhuKuEtVZ8gcPENg2ONxdWS7dlwi9YETUOHk/xvLL9j9HLkGJEH1+N8c0aDwgZ1ynK/E1TLxW/M2+e91Hf/vgWd/kG7OOUSloIgm9ZMM5DcO7wNViNexyo+4zkSdSJMZKLjVFUk+Tp8uZBJ0+67BSokjGFXIy7G6f47WXMiBhcyl/aellAkvOm6T5iO7F4LfXP4Ws1BHqdckSdXaD2hMp9BDC5FS46YJ423E0YCglwza1E4xgM4WKmZ5FMqw==", "1; DM2PR0301MB0736;\n\t6:hdwib44Xj1wuHZjFuf4sH8WA0zgTsteiapdmkYI5uxNXe/wun9RErDxphRij4Zav/CbweoT7akWgcJbLY7fb6NzmY5tQszZeGLEa5JHQz79fZtpvAO388OyCHPS0PWxD20w8ICpfOGEhTqQImHVJ5k+s6zJsklpZetTBB5mGeQzQs0Xa2kPK5Xoq+RwAxoqgpchnHswPdjXLnvaV5eTwiYR7LNOiCbYYq6THVCSwaYcdlt+GMAFwfqmWheIyg90rNrYretU+amXKY1K3oaQoiaH3qcAabcc/IrH3hzcVIwgAlueNvI61JrN3a2hi1LAtmgAnDcoHAZq2FXG5KFvLYw==;\n\t5:NMBnK8nHJuHCuzqP8UAok9Yv5xHmPHDQgCcrfIYTQbFXLr22cKLiivSR58gwvPncT2ndXjNoTHYMN6hkGLWGmOfo2j7tZbAarkQoji16n9MYRsiizjOnlYSJkgkBNJNBNfpF9s8XIetUYypUVgUdbg==;\n\t24:Fcxc2MqfoUhWfCA1ybM5/pwsmNQla/crerGp43VN7xiUqS+2+Ss0sd9gXttSjJGmSi9JKu6uDHK0SL1AJrEOCErnwiovOChXtwlmY5bDJyM=;\n\t7:VTab3RP/60XB9gIvcKHwIR2CD0Q4TxhdL30V92tGA8J3LiRnCzIUnC4C0uvxAhwtsJjHsFHP9sSKuhiG61jHds9zQVM/9fWC8mW75e72tLUHnzvZVFEyBZsBdGFNjQRL6lXlzi96UGyIQfdw8UVj2I9IbdftPanvpemk+FuzRjv/a3ZDgvXCdyEQMd+E76hVJE8RZzig5TiL11+kmeHxrNlHcGNMbYIXxXOvnHnUTNE=" ], "MIME-Version": "1.0", "Content-Type": "text/plain", "X-MS-PublicTrafficType": "Email", "X-MS-Office365-Filtering-Correlation-Id": "914b48e5-625d-4e4f-0165-08d5057211ad", "X-Microsoft-Antispam": "UriScan:; BCL:0; PCL:0;\n\tRULEID:(22001)(2017052603199)(201703131430075)(201703131517081);\n\tSRVR:DM2PR0301MB0736; ", "X-MS-TrafficTypeDiagnostic": "DM2PR0301MB0736:", "X-Exchange-Antispam-Report-Test": "UriScan:(185117386973197);", "X-Microsoft-Antispam-PRVS": "<DM2PR0301MB0736C73E99A7224B57126B0C9A780@DM2PR0301MB0736.namprd03.prod.outlook.com>", "X-Exchange-Antispam-Report-CFA-Test": "BCL:0; PCL:0;\n\tRULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6095135)(2401047)(8121501046)(5005006)(93006095)(93001095)(10201501046)(3002001)(100000703101)(100105400095)(6055026)(6096035)(201703131430075)(201703131441075)(201703131448075)(201703131433075)(201703161259150)(20161123561025)(20161123559100)(20161123563025)(20161123556025)(20161123565025)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);\n\tSRVR:DM2PR0301MB0736; BCL:0; PCL:0;\n\tRULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(400006)(100000804101)(100110200095)(100000805101)(100110500095);\n\tSRVR:DM2PR0301MB0736; ", "X-Forefront-PRVS": "04433051BF", "SpamDiagnosticOutput": "1:99", "SpamDiagnosticMetadata": "NSPM", "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "27 Sep 2017 06:36:22.0790\n\t(UTC)", "X-MS-Exchange-CrossTenant-Id": "5afe0b00-7697-4969-b663-5eab37d5f47e", "X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp": "TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e; \n\tIp=[192.88.168.50]; Helo=[tx30smr01.am.freescale.net]", "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem", "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "DM2PR0301MB0736", "X-detected-operating-system": "by eggs.gnu.org: Windows 7 or 8 [fuzzy]", "X-Received-From": "104.47.42.52", "Subject": "[Qemu-devel] [PATCH v4 2/5] virtio-iommu: Add iommu notifier for\n\tmap/unmap", "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, kevin.tian@intel.com,\n\tBharat Bhushan <Bharat.Bhushan@nxp.com>, marc.zyngier@arm.com,\n\ttn@semihalf.com, will.deacon@arm.com, drjones@redhat.com,\n\trobin.murphy@arm.com, christoffer.dall@linaro.org,\n\tbharatb.yadav@gmail.com", "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>" }, "content": "This patch extends VIRTIO_IOMMU_T_MAP/UNMAP request to\nnotify registered iommu-notifier.\nThis is needed for VFIO support,\n\nSigned-off-by: Bharat Bhushan <Bharat.Bhushan@nxp.com>\nSigned-off-by: Eric Auger <eric.auger@redhat.com>\n---\nv3->v4:\n Follwoig fixes by Eric\n - Calling virtio_iommu_notify_map() for all device in AS\n - virtio_iommu_notify_unmap() moved to a function,\n This is needed as per changes in base framework (v4)\n\n hw/virtio/trace-events | 2 ++\n hw/virtio/virtio-iommu.c | 69 ++++++++++++++++++++++++++++++++++++++--\n include/hw/virtio/virtio-iommu.h | 6 ++++\n 3 files changed, 74 insertions(+), 3 deletions(-)", "diff": "diff --git a/hw/virtio/trace-events b/hw/virtio/trace-events\nindex 2793604..251b595 100644\n--- a/hw/virtio/trace-events\n+++ b/hw/virtio/trace-events\n@@ -49,3 +49,5 @@ virtio_iommu_translate_out(uint64_t virt_addr, uint64_t phys_addr, uint32_t sid)\n virtio_iommu_fill_resv_property(uint32_t devid, uint8_t subtype, uint64_t addr, uint64_t size, uint32_t flags, size_t filled) \"dev= %d, subtype=%d addr=0x%\"PRIx64\" size=0x%\"PRIx64\" flags=%d filled=0x%lx\"\n virtio_iommu_fill_none_property(uint32_t devid) \"devid=%d\"\n virtio_iommu_set_page_size_mask(const char *iommu_mr, uint64_t mask) \"mr=%s page_size_mask=0x%\"PRIx64\n+virtio_iommu_notify_map(const char *name, hwaddr iova, hwaddr paddr, hwaddr map_size) \"mr=%s iova=0x%\"PRIx64\" pa=0x%\" PRIx64\" size=0x%\"PRIx64\"\"\n+virtio_iommu_notify_unmap(const char *name, hwaddr iova, hwaddr map_size) \"mr=%s iova=0x%\"PRIx64\" size=0x%\"PRIx64\"\"\ndiff --git a/hw/virtio/virtio-iommu.c b/hw/virtio/virtio-iommu.c\nindex 1873b9a..085e972 100644\n--- a/hw/virtio/virtio-iommu.c\n+++ b/hw/virtio/virtio-iommu.c\n@@ -95,6 +95,38 @@ static gint interval_cmp(gconstpointer a, gconstpointer b, gpointer user_data)\n }\n }\n \n+static void virtio_iommu_notify_map(IOMMUMemoryRegion *mr, hwaddr iova,\n+ hwaddr paddr, hwaddr size)\n+{\n+ IOMMUTLBEntry entry;\n+\n+ entry.target_as = &address_space_memory;\n+ entry.addr_mask = size - 1;\n+\n+ entry.iova = iova;\n+ trace_virtio_iommu_notify_map(mr->parent_obj.name, iova, paddr, size);\n+ entry.perm = IOMMU_RW;\n+ entry.translated_addr = paddr;\n+\n+ memory_region_notify_iommu(mr, entry);\n+}\n+\n+static void virtio_iommu_notify_unmap(IOMMUMemoryRegion *mr, hwaddr iova,\n+ hwaddr size)\n+{\n+ IOMMUTLBEntry entry;\n+\n+ entry.target_as = &address_space_memory;\n+ entry.addr_mask = size - 1;\n+\n+ entry.iova = iova;\n+ trace_virtio_iommu_notify_unmap(mr->parent_obj.name, iova, size);\n+ entry.perm = IOMMU_NONE;\n+ entry.translated_addr = 0;\n+\n+ memory_region_notify_iommu(mr, entry);\n+}\n+\n static void virtio_iommu_detach_dev_from_as(viommu_dev *dev)\n {\n QLIST_REMOVE(dev, next);\n@@ -291,6 +323,8 @@ static int virtio_iommu_map(VirtIOIOMMU *s,\n viommu_as *as;\n viommu_interval *interval;\n viommu_mapping *mapping;\n+ VirtioIOMMUNotifierNode *node;\n+ viommu_dev *dev;\n \n interval = g_malloc0(sizeof(*interval));\n \n@@ -318,9 +352,37 @@ static int virtio_iommu_map(VirtIOIOMMU *s,\n \n g_tree_insert(as->mappings, interval, mapping);\n \n+ /* All devices in an address-space share mapping */\n+ QLIST_FOREACH(node, &s->notifiers_list, next) {\n+ QLIST_FOREACH(dev, &as->device_list, next) {\n+ if (dev->id == node->iommu_dev->devfn) {\n+ virtio_iommu_notify_map(&node->iommu_dev->iommu_mr,\n+ virt_addr, phys_addr, size);\n+ }\n+ }\n+ }\n+\n return VIRTIO_IOMMU_S_OK;\n }\n \n+static void virtio_iommu_remove_mapping(VirtIOIOMMU *s, viommu_as *as,\n+ viommu_interval *interval)\n+{\n+ VirtioIOMMUNotifierNode *node;\n+ viommu_dev *dev;\n+\n+ g_tree_remove(as->mappings, (gpointer)(interval));\n+ QLIST_FOREACH(node, &s->notifiers_list, next) {\n+ QLIST_FOREACH(dev, &as->device_list, next) {\n+ if (dev->id == node->iommu_dev->devfn) {\n+ virtio_iommu_notify_unmap(&node->iommu_dev->iommu_mr,\n+ interval->low,\n+ interval->high - interval->low + 1);\n+ }\n+ }\n+ }\n+}\n+\n static int virtio_iommu_unmap(VirtIOIOMMU *s,\n struct virtio_iommu_req_unmap *req)\n {\n@@ -352,18 +414,18 @@ static int virtio_iommu_unmap(VirtIOIOMMU *s,\n current.high = high;\n \n if (low == interval.low && size >= mapping->size) {\n- g_tree_remove(as->mappings, (gpointer)(¤t));\n+ virtio_iommu_remove_mapping(s, as, ¤t);\n interval.low = high + 1;\n trace_virtio_iommu_unmap_left_interval(current.low, current.high,\n interval.low, interval.high);\n } else if (high == interval.high && size >= mapping->size) {\n trace_virtio_iommu_unmap_right_interval(current.low, current.high,\n interval.low, interval.high);\n- g_tree_remove(as->mappings, (gpointer)(¤t));\n+ virtio_iommu_remove_mapping(s, as, ¤t);\n interval.high = low - 1;\n } else if (low > interval.low && high < interval.high) {\n trace_virtio_iommu_unmap_inc_interval(current.low, current.high);\n- g_tree_remove(as->mappings, (gpointer)(¤t));\n+ virtio_iommu_remove_mapping(s, as, ¤t);\n } else {\n break;\n }\n@@ -806,6 +868,7 @@ static void virtio_iommu_device_realize(DeviceState *dev, Error **errp)\n VirtIODevice *vdev = VIRTIO_DEVICE(dev);\n VirtIOIOMMU *s = VIRTIO_IOMMU(dev);\n \n+ QLIST_INIT(&s->notifiers_list);\n virtio_init(vdev, \"virtio-iommu\", VIRTIO_ID_IOMMU,\n sizeof(struct virtio_iommu_config));\n \ndiff --git a/include/hw/virtio/virtio-iommu.h b/include/hw/virtio/virtio-iommu.h\nindex f9c988f..7e04184 100644\n--- a/include/hw/virtio/virtio-iommu.h\n+++ b/include/hw/virtio/virtio-iommu.h\n@@ -46,6 +46,11 @@ typedef struct IOMMUPciBus {\n IOMMUDevice *pbdev[0]; /* Parent array is sparse, so dynamically alloc */\n } IOMMUPciBus;\n \n+typedef struct VirtioIOMMUNotifierNode {\n+ IOMMUDevice *iommu_dev;\n+ QLIST_ENTRY(VirtioIOMMUNotifierNode) next;\n+} VirtioIOMMUNotifierNode;\n+\n typedef struct VirtIOIOMMU {\n VirtIODevice parent_obj;\n VirtQueue *vq;\n@@ -56,6 +61,7 @@ typedef struct VirtIOIOMMU {\n GTree *address_spaces;\n QemuMutex mutex;\n GTree *devices;\n+ QLIST_HEAD(, VirtioIOMMUNotifierNode) notifiers_list;\n } VirtIOIOMMU;\n \n #endif\n", "prefixes": [ "v4", "2/5" ] }