From nobody Mon May 6 05:12:47 2024 Delivered-To: importer2@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+importer2=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=oracle.com); dmarc=fail(p=none dis=none) header.from=oracle.com ARC-Seal: i=2; a=rsa-sha256; t=1651180644; cv=pass; d=zohomail.com; s=zohoarc; b=XFFpl6KoRCjqBY4JXzFd3kevcwZuBHTzIRiE37RfjzIOi9rIEG/fJrtNQGxeVFEuo8wwTwaj/oCBUvVavkds2dEDuKQmdrJM1vN/lbtAC3mDQoo7LQWL80TOyYCwA6G3bCUs7qH15iatQGDjsEExCBtmxBt9yYLXqmUU17Xzioc= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651180644; h=Content-Type: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=wPcSrKOZyOb+0SjyhY9fX48XHcnuS+7u94ze+5wrk2Y=; b=XG0eV/nozfEWOFzS87t8bJDC4HausDyMpCYfwv8huAHDggNrgnhYbEhMvEjEyYPmznvnwUETBcm/42lyF0y9icGmzbPzhiino9zfYPUzuNcYL2ANINi5Ayi2i5siSaV/7HI6U6xDS8AyWvF6xbpTVuCyIfe7rxF1XX303y9WKKQ= 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+importer2=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=oracle.com); dmarc=fail header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1651180644230660.3075965989497; Thu, 28 Apr 2022 14:17:24 -0700 (PDT) Received: from localhost ([::1]:39746 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nkBVr-00039E-2k for importer2@patchew.org; Thu, 28 Apr 2022 17:17:23 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43378) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nkBT2-0000WH-Rt for qemu-devel@nongnu.org; Thu, 28 Apr 2022 17:14:29 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:14174) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nkBT0-0005qL-Bk for qemu-devel@nongnu.org; Thu, 28 Apr 2022 17:14:28 -0400 Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 23SJ5ftP018590; Thu, 28 Apr 2022 21:14:14 GMT Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3fmb5k59mp-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 28 Apr 2022 21:14:14 +0000 Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.16.1.2/8.16.1.2) with SMTP id 23SL6cvM028663; Thu, 28 Apr 2022 21:14:13 GMT Received: from nam11-bn8-obe.outbound.protection.outlook.com (mail-bn8nam11lp2172.outbound.protection.outlook.com [104.47.58.172]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com with ESMTP id 3fp5ypebjm-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 28 Apr 2022 21:14:13 +0000 Received: from BLAPR10MB4835.namprd10.prod.outlook.com (2603:10b6:208:331::11) by CH0PR10MB5289.namprd10.prod.outlook.com (2603:10b6:610:d8::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5186.14; Thu, 28 Apr 2022 21:14:12 +0000 Received: from BLAPR10MB4835.namprd10.prod.outlook.com ([fe80::b9e5:d1b6:b4be:f9d]) by BLAPR10MB4835.namprd10.prod.outlook.com ([fe80::b9e5:d1b6:b4be:f9d%5]) with mapi id 15.20.5206.013; Thu, 28 Apr 2022 21:14:12 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : content-type : mime-version; s=corp-2021-07-09; bh=wPcSrKOZyOb+0SjyhY9fX48XHcnuS+7u94ze+5wrk2Y=; b=bdmyCsBwwzzzVejlNiXlucdaAabHEbZb4S59JrwOg/00W3Whk0VYdRTnJPaVQOPe4QAG 9CBcUCK3O8wCCondDy5HuCx2jnuc1xn5AoBvIFDYmic4wz5J/a+87R8Y7bh3yGZFOJEJ 7NWTfltflJZQbo4/uLflsyqhzt+PtYQwk2DTXOnRMyW7puBXOyKH/MiHK1h8c3ews1Pz VOk9ZA038O1VdAn60nBOJIv3YikgLgbFmJKfNFRD4W/srnDQ7LjsM1/3//3eUdOqMMj7 Sl5dHRuVy1GdKppOXxOnAZ2yNIX27A+RmkSU/nePVyhAwaIxoEJGZgzRxiddjNuJQxdE Yg== ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kYZwpbs/5xGGU8QJmYR8PAVCn/DLzPZKl2A+DbQ1IuC4HWg0/IpDm+guXTHIcPYKY2Vke+V4mYEgZKJUaQkMMqCPS7XefOGrT5hCgIqoCW9vaqtROjuKqvmx0ZBsvY44miIDBqIhpi713b0tueifkhK/2nk/rHP2FUK5FTaQtDre6aZv3xlfN2Kb7qIndtcCL/UbCaOcQal0NB9oG0HoGnv1t2YKcRRxK3L+MKwkzPOjZyDNJsKgKiHhWwMkBFE4HqvrjoycweFDZHV7peIm3cZr5EFdnnYFBveAoLIMn1p7TiV/iSfLXgnImrspsjw1F3xPT/OU0dkBPf6HcmEbpA== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=wPcSrKOZyOb+0SjyhY9fX48XHcnuS+7u94ze+5wrk2Y=; b=QU3vpDbsoVEUqpCRha4FIFbMJBaW30qUu/KPNMYmwRFLOl+KTBhk7Akgwx4zjb1WB9A02ntiHly94alMS4nBCiVxRpwMK9NZh3HGccU28OCMqnGbANVf3E30iIpBwBNp/JSOsuXrIttD3NElVZgPFY5gs37AvOmge9CwtIXd2a4gByee5FQg2IBbmndgI6w5amJUgpoXksXF+KzFtTomCFHo5G0kediPxPic6e+WijtRmGvMO4FumExjh/PjRd3NcyjD/BsrFKSUbTTyOaJVRdDk870EAhWe5RBn8HBaHMu1C+evSp3WnnFqrVWL6UlP+E8jqano7e4xdYImSk/qgA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=wPcSrKOZyOb+0SjyhY9fX48XHcnuS+7u94ze+5wrk2Y=; b=S4scRTwXa0S5ROKiWCy9B88b6jeGNGTMahO1dw6xP1o1Pdo7h6X+WuJwqW8NcT/oolFZrEdsMOc8qp6G2dC+2/2aIN+Zf8qSamYbK0Zsr5YYnDjTah92iQeL+fCg6TVQY+nKJf4cqFwu5p/NU0n1SbNdxtBT9/hTDAe+q1YQxFo= From: Joao Martins To: qemu-devel@nongnu.org Subject: [PATCH RFC 01/10] amd-iommu: Cache PTE/DTE info in IOTLB Date: Thu, 28 Apr 2022 22:13:42 +0100 Message-Id: <20220428211351.3897-2-joao.m.martins@oracle.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20220428211351.3897-1-joao.m.martins@oracle.com> References: <20220428211351.3897-1-joao.m.martins@oracle.com> X-ClientProxiedBy: LO2P265CA0297.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:a5::21) To BLAPR10MB4835.namprd10.prod.outlook.com (2603:10b6:208:331::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f2307eae-302b-4966-ea4f-08da295c0a75 X-MS-TrafficTypeDiagnostic: CH0PR10MB5289:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: rfACB4DfsLkTAjqG7zY8Dr1l9Vk5B6H6vsEG+A0nbcC6zN6P5njito7ambmeW4BRxUgmQXj5tbYD5dz5HznOpHtQpvqGbUSw9iJelegMzuaoz55rogpLNfnWg6dQvutyVroMYSxWh82v0YyBLRU9sh+RREX+zpbg/iJ854oPXb1N6nkxA44Jhnx3AiFgl8qBS63iGNscolOD17tqcBHBS9Xt5O9DoW+ClXV4CYmXd59LlGShGKwjLrZr77aYLJsdto7DXOxhXK1Nq+7XYB0xqcYQGc4wDIOP158yP+XkBXuNFkOrFvioSx9KEPUgx57HO+SnS/PQyUqgtxQXdaGkJ429HtT4QFbrtHQEPdkcXbZxoOZKlCMUOAAGtL5Twf5YjO+Guon46aoOnDAnSg6b3TJYch8TJSQGmD2BKXa9c33shdo1x7w3rB1cNwv87PgwioINDActoGn31x51zuoYeHuDLkYdlax8kYIa+fPJJU17MRcUx2TR+9OQIoFGjidqnJZn0sFxDujB17qV7z49O/s66BNHhOEDcOuQFf5nflr0TeQYZyPFVb6yB4oxey6XTBtt+V3i5VQoPitjek48SRD9lhncqSLCZW/Rxj7vlChl1lX3yhZZUnZK2SiXb8xflaJWknKfdDTG+rpgVbDOnVc9qvEI7M/CJfXzXmtorHjuVJfn5dzoHwhtvwfJguDbgSDCNFxPugmRrxf0dhOB+A== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BLAPR10MB4835.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(366004)(6666004)(54906003)(186003)(1076003)(38350700002)(38100700002)(5660300002)(2616005)(7416002)(103116003)(26005)(316002)(6916009)(36756003)(66946007)(8676002)(66476007)(4326008)(66556008)(8936002)(52116002)(86362001)(6512007)(2906002)(6486002)(508600001)(83380400001)(6506007); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?EwE8T9eIJPoA6VWfTYB6cNZCgQ5S0oPJ55Coobo0oUfNvIKJvAFeU2g96SEH?= =?us-ascii?Q?BLtL0aniQbqxtcENkoct8yZ+YgnegHaChKFv79kui8r0ORaZD+k3BHeBpAeL?= =?us-ascii?Q?KYPT0IS8WC7LJ9FvvSMs7CH7SVtyO1Oo8wWrz7oXfExzjjEvdsu5Fm1MLUhY?= =?us-ascii?Q?ZLbehH50cP5J1h0/I/i/F0PFtaiBh7bequAWgxqDR+5a88I5J5PR3hAXd2wW?= =?us-ascii?Q?vma1zxLrTVu/w3ysvt2MLLp58ntf8wP3EMzPK0NdfSBmjBcB06ppu6aGvfsu?= =?us-ascii?Q?1phg/VA3pV/0/0vnSrYRNzZOad4MpowtV0AWxdq2f6LYTV1rJaDUzMg3gnCa?= =?us-ascii?Q?hChQu3ohWEtja43duoDYkFKrbbwpLbMS3zYAzdvYpDrm+kcVa1V9I57HCLol?= =?us-ascii?Q?zcEo4/WDM6DylOZIXNenOSRsti1sqbBLyhqrs5YvmRBOkMyhQIfSTQw/c98c?= =?us-ascii?Q?4B/SuKMA+AfSObkX19YKgXfOAYEJMDChkmF5KKoORdNKgr/Mwu48+VpR6eqC?= =?us-ascii?Q?VS7b0AZvMdAm5DRhKKFitlTcwcCfqXrD05unKT10o4ofCK7oHVxv8JmJcnH/?= =?us-ascii?Q?dlpmqiP3z2VfzSw3fcLjFX7Y5ob9Igny/DnuQjgCcLc2ofSJ18Zs4IdXeGi1?= =?us-ascii?Q?Rn8KnC9xoz83keI0O5QRkTPVFkABVqzFBAWX3e6zdWL+az2CeapkULuGl6te?= =?us-ascii?Q?ABOXvv0fY/aOmsQCbXXOWK5EXoc43KpCxiOqh/tl5rNV6oMLF2Hl7ksas2cP?= =?us-ascii?Q?dvHt6NiMa6PgNmgNiTGsfbSunRmC2Rr2kikCH5ZjTeJTVAiAOPfmM2IJ6C3R?= =?us-ascii?Q?qc2dAI1da3oDp1cCTpnCxepemjIarNx2l+I/Q54xnVI037GXc3WOtGp6b8n6?= =?us-ascii?Q?zx1KX9fqG09grQu1BP5LK1vGNINBkYLXZ+R6E8ykI1sf0/EjI9o1NuQImVUJ?= =?us-ascii?Q?7GEVJqQBRTE57WrDBGl4N9jcuGQ0yy0jr08G+B7eHJTehcOxK3ZCve4ia2W5?= =?us-ascii?Q?8qNK0z+cCzIa+xM1pFH/BGIJZwUyHSyJqecr8sgp4X732Tade5n+NbDPrYw3?= =?us-ascii?Q?6uq7cmp//XUTXODgAMnokw0acKLLJAf78wU1swi5J6xs8ysMC5NrlyrEAJmC?= =?us-ascii?Q?OKu5DtJ9bopJBDPhbobA3SZ8mu7RkbqzttKju+sODpADOMVN85VAbbl526yR?= =?us-ascii?Q?nrQT/XOhcPKIGlbTcwHolHni+QYrmSUqto47Fzro69Rp1DrRbmO7x1KdumjY?= =?us-ascii?Q?o4eEI6csCImnrRTVs7nAQnvD+UtyouOHsBwchUH7C2G9fczdV/YfJYX3oWei?= =?us-ascii?Q?URCrCHOKXJSs4hn2FAII1IurL4EgTbcG4QekLI5qVXHiR0gf0+S+eYi89tdz?= =?us-ascii?Q?eHQJ3K4eFM7BaiZUKlzRvW8eVJhWWNDMdTQ5SJ2wxqADzNPqpuQTtOSpaSvr?= =?us-ascii?Q?9rPkl34k8iKfyieBSVazL1dQW4z5OYJNrAl6FKf1shiI85yokuPGkHGURZ7F?= =?us-ascii?Q?QYZC20P1vjsVFharveeAvG2y65y02LFypT7TuJLCJvYMX2BXigRRZCPHW1ba?= =?us-ascii?Q?Quzg+DWVf0/gUIl3DRbNcAwDAIGVOVLsa/u1sdeqYO/Vl3W7t0ylcqKxjEfr?= =?us-ascii?Q?7goSKJPz0cDKPjRZeNSeLPxE5JOdcgB9uolnPX8s5eZC+5pohYjjXgObqx92?= =?us-ascii?Q?MJGQ2bllDlWO/qHTjuhKXaZ6ZuRaGwGBo1ynZjY1en6F+Zi3KppBDM6VyVeI?= =?us-ascii?Q?T0Uq2ZFFg3GHoHoWeO0nT9h79z+GVYM=3D?= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: f2307eae-302b-4966-ea4f-08da295c0a75 X-MS-Exchange-CrossTenant-AuthSource: BLAPR10MB4835.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Apr 2022 21:14:11.9950 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: eATHI9/ZUnY70G8LwAyR9cPiAUKZR1LQGZDgcriCiQXlF6F9G+Kpg2WzVebY+6mVgJjIwMoYFPOnf8nbWwu3cethX1CpWfPyiE7OXdJjAaI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH0PR10MB5289 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.486, 18.0.858 definitions=2022-04-28_04:2022-04-28, 2022-04-28 signatures=0 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 mlxlogscore=999 mlxscore=0 suspectscore=0 malwarescore=0 spamscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2202240000 definitions=main-2204280125 X-Proofpoint-GUID: 3_w8L3ZWkDdmRuw8B3QQPj4TK2UIG-Co X-Proofpoint-ORIG-GUID: 3_w8L3ZWkDdmRuw8B3QQPj4TK2UIG-Co 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+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.177.32; envelope-from=joao.m.martins@oracle.com; helo=mx0b-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "John G . Johnson" , kvm@vger.kernel.org, "Michael S. Tsirkin" , Jason Wang , Peter Xu , Joao Martins , Eric Blake , Yi Liu , Juan Quintela , David Hildenbrand , Markus Armbruster , Nicolin Chen , Jason Gunthorpe , Kevin Tian , Richard Henderson , "Dr. David Alan Gilbert" , Eric Auger , Alex Williamson , Thanos Makatos , Eduardo Habkost , Yishai Hadas , Cornelia Huck , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.onmicrosoft.com) X-ZM-MESSAGEID: 1651180645956100001 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" On a successful translation, cache the PTE and DTE flags set at the time of the translation i.e. the first 12bits as well as the PTE storage. These bits contain read, write, dirty and access for example. In theory the DTE lookup takes precendence in the translation path, but in the interest of performance extend the AMDVIIOTLBEntry to include that information. This is a preparatory for AMD HDSup/HASup which requires updating A/D bits off the PTE (even after its insertion in the IOTLB) based on the fact that HAD bits (0x3 or 0x1) were set on the Device Table Entry. Signed-off-by: Joao Martins --- hw/i386/amd_iommu.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/hw/i386/amd_iommu.c b/hw/i386/amd_iommu.c index ea8eaeb330b6..25b5c3be70ea 100644 --- a/hw/i386/amd_iommu.c +++ b/hw/i386/amd_iommu.c @@ -72,6 +72,9 @@ typedef struct AMDVIIOTLBEntry { uint64_t perms; /* access permissions */ uint64_t translated_addr; /* translated address */ uint64_t page_mask; /* physical page size */ + uint16_t dte_flags; /* device table entry flags */ + uint64_t pte; /* pte entry */ + uint64_t pte_addr; /* pte entry iova */ } AMDVIIOTLBEntry; =20 /* configure MMIO registers at startup/reset */ @@ -340,7 +343,8 @@ static void amdvi_iotlb_remove_page(AMDVIState *s, hwad= dr addr, =20 static void amdvi_update_iotlb(AMDVIState *s, uint16_t devid, uint64_t gpa, IOMMUTLBEntry to_cache, - uint16_t domid) + uint16_t domid, uint16_t dte_flags, + uint64_t pte, uint64_t pte_addr) { AMDVIIOTLBEntry *entry =3D g_new(AMDVIIOTLBEntry, 1); uint64_t *key =3D g_new(uint64_t, 1); @@ -359,6 +363,9 @@ static void amdvi_update_iotlb(AMDVIState *s, uint16_t = devid, entry->perms =3D to_cache.perm; entry->translated_addr =3D to_cache.translated_addr; entry->page_mask =3D to_cache.addr_mask; + entry->dte_flags =3D dte_flags; + entry->pte =3D pte; + entry->pte_addr =3D pte_addr; *key =3D gfn | ((uint64_t)(devid) << AMDVI_DEVID_SHIFT); g_hash_table_replace(s->iotlb, key, entry); } @@ -896,7 +903,8 @@ static inline uint64_t amdvi_get_pte_entry(AMDVIState *= s, uint64_t pte_addr, =20 static void amdvi_page_walk(AMDVIAddressSpace *as, uint64_t *dte, IOMMUTLBEntry *ret, unsigned perms, - hwaddr addr) + hwaddr addr, uint64_t *iotlb_pte, + uint64_t *iotlb_pte_addr) { unsigned level, present, pte_perms, oldlevel; uint64_t pte =3D dte[0], pte_addr, page_mask; @@ -945,6 +953,8 @@ static void amdvi_page_walk(AMDVIAddressSpace *as, uint= 64_t *dte, ret->translated_addr =3D (pte & AMDVI_DEV_PT_ROOT_MASK) & page_mas= k; ret->addr_mask =3D ~page_mask; ret->perm =3D amdvi_get_perms(pte); + *iotlb_pte =3D pte; + *iotlb_pte_addr =3D addr; return; } no_remap: @@ -952,6 +962,8 @@ no_remap: ret->translated_addr =3D addr & AMDVI_PAGE_MASK_4K; ret->addr_mask =3D ~AMDVI_PAGE_MASK_4K; ret->perm =3D amdvi_get_perms(pte); + *iotlb_pte =3D pte; + *iotlb_pte_addr =3D addr; } =20 static void amdvi_do_translate(AMDVIAddressSpace *as, hwaddr addr, @@ -960,7 +972,7 @@ static void amdvi_do_translate(AMDVIAddressSpace *as, h= waddr addr, AMDVIState *s =3D as->iommu_state; uint16_t devid =3D PCI_BUILD_BDF(as->bus_num, as->devfn); AMDVIIOTLBEntry *iotlb_entry =3D amdvi_iotlb_lookup(s, addr, devid); - uint64_t entry[4]; + uint64_t entry[4], pte, pte_addr; =20 if (iotlb_entry) { trace_amdvi_iotlb_hit(PCI_BUS_NUM(devid), PCI_SLOT(devid), @@ -982,10 +994,12 @@ static void amdvi_do_translate(AMDVIAddressSpace *as,= hwaddr addr, } =20 amdvi_page_walk(as, entry, ret, - is_write ? AMDVI_PERM_WRITE : AMDVI_PERM_READ, addr); + is_write ? AMDVI_PERM_WRITE : AMDVI_PERM_READ, addr, + &pte, &pte_addr); =20 amdvi_update_iotlb(s, devid, addr, *ret, - entry[1] & AMDVI_DEV_DOMID_ID_MASK); + entry[1] & AMDVI_DEV_DOMID_ID_MASK, + entry[0] & ~AMDVI_DEV_PT_ROOT_MASK, pte, pte_addr); return; =20 out: --=20 2.17.2 From nobody Mon May 6 05:12:47 2024 Delivered-To: importer2@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+importer2=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=oracle.com); dmarc=fail(p=none dis=none) header.from=oracle.com ARC-Seal: i=2; a=rsa-sha256; t=1651181009; cv=pass; d=zohomail.com; s=zohoarc; b=H4iYdF82eNkHmACCG19xaBRT7XaiHXb5bcSlzsmpeQL2So6h4ouQW4nqndHSe6aYaS3qJKEToMu+VI6iSojO3ZjFQiV0LzgLWTm/kJUDOOKLI6j9si9OIKH1ouTZy4NVTpadd+gt+nyCsiGt59YRITizAFnTqKiYIC1Z3uyMqMU= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651181009; h=Content-Type: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=6L+x/ixhtAuKHsky57sR9gRqvlDbipRnaxnBJSyFZ54=; b=kgOtraauCNKqAoEFvK3MJnXAw9y44vldRIgrn/FteWTCOei2zT6TAkTfQ5yx95cOu9TRGThTSWYLRxoie0g1cvl2M/bEYwWMJWF0feFbD1jMlOFzR2ozlIr6LVuve9g/EmpRo1C9ozivViBUjPsPu8kRWG5iiLKITFA03R1biRw= 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+importer2=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=oracle.com); dmarc=fail header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1651181009259843.6726207123351; Thu, 28 Apr 2022 14:23:29 -0700 (PDT) Received: from localhost ([::1]:52662 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nkBbk-0003ls-7E for importer2@patchew.org; Thu, 28 Apr 2022 17:23:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43462) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nkBTB-0000az-Qe for qemu-devel@nongnu.org; Thu, 28 Apr 2022 17:14:38 -0400 Received: from mx0a-00069f02.pphosted.com ([205.220.165.32]:53400) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nkBT9-0005qz-Nn for qemu-devel@nongnu.org; Thu, 28 Apr 2022 17:14:37 -0400 Received: from pps.filterd (m0246627.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 23SJNZ7F015535; Thu, 28 Apr 2022 21:14:22 GMT Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3fmb9aw632-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 28 Apr 2022 21:14:21 +0000 Received: from pps.filterd (iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (8.16.1.2/8.16.1.2) with SMTP id 23SL5CI0028545; Thu, 28 Apr 2022 21:14:20 GMT Received: from nam11-co1-obe.outbound.protection.outlook.com (mail-co1nam11lp2173.outbound.protection.outlook.com [104.47.56.173]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com with ESMTP id 3fm7w79qy2-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 28 Apr 2022 21:14:19 +0000 Received: from BLAPR10MB4835.namprd10.prod.outlook.com (2603:10b6:208:331::11) by CH0PR10MB5289.namprd10.prod.outlook.com (2603:10b6:610:d8::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5186.14; Thu, 28 Apr 2022 21:14:17 +0000 Received: from BLAPR10MB4835.namprd10.prod.outlook.com ([fe80::b9e5:d1b6:b4be:f9d]) by BLAPR10MB4835.namprd10.prod.outlook.com ([fe80::b9e5:d1b6:b4be:f9d%5]) with mapi id 15.20.5206.013; Thu, 28 Apr 2022 21:14:17 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : content-type : mime-version; s=corp-2021-07-09; bh=6L+x/ixhtAuKHsky57sR9gRqvlDbipRnaxnBJSyFZ54=; b=0x/AyyvoGMlbsGigV4Mf6Bzb5jzIv1L1twxaUVhH7H+pI/pTmv2qMQ9uf/MSojiFabYW 41mFPI4Tgwj+oX2VPmBGtuRpk0Vdg0nRKEYeX11TQT2wjDe9xxBTzVSZ/FrX4FZPUBhG 7zrLvP8y4PWSkEoKDiCe8FrETxfWUkmFZ/Mur91KlahZ25g2HEqgeXy0fe5u56iBUByw pWY1OHSGqYw2uIa2mnRBSKWJp+pOCVh3+0/tQ6gEMMjC2SdQAPEHFgXsK/4niWXfp4of OOA2vdcfaDdHLMHotsZ584LlzBPvRE7Uk9qlcpGun3LrtoDarLq1SFjH2VVg0R47K+HF bQ== ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UhtdQzhg7hWvt7I4mvmi99TiHOk2tKfqUC1ioZcYhWz/fajbXFWu3klKpWSkQ8AoYLc2Ce6xwX6Vep8NWaC+t2afSU6oMMY+vNoJ9W+0kEChLufo1TkNx+2hpyLeYYD37eOcIMZCHrvp3+cog0i/E0aCoVzKymNvwcDlYDrGHjVylttH7UeRND8a6tba5oR21+vR49Zi0+doI8MFKQ1aCHBrjNHwuqPPY+9DIyGHJNjeNhIi+1/PQONSBv+FXoMVUVK1/GJSX4lEvppDxIHqeOyVAK/ezptL8QrtewLo3n+Ct8dPwPWZuEdUaCccWYJWw3IROQ8V134Y/5xu09AF0w== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=6L+x/ixhtAuKHsky57sR9gRqvlDbipRnaxnBJSyFZ54=; b=ZM9O1Wh/FAjIdsVInWxBu2msaiKkn5BsF3sQPQWWUN+3sHceBKmxGgDn1Hwcb0s2bZ3RrWmBCT0WgMTYMjJURrvRniefJpXh7spsqsXn7JFKr1rhl5KjPsoEOAusH9jLcIHqUP+S0hXa261719vsq75oDUTgUJzxPzuh6cyE+N/3j0Nr0k05t5UT7unefXAh86mouCxE3Q1tggeL4tmn/Om7TytfGCAd1dxsZ25RXv7sMMHUWxrRHNbmWEi3jJ8TZoiH11YSNWQzum+G1gJhRGivfLyriuTR6JL5Br+Sfpmf7nFWJslPy8brHRCAaF022wV+MiJmDbYPmLpo48+nnQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6L+x/ixhtAuKHsky57sR9gRqvlDbipRnaxnBJSyFZ54=; b=wAEXSQ0a9TG5MH531MYEogK1K1EMvWbLIbty7G2Y3d2k/aLdzf1gxCrWncJb4poM5WtQ6VV0URL0k7lcxIS+6IqnRDi16GR6U/KcUKDJz6SOWmkm2o9tWoVU+gCyzT/Y9Pv2fKHOmUbdVYbnDJ9b6Ny27RAj+ps+PUGQ7sj1jD8= From: Joao Martins To: qemu-devel@nongnu.org Subject: [PATCH RFC 02/10] amd-iommu: Access/Dirty bit support Date: Thu, 28 Apr 2022 22:13:43 +0100 Message-Id: <20220428211351.3897-3-joao.m.martins@oracle.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20220428211351.3897-1-joao.m.martins@oracle.com> References: <20220428211351.3897-1-joao.m.martins@oracle.com> X-ClientProxiedBy: LO2P265CA0297.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:a5::21) To BLAPR10MB4835.namprd10.prod.outlook.com (2603:10b6:208:331::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: bbcfeb57-9b36-44f8-66b8-08da295c0cf0 X-MS-TrafficTypeDiagnostic: CH0PR10MB5289:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: lz8xT1qSqiE9kZ3Nj8TdKi+cAGMiR3gr/WBUiLDBcB9qZbVHWtzJz+g+K5BD/3wu6icxVHMCFfNj1Z//w1//oDDLZzYPfSnzZ2d9Vecrsv71Q0iv03JUYEJgeH98NIThS9CraHvK21kFOeQNpBNxdlmWtpMGvdvyOcdVvpl7XBnfXY2tqARU9Da9aKoFb1CPdlHMLuM3TMUoW2gW/CqSOX9a+LEwK+61HG7rjHAzEZOtoYk4D0iRHuCXHu691AKMQed8TLGVLZC5PvDAH88cSJe6MRNCFxMbHizB/JBPr/meG1PFMEJeEIc7JL3zHiQur+WUo4O0/ADVnmbVqCIkroy2f4PJRkUU523PRSa71XOMJg7QMM0NPnl+2Z2wLbYPTSEnv5xoqHXZ/uTmbGyx4ZGInKQxDVUbOHuudSdNnXgM87k3+CH+8ue2l9w0w2BzCEe4K654YcjrsSn5n+uXEdwaq0wXRYsptD3KEWgrNGlN5cFzom2/lnM+YlPg5jgodQrunhvc4VODNHKyl2SEF41g+eKxZd2TtB+fjNPQvEWhtspvWlHDdzYnqMB3+ZSBzWOODG7aRQ2iqKB2aJAg/4YiZRrDl+2j04XlGZVO0a1N9vHxB0AjpHTwdG7T5N0J8zNgM0QQ0LuKu9GoK32OZgzN3h7iPsMPo5bNMte2qXdksX7QUmIkjZqBhFPG3SVrw31ijTPFE82P2CnuihFsDfG2HhJZKQ/mxx0XBE/Zypc= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BLAPR10MB4835.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(366004)(6666004)(54906003)(186003)(1076003)(38350700002)(38100700002)(5660300002)(2616005)(7416002)(103116003)(26005)(316002)(6916009)(36756003)(66946007)(8676002)(66476007)(4326008)(66556008)(8936002)(52116002)(86362001)(6512007)(2906002)(6486002)(508600001)(83380400001)(6506007)(14143004); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?KVLE7IEPGnkkzdJnvxbAoOGq2F93zzelvhz7b1XdA3PThLzwhCQ1kRmUv572?= =?us-ascii?Q?SEzx+/tvG3HMYvq/JXaqMbQGI9AC1pb5dMkYRHluZSBIG3pqv/W44omxzzaw?= =?us-ascii?Q?O+oWFv/cgyBtE7/2sF++zEP6eMVNSoe119L6HxUiWjRN1XJAvz0Lhtd0DcSI?= =?us-ascii?Q?Q1tvu2WB8jx9E5YjmEQDsQZxWzKRGAC/BE3qp1GDpdQZjjUYV33Z8FzhrO4k?= =?us-ascii?Q?6vC88EBU8Vvzcxy3AbBo3deGh3vGGhglZBzrx5DIwJ2T+WFBZv2xQX0xWWZY?= =?us-ascii?Q?1Hdvwex+5t8oqQRxcMXFl115T5K3ZbdyJyckT66shC5r0L/A+LmimBijcloS?= =?us-ascii?Q?/gCWHec4rtKiL4/l4qrUvIskQcTMDeF5t/cAOay+mteE26iEi4W88frPRoFl?= =?us-ascii?Q?FSsjye4KNrIIVpQnjyzzFoWudLtJQeI1iZf9qvjky/7CX6DpraZpCdo+yAdA?= =?us-ascii?Q?h3ds6GSiWCBCggECTBSu0otxhXDf8Eh1rxzeRytd9Ga9bUvbqYHvJsDhRtcV?= =?us-ascii?Q?TAU4hSQnqziWPF8Lm2maSNdxTKhzq57V8+77LBKlbVTmf5c013L+XtqEAoOW?= =?us-ascii?Q?hgIwFw/gD/vqeTYad2lOm0fMFSfmGGp1XjMKmtRKkEnrTTIkp6ooKdapzb4B?= =?us-ascii?Q?a57KoJVBziwInl2aNLarFM4EDE7NrJmGdKaWKVyNU19pUqAcGSqZjlUUYony?= =?us-ascii?Q?HJ5CqVk7Vp8UOjYxc0Cik0qRPDQ4r7rVipJCvzqYll4mJrhXMfAqNtZdk501?= =?us-ascii?Q?Q5yGIuXmTjYrL9ijh+KWwA1rsMe5LsIcP8OZKcmKWk8dC6y8eGcFV+bnpme0?= =?us-ascii?Q?D93MaWvXI8spHS2rL313ga0rz4mTo0yLlFQAWka7jrdQFiGt3THF3Mlouv22?= =?us-ascii?Q?dRmnYJPXi8gFrHD+tBglWgc5uUWHsdAFicKABsK5KHB4yVJQe65ocFr7Z9eS?= =?us-ascii?Q?AdTM/PG8LHJut3RHHhaZjs3EDlmpg5cKtIgnBJ6Wuoh17ON52aVR9R1/8Oad?= =?us-ascii?Q?rcYkocPkQct65r7vZYbYQj9IXV7Ske8GudcW8Ga4riilwacAdP7pY2dlb1jM?= =?us-ascii?Q?rxj8Dt42MzhBqTrDNVNvDyhJ6QWPSlSFDzzF974wNUw0BAj7SStxcjewdGqY?= =?us-ascii?Q?GfkNwHGprUof2O/JMAm8mYzIB0nXd+aW9owlnqZafrA9/3rnBaxxTc7e0FG+?= =?us-ascii?Q?og6DcXqH72ToAA/YaGWGXhAFtjtD8tmLag0awQNOgdZx64hFxZoePzBQD+Vc?= =?us-ascii?Q?4auH+vqSVUSFaaBPkBSnD5UHG2qhKlk7aSO16YuQHuF999ZBV8I1hHLGLWE7?= =?us-ascii?Q?qNf9e73lU/Zy/JZcVrvkNFNh9BLw80Auz+dpjJ9O0Obxb0kpkjri+VqQHXuh?= =?us-ascii?Q?5UKxmWkJfl7mqfSZ4y+Mcv/Z40a4677YfgIVHXxcMO53R48m2fQKByrBvuKx?= =?us-ascii?Q?kbiNb9+ADQlYSkhxV9SqybNGpNGgwmBDgBr/e/Mwvqk8jwdfwb2KAHz0Sk6I?= =?us-ascii?Q?EbbgD0KtLmxtHdA/ovSo0npvLKNawUOTalL+QLG8aOohmVW2+T+iIhs844de?= =?us-ascii?Q?kR01qibavEWazyA+v6uhC5sQgslUIpfTQR3xE7aYiXcGRc7X2XWpziDawN70?= =?us-ascii?Q?XCYriCRZxYHD6c8UOTOSCdpy6Fc+l3P404/JrCeYV9snGIuqlUSYDJ4lgLDQ?= =?us-ascii?Q?u+1xuVf1nFSNi7dEUNYIaUBmAhkfOth6COsm/z6GEulOOtukO/da1u0DUmz0?= =?us-ascii?Q?1UKy6dHLpQRqgJNrexviF5H2U4CZlSw=3D?= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: bbcfeb57-9b36-44f8-66b8-08da295c0cf0 X-MS-Exchange-CrossTenant-AuthSource: BLAPR10MB4835.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Apr 2022 21:14:17.2467 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: cQ0e0jNUabVGwaeJXEazUZGE3PvC2IiX/2WAXw0GBF/9h1Nc2XACW72VqluCMY08VLOov9lr42nna8FgO3kYiv2Fg1S25OkNkZA7WCvfzxA= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH0PR10MB5289 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.486, 18.0.858 definitions=2022-04-28_04:2022-04-28, 2022-04-28 signatures=0 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 spamscore=0 adultscore=0 mlxscore=0 bulkscore=0 suspectscore=0 malwarescore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2202240000 definitions=main-2204280125 X-Proofpoint-ORIG-GUID: NX8haWPZHlupofFFMAfE9qmEEynNw8Ok X-Proofpoint-GUID: NX8haWPZHlupofFFMAfE9qmEEynNw8Ok 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+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.165.32; envelope-from=joao.m.martins@oracle.com; helo=mx0a-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "John G . Johnson" , kvm@vger.kernel.org, "Michael S. Tsirkin" , Jason Wang , Peter Xu , Joao Martins , Eric Blake , Yi Liu , Juan Quintela , David Hildenbrand , Markus Armbruster , Nicolin Chen , Jason Gunthorpe , Kevin Tian , Richard Henderson , "Dr. David Alan Gilbert" , Eric Auger , Alex Williamson , Thanos Makatos , Eduardo Habkost , Yishai Hadas , Cornelia Huck , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.onmicrosoft.com) X-ZM-MESSAGEID: 1651181011498100001 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" IOMMU advertises Access/Dirty bits if the extended feature register reports it. Relevant AMD IOMMU SDM ref[0] "1.3.8 Enhanced Support for Access and Dirty Bits" To enable it we set the DTE flag in bits 7 and 8 to enable access, or access+dirty. With that, the IOMMU starts marking the D and A flags on every Memory Request or ATS translation request. Relevant AMD IOMMU SDM ref [0], "Table 7. Device Table Entry (DTE) Field Definitions" particularly the entry "HAD". The cached DTE information is then used on amdvi_had_update on both when we do an IO page walk, or when we found an IOTLB entry for it. To actually toggle on and off it's relatively simple as it's setting 2 bits on DTE and flush the device DTE cache. The information is then cleared and set again on the next device context cached or IOVA. Worthwhile sections from AMD IOMMU SDM: "2.2.3.1 Host Access Support" "2.2.3.2 Host Dirty Support" For details on how IOMMU hardware updates the dirty bit see, and expects from its consequent clearing by CPU: "2.2.7.4 Updating Accessed and Dirty Bits in the Guest Address Tables" "2.2.7.5 Clearing Accessed and Dirty Bits" This is useful to help prototypization of IOMMU dirty tracking, particularly the IOMMUFD and VFIO sides. Signed-off-by: Joao Martins --- hw/i386/amd_iommu.c | 52 ++++++++++++++++++++++++++++++++++++++++++++ hw/i386/amd_iommu.h | 11 ++++++++-- hw/i386/trace-events | 2 ++ 3 files changed, 63 insertions(+), 2 deletions(-) diff --git a/hw/i386/amd_iommu.c b/hw/i386/amd_iommu.c index 25b5c3be70ea..7f48a2601579 100644 --- a/hw/i386/amd_iommu.c +++ b/hw/i386/amd_iommu.c @@ -24,6 +24,7 @@ #include "hw/i386/pc.h" #include "hw/pci/msi.h" #include "hw/pci/pci_bus.h" +#include "hw/qdev-properties.h" #include "migration/vmstate.h" #include "amd_iommu.h" #include "qapi/error.h" @@ -901,6 +902,48 @@ static inline uint64_t amdvi_get_pte_entry(AMDVIState = *s, uint64_t pte_addr, return pte; } =20 +static inline int amdvi_set_pte_entry(AMDVIState *s, uint64_t pte_addr, + uint16_t devid, uint64_t pte) +{ + if (dma_memory_write(&address_space_memory, pte_addr, &pte, sizeof(pte= ), + MEMTXATTRS_UNSPECIFIED)) { + trace_amdvi_get_pte_hwerror(pte_addr); + amdvi_log_pagetab_error(s, devid, pte_addr, 0); + return -EINVAL; + } + return 0; +} + +/* + * Checks if A/D bits need to be updated. + * It can only be called when PTE permissions have been + * validated against he transaction-requested ones. + */ +static bool amdvi_had_update(AMDVIAddressSpace *as, uint64_t dte, + uint64_t *pte, unsigned perms) +{ + bool is_write =3D perms & AMDVI_PERM_WRITE; + bool dirty, access; + + dirty =3D access =3D false; + + if (is_write && (dte & AMDVI_DEV_HADEN) && + !(*pte & AMDVI_DEV_PERM_DIRTY)) { + *pte |=3D AMDVI_DEV_PERM_DIRTY; + trace_amdvi_hd_update(*pte); + dirty =3D true; + } + + if ((!is_write | dirty) && (dte & AMDVI_DEV_HAEN) && + !(*pte & AMDVI_DEV_PERM_ACCESS)) { + *pte |=3D AMDVI_DEV_PERM_ACCESS; + trace_amdvi_ha_update(*pte); + access =3D true; + } + + return dirty || access; +} + static void amdvi_page_walk(AMDVIAddressSpace *as, uint64_t *dte, IOMMUTLBEntry *ret, unsigned perms, hwaddr addr, uint64_t *iotlb_pte, @@ -948,6 +991,11 @@ static void amdvi_page_walk(AMDVIAddressSpace *as, uin= t64_t *dte, page_mask =3D pte_get_page_mask(oldlevel); } =20 + if (amdvi_had_update(as, dte[0], &pte, perms)) { + amdvi_set_pte_entry(as->iommu_state, pte_addr, as->devfn, + cpu_to_le64(pte)); + } + /* get access permissions from pte */ ret->iova =3D addr & page_mask; ret->translated_addr =3D (pte & AMDVI_DEV_PT_ROOT_MASK) & page_mas= k; @@ -977,6 +1025,10 @@ static void amdvi_do_translate(AMDVIAddressSpace *as,= hwaddr addr, if (iotlb_entry) { trace_amdvi_iotlb_hit(PCI_BUS_NUM(devid), PCI_SLOT(devid), PCI_FUNC(devid), addr, iotlb_entry->translated_addr); + if (amdvi_had_update(as, iotlb_entry->dte_flags, + &iotlb_entry->pte, iotlb_entry->perms)) + amdvi_set_pte_entry(as->iommu_state, iotlb_entry->pte_addr, + as->devfn, cpu_to_le64(iotlb_entry->pte)); ret->iova =3D addr & ~iotlb_entry->page_mask; ret->translated_addr =3D iotlb_entry->translated_addr; ret->addr_mask =3D iotlb_entry->page_mask; diff --git a/hw/i386/amd_iommu.h b/hw/i386/amd_iommu.h index 79d38a3e4184..b794596aa07d 100644 --- a/hw/i386/amd_iommu.h +++ b/hw/i386/amd_iommu.h @@ -135,6 +135,10 @@ #define AMDVI_DEV_PERM_SHIFT 61 #define AMDVI_DEV_PERM_READ (1ULL << 61) #define AMDVI_DEV_PERM_WRITE (1ULL << 62) +#define AMDVI_DEV_PERM_ACCESS (1ULL << 5) +#define AMDVI_DEV_PERM_DIRTY (1ULL << 6) +#define AMDVI_DEV_HADEN (3ULL << 7) +#define AMDVI_DEV_HAEN (1ULL << 7) =20 /* Device table entry bits 64:127 */ #define AMDVI_DEV_DOMID_ID_MASK ((1ULL << 16) - 1) @@ -159,9 +163,11 @@ #define AMDVI_FEATURE_GA (1ULL << 7) /* guest VAPIC suppo= rt */ #define AMDVI_FEATURE_HE (1ULL << 8) /* hardware error re= gs */ #define AMDVI_FEATURE_PC (1ULL << 9) /* Perf counters = */ +#define AMDVI_FEATURE_HD (1ULL << 52) /* Host Dirty suppo= rt */ +#define AMDVI_FEATURE_HA (1ULL << 49) /* Host Access = */ =20 /* reserved DTE bits */ -#define AMDVI_DTE_LOWER_QUAD_RESERVED 0x80300000000000fc +#define AMDVI_DTE_LOWER_QUAD_RESERVED 0x803000000000006c #define AMDVI_DTE_MIDDLE_QUAD_RESERVED 0x0000000000000100 #define AMDVI_DTE_UPPER_QUAD_RESERVED 0x08f0000000000000 =20 @@ -176,7 +182,8 @@ /* extended feature support */ #define AMDVI_EXT_FEATURES (AMDVI_FEATURE_PREFETCH | AMDVI_FEATURE_PPR | \ AMDVI_FEATURE_IA | AMDVI_FEATURE_GT | AMDVI_FEATURE_HE | \ - AMDVI_GATS_MODE | AMDVI_HATS_MODE | AMDVI_FEATURE_GA) + AMDVI_GATS_MODE | AMDVI_HATS_MODE | AMDVI_FEATURE_GA | \ + AMDVI_FEATURE_HD | AMDVI_FEATURE_HA) =20 /* capabilities header */ #define AMDVI_CAPAB_FEATURES (AMDVI_CAPAB_FLAT_EXT | \ diff --git a/hw/i386/trace-events b/hw/i386/trace-events index e49814dd642d..eb5f075873cd 100644 --- a/hw/i386/trace-events +++ b/hw/i386/trace-events @@ -107,6 +107,8 @@ amdvi_ir_intctl(uint8_t val) "int_ctl 0x%"PRIx8 amdvi_ir_target_abort(const char *str) "%s" amdvi_ir_delivery_mode(const char *str) "%s" amdvi_ir_irte_ga_val(uint64_t hi, uint64_t lo) "hi 0x%"PRIx64" lo 0x%"PRIx= 64 +amdvi_ha_update(uint64_t pte) "pte 0x%"PRIx64 +amdvi_hd_update(uint64_t pte) "pte 0x%"PRIx64 =20 # vmport.c vmport_register(unsigned char command, void *func, void *opaque) "command:= 0x%02x func: %p opaque: %p" --=20 2.17.2 From nobody Mon May 6 05:12:47 2024 Delivered-To: importer2@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+importer2=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=oracle.com); dmarc=fail(p=none dis=none) header.from=oracle.com ARC-Seal: i=2; a=rsa-sha256; t=1651181187; cv=pass; d=zohomail.com; s=zohoarc; b=QZfOVMyLNPnZ3PwoEz4Ny1OCw42Ri8vt2CkyE19A/VM+4pq0dqmDbFfRsIXmtvJy0jYgwKr9npED0WQgozfOaSKcO4cjPdyVoI1dUmqlfzDY14QsTfkLr0U846cuVKPZsc3vOLTABMi20Cowb3+llwANsSyanXHgy7hjjUsr1sk= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651181187; h=Content-Type: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=19+8wQdY7VNogk3Juc0dCtE2gVtLfYmUxah1u4a17X0=; b=eju3PWHKHgG0sw+ck0Lra7f7o1Z7+tHmBNkYqq3nC53wlXoywvnlNEaYqSs4onZJs0eb8uKoju5le7t8bOalB2hb+u/drY2SCEt253P+hbPqhU5JEUEpN7ls0XPEBLdGWGgjEdZgyRw/BX8PKqZzfyrWnMJ3Cak1xXGDyssg4iE= 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+importer2=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=oracle.com); dmarc=fail header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1651181187378455.0609880110994; Thu, 28 Apr 2022 14:26:27 -0700 (PDT) Received: from localhost ([::1]:56900 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nkBec-0006cL-80 for importer2@patchew.org; Thu, 28 Apr 2022 17:26:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43478) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nkBTD-0000cU-FE for qemu-devel@nongnu.org; Thu, 28 Apr 2022 17:14:39 -0400 Received: from mx0a-00069f02.pphosted.com ([205.220.165.32]:57384) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nkBTB-0005rK-Lp for qemu-devel@nongnu.org; Thu, 28 Apr 2022 17:14:39 -0400 Received: from pps.filterd (m0246627.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 23SJYOGM015530; Thu, 28 Apr 2022 21:14:25 GMT Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3fmb9aw635-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 28 Apr 2022 21:14:25 +0000 Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.16.1.2/8.16.1.2) with SMTP id 23SL6c5f028692; Thu, 28 Apr 2022 21:14:24 GMT Received: from nam12-mw2-obe.outbound.protection.outlook.com (mail-mw2nam12lp2049.outbound.protection.outlook.com [104.47.66.49]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com with ESMTP id 3fp5ypebpc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 28 Apr 2022 21:14:24 +0000 Received: from BLAPR10MB4835.namprd10.prod.outlook.com (2603:10b6:208:331::11) by CH0PR10MB5289.namprd10.prod.outlook.com (2603:10b6:610:d8::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5186.14; Thu, 28 Apr 2022 21:14:21 +0000 Received: from BLAPR10MB4835.namprd10.prod.outlook.com ([fe80::b9e5:d1b6:b4be:f9d]) by BLAPR10MB4835.namprd10.prod.outlook.com ([fe80::b9e5:d1b6:b4be:f9d%5]) with mapi id 15.20.5206.013; Thu, 28 Apr 2022 21:14:21 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : content-type : mime-version; s=corp-2021-07-09; bh=19+8wQdY7VNogk3Juc0dCtE2gVtLfYmUxah1u4a17X0=; b=aMuX64ghFcLiXpaoC9ylQ26YkB/Zy01BUM37OaWERGROief9K+7PZzdClqe8MApwX7xp mH5aKyhck16NpnwykwyTHcqUWrf7Ge9VxTX/J+m8MWvlQlgL49GpTCMjTQidSOi65inb 1HmgiC4A/tx6/mcYfce+p4JsdUGVYk9tGAyXw6EHLLKC57+La3an1B1WOgoD7eTgxSOR 8GazA/IG4ZqXc7OSvOhXJepvuK37uW41RxTfBNN4tSbxjxVBw0PVbWiyxOnzNwzm8EpL Vl/8jv0DsOa7dJU+22V4obo5mQB/p/rc2X9TOPohCy56e7Y9l/tD4E8yaKlxwfge9swp YQ== ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Vne7pH/E/lTVVhvr0Fn2dWJLwzxOpqGyiWwNRu0gbSCd+Jb+ae5hFvbAqDFV3NBHDhrAlfDnhHD5TmCsDIksyNQ5SUjeddrh+0u+4Qmz1Vs8/RY8e7ZJ86BGZv2ADAmfZ11KFLdk8gDRgWgFrQFYm/vrnpnqwKThPUxlkPa8h3I7P15MIpXFODYo58IUQNrn+hxA9iL9oHifXL379KRfmCLZS47SPVvsmgNCrUwbrzXk1J24vSMDcx4f32b/7YUq6p7out3gBs93DJ39S5K19MERr4PntTh4toZUN3GiC2RmToFKi6xnb4AJY8SXm11MZbSh/MK6+RDeG7nw2M3m3g== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=19+8wQdY7VNogk3Juc0dCtE2gVtLfYmUxah1u4a17X0=; b=TPDohXvvN6suvzRDlytsYZILALBkxCu6u1IKgn2tXvyjVC8op14ZRAWbyTHT4wYv7qXkPLCqkQJmmdgZJlZDXa7pmZPBz9zUiMe1TzTOjCJQd5HnoKvV9RTUpkpKqF908nR1qMUwEM27t7CC8utOcGo3QcrdxE/Ro5rjQuBWnuLFLU9GXPumdgJDHVibgfitDpOs/50AZAbobiNWguSMppqhcfIHi4rBx+p615X5KE9yigmtXmroJIhF8O6WValDBvBkDSn0Tx4cdcZukZQo3DwZiN+0Q8JvhkpNAitSTKGPlTkuUprOsFvjSpsLxSGViasNpaySWCfTw/dSdwra5A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=19+8wQdY7VNogk3Juc0dCtE2gVtLfYmUxah1u4a17X0=; b=apsQv6XDpVhr/XFJCIXDyibmmkPTLF6ZhtB/Fhx5Lv6IJHj5A03RpGY1ZI+ktkjSK9NxTV51j3T++PwGQ69hYrxWhcJ+wqB12GyqFUzLd9RTO6P769cMsUBhoKoVVdxWLF8LS/S3suVZ7p99hgl5vpEqCdbWA2SPnEnM30srAaw= From: Joao Martins To: qemu-devel@nongnu.org Subject: [PATCH RFC 03/10] intel-iommu: Cache PASID entry flags Date: Thu, 28 Apr 2022 22:13:44 +0100 Message-Id: <20220428211351.3897-4-joao.m.martins@oracle.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20220428211351.3897-1-joao.m.martins@oracle.com> References: <20220428211351.3897-1-joao.m.martins@oracle.com> X-ClientProxiedBy: LO2P265CA0297.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:a5::21) To BLAPR10MB4835.namprd10.prod.outlook.com (2603:10b6:208:331::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 7919b7c6-153d-4145-e7a2-08da295c1026 X-MS-TrafficTypeDiagnostic: CH0PR10MB5289:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ictRycHlInJCnVOLZBGdxI3LwNAA3ewlnTEmidENxkKfA9y7ksgmZEspwBpvR8v/f/SBpYj79OR8Q+F29k6ljwidQSAWs3LyNv5c04fLtgknmY5WCCul5kYOCECuXf0duPXkc2ClMsBPHZKv0bR4kSdkvN8pW0vzoK/bxyyY4suJzWrKKSPbkwxS6cU4jjb8pmeEGEtsfA0c/+k1Slm3hYQISwACZhT5o4pf1/8RwLQxnWh0Vv6QzpK5qJtOD+XNHM5u7y9XG7P4bocWxL1k/xwAgmt4huWocD9si7evxHfSOOmYkmVV+9YCoW5s24j+IKceAHsqUW3JsRqPw/sDpJTEKgn/qfUri++Rj14pZyzoUinZ0s3GIamfJ0hBPeECQ5z6kFmwyewWGcU154vziwnoxQE+h66xuYOnpGmwSQq2YlBpjtUiWTSCWWkQxvZJitRze5ivfZ9lRHw5BifRzpA8891hOwBKsggjYcHCSX/JY27GrU2NO+wTSRGHNcWOCLUgVfK0upfOaGmKw4t4lbBgNyEDzmDUXNh/RrbS/LztjE6NDbditm/NiMze505oYC1duDLt7YnCKdktMlwJcUdEOvXIBoKtgz1RZwNVgq01uLRXNVJwA5khX4exO/+lXooluBDTTh1Xn2l9kKTYu/WxuWzrjHhxnq8LELJ0LWA+N4K0p0SZKSt7io4WGCnswRjHn48GFUv2e1dm+LQhCw== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BLAPR10MB4835.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(366004)(6666004)(54906003)(186003)(1076003)(38350700002)(38100700002)(5660300002)(2616005)(7416002)(103116003)(26005)(316002)(6916009)(36756003)(66946007)(8676002)(66476007)(4326008)(66556008)(8936002)(52116002)(86362001)(6512007)(2906002)(6486002)(508600001)(83380400001)(6506007); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?13rahZpLq7ne2wdvcXXvZbNENBu3OCuHmzR63GS9+1rasFZUM+MsTlENPTpz?= =?us-ascii?Q?IzyYWgyczA46t+LJTm2XzrOOGYrpmi9TIbdFl5wsRkhtSANI2iJC33FWFdwt?= =?us-ascii?Q?IVyNA7h9CCI8x4YkQEounnpglx6XJeKg6Sx+RzIxbxLQr2guKrMjZc5m1k+E?= =?us-ascii?Q?8eFEDtN1AoxIJ5qYtUtzfEZ/H34B0OtgezMSeCIdTlIyjM4AT3DWWKvU05ci?= =?us-ascii?Q?InZl095SLVjpTV/jENTGM7L+d6DEwqUKsZaqRtJWjAEHLua9sb2kAqfsu2j5?= =?us-ascii?Q?tt5dPyjRCMNNbkNSYnXBxi6pXbayfIMbOIHVPgRjUTPN7sEWXihGo+jWD7a1?= =?us-ascii?Q?oiRHoj7vc7lETIF0mbCfW2Cwit0V5oYF6C4DctgRF1QO+MeDq1PETEoNd6/+?= =?us-ascii?Q?kHspZbZNg1A4ht2rawLdMl6zA5dhhxhfTqLcUyVWAxmrq4ZNvJYabZwt9coJ?= =?us-ascii?Q?+JuzrA7n2gIktbxv+qWlPbNA3YHmYjIIqCBbwYQVSbUbOJLkraT9NPhu0ipb?= =?us-ascii?Q?+wt7gJ4XsYyVdI8vP6+0LaBDY+eBezV4yQwUUUQeglBmDo01QWbUY1CMj1Q6?= =?us-ascii?Q?wpRwglaht5BGuONa2mEF0lW0S8Btj9hIjpqo+VuGVolHFXgEhzd7c8FZkFaG?= =?us-ascii?Q?VYBtsOySZA/Knxv1QNy9Jm7EFjS1IJNrZyy5nk/3JIrHXNquHOEZ0Auu8lqP?= =?us-ascii?Q?Py678+WN25ZkzKClO3Byg9wL/pOWQ3dNJlfAfwJsqLrJ+17Q/nBmBXGafc1Z?= =?us-ascii?Q?RUkatZE+JaeFhXj1Ocb8BfvRDUC/5HpmKp0q0Ig5/5vovjQ8agAWt+jt7WzK?= =?us-ascii?Q?nz2D3TU9u/O56RgfSnrKsw7Y2sg2wBn/viWFJVAjAi8FdDY6EeurWUA4/ugq?= =?us-ascii?Q?EkriPyHxcD/GHR9nLdvZikVomzCUOtzzAinjcZeqsUNtDUhyDfNO3yECTQES?= =?us-ascii?Q?bl94ZGO799ReTeeQN6+ORMh+b16gwfvBXXDaqp7K55ltsLpDuIbSl3yhvqqI?= =?us-ascii?Q?+dyPpPm5BvHWY2kq4jNX3zC0P5LeBGbSOi0a6uQAkAwhF9MYcgtCm7V1E2EW?= =?us-ascii?Q?YlSzqgZe9xpkJlqFpukE7qjPQZjIyYouQHpZzdcOpl1wb6f6FZNNYG1N97mA?= =?us-ascii?Q?5okCnxJwMg+8yjbWdHXAzkEND13xT4amDUxfi+PrnaxtzlD7rh0OfurymsYy?= =?us-ascii?Q?bp81Gd747Znq11+NgkvFy4bP3FaNY1ZypAH7JbBxqOXBDIqC8VZy8lFkO2Hy?= =?us-ascii?Q?7z6j3UzL+1di06nGau6RRAr0BHxTTJELarihrcZks3iWCCbaxTKBZ6mwk58u?= =?us-ascii?Q?F/aKdr9lpuMyslE8wjZPidkx7gZCDUSKI/cLmHt6QStJW5Pb4HsS/EOBSqtm?= =?us-ascii?Q?mVKOFseY2CAXReMKoInr89SfmdjvT/w19zIrbHXDTTUJznl0yVWQyD/p4hK6?= =?us-ascii?Q?Mo2b+pwHVwHShxD33IEqtL/mC8Lsk0Tkmom15XvjV+4nIJ58J4HqSLGfQqce?= =?us-ascii?Q?WZrbcN5gOl8sQ8JzjVtOv7817HLoT2/KoC8IcN8jZyGCCB0Ww3jqSxtWhqhQ?= =?us-ascii?Q?oQysmb/UZnOQlRSvA2bQSJAqqB74OJPk2hQOVq8hYkQZtfUtWEBrPgIXaQn5?= =?us-ascii?Q?sh6VZSWtrnGijRHvQ0lmb+5zpYBAhleyK8QRTgVuYmtdzLKKL0ktjUXYeA3/?= =?us-ascii?Q?5w+jnbVG7gb65ZAXvC4XwWHDexS4XaAAagK8X93T/Oa55V4SiHk5Gy2YpX5x?= =?us-ascii?Q?d7yQD4EqswjxihTdD+1ZCNC1+tyMRXg=3D?= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7919b7c6-153d-4145-e7a2-08da295c1026 X-MS-Exchange-CrossTenant-AuthSource: BLAPR10MB4835.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Apr 2022 21:14:21.5917 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: JPGHwru9LCSxjFr3BCF4olDCkcKDXsm6y7qedqfH0HxSzP8BpbLP2HmXxFBX0CMaguRUTTwnX0JLDn9Zr7MDXAs1H/bnab9cLWEazrLn0CI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH0PR10MB5289 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.486, 18.0.858 definitions=2022-04-28_04:2022-04-28, 2022-04-28 signatures=0 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 mlxlogscore=843 mlxscore=0 suspectscore=0 malwarescore=0 spamscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2202240000 definitions=main-2204280125 X-Proofpoint-ORIG-GUID: dp-NIMTM0YdDCDp1Y0vEaPAzTu6nwfuC X-Proofpoint-GUID: dp-NIMTM0YdDCDp1Y0vEaPAzTu6nwfuC 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+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.165.32; envelope-from=joao.m.martins@oracle.com; helo=mx0a-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "John G . Johnson" , kvm@vger.kernel.org, "Michael S. Tsirkin" , Jason Wang , Peter Xu , Joao Martins , Eric Blake , Yi Liu , Juan Quintela , David Hildenbrand , Markus Armbruster , Nicolin Chen , Jason Gunthorpe , Kevin Tian , Richard Henderson , "Dr. David Alan Gilbert" , Eric Auger , Alex Williamson , Thanos Makatos , Eduardo Habkost , Yishai Hadas , Cornelia Huck , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.onmicrosoft.com) X-ZM-MESSAGEID: 1651181189137100001 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" On a successful translation, cache the PASID Table entry flags set at the context at the time i.e. the first 12bits. These bits contain read, write, dirty and access for example. This is a preparatory for SSADS which requires updating A/D bits on a translation based on the fact that SSADS was enabled on the given scalable mode PASID Table entry. Signed-off-by: Joao Martins --- hw/i386/intel_iommu.c | 18 ++++++++++++++++-- include/hw/i386/intel_iommu.h | 1 + 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c index c64aa81a83fc..752940fa4c0e 100644 --- a/hw/i386/intel_iommu.c +++ b/hw/i386/intel_iommu.c @@ -314,7 +314,7 @@ out: /* Must be with IOMMU lock held */ static void vtd_update_iotlb(IntelIOMMUState *s, uint16_t source_id, uint16_t domain_id, hwaddr addr, uint64_t slp= te, - uint8_t access_flags, uint32_t level) + uint8_t access_flags, uint32_t level, uint16_= t pe) { VTDIOTLBEntry *entry =3D g_malloc(sizeof(*entry)); uint64_t *key =3D g_malloc(sizeof(*key)); @@ -331,6 +331,7 @@ static void vtd_update_iotlb(IntelIOMMUState *s, uint16= _t source_id, entry->slpte =3D slpte; entry->access_flags =3D access_flags; entry->mask =3D vtd_slpt_level_page_mask(level); + entry->sm_pe_flags =3D pe; *key =3D vtd_get_iotlb_key(gfn, source_id, level); g_hash_table_replace(s->iotlb, key, entry); } @@ -965,6 +966,19 @@ static dma_addr_t vtd_get_iova_pgtbl_base(IntelIOMMUSt= ate *s, return vtd_ce_get_slpt_base(ce); } =20 +static uint64_t vtd_sm_pasid_entry_flags(IntelIOMMUState *s, + VTDContextEntry *ce) +{ + VTDPASIDEntry pe; + + if (!s->root_scalable) { + return 0; + } + + vtd_ce_get_rid2pasid_entry(s, ce, &pe); + return pe.val[0] & (~VTD_SM_PASID_ENTRY_SLPTPTR); +} + /* * Rsvd field masks for spte: * vtd_spte_rsvd 4k pages @@ -1789,7 +1803,7 @@ static bool vtd_do_iommu_translate(VTDAddressSpace *v= td_as, PCIBus *bus, page_mask =3D vtd_slpt_level_page_mask(level); access_flags =3D IOMMU_ACCESS_FLAG(reads, writes); vtd_update_iotlb(s, source_id, vtd_get_domain_id(s, &ce), addr, slpte, - access_flags, level); + access_flags, level, vtd_sm_pasid_entry_flags(s, &ce)= ); out: vtd_iommu_unlock(s); entry->iova =3D addr & page_mask; diff --git a/include/hw/i386/intel_iommu.h b/include/hw/i386/intel_iommu.h index 3b5ac869db6e..11446012a94c 100644 --- a/include/hw/i386/intel_iommu.h +++ b/include/hw/i386/intel_iommu.h @@ -123,6 +123,7 @@ struct VTDIOTLBEntry { uint64_t slpte; uint64_t mask; uint8_t access_flags; + uint16_t sm_pe_flags; }; =20 /* VT-d Source-ID Qualifier types */ --=20 2.17.2 From nobody Mon May 6 05:12:48 2024 Delivered-To: importer2@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+importer2=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=oracle.com); dmarc=fail(p=none dis=none) header.from=oracle.com ARC-Seal: i=2; a=rsa-sha256; t=1651180846; cv=pass; d=zohomail.com; s=zohoarc; b=kfITas6YZEJzFCR4t0acALDZa9Czf9kkxzUTdfNpoJ61HXhVTbeVHrJQSChOlOt2RWe+2KHbr1HUkFImX75YE8e1LObA4URtS3rnnEHvmA8r6nyhIghixDH4Gwe73BhwQAAQGmotCVk9G0YT8bqgv3LE/Ov55KwrP7N4ylgWK6U= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651180846; h=Content-Type: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=9NobxHFt2Af998yqPC3P34K6XbEr0IFgaKETrAv4lII=; b=X3jtex1xiPR4pxMPBQdhhaN0qX/yFTbDbcYuJAC50T/uVgX5ZvbtFZU+FuQfC+RfbL88K1ksFzOYIXGmC/DrbySYdbZH4kbWKT1Bi1KDh6VTf4occizgLbLjJOnpfRG31Mgpj6uNDfA3nx17ob3wIMoRJ6kclWCxuhlKaQ5fuKU= 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+importer2=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=oracle.com); dmarc=fail header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1651180846823698.3452189688837; Thu, 28 Apr 2022 14:20:46 -0700 (PDT) Received: from localhost ([::1]:47890 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nkBZ7-0000Uj-L3 for importer2@patchew.org; Thu, 28 Apr 2022 17:20:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43460) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nkBTB-0000ax-LL for qemu-devel@nongnu.org; Thu, 28 Apr 2022 17:14:38 -0400 Received: from mx0a-00069f02.pphosted.com ([205.220.165.32]:52918) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nkBT9-0005qv-E6 for qemu-devel@nongnu.org; Thu, 28 Apr 2022 17:14:37 -0400 Received: from pps.filterd (m0246627.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 23SJjjKJ015405; Thu, 28 Apr 2022 21:14:29 GMT Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3fmb9aw638-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 28 Apr 2022 21:14:29 +0000 Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.16.1.2/8.16.1.2) with SMTP id 23SL6Bko024994; Thu, 28 Apr 2022 21:14:27 GMT Received: from nam11-bn8-obe.outbound.protection.outlook.com (mail-bn8nam11lp2169.outbound.protection.outlook.com [104.47.58.169]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com with ESMTP id 3fm7w78ccf-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 28 Apr 2022 21:14:27 +0000 Received: from BLAPR10MB4835.namprd10.prod.outlook.com (2603:10b6:208:331::11) by DM6PR10MB3260.namprd10.prod.outlook.com (2603:10b6:5:1ab::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5186.15; Thu, 28 Apr 2022 21:14:25 +0000 Received: from BLAPR10MB4835.namprd10.prod.outlook.com ([fe80::b9e5:d1b6:b4be:f9d]) by BLAPR10MB4835.namprd10.prod.outlook.com ([fe80::b9e5:d1b6:b4be:f9d%5]) with mapi id 15.20.5206.013; Thu, 28 Apr 2022 21:14:25 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : content-type : mime-version; s=corp-2021-07-09; bh=9NobxHFt2Af998yqPC3P34K6XbEr0IFgaKETrAv4lII=; b=iI30munGQf+ig3PnnFXe2BtQOmIu3F4XwkMRKci5CWtwD+gwv6VwOcmD4gWIuHBS8iYI IFt/Ig28s/r4CG9U0gMMGjnopB+rRhXQUhZZG1AuHRTrCMwdpZ8/o1sEtRwgh80gALuQ 5JrwpPK71M3KEM84LgfRK487bNS2a26vJp9ZV9JuUBPU+ZI7lhRrYTTGJyEdOUCdUIbl iylouhElqxBih/j6O/m/OnQt4JAQUpcA4fNMDq27E8FDzQ+B9sapWFJ/5iFfhsE6ISzs 3HNaN594/o2XZNPeYUI9GAhqgS3PkaSiezifkR/zzKZKvKnefygo0BDXKzC49ArEU0Xh tg== ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JuhAqpm2CYB2XJFqMusS0GSeuZ0I8P6cdwV+taV2PErcmcGfSX51LDcSMAXC2t6l6HlLSP0Xf1gkfqG9TSuqKXy4Qip+PdJ43da8XYyG6IMxYoZfwR+CTMDfaGYj1x7LCoSFzeAd6IW1vrPjlPcg2bZbcBr7Ia/iOUK5kT9cVQGa4DLgi4MBeu1lY4JrMpqTJpY7tYSQX5Wo/qO05vC681c4NTyCyAOzB7jTUChFInZwk6vI0xaUirL1sVhALrOhanMDn8Jsm6RoxDZMukOxyHC0QelauIr4QFn9iD0aVI4L7o/1PL7wQafZAUsnCfUZJ6Dob+7fGnRpfxwS+zZAxQ== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=9NobxHFt2Af998yqPC3P34K6XbEr0IFgaKETrAv4lII=; b=EouYm313OxJpagSJ42x+X/STO6Z0zTplH+cGcivzspo3T6b1+0gicE6icOmJelO+/eeM1qYcoF4vW/ENMugSvXa/s481RVpZjiDFYr8dSD81MThz+8o4uRpvFbfmwUBWHjksOIDB+GAboufI2uK6100m7BheRh5+VrJ7x8TEagEwHfsDIDzQdeb2gVIbb8MAxr4bXanKLQEzWLd91DakD+abtlW0ytVapo+xdnw694f2H7jiWBmNCVTlHnLC3HOAGlPko9EXj8JdYyJLXJKcp3aI9SJn/90oPSb8jH6cAwczioi5vvZkvqFn1+8vR9FKj+k6aRCxcGBIkhUIZuvz3A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=9NobxHFt2Af998yqPC3P34K6XbEr0IFgaKETrAv4lII=; b=skzyBzZ2wWscI6cr4iG1gfFFqaZmZKoeMVcv0G0XCSO+DzzHGzWFitofBUM4xz0F2vcaVeSinv7+dPntVaexyB7+F/8ZvuVNFMr2ys4iqgkECaGlxiUH0YYEnXDgqGr+aiApklLqDTXWHKjQYuoRZTJYYX9fjDTkeVLZmZbvn+A= From: Joao Martins To: qemu-devel@nongnu.org Subject: [PATCH RFC 04/10] intel_iommu: Second Stage Access Dirty bit support Date: Thu, 28 Apr 2022 22:13:45 +0100 Message-Id: <20220428211351.3897-5-joao.m.martins@oracle.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20220428211351.3897-1-joao.m.martins@oracle.com> References: <20220428211351.3897-1-joao.m.martins@oracle.com> X-ClientProxiedBy: LO2P265CA0297.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:a5::21) To BLAPR10MB4835.namprd10.prod.outlook.com (2603:10b6:208:331::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 8497ee26-c7ab-4302-8d8f-08da295c12a0 X-MS-TrafficTypeDiagnostic: DM6PR10MB3260:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: UBcVHJ7jgyQDb8sRx860UUIBFs2Xl8IKEba8VpRc0ocfGiOGQaJblEoO9ToZB6cmBWuAJxRB3nJV6Oud8j1j5Xh4TEiL1Pdkvfzaj3bE3GGizBl1t0GHuTHnr8CCe6cDRl8gF/q3Fa2wphtnn8mVEkZXy1b69C6y16qT4IefNj7UcZZYGkpjCiagwRZArn39pKiJExvDzmtY2QcJZx9QRzz5+ve0qISd3t3j/Rang8MoKRDlOcXVBEfZqwQ3AWHx964rEQePI5krxEQcGiGakNN9682NAhfTlI+68/ygjEzuWzLdN15ZCC6nWTS7RcWHmAsmuuDM0BM/JaFkRFsHxFkgvmnyWOLobtiOfBI0GNOtVU1SxCZZ3Bcc9ukOkQLy3jsFp92IhH1G6JMbuRbjzUi1d71yM1/4/RhlYueza4SXmDsT09+uV1ZOtCvLt9cdQCooohqE6OXQsQRARZNAkuUpICAo2e9VFyrSQBQ/DlmouGHTEw3swDvBgNdpjJGkxT7FMi9xnpSz2qzorYBFI+3phZ5tp03QC+piuz0ByJpXCMxUhsP1SVv8heuxtOFqYLnRDWyI9GszKMPnEacBRZyV/HNzJ5/msPynLPlUdRzcWk+qUsu6Dsmjr9Na/6WWJGOxtGFAXVZQvgNCgekjAVX0sClfYDpoGhrGfVTUr7U5RA9Qq8Vl6r8jcawVcJnZHduu4Ktmw7Mcuo2PaR7vSBfw8SZWJdZsfrOqMPHOkx4= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BLAPR10MB4835.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(366004)(5660300002)(66476007)(66556008)(2616005)(1076003)(186003)(54906003)(103116003)(6506007)(36756003)(6512007)(6666004)(26005)(52116002)(316002)(8676002)(66946007)(83380400001)(6916009)(8936002)(7416002)(4326008)(508600001)(2906002)(38350700002)(38100700002)(86362001)(6486002)(14143004); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?Yd3u1McnjijFbCbkyuAXGjbnwMPvH+361PXfT1ULbz8xy8TTovvUOexdTnQ/?= =?us-ascii?Q?jwNw/auBTAGxkdNf3jjlgzf6bQYtEduv+2fnn9xisehN3WA9MUJsmB73bDfu?= =?us-ascii?Q?Qz28S1IXEj7/rT82W8Gj2JeEuZntj57uYQnhisA9Kv9kkWqrswi0CGP5HiKk?= =?us-ascii?Q?cbgwTo0b6RjQUp1KBxxSJHoW9daMJrQZ/yJM0hhXjnpZ+hGA4d34wPVOGiAF?= =?us-ascii?Q?J0bboBJShQP4Srrv6HAVya5zBRrnK39GJsTaFbgNgbuS/yYVpzEviTZkXbMr?= =?us-ascii?Q?1dU7XKSCs0/t4qrH+gDkjPGL5MJNdfgvR9k0fajSnuUYqq+ad0DUX1zF4chl?= =?us-ascii?Q?pDNdFsseW0RfKNfgmtgToGwqakMhCy3O/wtBTpoeMpi1rl/FIxZW0DaMo8xF?= =?us-ascii?Q?iHJ5OoAeKqKyn4xlSu+VFs8T+Vg6VAOF63/yd9xGEjWydNRyqiAsedKl5fBL?= =?us-ascii?Q?0Pt6kEne59L5dCVKsjhlr7/FwQTKQkPeujyaOrTtpoKV3bWWpeeOA4KuTvkT?= =?us-ascii?Q?KV8pTmVbYCl6AkhJ4sqtaRQLyihoiCenKDuzy5t1eW+NSqaqpL3RgXZiX2nz?= =?us-ascii?Q?NnfEzoKU2uK5U+Fy+d4XK3+gXbWowQcHT+3r1zYeka+O6dwQQ6rQBaZmX766?= =?us-ascii?Q?/ckla+JjrkbeOI7PP06sGO8Uy9SaD/Ux/tL2PeM6gR4mp+m1AET4Yw/zx5Jg?= =?us-ascii?Q?nJO76Sl2l7Jb5UNvWpDzqZBgKZPJYS8N/yskBcQT6g76NXq678BGqgJkzUdR?= =?us-ascii?Q?/h1YLDu1t0qvp9SNThfoIYMymxEAOxyPe2RxBypGE/ZGn+bSlc8sRv9G7W1v?= =?us-ascii?Q?EQ9zqDSWBMg5xzuaxXdyMc6bX1cyZ2jIGP8bEThkZzILm2Pc/Y+V7pSubI/o?= =?us-ascii?Q?8gwmUAvJDdp/DoMgcSw7KIq3zWegvu7ohT5aV/bG4g2JOkUIZiQOYeSttOza?= =?us-ascii?Q?ia/ZMKQ4SIxtRJay8VFK6AHm0ZdymQw4PxT1V3aIkHn0NT25UjeUGqQZ4GWz?= =?us-ascii?Q?REzm2WhhtvBtPnVha4CG0qaZdf7wIHkoDVBAtujMmBqYX9h36VEFDfZZipYj?= =?us-ascii?Q?jrwDzMsURq6S9Y7NiHaXTOISL70lDpHu/LpLTX492ZhrFGCOFPDc2ntIE31l?= =?us-ascii?Q?caxz9geSg81GGYBDWsGhYbDCs3ctlDTJKkT/ROFAvQu7GCaWe+YeyXCar7CW?= =?us-ascii?Q?PqDRUFDNaVKZEjElZETYbZqcsAPso/wv5rKaWaOVKToZcywxSl6/+vAZp0n/?= =?us-ascii?Q?214ZSfOKouOXfL//SSiiIbXnwT645Wk4Ixi/LyS/1WKfUv5LAWgycveKh0Zv?= =?us-ascii?Q?CuM3MVqsZEfEWclfO3VW4k24qvu8r7Hy/SFJkZV7iONiGulScQ8ldUyEwyRf?= =?us-ascii?Q?cGo5rkQpAkfX9sDvs52CZpFAjm4QhDvXt+KW6CrEAkL+t1hgwaP+6JfilXjY?= =?us-ascii?Q?4VcPhRIF3ehLeVGE3OhnN7VZTcziUuPjU1lfPQ99+XLqml4WwbRqktbiH4tb?= =?us-ascii?Q?nbuN4fL1szEVMs6GtlwBfl319OrWG/rkKkmdJaJaKMEmenvFp8MjJwlCGISC?= =?us-ascii?Q?LfBO1P9ic01K5VNWJnULhIYH+gg5aNUt66GuCGgIc1/LKwr/TN9pNR/lfvME?= =?us-ascii?Q?w5fEyzLG/kchUHOl8F+wmYbP7orGe58jMaBO6qiSCjlNx/LfJ0foffWGLv3l?= =?us-ascii?Q?D+BCRH3vLeEkjpr89sjCV+TbF2kszpJHbJAd9ccAOTGDlBrAdvJprdlL2Rpk?= =?us-ascii?Q?y/IknTxkwWkK6D6ErVwHcB8Ptll/NFs=3D?= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8497ee26-c7ab-4302-8d8f-08da295c12a0 X-MS-Exchange-CrossTenant-AuthSource: BLAPR10MB4835.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Apr 2022 21:14:25.5872 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: bd/lB2maCEsXBiVl2e8MCwrDsqyhjj8tNCy2e/Vn2dyj99ajCM0lV8nf1JN1sl6w2obyd4qF8AAehIjmf19bxtXRTR3hWnaa1EZFsbN/vuY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR10MB3260 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.486, 18.0.858 definitions=2022-04-28_04:2022-04-28, 2022-04-28 signatures=0 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 mlxlogscore=999 malwarescore=0 mlxscore=0 phishscore=0 bulkscore=0 adultscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2202240000 definitions=main-2204280125 X-Proofpoint-ORIG-GUID: BpLC7tB9_eGcGMSIQs_7ymksCOSorgmB X-Proofpoint-GUID: BpLC7tB9_eGcGMSIQs_7ymksCOSorgmB 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+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.165.32; envelope-from=joao.m.martins@oracle.com; helo=mx0a-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "John G . Johnson" , kvm@vger.kernel.org, "Michael S. Tsirkin" , Jason Wang , Peter Xu , Joao Martins , Eric Blake , Yi Liu , Juan Quintela , David Hildenbrand , Markus Armbruster , Nicolin Chen , Jason Gunthorpe , Kevin Tian , Richard Henderson , "Dr. David Alan Gilbert" , Eric Auger , Alex Williamson , Thanos Makatos , Eduardo Habkost , Yishai Hadas , Cornelia Huck , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.onmicrosoft.com) X-ZM-MESSAGEID: 1651180848560100001 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" IOMMU advertises Access/Dirty bits if the extended capability DMAR register reports it (ECAP, mnemonic ECAP.SSADS albeit it used to be known as SLADS before). The first stage table, though, has no bit for advertising Access/Dirty, unless referenced via a scalable-mode PASID Entry. Relevant Intel IOMMU SDM ref for first stage table "3.6.2 Accessed, Extended Accessed, and Dirty Flags" and second stage table "3.7.2 Accessed and Dirty Flags". To enable it we depend on scalable-mode for the second-stage table, so we limit use of dirty-bit to scalable-mode To use SSADS, we set a bit in the scalable-mode PASID Table entry, by setting bit 9 (SSADE). When we do so we require flushing the context/pasid-table caches and IOTLB much like AMD. Relevant SDM refs: "3.7.2 Accessed and Dirty Flags" "6.5.3.3 Guidance to Software for Invalidations, Table 23. Guidance to Software for Invalidations" To read out what's dirtied, same thing as past implementations is done. Dirty bit support is located in the same location (bit 9). The IOTLB caches some attributes when SSADE is enabled and dirty-ness information, so we also need to flush IOTLB to make sure IOMMU attempts to set the dirty bit again. Relevant manuals over the hardware translation is chapter 6 with some special mention to: "6.2.3.1 Scalable-Mode PASID-Table Entry Programming Considerations" "6.2.4 IOTLB" The first 12bits of the PTE are already cached via the SLPTE pointer, similar to how it is added in amd-iommu. Use also the previously added PASID entry cache in order to fetch whether Dirty bit was enabled or not in the SM second stage table. This is useful for covering and prototyping IOMMU support for access/dirty bits. Signed-off-by: Joao Martins --- hw/i386/intel_iommu.c | 85 ++++++++++++++++++++++++++++++---- hw/i386/intel_iommu_internal.h | 4 ++ hw/i386/trace-events | 2 + 3 files changed, 82 insertions(+), 9 deletions(-) diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c index 752940fa4c0e..e946f793a968 100644 --- a/hw/i386/intel_iommu.c +++ b/hw/i386/intel_iommu.c @@ -651,6 +651,21 @@ static uint64_t vtd_get_slpte(dma_addr_t base_addr, ui= nt32_t index) return slpte; } =20 +/* Get the content of a spte located in @base_addr[@index] */ +static uint64_t vtd_set_slpte(dma_addr_t base_addr, uint32_t index, + uint64_t slpte) +{ + + if (dma_memory_write(&address_space_memory, + base_addr + index * sizeof(slpte), &slpte, + sizeof(slpte), MEMTXATTRS_UNSPECIFIED)) { + slpte =3D (uint64_t)-1; + return slpte; + } + + return vtd_get_slpte(base_addr, index); +} + /* Given an iova and the level of paging structure, return the offset * of current level. */ @@ -720,6 +735,11 @@ static inline bool vtd_pe_present(VTDPASIDEntry *pe) return pe->val[0] & VTD_PASID_ENTRY_P; } =20 +static inline bool vtd_pe_slad_enabled(VTDPASIDEntry *pe) +{ + return pe->val[0] & VTD_SM_PASID_ENTRY_SLADE; +} + static int vtd_get_pe_in_pasid_leaf_table(IntelIOMMUState *s, uint32_t pasid, dma_addr_t addr, @@ -1026,6 +1046,33 @@ static VTDBus *vtd_find_as_from_bus_num(IntelIOMMUSt= ate *s, uint8_t bus_num) return NULL; } =20 +static inline bool vtd_ssad_update(IntelIOMMUState *s, uint16_t pe_flags, + uint64_t *slpte, bool is_write, + bool reads, bool writes) +{ + bool dirty, access =3D reads; + + if (!(pe_flags & VTD_SM_PASID_ENTRY_SLADE)) { + return false; + } + + dirty =3D access =3D false; + + if (is_write && writes && !(*slpte & VTD_SL_D)) { + *slpte |=3D VTD_SL_D; + trace_vtd_dirty_update(*slpte); + dirty =3D true; + } + + if (((!is_write && reads) || dirty) && !(*slpte & VTD_SL_A)) { + *slpte |=3D VTD_SL_A; + trace_vtd_access_update(*slpte); + access =3D true; + } + + return dirty || access; +} + /* Given the @iova, get relevant @slptep. @slpte_level will be the last le= vel * of the translation, can be used for deciding the size of large page. */ @@ -1039,6 +1086,7 @@ static int vtd_iova_to_slpte(IntelIOMMUState *s, VTDC= ontextEntry *ce, uint32_t offset; uint64_t slpte; uint64_t access_right_check; + uint16_t pe_flags; =20 if (!vtd_iova_range_check(s, iova, ce, aw_bits)) { error_report_once("%s: detected IOVA overflow (iova=3D0x%" PRIx64 = ")", @@ -1054,14 +1102,7 @@ static int vtd_iova_to_slpte(IntelIOMMUState *s, VTD= ContextEntry *ce, slpte =3D vtd_get_slpte(addr, offset); =20 if (slpte =3D=3D (uint64_t)-1) { - error_report_once("%s: detected read error on DMAR slpte " - "(iova=3D0x%" PRIx64 ")", __func__, iova); - if (level =3D=3D vtd_get_iova_level(s, ce)) { - /* Invalid programming of context-entry */ - return -VTD_FR_CONTEXT_ENTRY_INV; - } else { - return -VTD_FR_PAGING_ENTRY_INV; - } + goto inv_slpte; } *reads =3D (*reads) && (slpte & VTD_SL_R); *writes =3D (*writes) && (slpte & VTD_SL_W); @@ -1081,6 +1122,14 @@ static int vtd_iova_to_slpte(IntelIOMMUState *s, VTD= ContextEntry *ce, } =20 if (vtd_is_last_slpte(slpte, level)) { + pe_flags =3D vtd_sm_pasid_entry_flags(s, ce); + if (vtd_ssad_update(s, pe_flags, &slpte, is_write, + *reads, *writes)) { + slpte =3D vtd_set_slpte(addr, offset, slpte); + if (slpte =3D=3D (uint64_t)-1) { + goto inv_slpte; + } + } *slptep =3D slpte; *slpte_level =3D level; return 0; @@ -1088,6 +1137,16 @@ static int vtd_iova_to_slpte(IntelIOMMUState *s, VTD= ContextEntry *ce, addr =3D vtd_get_slpte_addr(slpte, aw_bits); level--; } + +inv_slpte: + error_report_once("%s: detected read error on DMAR slpte " + "(iova=3D0x%" PRIx64 ")", __func__, iova); + if (level =3D=3D vtd_get_iova_level(s, ce)) { + /* Invalid programming of context-entry */ + return -VTD_FR_CONTEXT_ENTRY_INV; + } else { + return -VTD_FR_PAGING_ENTRY_INV; + } } =20 typedef int (*vtd_page_walk_hook)(IOMMUTLBEvent *event, void *private); @@ -1742,6 +1801,13 @@ static bool vtd_do_iommu_translate(VTDAddressSpace *= vtd_as, PCIBus *bus, slpte =3D iotlb_entry->slpte; access_flags =3D iotlb_entry->access_flags; page_mask =3D iotlb_entry->mask; + if (vtd_ssad_update(s, iotlb_entry->sm_pe_flags, &slpte, is_write, + access_flags & IOMMU_RO, access_flags & IOMMU_= WO)) { + uint32_t offset; + + offset =3D vtd_iova_level_offset(addr, vtd_get_iova_level(= s, &ce)); + vtd_set_slpte(addr, offset, slpte); + } goto out; } =20 @@ -3693,7 +3759,8 @@ static void vtd_init(IntelIOMMUState *s) =20 /* TODO: read cap/ecap from host to decide which cap to be exposed. */ if (s->scalable_mode) { - s->ecap |=3D VTD_ECAP_SMTS | VTD_ECAP_SRS | VTD_ECAP_SLTS; + s->ecap |=3D VTD_ECAP_SMTS | VTD_ECAP_SRS | VTD_ECAP_SLTS | + VTD_ECAP_SLADS; } =20 if (s->snoop_control) { diff --git a/hw/i386/intel_iommu_internal.h b/hw/i386/intel_iommu_internal.h index 1ff13b40f9bb..c00f6e7b4a72 100644 --- a/hw/i386/intel_iommu_internal.h +++ b/hw/i386/intel_iommu_internal.h @@ -192,6 +192,7 @@ #define VTD_ECAP_MHMV (15ULL << 20) #define VTD_ECAP_SRS (1ULL << 31) #define VTD_ECAP_SMTS (1ULL << 43) +#define VTD_ECAP_SLADS (1ULL << 45) #define VTD_ECAP_SLTS (1ULL << 46) =20 /* CAP_REG */ @@ -492,6 +493,7 @@ typedef struct VTDRootEntry VTDRootEntry; =20 #define VTD_SM_PASID_ENTRY_AW 7ULL /* Adjusted guest-address-widt= h */ #define VTD_SM_PASID_ENTRY_DID(val) ((val) & VTD_DOMAIN_ID_MASK) +#define VTD_SM_PASID_ENTRY_SLADE (1ULL << 9) =20 /* Second Level Page Translation Pointer*/ #define VTD_SM_PASID_ENTRY_SLPTPTR (~0xfffULL) @@ -515,5 +517,7 @@ typedef struct VTDRootEntry VTDRootEntry; #define VTD_SL_PT_BASE_ADDR_MASK(aw) (~(VTD_PAGE_SIZE - 1) & VTD_HAW_MASK(= aw)) #define VTD_SL_IGN_COM 0xbff0000000000000ULL #define VTD_SL_TM (1ULL << 62) +#define VTD_SL_A (1ULL << 8) +#define VTD_SL_D (1ULL << 9) =20 #endif diff --git a/hw/i386/trace-events b/hw/i386/trace-events index eb5f075873cd..e4122ee8a999 100644 --- a/hw/i386/trace-events +++ b/hw/i386/trace-events @@ -66,6 +66,8 @@ vtd_frr_new(int index, uint64_t hi, uint64_t lo) "index %= d high 0x%"PRIx64" low vtd_warn_invalid_qi_tail(uint16_t tail) "tail 0x%"PRIx16 vtd_warn_ir_vector(uint16_t sid, int index, int vec, int target) "sid 0x%"= PRIx16" index %d vec %d (should be: %d)" vtd_warn_ir_trigger(uint16_t sid, int index, int trig, int target) "sid 0x= %"PRIx16" index %d trigger %d (should be: %d)" +vtd_access_update(uint64_t slpte) "slpte 0x%"PRIx64 +vtd_dirty_update(uint64_t slpte) "slpte 0x%"PRIx64 =20 # amd_iommu.c amdvi_evntlog_fail(uint64_t addr, uint32_t head) "error: fail to write at = addr 0x%"PRIx64" + offset 0x%"PRIx32 --=20 2.17.2 From nobody Mon May 6 05:12:48 2024 Delivered-To: importer2@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+importer2=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=oracle.com); dmarc=fail(p=none dis=none) header.from=oracle.com ARC-Seal: i=2; a=rsa-sha256; t=1651180682; cv=pass; d=zohomail.com; s=zohoarc; b=DV2GcuJzr+9rIedI84eyWuLz+2+aCioIdbxsy3fzkR02oNh9J084H/3+j8TgdgvNWSO7tKVotrufhQwSphnbC5/o/7Y14bFh+8UPg2fnoB/zaicUA3J6XY2vbQB1vx+yD3e+ZS3kAyIO6GAhx41OeI8wLYeedl9HC9zA8R/dsTE= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651180682; h=Content-Type: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=7sErSIk5MNW6OTKIpyOe/Zu4jBCiLDcLFKrwJAmQq5M=; b=RMlRiWlsyOf8LqLy4bcOQVvxbSzXohWUCN2ajg+xFoJ29Rx37wS1cfpYTC2d2M9K2U8NgciQKx9VkSbqatr75mInpCVO0xlZBFxiMVmEZ1NL0YZfu2H4ifEO/EJyv4a+LwYfmOdukna3ldAWXr1g31v1UTd1yAzjMjHiwFoptKw= 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+importer2=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=oracle.com); dmarc=fail header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1651180682122724.7192912350457; Thu, 28 Apr 2022 14:18:02 -0700 (PDT) Received: from localhost ([::1]:41206 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nkBWT-0004EJ-1x for importer2@patchew.org; Thu, 28 Apr 2022 17:18:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43498) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nkBTH-0000h4-LO for qemu-devel@nongnu.org; Thu, 28 Apr 2022 17:14:44 -0400 Received: from mx0a-00069f02.pphosted.com ([205.220.165.32]:65518) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nkBTF-0005t4-Oc for qemu-devel@nongnu.org; Thu, 28 Apr 2022 17:14:43 -0400 Received: from pps.filterd (m0246629.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 23SIfu4r032176; Thu, 28 Apr 2022 21:14:37 GMT Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3fmb104nkd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 28 Apr 2022 21:14:36 +0000 Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.16.1.2/8.16.1.2) with SMTP id 23SL6cf3028671; Thu, 28 Apr 2022 21:14:34 GMT Received: from nam11-bn8-obe.outbound.protection.outlook.com (mail-bn8nam11lp2174.outbound.protection.outlook.com [104.47.58.174]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com with ESMTP id 3fp5ypebsb-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 28 Apr 2022 21:14:34 +0000 Received: from BLAPR10MB4835.namprd10.prod.outlook.com (2603:10b6:208:331::11) by DM6PR10MB3260.namprd10.prod.outlook.com (2603:10b6:5:1ab::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5186.15; Thu, 28 Apr 2022 21:14:31 +0000 Received: from BLAPR10MB4835.namprd10.prod.outlook.com ([fe80::b9e5:d1b6:b4be:f9d]) by BLAPR10MB4835.namprd10.prod.outlook.com ([fe80::b9e5:d1b6:b4be:f9d%5]) with mapi id 15.20.5206.013; Thu, 28 Apr 2022 21:14:31 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : content-type : mime-version; s=corp-2021-07-09; bh=7sErSIk5MNW6OTKIpyOe/Zu4jBCiLDcLFKrwJAmQq5M=; b=gUqBaUEw4bA16UlZIBKXzNqy5ZUd5ZWWhdu5Z0wY1KDKWrCdfSvY0YdlhBH88OcI5Oab Bjx/bY4g7kgy+LQiXoNaOmBtiA0eOFnQ5AAPmnVS5wQv7+POkVBMRzIjD6HGDzxbQzaw EYTaTtOYo1JJnzWMV+rTWKlWRr0SlGOn2ZWYMbKgb/BbJNpBOFL/bWXlcWrBOOmqTW/t pSqoCywfUhKUt1tuQe+vFwzVpsLxZPXwAiGPJLt6ag1pCqWgIGVsVwI167Pj52lzYCr5 4A7/K0qxALfdQW9xToWDIb2z+4FC3zTQ9RLmzdnCZ0iCdV86qSX1ohFp0OD5kPN7azTr Ag== ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=G/HHCkqrH1Rafi5SGVndcqDkdiIkj5lNebXdOO3iZikSdzEEJ/ABEcUwRlhuMhZ7gJrv0YtfwZK/occ7X/BaRzo4yWSgah91c6K4K9oNK+2+nCFxFXLqZ/uH59WnuE1XCRTIfpJDdy+sh/Ti80ZAVX6eA5c5OuePah8GppCPKebg10bq+Dn5Svmmrd/7yFD8v/yXUTT2BG34A9Je4ZkKFZOx+KjhUU8fZQmpM3mL5htX46C//smnToArFJrE5hZeAhHLj3IrqS6mUHyZYvA7bKVpNBw3cOn6lTth7Nia9fR2lVhysnL1OF2+LjppdIMZ8oG6/XQHXy91/JdXU8aNbQ== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=7sErSIk5MNW6OTKIpyOe/Zu4jBCiLDcLFKrwJAmQq5M=; b=jU+oZvFi4sHwdhJ1DdDLX95wh8auNCuc6LgTaQnExhyBahVtopAbdqXIMMh0qycS4SDE1UNOWIl8+jwWhPlnjzdSVAPgsbZhCyKATjvJKlnrYbgV+pmRpwiz+OU4T0UNRlRbSBxNgFxRH+H1Cb8anB1MFujmicH4cSpWvO8KV0pAUPu3pcnOxTrdU2xVscJsh6uHeC38hRwDIMqPh2XNN2Hn1YS33wA4Rp9hVjkKk3x3mXA07kQ9YhTP9GQslGhLciaVHsBJls13XDlxhd9AzwHzQzrnQZaV9xewzUP0Zb0wibKGBQjzNmZRBVVpLM3gc655ZEkhtK/oORQVUG1cRQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=7sErSIk5MNW6OTKIpyOe/Zu4jBCiLDcLFKrwJAmQq5M=; b=KnOH+9I9ycs44datw4u6FAy3wFMWv8tr8staNvOrfK9vyU8gqdknqE0PBxAPtugprZLavYDq38KjfeqRL+3u/a9x7up34ymdwFkJIhkdaoS8t2gHxNoSwcTe5MlmQVQXDP9Inm4Rk9Roedn0md/jxjRKUnXUci33GvIblRkcC78= From: Joao Martins To: qemu-devel@nongnu.org Subject: [PATCH RFC 05/10] linux-headers: import iommufd.h hwpt extensions Date: Thu, 28 Apr 2022 22:13:46 +0100 Message-Id: <20220428211351.3897-6-joao.m.martins@oracle.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20220428211351.3897-1-joao.m.martins@oracle.com> References: <20220428211351.3897-1-joao.m.martins@oracle.com> X-ClientProxiedBy: LO2P265CA0297.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:a5::21) To BLAPR10MB4835.namprd10.prod.outlook.com (2603:10b6:208:331::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 31a4f237-358d-4c6d-8002-08da295c15eb X-MS-TrafficTypeDiagnostic: DM6PR10MB3260:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: OdRa1z9WmyYwisjT59DCM0B1SQ8fB1qJk1UwfgSmqO5G+ObdZ7QtCdAgh9iza/+IHhxiSvctCU3p7RgoiRVAld3DtopqMnFDx/WLDkPYOHspPCZRJsBsZjhOsyFN/zhqRksb5YQWIz944WFpHp9A8Zq6ySoh4qNMXtZ30Hv0qF2J7Pw26n6IgxqYlKcYN7SG1oWYoCyMu0VwKgrZpOozS93JF99/F4EwdYgyYEUQncwB5rA5Xbzk1gg8Xozz6bTH9lAm3k5lKzV+xDB/JYGFHicNzLzj0VcoAO3kPSrmKefZnekTrPLJ3ap2Hnv8++BbrNcTxXt+7jR/PRqgU3Dgpl8axGKG70wFsAcF/M/K3W/zTwMODwK9GM94AoSPN1i4UkLIe47UpCY/G8wGQUKHO/BPkHsf/Hd56LVQlRNiZnMxm4EwZwKXsF7y37zcweJAMcFwMcK5PUIagUCgovYEjyMcaLFAavxYuSv5kAEvTyNRU3UooBDReMFLZ0jQNkSV3EyJWr8W0tr1OUzHimC6opqKXgumcLiit2P5MUNvAOx1mZkqfSitZ4nfv1Ti1AfDVd1/DEN3xZ9VzEJLRF3zGv2E3Isg7thevoaC2hyRfYOsGrieHp78L8rEhKMIaajS2F+IeGpYCItpZizAbivF/V6G7evbiqiJ1lndyRpAoDydfSTOJDjGjqzdvSaQdgYq X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BLAPR10MB4835.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(366004)(5660300002)(66476007)(66556008)(2616005)(1076003)(186003)(54906003)(103116003)(6506007)(36756003)(6512007)(6666004)(26005)(52116002)(316002)(8676002)(66946007)(83380400001)(6916009)(8936002)(7416002)(4326008)(508600001)(2906002)(38350700002)(38100700002)(86362001)(6486002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?SsfeVQGAM2B5YO2swzPRW8dUvwQ3VT6Mcwgk+cKJXIay4GJRj9C7IC1j3M1t?= =?us-ascii?Q?HyMY4QhXHww0qCBVa/dfCexIU+rXEacgPqUVmO2nnqU9Vd0LJ7lCUS32MSvF?= =?us-ascii?Q?XWsDpAeDUbzT7TCJwYnoOa/aQQdA6KgttnW9/sSgQUaN+g2ioQuLkAEN984O?= =?us-ascii?Q?rdIjBPiTSmGCO9X6uJyCWrGWnszXt1XATMt0KnOz7GP5DXnYCmq0bmUpzbnv?= =?us-ascii?Q?jXpzG8mz3tO6CsIBYdy48m2PuvlDOUNKpVMXMgLPxtS9C2A8BpWdbI461+vj?= =?us-ascii?Q?Sbzdv/MdjgZzlalhgQpigNRFA8t4qKCjQEyfVLIj3mN35wWKiUrk2ZvAAJaj?= =?us-ascii?Q?IUvJCbo8MrZB6ZENjg4F10PtsD7qYXSG3WJutzE86OS/hK+G7dSAUWqFDLNI?= =?us-ascii?Q?XeBqeYuVU6lDy3XN2RVJF6bL+/FFPg41fO9ZcI6qPMh5bbm/7oHrM3gBrhuQ?= =?us-ascii?Q?htZW5v68hiu/Wx+kuRFeBaKsYi4MX++a+HeyEKhz4Qh8ROejgYoLffRKIObv?= =?us-ascii?Q?NI4n2bh/95XqcllrqCVdV3FKku9XFpgbyBjwg8dRO7DoqOwXNtwkqYrip8tR?= =?us-ascii?Q?kzhMQpf6YadQAH1xOhBFc4OLoZ58B4MFurp9Ih67IA+9xeZEb4/QeBvVQQCf?= =?us-ascii?Q?hU4+0FQPKXV+sGiVITpqNEv+sm36ygGX+zpbvt806se1JJdvA6WPoPR6kfvl?= =?us-ascii?Q?sABv6gMOYoB3PsZkf3F93VfO32p+GNECYo04COa2VT91gtHIN92jk7WEvA+R?= =?us-ascii?Q?b4pXGxJ5soBcNQmeDL6dcisbq73JF41WYBBSmwSWYMbaLLk13Q5EZ5Q0lj/B?= =?us-ascii?Q?9CnXH2nCHgJbULBrpVieuikGdD1O/tsoy0qj7Ld6dlmQa9Fo44dJKPmlK6f8?= =?us-ascii?Q?9IKosMSgeZHA70wnnsUUVBdzLHXDGoryafkTJKcDMnzazmhXCHMHthoko+/3?= =?us-ascii?Q?oq8zwFmwCzKRExsi+nH+QUG3j4Cyffrj2wT0qQHj1vWP4Xeo+vaFZrvhEgFD?= =?us-ascii?Q?NXc3u4IT7iKlQR67FmlpboVwq0/qUpZrRRQCx1jpc4g5oFXEZDe2D5d1eWIj?= =?us-ascii?Q?HaahxYRrfWC95jYWHj/vpGoAz8r4s7HcyiovsajNYmqV/Iqcrs+U8aunRiNx?= =?us-ascii?Q?Zh7B0A84b9Q5F7hoHPr50Ob5JWUPmJqqrw/mVWJz0R6WcbM4hf72I9hN7CN2?= =?us-ascii?Q?uRVGiQ2gz+KkLiRdwxn2HZ+t8wzQdT4c+qTBDSVCfjGb706wyRlZcUCNaAKn?= =?us-ascii?Q?s+gB+3pxpHPgXmZopQmlE3ZNx0wi5i2G9INIZROu3NXkEWL5ZzHLXY8EMcbV?= =?us-ascii?Q?SGw4GeARAkSc1Ym4JO2JyCL9TnN90/KYvANf/E9IpaHcwhcf1gbKe1cwIs/t?= =?us-ascii?Q?ofbcm79zqE82uG8up/fd0Czg8fFF4lbctIc9MQHHXa9Vurar03SpGyGm21rz?= =?us-ascii?Q?/JDSiROTtVlw32UEum85cnCU8KAsPLr3YnU10eJBgD66q4B17ErH9jn9ke//?= =?us-ascii?Q?9/YyUM7uH7R9jC0G6M2yikEXbpZvDPIp7oBJOwiewSnFsLpmJt3YE4ruwSy5?= =?us-ascii?Q?AFHjOv9C7DEYdvaqtbwyohEOX5U9pvUx2YsrTOtY1AXG6TFLozZtxz6utRyO?= =?us-ascii?Q?Qu9f6Q1ifM1SU+H7A8XgCca8Y5ENoD7FiMv6YU5IrHBFs3/aMS8a67iMjrqE?= =?us-ascii?Q?jup3vGOzM/5B95QwgUeNMWwdWL2eLMifK5tDXVX0lRD9BdVB/DfOQlBYSHLu?= =?us-ascii?Q?Vnb2/3giPwm8LdmQ+HpBv2npqSmuPWc=3D?= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 31a4f237-358d-4c6d-8002-08da295c15eb X-MS-Exchange-CrossTenant-AuthSource: BLAPR10MB4835.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Apr 2022 21:14:31.6112 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: dE/OngGZBhBQlhTEpN225+DO6GmoCTvn8+v0hfpe/nupcPlImPmW19ct+JPYC5yyy7UTZ6hlxF/sesje1z12js7ftqblsjFNECq7p+8A22o= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR10MB3260 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.486, 18.0.858 definitions=2022-04-28_04:2022-04-28, 2022-04-28 signatures=0 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 mlxlogscore=956 mlxscore=0 suspectscore=0 malwarescore=0 spamscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2202240000 definitions=main-2204280125 X-Proofpoint-ORIG-GUID: 5gGGtLXPbu4L_FdUBN9HA9wVVA6egXeE X-Proofpoint-GUID: 5gGGtLXPbu4L_FdUBN9HA9wVVA6egXeE 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+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.165.32; envelope-from=joao.m.martins@oracle.com; helo=mx0a-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "John G . Johnson" , kvm@vger.kernel.org, "Michael S. Tsirkin" , Jason Wang , Peter Xu , Joao Martins , Eric Blake , Yi Liu , Juan Quintela , David Hildenbrand , Markus Armbruster , Nicolin Chen , Jason Gunthorpe , Kevin Tian , Richard Henderson , "Dr. David Alan Gilbert" , Eric Auger , Alex Williamson , Thanos Makatos , Eduardo Habkost , Yishai Hadas , Cornelia Huck , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.onmicrosoft.com) X-ZM-MESSAGEID: 1651180684096100001 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Generated from `scripts/update-linux-headers` from github.com:jpemartins/linux:iommufd Signed-off-by: Joao Martins --- linux-headers/linux/iommufd.h | 78 +++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/linux-headers/linux/iommufd.h b/linux-headers/linux/iommufd.h index 6c3cd9e259e2..e3c981f81e43 100644 --- a/linux-headers/linux/iommufd.h +++ b/linux-headers/linux/iommufd.h @@ -43,6 +43,9 @@ enum { IOMMUFD_CMD_IOAS_COPY, IOMMUFD_CMD_IOAS_UNMAP, IOMMUFD_CMD_VFIO_IOAS, + IOMMUFD_CMD_HWPT_SET_DIRTY, + IOMMUFD_CMD_HWPT_GET_DIRTY_IOVA, + IOMMUFD_CMD_IOAS_UNMAP_DIRTY, }; =20 /** @@ -220,4 +223,79 @@ struct iommu_vfio_ioas { __u16 __reserved; }; #define IOMMU_VFIO_IOAS _IO(IOMMUFD_TYPE, IOMMUFD_CMD_VFIO_IOAS) + +/** + * enum iommufd_set_dirty_flags - Flags for steering dirty tracking + * @IOMMU_DIRTY_TRACKING_DISABLED: Disables dirty tracking + * @IOMMU_DIRTY_TRACKING_ENABLED: Enables dirty tracking + */ +enum iommufd_set_dirty_flags { + IOMMU_DIRTY_TRACKING_DISABLED =3D 0, + IOMMU_DIRTY_TRACKING_ENABLED =3D 1 << 0, +}; + +/** + * struct iommu_hwpt_set_dirty - ioctl(IOMMU_HWPT_SET_DIRTY) + * @size: sizeof(struct iommu_hwpt_set_dirty) + * @flags: Flags to control dirty tracking status. + * @hwpt_id: HW pagetable ID that represents the IOMMU domain. + * + * Toggle dirty tracking on an HW pagetable. + */ +struct iommu_hwpt_set_dirty { + __u32 size; + __u32 flags; + __u32 hwpt_id; + __u32 __reserved; +}; +#define IOMMU_HWPT_SET_DIRTY _IO(IOMMUFD_TYPE, IOMMUFD_CMD_HWPT_SET_DIRTY) + +/** + * struct iommufd_dirty_bitmap - Dirty IOVA tracking bitmap + * @iova: base IOVA of the bitmap + * @length: IOVA size + * @page_size: page size granularity of each bit in the bitmap + * @data: bitmap where to set the dirty bits. The bitmap bits each + * represent a page_size which you deviate from an arbitrary iova. + * Checking a given IOVA is dirty: + * + * data[(iova / page_size) / 64] & (1ULL << (iova % 64)) + */ +struct iommufd_dirty_data { + __aligned_u64 iova; + __aligned_u64 length; + __aligned_u64 page_size; + __aligned_u64 *data; +}; + +/** + * struct iommu_hwpt_get_dirty_iova - ioctl(IOMMU_HWPT_GET_DIRTY_IOVA) + * @size: sizeof(struct iommu_hwpt_get_dirty_iova) + * @bitmap: Bitmap of the range of IOVA to read out + */ +struct iommu_hwpt_get_dirty_iova { + __u32 size; + __u32 hwpt_id; + struct iommufd_dirty_data bitmap; +}; +#define IOMMU_HWPT_GET_DIRTY_IOVA _IO(IOMMUFD_TYPE, IOMMUFD_CMD_HWPT_GET_D= IRTY_IOVA) + +/** + * struct iommu_hwpt_unmap - ioctl(IOMMU_HWPT_UNMAP_DIRTY) + * @size: sizeof(struct iommu_hwpt_unmap_dirty) + * @ioas_id: IOAS ID to unmap the mapping of + * @data: Dirty data of the range of IOVA to unmap + * + * Unmap an IOVA range and return a bitmap of the dirty bits. + * The iova/length must exactly match a range + * used with IOMMU_IOAS_PAGETABLE_MAP, or be the values 0 & U64_MAX. + * In the latter case all IOVAs will be unmaped. + */ +struct iommu_ioas_unmap_dirty { + __u32 size; + __u32 ioas_id; + struct iommufd_dirty_data bitmap; +}; +#define IOMMU_IOAS_UNMAP_DIRTY _IO(IOMMUFD_TYPE, IOMMUFD_CMD_IOAS_UNMAP_DI= RTY) + #endif --=20 2.17.2 From nobody Mon May 6 05:12:48 2024 Delivered-To: importer2@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+importer2=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=oracle.com); dmarc=fail(p=none dis=none) header.from=oracle.com ARC-Seal: i=2; a=rsa-sha256; t=1651181029; cv=pass; d=zohomail.com; s=zohoarc; b=fYE8PLQaYYHUx6TwL8Nh8nCpXG6oHinJFyd3w7uSgR1ehrEbusEJ4eqZd0Nn/Ki9IIpDVcMv/OSeY/2UlexMmedYPNuGRgkZgdAFVEKGZtNbuQ/VtBH+VswXipMb+9QKuF2v+dbKguca5N+p5L/CZTH2zj4o16GeMVdjuzDS1zA= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651181029; h=Content-Type: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=txCHzuOEOW2KsobJEQMBWnCO0cAvkwT+E9R/ZoKOBZI=; b=V3BDoKfz+b+ZVNOwZCJzVeFCp2/Sbx0bk82tl4Ze8/uq16sI7WRZntSIfCBbw/Td9S79+/72qNQmCohGR87DRCGemHYDwEDD6H2UUr2ndEE199Pk55Ia/oGNzEAddZ4U5zk8OdhVkXOnhtfrApDxAc/zVq59mFPLaSCLFQBj/ow= 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+importer2=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=oracle.com); dmarc=fail header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1651181029470600.5724695223623; Thu, 28 Apr 2022 14:23:49 -0700 (PDT) Received: from localhost ([::1]:53336 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nkBc4-0004Fi-AY for importer2@patchew.org; Thu, 28 Apr 2022 17:23:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43592) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nkBTW-00015O-ET for qemu-devel@nongnu.org; Thu, 28 Apr 2022 17:14:58 -0400 Received: from mx0a-00069f02.pphosted.com ([205.220.165.32]:26408) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nkBTT-0005tx-W5 for qemu-devel@nongnu.org; Thu, 28 Apr 2022 17:14:58 -0400 Received: from pps.filterd (m0246627.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 23SJYOGQ015530; Thu, 28 Apr 2022 21:14:43 GMT Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3fmb9aw63m-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 28 Apr 2022 21:14:41 +0000 Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.16.1.2/8.16.1.2) with SMTP id 23SL6cY7028682; Thu, 28 Apr 2022 21:14:40 GMT Received: from nam11-bn8-obe.outbound.protection.outlook.com (mail-bn8nam11lp2176.outbound.protection.outlook.com [104.47.58.176]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com with ESMTP id 3fp5ypebtx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 28 Apr 2022 21:14:40 +0000 Received: from BLAPR10MB4835.namprd10.prod.outlook.com (2603:10b6:208:331::11) by DM6PR10MB3260.namprd10.prod.outlook.com (2603:10b6:5:1ab::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5186.15; Thu, 28 Apr 2022 21:14:35 +0000 Received: from BLAPR10MB4835.namprd10.prod.outlook.com ([fe80::b9e5:d1b6:b4be:f9d]) by BLAPR10MB4835.namprd10.prod.outlook.com ([fe80::b9e5:d1b6:b4be:f9d%5]) with mapi id 15.20.5206.013; Thu, 28 Apr 2022 21:14:35 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : content-type : mime-version; s=corp-2021-07-09; bh=txCHzuOEOW2KsobJEQMBWnCO0cAvkwT+E9R/ZoKOBZI=; b=VwwrzdyttHK3uf8LqpyMs2ahpIrFiEzYfFdfm/gmQg+9yC5oIDYhnE1G1mPzbW+z44Un IpRSTbdvbb8wrF4NTcfuETAVoGcMH5ZwEzOr2xyOc3p4bQTkUHTLxMPJzKFJsfX5gllP HGIrI+yDmbFLNhdr278rjo5WIjdNwT+uLdkI+fsN1zpFye0XmQn5nJpE6ZNP52v9kYx3 R1JctZHMEB9F2lbr4uTLOWsXwc0PdnysVnrNeSWCQtoiq/kDNQ6mw42Aok1omwZXmMFH iMr6t0U4tFn3SdMNJSrg6t1T52q4IyWcn/zhCYswIervzxPqvl64hOH2GFWNi5BAuOdf LA== ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=AAoux9//BsVA4miVmcjDOCgcVJLv4OI7sUTXp5yhF+wD9XClLdQQlBVCPeW5SWx9Es1NX/W39hdWNcj2loBlPQ/AXSw8w6e7IRxeJPX2GvPJdWG7t+nL83wHM1XG5I5rs+2cNdfUhVxB7RhB6d+YcMVVV0RjnFjSgqbXpWnBCLle6d1MvBcwA3vGhoVSNJli+2/FEPpBjh9L9tK04Jkxh4w1+XGpBtT6giFOxnNyCVthoGDxvxJgIzYbqg4vYCL+zHRDvBbsdX5Y9QLNZEBkgVu17mU7pNnellMvxnJC1eoRfX0l4fSszUlXx1unZtY5mCQdS/TeT8EPBBpA/KRmhw== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=txCHzuOEOW2KsobJEQMBWnCO0cAvkwT+E9R/ZoKOBZI=; b=lWTkWSjNllsHaNICfaHfBnFjn5AR9nIXYtP10nFnLrMzQFF1CJE9954wmbpiKjxvSxc3t7G9fE0A1XE8eNXj8Y2UDSmE5bVScooFayQDsXQDC7kIUc2NjVP4Wo+RYPmsd4KXef3vX3OQClkBuHlEP4VaeKokFXBcoDbKvdYxHfxipYIVWqWEqb2iUtIuYCmyWW69mhDR6tl8A3vLjtRXLchi+Tn2KmHu95TiBIgyOMIFttmiDCodSx8CbTNkN+ElHh/Dc9phR79gdT8wS5toChFCnU7aiLd04TnIdr42zW45wwnRlI0XC1QvFzVvyoH793lVW0uJHKFnEYICvCFSYw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=txCHzuOEOW2KsobJEQMBWnCO0cAvkwT+E9R/ZoKOBZI=; b=mQK5YmQ6q0blNLUJE0SAJ8iHDat62qaQBQ6CMse4gP3XvtIjouvEaX+LKeYv/7US4Q8vb2Vjc5Q+RTkcZ/ZGCMLqd5QBIWvv8CrMYzw0GaAQGMDKFPt0eHd40BKAgEWB6UpiaXOJ/IyP1dCePnUy4EJgqPSFOtLFPIsFC7glTwc= From: Joao Martins To: qemu-devel@nongnu.org Subject: [PATCH RFC 06/10] vfio/iommufd: Add HWPT_SET_DIRTY support Date: Thu, 28 Apr 2022 22:13:47 +0100 Message-Id: <20220428211351.3897-7-joao.m.martins@oracle.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20220428211351.3897-1-joao.m.martins@oracle.com> References: <20220428211351.3897-1-joao.m.martins@oracle.com> X-ClientProxiedBy: LO2P265CA0297.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:a5::21) To BLAPR10MB4835.namprd10.prod.outlook.com (2603:10b6:208:331::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ed741271-f689-461f-8ca8-08da295c189f X-MS-TrafficTypeDiagnostic: DM6PR10MB3260:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: sGTNojx8FBtppPqKUagGRp/6tjfRgE1cvwxO29J6wlRPbJ31DGCr+JUKI905/rCCcolDSqPtvEHZyiPGIQBBx5g/REIXXXr3M+SePQt9g1RfVy0tasICvgQzksX4qwGXWS47IL1EXnQ+DlORfiRjCOszFFtyq/n9/Rp2+VUgL395xc9/HmUFeek745qX7e8nT8GvGPsRWo0hdlNP2cgDIb72naj1q3QD/OoZce/KF7T6AUH/oow3/gpN3lSMh/QgRpLGub5SSygbbUpNa8jwCyLJIfV8iGfK2rek6dA8DYjedOT+pDroJ0BJmCs+gO77dvVWpNr+f8aef7fX48tmcmn4dBnz8ICPfCc/3NcuCduklF26B8+luO2i7r3qlUEIyL+wcpl9XzErlDNJClv8e70vM+vStZakd0KrP5Ke+YIyFd2JdSynk2qT8Flim6to+pKDLPzo5qE7wAgaqki6WpqHpHXLjqN2Gw1v5d2aGI0SoVseEOIqQ7jlqlIalftCay0QRgYD5GeiR2AGMZAmCDJrO1bOTje+McTWbqAgZpDN4plungHP9L9z3SUcDOQlIylbhgZGJuN/kHdbOheYGKN8HiBvQZhXSVsqfHakGPwSjL/rMyKEQ7WPjW8Sbu7wJme5ABDpt5GOCmSLmIjIgHT1V5sCnmZlXgh/xM8avTn+69Qv44yoOJKi6w4uxQGH18t20D41VgaZvn0KVqO24efmwjXOYk96C+l1OUtHzXM= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BLAPR10MB4835.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(366004)(5660300002)(66476007)(66556008)(2616005)(1076003)(186003)(54906003)(103116003)(6506007)(36756003)(6512007)(6666004)(26005)(52116002)(316002)(8676002)(66946007)(83380400001)(6916009)(8936002)(7416002)(4326008)(508600001)(2906002)(38350700002)(38100700002)(86362001)(6486002)(14143004); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?tq2c3Yi0YiPJEgcRO1KgJexBITh6Dvs6mKWoZMVqWZUjpJrdMHgtFThRQ1u8?= =?us-ascii?Q?XbgBic1TcXAbRqxxiuwJ4Bj9pxmvsAWKSD+jwE/hQLgsfhq9CEZSfFsBoEvw?= =?us-ascii?Q?InrsfgbxYvNXAhPtcC1xek9EHB+wcsrp6Oe/0WMZvk4/ang4p+UoxV5can8H?= =?us-ascii?Q?IndbS0yiafI6ZmEbZOK3pdHVd4qY6+xNrlgw+dk2sskFfIj0mWpaffg+Nm4p?= =?us-ascii?Q?4zJ4JY7odsaWHElj6OzMhMXBAg/diZ6j6C6lXjBAdrw8ccHoeRuU13lqo136?= =?us-ascii?Q?A1pmoQLVJ8ReDGvhM4yKgu8wyw3lctWFt+KnqlSezqoR6pYAey28Qmebfb0Y?= =?us-ascii?Q?nJkTjytivqO7PHQy4fTbMOX3RA6SWHOPiOrfaIziGxpLcWGrOZu/zsbLURUO?= =?us-ascii?Q?hlfixGF6BtnSq5bbyAMXTPdxTgCKTBBfQImC2YTMPlN1W3QunedKLYbIbSVg?= =?us-ascii?Q?KNsTjWebFvw1kfd7vT5/u3Ddz++19M2Z3w46Z1Mq2j6yMja2HBfKTvW7rnCQ?= =?us-ascii?Q?OstchE1Kng+L9qDFIi9zy+HYTme++wvspyQLh7pqkyaL8wF0tDsqYYc4UgVq?= =?us-ascii?Q?+CwYHkWtiM1gzqZSsTt2zfdu4o1EwAuMYE7VoEekdOEPI12f1vhmW1pLNo4O?= =?us-ascii?Q?ld78JzI8oehdBHcMkNjEJwxq7HLGJz7jXnQspyaIjCccidpDyCswI0fu/vxI?= =?us-ascii?Q?3+K9uo9CRx555UaQKK8MfD4Z33l0ytNYFh8rqEypoyVbVeeMN5w1ntG2BlbA?= =?us-ascii?Q?cj25yTMQn77gRkLqwiIHsviUHmwuiPmiV4Vtg80nNT6dIDmI90TdRg1BWlZt?= =?us-ascii?Q?qM6pWYNREthFCsE7JxDrXYk8JiF5N16kXRnCfpjgLIrdw31VrdTSBuG1bPjt?= =?us-ascii?Q?fIAJCWylg8Rp6wPkP4io2pLbrV+QmeT1jQ1OU9/aAEm442vZunALgTOOkrRK?= =?us-ascii?Q?f0xt6y05dzYQSvexKr4EmzwqRn1S9WbxIaXH6d7ZAwxSbZlrDqFpVtGpKVvZ?= =?us-ascii?Q?2QW37BvwMoBwsq/KRXs8IUXplE2pq1scwUgFnnWOLJJ92ycBwQxHt5hWla9J?= =?us-ascii?Q?v5p2peJ8NsjS0UWXT6Psf/1YS+qVmxgxxgz6yiY0R165dvsp1f8uUjy9R95V?= =?us-ascii?Q?wtkP1MAN8r1QOLO7HsKc7CfSGFfqDrR6MgusI60HjoTguMeL1gDXV6zEXn2r?= =?us-ascii?Q?mdZs9xXE4Knst+LmWjeh0XF5JvpjUwoay4i8U6xaS5HiJFjmYj/V24QLl+yJ?= =?us-ascii?Q?Ph0pQWaM1ijqJ1NX6HPh6SkpZzKsDB9pFBjI+GNMo+tb9FPCWNMDQcnaInnT?= =?us-ascii?Q?7dAxBR+TKPnnv7qIfpgEXgyHjiMtQMx4rp9j1ZhB0olsn1wKl05ksrojY4Tw?= =?us-ascii?Q?YGetTRkMSqUGFlxRJKeKgx6eDLTWLxVTXMB+PvppzyL0q4GeJGiEEY1q+/7H?= =?us-ascii?Q?7Fiq116CAaTxuV5CRltPi64aOj9dUQ6qz0J28WrWUnv92Oxp0vqJA6sAiEhv?= =?us-ascii?Q?J6rqvusNfzy03IfslB0jtp5+YAKaH96uz4il/vif+dgyoyRwSlYO7WG4gbvz?= =?us-ascii?Q?ME7Z48pfSyTDA4oRv/Fm8G/+vnA3ipDgrVmxZS0htpALcHVS1oy7SQddF2qJ?= =?us-ascii?Q?BraTKUlDpaaq6hqnRrQI3SwD+5crQr5wEagLglhaqU8tIDb3Tit3t+1BsLRP?= =?us-ascii?Q?eITGMAFZj6R3zLTUiyvKxYwywGoPnrarmDWcVTRUxOXXr3Xe2M9nWO63KCkC?= =?us-ascii?Q?b6wQ6jp5GsDv7eeCSPx7QPSSzt8f0d8=3D?= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: ed741271-f689-461f-8ca8-08da295c189f X-MS-Exchange-CrossTenant-AuthSource: BLAPR10MB4835.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Apr 2022 21:14:35.7563 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: MEszHvyVMOtwefZ+dvTcj4WEQ6eY6I/61Wb9BUCTYBWFwIfqwXG5q0J3FAz8Z0PBe+r+ypglg4k9RGxjZrVyEjkfvHQve1JaSkdefp8aj54= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR10MB3260 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.486, 18.0.858 definitions=2022-04-28_04:2022-04-28, 2022-04-28 signatures=0 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 mlxlogscore=999 mlxscore=0 suspectscore=0 malwarescore=0 spamscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2202240000 definitions=main-2204280125 X-Proofpoint-ORIG-GUID: HVg2nRxLb3d0JbcytKE367y1SYo3Dm-T X-Proofpoint-GUID: HVg2nRxLb3d0JbcytKE367y1SYo3Dm-T 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+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.165.32; envelope-from=joao.m.martins@oracle.com; helo=mx0a-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "John G . Johnson" , kvm@vger.kernel.org, "Michael S. Tsirkin" , Jason Wang , Peter Xu , Joao Martins , Eric Blake , Yi Liu , Juan Quintela , David Hildenbrand , Markus Armbruster , Nicolin Chen , Jason Gunthorpe , Kevin Tian , Richard Henderson , "Dr. David Alan Gilbert" , Eric Auger , Alex Williamson , Thanos Makatos , Eduardo Habkost , Yishai Hadas , Cornelia Huck , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.onmicrosoft.com) X-ZM-MESSAGEID: 1651181031526100001 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" ioctl(iommufd, IOMMU_HWPT_SET_DIRTY, arg) is the UAPI that enables or disables dirty page tracking. We set it on the whole list of iommu domains we are tracking, and set ::dirty_pages_supported accordingly, used when we attempt at reading out the dirty bits from the hw pagetables. Signed-off-by: Joao Martins --- hw/iommufd/iommufd.c | 18 ++++++++++++ hw/iommufd/trace-events | 1 + hw/vfio/iommufd.c | 57 ++++++++++++++++++++++++++++++++++++ include/hw/iommufd/iommufd.h | 1 + 4 files changed, 77 insertions(+) diff --git a/hw/iommufd/iommufd.c b/hw/iommufd/iommufd.c index 4e8179d612a5..e5aff5deaf14 100644 --- a/hw/iommufd/iommufd.c +++ b/hw/iommufd/iommufd.c @@ -201,6 +201,24 @@ int iommufd_copy_dma(int iommufd, uint32_t src_ioas, u= int32_t dst_ioas, return !ret ? 0 : -errno; } =20 +int iommufd_set_dirty_tracking(int iommufd, uint32_t hwpt_id, bool start) +{ + int ret; + struct iommu_hwpt_set_dirty set_dirty =3D { + .size =3D sizeof(set_dirty), + .hwpt_id =3D hwpt_id, + .flags =3D !start ? IOMMU_DIRTY_TRACKING_DISABLED : + IOMMU_DIRTY_TRACKING_ENABLED, + }; + + ret =3D ioctl(iommufd, IOMMU_HWPT_SET_DIRTY, &set_dirty); + trace_iommufd_set_dirty(iommufd, hwpt_id, start, ret); + if (ret) { + error_report("IOMMU_HWPT_SET_DIRTY failed: %s", strerror(errno)); + } + return !ret ? 0 : -errno; +} + static void iommufd_register_types(void) { qemu_mutex_init(&iommufd_lock); diff --git a/hw/iommufd/trace-events b/hw/iommufd/trace-events index 615d80cdf42c..d3c2b5a0ab95 100644 --- a/hw/iommufd/trace-events +++ b/hw/iommufd/trace-events @@ -9,3 +9,4 @@ iommufd_put_ioas(int iommufd, uint32_t ioas) " iommufd=3D%d= ioas=3D%d" iommufd_unmap_dma(int iommufd, uint32_t ioas, uint64_t iova, uint64_t size= , int ret) " iommufd=3D%d ioas=3D%d iova=3D0x%"PRIx64" size=3D0x%"PRIx64" (= %d)" iommufd_map_dma(int iommufd, uint32_t ioas, uint64_t iova, uint64_t size, = void *vaddr, bool readonly, int ret) " iommufd=3D%d ioas=3D%d iova=3D0x%"PR= Ix64" size=3D0x%"PRIx64" addr=3D%p readonly=3D%d (%d)" iommufd_copy_dma(int iommufd, uint32_t src_ioas, uint32_t dst_ioas, uint64= _t iova, uint64_t size, bool readonly, int ret) " iommufd=3D%d src_ioas=3D%= d dst_ioas=3D%d iova=3D0x%"PRIx64" size=3D0x%"PRIx64" readonly=3D%d (%d)" +iommufd_set_dirty(int iommufd, uint32_t hwpt_id, bool start, int ret) " io= mmufd=3D%d hwpt=3D%d enable=3D%d (%d)" diff --git a/hw/vfio/iommufd.c b/hw/vfio/iommufd.c index 8ff5988b0773..8146407feedd 100644 --- a/hw/vfio/iommufd.c +++ b/hw/vfio/iommufd.c @@ -33,6 +33,7 @@ #include "hw/qdev-core.h" #include "sysemu/reset.h" #include "qemu/cutils.h" +#include "migration/migration.h" =20 static bool iommufd_check_extension(VFIOContainer *bcontainer, VFIOContainerFeature feat) @@ -82,6 +83,25 @@ static int iommufd_unmap(VFIOContainer *bcontainer, container->ioas_id, iova, size); } =20 +static void iommufd_set_dirty_page_tracking(VFIOContainer *bcontainer, + bool start) +{ + VFIOIOMMUFDContainer *container =3D container_of(bcontainer, + VFIOIOMMUFDContainer, o= bj); + int ret; + VFIOIOASHwpt *hwpt; + + QLIST_FOREACH(hwpt, &container->hwpt_list, next) { + ret =3D iommufd_set_dirty_tracking(container->iommufd, + hwpt->hwpt_id, start); + if (ret) { + return; + } + } + + bcontainer->dirty_pages_supported =3D start; +} + static int vfio_get_devicefd(const char *sysfs_path, Error **errp) { long int vfio_id =3D -1, ret =3D -ENOTTY; @@ -304,6 +324,40 @@ static int vfio_device_reset(VFIODevice *vbasedev) return 0; } =20 +static bool vfio_iommufd_devices_all_dirty_tracking(VFIOContainer *bcontai= ner) +{ + MigrationState *ms =3D migrate_get_current(); + VFIOIOMMUFDContainer *container; + VFIODevice *vbasedev; + VFIOIOASHwpt *hwpt; + + if (bcontainer->dirty_pages_supported) { + return true; + } + + if (!migration_is_setup_or_active(ms->state)) { + return false; + } + + container =3D container_of(bcontainer, VFIOIOMMUFDContainer, obj); + + QLIST_FOREACH(hwpt, &container->hwpt_list, next) { + QLIST_FOREACH(vbasedev, &hwpt->device_list, hwpt_next) { + VFIOMigration *migration =3D vbasedev->migration; + + if (!migration) { + return false; + } + + if ((vbasedev->pre_copy_dirty_page_tracking =3D=3D ON_OFF_AUTO= _OFF) + && (migration->device_state & VFIO_DEVICE_STATE_RUNNING)) { + return false; + } + } + } + return true; +} + static int vfio_iommufd_container_reset(VFIOContainer *bcontainer) { VFIOIOMMUFDContainer *container; @@ -446,6 +500,7 @@ static int iommufd_attach_device(VFIODevice *vbasedev, = AddressSpace *as, */ =20 vfio_as_add_container(space, bcontainer); + bcontainer->dirty_pages_supported =3D true; bcontainer->initialized =3D true; =20 out: @@ -554,6 +609,8 @@ static void vfio_iommufd_class_init(ObjectClass *klass, vccs->attach_device =3D iommufd_attach_device; vccs->detach_device =3D iommufd_detach_device; vccs->reset =3D vfio_iommufd_container_reset; + vccs->devices_all_dirty_tracking =3D vfio_iommufd_devices_all_dirty_tr= acking; + vccs->set_dirty_page_tracking =3D iommufd_set_dirty_page_tracking; } =20 static const TypeInfo vfio_iommufd_info =3D { diff --git a/include/hw/iommufd/iommufd.h b/include/hw/iommufd/iommufd.h index 59835cddcacf..61fd83771099 100644 --- a/include/hw/iommufd/iommufd.h +++ b/include/hw/iommufd/iommufd.h @@ -33,5 +33,6 @@ int iommufd_map_dma(int iommufd, uint32_t ioas, hwaddr io= va, ram_addr_t size, void *vaddr, bool readonly); int iommufd_copy_dma(int iommufd, uint32_t src_ioas, uint32_t dst_ioas, hwaddr iova, ram_addr_t size, bool readonly); +int iommufd_set_dirty_tracking(int iommufd, uint32_t hwpt_id, bool start); bool iommufd_supported(void); #endif /* HW_IOMMUFD_IOMMUFD_H */ --=20 2.17.2 From nobody Mon May 6 05:12:48 2024 Delivered-To: importer2@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+importer2=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=oracle.com); dmarc=fail(p=none dis=none) header.from=oracle.com ARC-Seal: i=2; a=rsa-sha256; t=1651181315; cv=pass; d=zohomail.com; s=zohoarc; b=bAPd3S3uryTJUGPeeguU51GC4+gSWtUtn1Z+VfryGFGp7WWE1hhOaEb/isomCrmwau05a/T5isiW76DWUdnQODqw034yrBKwW+SsT2hEjdTI5ma4ICmlYty+FOUz6QPR+SJ6khOm1nQsBL2zNfzhr0LbRYVGMJoWiOsw6rV3css= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651181315; h=Content-Type: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=gIbs7dclG9pZb1wnfXL2e7MOOwRXNDf7onpte9PZWuY=; b=nfdVsjIlHFkg3gHkRsSOkJhgxsUwVrgamSOZr1h1Fhc4QUivulofbAn8HRxvbAp+S+ShY6wuQDS4ju2rCCiy1R24DsCMo9CRQv5NK0+q5aU0ypEyqiH/fQ09BZBPoSGs4tWf+SWrgYpkzcEJwsT7/1pJs0K9IMq4EKj8UmNGo1E= 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+importer2=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=oracle.com); dmarc=fail header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 165118131532395.32637348927676; Thu, 28 Apr 2022 14:28:35 -0700 (PDT) Received: from localhost ([::1]:60632 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nkBgg-0000tk-8m for importer2@patchew.org; Thu, 28 Apr 2022 17:28:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43540) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nkBTQ-0000qI-6k for qemu-devel@nongnu.org; Thu, 28 Apr 2022 17:14:52 -0400 Received: from mx0a-00069f02.pphosted.com ([205.220.165.32]:16060) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nkBTO-0005tZ-3P for qemu-devel@nongnu.org; Thu, 28 Apr 2022 17:14:51 -0400 Received: from pps.filterd (m0246629.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 23SIoxZv032179; Thu, 28 Apr 2022 21:14:44 GMT Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3fmb104nkm-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 28 Apr 2022 21:14:43 +0000 Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.16.1.2/8.16.1.2) with SMTP id 23SL6Bwt024990; Thu, 28 Apr 2022 21:14:42 GMT Received: from nam11-bn8-obe.outbound.protection.outlook.com (mail-bn8nam11lp2177.outbound.protection.outlook.com [104.47.58.177]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com with ESMTP id 3fm7w78cg5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 28 Apr 2022 21:14:42 +0000 Received: from BLAPR10MB4835.namprd10.prod.outlook.com (2603:10b6:208:331::11) by DM6PR10MB3260.namprd10.prod.outlook.com (2603:10b6:5:1ab::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5186.15; Thu, 28 Apr 2022 21:14:40 +0000 Received: from BLAPR10MB4835.namprd10.prod.outlook.com ([fe80::b9e5:d1b6:b4be:f9d]) by BLAPR10MB4835.namprd10.prod.outlook.com ([fe80::b9e5:d1b6:b4be:f9d%5]) with mapi id 15.20.5206.013; Thu, 28 Apr 2022 21:14:40 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : content-type : mime-version; s=corp-2021-07-09; bh=gIbs7dclG9pZb1wnfXL2e7MOOwRXNDf7onpte9PZWuY=; b=DFN+mYNd4FbFa/9g8PdCovrpH9UbyXH3zMYnLzSOllvLlxaEMjq7XmT6rB91h/C2/F4z YDPg1ONLvmgXJh7kq+RR7ku3uxQgBmgiOw01B9WbxcuVrDu+AhMpcYplte8FKnZpJmPL 6l3/vq4rBMTPIqzRxDN/g+/4Gza0S1uag255rtCuoLgjtHCd/TdbKCE2llSaR3++Wzp7 EvYX9Bn7gxVEgeOJ8UFtExnvCdPNFbrX/qY1x+cYB+TOBzhUcZMdMeRwhNgWjkKux8UC kXxIWqU1/gkwKCJAq4FVm2o2YjxeR3oTuWA4t1VNjhx1IL3vOt7XuP6zF1ywQ8WMdrw2 bA== ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=iBcEv74qQfhU24mmqEBy7wmlwZxlGpXtVy212+4TZJnrtV2r8U7qsxJM8fwbiEScmkP/fbjBxuIWl6nHe6IJrV26jJDiGZGkvuuiHGxJp2ftSSNuv+rUtIgh8CVbyL06QgYlONlgnPLuYztvS1M9u23eptoFyYK6lC26kEi4D/xAwIkY5d5xcR4wP9mI/BjJ4+GxtiFL1iFYQJ2ojNhtIMD2VU6kMZR0ifNMD/nmf7wRfERWyFdzr0ZSznOjUvdhfg4ScqOIk67YoO8FSeJ9DN5v45pcHjCsoy+xOESmvF65RAR4z+08RVbOMJxjTBv2jSlE3RGQlaLlXMaXO361xQ== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=gIbs7dclG9pZb1wnfXL2e7MOOwRXNDf7onpte9PZWuY=; b=ARdR+Ibq9Gbr3S+pWXgOwIqK0/eVJ96UJfCB9YOeMO4o+lU697paG2Q14HSdZ2cdAAgCq+lh6QLUTHldwic6vNZ1DAVrQ9fVi2+lvEAiTmz3qvWDxy741+E/9L0wK28j9nEL8VcxopkLQWreWo1KUEsnKH1CknZL+gNPXkaQj3oBPArlB857BUhy+hKQIiXYDlUY3eKgGfXW1hUWj+yfPLUYqMNYkUuMPMzuX4uDzMx4t7OWE/37G9L8RqBDEjEK/+60X/eYdZHmisvjT47xURP0IoFO5hQC5mLFoI7ArGSo+YIMzW7Xjjq86O827spd1mR3o/HuSd6qzga+/ptcFg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=gIbs7dclG9pZb1wnfXL2e7MOOwRXNDf7onpte9PZWuY=; b=LjG7mM3rkfJE4qq9fcA9y3rs/2NxZekXD/IcdFvjArjRV/L+13ncf+4asPAoVlESbls7vi2WFUYsy77UUk/xYmy5Q6dUAiHxYGvc5TYNpdwS3CmXdeWha399AGPSxSDnOKUlw2NECn6Z19Mv8ambERwTtAkXBQCo8asUeXFO2MM= From: Joao Martins To: qemu-devel@nongnu.org Subject: [PATCH RFC 07/10] vfio/iommufd: Add HWPT_GET_DIRTY_IOVA support Date: Thu, 28 Apr 2022 22:13:48 +0100 Message-Id: <20220428211351.3897-8-joao.m.martins@oracle.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20220428211351.3897-1-joao.m.martins@oracle.com> References: <20220428211351.3897-1-joao.m.martins@oracle.com> X-ClientProxiedBy: LO2P265CA0297.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:a5::21) To BLAPR10MB4835.namprd10.prod.outlook.com (2603:10b6:208:331::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 4c8427f1-9b29-4219-5f2f-08da295c1b0d X-MS-TrafficTypeDiagnostic: DM6PR10MB3260:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: WPv8RUEQUGGtkZv+n5FEfUKHHhZKgnNcThHeD+oPUF7dGtNCLRucypwgUjvoiq/3qDBZMU8woN+QUR2ydwzZvNH3B4pHUhD16m9NowCC1OcYy7hhAvoXptWur51KYIdeYWQbtvKaCSiPcILUPR6C3IpyxYwwl7rt4cay03hgu+IgXWzFfTN5ktpQ1/NHgHRDyeugYagqVpE+bqwYzwiWylmZiCLkJUGUGPepJ/57X/TYQY/lfHjqA8SDUiPegTjysr9YfNqnoL7nfQyD+6wdXxwr0dePyc9wkBMPoMDWY5v25U4fk2RgCf4aKsgt/XtYagiYlFBvZr8JEvo1K6Ex7kTCboRShQxO4ZFbVbcLiD4YgVXsCZUj31xHcgcboqrqce9vWwzwuV+aHNjADieAjWA8I2pIr45bjS40v515leoZ6IcVHKu0nmoFcDiTD04CKA3hp1hIi/nEgEJyNSGUlKfGlpxAu4D1+nz5bAZR9Ov/gVAiKpIR1OHFnZ41hU6wb7QEqcGyCjagsm717iB9K1W8+Guhh2Wb047yQrNXVxzsHayER9PNC2BTXCH4Ypu9oaOGfMeqhYAhHUh4Mu0FYgx/oMERiZ12518NeRUZhODEErAfuxKrVh884hI0M1uKcED8KinhLx1ppJwHEQ5Akz8OuY2RRSMCGPnJRZPZPVA9EHQjKGIMApDR9921DVQVeF58sd6abgoT/dqnvxqc2m51madUf/+fnVq7wA8XXV8= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BLAPR10MB4835.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(366004)(5660300002)(66476007)(66556008)(2616005)(1076003)(186003)(54906003)(103116003)(6506007)(36756003)(6512007)(26005)(52116002)(316002)(8676002)(66946007)(83380400001)(6916009)(8936002)(7416002)(4326008)(508600001)(2906002)(38350700002)(38100700002)(86362001)(6486002)(14143004); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?TS/ZIE3GwgzarnD9Y/N04s2kPmt8jAIX+4O1r6u5T+tf+RKXM9hiDicJwZEr?= =?us-ascii?Q?XE04iMeJp2sHos//pNqfmvtaoUjNdVzwxUyAz0zFZo5t8v4B9G+Zz7R/T5Zc?= =?us-ascii?Q?/+Z1zcBSRqncuhUe9ul670MQdGPx+0Negb4DH5qeSV/ivpIMf1trhQOwn8+G?= =?us-ascii?Q?iXTZQziiVUwFcdCCg7PGbfQj0BRvZRi2q77cUoDe1LoGpgm8Jl8QnbsyFVgY?= =?us-ascii?Q?zcNpPCyBEBDsbOXBbVHf7M+2mzRuscSl2bcMba0tSuDUkwyvgFUqmEGZBays?= =?us-ascii?Q?USMtLVL7aNAHdQ6ceZm7ywLM982aSxnYLmgenAB9vTBeo2aRGdRQF4mePbR4?= =?us-ascii?Q?EW/Bh8kETpZkavkpkhm0mEMbwbiuS/fHq+h2LVnryJuDqOxJtOC7BuVcOTac?= =?us-ascii?Q?CY+6i3KE9/lpKtDLZlZa4NfdGOkqNk7amjqWs3MXVGV8fm2dN24AOnPCWHtg?= =?us-ascii?Q?sO4cuGyZP6QgZaMvoIx6yJRQIKrYZz2YcXfqrnF5MVTFLfoFpxAUc7DgIKl4?= =?us-ascii?Q?Uf2G/VUDFBQmgfVoKkFEDvn8YRFgU68gnNDE1gqEMcQMS/sK5xlfOCUKW9Wb?= =?us-ascii?Q?cwYovxXPF6DQkv2Syad2/+1UpmLa4+8hvcaiBxGD5/FL5OvuUMH+05IkdJSc?= =?us-ascii?Q?KWBCvQiJIr4GATsUo1nr4gN8nkMg2OCowed1Fjviac4W1UsC2253zCVatd1W?= =?us-ascii?Q?FcvvFdFHyZ9NrAwUIPIf1vU3p+xNi3HBwrlVeKNFWJAsVFt58B8GtQGK0ept?= =?us-ascii?Q?HNAPsmqIMGUZsbE2juqDfxbBVep3lpvVLfgOAXfvw7BH7ZFqsEvyak7I6qoe?= =?us-ascii?Q?Ipw83Ir6lvWlbV868lWpMFMGPRPkIW8qTdXWpZJ1SUaNAM2Tv2MFBt+naj04?= =?us-ascii?Q?sH8lu/CHNAJXHO6v6zSr6WpJCoyyNwp3WtrlocslQTXIIdQ5PUrS/0W8oMvx?= =?us-ascii?Q?zKx6w2RVMfrpPu7YKR1twqVPro7p2Np8HCWdoC25d6DrEaCyXMwFeXadaLcy?= =?us-ascii?Q?yispH49OtVf/4iYIrfV4wonhKn4Gcxehiiqe2e6kTKAZPwL/UlBXFZIIVgWX?= =?us-ascii?Q?lyqmPP4WGWzIVrnaKCv1TOezBBPegTZZnIu2nelD23+4x4AePzLeWnBsWOnL?= =?us-ascii?Q?my/Id1Z+X2g1mUaAWRhXLucOBUtrg4y6Hcr7DrdWMRUywm6G7UIbBldJDYYl?= =?us-ascii?Q?SMDsXBv1GW3iEzuoM4d9i17IQrx0GX9TEUAOK8SM7MKlx+3b0ID4TpFWhjrq?= =?us-ascii?Q?TLhoFKfVPvlyP1HiHY4ihXzNsgNXWJ6X56gjIZRhGCLNykk3m7IFRTVfEwE1?= =?us-ascii?Q?CIiUkbx7YaZE0tX5+U0DTOmRekNg5RDuSVlauaeh2sYvTuY/H0kNzzYimCiA?= =?us-ascii?Q?ee6vh2u+Bx8YG78TN5QnxnKnXjnBTG4oeEQA9ftE/uggEEfTYZaOEArZABJP?= =?us-ascii?Q?3nhNdxqQCX5ayvXpBv9HxsgqAq47SQo4B/2Ema4/1LlPnDodOpglAGdPp5Ym?= =?us-ascii?Q?L7HWYnJCluVYi9GvDw9xEOVEq6jDGNNssGEARYAi4HHbumCgcm9xYuWdQq5/?= =?us-ascii?Q?u7eIydv/X7OvefWN+vsWU9ZQied9nC6Ono/lsEc3l+VZ10kCU8BK++lxSUaD?= =?us-ascii?Q?vz28v8MTXPI5OILzLNHORU8G9jvmJSLEv+5gAWKY4hDCV+uYBxD91DpeDHq+?= =?us-ascii?Q?kN7HwkgGeZhoKMsQev/2ginYFus8vw/K6qRXFd8jWFZj4iCimwbY//tCCh4T?= =?us-ascii?Q?AXbuTU/dOdbWRQ6+HcNAE1L0KGuCTCk=3D?= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4c8427f1-9b29-4219-5f2f-08da295c1b0d X-MS-Exchange-CrossTenant-AuthSource: BLAPR10MB4835.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Apr 2022 21:14:39.8793 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: EVaRzN237/MAvKiXBqaaIuAWnnyho2luUvOdOj9btbgh/D6uB/6AQN4biSW5OUMWnkWisFdYfc3ocT0NaEJFCXTVR4QfAzqknlJFp+2aGHI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR10MB3260 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.486, 18.0.858 definitions=2022-04-28_04:2022-04-28, 2022-04-28 signatures=0 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 mlxlogscore=999 malwarescore=0 mlxscore=0 phishscore=0 bulkscore=0 adultscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2202240000 definitions=main-2204280125 X-Proofpoint-ORIG-GUID: HpwfBjl7JPPE7v8uDJuOQR4IaYC7PlhQ X-Proofpoint-GUID: HpwfBjl7JPPE7v8uDJuOQR4IaYC7PlhQ 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+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.165.32; envelope-from=joao.m.martins@oracle.com; helo=mx0a-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "John G . Johnson" , kvm@vger.kernel.org, "Michael S. Tsirkin" , Jason Wang , Peter Xu , Joao Martins , Eric Blake , Yi Liu , Juan Quintela , David Hildenbrand , Markus Armbruster , Nicolin Chen , Jason Gunthorpe , Kevin Tian , Richard Henderson , "Dr. David Alan Gilbert" , Eric Auger , Alex Williamson , Thanos Makatos , Eduardo Habkost , Yishai Hadas , Cornelia Huck , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.onmicrosoft.com) X-ZM-MESSAGEID: 1651181317647100001 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" ioctl(iommufd, IOMMU_HWPT_GET_DIRTY_IOVA, arg) is the UAPI that fetches the bitmap that tells what was dirty in an IOVA range. A single bitmap is allocated and used across all the hw_pagetables sharing an IOAS which is then used in log_sync() to set Qemu global bitmaps. There's no point of even attempting to fetch these bitmaps, should the iommu tracker fail to start in a previous call to HWPT_SET_DIRTY. Signed-off-by: Joao Martins --- hw/iommufd/iommufd.c | 24 ++++++++++++++++++++ hw/iommufd/trace-events | 1 + hw/vfio/iommufd.c | 44 ++++++++++++++++++++++++++++++++++++ include/hw/iommufd/iommufd.h | 2 ++ 4 files changed, 71 insertions(+) diff --git a/hw/iommufd/iommufd.c b/hw/iommufd/iommufd.c index e5aff5deaf14..bc870b5e9b2f 100644 --- a/hw/iommufd/iommufd.c +++ b/hw/iommufd/iommufd.c @@ -219,6 +219,30 @@ int iommufd_set_dirty_tracking(int iommufd, uint32_t h= wpt_id, bool start) return !ret ? 0 : -errno; } =20 +int iommufd_get_dirty_iova(int iommufd, uint32_t hwpt_id, uint64_t iova, + ram_addr_t size, uint64_t page_size, uint64_t *= data) +{ + int ret; + struct iommu_hwpt_get_dirty_iova get_dirty_iova =3D { + .size =3D sizeof(get_dirty_iova), + .hwpt_id =3D hwpt_id, + .bitmap =3D { + .iova =3D iova, .length =3D size, + .page_size =3D page_size, .data =3D (__u64 *)data, + }, + }; + + ret =3D ioctl(iommufd, IOMMU_HWPT_GET_DIRTY_IOVA, &get_dirty_iova); + trace_iommufd_get_dirty_iova(iommufd, hwpt_id, iova, size, page_size, = ret); + if (ret) { + error_report("IOMMU_HWPT_GET_DIRTY_IOVA (iova: 0x%"PRIx64 + " size: 0x%"PRIx64") failed: %s", iova, + size, strerror(errno)); + } + + return !ret ? 0 : -errno; +} + static void iommufd_register_types(void) { qemu_mutex_init(&iommufd_lock); diff --git a/hw/iommufd/trace-events b/hw/iommufd/trace-events index d3c2b5a0ab95..9fe2cc60c6fe 100644 --- a/hw/iommufd/trace-events +++ b/hw/iommufd/trace-events @@ -10,3 +10,4 @@ iommufd_unmap_dma(int iommufd, uint32_t ioas, uint64_t io= va, uint64_t size, int iommufd_map_dma(int iommufd, uint32_t ioas, uint64_t iova, uint64_t size, = void *vaddr, bool readonly, int ret) " iommufd=3D%d ioas=3D%d iova=3D0x%"PR= Ix64" size=3D0x%"PRIx64" addr=3D%p readonly=3D%d (%d)" iommufd_copy_dma(int iommufd, uint32_t src_ioas, uint32_t dst_ioas, uint64= _t iova, uint64_t size, bool readonly, int ret) " iommufd=3D%d src_ioas=3D%= d dst_ioas=3D%d iova=3D0x%"PRIx64" size=3D0x%"PRIx64" readonly=3D%d (%d)" iommufd_set_dirty(int iommufd, uint32_t hwpt_id, bool start, int ret) " io= mmufd=3D%d hwpt=3D%d enable=3D%d (%d)" +iommufd_get_dirty_iova(int iommufd, uint32_t hwpt_id, uint64_t iova, uint6= 4_t size, uint64_t page_size, int ret) " iommufd=3D%d hwpt=3D%d iova=3D0x%"= PRIx64" size=3D0x%"PRIx64" page_size=3D0x%"PRIx64" (%d)" diff --git a/hw/vfio/iommufd.c b/hw/vfio/iommufd.c index 8146407feedd..6c12239a40ab 100644 --- a/hw/vfio/iommufd.c +++ b/hw/vfio/iommufd.c @@ -33,6 +33,7 @@ #include "hw/qdev-core.h" #include "sysemu/reset.h" #include "qemu/cutils.h" +#include "exec/ram_addr.h" #include "migration/migration.h" =20 static bool iommufd_check_extension(VFIOContainer *bcontainer, @@ -102,6 +103,48 @@ static void iommufd_set_dirty_page_tracking(VFIOContai= ner *bcontainer, bcontainer->dirty_pages_supported =3D start; } =20 +static int iommufd_get_dirty_bitmap(VFIOContainer *bcontainer, uint64_t io= va, + uint64_t size, ram_addr_t ram_addr) +{ + VFIOIOMMUFDContainer *container =3D container_of(bcontainer, + VFIOIOMMUFDContainer, o= bj); + int ret; + VFIOIOASHwpt *hwpt; + unsigned long *data, page_size, bitmap_size, pages; + + if (!bcontainer->dirty_pages_supported) { + return 0; + } + + page_size =3D qemu_real_host_page_size; + pages =3D REAL_HOST_PAGE_ALIGN(size) / qemu_real_host_page_size; + bitmap_size =3D ROUND_UP(pages, sizeof(__u64) * BITS_PER_BYTE) / + BITS_PER_BYTE; + data =3D g_try_malloc0(bitmap_size); + if (!data) { + ret =3D -ENOMEM; + goto err_out; + } + + QLIST_FOREACH(hwpt, &container->hwpt_list, next) { + ret =3D iommufd_get_dirty_iova(container->iommufd, hwpt->hwpt_id, + iova, size, page_size, data); + if (ret) { + goto err_out; + } + } + + cpu_physical_memory_set_dirty_lebitmap(data, ram_addr, pages); + + trace_vfio_get_dirty_bitmap(container->iommufd, iova, size, bitmap_siz= e, + ram_addr); + +err_out: + g_free(data); + + return ret; +} + static int vfio_get_devicefd(const char *sysfs_path, Error **errp) { long int vfio_id =3D -1, ret =3D -ENOTTY; @@ -611,6 +654,7 @@ static void vfio_iommufd_class_init(ObjectClass *klass, vccs->reset =3D vfio_iommufd_container_reset; vccs->devices_all_dirty_tracking =3D vfio_iommufd_devices_all_dirty_tr= acking; vccs->set_dirty_page_tracking =3D iommufd_set_dirty_page_tracking; + vccs->get_dirty_bitmap =3D iommufd_get_dirty_bitmap; } =20 static const TypeInfo vfio_iommufd_info =3D { diff --git a/include/hw/iommufd/iommufd.h b/include/hw/iommufd/iommufd.h index 61fd83771099..9b467e57723b 100644 --- a/include/hw/iommufd/iommufd.h +++ b/include/hw/iommufd/iommufd.h @@ -34,5 +34,7 @@ int iommufd_map_dma(int iommufd, uint32_t ioas, hwaddr io= va, int iommufd_copy_dma(int iommufd, uint32_t src_ioas, uint32_t dst_ioas, hwaddr iova, ram_addr_t size, bool readonly); int iommufd_set_dirty_tracking(int iommufd, uint32_t hwpt_id, bool start); +int iommufd_get_dirty_iova(int iommufd, uint32_t hwpt_id, uint64_t iova, + ram_addr_t size, uint64_t page_size, uint64_t *= data); bool iommufd_supported(void); #endif /* HW_IOMMUFD_IOMMUFD_H */ --=20 2.17.2 From nobody Mon May 6 05:12:48 2024 Delivered-To: importer2@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+importer2=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=oracle.com); dmarc=fail(p=none dis=none) header.from=oracle.com ARC-Seal: i=2; a=rsa-sha256; t=1651180880; cv=pass; d=zohomail.com; s=zohoarc; b=fS5QVSQN+8d0VCMT8YibE9KKv/98yuhImT5oP8Re7dwVoDHQce0qOs7yollqWgA277eE0nUoMu5/6fMebNB/9CC/HCcPcexhWKMSJjq39ahW5T0xJlqhy+CBJSGBBjpUm1IHGSfQacDZEJpp7Qm7/2kfPtIqwkfNIYdfq/9yYb8= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651180880; h=Content-Type: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=ZKZqly/G7fQLwRqYKlVrLmaDOezKg4pluWDfPOLVfcA=; b=iNs+HSARBP8KOtSamjKSNvCGtLQGOq/AcFT3uTbqOraNkeO2EnW4Ci6qjEm9wVqOWh3fCfEAZIyDHAXrP3zPz22K2eWs+AtTe9Rl8ocBO/wFLAU+a58xNwn8DwQZwfVn4m6HVaMMOH2mhIAUHoA+IxswXwp3rhsYRa1/4bE//IM= 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+importer2=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=oracle.com); dmarc=fail header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1651180880125490.96352757960585; Thu, 28 Apr 2022 14:21:20 -0700 (PDT) Received: from localhost ([::1]:48680 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nkBZf-00011L-2r for importer2@patchew.org; Thu, 28 Apr 2022 17:21:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43576) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nkBTU-00011O-VK for qemu-devel@nongnu.org; Thu, 28 Apr 2022 17:14:56 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:6924) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nkBTS-0005tt-U1 for qemu-devel@nongnu.org; Thu, 28 Apr 2022 17:14:56 -0400 Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 23SJQIuC011396; Thu, 28 Apr 2022 21:14:49 GMT Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3fmaw4nba6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 28 Apr 2022 21:14:49 +0000 Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.16.1.2/8.16.1.2) with SMTP id 23SL6cKC028689; Thu, 28 Apr 2022 21:14:48 GMT Received: from nam12-mw2-obe.outbound.protection.outlook.com (mail-mw2nam12lp2044.outbound.protection.outlook.com [104.47.66.44]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com with ESMTP id 3fp5ypebvq-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 28 Apr 2022 21:14:48 +0000 Received: from BLAPR10MB4835.namprd10.prod.outlook.com (2603:10b6:208:331::11) by CH0PR10MB5289.namprd10.prod.outlook.com (2603:10b6:610:d8::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5186.14; Thu, 28 Apr 2022 21:14:46 +0000 Received: from BLAPR10MB4835.namprd10.prod.outlook.com ([fe80::b9e5:d1b6:b4be:f9d]) by BLAPR10MB4835.namprd10.prod.outlook.com ([fe80::b9e5:d1b6:b4be:f9d%5]) with mapi id 15.20.5206.013; Thu, 28 Apr 2022 21:14:45 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : content-type : mime-version; s=corp-2021-07-09; bh=ZKZqly/G7fQLwRqYKlVrLmaDOezKg4pluWDfPOLVfcA=; b=ruLYfRdKSZjNh48MPSc7I1qOYuS0pr0v/L5TN1BLtBzHZVxRIcmtdQJMIXjJkUZ6LV7Q Yatsrl7fSBW/E6DqAqyv/2wreh8G645V452W4QQy58PeFtl5tjic+GHNWTZnMakfj/b4 O3qhd0Ho6sjwwo5D9u25G/ZCVrlTtaid6qITNwLrkvvxENPgt+cvXGtt3qhrEgvGgzZZ T+coWWpepJlFjSwxo0SeoyWbWcZolbNFMeQnA9ATzCUdcgvrEkckEaZHgnrnogFj8NjN ecNIf4LDDd9ACJ1BrkTXy4wcBjUctPzddhFzGXcwmiP4RvSa78jHHMeh6qYrE3+G1/YK mg== ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=njR537Kan5OTlw5X7QYJl/qz7l8MedUXNs9joZVPbvHTWtyGhMLKG18Kj+4K1N3Hv5ALfcAjtYhBQ+4+m2gEM+1851RtkyKce/00BLpR/4QkMHRVDlZCXX7z1AZO+FpsK0XCsRtZsqI3pRDXDFj1vn293dum+R9iLfmT2jMoakMVvxwhXNq7vzO/aPX86pvA0UrSNMsLN3MxP8fNBhhZw/flWMh0KD603EQXa2nOMveq+4sbhmFFGE9A3gZuWPHVVBLM91S2EVa7zBPHKxoGPsMfUyHuppOlAd9uz1T7jC9HGkQzbt1vd652TxtpElaLGL8y/Bbkc9yzPg6D1Cn3cQ== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ZKZqly/G7fQLwRqYKlVrLmaDOezKg4pluWDfPOLVfcA=; b=VTLp39k0xmRjIdDOijWz4H9Q4n7zC0bomSDjG4h4XmrH+fkgjJGaVl3GaRPIlUre5g6xwe1Ct4VfcEDUtFrwk1zTofn+2EitaeB7uSEFEQFpOHLiveX4b33ktBRQ3nhSL+owhfONXdRtYYSs5CbP1xsG359QhqDVDemr5O73+mbgsr6AGO++NSvhvudlgx2UQRm5FETcR5jJFtk3E8hv70D6iOFv6EQNWLM3/PHY+H7A/zrzYYTimGHIh9Og1z/nbh25u1pVkXlhZ7bah1fi8Eb/3Lx7rXjZ/CyzorJ57iTvwcrs7oCPTsa9Gs8FDhLZopCqCeTPOifOJzLSgJetqg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ZKZqly/G7fQLwRqYKlVrLmaDOezKg4pluWDfPOLVfcA=; b=jjOHm+ZBgPQghA+RcpyPB8AySFWamTyUhi3HJwAR8BByw48toDpyWSBgc860aiTuZl0n/P/DGhbff1POOxjEiQ9RE88tjE1EN82D+jqQCqj8BAm1Isl0Av0/bcdhKycRoeTNlrOKxmM4cyS3z/TEiaWGPMqoueU7oH88vKBjfas= From: Joao Martins To: qemu-devel@nongnu.org Subject: [PATCH RFC 08/10] vfio/iommufd: Add IOAS_UNMAP_DIRTY support Date: Thu, 28 Apr 2022 22:13:49 +0100 Message-Id: <20220428211351.3897-9-joao.m.martins@oracle.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20220428211351.3897-1-joao.m.martins@oracle.com> References: <20220428211351.3897-1-joao.m.martins@oracle.com> X-ClientProxiedBy: LO2P265CA0297.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:a5::21) To BLAPR10MB4835.namprd10.prod.outlook.com (2603:10b6:208:331::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ba2e3aa6-ab0f-46a7-7cee-08da295c1e3d X-MS-TrafficTypeDiagnostic: CH0PR10MB5289:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: sKDS5VDqouV1BnjB81sD8z7+aKd2yoGTDA3q6dLtElQMaSeFnf8M6Qd62xWBHr3Q7UUHnQwkVIm575sr76v5dh27jZD00xk4uBmJzUQ8P4djJH7FClYcf/axov+yghX3BmWHVhMKmdNufdIgneJDJ8phLUynFlCUNluUBwspzfKnsDjt7HmU1SCBHHrTJICHkWhFbL4xUiXMEqyV8Y9/5C6xNK9CjTj938Av9J+51GZd+z+CYPPgSfAcuT3Uv5ypxTGkdSdSILEOwWZpZnegoqKTSzDB5XFwjJhabPQBvJFOkV06G8kU7p8DQYdtJf4nOWJZgi7aaA/ERkfWBp9efU3Y8n0+8sCqVDdIcAY0ZtU+ie8+sECxyqwAmqJrJUzAjm4GSrTbQQ4DSQejcuUS2kGrKH1oxLXZgpzJwM6QrMYiMZiJSnbSP5YRCyfeY+Vg24E6jmLItK/6ATNADEEqwcUclXe83avQpNTbU/ImdopikH32GhuhYU5sLsmLlcy3vHlQRjsZD5OxT6rHW111T4dZPHZzCC3lrF28axxz3OYZsQilB3dmloEUgIoGO2so+li553nulpr4JqnNsVC1U18llUOzOstunUj1ZGj3ZkPQwOrMJP7h5EIjj3X9lYAEekOyNfU6v7IYVHtJjnmCkjm0AH3gzr6335BTA7FQjyEKu5nxM09OR6s8JMv7P2SyBXwGvKQTZsmUbmm9BJJlWoJa/s0KovimbO3RTUEVUps= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BLAPR10MB4835.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(366004)(54906003)(186003)(1076003)(38350700002)(38100700002)(5660300002)(2616005)(7416002)(103116003)(26005)(316002)(6916009)(36756003)(66946007)(8676002)(66476007)(4326008)(66556008)(8936002)(52116002)(86362001)(6512007)(2906002)(6486002)(508600001)(83380400001)(6506007)(14143004); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?J5Jv/K9ADjxt5i/bNg9BrycdOYTDQ9QPDyS9fdrvcMgsql0NzeETXkGc+O/Q?= =?us-ascii?Q?cujiok6qPqHBjzO3amcTjYKsKuEmXg39HylOBtIciiPpi8fhI0n4hALWStgX?= =?us-ascii?Q?rotvNmpaihlJPVyg8X6LrXQzILubcTwR2SBOiyz7+Z+SpbSqe8OEHRza9sVJ?= =?us-ascii?Q?vUwPCXArJ7tMUtBjnkUxyDDUB4ISFqpRxI9J6H2rDbUDIim3pCgw2p2E6iHO?= =?us-ascii?Q?365zJ3vEBTJWEkqwC4u59xcVXYKFolbZWpGWl47T36FCV4yUPQHLV/nugTTL?= =?us-ascii?Q?bp6e2yV6D7kZva5Jt9kQEOg/2gQTfxSClTnoBjnl7qPAwzGglYNxtzYoRZ4b?= =?us-ascii?Q?P/+wCit6Jls+l0TI5Lzi+2lE60o872U6ag+R0N8zgWbPo4Q5NBH9HumW0w64?= =?us-ascii?Q?WAqqFO71mRZSaWFWAUuqfhjLKC+6/rn1LcEI4BgZ9A1RLvw/dzgy7bNzmMUo?= =?us-ascii?Q?fRr+puIEeOyCoLQK0pIXs7TNEhDYFVJakQE0P5yyeH8zYwGOag1v5zgzJIUE?= =?us-ascii?Q?0nhbB7vKOJ+4ZFKf9ZBn88vXXSRET3x4jl6ZOsl2pITMPtd5PKx0LiJfid8g?= =?us-ascii?Q?jkUeJFvtabDZ2WK84H2VsNmRYhyuVkte55ENsWWTs2cFc62BrpRE61IUTdrx?= =?us-ascii?Q?EoBnRZXF0Y5l5L7vyDU6R3JZZXibNoVPgn4KzB7e/uuHsdhFhj+OHrRNCRAd?= =?us-ascii?Q?goT3vBkQaUS0Jl7dsVbdUjZX1QfCKaChBLtI0YcLRAqI+gYqPSJfuNEh/kxD?= =?us-ascii?Q?iPiSf4a1SIy95f4ftH7g6wFJqQ70wjfiSHnaOn8qL/gH++eDrdUNrtDNJ5XM?= =?us-ascii?Q?IPxCLe/xe4qcSyQHkku1tG707LYq0IVoggeF9n+YIbNjarmE5BCcy7hVaHdf?= =?us-ascii?Q?gZ8ICfZueUBlYnT/E2CZWzxHZk4KP/MyXYNwQ1Xf0yQniTijMnBI7IJ3FLaM?= =?us-ascii?Q?OOtySwiKoXAEmMI4j4eR+SGuHqwfJxy+8al5+Uv57eFKiJ9K/Zj8/2BMiYRn?= =?us-ascii?Q?7pil9i2UKY4SQJX9IDM5AW5QmMo4KrTts+FS33VzN5gnOotrShPztXpDBxKG?= =?us-ascii?Q?c0FgAPNy8FzcuPm6/gf5Jt8JC16wDnad/GoTIbfQwW0NnJx6bJy0amCMuiPl?= =?us-ascii?Q?a966HxavRvsecsAz7D6WSvse3IVKD3Kp+b86zkMUJMMBgk3vCu9dh9BTG43D?= =?us-ascii?Q?ygZx8lEKTCw2YWH2kxqVbLuIJkiVkqFNTBvIORN0CDwQUc5Q3g4K6dEBuB4B?= =?us-ascii?Q?3/8f088LH+d9LPws9Mv3lIYL/PIXAQ26dO3QQcTBTcrq210pNqOmP5MU6fgl?= =?us-ascii?Q?FHNuyqilPBsdZyAy+fqHDVPg40YdmSUENqhfcZA2DBwvkbjcREPjpoyDY0Sw?= =?us-ascii?Q?uasZI/zr2aYPEz+4IAhb9511R9swFEaECuOWi7bQbR/T6dkK/7WBpA0X5P2W?= =?us-ascii?Q?RMIu49gB7UCA+CCMC9PhznpICiJ9Ag7weHbOU2dMrrPJwXEAMVM8n7D2lFJ3?= =?us-ascii?Q?BBW32NztK+n9y7LVieYHjWN++Gy49R8cqRHL6pxOtp23j65N7mxbqeTmJZYY?= =?us-ascii?Q?7Gr5nfoIb0RO84G6MwGfoiSlSqz3Xgge88iSXeFZSC88caBd8ncEVhbWKX3Q?= =?us-ascii?Q?1xc8LaAlGc80tPkiYH++C0hk8SKPnlERI1JWGeWR8rvN8Ntaf9crfidhoS8w?= =?us-ascii?Q?yNDkONjyI+FhtlZFkQ0qRys6V0E1DGk7KjeQLstbWI7njCOd5ZyHEek4jVoa?= =?us-ascii?Q?qaWFWp74aT3Gsa7ExBNFyVUCyUApU64=3D?= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: ba2e3aa6-ab0f-46a7-7cee-08da295c1e3d X-MS-Exchange-CrossTenant-AuthSource: BLAPR10MB4835.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Apr 2022 21:14:45.8056 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: iP8WcXycWW9T5atJbhnTv96W7BPgyVPk9waK/rWM9xaff0wutaoI84G7MaytB+cSgWnZ4oZFla/4s1DmLsmZScHcZujIkg9NncbjIh/Nz8I= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH0PR10MB5289 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.486, 18.0.858 definitions=2022-04-28_04:2022-04-28, 2022-04-28 signatures=0 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 mlxlogscore=999 mlxscore=0 suspectscore=0 malwarescore=0 spamscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2202240000 definitions=main-2204280125 X-Proofpoint-GUID: ChmZh7ID6gbAqvP6PjPzcXElhtpWDS4v X-Proofpoint-ORIG-GUID: ChmZh7ID6gbAqvP6PjPzcXElhtpWDS4v 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+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.177.32; envelope-from=joao.m.martins@oracle.com; helo=mx0b-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "John G . Johnson" , kvm@vger.kernel.org, "Michael S. Tsirkin" , Jason Wang , Peter Xu , Joao Martins , Eric Blake , Yi Liu , Juan Quintela , David Hildenbrand , Markus Armbruster , Nicolin Chen , Jason Gunthorpe , Kevin Tian , Richard Henderson , "Dr. David Alan Gilbert" , Eric Auger , Alex Williamson , Thanos Makatos , Eduardo Habkost , Yishai Hadas , Cornelia Huck , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.onmicrosoft.com) X-ZM-MESSAGEID: 1651180880627100001 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The ioctl(iommufd, IOAS_UNMAP_DIRTY) performs an unmap of an IOVA range and returns whether or not it was dirty. The kernel atomically clears the IOPTE while telling if the old IOPTE was dirty or not. This in theory is needed for the vIOMMU case to handle a potentially erronous guest PCI device performing DMA on an IOVA that is simultaneous being IOMMU-unmap... to then transfer that dirty page into the destination. Signed-off-by: Joao Martins --- hw/iommufd/iommufd.c | 21 +++++++++++ hw/iommufd/trace-events | 1 + hw/vfio/iommufd.c | 72 +++++++++++++++++++++++++++++++++++- include/hw/iommufd/iommufd.h | 3 ++ 4 files changed, 96 insertions(+), 1 deletion(-) diff --git a/hw/iommufd/iommufd.c b/hw/iommufd/iommufd.c index bc870b5e9b2f..0f7d9f22ae52 100644 --- a/hw/iommufd/iommufd.c +++ b/hw/iommufd/iommufd.c @@ -243,6 +243,27 @@ int iommufd_get_dirty_iova(int iommufd, uint32_t hwpt_= id, uint64_t iova, return !ret ? 0 : -errno; } =20 +int iommufd_unmap_dma_dirty(int iommufd, uint32_t ioas, hwaddr iova, + ram_addr_t size, uint64_t page_size, uint64_t = *data) +{ + int ret; + struct iommu_ioas_unmap_dirty unmap =3D { + .size =3D sizeof(unmap), + .ioas_id =3D ioas, + .bitmap =3D { + .iova =3D iova, .length =3D size, + .page_size =3D page_size, .data =3D (__u64 *)data, + }, + }; + + ret =3D ioctl(iommufd, IOMMU_IOAS_UNMAP_DIRTY, &unmap); + trace_iommufd_unmap_dma_dirty(iommufd, ioas, iova, size, page_size, re= t); + if (ret) { + error_report("IOMMU_IOAS_UNMAP_DIRTY failed: %s", strerror(errno)); + } + return !ret ? 0 : -errno; +} + static void iommufd_register_types(void) { qemu_mutex_init(&iommufd_lock); diff --git a/hw/iommufd/trace-events b/hw/iommufd/trace-events index 9fe2cc60c6fe..3e99290a9a77 100644 --- a/hw/iommufd/trace-events +++ b/hw/iommufd/trace-events @@ -11,3 +11,4 @@ iommufd_map_dma(int iommufd, uint32_t ioas, uint64_t iova= , uint64_t size, void * iommufd_copy_dma(int iommufd, uint32_t src_ioas, uint32_t dst_ioas, uint64= _t iova, uint64_t size, bool readonly, int ret) " iommufd=3D%d src_ioas=3D%= d dst_ioas=3D%d iova=3D0x%"PRIx64" size=3D0x%"PRIx64" readonly=3D%d (%d)" iommufd_set_dirty(int iommufd, uint32_t hwpt_id, bool start, int ret) " io= mmufd=3D%d hwpt=3D%d enable=3D%d (%d)" iommufd_get_dirty_iova(int iommufd, uint32_t hwpt_id, uint64_t iova, uint6= 4_t size, uint64_t page_size, int ret) " iommufd=3D%d hwpt=3D%d iova=3D0x%"= PRIx64" size=3D0x%"PRIx64" page_size=3D0x%"PRIx64" (%d)" +iommufd_unmap_dma_dirty(int iommufd, uint32_t ioas, uint64_t iova, uint64_= t size, uint64_t page_size, int ret) " iommufd=3D%d ioas=3D%d iova=3D0x%"PR= Ix64" size=3D0x%"PRIx64" page_size=3D0x%"PRIx64" (%d)" diff --git a/hw/vfio/iommufd.c b/hw/vfio/iommufd.c index 6c12239a40ab..d75ecbf2ae52 100644 --- a/hw/vfio/iommufd.c +++ b/hw/vfio/iommufd.c @@ -36,6 +36,8 @@ #include "exec/ram_addr.h" #include "migration/migration.h" =20 +static bool vfio_devices_all_running_and_saving(VFIOContainer *container); + static bool iommufd_check_extension(VFIOContainer *bcontainer, VFIOContainerFeature feat) { @@ -72,6 +74,36 @@ static int iommufd_copy(VFIOContainer *src, VFIOContaine= r *dst, container_dst->ioas_id, iova, size, readonly); } =20 +static int iommufd_unmap_bitmap(int iommufd, int ioas_id, hwaddr iova, + ram_addr_t size, ram_addr_t translated) +{ + unsigned long *data, pgsize, bitmap_size, pages; + int ret; + + pgsize =3D qemu_real_host_page_size; + pages =3D REAL_HOST_PAGE_ALIGN(size) / qemu_real_host_page_size; + bitmap_size =3D ROUND_UP(pages, sizeof(__u64) * BITS_PER_BYTE) / + BITS_PER_BYTE; + data =3D g_try_malloc0(bitmap_size); + if (!data) { + ret =3D -ENOMEM; + goto err_out; + } + + ret =3D iommufd_unmap_dma_dirty(iommufd, ioas_id, iova, size, pgsize, = data); + if (ret) { + goto err_out; + } + + cpu_physical_memory_set_dirty_lebitmap(data, translated, pages); + + trace_vfio_get_dirty_bitmap(iommufd, iova, size, bitmap_size, translat= ed); + +err_out: + g_free(data); + return ret; +} + static int iommufd_unmap(VFIOContainer *bcontainer, hwaddr iova, ram_addr_t size, IOMMUTLBEntry *iotlb) @@ -79,7 +111,13 @@ static int iommufd_unmap(VFIOContainer *bcontainer, VFIOIOMMUFDContainer *container =3D container_of(bcontainer, VFIOIOMMUFDContainer, o= bj); =20 - /* TODO: Handle dma_unmap_bitmap with iotlb args (migration) */ + if (iotlb && bcontainer->dirty_pages_supported && + vfio_devices_all_running_and_saving(bcontainer)) { + return iommufd_unmap_bitmap(container->iommufd, + container->ioas_id, iova, size, + iotlb->translated_addr); + } + return iommufd_unmap_dma(container->iommufd, container->ioas_id, iova, size); } @@ -367,6 +405,38 @@ static int vfio_device_reset(VFIODevice *vbasedev) return 0; } =20 +static bool vfio_devices_all_running_and_saving(VFIOContainer *bcontainer) +{ + MigrationState *ms =3D migrate_get_current(); + VFIOIOMMUFDContainer *container; + VFIODevice *vbasedev; + VFIOIOASHwpt *hwpt; + + if (!migration_is_setup_or_active(ms->state)) { + return false; + } + + container =3D container_of(bcontainer, VFIOIOMMUFDContainer, obj); + + QLIST_FOREACH(hwpt, &container->hwpt_list, next) { + QLIST_FOREACH(vbasedev, &hwpt->device_list, hwpt_next) { + VFIOMigration *migration =3D vbasedev->migration; + + if (!migration) { + return false; + } + + if ((migration->device_state & VFIO_DEVICE_STATE_SAVING) && + (migration->device_state & VFIO_DEVICE_STATE_RUNNING)) { + continue; + } else { + return false; + } + } + } + return true; +} + static bool vfio_iommufd_devices_all_dirty_tracking(VFIOContainer *bcontai= ner) { MigrationState *ms =3D migrate_get_current(); diff --git a/include/hw/iommufd/iommufd.h b/include/hw/iommufd/iommufd.h index 9b467e57723b..2c58b95d619c 100644 --- a/include/hw/iommufd/iommufd.h +++ b/include/hw/iommufd/iommufd.h @@ -36,5 +36,8 @@ int iommufd_copy_dma(int iommufd, uint32_t src_ioas, uint= 32_t dst_ioas, int iommufd_set_dirty_tracking(int iommufd, uint32_t hwpt_id, bool start); int iommufd_get_dirty_iova(int iommufd, uint32_t hwpt_id, uint64_t iova, ram_addr_t size, uint64_t page_size, uint64_t *= data); +int iommufd_unmap_dma_dirty(int iommufd, uint32_t ioas, hwaddr iova, + ram_addr_t size, uint64_t page_size, + uint64_t *data); bool iommufd_supported(void); #endif /* HW_IOMMUFD_IOMMUFD_H */ --=20 2.17.2 From nobody Mon May 6 05:12:48 2024 Delivered-To: importer2@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+importer2=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=oracle.com); dmarc=fail(p=none dis=none) header.from=oracle.com ARC-Seal: i=2; a=rsa-sha256; t=1651181201; cv=pass; d=zohomail.com; s=zohoarc; b=mcq5W7e0JKMIraWP5M52DIXJxeC3UFe1rp8strUgKi3UyZBgAVFCi48sjAUkOajcJmNgeMhHiPpFTUQmLszSH9IyBnWv3CARCF3GIRX3n9kwea9xYbLs65yare7Bu8Bgmh+qnDMcY9Z7qc90n72BZU9MCyCXTThkJCxcZzcGBmQ= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651181201; h=Content-Type: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=Ycl9bCTfViJUXB4zPoEGRaUlR1GC5CiBqImMZENF1bE=; b=BW65luoG4J1dsuiEIFH0evj70EoT1SvfSBTi6v9fITAA/3CqIivRsyUbhGyfsSzg1Io0ssSl++po4s7kEXcuMP6IX0zsQhVSkewnQRjZgQVnovBnp6thhvmsJPuXtw8nF5zmFc6ieSqNLROPdF6HUtzWKsxoq2GwoctvhMhLCTg= 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+importer2=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=oracle.com); dmarc=fail header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1651181201698535.4374446894614; Thu, 28 Apr 2022 14:26:41 -0700 (PDT) Received: from localhost ([::1]:57660 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nkBeq-0007FM-2o for importer2@patchew.org; Thu, 28 Apr 2022 17:26:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43602) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nkBTY-0001AL-43 for qemu-devel@nongnu.org; Thu, 28 Apr 2022 17:15:00 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:11816) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nkBTV-0005uA-LI for qemu-devel@nongnu.org; Thu, 28 Apr 2022 17:14:59 -0400 Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 23SJ5fta018590; Thu, 28 Apr 2022 21:14:53 GMT Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3fmb5k59ny-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 28 Apr 2022 21:14:53 +0000 Received: from pps.filterd (iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (8.16.1.2/8.16.1.2) with SMTP id 23SL5Cge028520; Thu, 28 Apr 2022 21:14:52 GMT Received: from nam12-mw2-obe.outbound.protection.outlook.com (mail-mw2nam12lp2047.outbound.protection.outlook.com [104.47.66.47]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com with ESMTP id 3fm7w79rpn-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 28 Apr 2022 21:14:52 +0000 Received: from BLAPR10MB4835.namprd10.prod.outlook.com (2603:10b6:208:331::11) by CH0PR10MB5289.namprd10.prod.outlook.com (2603:10b6:610:d8::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5186.14; Thu, 28 Apr 2022 21:14:50 +0000 Received: from BLAPR10MB4835.namprd10.prod.outlook.com ([fe80::b9e5:d1b6:b4be:f9d]) by BLAPR10MB4835.namprd10.prod.outlook.com ([fe80::b9e5:d1b6:b4be:f9d%5]) with mapi id 15.20.5206.013; Thu, 28 Apr 2022 21:14:50 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : content-type : mime-version; s=corp-2021-07-09; bh=Ycl9bCTfViJUXB4zPoEGRaUlR1GC5CiBqImMZENF1bE=; b=FP/9aFsugwFrjcahsTxVWg/RAdjx2yvfDJ9Z1VK/AqK9oS1wF+Lo6Uj1iS9Ip2x4nZG4 Lz87sG43gBzCWnfbiqoNDn0c3Mfhpdc3/8ke8aZOVYEhbAUyO4IUvB7iiz5e4PgCkadd t8Uo9fRhNSB7GXsHy1UTuJn2JJNcLGCsgba16hUrSvqkbNm/5TkksKwOw5yggaA+TMYA zhzmk7BZ9EI8jlnCPeokecw1PmFF746I5Xvkhbtja4ts2Fv64TUQKEtEpYxHK4ATOsfb T/6rO5FHlRMYlFdjCBPGpe21aloWNySJIv8HPvvomoc2C8VlxEQ9mN3L7K8MoaoFcHAY 0w== ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ixSBQukmaVS6NKb9mM9doqzXSWRuFNwb7smIpieKvdMHe/+CpwYHkfVq6nBHbUnAAiYuq21WSdQ85rFmvRJZo0nT4t177tO837HNXvOOohTwcvHoUiksjb/E2woOugyhzQxWIUp1Yww50CCDy8r24PT1miqDYmPp0dyr63fwtBjo6rRN4D3mb7vyOU0fESwWQdG+iHft2rxTabIBW2NRTVdMijuYsZ8Uf1QJHq32i/rhf9pjlQ04u7pGW3DUR3scucoqtTGL1IZQxZ2N/S4yaBcl+98TvLZV6j3h4Ynut6wg7uqFRyMW5maQ9VG3TcruqJWBlsrzFuZZmVjs/tIztA== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Ycl9bCTfViJUXB4zPoEGRaUlR1GC5CiBqImMZENF1bE=; b=egYROaPK+gNVA6oGRWAJKxRB+ZU5ngPJT4NiGA8R8CkteDqiuunV9qLQMYRm2ds8oO7n9LEu1SXWlG98VOxYH78MjffGw4Cf6+nrzmXUdRvwSu9MdhOe0vX/jPZpGAz5AeA8mKZWwkY46VH6YeLgQxBnOu8Sh9EMuaomiKvHdSGOZMENPaxaVDqbfh1N88ro9wMs1bjKHhf1yH3QpBJcNyIPqb9O5wh2c3raRKCh4/9mN1tmFqedvNQUdxKCasXwoHBCQdGMKc0rjgrYHtmfRfFGESictmYPIHb8rMIGokwjndJFT20UmLwzRUYrjHkCzaQS295eVQ9vPpK5fhONGA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Ycl9bCTfViJUXB4zPoEGRaUlR1GC5CiBqImMZENF1bE=; b=GOfvnENJiTkGE2J4QRKushuO2UYu3+YmXjiokMWGadmLoQkt5125jVD9AEe3M46NMErScvOjYKBHNUWkKnDYUk+JpsEi/zfqBrUqSHIkVMaiFJscu4IhZOaHp3tvlzYbD5oFK8Pl1o3jUj/q7bKLbyVdw+fxbdSv+k7i5vSSV0U= From: Joao Martins To: qemu-devel@nongnu.org Subject: [PATCH RFC 09/10] migration/dirtyrate: Expand dirty_bitmap to be tracked separately for devices Date: Thu, 28 Apr 2022 22:13:50 +0100 Message-Id: <20220428211351.3897-10-joao.m.martins@oracle.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20220428211351.3897-1-joao.m.martins@oracle.com> References: <20220428211351.3897-1-joao.m.martins@oracle.com> X-ClientProxiedBy: LO2P265CA0297.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:a5::21) To BLAPR10MB4835.namprd10.prod.outlook.com (2603:10b6:208:331::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 1443a39a-b421-4d11-76b0-08da295c2117 X-MS-TrafficTypeDiagnostic: CH0PR10MB5289:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: YJ8sZapUH7MrnVGq9vohzlqcO30VlhC+eAa4j1UDIWR+/12NmGg3UMNw6yR2AkxnPDqzPQ8OO+/vInArgdB6bwInz2vq44OG/SHAfnfjJAMItJnNn19MVWm1mh0Gw4ifwYtRfP3FmIkMkjusfKwrIZYXn8S0FypDWu7BGuQwq5Wq3UW3xtmxYjd1e60CUMl3IFnumJGKFOVUL08Jwhw/kJWAVC9Oxi9L5USTINPp1OuG5PWBCW4RLPh9rBpY2d63uZo8j0henass0qehZ4FGbbCqMObi3u5nePslJA3kpgn7jOrafcH5fRSci4DBs8trMm7Me4kexs4pHT3gv+iV2ebZVkq0D5tPUbgbCNyQdQ+uUtO/5QXhyuasBuoTcRGQIrHW4rqoFQA/PZr+4+1QwuXr9pNfnIqLJonhn8u562SMjzSTVhnyjyXRtDP4hxkyDRMyeki+66Nd+RqwA3jXKqVk7v01M+8za71wgrbsdsNUYlpCGXzSzm1we3dO2qXdcafxkZit9UOdU2rX7oJLaGt4Aw59ubTYT7shpXOw6SEg0IQqAH1YKaeslE2M/SJSDIcA3RevFkxzK+Nq+Go93fGrK+7Iq3wpdqNKkRz8g1jXbn07TP/I4tyfa4qrpw5OJmGWWNXaDTiZewVr6/TlzRY0hGnuRnC++bsagrNKNe3zzL8yM+NrVqgokpR7rUyIA3YqaDlm8wFsCa+286yGSeqcaibfU0qJkwjtc8UwsAQ= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BLAPR10MB4835.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(366004)(54906003)(186003)(1076003)(30864003)(38350700002)(38100700002)(5660300002)(2616005)(7416002)(103116003)(26005)(316002)(6916009)(36756003)(66946007)(8676002)(66476007)(4326008)(66556008)(8936002)(52116002)(86362001)(6512007)(2906002)(6486002)(508600001)(83380400001)(6506007)(14143004); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?pXNZeBqyIywJnEWLy9AnFUoc1LC9G91ouZSzByDW7P2/dpgqjj4X3D/DimdS?= =?us-ascii?Q?ECbFY8m+bXDm97gJPy80whmFjGHldwARHPYJfnTtP7ucGH8X1iQZYRoOf2/v?= =?us-ascii?Q?z8uOnHrexOuap7D+BNVf2rXqwQSyNJkm2aYEyV304aPHufLrgSJd0i+Tpzyv?= =?us-ascii?Q?qGnQsheSmbuiW6a/fagjv+HiTZ/EHokwGxTrFg+0BcfRklyHTeTGvDCpi12Z?= =?us-ascii?Q?5rr3pciP47YAu3YzKfsVE0V4aNej0mHkC7xP33XNAtHYMCZCAs/kA7D2GI/G?= =?us-ascii?Q?qDRDyEwv3KJgVLr9EbpCMuuGpkUDhHZQbFg+NJCY2Vm8wrFsRqTU9d+NgTXW?= =?us-ascii?Q?Gv7jrskFSbhnlioSmK2STY4oEW8pnkuCpIfXEth3XxwDjXxMlF+kSO0x7Wvu?= =?us-ascii?Q?vlponDOFOcBKVU8V9d8RA9ApVrZ1MU2Onzfm1aklLNIC3aRMkOYxxkOldsfT?= =?us-ascii?Q?ctWyAxUrW678dr39l2I1d1VHYUPI2tgWReEzQIapNK3L3oi6iCOwLL5crmh1?= =?us-ascii?Q?ATuf27mfakRBV5fOgun05xcgIqfiQV2HfY4Fmoe96Px1ybNFF3+NQWgV1n01?= =?us-ascii?Q?JF9a1oOJ/BLRdKcKvjL+jtR8HUCe0H26pHrxiw2PaDA+13Yr42743pVSMS6G?= =?us-ascii?Q?sL+Z32+kgNf1lC8Kpo6pJI6Ewt+vM+3f81h02MT9ae9dj/QJcUOt9c8Sw8Ve?= =?us-ascii?Q?GFBh8m9DPIuJtLDGs/FfPlJsbb/v5wifbPFUZNTDtLCgp9OUHZ2OFqjR/OdH?= =?us-ascii?Q?yeNjjzTkdbMMSDrLSt1O2R34Lr3ck11S3/G4vpaQakgzvwUYZa8WCBKnDTHB?= =?us-ascii?Q?zRQ3NSkalbhJsox1qNjVWTzUfZA8tPgvOAID4HLq28AOeKtV2VHGRFmvapED?= =?us-ascii?Q?jfq9EIsI/sI+vvtpI+w2mF2cfyAZW/H37ne4mDCYewUQKwohRVD/HgrjT7ml?= =?us-ascii?Q?u2x+ZBEfmFSHW7gg5eXfANd2YH4fl11pfOgMtiaptmtjJ3Fc8fkd4sepzyWd?= =?us-ascii?Q?N7dgUcjs/9yd49c0GP/Rtw4yqGE7/NxyVwnoiNW5fgy8d/4T3m9zGPRl0gDv?= =?us-ascii?Q?qRnbR3ic0Zv3KVu5oTKP0CMdS7QJmIDmdNYJJ44mUEjF904lkxRKs3dbiVWY?= =?us-ascii?Q?SAj4Oo0lh4AVQeAUdlF1arqpj8UXJlyvEaG6b4ScwoEQEhzhMd5Y5IxRqXOP?= =?us-ascii?Q?Yz9Eu+fn0aLTqH/6UzPOfLhvYgdFdlpE+9ThHoGD9FehsRgkjXclZPKJ6wMA?= =?us-ascii?Q?PZI3Q2QgZeV3U+UZ8zBVxmgqed/TWBONRyN6qHuLZ41nna5FzH5UpSeSR0Pm?= =?us-ascii?Q?y/eB3FfrXaSNV5R5dG2anC0vLAor7FHhmcoK5CcTrwaTukKBu92KP+sEQ6mD?= =?us-ascii?Q?EmqdKBLDHiHF+ecGFBR9J+WdBo9jbFuQl0BdMQdF+3iauB8Vfmv5xA/yKf34?= =?us-ascii?Q?1aAizGz9cji3PyNZfsiYyItKL6NXo5YRhgYjiy5gajZiw/0Lh1fvPdiNGxDS?= =?us-ascii?Q?kwKj1Pq3GIv4wJfwiXLQGd/CiGP9l6Xr7R8r/vPRNXLcoIFO+WELBWlHh+Y8?= =?us-ascii?Q?YHWSj2ygvZ7ytRQzZMdBb3yCTwA6eeWKUan4DapZmrkli3aBxOnidski3sXS?= =?us-ascii?Q?AkQBJB31b9dG0HGI9nVTWclvjnxWuI2Un0otgwkeY8LpzCAHnzVn98O2Kcmb?= =?us-ascii?Q?KmtHo/oWrCRzkYJ5NexxAIQBfXfOVSA7avwFauwWi/7HWbNp6G+Tj2CkiNqw?= =?us-ascii?Q?vuV/fCSHahIxnyoBx+MhmDnZ2THL2cs=3D?= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1443a39a-b421-4d11-76b0-08da295c2117 X-MS-Exchange-CrossTenant-AuthSource: BLAPR10MB4835.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Apr 2022 21:14:50.1667 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: ICZ5Q6mEeN+EGwNhnQaLFHW6QZkDxuPmFTfCfOeKiPde8KTMZsuQEeLKw4GLMZqF1kPZSTDjrw7Huu87CxYZyQEwd4ey0uNR3LIZeN8p0fs= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH0PR10MB5289 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.486, 18.0.858 definitions=2022-04-28_04:2022-04-28, 2022-04-28 signatures=0 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 spamscore=0 adultscore=0 mlxscore=0 bulkscore=0 suspectscore=0 malwarescore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2202240000 definitions=main-2204280125 X-Proofpoint-GUID: qgvNMg-R-DSmfFP2Uojb43Rf05DEYZZr X-Proofpoint-ORIG-GUID: qgvNMg-R-DSmfFP2Uojb43Rf05DEYZZr 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+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.177.32; envelope-from=joao.m.martins@oracle.com; helo=mx0b-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "John G . Johnson" , kvm@vger.kernel.org, "Michael S. Tsirkin" , Jason Wang , Peter Xu , Joao Martins , Eric Blake , Yi Liu , Juan Quintela , David Hildenbrand , Markus Armbruster , Nicolin Chen , Jason Gunthorpe , Kevin Tian , Richard Henderson , "Dr. David Alan Gilbert" , Eric Auger , Alex Williamson , Thanos Makatos , Eduardo Habkost , Yishai Hadas , Cornelia Huck , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.onmicrosoft.com) X-ZM-MESSAGEID: 1651181203152100001 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Expand dirtyrate measurer that is accessible via HMP calc_dirty_rate or QMP 'calc-dirty-rate' to receive a @scope argument. The scope then restricts the dirty tracking to be done at devices only, while neither enabling or using the KVM (CPU) dirty tracker. The default stays as is i.e. dirty-ring / dirty-bitmap from KVM. This is useful to test, exercise the IOMMU dirty tracker and observe how much a given device is dirtying memory. Signed-off-by: Joao Martins --- accel/kvm/kvm-all.c | 12 +++++++++ hmp-commands.hx | 5 ++-- hw/vfio/container.c | 8 ++++++ hw/vfio/iommufd.c | 4 +++ include/exec/memory.h | 10 +++++++- migration/dirtyrate.c | 59 +++++++++++++++++++++++++++++++++---------- migration/dirtyrate.h | 1 + qapi/migration.json | 15 +++++++++++ softmmu/memory.c | 5 ++++ 9 files changed, 102 insertions(+), 17 deletions(-) diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c index 5f1377ca048c..b4bbe0d20f6e 100644 --- a/accel/kvm/kvm-all.c +++ b/accel/kvm/kvm-all.c @@ -1517,6 +1517,10 @@ static void kvm_log_sync(MemoryListener *listener, { KVMMemoryListener *kml =3D container_of(listener, KVMMemoryListener, l= istener); =20 + if (memory_global_dirty_devices()) { + return; + } + kvm_slots_lock(); kvm_physical_sync_dirty_bitmap(kml, section); kvm_slots_unlock(); @@ -1529,6 +1533,10 @@ static void kvm_log_sync_global(MemoryListener *l) KVMSlot *mem; int i; =20 + if (memory_global_dirty_devices()) { + return; + } + /* Flush all kernel dirty addresses into KVMSlot dirty bitmap */ kvm_dirty_ring_flush(); =20 @@ -1558,6 +1566,10 @@ static void kvm_log_clear(MemoryListener *listener, KVMMemoryListener *kml =3D container_of(listener, KVMMemoryListener, l= istener); int r; =20 + if (memory_global_dirty_devices()) { + return; + } + r =3D kvm_physical_log_clear(kml, section); if (r < 0) { error_report_once("%s: kvm log clear failed: mr=3D%s " diff --git a/hmp-commands.hx b/hmp-commands.hx index 8476277aa9c9..28122d268ea3 100644 --- a/hmp-commands.hx +++ b/hmp-commands.hx @@ -1739,10 +1739,11 @@ ERST =20 { .name =3D "calc_dirty_rate", - .args_type =3D "dirty_ring:-r,dirty_bitmap:-b,second:l,sample_pag= es_per_GB:l?", - .params =3D "[-r] [-b] second [sample_pages_per_GB]", + .args_type =3D "dirty_devices:-d,dirty_ring:-r,dirty_bitmap:-b,se= cond:l,sample_pages_per_GB:l?", + .params =3D "[-d] [-r] [-b] second [sample_pages_per_GB]", .help =3D "start a round of guest dirty rate measurement (us= ing -r to" "\n\t\t\t specify dirty ring as the method of calcul= ation and" + "\n\t\t\t specify devices as the only scope and" "\n\t\t\t -b to specify dirty bitmap as method of ca= lculation)", .cmd =3D hmp_calc_dirty_rate, }, diff --git a/hw/vfio/container.c b/hw/vfio/container.c index 6bc1b8763f75..fff8319c0036 100644 --- a/hw/vfio/container.c +++ b/hw/vfio/container.c @@ -84,6 +84,10 @@ static bool vfio_devices_all_dirty_tracking(VFIOContaine= r *bcontainer) VFIODevice *vbasedev; MigrationState *ms =3D migrate_get_current(); =20 + if (bcontainer->dirty_pages_supported) { + return true; + } + if (!migration_is_setup_or_active(ms->state)) { return false; } @@ -311,6 +315,10 @@ static int vfio_get_dirty_bitmap(VFIOContainer *bconta= iner, uint64_t iova, uint64_t pages; int ret; =20 + if (!memory_global_dirty_devices()) { + return 0; + } + dbitmap =3D g_malloc0(sizeof(*dbitmap) + sizeof(*range)); =20 dbitmap->argsz =3D sizeof(*dbitmap) + sizeof(*range); diff --git a/hw/vfio/iommufd.c b/hw/vfio/iommufd.c index d75ecbf2ae52..4686cc713aac 100644 --- a/hw/vfio/iommufd.c +++ b/hw/vfio/iommufd.c @@ -150,6 +150,10 @@ static int iommufd_get_dirty_bitmap(VFIOContainer *bco= ntainer, uint64_t iova, VFIOIOASHwpt *hwpt; unsigned long *data, page_size, bitmap_size, pages; =20 + if (!memory_global_dirty_devices()) { + return 0; + } + if (!bcontainer->dirty_pages_supported) { return 0; } diff --git a/include/exec/memory.h b/include/exec/memory.h index 4d5997e6bbae..59c1d8bcc495 100644 --- a/include/exec/memory.h +++ b/include/exec/memory.h @@ -69,7 +69,10 @@ static inline void fuzz_dma_read_cb(size_t addr, /* Dirty tracking enabled because measuring dirty rate */ #define GLOBAL_DIRTY_DIRTY_RATE (1U << 1) =20 -#define GLOBAL_DIRTY_MASK (0x3) +/* Dirty tracking enabled because measuring devices dirty rate */ +#define GLOBAL_DIRTY_DIRTY_RATE_DEVICES (1U << 2) + +#define GLOBAL_DIRTY_MASK (0x7) =20 extern unsigned int global_dirty_tracking; =20 @@ -2433,6 +2436,11 @@ void memory_global_dirty_log_start(unsigned int flag= s); */ void memory_global_dirty_log_stop(unsigned int flags); =20 +/** + * memory_global_dirty_devices: check if the scope is just devices + */ +bool memory_global_dirty_devices(void); + void mtree_info(bool flatview, bool dispatch_tree, bool owner, bool disabl= ed); =20 /** diff --git a/migration/dirtyrate.c b/migration/dirtyrate.c index aace12a78764..8c00cb6a3702 100644 --- a/migration/dirtyrate.c +++ b/migration/dirtyrate.c @@ -45,6 +45,8 @@ static int CalculatingState =3D DIRTY_RATE_STATUS_UNSTART= ED; static struct DirtyRateStat DirtyStat; static DirtyRateMeasureMode dirtyrate_mode =3D DIRTY_RATE_MEASURE_MODE_PAGE_SAMPLING; +static DirtyRateScope dirtyrate_scope =3D + DIRTY_RATE_SCOPE_ALL; =20 static int64_t set_sample_page_period(int64_t msec, int64_t initial_time) { @@ -99,6 +101,7 @@ static struct DirtyRateInfo *query_dirty_rate_info(void) info->calc_time =3D DirtyStat.calc_time; info->sample_pages =3D DirtyStat.sample_pages; info->mode =3D dirtyrate_mode; + info->scope =3D dirtyrate_scope; =20 if (qatomic_read(&CalculatingState) =3D=3D DIRTY_RATE_STATUS_MEASURED)= { info->has_dirty_rate =3D true; @@ -406,32 +409,44 @@ static inline void record_dirtypages(DirtyPageRecord = *dirty_pages, } } =20 -static void dirtyrate_global_dirty_log_start(void) +static void dirtyrate_global_dirty_log_start(DirtyRateScope scope) { + unsigned int flags =3D GLOBAL_DIRTY_DIRTY_RATE; + + if (scope =3D=3D DIRTY_RATE_SCOPE_DIRTY_DEVICES) { + flags |=3D GLOBAL_DIRTY_DIRTY_RATE_DEVICES; + } + qemu_mutex_lock_iothread(); - memory_global_dirty_log_start(GLOBAL_DIRTY_DIRTY_RATE); + memory_global_dirty_log_start(flags); qemu_mutex_unlock_iothread(); } =20 -static void dirtyrate_global_dirty_log_stop(void) +static void dirtyrate_global_dirty_log_stop(DirtyRateScope scope) { + unsigned int flags =3D GLOBAL_DIRTY_DIRTY_RATE; + + if (scope =3D=3D DIRTY_RATE_SCOPE_DIRTY_DEVICES) { + flags |=3D GLOBAL_DIRTY_DIRTY_RATE_DEVICES; + } + qemu_mutex_lock_iothread(); memory_global_dirty_log_sync(); - memory_global_dirty_log_stop(GLOBAL_DIRTY_DIRTY_RATE); + memory_global_dirty_log_stop(flags); qemu_mutex_unlock_iothread(); } =20 static int64_t do_calculate_dirtyrate_vcpu(DirtyPageRecord dirty_pages) { - uint64_t memory_size_MB; + uint64_t memory_size_KB; int64_t time_s; uint64_t increased_dirty_pages =3D dirty_pages.end_pages - dirty_pages.start_pages; =20 - memory_size_MB =3D (increased_dirty_pages * TARGET_PAGE_SIZE) >> 20; + memory_size_KB =3D (increased_dirty_pages * TARGET_PAGE_SIZE) >> 10; time_s =3D DirtyStat.calc_time; =20 - return memory_size_MB / time_s; + return memory_size_KB / time_s; } =20 static inline void record_dirtypages_bitmap(DirtyPageRecord *dirty_pages, @@ -466,9 +481,14 @@ static void calculate_dirtyrate_dirty_bitmap(struct Di= rtyRateConfig config) int64_t msec =3D 0; int64_t start_time; DirtyPageRecord dirty_pages; + unsigned int flags =3D GLOBAL_DIRTY_DIRTY_RATE; + + if (config.scope =3D=3D DIRTY_RATE_SCOPE_DIRTY_DEVICES) { + flags |=3D GLOBAL_DIRTY_DIRTY_RATE_DEVICES; + } =20 qemu_mutex_lock_iothread(); - memory_global_dirty_log_start(GLOBAL_DIRTY_DIRTY_RATE); + memory_global_dirty_log_start(flags); =20 /* * 1'round of log sync may return all 1 bits with @@ -500,7 +520,7 @@ static void calculate_dirtyrate_dirty_bitmap(struct Dir= tyRateConfig config) * 1. fetch dirty bitmap from kvm * 2. stop dirty tracking */ - dirtyrate_global_dirty_log_stop(); + dirtyrate_global_dirty_log_stop(config.scope); =20 record_dirtypages_bitmap(&dirty_pages, false); =20 @@ -527,7 +547,7 @@ static void calculate_dirtyrate_dirty_ring(struct Dirty= RateConfig config) DirtyStat.dirty_ring.nvcpu =3D nvcpu; DirtyStat.dirty_ring.rates =3D malloc(sizeof(DirtyRateVcpu) * nvcpu); =20 - dirtyrate_global_dirty_log_start(); + dirtyrate_global_dirty_log_start(config.scope); =20 CPU_FOREACH(cpu) { record_dirtypages(dirty_pages, cpu, true); @@ -540,7 +560,7 @@ static void calculate_dirtyrate_dirty_ring(struct Dirty= RateConfig config) msec =3D set_sample_page_period(msec, start_time); DirtyStat.calc_time =3D msec / 1000; =20 - dirtyrate_global_dirty_log_stop(); + dirtyrate_global_dirty_log_stop(config.scope); =20 CPU_FOREACH(cpu) { record_dirtypages(dirty_pages, cpu, false); @@ -631,6 +651,8 @@ void *get_dirtyrate_thread(void *arg) void qmp_calc_dirty_rate(int64_t calc_time, bool has_sample_pages, int64_t sample_pages, + bool has_scope, + DirtyRateScope scope, bool has_mode, DirtyRateMeasureMode mode, Error **errp) @@ -701,6 +723,7 @@ void qmp_calc_dirty_rate(int64_t calc_time, config.sample_period_seconds =3D calc_time; config.sample_pages_per_gigabytes =3D sample_pages; config.mode =3D mode; + config.scope =3D scope; =20 cleanup_dirtyrate_stat(config); =20 @@ -709,6 +732,7 @@ void qmp_calc_dirty_rate(int64_t calc_time, * been used in last calculation **/ dirtyrate_mode =3D mode; + dirtyrate_scope =3D scope; =20 start_time =3D qemu_clock_get_ms(QEMU_CLOCK_REALTIME) / 1000; init_dirtyrate_stat(start_time, config); @@ -736,9 +760,11 @@ void hmp_info_dirty_rate(Monitor *mon, const QDict *qd= ict) info->calc_time); monitor_printf(mon, "Mode: %s\n", DirtyRateMeasureMode_str(info->mode)); + monitor_printf(mon, "Scope: %s\n", + DirtyRateScope_str(info->scope)); monitor_printf(mon, "Dirty rate: "); if (info->has_dirty_rate) { - monitor_printf(mon, "%"PRIi64" (MB/s)\n", info->dirty_rate); + monitor_printf(mon, "%"PRIi64" (KB/s)\n", info->dirty_rate); if (info->has_vcpu_dirty_rate) { DirtyRateVcpuList *rate, *head =3D info->vcpu_dirty_rate; for (rate =3D head; rate !=3D NULL; rate =3D rate->next) { @@ -762,7 +788,9 @@ void hmp_calc_dirty_rate(Monitor *mon, const QDict *qdi= ct) bool has_sample_pages =3D (sample_pages !=3D -1); bool dirty_ring =3D qdict_get_try_bool(qdict, "dirty_ring", false); bool dirty_bitmap =3D qdict_get_try_bool(qdict, "dirty_bitmap", false); + bool dirty_devices =3D qdict_get_try_bool(qdict, "dirty_devices", fals= e); DirtyRateMeasureMode mode =3D DIRTY_RATE_MEASURE_MODE_PAGE_SAMPLING; + DirtyRateScope scope =3D DIRTY_RATE_SCOPE_ALL; Error *err =3D NULL; =20 if (!sec) { @@ -781,9 +809,12 @@ void hmp_calc_dirty_rate(Monitor *mon, const QDict *qd= ict) } else if (dirty_ring) { mode =3D DIRTY_RATE_MEASURE_MODE_DIRTY_RING; } + if (dirty_devices) { + scope =3D DIRTY_RATE_SCOPE_DIRTY_DEVICES; + } =20 - qmp_calc_dirty_rate(sec, has_sample_pages, sample_pages, true, - mode, &err); + qmp_calc_dirty_rate(sec, has_sample_pages, sample_pages, + true, scope, true, mode, &err); if (err) { hmp_handle_error(mon, err); return; diff --git a/migration/dirtyrate.h b/migration/dirtyrate.h index 69d4c5b8655f..4061edf9f4de 100644 --- a/migration/dirtyrate.h +++ b/migration/dirtyrate.h @@ -44,6 +44,7 @@ struct DirtyRateConfig { uint64_t sample_pages_per_gigabytes; /* sample pages per GB */ int64_t sample_period_seconds; /* time duration between two sampling */ DirtyRateMeasureMode mode; /* mode of dirtyrate measurement */ + DirtyRateScope scope; /* scope of dirtyrate measurement */ }; =20 /* diff --git a/qapi/migration.json b/qapi/migration.json index 27d7b281581d..082830c6e771 100644 --- a/qapi/migration.json +++ b/qapi/migration.json @@ -1793,6 +1793,19 @@ { 'enum': 'DirtyRateMeasureMode', 'data': ['page-sampling', 'dirty-ring', 'dirty-bitmap'] } =20 +## +# @DirtyRateScope: +# +# An enumeration of scope of measuring dirtyrate. +# +# @dirty-devices: calculate dirtyrate by devices only. +# +# Since: 6.2 +# +## +{ 'enum': 'DirtyRateScope', + 'data': ['all', 'dirty-devices'] } + ## # @DirtyRateInfo: # @@ -1827,6 +1840,7 @@ 'calc-time': 'int64', 'sample-pages': 'uint64', 'mode': 'DirtyRateMeasureMode', + 'scope': 'DirtyRateScope', '*vcpu-dirty-rate': [ 'DirtyRateVcpu' ] } } =20 ## @@ -1851,6 +1865,7 @@ ## { 'command': 'calc-dirty-rate', 'data': {'calc-time': 'int64', '*sample-pages': 'int', + '*scope': 'DirtyRateScope', '*mode': 'DirtyRateMeasureMode'} } =20 ## diff --git a/softmmu/memory.c b/softmmu/memory.c index bfa5d5178c5b..120c41f3b303 100644 --- a/softmmu/memory.c +++ b/softmmu/memory.c @@ -2826,6 +2826,11 @@ void memory_global_dirty_log_start(unsigned int flag= s) } } =20 +bool memory_global_dirty_devices(void) +{ + return !!(global_dirty_tracking & GLOBAL_DIRTY_DIRTY_RATE_DEVICES); +} + static void memory_global_dirty_log_do_stop(unsigned int flags) { assert(flags && !(flags & (~GLOBAL_DIRTY_MASK))); --=20 2.17.2 From nobody Mon May 6 05:12:48 2024 Delivered-To: importer2@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+importer2=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=oracle.com); dmarc=fail(p=none dis=none) header.from=oracle.com ARC-Seal: i=2; a=rsa-sha256; t=1651180683; cv=pass; d=zohomail.com; s=zohoarc; b=T3Av44hHWZ042upodNdJGnd0rygTDN/IhXIrZ7uMgk10++Q2Tnju8+qfnv6b4JEHkDQkaEolZKhVO5k5x+chjrdsnbmYg8ZsESXsRO4ZUulVXzFYvgeIxludu0junGir7RCr8k+lN1iMoDYGu50RiqsttjofZW/VE/6iuR5FwaQ= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651180683; h=Content-Type: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=uLQ3pNyCklPet7NMJWxmx5V7hT41k/68i3XrBGB8yQI=; b=IgIhOPkfB7lIXFBMKPWtAVu1ocqF5W8yqIJzOG69lJpuPHW4nCFnid6XJsCF5GTE6EW1PfiSyWTrNe8WLtfvlafdfaHmws9LVSu5ssZ5Ha3i694mG+czPsR6K2CCwyKvozqUhx7TSeWuSi2IJxZxarjTw5phWZ8i8IyyElKjY0A= 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+importer2=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=oracle.com); dmarc=fail header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1651180683837763.8219634733845; Thu, 28 Apr 2022 14:18:03 -0700 (PDT) Received: from localhost ([::1]:41392 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nkBWU-0004Oj-Ml for importer2@patchew.org; Thu, 28 Apr 2022 17:18:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43634) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nkBTc-0001KK-5R for qemu-devel@nongnu.org; Thu, 28 Apr 2022 17:15:04 -0400 Received: from mx0b-00069f02.pphosted.com ([205.220.177.32]:19326) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nkBTa-0005vQ-1R for qemu-devel@nongnu.org; Thu, 28 Apr 2022 17:15:03 -0400 Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 23SJeCYB011361; Thu, 28 Apr 2022 21:14:58 GMT Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3fmaw4nbag-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 28 Apr 2022 21:14:57 +0000 Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.16.1.2/8.16.1.2) with SMTP id 23SL6cfF028671; Thu, 28 Apr 2022 21:14:57 GMT Received: from nam12-mw2-obe.outbound.protection.outlook.com (mail-mw2nam12lp2045.outbound.protection.outlook.com [104.47.66.45]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com with ESMTP id 3fp5ypebx4-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 28 Apr 2022 21:14:57 +0000 Received: from BLAPR10MB4835.namprd10.prod.outlook.com (2603:10b6:208:331::11) by CH0PR10MB5289.namprd10.prod.outlook.com (2603:10b6:610:d8::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5186.14; Thu, 28 Apr 2022 21:14:54 +0000 Received: from BLAPR10MB4835.namprd10.prod.outlook.com ([fe80::b9e5:d1b6:b4be:f9d]) by BLAPR10MB4835.namprd10.prod.outlook.com ([fe80::b9e5:d1b6:b4be:f9d%5]) with mapi id 15.20.5206.013; Thu, 28 Apr 2022 21:14:54 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : content-type : mime-version; s=corp-2021-07-09; bh=uLQ3pNyCklPet7NMJWxmx5V7hT41k/68i3XrBGB8yQI=; b=vDwv9sz7CjI8Bx6tpp/alrhiiQQz2n3gJk/ps+ZiAJ1Fy83pSIwvQDF3F/9Ny/i3/zQD PUEvACSFlhGwSjfsrEmLsQsGpyShD64cJ/17twbrcpz7qt8ToXssdEm5QGtS3lP5q/i/ 2BLZnquYIXuXV7tZBPMhc5mkv8kxVjCsVEYyuvgdYZWwUMWMm84R/Z4zJBspcJ1DI5Ib dA4hjvnEDw9GiQL/+YuRV7ilmRO7DK19RNQSTYvnTR5jZXaiALGsyzm2xvVD0vOSESjb WosNwxVwpYV6kr88NE3xmBlYLuZr4QrPgQPAM/bvrHWP6Pm2SwkwsrelGZPRU5pwc8fg 4w== ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=EH4KbKjF9KtnX5bjAEZgmkkZVVc+Ulz/YMcn643Gk8D++WZWJxfZANhJPnGGxX++6NQJSp0ApnixTl+M0A37wevHrr2MduQCvoLxevxQ7pPr2u/KqBL20wrSiGZiEplH7+1Ygc83K1qlHdcGKurW4McYwZJISo8+QugtJxT6SqyG4mLvgmhtkLAcS6C0A5DU3uj9SzeToCOF2iFMd7Z+sG+SeE1a82bmfe6C+RcDBM4RHFWUQ7xPfD29CxZjZVSZTh6Pl9SAW6Qe0bhUK8J2kaCT22qeoXoNCe9JkzNVey6+/QjDe9Foc+VMr/XUfzsg0XrYiLiKznlXHf8q5GHFzQ== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=uLQ3pNyCklPet7NMJWxmx5V7hT41k/68i3XrBGB8yQI=; b=RFDLnXeLF2JzyqKwL7cLgi9QCGxlXKUviHWJKWYSRcnaGd4oow161v7+mRaUHGLP9Sd5Yg2ABIsL0ASGRZ3h0q2nWNZ0yapGME80jRXp99Zllm28ywEOmD8gJDd8iVAFRfhHC1RZCKwT4NQXFfovBYIARr9RELwHW3SoKe69t0pDgZiKguu2VpCWEtj0sigXgrFeMKAQVmCkO7+6My/S5nLxHe0jT+lXGm0p+iM6Q2gcZJPhy6J5TnLtqTlON5DHLjfoqXWdo7Uz9rFhZVwvqE+5VyewyJq0KKcZ1eNGPCX8H+RE6Bfe5zxm5nV0FyQwk8R8tBO+cgUOM/+cjLlaAg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=uLQ3pNyCklPet7NMJWxmx5V7hT41k/68i3XrBGB8yQI=; b=x5yb0uo9bGg2vUaxT/m1db0TasKzr5LbcW40Bps6rzknV2OSkppIA8LBJXSL3OnBdYjfIGLultMxboWc+0j8HynyeKzD0ACOPAVa080dpYf7MJJCK4Rz14FoFKIGBfnXzTJlNbdwM366+iS7+/dtv2EoxvA1C+cf/eVhlHICo58= From: Joao Martins To: qemu-devel@nongnu.org Subject: [PATCH RFC 10/10] hw/vfio: Add nr of dirty pages to tracepoints Date: Thu, 28 Apr 2022 22:13:51 +0100 Message-Id: <20220428211351.3897-11-joao.m.martins@oracle.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20220428211351.3897-1-joao.m.martins@oracle.com> References: <20220428211351.3897-1-joao.m.martins@oracle.com> X-ClientProxiedBy: LO2P265CA0297.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:a5::21) To BLAPR10MB4835.namprd10.prod.outlook.com (2603:10b6:208:331::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a6060bcd-ceaa-4e87-f9f1-08da295c239d X-MS-TrafficTypeDiagnostic: CH0PR10MB5289:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 9dH8wcFjuNCNffm5kVkShr2F4Z5wQnG7dZWa/KmKnv4bG3hGFUPUgU41OEiQrVuucSRhATWdB+5dKwiD5t7xYcxRZx52rrjjNUk65A+aZtsOBVE225V9QaUdsZeF+DGtG5BaGd6e/B/ffnEbwCLBK/mkKqS0qGtSIZF+O28OHfrDm9QeoOrF6Xzdda1tuxsS7ftAzvr5GN3YP9tll7Z9bfqxUCtGS5vjbNiWY4PtmiG1hcLXm3/B2LDp9AMOB9RLcxRpE+z6cL6HPTAwQqBcpoRxW/0LaFFQn4rnXZTQK8obGCQFzfEPk8HrQpxGcYoKnKqqJyHNKGRxPcOhOxbPOVjhs1AzWFSmqEKRDLgB1CEAu5K4HZRE41Zd60l2hnUDMO3f0XUtTnSn4FqMWAg6N2xUCY5sMJ8SbH8OXdRXRu/GuhLjzg1S+FvfGffTaPNeEqp2g1chtLLcPWnDA8PtCqHsIi/SFEiuYi2KM7kiH2IaN/4sCblOJbLgdTEmmmxVTRhla27V6M9PJBZfnwYrRogxdP/8zOoc6bllg1x4Vu6jNlADvz5+gXflbdKcfth+LAcbatm2QkX8wFwElFxUcskJPYPelG/bK9iEEUTLf28Y1izS0odwqGz0YYCEB9/oba1nsUGtJSMWJKioJ4vfOWbwGtKtixVvluvcVjsfD3TImzZMtPY6jM847yHmOrGNkonawhOKqk05hr6rt+Tuyeznt9phvY6z3Dhtg7M9nU8= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BLAPR10MB4835.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(366004)(6666004)(54906003)(186003)(1076003)(38350700002)(38100700002)(5660300002)(2616005)(7416002)(103116003)(26005)(316002)(6916009)(36756003)(66946007)(8676002)(66476007)(4326008)(66556008)(8936002)(52116002)(86362001)(6512007)(2906002)(6486002)(508600001)(83380400001)(6506007)(14143004); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?1FTa4BeeUv2/FdTO10R/a6pqaLmW0gP0mDZ0SNEzJiv+MlriOKuTS54ZdI4h?= =?us-ascii?Q?zwqgKKmhRE0M2kv1WLaDNfVo3i/mrnLEv3mPXLDKqrUk41BGOeBeCf5+UP3w?= =?us-ascii?Q?m6DAk8U10LWReYViUr7fNeJdYD5Vd8bvMW9Ph3PhLfRp6dTt/IgVOproPfkn?= =?us-ascii?Q?9aAI51LchHq45OwcKe1d2oDvzXwYjEeI3Xc5T82iNjEULbDMqb/YBiXVLPQP?= =?us-ascii?Q?n9QSBLRZOEmGoZLfGGhYwdYwNAlvz7umtXD7vx8ZJZZh0iSyhn4TuD1kdG0b?= =?us-ascii?Q?OS/YmcKDOHkN0Jt21+RX8C7tPLCox7v7VmeTDGCe0Rb0y9vdnU5zayBjhdHH?= =?us-ascii?Q?rA0FykgjR892KF5rQjjksz+45iXzC0T7vXP0C0XnDFumyIh7ro7M/rehmuV9?= =?us-ascii?Q?m/0XQwVwvO2gElKv5PYvdyeL1qh7qXKjbFLg2rsfP7FeGM7NiMlGrImssJkr?= =?us-ascii?Q?FkbA+RVX6Zhdce+wKZT0WI8Tr7pL+gn+HBdwuy1DPY3z2/AqvoPv8/rduLyN?= =?us-ascii?Q?fcRmHz4Sjzna0ylm/PqkNlRitKpGD+M2vCaFlV5bs3l9jyZlMipvnhfi0MY2?= =?us-ascii?Q?10c3pQ2Tatcb3GNBc0+ztKRTC/BgnlhzmPm6ar4TZ8j8j8Y7xHsfccS3aMYR?= =?us-ascii?Q?fFwsqXeRayf101/ZqpbkQbpzYIdc2j5hWwtbSvuCEwV8SHDFl22ORIomACG1?= =?us-ascii?Q?aQG5arA6NtLPZwZyc1GNQ1GmExXfERzqxiiAnSc+/k0UWomcygkzxhDw4ax1?= =?us-ascii?Q?1namOpyYY0gdDRg3avJtaMFftOHjATVGSEekBwIhZP7hy+etIcNitlRnXjy1?= =?us-ascii?Q?pQ7vmmRAsnaNFdo4wi8mx2xQiQwiFBPzJu/FHJth4Krmpv9A1S2YT5smkrWr?= =?us-ascii?Q?a078jX6+g0R+ig/UhYes4zj6VTbL8RNjjuF6dhjvahHNe0dTyEI4UZRojafL?= =?us-ascii?Q?nqCvjK4/dnGmnNKbokrgyRUEr7u+rvdt7tw1+2Rs+YCVH2ZzeOakFnkLWd5a?= =?us-ascii?Q?gJdivGYp7ZvcwpqxQMp2Vc56vLNKp94uBU9p2wk+vIRH91qbSRUzj1Wk5aWr?= =?us-ascii?Q?twcSIthOZcuhj7iAWFfhfH5JJGaGxDn2xnViLBK9pc8VdXlfy3usFkluTGSE?= =?us-ascii?Q?aN3N3DaeJUfCB0s8fKEldnhe+VtKFmg0ae2rT6VhOl68KY5jhMmWB3uYpK8A?= =?us-ascii?Q?nw9DiXcYLH/Av/ux9ZbznYpNCreiBhWMcrtUaUlAuFq+d1KhYz60wUMv+lPP?= =?us-ascii?Q?pazUqjVjgM83Q1dlmEsmcH/irW08XFHB5H0QxXdocm29rWcTaNksnvqq8WN3?= =?us-ascii?Q?Dxx+DQqsg3fSZ/hmTyY2OTfAgL2k8+t5AvbE2g6jzSQCIwiKwvsUfg5Bwq1Q?= =?us-ascii?Q?l/GbTnHoyUu5D/0MmFZdYCTBxouG6hq5a7P6gI5C+VL9cmK1Aq+RmMWWpA2t?= =?us-ascii?Q?NGKGgkLDRcD0HXfS1v6Y+OTG0t3gVtfimU8hTFx8XbUERKWI0GWuh/vO2JcE?= =?us-ascii?Q?9ePBm6sm/kqGrULCVYlL54yVVkIjEmat1hnOWA9JjjHqJxAOMR4ZyJxD1mvm?= =?us-ascii?Q?xnWcQBmZTP6r/VvaTIl22NuQCoF8374BKggDbeevV1mWIblou0uv09wo7RTx?= =?us-ascii?Q?WhhN1CVH6aS4Zd45spvVOQuncqPhz4uOwjP4SIhhGIGVtisp752Tk7ibvVtW?= =?us-ascii?Q?xz7kuX3TIGuhNeBelMkfr02pq6zM8dxROh2mWu45j1OVi6aQF0NDyr6Hn6n/?= =?us-ascii?Q?lvEg9W19IEVv6xwl4xPgxpFqwAB4GFA=3D?= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: a6060bcd-ceaa-4e87-f9f1-08da295c239d X-MS-Exchange-CrossTenant-AuthSource: BLAPR10MB4835.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Apr 2022 21:14:54.3099 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: HqdFJXXcfimt8uvEtBvwBZAPw/KhOJ/6EzK5E+8bkrw3jxrP+qeLUBSsS3dXaFaOmu6cKP5O5H/GTooZ4m05FRyHWrFIP2qs9eZskABhl9I= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH0PR10MB5289 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.486, 18.0.858 definitions=2022-04-28_04:2022-04-28, 2022-04-28 signatures=0 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 mlxlogscore=999 mlxscore=0 suspectscore=0 malwarescore=0 spamscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2202240000 definitions=main-2204280125 X-Proofpoint-GUID: 1v2Bot937BZeU0lKtC6tyEDrGWiC92O2 X-Proofpoint-ORIG-GUID: 1v2Bot937BZeU0lKtC6tyEDrGWiC92O2 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+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.220.177.32; envelope-from=joao.m.martins@oracle.com; helo=mx0b-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "John G . Johnson" , kvm@vger.kernel.org, "Michael S. Tsirkin" , Jason Wang , Peter Xu , Joao Martins , Eric Blake , Yi Liu , Juan Quintela , David Hildenbrand , Markus Armbruster , Nicolin Chen , Jason Gunthorpe , Kevin Tian , Richard Henderson , "Dr. David Alan Gilbert" , Eric Auger , Alex Williamson , Thanos Makatos , Eduardo Habkost , Yishai Hadas , Cornelia Huck , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Paolo Bonzini Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.onmicrosoft.com) X-ZM-MESSAGEID: 1651180686011100003 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Print the number of dirty pages after calling cpu_physical_memory_set_lebitmap() on the vfio_get_dirty_bitmap tracepoint. Additionally, print the number of dirty pages to capture the unmap case under a new tracepoint called vfio_set_dirty_pages. Signed-off-by: Joao Martins --- hw/vfio/container.c | 12 +++++++++--- hw/vfio/iommufd.c | 10 ++++++---- hw/vfio/trace-events | 3 ++- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/hw/vfio/container.c b/hw/vfio/container.c index fff8319c0036..b17d3499d9a1 100644 --- a/hw/vfio/container.c +++ b/hw/vfio/container.c @@ -146,6 +146,7 @@ static int vfio_dma_unmap_bitmap(VFIOLegacyContainer *c= ontainer, struct vfio_iommu_type1_dma_unmap *unmap; struct vfio_bitmap *bitmap; uint64_t pages =3D REAL_HOST_PAGE_ALIGN(size) / qemu_real_host_page_si= ze; + uint64_t dirty; int ret; =20 unmap =3D g_malloc0(sizeof(*unmap) + sizeof(*bitmap)); @@ -181,8 +182,11 @@ static int vfio_dma_unmap_bitmap(VFIOLegacyContainer *= container, =20 ret =3D ioctl(container->fd, VFIO_IOMMU_UNMAP_DMA, unmap); if (!ret) { + dirty =3D total_dirty_pages; cpu_physical_memory_set_dirty_lebitmap((unsigned long *)bitmap->da= ta, iotlb->translated_addr, pages); + trace_vfio_set_dirty_pages(container->fd, iova, size, + total_dirty_pages - dirty); } else { error_report("VFIO_UNMAP_DMA with DIRTY_BITMAP : %m"); } @@ -312,7 +316,7 @@ static int vfio_get_dirty_bitmap(VFIOContainer *bcontai= ner, uint64_t iova, VFIOLegacyContainer, obj= ); struct vfio_iommu_type1_dirty_bitmap *dbitmap; struct vfio_iommu_type1_dirty_bitmap_get *range; - uint64_t pages; + uint64_t pages, dirty; int ret; =20 if (!memory_global_dirty_devices()) { @@ -351,11 +355,13 @@ static int vfio_get_dirty_bitmap(VFIOContainer *bcont= ainer, uint64_t iova, goto err_out; } =20 + + dirty =3D total_dirty_pages; cpu_physical_memory_set_dirty_lebitmap((unsigned long *)range->bitmap.= data, ram_addr, pages); - trace_vfio_get_dirty_bitmap(container->fd, range->iova, range->size, - range->bitmap.size, ram_addr); + range->bitmap.size, ram_addr, + total_dirty_pages - dirty); err_out: g_free(range->bitmap.data); g_free(dbitmap); diff --git a/hw/vfio/iommufd.c b/hw/vfio/iommufd.c index 4686cc713aac..461030bb7135 100644 --- a/hw/vfio/iommufd.c +++ b/hw/vfio/iommufd.c @@ -77,7 +77,7 @@ static int iommufd_copy(VFIOContainer *src, VFIOContainer= *dst, static int iommufd_unmap_bitmap(int iommufd, int ioas_id, hwaddr iova, ram_addr_t size, ram_addr_t translated) { - unsigned long *data, pgsize, bitmap_size, pages; + unsigned long *data, pgsize, bitmap_size, pages, dirty; int ret; =20 pgsize =3D qemu_real_host_page_size; @@ -95,9 +95,10 @@ static int iommufd_unmap_bitmap(int iommufd, int ioas_id= , hwaddr iova, goto err_out; } =20 + dirty =3D total_dirty_pages; cpu_physical_memory_set_dirty_lebitmap(data, translated, pages); =20 - trace_vfio_get_dirty_bitmap(iommufd, iova, size, bitmap_size, translat= ed); + trace_vfio_set_dirty_pages(iommufd, iova, size, total_dirty_pages - di= rty); =20 err_out: g_free(data); @@ -148,7 +149,7 @@ static int iommufd_get_dirty_bitmap(VFIOContainer *bcon= tainer, uint64_t iova, VFIOIOMMUFDContainer, o= bj); int ret; VFIOIOASHwpt *hwpt; - unsigned long *data, page_size, bitmap_size, pages; + unsigned long *data, page_size, bitmap_size, pages, dirty; =20 if (!memory_global_dirty_devices()) { return 0; @@ -176,10 +177,11 @@ static int iommufd_get_dirty_bitmap(VFIOContainer *bc= ontainer, uint64_t iova, } } =20 + dirty =3D total_dirty_pages; cpu_physical_memory_set_dirty_lebitmap(data, ram_addr, pages); =20 trace_vfio_get_dirty_bitmap(container->iommufd, iova, size, bitmap_siz= e, - ram_addr); + ram_addr, total_dirty_pages - dirty); =20 err_out: g_free(data); diff --git a/hw/vfio/trace-events b/hw/vfio/trace-events index 51f04b0b80b8..c8d6348469aa 100644 --- a/hw/vfio/trace-events +++ b/hw/vfio/trace-events @@ -163,7 +163,8 @@ vfio_load_device_config_state(const char *name) " (%s)" vfio_load_state(const char *name, uint64_t data) " (%s) data 0x%"PRIx64 vfio_load_state_device_data(const char *name, uint64_t data_offset, uint64= _t data_size) " (%s) Offset 0x%"PRIx64" size 0x%"PRIx64 vfio_load_cleanup(const char *name) " (%s)" -vfio_get_dirty_bitmap(int fd, uint64_t iova, uint64_t size, uint64_t bitma= p_size, uint64_t start) "container fd=3D%d, iova=3D0x%"PRIx64" size=3D 0x%"= PRIx64" bitmap_size=3D0x%"PRIx64" start=3D0x%"PRIx64 +vfio_get_dirty_bitmap(int fd, uint64_t iova, uint64_t size, uint64_t bitma= p_size, uint64_t start, uint64_t dirty) "container fd=3D%d, iova=3D0x%"PRIx= 64" size=3D 0x%"PRIx64" bitmap_size=3D0x%"PRIx64" start=3D0x%"PRIx64" dirty= =3D%"PRIu64 +vfio_set_dirty_pages(int fd, uint64_t iova, uint64_t size, uint64_t nr_pag= es) "container fd=3D%d, iova=3D0x%"PRIx64" size=3D0x%"PRIx64" nr_pages=3D%"= PRIu64 vfio_iommu_map_dirty_notify(uint64_t iova_start, uint64_t iova_end) "iommu= dirty @ 0x%"PRIx64" - 0x%"PRIx64 =20 #iommufd.c --=20 2.17.2