From nobody Tue Feb 10 06:08:34 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=oracle.com); dmarc=fail(p=none dis=none) header.from=oracle.com ARC-Seal: i=2; a=rsa-sha256; t=1651181019; cv=pass; d=zohomail.com; s=zohoarc; b=dOPNsRVGY3XbgX6XFHfLf7KGuF30xiu9QU9KxOWJJwa8l/7VSVfkI80Z9lDntjdqecDGKHSXHbsCYsvqRHs4jUTJhqXUJRyLwilaV39zr9bhyAnUmKs5RE6wJU7sIAHWPqSLi/VA8tbf11ylvAu5dbseT2hmJnhNJ1cwooqfT/E= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1651181019; 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=Ob7/NMiTPzwucb2/KEMq0+KqisjNX4bxIjmirzxPuToOURRhHf1q3ilsPBElPVE8yQ01ZgGTorIMG1lwHoTz+BcQ93daZZkDmk9tVna9n0RYEft8QfvMsHKzTyt+bLTgf2SaGk4HEBgh6Dizno6MJC1z0HgCzuRcCesRkuJeD/Y= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=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 165118101925473.0252963802078; Thu, 28 Apr 2022 14:23:39 -0700 (PDT) Received: from localhost ([::1]:53336 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nkBbu-0004Fi-1B for importer@patchew.org; Thu, 28 Apr 2022 17:23:38 -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+importer=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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @oracle.onmicrosoft.com) X-ZM-MESSAGEID: 1651181019521100001 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