From nobody Tue May 21 02:20:15 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=amd.com) ARC-Seal: i=2; a=rsa-sha256; t=1601652629; cv=pass; d=zohomail.com; s=zohoarc; b=R/VI8MRMLhL6h8ABV0fyvDuP13lEiQ8NmuX1EZQrNV5ggyRlzqiBaUVLF0A3ofO7oKqQEfvTa6R7/pwXScnEa3pEAGAZhsGhumvdUbJgvqS6BXO8BxzIQcvWJXLUqN5NkMR4AXMya6/hj6Oao6etjv+SBlcRvEhDGsJcbeeLCXo= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1601652629; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=QNNsBUn4y/o7d+6Z8NXW8vQrO0e0grqSGqKKJahg11I=; b=CBD9+i8QSk00BP2Flii0uvwqrCPsc2eGZFv0Hp4Q3c4NidcmqU4YBiqDCEKGjA7iUnIPxpCJcEukCF4DwMfqwpI6vW+rZf4FyKr/IzjSwuITTQPLdDYcxOngfphWnTPxFfx2/MXtcQj0eabrHqMXF6x9IClB3kOBAVEnlqtiueg= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=amd.com) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1601652629231527.8255270867455; Fri, 2 Oct 2020 08:30:29 -0700 (PDT) Received: from localhost ([::1]:42316 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kON0s-0006x9-PW for importer@patchew.org; Fri, 02 Oct 2020 11:30:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37972) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kOMWy-00050x-Kp for qemu-devel@nongnu.org; Fri, 02 Oct 2020 10:59:32 -0400 Received: from mail-mw2nam10on2040.outbound.protection.outlook.com ([40.107.94.40]:54752 helo=NAM10-MW2-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kOMWw-000697-BN for qemu-devel@nongnu.org; Fri, 02 Oct 2020 10:59:32 -0400 Received: from CY4PR12MB1494.namprd12.prod.outlook.com (2603:10b6:910:f::22) by CY4PR1201MB0149.namprd12.prod.outlook.com (2603:10b6:910:1c::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3433.39; Fri, 2 Oct 2020 14:59:27 +0000 Received: from CY4PR12MB1494.namprd12.prod.outlook.com ([fe80::11f9:59c8:16c0:7718]) by CY4PR12MB1494.namprd12.prod.outlook.com ([fe80::11f9:59c8:16c0:7718%8]) with mapi id 15.20.3433.038; Fri, 2 Oct 2020 14:59:27 +0000 Received: from ethanolx56bbhost.amd.com (165.204.78.2) by DM6PR08CA0012.namprd08.prod.outlook.com (2603:10b6:5:80::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3433.32 via Frontend Transport; Fri, 2 Oct 2020 14:59:26 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=QhdOMM0Az/ex3udkBsf+e5v7/3z1dbogKopPIFE0VyS2VTgUe2cCf6bsQs6euejZLvpyJxa4YNNsobzkjLzakjkU8z3rJARRL3+NZoTEEjpUuyU937m9FEML3rt9XlLTX32jrsDQX43g87ptliRLZ7ESq8cPipHDNfInkK2eWap6iUJKnhL8Z43RpEeGGmPjfM+7qS0J+cHtZ3Fgcxz+o2th06LdPeU4vMkqoZ6mxp4Qs7KZIFMS+Gt723HEA8U0/QmSzyit0xSf1uko0jbTMqvuWU7YSo0zT0UJVotbk6gqyMx3E/nXFV5SGwQAi0S6qgPBUm1wotv4RmF0eiy4iA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=QNNsBUn4y/o7d+6Z8NXW8vQrO0e0grqSGqKKJahg11I=; b=hOGYakoyULm+nU7ikBjIJQ9S2trPI/JsefE+9bbTc9RsteFprgTHw+LtlloaQqyb+uMhiIcZz3QsQKqrNN1DMOYcBN4qVl2edRaluvDwMxif92rANL3TgGLCoZvNJVtZrVnrCW8Mz7UmlddBuDWxsqwZAbV7a/9v2SKuIi/DKNhrUQvItFdnhyff8TSLcxghJtdA/Gsy6biGXcqJ9x6P8MSuyFu8+rgpaOOGHdhtHAAXoXmRdbrRlT8y8wPdUrJRgJJkCi16YcTZCvwTeSKpywgOyGxoRTGQ2KdnNREOWT1xYS6WmQsKenQJ6wCa9FX5IDbAcXsYU8SGD5xPteJiGg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector2-amdcloud-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=QNNsBUn4y/o7d+6Z8NXW8vQrO0e0grqSGqKKJahg11I=; b=p4Df2cplqfEZtSH5cdt8WAilJxFSukzj92utJrQzkHE5ScuTI+J9bRQP69g35FAVU6BpTtWBMBhvpAGgxjzib+SW5sR2qYlmH4pgOrJJgn88vwnwedXni5Q430IcT2fewY5gidGc6Kiu4aUFxEjtnqzgIPiI2DpaOODf8IJmIVo= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=amd.com; From: Wei Huang To: qemu-devel@nongnu.org Subject: [PATCH V2 1/3] amd-iommu: Add address space notifier and replay support Date: Fri, 2 Oct 2020 09:59:05 -0500 Message-Id: <20201002145907.1294353-2-wei.huang2@amd.com> X-Mailer: git-send-email 2.25.2 In-Reply-To: <20201002145907.1294353-1-wei.huang2@amd.com> References: <20201002145907.1294353-1-wei.huang2@amd.com> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [165.204.78.2] X-ClientProxiedBy: DM6PR08CA0012.namprd08.prod.outlook.com (2603:10b6:5:80::25) To CY4PR12MB1494.namprd12.prod.outlook.com (2603:10b6:910:f::22) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: d47b796c-dc8d-407d-13ff-08d866e3c1ec X-MS-TrafficTypeDiagnostic: CY4PR1201MB0149: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:415; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ++kjrPnFyu0yLia5zt/jso6gVeUi3Pf+BQBK2Y2IBbbxBDmrJduZjNGQiabZOzUKqcNLGnRb6jC2k8Gzk+iQ9gPal8xOs8I6M1uYFEq4hi2x05z9Cd5HS7Bn7HQ3w/LCi0Q8CXXy+ZMKF+yDgNloCg45oyBPRb31/2WvXmv6//gpJEfiVKjCwNJUsRohVlilMJs6CdVbSsiL8/SnzqbasUEKPgeCSVEjgwrYt0Bx4fmdV8iSYEZR+sGRiSqLg7RGOYCXDZUON7/olLb6lgASNtonZQnWaBQgqJZ/Us8X6WQG08mAXkSTKcTpMrze89puE2xyujbKNiOvdT0Q8Fhccg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CY4PR12MB1494.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(346002)(376002)(396003)(136003)(39860400002)(66476007)(8936002)(66556008)(66946007)(956004)(8676002)(2616005)(316002)(83380400001)(4326008)(26005)(86362001)(52116002)(6666004)(1076003)(478600001)(186003)(36756003)(6486002)(2906002)(16526019)(5660300002)(6916009)(7696005); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: DLVMSGDBAZdXpct/AvHLvO92FwAue7LO7G7oTiXpHjHYAXGgWowNgMtqBNfxZk+yozUZSRknMqFWYqoZZbaklV5/SZUTnLGAIGnSm8QjBiq/LD13mIYoafA19NXYldLhy55vpBLC0OEV/nX3084HydCTe5J30+y8tQtkvhhz9YXixEkDu051grOcXcT3STsXoK6yucSLzNgche5DmAKlV2EAO3mw6zNV5lr15cGZ/YbDX1KR43ZIBd37meSFQKqJuRuwf+/955vA7zyL2DtUojrqqah6AQZ7sUoo4aRjdGenoGBQkSSVTBEDLck6NKypS+82Jed21Z7YyV6N2ArzqhoKxtkrbfj3B+QD6CUo1UqzSavUZFOdMLY2aMjbQzDnobQmoeDntKfla7Gc3NrPkKmeFKO3WTMsqXNS012X9jtCAksK5tBaTKLJS8YqyDmktY2Z6NDi16yxvAYae1n4K3ToZWiGaV4vOwGnYWxNfjyY9ZKSkJHgjsNTkR47YWxyHsETIIYfhV+TNbWVkBJljGc0SDWGy/42tB30ZfxOFttOeJ565wIBDyERjDNCVer/h4IerN5/LYVZzvPYg+6Yvn4r7iHOlyqpEiA5SEn5MKYtrRIbhvtFbtIOBIW/xnPdutIAmpKQKNEEadJFtwougg== X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: d47b796c-dc8d-407d-13ff-08d866e3c1ec X-MS-Exchange-CrossTenant-AuthSource: CY4PR12MB1494.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Oct 2020 14:59:27.2067 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: lzFMxC43K1whjhI1WEcVHIH+ax58SWQb0RF+tlBUSYcP2Y1tLdMX6DvKKDLIzzX0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR1201MB0149 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=40.107.94.40; envelope-from=Wei.Huang2@amd.com; helo=NAM10-MW2-obe.outbound.protection.outlook.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/10/02 10:59:28 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] X-Spam_score_int: -8 X-Spam_score: -0.9 X-Spam_bar: / X-Spam_report: (-0.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, FORGED_SPF_HELO=1, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_NONE=0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: ehabkost@redhat.com, mst@redhat.com, wei.huang2@amd.com, peterx@redhat.com, alex.williamson@redhat.com, pbonzini@redhat.com, Suravee.Suthikulpanit@amd.com, rth@twiddle.net Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @amdcloud.onmicrosoft.com) Content-Type: text/plain; charset="utf-8" Currently the emulated amd-iommu device does not support memory address space notifier and replay. These two functions are required to have I/O devices supported inside guest VMs as passthru devices. This patch adds basic as_notifier infrastructure and replay function in amd_iommu. Co-developed-by: Wei Huang Signed-off-by: Suravee Suthikulpanit --- hw/i386/amd_iommu.c | 45 +++++++++++++++++++++++++++++++++++++++------ hw/i386/amd_iommu.h | 3 +++ 2 files changed, 42 insertions(+), 6 deletions(-) diff --git a/hw/i386/amd_iommu.c b/hw/i386/amd_iommu.c index 74a93a5d93f4..c7d24a05484d 100644 --- a/hw/i386/amd_iommu.c +++ b/hw/i386/amd_iommu.c @@ -63,6 +63,8 @@ struct AMDVIAddressSpace { IOMMUMemoryRegion iommu; /* Device's address translation region */ MemoryRegion iommu_ir; /* Device's interrupt remapping region */ AddressSpace as; /* device's corresponding address space */ + IOMMUNotifierFlag notifier_flags; /* notifier flags of address space */ + QLIST_ENTRY(AMDVIAddressSpace) next; /* notifier linked list */ }; =20 /* AMDVI cache entry */ @@ -425,6 +427,22 @@ static void amdvi_inval_all(AMDVIState *s, uint64_t *c= md) trace_amdvi_all_inval(); } =20 +static void amdvi_address_space_unmap(AMDVIAddressSpace *as, IOMMUNotifier= *n) +{ + IOMMUTLBEntry entry; + hwaddr start =3D n->start; + hwaddr end =3D n->end; + hwaddr size =3D end - start + 1; + + entry.target_as =3D &address_space_memory; + entry.iova =3D start; + entry.translated_addr =3D 0; + entry.perm =3D IOMMU_NONE; + entry.addr_mask =3D size - 1; + + memory_region_notify_one(n, &entry); +} + static gboolean amdvi_iotlb_remove_by_domid(gpointer key, gpointer value, gpointer user_data) { @@ -1473,14 +1491,17 @@ static int amdvi_iommu_notify_flag_changed(IOMMUMem= oryRegion *iommu, Error **errp) { AMDVIAddressSpace *as =3D container_of(iommu, AMDVIAddressSpace, iommu= ); + AMDVIState *s =3D as->iommu_state; =20 - if (new & IOMMU_NOTIFIER_MAP) { - error_setg(errp, - "device %02x.%02x.%x requires iommu notifier which is n= ot " - "currently supported", as->bus_num, PCI_SLOT(as->devfn), - PCI_FUNC(as->devfn)); - return -EINVAL; + /* Update address space notifier flags */ + as->notifier_flags =3D new; + + if (old =3D=3D IOMMU_NOTIFIER_NONE) { + QLIST_INSERT_HEAD(&s->amdvi_as_with_notifiers, as, next); + } else if (new =3D=3D IOMMU_NOTIFIER_NONE) { + QLIST_REMOVE(as, next); } + return 0; } =20 @@ -1573,6 +1594,8 @@ static void amdvi_realize(DeviceState *dev, Error **e= rrp) /* Pseudo address space under root PCI bus. */ x86ms->ioapic_as =3D amdvi_host_dma_iommu(bus, s, AMDVI_IOAPIC_SB_DEVI= D); =20 + QLIST_INIT(&s->amdvi_as_with_notifiers); + /* set up MMIO */ memory_region_init_io(&s->mmio, OBJECT(s), &mmio_mem_ops, s, "amdvi-mm= io", AMDVI_MMIO_SIZE); @@ -1631,12 +1654,22 @@ static const TypeInfo amdviPCI =3D { }, }; =20 +static void amdvi_iommu_replay(IOMMUMemoryRegion *iommu_mr, IOMMUNotifier = *n) +{ + AMDVIAddressSpace *as =3D container_of(iommu_mr, AMDVIAddressSpace, io= mmu); + + amdvi_address_space_unmap(as, n); + + return; +} + static void amdvi_iommu_memory_region_class_init(ObjectClass *klass, void = *data) { IOMMUMemoryRegionClass *imrc =3D IOMMU_MEMORY_REGION_CLASS(klass); =20 imrc->translate =3D amdvi_translate; imrc->notify_flag_changed =3D amdvi_iommu_notify_flag_changed; + imrc->replay =3D amdvi_iommu_replay; } =20 static const TypeInfo amdvi_iommu_memory_region_info =3D { diff --git a/hw/i386/amd_iommu.h b/hw/i386/amd_iommu.h index 79d38a3e4184..29b7a35a51a5 100644 --- a/hw/i386/amd_iommu.h +++ b/hw/i386/amd_iommu.h @@ -362,6 +362,9 @@ struct AMDVIState { /* for each served device */ AMDVIAddressSpace **address_spaces[PCI_BUS_MAX]; =20 + /* list of registered notifiers */ + QLIST_HEAD(, AMDVIAddressSpace) amdvi_as_with_notifiers; + /* IOTLB */ GHashTable *iotlb; =20 --=20 2.25.2 From nobody Tue May 21 02:20:15 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=amd.com) ARC-Seal: i=2; a=rsa-sha256; t=1601652827; cv=pass; d=zohomail.com; s=zohoarc; b=c3m90vqfWBwih+W/HD+XL72fifCcFldoOwH287Sk4ijXR+MUPsY6zaRZOzUqYCZGYUJyeXOB0GvKtTm5jFkqNa/4iCe1Do4HhnYe23POYrTVLNujuWJKPJoLh7rGovHL/eOQ6CsOhgSDDI8/ho3dfhMs38PzeA9ZzJFySGbKaJY= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1601652827; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=5mTs2yVnrdf66KmKnSbYbmPCqj/NofZSC4A34MhcMGU=; b=JQNO3C2Des3XQ+02QyPxuyQsNwiLtLzSSmSqKTZnLr5z7D/fJC/6HExpUJJDz5qiaQ2HAfGEBQmVvQUEndZGxfQkMRf9daL2aTyZVnv1sg/27cqHAFYN6izd6nKessW/i78E1N+aB4mozYBfNAhEWI1i9tObsiB8JhuFjdaVXng= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=amd.com) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1601652827656747.9955366247682; Fri, 2 Oct 2020 08:33:47 -0700 (PDT) Received: from localhost ([::1]:48042 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kON46-0001AW-0A for importer@patchew.org; Fri, 02 Oct 2020 11:33:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38016) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kOMXB-0005JO-V7 for qemu-devel@nongnu.org; Fri, 02 Oct 2020 10:59:46 -0400 Received: from mail-mw2nam10on2051.outbound.protection.outlook.com ([40.107.94.51]:54113 helo=NAM10-MW2-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kOMXA-0006BP-6B for qemu-devel@nongnu.org; Fri, 02 Oct 2020 10:59:45 -0400 Received: from CY4PR12MB1494.namprd12.prod.outlook.com (2603:10b6:910:f::22) by CY4PR1201MB0149.namprd12.prod.outlook.com (2603:10b6:910:1c::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3433.39; Fri, 2 Oct 2020 14:59:39 +0000 Received: from CY4PR12MB1494.namprd12.prod.outlook.com ([fe80::11f9:59c8:16c0:7718]) by CY4PR12MB1494.namprd12.prod.outlook.com ([fe80::11f9:59c8:16c0:7718%8]) with mapi id 15.20.3433.038; Fri, 2 Oct 2020 14:59:39 +0000 Received: from ethanolx56bbhost.amd.com (165.204.78.2) by DM3PR12CA0135.namprd12.prod.outlook.com (2603:10b6:0:51::31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3433.34 via Frontend Transport; Fri, 2 Oct 2020 14:59:38 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cdyUv/1fYR8CZbxcGqptRdTOJTwGOIkxKiw2tflzFk+WIQP+KxpQlvyd1ZyjvhUyHxTh58x0Ix+9ZViG9wDEj6cLaDtcGuomkyP26KOyCBuMkNKxGO2AX+nd1AidBqxAVdWYiBQCzmROtnndKrt+s27QN2UdUaERhcyXntzDXNqnhcUw2AG98AdXM9LPocosDg4sHuFxmslxa5Wpk1hecLaS+XW/++Xovnkk0yVUHf/aEMzpW0+X+sDtPAHkoyizjBzty3OIo09QqkxBgUZOaiuq5WH7OVZSiu56eXywZspx19QIO6gWgftF8FiPy1chKl8ipuEsV5XAoez5EEIr/Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=5mTs2yVnrdf66KmKnSbYbmPCqj/NofZSC4A34MhcMGU=; b=YTsNARVz/Hdc/MpUccbYgjYm0Pbl/WE7Gux6vuZiOMxhuybtb5SLhzc558wtEV2HS3+UvKl0sqIFeYDesUB9Y92Cl4hoAMFriIEfpU4hV1zBuzeODNpdbTjEAazWO1EVwFaGukU80+aRsm33VoS+ZkPAjh2IVGIhpIfnFHLTj4eCuhbI1Sz/zl256XiUBKrmgaeqzPRc7OUIHTqcJyJHh6CpF17ITLkxantb+EaNVOCzaFugh7Kq4xKujNbrjsKF8D7jvJnqq/+avWT9iNyY8ZAK+oO4bqXjrUglD66AK5333vi1noCi/bQzqj6XL//bEHb6LLkIyJYvEpqnDrxXgQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector2-amdcloud-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=5mTs2yVnrdf66KmKnSbYbmPCqj/NofZSC4A34MhcMGU=; b=T2Ry+FNXN9UPrjkVBzSy9xFKTj17GCg35a8QkFf6Txtvk4cAhaCPpsRhzupiAxxFfIHIPrIHn/D3MEJq7HIqHqKvlMPxA64BAa2rRl/ZkG8BktJJD9EYtX/KIhHj5HRR3lgbdgDBi0rRpGK2xOQSSh48cL779PMlVGwSqkakxzg= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=amd.com; From: Wei Huang To: qemu-devel@nongnu.org Subject: [PATCH V2 2/3] amd-iommu: Sync IOVA-to-GPA translation during page invalidation Date: Fri, 2 Oct 2020 09:59:06 -0500 Message-Id: <20201002145907.1294353-3-wei.huang2@amd.com> X-Mailer: git-send-email 2.25.2 In-Reply-To: <20201002145907.1294353-1-wei.huang2@amd.com> References: <20201002145907.1294353-1-wei.huang2@amd.com> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [165.204.78.2] X-ClientProxiedBy: DM3PR12CA0135.namprd12.prod.outlook.com (2603:10b6:0:51::31) To CY4PR12MB1494.namprd12.prod.outlook.com (2603:10b6:910:f::22) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: eabcdb46-f602-47ec-74ba-08d866e3c8e9 X-MS-TrafficTypeDiagnostic: CY4PR1201MB0149: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:2449; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: r1l8g0H7oVSEz/EJekNsUKIHpwUYIW6gqyI87CWyRwiX2wtAm+XRe3+CDTUZKLAoYbjjesq/Jn1z90As2lq24OwCAHjAfmBgxidh+qVeLML14WPd8okxbP+8e7JKupn9hD6FLhRUOxdygMGoCNFW+rhHzS5a20zFYo9YwOfPihwY1Q50ty05MyCoZyTAQNc9i6t/2hMAihDp3C9pkjwH3KEs/zkFudYFk2xvZm8symdf4IUAsRL7Iq6OxPot795FZRIo62bZQ7VO0e3hRjOApNhENSLN92AIbQ8HrdgWNYHfqwZCU7Re8MxbI8GzJAQjuw4Nq9D5WIC+fwffU/88MnyO2ULgz6o9AK5jvu9S0fghzq60UZIBozv8yLXA9FDwIRAeuzthwQAGsyGtHqAE+A== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CY4PR12MB1494.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(346002)(376002)(396003)(136003)(39860400002)(66476007)(8936002)(66556008)(66946007)(956004)(8676002)(2616005)(316002)(83380400001)(4326008)(26005)(86362001)(52116002)(6666004)(1076003)(478600001)(186003)(36756003)(6486002)(2906002)(16526019)(5660300002)(6916009)(7696005)(473944003)(414714003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: bWV7n8FzVGTiigQa12Nd8lc2F5kLwWqPLrc9b3sXU4kKk7Et7qW+jqUpOf9ah2F9nxI2LZ+9XXz5uq7B6u37gCluyyiiU1QDuk5BN9vW0WH9fe3aVFYqsE5Xd3ZsgoKhe2QKYpCrqrImvEukUeExKzHwyaqWEjMytC7/0z2Lk9VpLeLbsvMTLhzy/GmywR6ZYQJPSSsEIkGnS9KuYbasDx0wMIaTCjM2tJyn7ApSUW6PjPqd59A9F/H7IwaTbgn9LVB40LSxH/IZdFQD1e40Xa32gixGCWLZzs17qKiuldrf9uk/8hM2ELC0ec3FdTDr6IG3DrUzUjj2TPPTdcIKcb0Ii2bPAtszyJgvvxBCv0iFb3GzStA9rNPbWwjWEbtbhlKP/4/Df2fpt69IHz0GshZKafcnd/QWet7W+iyDeDZrrNxBHhNm2JLzBEsAx1Ce8IpeAk62exKF/iISzxBT2iTHS5O3p0CufNSL2WDT5YKMeistbaHo4f70RR8W5ZRnXDoOdRTj4djAkWZBpKYHQoeHZiVXr4o2XdZIO9UkMOYRYDYuvl+AtkHYqUA7IN2xakvHPGB2Z6BxULRn8KkBaj5ZFzQ8M1PIMlmr6rA87yiylyfKi1HJEj6xuKrHVLrqMmrvNbA/2FFtvsk5SfGzRQ== X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: eabcdb46-f602-47ec-74ba-08d866e3c8e9 X-MS-Exchange-CrossTenant-AuthSource: CY4PR12MB1494.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Oct 2020 14:59:38.9796 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: p45+LihcOZVP7dPLXryGwAmPRljcRxcVDK3XsGQJOu57n8ihxLD4GZTZk7inuLbV X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR1201MB0149 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=40.107.94.51; envelope-from=Wei.Huang2@amd.com; helo=NAM10-MW2-obe.outbound.protection.outlook.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/10/02 10:59:41 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] X-Spam_score_int: -8 X-Spam_score: -0.9 X-Spam_bar: / X-Spam_report: (-0.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, FORGED_SPF_HELO=1, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_NONE=0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: ehabkost@redhat.com, mst@redhat.com, wei.huang2@amd.com, peterx@redhat.com, alex.williamson@redhat.com, pbonzini@redhat.com, Suravee.Suthikulpanit@amd.com, rth@twiddle.net Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @amdcloud.onmicrosoft.com) Content-Type: text/plain; charset="utf-8" Add support to sync the IOVA-to-GPA translation at the time of IOMMU page invalidation. This function is called when two IOMMU commands, AMDVI_CMD_INVAL_AMDVI_PAGES and AMDVI_CMD_INVAL_AMDVI_ALL, are intercepted. Address space notifiers are called accordingly. Co-developed-by: Wei Huang Signed-off-by: Suravee Suthikulpanit --- hw/i386/amd_iommu.c | 177 ++++++++++++++++++++++++++++++++++++++++++++ hw/i386/amd_iommu.h | 10 +++ 2 files changed, 187 insertions(+) diff --git a/hw/i386/amd_iommu.c b/hw/i386/amd_iommu.c index c7d24a05484d..7ce68289d20c 100644 --- a/hw/i386/amd_iommu.c +++ b/hw/i386/amd_iommu.c @@ -76,6 +76,12 @@ typedef struct AMDVIIOTLBEntry { uint64_t page_mask; /* physical page size */ } AMDVIIOTLBEntry; =20 +static bool amdvi_get_dte(AMDVIState *s, int devid, uint64_t *entry); +static void amdvi_sync_domain(AMDVIState *s, uint32_t domid, + uint64_t addr, uint16_t flags); +static void amdvi_walk_level(AMDVIAddressSpace *as, uint64_t pte, + uint64_t iova, uint64_t partial); + /* configure MMIO registers at startup/reset */ static void amdvi_set_quad(AMDVIState *s, hwaddr addr, uint64_t val, uint64_t romask, uint64_t w1cmask) @@ -443,6 +449,78 @@ static void amdvi_address_space_unmap(AMDVIAddressSpac= e *as, IOMMUNotifier *n) memory_region_notify_one(n, &entry); } =20 +/* + * Sync the IOVA-to-GPA translation at the time of IOMMU page invalidation. + * This function is called when IOMMU commands, AMDVI_CMD_INVAL_AMDVI_PAGES + * and AMDVI_CMD_INVAL_AMDVI_ALL, are triggred. + * + * The range of addr invalidation is determined by addr and flags, using + * the following rules: + * - All pages + * In this case, we unmap the whole address space and then re-walk the + * I/O page table to sync the mapping relationship. + * - Single page + * Re-walk the page based on the specified iova, and only sync the + * newly mapped page. + */ +static void amdvi_sync_domain(AMDVIState *s, uint32_t domid, + uint64_t addr, uint16_t flags) +{ + AMDVIAddressSpace *as; + bool sync_all_domains =3D false; + uint64_t mask, size =3D 0x1000; + + if (domid =3D=3D AMDVI_DOMAIN_ALL) { + sync_all_domains =3D true; + } + + /* S=3D1 means the invalidation size is from addr field; otherwise 4K= B */ + if (flags & AMDVI_CMD_INVAL_IOMMU_PAGES_S_BIT) { + uint32_t zbit =3D cto64(addr | 0xFFF) + 1; + + size =3D 1ULL << zbit; + + if (size < 0x1000) { + addr =3D 0; + size =3D AMDVI_PGSZ_ENTIRE; + } else { + mask =3D ~(size - 1); + addr &=3D mask; + } + } + + QLIST_FOREACH(as, &s->amdvi_as_with_notifiers, next) { + uint64_t dte[4]; + IOMMUNotifier *n; + + if (!amdvi_get_dte(s, as->devfn, dte)) { + continue; + } + + if (!sync_all_domains && (domid !=3D (dte[1] & 0xFFFULL))) { + continue; + } + + /* + * In case of syncing more than a page, we invalidate the entire + * address range and re-walk the whole page table. + */ + if (size =3D=3D AMDVI_PGSZ_ENTIRE) { + IOMMU_NOTIFIER_FOREACH(n, &as->iommu) { + amdvi_address_space_unmap(as, n); + } + } else if (size > 0x1000) { + IOMMU_NOTIFIER_FOREACH(n, &as->iommu) { + if (n->start <=3D addr && addr + size < n->end) { + amdvi_address_space_unmap(as, n); + } + } + } + + amdvi_walk_level(as, dte[0], addr, 0); + } +} + static gboolean amdvi_iotlb_remove_by_domid(gpointer key, gpointer value, gpointer user_data) { @@ -455,6 +533,8 @@ static gboolean amdvi_iotlb_remove_by_domid(gpointer ke= y, gpointer value, static void amdvi_inval_pages(AMDVIState *s, uint64_t *cmd) { uint16_t domid =3D cpu_to_le16((uint16_t)extract64(cmd[0], 32, 16)); + uint64_t addr =3D cpu_to_le64(extract64(cmd[1], 12, 52)) << 12; + uint16_t flags =3D cpu_to_le16((uint16_t)extract64(cmd[1], 0, 12)); =20 if (extract64(cmd[0], 20, 12) || extract64(cmd[0], 48, 12) || extract64(cmd[1], 3, 9)) { @@ -465,6 +545,8 @@ static void amdvi_inval_pages(AMDVIState *s, uint64_t *= cmd) g_hash_table_foreach_remove(s->iotlb, amdvi_iotlb_remove_by_domid, &domid); trace_amdvi_pages_inval(domid); + + amdvi_sync_domain(s, domid, addr, flags); } =20 static void amdvi_prefetch_pages(AMDVIState *s, uint64_t *cmd) @@ -910,6 +992,101 @@ static inline uint64_t amdvi_get_pte_entry(AMDVIState= *s, uint64_t pte_addr, return pte; } =20 +static inline uint64_t pte_get_page_size(uint64_t level) +{ + return 1UL << ((level * 9) + 3); +} + +static void amdvi_sync_iova(AMDVIAddressSpace *as, uint64_t pte, uint64_t = iova) +{ + IOMMUTLBEntry entry; + uint64_t addr =3D pte & AMDVI_DEV_PT_ROOT_MASK; + uint32_t level =3D get_pte_translation_mode(pte); + uint64_t size =3D pte_get_page_size(level + 1); + uint64_t perm =3D amdvi_get_perms(pte); + + assert(level =3D=3D 0 || level =3D=3D 7); + + entry.target_as =3D &address_space_memory; + entry.iova =3D iova ; + entry.perm =3D perm; + if (level =3D=3D 0) { + entry.addr_mask =3D size - 1; + entry.translated_addr =3D addr; + } else if (level =3D=3D 7) { + entry.addr_mask =3D (1 << (cto64(addr | 0xFFF) + 1)) - 1; + entry.translated_addr =3D addr & ~entry.addr_mask; + } + + memory_region_notify_iommu(&as->iommu, 0, entry); +} + +/* + * Walk the I/O page table and notify mapping change. Note that iova + * determines if this function's behavior: + * - iova =3D=3D 0: re-walk the whole page table + * - iova !=3D 0: re-walk the address defined in iova + */ +static void amdvi_walk_level(AMDVIAddressSpace *as, uint64_t pte, + uint64_t iova, uint64_t partial) +{ + uint64_t index =3D 0; + uint8_t level =3D get_pte_translation_mode(pte); + uint64_t cur_addr =3D pte & AMDVI_DEV_PT_ROOT_MASK; + uint64_t end_addr =3D cur_addr + 4096; + uint64_t new_partial =3D 0; + + if (!(pte & AMDVI_PTE_PRESENT)) { + return; + } + + if (level =3D=3D 7) { + amdvi_sync_iova(as, pte, iova); + return; + } + + /* narrow the scope of table walk if iova !=3D 0 */ + if (iova) { + cur_addr +=3D ((iova >> (3 + 9 * level)) & 0x1FF) << 3; + end_addr =3D cur_addr + 8; + } + + while (cur_addr < end_addr) { + int cur_addr_inc =3D 8; + int index_inc =3D 1; + + pte =3D amdvi_get_pte_entry(as->iommu_state, cur_addr, as->devfn); + /* validate the entry */ + if (!(pte & AMDVI_PTE_PRESENT)) { + goto next; + } + + if (level > 1) { + new_partial =3D (partial << 9) | index; + amdvi_walk_level(as, pte, iova, new_partial); + } else { + /* found a page, sync the mapping first */ + if (iova) { + amdvi_sync_iova(as, pte, iova); + } else { + amdvi_sync_iova(as, pte, ((partial << 9) | index) << 12); + } + + /* skip following entries when a large page is found */ + if (get_pte_translation_mode(pte) =3D=3D 7) { + int skipped =3D 1 << (cto64(pte >> 12) + 1); + + cur_addr_inc =3D 8 * skipped; + index_inc =3D skipped; + } + } + +next: + cur_addr +=3D cur_addr_inc; + index +=3D index_inc; + } +} + static void amdvi_page_walk(AMDVIAddressSpace *as, uint64_t *dte, IOMMUTLBEntry *ret, unsigned perms, hwaddr addr) diff --git a/hw/i386/amd_iommu.h b/hw/i386/amd_iommu.h index 29b7a35a51a5..6d80f4913984 100644 --- a/hw/i386/amd_iommu.h +++ b/hw/i386/amd_iommu.h @@ -123,6 +123,8 @@ #define AMDVI_CMD_COMPLETE_PPR_REQUEST 0x07 #define AMDVI_CMD_INVAL_AMDVI_ALL 0x08 =20 +#define AMDVI_CMD_INVAL_IOMMU_PAGES_S_BIT (1ULL << 0) + #define AMDVI_DEVTAB_ENTRY_SIZE 32 =20 /* Device table entry bits 0:63 */ @@ -148,6 +150,9 @@ #define AMDVI_EVENT_ILLEGAL_COMMAND_ERROR (0x5U << 12) #define AMDVI_EVENT_COMMAND_HW_ERROR (0x6U << 12) =20 +/* PTE bits */ +#define AMDVI_PTE_PRESENT (1ULL << 0) + #define AMDVI_EVENT_LEN 16 #define AMDVI_PERM_READ (1 << 0) #define AMDVI_PERM_WRITE (1 << 1) @@ -198,6 +203,11 @@ #define AMDVI_MAX_PH_ADDR (40UL << 8) #define AMDVI_MAX_GVA_ADDR (48UL << 15) =20 +#define AMDVI_PGSZ_ENTIRE (0X0007FFFFFFFFF000ULL) + +/* The domain id is 16-bit, so use 32-bit all 1's to represent all domains= */ +#define AMDVI_DOMAIN_ALL (UINT32_MAX) + /* Completion Wait data size */ #define AMDVI_COMPLETION_DATA_SIZE 8 =20 --=20 2.25.2 From nobody Tue May 21 02:20:15 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=amd.com) ARC-Seal: i=2; a=rsa-sha256; t=1601654191; cv=pass; d=zohomail.com; s=zohoarc; b=YEnEfDLfEC0eVeaXcXss7+TPPivYHWbrVly9VzMoKwsupTS02wiyxLLuJK6xfc5qwucSu6tPC8EOi64QSPbnWMsQp9T6Fm+LikmX87dJUH7h+hJoFQx53KxAPy3o7EvI/lAsu9ofQIuvCdrxKnSicrlYu9NSYOSYpcmXYQmJkiw= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1601654191; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=ufXSfNLuDA+88ggWI+naxgMz3ft9A/R0XgNdIHw/Qlg=; b=ZIYi0rcjX1d/Z5ubHOu/bas/FpVMyB31OJ6npX78qm3l0Wm8WoP/NbwdTBotvZLJ8qotgr031YN9eX7YSi7v4XzQ/ZDVlDh501T7gXf7IiAp5ODt7UMW3Riq+VG02wUzYS5JlEzfZOLoLVA3+U337e6bOlIG4wh8P5kd6w5NrbI= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1dmarc=pass fromdomain=amd.com) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1601654191698740.7937191511566; Fri, 2 Oct 2020 08:56:31 -0700 (PDT) Received: from localhost ([::1]:44334 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kOMgj-00008R-6n for importer@patchew.org; Fri, 02 Oct 2020 11:09:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38046) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kOMXO-0005Uw-EW for qemu-devel@nongnu.org; Fri, 02 Oct 2020 10:59:58 -0400 Received: from mail-bn7nam10on2077.outbound.protection.outlook.com ([40.107.92.77]:50528 helo=NAM10-BN7-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kOMXM-0006CI-NE for qemu-devel@nongnu.org; Fri, 02 Oct 2020 10:59:58 -0400 Received: from CY4PR12MB1494.namprd12.prod.outlook.com (2603:10b6:910:f::22) by CY4PR1201MB0149.namprd12.prod.outlook.com (2603:10b6:910:1c::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3433.39; Fri, 2 Oct 2020 14:59:51 +0000 Received: from CY4PR12MB1494.namprd12.prod.outlook.com ([fe80::11f9:59c8:16c0:7718]) by CY4PR12MB1494.namprd12.prod.outlook.com ([fe80::11f9:59c8:16c0:7718%8]) with mapi id 15.20.3433.038; Fri, 2 Oct 2020 14:59:51 +0000 Received: from ethanolx56bbhost.amd.com (165.204.78.2) by DM6PR03CA0046.namprd03.prod.outlook.com (2603:10b6:5:100::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3433.32 via Frontend Transport; Fri, 2 Oct 2020 14:59:50 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=IhaKZhMCt4h3h4Sb1cSX+pKEbWEBxWpj51scaTaN03vO7krs40VcciquSbqKaYxICN3XrW4q+fPM/ARW5OXlY2Qckq/QCi+XlThLIh6SPhoNYzBvWq+rpIx2JzT/I5XAkrC31jDHIW+2gXa4hPoOInNRjZbpPhon89RECAhUwzUeaaRO11F8U5Voz3y3NCw+mnuvc/UKbGUj4L3vEazKlaoHdZ6CZUs0UxJygRKlwDtCIpw5GvAotOXVp5i/1A0Q6i5CAVFqZGTY0iQUpQOGJh6Z1+D6/YKz9SdpN3u+u5p1F8xDKeijOTTGWtj2LqQW/v1qLqk8qUJ2cevoIjFdFQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ufXSfNLuDA+88ggWI+naxgMz3ft9A/R0XgNdIHw/Qlg=; b=ekp1KMfyjoJFzsfAtaIktFckQIg+WrewftldLnjoHljgg1IvMvWSh4xjD1mGcK6SQqb3VYz+Sl+ajSTCRqG54QURTWDFevEA8OtIC8vT2DTMQ6ldiJbcEmhll50mEguhhu5veopilZ4YVpGehmdkryBTvroQ1D4+40OYFNfD9r++0bG+wp1Wyh5zWREWZNzgdHT/ffXWs8DOJXqE0jOpqUSVN7h8tdIAgeAu6AGXb2KMjtuCXuIl0As5dDiscqtUqMAb0oN5Y6cFyL8OVxVVkFkNiemsjxWT189Hp4LhctZI972UNG2MFh+e/g5PqkI8zVEyabY188SsYQbtcAcj0Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector2-amdcloud-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ufXSfNLuDA+88ggWI+naxgMz3ft9A/R0XgNdIHw/Qlg=; b=CMKF5BsMXMhqhvNO/tSXFBzUN4u/ho76nSZCpWoXAt+zHPJPCmc2uYZSQ51JFHBHbl+DVzMfxBtsr8y+L1cYFAH4GK+LLK3ODF6v9p7f7PGzEA6XFw00YGpstURYBmXmg3NuVY7j3f1InBwmuTbPYKWPv6PG8gt9oivk4TuRdCo= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=amd.com; From: Wei Huang To: qemu-devel@nongnu.org Subject: [PATCH V2 3/3] amd-iommu: Fix amdvi_mmio_trace() to differentiate MMIO R/W Date: Fri, 2 Oct 2020 09:59:07 -0500 Message-Id: <20201002145907.1294353-4-wei.huang2@amd.com> X-Mailer: git-send-email 2.25.2 In-Reply-To: <20201002145907.1294353-1-wei.huang2@amd.com> References: <20201002145907.1294353-1-wei.huang2@amd.com> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [165.204.78.2] X-ClientProxiedBy: DM6PR03CA0046.namprd03.prod.outlook.com (2603:10b6:5:100::23) To CY4PR12MB1494.namprd12.prod.outlook.com (2603:10b6:910:f::22) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 9b6917b8-6445-4767-d8c7-08d866e3d07b X-MS-TrafficTypeDiagnostic: CY4PR1201MB0149: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:155; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 8Uw5A8UQl+64BoStkw/XKIHtDFE/w0LthRs3ggCIYgfaBzFksKA1yVwPjDKDmi95KGLa3bkIFFjkV79UHC3kA46lIRE4Qon74LSL2KrnDPOk2imA9tXibW+4wwog4mSwHEGrliyCzSG9dNTwjxj7yXnt2WZ+m4kHJ1cHzuuug01ZgBA2+DjcgtFbYjrPSGRTQcQGOJ5kmtcG09s8KE+fbW62eJrT/Fg/wFOcZ8/zOvm0x5jUj6hh0UbMFVFiY2swEvjnwVD8Hy7TaCHQgFpxK3NbYpAGAt90a1s2ubrr7Tf19ZR3JddKaXmjN/uVMn42tuAD4I9dnFxJSxKJZovwyw== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CY4PR12MB1494.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(346002)(376002)(396003)(136003)(39860400002)(66476007)(8936002)(66556008)(66946007)(956004)(8676002)(2616005)(316002)(83380400001)(4326008)(26005)(86362001)(52116002)(6666004)(1076003)(478600001)(186003)(36756003)(6486002)(2906002)(16526019)(5660300002)(6916009)(7696005); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: Tyvw+Qm19dG5zH9jL5OTdnTtZqxWNzZM6NSPo4uhFQd78Rkvw0wAveFaN45hhyAvJt3QijeTsLV0yAcT284s/Syy8s95rgClC6p4bmh2PY5nDhNaR9sLBwZ84+H8Pe9XfZx/iSlPuosM6CkD4XNQRfPSw3A3dYJ5yJ4Nxg8TOXAfreQEbTtGqjG3KNCdwnkqpEabU0b3Gj15Ya3yK+Bsmqcp88BO7AKQzQGSAfpG2HVo/p9zZbThiNoL/OOTyNgBesGGOITjqoIbciqCZIk2waAWRHQemYq1zUfUn0PohZeHNTf0sptXF0ldSs03JO08EMLFk8vxNJD4KJKF9gaavau7na14sMttXtgEMQiC/4sv/jG3oCsiDC22vY6dj+XuTcEZE3gVM9wv8tGBwZkr0w7mktTHnsJRBCc9Bur8GmhuI2RuNNSGRgscxOUWTzi4bzP3BgKIMJwbq1pzWBq+SH9TCwr4IgWoTEMb621+O2vBUr3EYRLaS0h6Tq+WtbOTpzcRbFJrV8K5kA0ooeUd8y93937LzRhpAjInPreuZBqFTUYqTHKZdkKjPsfojayC/dTGkIiWWjNzmpOFlrfs6SZ44vh7dQp+6OIo5pWm+vopKvIkLB7mWsVQ5+T4OqRg2MK29NicFP/bAbxj8jM/Tg== X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9b6917b8-6445-4767-d8c7-08d866e3d07b X-MS-Exchange-CrossTenant-AuthSource: CY4PR12MB1494.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Oct 2020 14:59:51.6620 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: hyQ8qSXXd35P5+Thi2vvrtOpU2Nr/EL7vHdu+viKuDr7XQkpjtZDpb/ft5vwCCwe X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR1201MB0149 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: none client-ip=40.107.92.77; envelope-from=Wei.Huang2@amd.com; helo=NAM10-BN7-obe.outbound.protection.outlook.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/10/02 10:59:52 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] X-Spam_score_int: -8 X-Spam_score: -0.9 X-Spam_bar: / X-Spam_report: (-0.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, FORGED_SPF_HELO=1, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_NONE=0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: ehabkost@redhat.com, mst@redhat.com, wei.huang2@amd.com, peterx@redhat.com, alex.williamson@redhat.com, pbonzini@redhat.com, Suravee.Suthikulpanit@amd.com, rth@twiddle.net Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @amdcloud.onmicrosoft.com) Content-Type: text/plain; charset="utf-8" amd-iommu MMIO trace function does not differentiate MMIO writes from reads. Let us extend it to support both types. Co-developed-by: Wei Huang Signed-off-by: Suravee Suthikulpanit --- hw/i386/amd_iommu.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/hw/i386/amd_iommu.c b/hw/i386/amd_iommu.c index 7ce68289d20c..914368f0e4b7 100644 --- a/hw/i386/amd_iommu.c +++ b/hw/i386/amd_iommu.c @@ -662,17 +662,28 @@ static void amdvi_cmdbuf_run(AMDVIState *s) } } =20 -static void amdvi_mmio_trace(hwaddr addr, unsigned size) +static void amdvi_mmio_trace(hwaddr addr, unsigned size, bool iswrite, + uint64_t val) { uint8_t index =3D (addr & ~0x2000) / 8; =20 if ((addr & 0x2000)) { /* high table */ index =3D index >=3D AMDVI_MMIO_REGS_HIGH ? AMDVI_MMIO_REGS_HIGH := index; - trace_amdvi_mmio_read(amdvi_mmio_high[index], addr, size, addr & ~= 0x07); + if (!iswrite) + trace_amdvi_mmio_read(amdvi_mmio_high[index], addr, size, + addr & ~0x07); + else + trace_amdvi_mmio_write(amdvi_mmio_high[index], addr, size, val, + addr & ~0x07); } else { index =3D index >=3D AMDVI_MMIO_REGS_LOW ? AMDVI_MMIO_REGS_LOW : i= ndex; - trace_amdvi_mmio_read(amdvi_mmio_low[index], addr, size, addr & ~0= x07); + if (!iswrite) + trace_amdvi_mmio_read(amdvi_mmio_low[index], addr, size, + addr & ~0x07); + else + trace_amdvi_mmio_write(amdvi_mmio_low[index], addr, size, val, + addr & ~0x07); } } =20 @@ -693,7 +704,7 @@ static uint64_t amdvi_mmio_read(void *opaque, hwaddr ad= dr, unsigned size) } else if (size =3D=3D 8) { val =3D amdvi_readq(s, addr); } - amdvi_mmio_trace(addr, size); + amdvi_mmio_trace(addr, size, 0, val); =20 return val; } @@ -840,7 +851,7 @@ static void amdvi_mmio_write(void *opaque, hwaddr addr,= uint64_t val, return; } =20 - amdvi_mmio_trace(addr, size); + amdvi_mmio_trace(addr, size, 1, val); switch (addr & ~0x07) { case AMDVI_MMIO_CONTROL: amdvi_mmio_reg_write(s, size, val, addr); --=20 2.25.2