From nobody Mon Dec 1 22:36:16 2025 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.14]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 17109253F05; Thu, 27 Nov 2025 09:39:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=198.175.65.14 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764236394; cv=fail; b=X5fr09TvH5ylCA1rbeXTsBhkAEfLDbE1/9ACH5vZ+6YFf6i0paI0rynCIBxWby0N/FMLekcGkOCwPwiXYQSGnawHW7f5SAOtiO8RNg8+sABL5ZGXuVG9bwyIrWNcv0An53Xew9TKb83OXP1mVJPt+rEujiHGN1w1epeOM9FOkxg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764236394; c=relaxed/simple; bh=FBCEuPcMmp5CwCGYtZgiX+MHel7JbPx56FEdLNeDg20=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=C60bfn/jzVQ30WOcVNAT8i/m12Xs/Foa3YY/N7dIb+CA7qFJXJLzf40LJkRtO8jHas8JZIy+0OqAmjWE344NCR9338aetl9zUVya6XNRko7BBGD4fCSECUpj3XORcvzPTXv5mhU9GHcQ1HVuZsJwVwzfINXYTp/wpUZQaeiaPnQ= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=WCwy8Sh3; arc=fail smtp.client-ip=198.175.65.14 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="WCwy8Sh3" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1764236393; x=1795772393; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=FBCEuPcMmp5CwCGYtZgiX+MHel7JbPx56FEdLNeDg20=; b=WCwy8Sh3oerRzpbJarQrNnoRyFl2r0YpIBxLr1mz67xWFze0FPDRjyQD IkXYR5lgPCS6Zq4o4BO49ciClklEdG7Q/PDtv+Dj0LZOxe4qH2e80f2a2 LdkGEuf8QwC0TAU147HsuDX0MUBecL9evMrysLTvDmf9SPKYFDb9m9SQe fI3G5cWpOvAjKLuEw6xZ/E5OS43WngjgVI1LQOEDB5iEiGSV3Iv6wUR5y oClGj6eS8L0Sa9gIn9ptkd7wC/YRkaC8VfIpJVC/BWmrrwJqebH5Aia3c FA3qPDxB8pKkUM2D6eupgFa5InQ9q59NEpmfJm+diewj82xEZA4gXFS53 g==; X-CSE-ConnectionGUID: 6JD7VmeWSaKZO3zU8+FEHA== X-CSE-MsgGUID: qalookTLS7aZ4cP1ulMEgQ== X-IronPort-AV: E=McAfee;i="6800,10657,11625"; a="70148376" X-IronPort-AV: E=Sophos;i="6.20,230,1758610800"; d="scan'208";a="70148376" Received: from orviesa009.jf.intel.com ([10.64.159.149]) by orvoesa106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Nov 2025 01:39:52 -0800 X-CSE-ConnectionGUID: bmumjhEjQ1C9gAGBGaZvAg== X-CSE-MsgGUID: MC/zb2GISp2haSpiuh/ruQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.20,230,1758610800"; d="scan'208";a="193003579" Received: from orsmsx902.amr.corp.intel.com ([10.22.229.24]) by orviesa009.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Nov 2025 01:39:52 -0800 Received: from ORSMSX903.amr.corp.intel.com (10.22.229.25) by ORSMSX902.amr.corp.intel.com (10.22.229.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Thu, 27 Nov 2025 01:39:51 -0800 Received: from ORSEDG902.ED.cps.intel.com (10.7.248.12) by ORSMSX903.amr.corp.intel.com (10.22.229.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29 via Frontend Transport; Thu, 27 Nov 2025 01:39:51 -0800 Received: from CH4PR04CU002.outbound.protection.outlook.com (40.107.201.58) by edgegateway.intel.com (134.134.137.112) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Thu, 27 Nov 2025 01:39:51 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=TraPLKxbmkFnjECPtiqx8F34Gf375RMYkr7zZWgp+8hY5fi/0OWAgW6IOLpXvckH9ut7YnKULfPoJejrem1XKw4UPg2q1IX0bxjJjVcqfJGdo7aQOgeIUDWXtiJKwORDGSrcVCY/qDC0yQT1094N99fPJcJE1umtUYUoyIaB+ebqQGgAH415NJhHdAFsz5p1bDj/uMllq5qqbmfny3sWdO1r00lvSSzkpYVvHRF88S5DkU1KJjaL2P7ebLgG1F6Xit8bBPbUDUkh7D36SWY08chjmLWPRxj/u4CDsUZWQqhs/q9QzoLNamjKEV9bXwRlYcewiCXp5QJcTmEA0ZTHGA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=ElVwrkk2dcDYwqcNFIXsWapMDl1uO7KpiBotZvp1SEo=; b=n2G78kmULiN/F77Rsa98WjWXb214uHkvNckVZYEsD8fq8YMoKvc/xFotSSr8hpBxIzfoB3dLEJigDPAvuHXDHELNI/v9kT1v4OkkKeSnaTepE4tKRjDlWwtqhYz90H5xrsNLjVeK4qeEJ0NC9P7J8KNIE2McokeNPml/4ha3LpbFt7u1MWWA5UDn0woGaVm2yRFv0mxILcTLQjb3ih9lQffbytEbqoO1hu17sfMbFDf4bKHqipBqauQxg/OLrZ8BBaaZd0A+DOuA1OYvLT4FGgg4aeaBK+7KhZVB/GOUE5LCpa/wdNPrDJ0D/i+W+Te41izS2hbqXQSP9sDrst+qOg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; Received: from DM4PR11MB5373.namprd11.prod.outlook.com (2603:10b6:5:394::7) by BL1PR11MB5980.namprd11.prod.outlook.com (2603:10b6:208:387::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9366.11; Thu, 27 Nov 2025 09:39:47 +0000 Received: from DM4PR11MB5373.namprd11.prod.outlook.com ([fe80::927a:9c08:26f7:5b39]) by DM4PR11MB5373.namprd11.prod.outlook.com ([fe80::927a:9c08:26f7:5b39%5]) with mapi id 15.20.9366.012; Thu, 27 Nov 2025 09:39:47 +0000 From: =?UTF-8?q?Micha=C5=82=20Winiarski?= To: Alex Williamson , Lucas De Marchi , =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= , Rodrigo Vivi , Jason Gunthorpe , Yishai Hadas , Kevin Tian , Shameer Kolothum , , , , Matthew Brost , "Michal Wajdeczko" CC: , Jani Nikula , Joonas Lahtinen , Tvrtko Ursulin , David Airlie , Simona Vetter , "Lukasz Laguna" , Christoph Hellwig , =?UTF-8?q?Micha=C5=82=20Winiarski?= Subject: [PATCH v7 1/4] drm/xe/pf: Enable SR-IOV VF migration Date: Thu, 27 Nov 2025 10:39:31 +0100 Message-ID: <20251127093934.1462188-2-michal.winiarski@intel.com> X-Mailer: git-send-email 2.51.2 In-Reply-To: <20251127093934.1462188-1-michal.winiarski@intel.com> References: <20251127093934.1462188-1-michal.winiarski@intel.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: VI1PR0102CA0004.eurprd01.prod.exchangelabs.com (2603:10a6:802::17) To DM4PR11MB5373.namprd11.prod.outlook.com (2603:10b6:5:394::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR11MB5373:EE_|BL1PR11MB5980:EE_ X-MS-Office365-Filtering-Correlation-Id: 4c155e5c-626e-46f9-3004-08de2d98e734 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|7416014|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?T1ZHckJQQXpWYjdLY1VaVzQ2RXlLQVBKeWV6N3l1QXVyb1V6eStUdHJqaTho?= =?utf-8?B?SGJUYzA0SCtadFl3RXVOUU12QkFQN1J1ejloY0NrNkVSSXp0Yzg5NFpISXFC?= =?utf-8?B?eU5WWTM5d2cyWHFyWXp6Y0g1NjliRGRGdVhJQWp4VlFOWkdNYitJb3V5ZlRQ?= =?utf-8?B?N3ltTkZiTDhvU0grdlA5WnUyS1k5eFZHa1UwVDdic1dZZ3Q0VEhoeGRBeThh?= =?utf-8?B?NTRTTlh5eGx2c3dSVHVYZm5SZXRXckJUNUhFZFFFNnlqek9ONTRTS2hpUml4?= =?utf-8?B?VnowOC84ZUVSTldNZnkyUDNVeXkwcCtJTG9kazNSWUNsZEpMdGVFNUVzVGNI?= =?utf-8?B?UExOeGZwOFB3Ynp1NzBFd2FGUEY3UHJhSjQySVl2OStlWDdOV01JYXZ6TzB6?= =?utf-8?B?bEVpbHF0cjFPWVNWUXp1blRPbVcxM2RoRXJzQU12V3h1SjdCNUVkK3AzVVph?= =?utf-8?B?RFlrWkc5RGpaY1haN1oweWNHaFhzSk9RMmg2K25TS0R5UFd1Rk1xVE1kTHIv?= =?utf-8?B?Ky9WcUNEMkRKcjFWbHFqeHdMdFU1anhuMDJNNEhEb0NINUd0eExwdkZZYTUw?= =?utf-8?B?RTRqNFdyaGdqZGM3QVlzYzhrRjVFNnFvYnRHYWYrNzRUemk3RmdXMjVSc3p2?= =?utf-8?B?aEIrOHNlMldBNmxSRExDNmJHcGx0b0FoWXdrZ3orVDRCNUdsdmxtQ3V5a2xH?= =?utf-8?B?U1FYOHgwUHc0QUdpallURU80bzVjN3BjVUhYazBUa0JlOERob3BLNnBUN3N4?= =?utf-8?B?bkpGci90VFV3WmdOY1pZRUlObzdnZldHY2U4eHVaSGZDaENsTnFkK2VUSG1E?= =?utf-8?B?dzBDQTYrclZib2RjWjZIYlJJMGdsa05udWszTGJ0ZnFPd3RCN0VpWUdwd1do?= =?utf-8?B?d0hjTlE4M1Z0R3JicXhWVUVPQ0dDVTJJMEtKa25RVU5WaDdlZ0xYTTJSRy9B?= =?utf-8?B?WEhqNUhud0F5NXY2cUFYcDJMN1h6L1ZQMnVRMWE2VE1tTzlhMDIvckFvdC9U?= =?utf-8?B?UHF0azZ4YTdyVytpSTJRcm5nODAwR2R1UFRzaDZPMXBna1J1RW96MTZnUFNq?= =?utf-8?B?YVJGQVE5Tjh4cjN2M2lUOVRYVkorSmpxU1BGaEdCaFFjUGNPWjF0REJrMXRp?= =?utf-8?B?RkpNTHFOdk5aR29NUTdFd2xzNTNkQWo1dnYwSFhKNVI3VWg0Z0tFSWs2Qng0?= =?utf-8?B?cE5BczIvNlNENjFGaks2SXdwK0U0S296ZjZubEg2RnhDSE91ZExWbk80bVlU?= =?utf-8?B?alRtV0NhREM5ZndaYW56QUpOOHFkSmZLRnV4TU51RE1CV0JRa0hFSVJiRWxY?= =?utf-8?B?ZDlxN3FmYVJ4TkJQTU5wa1JOTzhLTXM4dDNHeXo4R3Aya0U0Z1VhSXd3THl5?= =?utf-8?B?NkU1UmpuQXZvdkZENmI3blI3Tk9qVTJpVEJsU2xuRDBwNUJ1SnFueXlwZmRT?= =?utf-8?B?cFgybmczNHhCYXROc1JROWdpUGs5cW9QN0M4K2ZRTnJjaEZZTG1LNGJRTVU3?= =?utf-8?B?a3pIZ00rRFcycFJlNEQ1SHEwN3BQTzZ1T2lKTnZaTzQvUEZLeDJvdnNhZ0p1?= =?utf-8?B?cGhlZ0JidHl5eUlOMFJBSEVEWmd5VDQ0TjZyU1hDNlpiYzkxbk5TWjBOQm9l?= =?utf-8?B?Umdtb1JQUGgvN2tLaDRTZnJITDhSeEhaK3VqMzZ0a2s4azJEKy9TZVBUamcx?= =?utf-8?B?SHJTREFsTXQzYTdDWjdoVXNYc294bzZ3SWVsam9KY085WkdyYVZRREtOOGxW?= =?utf-8?B?RzVBcWpZUmUzNUdXcXlSNWR5cTNsSkF5ZkNzQ2p1YnNyU05sQkQycVVsSGxk?= =?utf-8?B?T1JteFQ5UVlveURPd3JscFBXVVdqRUxKb2RQb1NGdk43Lys2cmtkTnFRTFFW?= =?utf-8?B?WUphNWZDNmFrN1hTb0hVRXdrR2tWcUswVm1rN01MTmhqVUsveWkwNUVDVTJ1?= =?utf-8?B?M3FWZ3dDZzI5UzVmcFUrT1UyZXBibU5UZ2RhbjNmQk9PVGJGOEMxa3ZzNFpE?= =?utf-8?Q?S566oNBBgKeXl2HWMpO6/GWU3HK2gk=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR11MB5373.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(7416014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?VXB6RlhRZzBZYUQ3ZUNaaDVMbjFRNUJ5UmNIdkF3TXB0YlAyMVdQN0ZFcEVJ?= =?utf-8?B?QStiUTUyOCtQcmx6a2FsY2wyRy82Z3Y0alQ5cTR0eXcrR3JLV01yU2cwZGRC?= =?utf-8?B?WUM2SkpQMzlFN3dhR2pOM3hkaitHay95L2hRZ1RPaWFHR0FCZ1JsWlc2Q2Z2?= =?utf-8?B?cXVCRWt0OFV4MUxGV1lOZWRuN3VYeTAyMk1SWlFOZHNGMFA0SnlET1JOcC80?= =?utf-8?B?aVVCM0NVR05wejVZMndOM2ZVOTJXaVVwZ2JuODRSdzZZcUpOdzVRbFRWZzlq?= =?utf-8?B?QWVLeXRTVzdtcjEydFBvZjVqMGhucDRRM3k0SEloMXd4NXkvY2VUZ3I0MEVS?= =?utf-8?B?eGNkT2NjMk9ldUh5YzRwQjhjclFoR2oyUnNJZmhzVEJEaGtCeFVDdC9qbmU1?= =?utf-8?B?bG1qazJ2Z2ZaeTlDbGduSkZFV3dGZ1FjVUtrR2J2M2dEOXYyTTBvSHlQcGVh?= =?utf-8?B?RHRlaUlzZmRzbC94cHQxTVRRYnBqeitaNEk3R3BqUW42ckQ3NllZMHllVTB2?= =?utf-8?B?R2lVZ08wWnQvN0RLZUw2emVqdFB5YXRlckRIOWRDTS9zdC9sZFZPQVRvb3BM?= =?utf-8?B?WWNENEVHWXVqYk8vYm9FcVBieFNhUDBxYVdadURvZXBaZ1pVK0F5NUZIbHRs?= =?utf-8?B?NVpoOVdXZFB4OFE4V2crc3BwTDNjTHZXY3J1cEl2UENWZCtqOFdHUkFYazNy?= =?utf-8?B?ZHU1Q2Q1NGhjc3FoMHBsRkRweTlMN0NYSkViaitPcmN4d21Sa0xxRWI3Smpo?= =?utf-8?B?akhxenpFVE1udjVmUVVYb2pvbkF4MzBlaXRVbEtMeWNKc3RVdkdYU1ZSTHJX?= =?utf-8?B?N2w5TDZSbmtyc0U3V0lvdXZXYjI4ZmRKMUdEMWtjSEhvL1dsOEQ4bWtHZ1p3?= =?utf-8?B?WFg1Y1Uwc3gxa2tZYktWV2N5ejI0enB3bkYwNFhVcEtpZHBmRHRSRlFVQzlU?= =?utf-8?B?aC8wcWZHcitsZDhwQ2lJc3pGZDZ1RFFoZzFtTGNSemR5d3p5MVAxdGlid0I1?= =?utf-8?B?V2t6SzJMV0J2OGMzb1BDckdBbjhtZnpiSFh4MzloOENKYTJJMDgzVFVTK0NJ?= =?utf-8?B?YkszZjJjbWt0Ri93c1BQZFltVDRUMXZDRDdDNU42QlVPdGROS1FyNE5UeWdZ?= =?utf-8?B?WnRmbm5mMXJRV2U4alo2dG9MaFBFNVJVYitRcC9PZDdRSWt4NUFYM0ZGTngv?= =?utf-8?B?MklWN1BXajhlRSs0WTlUMEZVbVVkU21vSXJkVTdrTDI1WDVCdzVxZUdKWnE3?= =?utf-8?B?dXRCOWlkZXozQ1ByMmtMbkhNK0lSQmowdXBwa3g4K3hjZkVRaFNmbTJSNGE1?= =?utf-8?B?N3BZcmVudFowVmpaRzZxQ0pHdG1WdkpJWmJDeEJiOTk3ZlhocU9lUW1VVFY4?= =?utf-8?B?bzNLYlh5MUZjQjlneFlxQnNqY1NtVEVmOS8veDBnNUR1TlcvUHlJWWV4MFpK?= =?utf-8?B?M3RkK1FmbW0wWnFTVDBiR0xnUUVsSW1QbmFwNlk5UDdVclFaOGVXSkJFN2VG?= =?utf-8?B?aDc0a24xZHViQjRHeUZyLzg2TklTL0pvNHEvOWFDWjdhdHFJYm1qUTBESUFm?= =?utf-8?B?a2pXWS9wdkMwYWxoZTZDTGg5Q1p1V0wvY1pwVFRtNmxtRTRmUmJmaFFGeFFH?= =?utf-8?B?WFR1SmFjSVRWSFVVYnZLUjhsYkEwdmdYa3BVdlBvZUErb20wS1IvMnoxb1hj?= =?utf-8?B?ZVRvbEc3WDBieDFGOVNuaXc5cTdKeXJtQ1I0bmlEN2Z3ckg1dXZ1aWlOcjhi?= =?utf-8?B?ZC9MU2pyRHI0aFFaSjk5cVZVUHpaZm84YnhQOXZ1dHJSNk9yeFk2K1NsY3dX?= =?utf-8?B?RXVObGR6b0ZzZmd2ZWJTV1lONGUvVHR6YURzd0hMYUloQlcwUXlPOXhUbFN3?= =?utf-8?B?MWRKNy9lbFBRWnMwNExkQm5sSTU0dG1YdERiK0VsVU56a0F0K1V0d2ZudVVx?= =?utf-8?B?cW11WkFIQUpIVDhTWW55dXh0a01XVFN6NTQzQTRNRU1TMlQ3WmZwWHNLUU05?= =?utf-8?B?ckhvOHJ5MFZveG5zZmZvRHNkdjN0RUhvUWFPak5NZHdZQjc4enhaY3JXUUgv?= =?utf-8?B?eDBTczVBZDVySkZ2R0djVUNCaVlMRHhESEdBK0F5Q2pIK2M3ZTZCV2wvcFp4?= =?utf-8?B?T0hHN2ZSL1B5QjBWUThZMzYxUXlTTm9YdUVzVnVpTjUxbTV1WEhINlY3SlVn?= =?utf-8?B?ZlE9PQ==?= X-MS-Exchange-CrossTenant-Network-Message-Id: 4c155e5c-626e-46f9-3004-08de2d98e734 X-MS-Exchange-CrossTenant-AuthSource: DM4PR11MB5373.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2025 09:39:47.2841 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 17V2JUIWmitZDJgIh6Ue55iY1RWSSvYtglJz4C4u6mAH11h24nYsDvB0lqvTDuztRphlA8GpDyGkMOIfXCBVvmiYsDiX8TSAee39fRjreqI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR11MB5980 X-OriginatorOrg: intel.com All of the necessary building blocks are now in place to support SR-IOV VF migration. Flip the enable/disable logic to match VF code and disable the feature only for platforms that don't meet the necessary prerequisites. To allow more testing and experiments, on DEBUG builds any missing prerequisites will be ignored. Signed-off-by: Micha=C5=82 Winiarski Reviewed-by: Michal Wajdeczko --- drivers/gpu/drm/xe/xe_gt_sriov_pf_migration.c | 9 +++++ drivers/gpu/drm/xe/xe_sriov_pf_migration.c | 35 ++++++++++++++++--- drivers/gpu/drm/xe/xe_sriov_pf_migration.h | 1 + .../gpu/drm/xe/xe_sriov_pf_migration_types.h | 4 +-- 4 files changed, 42 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_pf_migration.c b/drivers/gpu/dr= m/xe/xe_gt_sriov_pf_migration.c index d5d918ddce4fe..3174a8dee779e 100644 --- a/drivers/gpu/drm/xe/xe_gt_sriov_pf_migration.c +++ b/drivers/gpu/drm/xe/xe_gt_sriov_pf_migration.c @@ -17,6 +17,7 @@ #include "xe_gt_sriov_pf_helpers.h" #include "xe_gt_sriov_pf_migration.h" #include "xe_gt_sriov_printk.h" +#include "xe_guc.h" #include "xe_guc_buf.h" #include "xe_guc_ct.h" #include "xe_migrate.h" @@ -1023,6 +1024,12 @@ static void action_ring_cleanup(void *arg) ptr_ring_cleanup(r, destroy_pf_packet); } =20 +static void pf_gt_migration_check_support(struct xe_gt *gt) +{ + if (GUC_FIRMWARE_VER(>->uc.guc) < MAKE_GUC_VER(70, 54, 0)) + xe_sriov_pf_migration_disable(gt_to_xe(gt), "requires GuC version >=3D 7= 0.54.0"); +} + /** * xe_gt_sriov_pf_migration_init() - Initialize support for VF migration. * @gt: the &xe_gt @@ -1039,6 +1046,8 @@ int xe_gt_sriov_pf_migration_init(struct xe_gt *gt) =20 xe_gt_assert(gt, IS_SRIOV_PF(xe)); =20 + pf_gt_migration_check_support(gt); + if (!pf_migration_supported(gt)) return 0; =20 diff --git a/drivers/gpu/drm/xe/xe_sriov_pf_migration.c b/drivers/gpu/drm/x= e/xe_sriov_pf_migration.c index de06cc690fc81..6c4b16409cc9a 100644 --- a/drivers/gpu/drm/xe/xe_sriov_pf_migration.c +++ b/drivers/gpu/drm/xe/xe_sriov_pf_migration.c @@ -46,13 +46,37 @@ bool xe_sriov_pf_migration_supported(struct xe_device *= xe) { xe_assert(xe, IS_SRIOV_PF(xe)); =20 - return xe->sriov.pf.migration.supported; + return IS_ENABLED(CONFIG_DRM_XE_DEBUG) || !xe->sriov.pf.migration.disable= d; } =20 -static bool pf_check_migration_support(struct xe_device *xe) +/** + * xe_sriov_pf_migration_disable() - Turn off SR-IOV VF migration support = on PF. + * @xe: the &xe_device instance. + * @fmt: format string for the log message, to be combined with following = VAs. + */ +void xe_sriov_pf_migration_disable(struct xe_device *xe, const char *fmt, = ...) +{ + struct va_format vaf; + va_list va_args; + + xe_assert(xe, IS_SRIOV_PF(xe)); + + va_start(va_args, fmt); + vaf.fmt =3D fmt; + vaf.va =3D &va_args; + xe_sriov_notice(xe, "migration %s: %pV\n", + IS_ENABLED(CONFIG_DRM_XE_DEBUG) ? + "missing prerequisite" : "disabled", + &vaf); + va_end(va_args); + + xe->sriov.pf.migration.disabled =3D true; +} + +static void pf_migration_check_support(struct xe_device *xe) { - /* XXX: for now this is for feature enabling only */ - return IS_ENABLED(CONFIG_DRM_XE_DEBUG); + if (!xe_device_has_memirq(xe)) + xe_sriov_pf_migration_disable(xe, "requires memory-based IRQ support"); } =20 static void pf_migration_cleanup(void *arg) @@ -77,7 +101,8 @@ int xe_sriov_pf_migration_init(struct xe_device *xe) =20 xe_assert(xe, IS_SRIOV_PF(xe)); =20 - xe->sriov.pf.migration.supported =3D pf_check_migration_support(xe); + pf_migration_check_support(xe); + if (!xe_sriov_pf_migration_supported(xe)) return 0; =20 diff --git a/drivers/gpu/drm/xe/xe_sriov_pf_migration.h b/drivers/gpu/drm/x= e/xe_sriov_pf_migration.h index b806298a0bb62..f8f408df84813 100644 --- a/drivers/gpu/drm/xe/xe_sriov_pf_migration.h +++ b/drivers/gpu/drm/xe/xe_sriov_pf_migration.h @@ -14,6 +14,7 @@ struct xe_sriov_packet; =20 int xe_sriov_pf_migration_init(struct xe_device *xe); bool xe_sriov_pf_migration_supported(struct xe_device *xe); +void xe_sriov_pf_migration_disable(struct xe_device *xe, const char *fmt, = ...); int xe_sriov_pf_migration_restore_produce(struct xe_device *xe, unsigned i= nt vfid, struct xe_sriov_packet *data); struct xe_sriov_packet * diff --git a/drivers/gpu/drm/xe/xe_sriov_pf_migration_types.h b/drivers/gpu= /drm/xe/xe_sriov_pf_migration_types.h index 363d673ee1dd5..7d9a8a278d915 100644 --- a/drivers/gpu/drm/xe/xe_sriov_pf_migration_types.h +++ b/drivers/gpu/drm/xe/xe_sriov_pf_migration_types.h @@ -14,8 +14,8 @@ * struct xe_sriov_pf_migration - Xe device level VF migration data */ struct xe_sriov_pf_migration { - /** @supported: indicates whether VF migration feature is supported */ - bool supported; + /** @disabled: indicates whether VF migration feature is disabled */ + bool disabled; }; =20 /** --=20 2.51.2 From nobody Mon Dec 1 22:36:16 2025 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.14]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 668B4329E4F; Thu, 27 Nov 2025 09:39:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=198.175.65.14 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764236398; cv=fail; b=azkM7uEKQH2xA+IAFVPFwFLZnrISKLdevbpcPPwrO5oZSUvsZTyqWaah9WhSm3fIOHsNh39XogO0OEHPj3iX6uc6I45ssEskwZoOCwqw4qnD1HZoIYEqxptkiInG6d/yteoT3DB+HnZT9rtyElbSVJFmKD+l18LcAGO3FEosALs= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764236398; c=relaxed/simple; bh=4dm0voQXDHXUxXSnzWQACcjqUKmlIw+IER96Yxyom74=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=FsmQehqTrDKrHQRrPvmyfSI1c5cncGHN+d7LtGpTSdPjn/2Exexo+GQ5lI2JKK1nN5TTPfC3Ty8mM6fgFykjZ22jpglS+M5/EColGcCqGiJfqtRklhzguPGhywQSEkp1QQQ0k8pPZftbfskOSoUQl+ChMZMhvX3z3B4HPo9N/kw= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=b5p6KzoW; arc=fail smtp.client-ip=198.175.65.14 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="b5p6KzoW" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1764236396; x=1795772396; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=4dm0voQXDHXUxXSnzWQACcjqUKmlIw+IER96Yxyom74=; b=b5p6KzoWyeFrwbNUdVwQYQSZZArbi1SXGgPWii3INCdCZiQzAtFMJlzX GeuccB2tYCCCKcEWxr8FdEruu3pjaP8XdazxKofklIGwTJHsHOLozEKvT LOwmwe/jqQ1IpG6xwZN4K7lr4T5zdLqCzIpdH1cG+NW36VG/ua1oSInYY 51yHAdAk0fvJl3nTulD8d9R7sCy4SWwRcY6VKlCo4gkDex5jDuEZK1/CF V2Z2WGu63JY0p/0fiSnzKLsv96agBYDzglatYU4BnCAKZLNOTFZz4QZ2g VXKAMG43pULKrhnJC2PCTajzEVllNVIW0NWJBcapXuqtXmxuK4dod9vyG g==; X-CSE-ConnectionGUID: fJzIhA4JTRqyQm4Qp1mttA== X-CSE-MsgGUID: 4/oiIAVKSMqoXhN6tG9POA== X-IronPort-AV: E=McAfee;i="6800,10657,11625"; a="70148397" X-IronPort-AV: E=Sophos;i="6.20,230,1758610800"; d="scan'208";a="70148397" Received: from orviesa009.jf.intel.com ([10.64.159.149]) by orvoesa106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Nov 2025 01:39:56 -0800 X-CSE-ConnectionGUID: +iTwwa6SSp6QAnol21C+Zw== X-CSE-MsgGUID: SiDlZ9rHTse3AHYVHW5DCg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.20,230,1758610800"; d="scan'208";a="193003591" Received: from orsmsx902.amr.corp.intel.com ([10.22.229.24]) by orviesa009.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Nov 2025 01:39:56 -0800 Received: from ORSMSX901.amr.corp.intel.com (10.22.229.23) by ORSMSX902.amr.corp.intel.com (10.22.229.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Thu, 27 Nov 2025 01:39:55 -0800 Received: from ORSEDG902.ED.cps.intel.com (10.7.248.12) by ORSMSX901.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29 via Frontend Transport; Thu, 27 Nov 2025 01:39:55 -0800 Received: from CH4PR04CU002.outbound.protection.outlook.com (40.107.201.37) by edgegateway.intel.com (134.134.137.112) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Thu, 27 Nov 2025 01:39:55 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=i62jBqfN/OyCBxfiq+lA3K+ZJtYIvqozW5MpyGrWJ4UZtYgikohH62CHjEnVeRJgiLrm472JxTaTvV55/dBZwbfkiqoWXI6MDRh+FwxSIHWdCwxx6fLKNPAY+/on3mAtpmMPMTPmrlndCdloPdmw6YyaUxH0hmxostAv49q0n3TmFHsnTsTeIPfVgH7QMjaCkq8epLQzLLRjYkwe7kgNV8pAgBVmAgyfEpyo4OwU64ILFfUYoi08vRLZYak76+LbKVd/EOesSX9EsEPapQj/vl/s5PD6XWbOfC2Ja27OkWCxxYmrLjDRTqecmD4xtsDWj+KLEw7N27e7mnCX7HGFOA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=qt72uBvlZ3cuywXec7yRAin4WfSl6Y9KH9BxO8Lmp6w=; b=ZeOSqQmCIe9vS+nb+IuFwiG5ztst85TdhI6wZmslDqt8bnfd6r5v5ZT5sX7FTcAtjUXtexylNB80AwQoKaQm6vmW6Iv4vxhsrsNQPewqIQETbNO3c9VAmSHurkjG3bJoER7n6u9QbaW8Q5rYWYe6QzQNmDEwOP+Ln/YF4B1fWi7LTcfxUz1TePAE5ruAGtuRBdkKSJoVnfVD3O2RpiPxzbOjv4VgoYd7VtmRvEezQVWH9oTaqUyp9VK20B8L+GwGB+uff1XXDmOVp3IswXtOraePOa9GwiwcYuXLySYaaU9EcJFLsd4LqSw212MF5Bo0L9cUXbvBE/l/lm9tV1vPBg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; Received: from DM4PR11MB5373.namprd11.prod.outlook.com (2603:10b6:5:394::7) by BL1PR11MB5980.namprd11.prod.outlook.com (2603:10b6:208:387::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9366.11; Thu, 27 Nov 2025 09:39:53 +0000 Received: from DM4PR11MB5373.namprd11.prod.outlook.com ([fe80::927a:9c08:26f7:5b39]) by DM4PR11MB5373.namprd11.prod.outlook.com ([fe80::927a:9c08:26f7:5b39%5]) with mapi id 15.20.9366.012; Thu, 27 Nov 2025 09:39:53 +0000 From: =?UTF-8?q?Micha=C5=82=20Winiarski?= To: Alex Williamson , Lucas De Marchi , =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= , Rodrigo Vivi , Jason Gunthorpe , Yishai Hadas , Kevin Tian , Shameer Kolothum , , , , Matthew Brost , "Michal Wajdeczko" CC: , Jani Nikula , Joonas Lahtinen , Tvrtko Ursulin , David Airlie , Simona Vetter , "Lukasz Laguna" , Christoph Hellwig , =?UTF-8?q?Micha=C5=82=20Winiarski?= Subject: [PATCH v7 2/4] drm/xe/pci: Introduce a helper to allow VF access to PF xe_device Date: Thu, 27 Nov 2025 10:39:32 +0100 Message-ID: <20251127093934.1462188-3-michal.winiarski@intel.com> X-Mailer: git-send-email 2.51.2 In-Reply-To: <20251127093934.1462188-1-michal.winiarski@intel.com> References: <20251127093934.1462188-1-michal.winiarski@intel.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: VIYP296CA0006.AUTP296.PROD.OUTLOOK.COM (2603:10a6:800:29d::11) To DM4PR11MB5373.namprd11.prod.outlook.com (2603:10b6:5:394::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR11MB5373:EE_|BL1PR11MB5980:EE_ X-MS-Office365-Filtering-Correlation-Id: 97426f6e-2897-4ac4-0148-08de2d98eab7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|7416014|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?MG1BdHVQVFBzUGN1eGl0VWhTR291Nm9icitldVhhYlYzQ240QllDUEM0Mnlv?= =?utf-8?B?VjBEbG5pVmFRckNSdW10Vi9RT0FjeG9jVFhyNmV5cTlpU2ZvWUN2OXJyREpW?= =?utf-8?B?R2pueXZScHppVlIrRmp5NnpMYlBEMjVXTjNQQk13MklXbzIvVlZudGlUUDV1?= =?utf-8?B?aDNPNlBIaWQyVjhOeTlIM0ZoSGF1N2phSUx1dVVVRXhMWXloYXZKY29CTity?= =?utf-8?B?NmozNk8zMXVvWFFnMUpvV21kaGxkRG12TGlYR1VWaUFFSHM0Nzl0YXhQNVVx?= =?utf-8?B?WGR5WVlXdW1VcUFQMVZLTmovK1BzbGRET21qVWFSMXIxaStTR3lwaFBHbjhC?= =?utf-8?B?U0w0bm9rNmRkemVXWE1abEZvTmlZRjB3Qzc2eEpzWEZ4KzU2ZXFVeHhxUUIw?= =?utf-8?B?KzhZZzUwSGNjVG8wQk9kc01iL1FORFB1K0JEVk1GcmJyeWZxekJNVmJGd2d6?= =?utf-8?B?V0tOeVlpZUVRUWZxcW9mckZKNUJqelJIL08vbjlnYVJuQ2NNTThrNW9yQVNO?= =?utf-8?B?Q1RMdEJCRlQ0UXNwYmJ4SGNYTmRab0FtY3FJQ3hKRTNDVk9ZdXFGSG1JWitT?= =?utf-8?B?a1lZS0lvck1RaFRwWW1raDRpVUpTTStoQUJ0SEphUG9QU1BYRlhYTjAvY1BV?= =?utf-8?B?MmpDcVBXbmVxWFJXVGRDdmFhYXVRNEFLMkhVc3RNWEpWbG9ORE1BbjNETFFP?= =?utf-8?B?U2lGN3NiR0YweDhjcFNObUd1RkZDeWV4dW5RZUVwanNTUnV0dlJxaStCejRF?= =?utf-8?B?dHllVFVXRDVRZWJ4eEtFNzczbktZZVhoTVdpdE5PRXB4cjBlbU5MMGJpeWM5?= =?utf-8?B?WVhTdVlpdGlLV3ZMRjN3SEVtTjRFWlEvOTQ3SXBVQksxaVNkNnh2cjVQcDBk?= =?utf-8?B?TFo5TWRQd0FkVU8veTB1VUdTVU5paXhLc2JhbUdwWGlEaTFhUmRIcGpyTVdq?= =?utf-8?B?aUJpdGtiYUNiNTQxQVoxcTlWVWlLckc5bHo5VkQ3MHg4bHowU1A1UUhmWkFQ?= =?utf-8?B?SUJxL3p2QmZabDlNajFNZDhudGhoN2sxS3JBVHh4ZlZMUzdNajdQMVJpRW5v?= =?utf-8?B?aWNIVFFmVnNETmJhYnFxMWlOaDNPdUxMRzVkT0FtTVVxRTJFNXRJTVdNUHpB?= =?utf-8?B?NC96NVpJUWdWOXJFVXgzd0ZZSnRUcHhnWG5GWjh5eVN3U3gvV1pieXlPVGZm?= =?utf-8?B?MkhQZ0d2L1podTNIMUdoUEZGcDRqWkRQa05QK1N0SlMrUjJycG5meU9STDVo?= =?utf-8?B?T0lKNDBqZjJBR1BZNi83S1ZPN29UVEk3Z3pYa21hUk80NFZZLzdjWEtSd1Z0?= =?utf-8?B?UzdUZzJ2TUdRV1FFVFhvK3RZc2xQVXFBdkRneFR6dHljSmRQLythbDdwaFA5?= =?utf-8?B?T3B3Vzh5UEdNaXJBWTlYSHBLTzNoVEFQS3dLc29NQlpkcUpDQmR4QXZUdzRl?= =?utf-8?B?WkdWVDF4OFk5VFR5b2xIa0xDNm1tcS83ZXN4bGd3OVNVSHgza0dpdEdzWitw?= =?utf-8?B?WkUzV3lVdXp3WTZGYXVJTEdaajdJUXBCTGZtR2VUOTdWY0hwTnJSdTUzZ09s?= =?utf-8?B?aVhzRDl0Z1YvcXZpc2ZsUkM5cGVXWE9rN2tsRjlrR2d0Um41bUFZL2VwU0ZD?= =?utf-8?B?N2FXaytiR3VvcnUyV3c3cW1xSTZKM1JoZHlmeTFjaEhDUmVZcUs4N0NvYXB4?= =?utf-8?B?aW1vcEVvc1F3RmYyaGRqUnRrdnlFMW51bWRBY1JxUE1NcXNrOVZmcmFmQkZT?= =?utf-8?B?RjhNZEFtTFZYbFJ2bnFyUURPRDJoM0lXMGcrRFhDZFBHTG5qc0Z6MVZNVTIv?= =?utf-8?B?anBubEZnU1hjc0ZDVVRxOFpWMmJzNVhhNmdNa1F0cXhTY3R0TUpxOFkyVFQx?= =?utf-8?B?a3VWaVU0RTlFRjBwekFLSDBUc2xZbnRsQW5DZTBSK3pFMW10ZHE2V1ZCWXBD?= =?utf-8?B?a0M4aENYckZhS3BYeSszMlE1dENjSkpZdmkxQWJNV2pNd3ppRUUyai9xdmV5?= =?utf-8?Q?UzRqOD+lN9OyTe5VRpy2ENwWiwrm2Y=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR11MB5373.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(7416014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?WU1WL3F0ZDNMNHpIT1VmRll0L3ZMQXNOcy94Q0pMMlh0TzdFc20ycitIYlI3?= =?utf-8?B?Y1VXVm5NMzBMTEtGQUhvaWZYN216MTlXWGFwQjZLcEhqaFRTUFFGRVdITkRV?= =?utf-8?B?UmRyc2VJbmp2WkJDNnNOaytwOFZWemNYb21uYk9qS2UzMndvZ2dxTkhoMU44?= =?utf-8?B?QURqUzZRRVlNaU1jTjA4NnBrZnhDYWdtUFo3YVU2aDRqNDlIM0VBd1pLYmlN?= =?utf-8?B?RWNEWUU5YUJWdkEvLys1OXlQWDVYcjQzbmhmaStmaEM4emVBWllqVW5aa0Ny?= =?utf-8?B?OHNaNWtVNGRzRCswUHVNaFNHRHRvZnNHeko0SjE3eGx1RHNGVk5ic3lnc25h?= =?utf-8?B?M29JRlZTVEluZGlsNW83RkorWEJuSVBWVFVWeGhJV0dpQ3RCaThaU3B2T01r?= =?utf-8?B?cEZSV3l6N2o5b1YzL28yc0J2RDRoUVVud2tFbmVJNWpKcnNGY1JBeis5V1Fs?= =?utf-8?B?UTh6UnAzVVluV3JUM1I3aU44MWorOHp4V2NGWHFDQ1h4ODdlQVpaMWNnQzB5?= =?utf-8?B?VzR1d210U2ozK3JOOUFNc1d5cnpJQjR1L1p2YjZZampTZEI4V2M0dXA3amNJ?= =?utf-8?B?eFlENDA1Qy9ZamkxQ2F5SWlOS1dFQ1Nrb2tPMEgvbkZtREpmcFJBVUQ5ZDhx?= =?utf-8?B?UmRpamdZMHl3VUhVM09wbUJWdnBnZDdES1pBRnNnZUN5Ry9iQy85cjJCalpO?= =?utf-8?B?ZFRqZmFxWCsvMkFaZ0U4VW43c000cDhKUTJ2YytzV0dKQkd3WWpYMlQ4YUVG?= =?utf-8?B?ZGtiUzlnazYybHpEOEdydjdJNEhNVHprbk5oL05sV2kyTmJpcnhqS0dMQXFj?= =?utf-8?B?NUREMEQvZTdmajdWMmZYYkJDSXM4TTFDWXZNMThxcE1ZeUc2d25LMnU4Wlov?= =?utf-8?B?Zms4dWhWQzB6dWl1TTZUb1pITEZKbUVhYzJlWllTZXpJb2ZJRFM0b0ZSdFlS?= =?utf-8?B?SndZQ014ODNZUzg5WE5rYlZodTJOZ1cvQVhPU0V2S2tyK1U1bzZVV1BCSUtY?= =?utf-8?B?NWVTb0VWWUQ4TTZ0L056OHM4OFFQd254cStEcm9JeUliY2E2N3labVpRd3Zq?= =?utf-8?B?U3ZjcmNsaUtrTWpFa0RFR2VzVmNRVzIxdjlnM0dqK2xoZnBkRXVCOER1cmFs?= =?utf-8?B?ZUYrK0tReEdMR3o5Q2xQb2RqT2UwWDBXSm1KZmpCcGI3MmtMeCs5RDg2SEQv?= =?utf-8?B?RlM4ZCttdCtkSG1JYTh3QWVpYzI2ejVFS0w3YXZQY2VPQ3lDY0k0SEdPOW41?= =?utf-8?B?cnFES1VuRDFad1NpU0dvTnpCOGxiNEVvcXdRMmM0VVdmd2ZYZnloMWovcGNZ?= =?utf-8?B?dzFoU3NwZmx4bkZZTjd4NFRWUFlzc2hIcHJPMzg3K3VpUHMrN1h4VkNuK3JD?= =?utf-8?B?b3NwZGhubkNGbEtzZnYxRHBGd2JKL1lFSjRqM21UWkt3QTR0UXdQa1BqaUl6?= =?utf-8?B?Z3dsM1A3b1A0dUpWN3VENVRXd1JQa0Q1S2JoMW1hMU5zcTkzam5NRnpqY3A4?= =?utf-8?B?M29YaWwzZEk1aU8xMDdVcXVLdlVJNkJ2RldlWkFLWm53eCs4dWZwa2RxYW5h?= =?utf-8?B?Q0JoV01MVVNodisrNWwyZmNUckF3REs3SmdCdVNUSlFJaUE2R2JIdC9pKytm?= =?utf-8?B?ckhlenFPWVgrTEJYT3NsdU1NU1F0eE1UbkJuUXpUWFMrN0JoaTVpNVMxbDND?= =?utf-8?B?akh4N1ZvY21yTG9YTXZjLzM5ZXdkUU0xYlVCNVVqRTFyWG5pWkJNT1BTWkpQ?= =?utf-8?B?TnZ2NWVCMkltdS9aUUFLakR5K3YwdHZOaDJhdTFQanVVS0NXYlViRHJQNVlp?= =?utf-8?B?SFY5ZlRBZXNVWFgzS2NkVklQdEJhUFBSOEhZNlUzRG82TU9jSVlIbDNtaGxE?= =?utf-8?B?OVRyOGI1WkVBWVJNMFFHeDQybjN6NG5iSmRqK0xDNXZVZlhNNFlPbHcyNFlK?= =?utf-8?B?aW4vZ3NzV0htMVc5Y0RNWUpIM1RQQ2NCdG85anpheCtoRlZyOURxUzA4dUZl?= =?utf-8?B?UWNFOTVZYzVkSk5yUlFpZHBDejFyOHhCR1JmS2VWTm5ZLyt2RlJ4WXNLTHJm?= =?utf-8?B?TXQzTEFTTUQra2J2eEtOS1labllRZGl0SFJ2TEJsUVdBOFNVc0wydmVJWk5j?= =?utf-8?B?MWZvZkVKM0RFTnpTQTAvek42bjliMmxiZlN0djIvOXFQSTdzcUY0c3Z6UTll?= =?utf-8?B?T2c9PQ==?= X-MS-Exchange-CrossTenant-Network-Message-Id: 97426f6e-2897-4ac4-0148-08de2d98eab7 X-MS-Exchange-CrossTenant-AuthSource: DM4PR11MB5373.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2025 09:39:53.0816 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 25UoscQn4GbQv1SXQkMs6AFRZhlZJVc9Xumt8ktOUi6a9BXPCUHvQUZbY8K5xJaAWWPbzmSrXnnjPnWXLyOq5T5D3yu80n0DYRxWKyjc3HQ= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR11MB5980 X-OriginatorOrg: intel.com In certain scenarios (such as VF migration), VF driver needs to interact with PF driver. Add a helper to allow VF driver access to PF xe_device. Signed-off-by: Micha=C5=82 Winiarski Reviewed-by: Michal Wajdeczko --- drivers/gpu/drm/xe/xe_pci.c | 17 +++++++++++++++++ drivers/gpu/drm/xe/xe_pci.h | 3 +++ 2 files changed, 20 insertions(+) diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c index 1cb30efe27ef1..9859e85c4f3a6 100644 --- a/drivers/gpu/drm/xe/xe_pci.c +++ b/drivers/gpu/drm/xe/xe_pci.c @@ -1232,6 +1232,23 @@ static struct pci_driver xe_pci_driver =3D { #endif }; =20 +/** + * xe_pci_to_pf_device() - Get PF &xe_device. + * @pdev: the VF &pci_dev device + * + * Return: pointer to PF &xe_device, NULL otherwise. + */ +struct xe_device *xe_pci_to_pf_device(struct pci_dev *pdev) +{ + struct drm_device *drm; + + drm =3D pci_iov_get_pf_drvdata(pdev, &xe_pci_driver); + if (IS_ERR(drm)) + return NULL; + + return to_xe_device(drm); +} + int xe_register_pci_driver(void) { return pci_register_driver(&xe_pci_driver); diff --git a/drivers/gpu/drm/xe/xe_pci.h b/drivers/gpu/drm/xe/xe_pci.h index 611c1209b14cc..11bcc5fe2c5b9 100644 --- a/drivers/gpu/drm/xe/xe_pci.h +++ b/drivers/gpu/drm/xe/xe_pci.h @@ -6,7 +6,10 @@ #ifndef _XE_PCI_H_ #define _XE_PCI_H_ =20 +struct pci_dev; + int xe_register_pci_driver(void); void xe_unregister_pci_driver(void); +struct xe_device *xe_pci_to_pf_device(struct pci_dev *pdev); =20 #endif --=20 2.51.2 From nobody Mon Dec 1 22:36:16 2025 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.14]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DFCC332AADC; Thu, 27 Nov 2025 09:40:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=198.175.65.14 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764236405; cv=fail; b=BPzYkd/ooHgbqLIqhgXD4xXgMutJE59s/QCaqIyCeQiDaybSNb4HVXx93+lqHy5lOCfohUlyaeuYWAyynnmJlG+ZSW6nlR+G2bqlpCXvE4Q4BeuqSPgQCzx+43/sE83zdfVqjz8o9VbN4bFdIKaiWmVQE2ZSHpPQPPkCYptdBy0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764236405; c=relaxed/simple; bh=LFus3hTop1hOPulgeD/0okGxpCK5ilLSL2vlCjfR5dc=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=UwvIWCsMmfdJItGzYa+kKXRm8qNnWgbuBgCw6IBNYcbYSayTiZSSrA2vjegWxtdK7FufRLR9saLqoybg/giiT73YldowjGqQOFnJtQpdSN3ZOxyK/BIVjF7lKTwhWIB2FxJGsph76V1+mxQ8bQdA6TZJKSFxlWFZUyAqdX8VF4U= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=jXex3pfF; arc=fail smtp.client-ip=198.175.65.14 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="jXex3pfF" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1764236403; x=1795772403; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=LFus3hTop1hOPulgeD/0okGxpCK5ilLSL2vlCjfR5dc=; b=jXex3pfFGD3EedAUrH7NrGgyw/s1BlGfSScz1P/dtHYIdlrqmYkwUojg H/HtNKEje5y2YiVfQwaHxcRH9hx3fPkgpiGafmDTHPKRKvhizKbOAJD8b dpd5YIkWX+vIOCvV1Yu88ynpBKvxIgDC8dLysiWvuB8ApsLurIODLvJPL L40UNBYHvHwq3OyvnuUUqnbTgR9NQucabEbLdIJEvlw2zEyFU2zmCxlwg uZoCjXcPu9aKymu7e5umPn3kBoVzYCjT8WGK+9Y0fy3hOiwlTY45FPlf6 kGYxcVuZEPouYnmxZ83tHcNeJIp+mH3nzXFck3TUPbhwNmfMCmvUUu4ra w==; X-CSE-ConnectionGUID: CD+VPpTRQoW0eaVLPa+0xQ== X-CSE-MsgGUID: QbH41brATYCNJSIMHTiwLA== X-IronPort-AV: E=McAfee;i="6800,10657,11625"; a="70148428" X-IronPort-AV: E=Sophos;i="6.20,230,1758610800"; d="scan'208";a="70148428" Received: from orviesa009.jf.intel.com ([10.64.159.149]) by orvoesa106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Nov 2025 01:40:01 -0800 X-CSE-ConnectionGUID: UmoDixemQPy3aLRPhuMxvg== X-CSE-MsgGUID: iWX6+SYUSlW4n9u5YKLlNA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.20,230,1758610800"; d="scan'208";a="193003609" Received: from fmsmsx903.amr.corp.intel.com ([10.18.126.92]) by orviesa009.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Nov 2025 01:40:01 -0800 Received: from FMSMSX902.amr.corp.intel.com (10.18.126.91) by fmsmsx903.amr.corp.intel.com (10.18.126.92) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Thu, 27 Nov 2025 01:40:00 -0800 Received: from fmsedg903.ED.cps.intel.com (10.1.192.145) by FMSMSX902.amr.corp.intel.com (10.18.126.91) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29 via Frontend Transport; Thu, 27 Nov 2025 01:40:00 -0800 Received: from PH7PR06CU001.outbound.protection.outlook.com (52.101.201.11) by edgegateway.intel.com (192.55.55.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Thu, 27 Nov 2025 01:40:00 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=yQw0UUp3Smw+655g2cjy3+rIt0S8reC3kpMqRbbN1YRvGMkf36MzooBhufSpFQrYxx3+JOZYjNkFfZ6tS1nvesjAothx19Ij/eTe/I61yJ85SUMD1k4NW2LnFZPagmrpYkDK/tHObxQFVN8mO0GEaEmJi71/VQmyhBhj8KN0JVDN1xd928hdHmTJCZ4fhUGawSlu4OlED70r6s+nvhRzu1CNJ17snXWvS92MHzL2GkqgVrij3BGmuHUoK7vhGu5DiMmLhacoae77ddkDrasZ81plNFOGT5+MHaINYD/jrcBhmAO9ibvFXq27aRGZQgSF1eAVu1CMbHjt5JRpIs9K7A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=TUefY8EWAN+6fzo7eyNxcU/dGpaklN6+S+Fo1yl4ZA4=; b=L0o1MZQ5Ok26AMQt8ZsEnn1Rp96d6RUI3VlCIjdZ8y3VPQVAlEIdXd0Un0mLVPMEDqIocvEEq6+RN2pIvl/pkDC2uJBYAr1Oz5eraGRGqwIUC0Z0cH2RTT2bvHh1Lgi2DTjBGU+UL7vDJNTLz+djjJLbCDr1K8XT/g0T9ZaDK+dXicASn99RsblIEdO8G50JGAqtlLQOYcFoajsFV9czZoBkbU86t86Lgl0coi06GQPejOKr6S0L0buBgLGAU/O4tUPenSXcsrGVTYHSHwImZeNOCOrkM133mxv0gi/eImqelliM9LJTB3Pf9VpODSdAD0C2UDUIQdcNvBDRbGUI2Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; Received: from DM4PR11MB5373.namprd11.prod.outlook.com (2603:10b6:5:394::7) by BL1PR11MB5980.namprd11.prod.outlook.com (2603:10b6:208:387::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9366.11; Thu, 27 Nov 2025 09:39:58 +0000 Received: from DM4PR11MB5373.namprd11.prod.outlook.com ([fe80::927a:9c08:26f7:5b39]) by DM4PR11MB5373.namprd11.prod.outlook.com ([fe80::927a:9c08:26f7:5b39%5]) with mapi id 15.20.9366.012; Thu, 27 Nov 2025 09:39:58 +0000 From: =?UTF-8?q?Micha=C5=82=20Winiarski?= To: Alex Williamson , Lucas De Marchi , =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= , Rodrigo Vivi , Jason Gunthorpe , Yishai Hadas , Kevin Tian , Shameer Kolothum , , , , Matthew Brost , "Michal Wajdeczko" CC: , Jani Nikula , Joonas Lahtinen , Tvrtko Ursulin , David Airlie , Simona Vetter , "Lukasz Laguna" , Christoph Hellwig , =?UTF-8?q?Micha=C5=82=20Winiarski?= Subject: [PATCH v7 3/4] drm/xe/pf: Export helpers for VFIO Date: Thu, 27 Nov 2025 10:39:33 +0100 Message-ID: <20251127093934.1462188-4-michal.winiarski@intel.com> X-Mailer: git-send-email 2.51.2 In-Reply-To: <20251127093934.1462188-1-michal.winiarski@intel.com> References: <20251127093934.1462188-1-michal.winiarski@intel.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: VI1PR0102CA0017.eurprd01.prod.exchangelabs.com (2603:10a6:802::30) To DM4PR11MB5373.namprd11.prod.outlook.com (2603:10b6:5:394::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR11MB5373:EE_|BL1PR11MB5980:EE_ X-MS-Office365-Filtering-Correlation-Id: f1f161c9-944a-4e65-706d-08de2d98edc8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|7416014|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?WkMrcFpWcWdIMW5GTlpWeFRLZ29oZGNMalZGL25VakF4eFJpcGlpWWUyekpw?= =?utf-8?B?UmdoQWtDWnIvSWlLZm9mYkZhNlB3NzRyYXMxT3JGdmsrbnVYTUhSbVAyOWxk?= =?utf-8?B?dllmNC9RWjdscWVlS1JZL2R6WWkzdGlZT2hRQ2VEQXVOOXFMWmdmM0d3dWJo?= =?utf-8?B?Qjc1bTZFdXA1MzZGRmVocTMyUUs2bmt5TXFzNDR5bVdHbGJybVYrZ082bzNU?= =?utf-8?B?bnRvNU9DWm9UTTVSaGc5d0s0cjZIOStqZmxYWnhVN1BLUjVuOFIyaGlSbVNW?= =?utf-8?B?M0tTaE04N1RIKy9GZytNRmVzRzJJVzVPaW4vR2hmMmVndkE2RmFWd2JJQkgv?= =?utf-8?B?akZiU09iekVzZmtiQWJ0Tlk4UlNPMFpabUVJRVpQMzdaL0NoMzNvbVBaWGxr?= =?utf-8?B?Q1FuSURqVnZmbm12VWVFeHR6UG1XTzdEMWY5TEdRUkkvTHhBTFhQSXQ4QjU0?= =?utf-8?B?WkR3VFZmMUQxVVhBbnZ4U285Mk1MUytzMzI5YjhQVklGZ0VpMEpkRlZxMUhZ?= =?utf-8?B?RzJTN09idWg1cG9YYVZ4TEErd3p4YWFXaHROdkhTM1VNSUczazltQm9tbHlu?= =?utf-8?B?YWRpWWlxRUdhWkozdTdqWXlxUkhCMjdGdHBqK25STFpQNmhyTkZVSTNsR0Q5?= =?utf-8?B?QU05a2VZOThqeHlkVzlsSWw4UzRyd3l5U1RTaWtsb2xPN2JDL1RwdXVQUklI?= =?utf-8?B?RS9xRnlMSDIzbDhscFExTVY1WGduNFN3VDljY1o0eUxNckN6cG5tRm5hMG5I?= =?utf-8?B?Z1VyOE5nWHpmU3JibnQwMnBoTTZYVy9uL3lkNDRvUC8zS2VmMDB1NDhqeFpK?= =?utf-8?B?NzZDcnFyNE4wL282NnBsVzJ6b1RLci85WmRrOWtRSHd3WWVad25hcGFhOUlI?= =?utf-8?B?d3MyNzFaQ291T3RjSGhKOUhwc0JyMVhsQVFxZFFMbWFHa0t4MFQzbzJqTzJM?= =?utf-8?B?YTE1NWxaaGJjUjBuUkF0V2FjM25hKzhsVTZBUWhGQjhhYkFlb0NNaUJzdWY3?= =?utf-8?B?UnEyUnZ1cDVFbi9vRVZmMGoxOHhZMVVRenhqaFkzTmpmRHFlZVRuNVA3TmJw?= =?utf-8?B?RldBMnUxTXZ6QitEOUdGY1VQZ01wQlU5bS9tb2Q5NTNrVEdIMEs5M3FnUVFw?= =?utf-8?B?c1VydTNZVWJ4bm9kQVAwMXFTVm43REtEVzAwdDdkOG5GanZmbkljZWRJWStU?= =?utf-8?B?T2VLUEZzUjY1dFhJS2U5amw2NkpSNC8vc1FpdTYxcmkxSFExSWVYejJ4MjRJ?= =?utf-8?B?VE9QaU9ZdjJ6VStTV2ZQb25yb05OdUNXM2xEMGROTG1hSG5nM1JTQTFRcVpG?= =?utf-8?B?V1VnclpDQ0h0RnRjSTlLMnBuTzg0T1VNSnR2Umc5M056Y3VPRUlxdG1oaW5K?= =?utf-8?B?dXdUaE5yQ09jalpVdWFnZXg2bnhyd1RPWVhOcTRxM1FYU2hocTdxWEpvNXhD?= =?utf-8?B?Q1lhTlEwOVdMWGY3UktiNFZSTjVEWFY3NGhMTXhya2lMcTB6QzJUYW9sV0Qz?= =?utf-8?B?SFFkUG9wb0NuY2ZPWjVlYVVDK0JjLzQ5RjJYdGlEa25MSUlzWFBobUtpZ0Rr?= =?utf-8?B?OGxrMXd2SDZKQ1FCRXFjUnBuWnlMeS9nR3ppamFSc0RlL0ExN1MydVFUUERw?= =?utf-8?B?R05hajZydnU4U04yK0xTemRtbmZmbmdqeCt0SloxRERPd0NTU21iVEIrMWlj?= =?utf-8?B?WmkxNTJZdjdvN05VbkRWTmZLKzdrQXFobjJXYXpZQjVtQytaNVhkclJPaVFk?= =?utf-8?B?Z0x0T29KWjRpdSs4QlhCbHlBWTcrcTh1c2FTeE1UZU9lcVQzUFh1aDdjYUt4?= =?utf-8?B?cXY3RGZhMy9OMVB2cURJay9VbC9Hamt2K0lkOXVYelNvLzlGemtjcWVVS3E4?= =?utf-8?B?QkREeHJqMHNHSEQyY2pXbVZNb29qNTZPRGJBQUV0Ty8zQVY4NVFKVnlkMWdW?= =?utf-8?B?NUQ3U3VjRFIyV2pDMmVnNHMwa1lFelc2Z2FXZm5SbHpXMlhXNGZNd1NTQnVN?= =?utf-8?Q?j5Q7Sb8A/8aNLyocKxU7o4s2+HZlTc=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR11MB5373.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(7416014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ditXN0g0N0s1bWI3NkIyZUV3TE14dFppTGxpQk4ybUhkMkVZeXJxTEZBM2Zj?= =?utf-8?B?S0Z3ZGF5dzJ2SEtzeER6ajhlVXFvamxDRlFYMUYzNEhrZXBXK2NZN21qMmdB?= =?utf-8?B?bWlxbnRUZVZIUEFrWjc2ZTl1ek9vYXVlL0RCc0Q5enZpeEZjMjh5RmxrSzNO?= =?utf-8?B?OVlGblIvelUzQ3FFb21qK2pMSTcwMWthdzdIT0FzRlV1djhPNDB2Mm5BV25P?= =?utf-8?B?NU5pVHI1MWFRTkJUNnVzclF0QkE3MzlXWDkxSlFmQXd1Tjl3T1N1amR2bUFR?= =?utf-8?B?dDhEL1VJekFFb3h4L3BGS3o5dEFpMThOVzRnWEQ4a0ZHd3JjeGVXTmdJWHVp?= =?utf-8?B?VnVBYVhzaFRZNVdtYVU2LytybjdTVTNnSklzdjdVV2xuTU1XS1psSHBWY3RO?= =?utf-8?B?UWc4MDRsQlNGdEdGSEpEb2I5T0tYMSt6UnZBNjRQZ0dZbUFXaFBTUitvc3VE?= =?utf-8?B?Qit3ekFZZnR1ZGpLM3BHeHFldDFnM2hpbWxYNUFuVjdsWTlHeUplUDlyV2hF?= =?utf-8?B?QU1yT1hRb1RHZjc2VUorWkM4Z1ZMWFZZby9UMjk3UmFuZWExc1R4S1ZtTlpa?= =?utf-8?B?Um8vcjhGV3paWkhZbUcxWjdUWDZQMk91bWNDajBsVGRXWmVGSVNqTm5FQXNZ?= =?utf-8?B?U0ZhYXpWdHZwc2Y0VlZYU0paYm40Q0NRc2RtRks5RzhiRWFVQ1pRTmVkb0x4?= =?utf-8?B?R0drQ0QzdEdCeEhhb2ZHaDhFTGdpYnhGZW41dElFTVZCc2ZpSUVEeVpBNGNz?= =?utf-8?B?d2I0b0s5RDZ6bjBmODErZHg2V3NtTGZ2NU02dWRVNkI2b29zcW10b09MVXpC?= =?utf-8?B?Y3JSRzJpYUJNUmJYeVAxYnpOT3l3N1E1WmpUWVM5NE1FbzFIRm93K1AwTEEw?= =?utf-8?B?ZnRwN2xUeEkzK0NjcFBpeFRKTHFEVjU0OWhNTDVCRkRueXZvMWNTZlBtQUt0?= =?utf-8?B?NGFndXV6YmRNdTJFUlNYc1FjV2s2aVltV1pLVlFWRU1rbTBSRWp2VFhyZnAw?= =?utf-8?B?ZVNVL1pwRUlDVHg2NzhNRzdGYlhxWkY3endGY2FoVGxXOEhzaTFSN2dEd1FL?= =?utf-8?B?V1ZjV0xjRy8yZ2RBbDBLUDhXRDZoU09VUXBpUlV3VkEvOUp6bnlTRGlrM2xr?= =?utf-8?B?eGVselFvd0lLd05WNjluK01XMlVZN1E3T0RFdElxOGRaMCt2L0JHeERnUmY0?= =?utf-8?B?SkxBbUJaeEhIVXJVelRqVnVwSXB6ejgrZFVSS0lRWm5lWUVwUWxoUXJBL3Nw?= =?utf-8?B?UFM0eDhHaUltUDQvTjNkQnc5MkthV2ZWaVdiTUY1aDJjVlZlMXpMVlRnNnVG?= =?utf-8?B?dmM2UlJFaHp6T3N4d0RTcXdnemNwc01DRG1ZTmhzRE1RaFZrUWhWU2ZPSnlk?= =?utf-8?B?cDNZNmc0UU1ZUXFyaTJLZ0tQZnFwSWRvYTJTZWZsbS9yWWZJM05aYTJlcmJj?= =?utf-8?B?WFRLejVZWWliQmdTdDJ0aTZnTFBvbjQzZVhsRWl0NmxsdEt4NXBxWVV6R0xB?= =?utf-8?B?TnV0Z3BPejEza2xVdTNBa3pnNVJOZzl5Y0hyUFRDV2hzUzNKbCszWWprZVpV?= =?utf-8?B?d1podjRMNkxBR2U2Sm1mbjdBRTFyZjlMY2o3ZzhqQ3hvNVYrbXJXMG9zWFpk?= =?utf-8?B?VUdrVDlJVE4yM0xJb2FxTE5ZNnlXNjVzTVpsalNzRVpuc3RiSXM1Rnl4Q1ZL?= =?utf-8?B?VFhYdmFZK1VZWDhvZ2dWam1rRVB5ZzVyYnNWaDcvMDZPTG13MmhQVHNNWW5h?= =?utf-8?B?K3RQZHhwaGF6YnNoMWMxOFREUHFUcng4K3dRNjlhcEhLR0g0L0Y5Z09abWVY?= =?utf-8?B?L1lGZEUzU3JLWVRuSTdQaEdiMWdHNW1hN0E0cHIxdmZkekFiMGdvYnJRZlps?= =?utf-8?B?Sk9wcEwrR3BTdGJpeTRHaEY5ZnlwM1VDZ1NpL2YvU0RDSTV3eUYxNEd3dlVM?= =?utf-8?B?SnNPbW5EUHpvUmJXcVhrcE14Y214L0pyWXBNMXdFRkNLZnVUeEJ0QXgzYkJR?= =?utf-8?B?ZGs5R2QxNTJzOWhJN204REpJQnV3YVd0T0htejlWaDNhU2doUlBzTVRUU3kr?= =?utf-8?B?QkZJMVpXc3dlRmNOc2wrOHNiei9rRFJyUENhTGJrUzFMQ0M3bjgwYjdUczVV?= =?utf-8?B?elZHaFM2RWZVT0hWQUQ0ZE9jUkgza0pKR0xJV2wxTlFsOWRpUjgxa0NyU1pU?= =?utf-8?B?N1E9PQ==?= X-MS-Exchange-CrossTenant-Network-Message-Id: f1f161c9-944a-4e65-706d-08de2d98edc8 X-MS-Exchange-CrossTenant-AuthSource: DM4PR11MB5373.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2025 09:39:58.4873 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: FmZm/2weZg+7ACyYyUe8D5Vm8VMwA9bu/EHZWWM8rUCfbZT15PP2cpV1lp9jx5O2d7TPxsQhd4oCgBhhZ+JNBPkKUgV/P0gNZsYhJDlkQQs= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR11MB5980 X-OriginatorOrg: intel.com Device specific VFIO driver variant for Xe will implement VF migration. Export everything that's needed for migration ops. Signed-off-by: Micha=C5=82 Winiarski Reviewed-by: Michal Wajdeczko --- drivers/gpu/drm/xe/Makefile | 4 + drivers/gpu/drm/xe/xe_sriov_vfio.c | 80 ++++++++++++++++ include/drm/intel/xe_sriov_vfio.h | 143 +++++++++++++++++++++++++++++ 3 files changed, 227 insertions(+) create mode 100644 drivers/gpu/drm/xe/xe_sriov_vfio.c create mode 100644 include/drm/intel/xe_sriov_vfio.h diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile index c9b60e19cecc6..a7e13a676f7d9 100644 --- a/drivers/gpu/drm/xe/Makefile +++ b/drivers/gpu/drm/xe/Makefile @@ -185,6 +185,10 @@ xe-$(CONFIG_PCI_IOV) +=3D \ xe_sriov_pf_sysfs.o \ xe_tile_sriov_pf_debugfs.o =20 +ifeq ($(CONFIG_PCI_IOV),y) + xe-$(CONFIG_XE_VFIO_PCI) +=3D xe_sriov_vfio.o +endif + # include helpers for tests even when XE is built-in ifdef CONFIG_DRM_XE_KUNIT_TEST xe-y +=3D tests/xe_kunit_helpers.o diff --git a/drivers/gpu/drm/xe/xe_sriov_vfio.c b/drivers/gpu/drm/xe/xe_sri= ov_vfio.c new file mode 100644 index 0000000000000..e9a7615bb5c51 --- /dev/null +++ b/drivers/gpu/drm/xe/xe_sriov_vfio.c @@ -0,0 +1,80 @@ +// SPDX-License-Identifier: MIT +/* + * Copyright =C2=A9 2025 Intel Corporation + */ + +#include +#include + +#include "xe_pci.h" +#include "xe_pm.h" +#include "xe_sriov_pf_control.h" +#include "xe_sriov_pf_helpers.h" +#include "xe_sriov_pf_migration.h" + +struct xe_device *xe_sriov_vfio_get_pf(struct pci_dev *pdev) +{ + return xe_pci_to_pf_device(pdev); +} +EXPORT_SYMBOL_FOR_MODULES(xe_sriov_vfio_get_pf, "xe-vfio-pci"); + +bool xe_sriov_vfio_migration_supported(struct xe_device *xe) +{ + if (!IS_SRIOV_PF(xe)) + return -EPERM; + + return xe_sriov_pf_migration_supported(xe); +} +EXPORT_SYMBOL_FOR_MODULES(xe_sriov_vfio_migration_supported, "xe-vfio-pci"= ); + +#define DEFINE_XE_SRIOV_VFIO_FUNCTION(_type, _func, _impl) \ +_type xe_sriov_vfio_##_func(struct xe_device *xe, unsigned int vfid) \ +{ \ + if (!IS_SRIOV_PF(xe)) \ + return -EPERM; \ + if (vfid =3D=3D PFID || vfid > xe_sriov_pf_num_vfs(xe)) \ + return -EINVAL; \ + \ + guard(xe_pm_runtime_noresume)(xe); \ + \ + return xe_sriov_pf_##_impl(xe, vfid); \ +} \ +EXPORT_SYMBOL_FOR_MODULES(xe_sriov_vfio_##_func, "xe-vfio-pci") + +DEFINE_XE_SRIOV_VFIO_FUNCTION(int, wait_flr_done, control_wait_flr); +DEFINE_XE_SRIOV_VFIO_FUNCTION(int, suspend_device, control_pause_vf); +DEFINE_XE_SRIOV_VFIO_FUNCTION(int, resume_device, control_resume_vf); +DEFINE_XE_SRIOV_VFIO_FUNCTION(int, stop_copy_enter, control_trigger_save_v= f); +DEFINE_XE_SRIOV_VFIO_FUNCTION(int, stop_copy_exit, control_finish_save_vf); +DEFINE_XE_SRIOV_VFIO_FUNCTION(int, resume_data_enter, control_trigger_rest= ore_vf); +DEFINE_XE_SRIOV_VFIO_FUNCTION(int, resume_data_exit, control_finish_restor= e_vf); +DEFINE_XE_SRIOV_VFIO_FUNCTION(int, error, control_stop_vf); +DEFINE_XE_SRIOV_VFIO_FUNCTION(ssize_t, stop_copy_size, migration_size); + +ssize_t xe_sriov_vfio_data_read(struct xe_device *xe, unsigned int vfid, + char __user *buf, size_t len) +{ + if (!IS_SRIOV_PF(xe)) + return -EPERM; + if (vfid =3D=3D PFID || vfid > xe_sriov_pf_num_vfs(xe)) + return -EINVAL; + + guard(xe_pm_runtime_noresume)(xe); + + return xe_sriov_pf_migration_read(xe, vfid, buf, len); +} +EXPORT_SYMBOL_FOR_MODULES(xe_sriov_vfio_data_read, "xe-vfio-pci"); + +ssize_t xe_sriov_vfio_data_write(struct xe_device *xe, unsigned int vfid, + const char __user *buf, size_t len) +{ + if (!IS_SRIOV_PF(xe)) + return -EPERM; + if (vfid =3D=3D PFID || vfid > xe_sriov_pf_num_vfs(xe)) + return -EINVAL; + + guard(xe_pm_runtime_noresume)(xe); + + return xe_sriov_pf_migration_write(xe, vfid, buf, len); +} +EXPORT_SYMBOL_FOR_MODULES(xe_sriov_vfio_data_write, "xe-vfio-pci"); diff --git a/include/drm/intel/xe_sriov_vfio.h b/include/drm/intel/xe_sriov= _vfio.h new file mode 100644 index 0000000000000..e9814e8149fd5 --- /dev/null +++ b/include/drm/intel/xe_sriov_vfio.h @@ -0,0 +1,143 @@ +/* SPDX-License-Identifier: MIT */ +/* + * Copyright =C2=A9 2025 Intel Corporation + */ + +#ifndef _XE_SRIOV_VFIO_H_ +#define _XE_SRIOV_VFIO_H_ + +#include + +struct pci_dev; +struct xe_device; + +/** + * xe_sriov_vfio_get_pf() - Get PF &xe_device. + * @pdev: the VF &pci_dev device + * + * Return: pointer to PF &xe_device, NULL otherwise. + */ +struct xe_device *xe_sriov_vfio_get_pf(struct pci_dev *pdev); + +/** + * xe_sriov_vfio_migration_supported() - Check if migration is supported. + * @xe: the PF &xe_device obtained by calling xe_sriov_vfio_get_pf() + * + * Return: true if migration is supported, false otherwise. + */ +bool xe_sriov_vfio_migration_supported(struct xe_device *xe); + +/** + * xe_sriov_vfio_wait_flr_done() - Wait for VF FLR completion. + * @xe: the PF &xe_device obtained by calling xe_sriov_vfio_get_pf() + * @vfid: the VF identifier (can't be 0) + * + * This function will wait until VF FLR is processed by PF on all tiles (or + * until timeout occurs). + * + * Return: 0 on success or a negative error code on failure. + */ +int xe_sriov_vfio_wait_flr_done(struct xe_device *xe, unsigned int vfid); + +/** + * xe_sriov_vfio_suspend_device() - Suspend VF. + * @xe: the PF &xe_device obtained by calling xe_sriov_vfio_get_pf() + * @vfid: the VF identifier (can't be 0) + * + * This function will pause VF on all tiles/GTs. + * + * Return: 0 on success or a negative error code on failure. + */ +int xe_sriov_vfio_suspend_device(struct xe_device *xe, unsigned int vfid); + +/** + * xe_sriov_vfio_resume_device() - Resume VF. + * @xe: the PF &xe_device obtained by calling xe_sriov_vfio_get_pf() + * @vfid: the VF identifier (can't be 0) + * + * This function will resume VF on all tiles. + * + * Return: 0 on success or a negative error code on failure. + */ +int xe_sriov_vfio_resume_device(struct xe_device *xe, unsigned int vfid); + +/** + * xe_sriov_vfio_stop_copy_enter() - Initiate a VF device migration data s= ave. + * @xe: the PF &xe_device obtained by calling xe_sriov_vfio_get_pf() + * @vfid: the VF identifier (can't be 0) + * + * Return: 0 on success or a negative error code on failure. + */ +int xe_sriov_vfio_stop_copy_enter(struct xe_device *xe, unsigned int vfid); + +/** + * xe_sriov_vfio_stop_copy_exit() - Finish a VF device migration data save. + * @xe: the PF &xe_device obtained by calling xe_sriov_vfio_get_pf() + * @vfid: the VF identifier (can't be 0) + * + * Return: 0 on success or a negative error code on failure. + */ +int xe_sriov_vfio_stop_copy_exit(struct xe_device *xe, unsigned int vfid); + +/** + * xe_sriov_vfio_resume_data_enter() - Initiate a VF device migration data= restore. + * @xe: the PF &xe_device obtained by calling xe_sriov_vfio_get_pf() + * @vfid: the VF identifier (can't be 0) + * + * Return: 0 on success or a negative error code on failure. + */ +int xe_sriov_vfio_resume_data_enter(struct xe_device *xe, unsigned int vfi= d); + +/** + * xe_sriov_vfio_resume_data_exit() - Finish a VF device migration data re= store. + * @xe: the PF &xe_device obtained by calling xe_sriov_vfio_get_pf() + * @vfid: the VF identifier (can't be 0) + * + * Return: 0 on success or a negative error code on failure. + */ +int xe_sriov_vfio_resume_data_exit(struct xe_device *xe, unsigned int vfid= ); + +/** + * xe_sriov_vfio_error() - Move VF device to error state. + * @xe: the PF &xe_device obtained by calling xe_sriov_vfio_get_pf() + * @vfid: the VF identifier (can't be 0) + * + * Reset is needed to move it out of error state. + * + * Return: 0 on success or a negative error code on failure. + */ +int xe_sriov_vfio_error(struct xe_device *xe, unsigned int vfid); + +/** + * xe_sriov_vfio_data_read() - Read migration data from the VF device. + * @xe: the PF &xe_device obtained by calling xe_sriov_vfio_get_pf() + * @vfid: the VF identifier (can't be 0) + * @buf: start address of userspace buffer + * @len: requested read size from userspace + * + * Return: number of bytes that has been successfully read, + * 0 if no more migration data is available, -errno on failure. + */ +ssize_t xe_sriov_vfio_data_read(struct xe_device *xe, unsigned int vfid, + char __user *buf, size_t len); +/** + * xe_sriov_vfio_data_write() - Write migration data to the VF device. + * @xe: the PF &xe_device obtained by calling xe_sriov_vfio_get_pf() + * @vfid: the VF identifier (can't be 0) + * @buf: start address of userspace buffer + * @len: requested write size from userspace + * + * Return: number of bytes that has been successfully written, -errno on f= ailure. + */ +ssize_t xe_sriov_vfio_data_write(struct xe_device *xe, unsigned int vfid, + const char __user *buf, size_t len); +/** + * xe_sriov_vfio_stop_copy_size() - Get a size estimate of VF device migra= tion data. + * @xe: the PF &xe_device obtained by calling xe_sriov_vfio_get_pf() + * @vfid: the VF identifier (can't be 0) + * + * Return: migration data size in bytes or a negative error code on failur= e. + */ +ssize_t xe_sriov_vfio_stop_copy_size(struct xe_device *xe, unsigned int vf= id); + +#endif --=20 2.51.2 From nobody Mon Dec 1 22:36:16 2025 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 94EDA32AADD; Thu, 27 Nov 2025 09:40:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=192.198.163.18 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764236411; cv=fail; b=Ml/Eb7acypePJVDrrzZPBLjWo2I8ABrLBVcPFW71RhRqdx3w0mzyxKo0Q3xB+YMYT5AszvRs+GtSxRuA/V1KEj18G14eiORyDHTMNjPuLrnFDpNaU9INjw+gpjpxnTMdrJ/KxrENJlzE77mpD2Y5d2pgNSWjdRCqX9q/kFuc9sA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764236411; c=relaxed/simple; bh=6qOOPeYZd++mVUVz8SDakDv7MGM+o2I532UHlwoJl2I=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=RfqFJfUQC2BXrzFPllFUSHHzFJgVApOk1wxbZqhAZDC/GHvfSm1esHw9IHkTVYX2VvNSvuLyzpYMEpx3kDt1c1LrgASZR9QCgdHBhTBZMWh+DFrw21uYTrXNzISwh3NUflKvZ/BWndrEGPd+QI4/qLapGdiu96clvWvM5b20W/c= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=Lwi48T6V; arc=fail smtp.client-ip=192.198.163.18 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="Lwi48T6V" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1764236409; x=1795772409; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=6qOOPeYZd++mVUVz8SDakDv7MGM+o2I532UHlwoJl2I=; b=Lwi48T6VZXGLrEfoeh29ULyeT9mLEHaMBpCS4bzR4S12uRubw6na7oGU zCgIaGy3X2pgm9E8IX8/+qqSBMOEyY0YmVWBC9H1anJcuK+ZilaNopsau W9zT5WQLZYKX4hr7k9ZFHvh/kJrAM1K1ATSnb2rNpt3XFXuq0WrCp8MhX 5YuYVGjzQ4EgIbDYeTpvCgIHoptuQYdd7rCQI/GtArsEW48IuE37q5g1K faHAjM5bUePB8IaKxwXAi5lXkqRVvRyfy2/AbXXLU5QMq9FcLebZ8AD6O oqTkxi58w5BWK5iM9YhFBzbITaE79xEA/aHKYvOr5mQweQeXYUkvvR/a/ Q==; X-CSE-ConnectionGUID: OzWl2f5oREKWZ+JG+S/B3Q== X-CSE-MsgGUID: hfJkcJUCTpuRVwaJevbu0Q== X-IronPort-AV: E=McAfee;i="6800,10657,11625"; a="65467354" X-IronPort-AV: E=Sophos;i="6.20,230,1758610800"; d="scan'208";a="65467354" Received: from fmviesa010.fm.intel.com ([10.60.135.150]) by fmvoesa112.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Nov 2025 01:40:08 -0800 X-CSE-ConnectionGUID: gUNXCw7KSTOr9jQVEObPJA== X-CSE-MsgGUID: iF1C+2ARQc2JoQ0BcKbB9w== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.20,230,1758610800"; d="scan'208";a="193999121" Received: from fmsmsx902.amr.corp.intel.com ([10.18.126.91]) by fmviesa010.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Nov 2025 01:40:07 -0800 Received: from FMSMSX901.amr.corp.intel.com (10.18.126.90) by fmsmsx902.amr.corp.intel.com (10.18.126.91) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Thu, 27 Nov 2025 01:40:07 -0800 Received: from fmsedg903.ED.cps.intel.com (10.1.192.145) by FMSMSX901.amr.corp.intel.com (10.18.126.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29 via Frontend Transport; Thu, 27 Nov 2025 01:40:07 -0800 Received: from PH7PR06CU001.outbound.protection.outlook.com (52.101.201.60) by edgegateway.intel.com (192.55.55.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Thu, 27 Nov 2025 01:40:06 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=HeJJ1u3OPxc+BMcutQGuVqAyA1rePrWdv7YuDZXimzesvThETlgicUmocq/qPMFuOXBjeWnIVSR8nQwIXPV+9QUKwFqaK5ugnOXh2iGAtNHHbxqWX7dyovXnAfShmeyZnaBBHBKEH1dMXG7d+TlNIbl6n3+20INGJGRelH7USQK3SfNXiRdb94vxmMKvQSv1+KLZvo+J4tPiGZVyio4bd/GSfh1z5QPVzZZDGbM5Il3euMLMYWXSFdFy3Wsru5ITzaSDAgSJW2EsacFW1Fnb65COTCbuARIuw7eFvTfponaHSHySM0FRvNU1DW0oWYj4TY7VrjdnAtczYVTrUXlfsw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=Oevr8P9weYP5XebNGSh/hc/SI3Mk1a9fHP7v7CoSeS0=; b=GHMWgSrD6fhmNed7AxrMcm9eZG0Pq8Q05AEXsfXXLQo1Ult7cY/Enpfk4LJbJbxD2yiNXahijwFrVmF9KDSgmfpKtGSAM9Tmr8mtiX2Gusju0amdDhhjGvXQm1Fz05Oe/Rkg16xtXZyBpm0BeLUq8963PARoT6NLksQruzkDYPAOxWdMIjVBGU1KYlEqhH/loKdYQxYUYFVPEjFH/ar9IX2jJghmwh0cRkEOkJ9cYjcZrWxFABq3fdlLaB2z2jm4uCTpEQE1xVUvbeooyGsK8E3ufN6JNfeXRNEI6aS7j9dC2pQ7txAG1avd3EU1xIl9WnMDP8U7mrKZ9JX6f8j4cw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; Received: from DM4PR11MB5373.namprd11.prod.outlook.com (2603:10b6:5:394::7) by BL1PR11MB5980.namprd11.prod.outlook.com (2603:10b6:208:387::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9366.11; Thu, 27 Nov 2025 09:40:04 +0000 Received: from DM4PR11MB5373.namprd11.prod.outlook.com ([fe80::927a:9c08:26f7:5b39]) by DM4PR11MB5373.namprd11.prod.outlook.com ([fe80::927a:9c08:26f7:5b39%5]) with mapi id 15.20.9366.012; Thu, 27 Nov 2025 09:40:04 +0000 From: =?UTF-8?q?Micha=C5=82=20Winiarski?= To: Alex Williamson , Lucas De Marchi , =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= , Rodrigo Vivi , Jason Gunthorpe , Yishai Hadas , Kevin Tian , Shameer Kolothum , , , , Matthew Brost , "Michal Wajdeczko" CC: , Jani Nikula , Joonas Lahtinen , Tvrtko Ursulin , David Airlie , Simona Vetter , "Lukasz Laguna" , Christoph Hellwig , =?UTF-8?q?Micha=C5=82=20Winiarski?= Subject: [PATCH v7 4/4] vfio/xe: Add device specific vfio_pci driver variant for Intel graphics Date: Thu, 27 Nov 2025 10:39:34 +0100 Message-ID: <20251127093934.1462188-5-michal.winiarski@intel.com> X-Mailer: git-send-email 2.51.2 In-Reply-To: <20251127093934.1462188-1-michal.winiarski@intel.com> References: <20251127093934.1462188-1-michal.winiarski@intel.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: VI1PR10CA0088.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:803:28::17) To DM4PR11MB5373.namprd11.prod.outlook.com (2603:10b6:5:394::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR11MB5373:EE_|BL1PR11MB5980:EE_ X-MS-Office365-Filtering-Correlation-Id: 2c3b8e91-d109-4aaf-0f5a-08de2d98f144 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|7416014|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?eW5xd2t5UHRsK3g0UlFwaExJaWJoaE4yT282cTg1MkN4dXczZkhQZzhlOVZR?= =?utf-8?B?bVhkdnZzbFJGN1Y2ZnNZb1MvZnRseFNqQ3d0NVJjVDU5Y2pnRGdRbHNoV1JM?= =?utf-8?B?VzU0VUlaamxPT1BJeTE2OXlCZ2pQS1BWZURrZTJaWDN3OENWT291V2NmN2hz?= =?utf-8?B?dlFpUWkwY2RiV2JpK1JlVmwvOVFoVkhDZ1VsamI2K2NjSGM0TUNwU2JqRnd5?= =?utf-8?B?RjVydFlad2NQV0xXMmlhanJnSGNFdC9Vb01Bcm1vWnhIaGczSTZGT2Z3YlhY?= =?utf-8?B?MlBMNHpad3RBMVgxbkF5RFQvMExHOUhKYWVMQzE3RExTWEo0T1MyL0p3blZH?= =?utf-8?B?cTFBWjc0Uml2RzBUa3FDdHdkRUt0Kzc0dnBYOFZKMTBWSlJEcld5eXY5Wkdy?= =?utf-8?B?djdxdzJESitUdFI5c3JEOHJ1dHQ0amxPS1QwdGNISzhHSHlHbzR5T2ZNRjdS?= =?utf-8?B?TWdLUEhQcXdiUms4NGRaQWVoOVBvVXgwZ3VKbXVpTFpLQ01qbm1TS1VGSFo1?= =?utf-8?B?eTNPZUYxZ3ZwbGNKKzRLbGFnWjRmTDhaNzZTbUVJRzJhbmlIeDNBUHRxTUVO?= =?utf-8?B?cnZxNVNwQWJHa2JPaXVXV1NMWlVyc1RTRDBxTHRQZ2U4STQ5U1FuYkFwVy9B?= =?utf-8?B?YmIzdVBDYzFEQUFGb0J5RTBBNnZVdVEycFZDZVVoSStod2tSNFh4U2hFalNw?= =?utf-8?B?bWVIMWJBMENBU00wNnZQODI2N3Y4QmZCUWZZZmVoeFFGN1VSZkI2VFJPbVNv?= =?utf-8?B?UXVia2tKbCs0WG1KRTMwbzBuUGk1dTVnSHkwMjhMWmJqV0xxMmlWVEhCbktR?= =?utf-8?B?WjZ0QzJaMFpKMW15WUtPa0NkUUhhSkV3RW15YVFOdjJNWURycEM1eEsrVjhG?= =?utf-8?B?blNHZUFpeEZZaVp5NmhRYWV2dW01T1VZNndkOVk1N1NxSGM5TWZhQXhHd3NE?= =?utf-8?B?SVo5Z2wwSHZEU1kyS3I1OHV6L1BqejErdVlSSGhZc0dNR3lDR0p4K1JsR2dm?= =?utf-8?B?anRSTmFzQlVueFdwMG8rTTVJUFJoalRWcmRBM2xSNER0WmFMaE9MYVpUNE1R?= =?utf-8?B?WkorN2pjT252VzE2elR3a1F1a21LckV6YmxZN0JzZ1FIaS9hY20yUWpDaFB2?= =?utf-8?B?WlVMaS9oUWNmQng4d0gwMldEMENTeTJHS2o3bTFEUE16d001U0xmVHU3c2I2?= =?utf-8?B?MjBTazlZY3dZQVdDRlprVFlGUGlFenNSMURhVGt5My9GUVo5VUJ2WVJUMzM0?= =?utf-8?B?czByZ0ZvcGZ3cXo3bjYzbFhDTEFjNC9zNVJjZFFudVh1aXJFY21OQ3BxQkxC?= =?utf-8?B?cUpJRy9iQzJSMVhqc1JqQmVIaGkxTXV1d05sT2ZYMlpuQVROMm9HdXVDZHZZ?= =?utf-8?B?YTFzYlR4S2dIbVB4Q0U4dm1Bd05VVWt1ME1ycGptLzE0aHl3WlBGc2R4VnA5?= =?utf-8?B?TUovUGJqR1ZwWXhId3FoTXdHaUN5NnJVZFVkbUNRYjN2RllJNEt5b3ZrVTNB?= =?utf-8?B?TkVpdVlPUVJYOFZkUEp2YU91cXRKYU91Q1hHVnNXUGpJU2ZUZ0l2TUZsMjg1?= =?utf-8?B?WTFYakJ2RlJQT2JaSy9BVEUxTzNwaExtb1NGTVpRaGZGRllZT3dtQnVLTTVx?= =?utf-8?B?dUdIQ0dESy9IVk45cklvNlRYRUJ1SUw3eG55Mm9MMVoyUm5wSmFrQys3RjE0?= =?utf-8?B?VWhmYS9rVk9aYmJPTm9VbnUzM3FZMkxselB4R0Q4ampoQmZHOUNIYTF5MjZK?= =?utf-8?B?ZXd6d1FHOVZURDhqOTRsOHBJYjdmenJ5Q2ZmcUt5SzRUZDB2UnBhdnhFWFdQ?= =?utf-8?B?ZytCZHFzY3RzcUZBNkt2VE1nd1p1WG9XdlVnUnBTQXhNV0h4NmZJQ3Rkd3Fw?= =?utf-8?B?SW9Md3J1MnNYWnZUbS83RWhnYWhzQnpyUzZoakhsSGh5Y1o1Y1VnWHJQa2dZ?= =?utf-8?B?QVJwT3lQTURMb3BTb3NvNDRTa1JFLzNZUWt6U0xSczlFYlQ4ZnE5MGZmaC9y?= =?utf-8?Q?JnL1DMJu8Ypih6CrAkbsEmqHK1Tj00=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR11MB5373.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(7416014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?bDg5OXdJZnZ4Nm43R0JoeWJ6eGtsRzdWMk9FS0tIUHNoakdmUnhFS1lPQWZH?= =?utf-8?B?VXMrSDhnenNXcXhHdllTQnd5MTVDR29mRVZBOE1vMTZEd2NZM0RCckNaTWZJ?= =?utf-8?B?OVFmckFlRGFlVGMvblp0cE4xTTJCVmIzczV0MlRHbnJGQW9ueGRQUzhzRy9G?= =?utf-8?B?bTAwSHpiNTBKcTVhU1p2Ymk0Qmp0VHRZVEd0ZmdCYm9WaTdWdHozVU1vVEE3?= =?utf-8?B?RFZtRTZvelQ0dGdQSWJJSVg1SFpmTTMxVDE0cjk1eTlKNmhycDB3aFlFbU1t?= =?utf-8?B?YXByR1RvSFh0c2ZXemlvajUyQW1rVUxMOUdqUDlGejhvYmRuczlqUmFIYUJu?= =?utf-8?B?aG5VZ2F1aTIxdU9HYTdPYVFFUUJabXFMN1V5Rk9HV0VyYXBrRmtSNi96QzBl?= =?utf-8?B?WERVcWo2STNvSE56My9wSW9PeVZacmtGMk01bE13NWc3V2VGVmhKUUN0dU4y?= =?utf-8?B?dkV2ejJ2L290TWhJNW84MllTZmVFSVNxcVZobjN5UXZTVFZQaUg0NytaRDhU?= =?utf-8?B?NmdyeVhSdGhHRkdVZkN2c1lnVkVGSDQ2eU5udi9IeWlJZ1lLUTRlR2p5disw?= =?utf-8?B?U2ZWS00rS0Fya2V4aFBNd1UzbmdRVkxZRXd2cnRNWXE0Q3RXcDhiR051eGUv?= =?utf-8?B?VE0rVHVLTnZRY3AyMHlNMVlwb0M3ZnJCMytpUnlacTlwY2hHWnFsWFdtdTBo?= =?utf-8?B?WmRGZmZUc09vOXRQVDE1UmpoNTVPWHlmMVBVOU5MbWlkbkkxaU5WWkVtL3hI?= =?utf-8?B?VDd6KzBTNlMwem1CdkMvdy8zVzlGUDlXaWpuSUg5N002SStKam92TnlWdjJQ?= =?utf-8?B?cG9pRFgwT2IxMDlhMFVDeDFFUzVGOFUydEFLM2JCcGIwYkNpbERQcWZVekYy?= =?utf-8?B?RmxRTHVvZndaS1NuYXNkb2FTQWlrODNOV203THNzcnRtNnA1Q2Q5cGs3cnAv?= =?utf-8?B?VkxWOXVWWEFxU0V5VzVybEtuWGEyd3ZyZXRVeE1pL0Vmbnd1dTQ5Z1lWeW1U?= =?utf-8?B?SDNiWElXemg0RzdWZmdlRzZLQXBsTlJpU3RCWGVyZjBxeW1lZXhXejdPVWc1?= =?utf-8?B?UUQwNFVoUFNhUFdwdS9JN0RjaHBZN01KQkh5NW5hd2Y1SVMyNU1PNlVuY2Vy?= =?utf-8?B?MVcwWDZvK2hjd2JvRGwxeTllc2xXUW5GUXpvNTlodHJvdmluNC9TQVZ6dlRM?= =?utf-8?B?ODEzTDJjYjJ6MXJINkp5elRMU0czVFhvSnFIVklaL2taQ0FXcGZ6d3g1V2lU?= =?utf-8?B?dWJTaWs0cjZZa3BRdkwrTlhyOU8wemtSd1BjSDlVYi80WUJhQkQ4ZmFRUEVi?= =?utf-8?B?cXNsaTBQZGlGZVYxaVFIczF4bVhxVjhWS0RBeDRoKzIyQTNuNTA3QjBPVXlB?= =?utf-8?B?YzVCTlRibUwxSTZQcXRBbmwvSXlpZld4WGUrdVRNeUNZelBMNnlsdlFjM2NY?= =?utf-8?B?MXA5eGYrZytGOU85bzBlUk9tWGk0R3lQV1ZTbEFVZ29BSVdTaUlHQ2JVNTNj?= =?utf-8?B?dHNJMHdnRkN5OHl3OVBSYnZlVUtqcGlxdjdhcm9MZG5pMldFamlmTzlZNVIz?= =?utf-8?B?MzB2SG83MHZzU25SQlFpR2l3cXV0ZjRLV1R0bElzNXBvWVpjM3lCZTBjUEVo?= =?utf-8?B?UERqK0RtM1EyNmM3Ni9yWHVIMkVyQitzeFQ2ZnI4NHZBZjRZbnA5RURMcUc2?= =?utf-8?B?UlZBYlRLVzNqR25VcitFMGR5eDFzeXNZTjBVRnZVTkVNK1JlbzFMSU1NWFZx?= =?utf-8?B?ZWk4bjZwRkxCSmxUcWlGKzg0UW12NWUrenZDbXQ3MythelBPZ1JsbTMxQlk5?= =?utf-8?B?N0NpaVl4azhZK2JTUDlCMHlkdFBMZ2tqTnhvaVZmVXJYK1Zsc2dEdGM4TlQ4?= =?utf-8?B?MkNLWGFKb01pOTRmZzNPVDlqWmE2K1hwRTU5Y0VWdmdMeEhGOTBkMDlUdTBF?= =?utf-8?B?ZmwvVkQwZHdKbktVNWtOOWhtMEp4aUpiaXQweDIxR1NualVmdnpobGowZ1Rh?= =?utf-8?B?VUpZNkVnVFNZL3R5WncrUGdWcEN6STI4NDRjbzd5b084WDlJbm9TNHJZbTZy?= =?utf-8?B?WWpSTlovVFBmejNRdks4V0l6K3ZTQjF1VVJ4ZmZGUVNzTUk5K2JYM1ArSTMz?= =?utf-8?B?QmpXOVM0d2pqcjNwUDJiQy9VYzNJbnh3bEp0N280L2JTcWV0UFhBRHB1ck80?= =?utf-8?B?NVE9PQ==?= X-MS-Exchange-CrossTenant-Network-Message-Id: 2c3b8e91-d109-4aaf-0f5a-08de2d98f144 X-MS-Exchange-CrossTenant-AuthSource: DM4PR11MB5373.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2025 09:40:04.1448 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: dYyolvLhcu0bYer1ShvHqm1bFplBr5KqunBJ3OuFxo+Ql4r10nctgA4/A8OdVta/1V8Q4HKbSQh56o2FH5aPlPoyPqKnDufSnuA1C69RynY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR11MB5980 X-OriginatorOrg: intel.com In addition to generic VFIO PCI functionality, the driver implements VFIO migration uAPI, allowing userspace to enable migration for Intel Graphics SR-IOV Virtual Functions. The driver binds to VF device and uses API exposed by Xe driver to transfer the VF migration data under the control of PF device. Signed-off-by: Micha=C5=82 Winiarski Acked-by: Rodrigo Vivi Reviewed-by: Kevin Tian --- MAINTAINERS | 7 + drivers/vfio/pci/Kconfig | 2 + drivers/vfio/pci/Makefile | 2 + drivers/vfio/pci/xe/Kconfig | 12 + drivers/vfio/pci/xe/Makefile | 3 + drivers/vfio/pci/xe/main.c | 573 +++++++++++++++++++++++++++++++++++ 6 files changed, 599 insertions(+) create mode 100644 drivers/vfio/pci/xe/Kconfig create mode 100644 drivers/vfio/pci/xe/Makefile create mode 100644 drivers/vfio/pci/xe/main.c diff --git a/MAINTAINERS b/MAINTAINERS index acc951f122eaf..adb5aa9cd29e9 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -27025,6 +27025,13 @@ L: virtualization@lists.linux.dev S: Maintained F: drivers/vfio/pci/virtio =20 +VFIO XE PCI DRIVER +M: Micha=C5=82 Winiarski +L: kvm@vger.kernel.org +L: intel-xe@lists.freedesktop.org +S: Supported +F: drivers/vfio/pci/xe + VGA_SWITCHEROO R: Lukas Wunner S: Maintained diff --git a/drivers/vfio/pci/Kconfig b/drivers/vfio/pci/Kconfig index 2b0172f546652..c100f0ab87f2d 100644 --- a/drivers/vfio/pci/Kconfig +++ b/drivers/vfio/pci/Kconfig @@ -67,4 +67,6 @@ source "drivers/vfio/pci/nvgrace-gpu/Kconfig" =20 source "drivers/vfio/pci/qat/Kconfig" =20 +source "drivers/vfio/pci/xe/Kconfig" + endmenu diff --git a/drivers/vfio/pci/Makefile b/drivers/vfio/pci/Makefile index cf00c0a7e55c8..f5d46aa9347b9 100644 --- a/drivers/vfio/pci/Makefile +++ b/drivers/vfio/pci/Makefile @@ -19,3 +19,5 @@ obj-$(CONFIG_VIRTIO_VFIO_PCI) +=3D virtio/ obj-$(CONFIG_NVGRACE_GPU_VFIO_PCI) +=3D nvgrace-gpu/ =20 obj-$(CONFIG_QAT_VFIO_PCI) +=3D qat/ + +obj-$(CONFIG_XE_VFIO_PCI) +=3D xe/ diff --git a/drivers/vfio/pci/xe/Kconfig b/drivers/vfio/pci/xe/Kconfig new file mode 100644 index 0000000000000..cc9b6dac6ed39 --- /dev/null +++ b/drivers/vfio/pci/xe/Kconfig @@ -0,0 +1,12 @@ +# SPDX-License-Identifier: GPL-2.0-only +config XE_VFIO_PCI + tristate "VFIO support for Intel Graphics" + depends on DRM_XE && PCI_IOV + select VFIO_PCI_CORE + help + This option enables device specific VFIO driver variant for Intel Graph= ics. + In addition to generic VFIO PCI functionality, it implements VFIO + migration uAPI allowing userspace to enable migration for + Intel Graphics SR-IOV Virtual Functions supported by the Xe driver. + + If you don't know what to do here, say N. diff --git a/drivers/vfio/pci/xe/Makefile b/drivers/vfio/pci/xe/Makefile new file mode 100644 index 0000000000000..13aa0fd192cd4 --- /dev/null +++ b/drivers/vfio/pci/xe/Makefile @@ -0,0 +1,3 @@ +# SPDX-License-Identifier: GPL-2.0-only +obj-$(CONFIG_XE_VFIO_PCI) +=3D xe-vfio-pci.o +xe-vfio-pci-y :=3D main.o diff --git a/drivers/vfio/pci/xe/main.c b/drivers/vfio/pci/xe/main.c new file mode 100644 index 0000000000000..0156b53c678b7 --- /dev/null +++ b/drivers/vfio/pci/xe/main.c @@ -0,0 +1,573 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright =C2=A9 2025 Intel Corporation + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +struct xe_vfio_pci_migration_file { + struct file *filp; + /* serializes accesses to migration data */ + struct mutex lock; + struct xe_vfio_pci_core_device *xe_vdev; + u8 disabled:1; +}; + +struct xe_vfio_pci_core_device { + struct vfio_pci_core_device core_device; + struct xe_device *xe; + /* PF internal control uses vfid index starting from 1 */ + unsigned int vfid; + u8 deferred_reset:1; + /* protects migration state */ + struct mutex state_mutex; + enum vfio_device_mig_state mig_state; + /* protects the reset_done flow */ + spinlock_t reset_lock; + struct xe_vfio_pci_migration_file *migf; +}; + +#define xe_vdev_to_dev(xe_vdev) (&(xe_vdev)->core_device.pdev->dev) + +static void xe_vfio_pci_disable_file(struct xe_vfio_pci_migration_file *mi= gf) +{ + mutex_lock(&migf->lock); + migf->disabled =3D true; + mutex_unlock(&migf->lock); +} + +static void xe_vfio_pci_put_file(struct xe_vfio_pci_core_device *xe_vdev) +{ + xe_vfio_pci_disable_file(xe_vdev->migf); + fput(xe_vdev->migf->filp); + xe_vdev->migf =3D NULL; +} + +static void xe_vfio_pci_reset(struct xe_vfio_pci_core_device *xe_vdev) +{ + if (xe_vdev->migf) + xe_vfio_pci_put_file(xe_vdev); + + xe_vdev->mig_state =3D VFIO_DEVICE_STATE_RUNNING; +} + +static void xe_vfio_pci_state_mutex_lock(struct xe_vfio_pci_core_device *x= e_vdev) +{ + mutex_lock(&xe_vdev->state_mutex); +} + +/* + * This function is called in all state_mutex unlock cases to + * handle a 'deferred_reset' if exists. + */ +static void xe_vfio_pci_state_mutex_unlock(struct xe_vfio_pci_core_device = *xe_vdev) +{ +again: + spin_lock(&xe_vdev->reset_lock); + if (xe_vdev->deferred_reset) { + xe_vdev->deferred_reset =3D false; + spin_unlock(&xe_vdev->reset_lock); + xe_vfio_pci_reset(xe_vdev); + goto again; + } + mutex_unlock(&xe_vdev->state_mutex); + spin_unlock(&xe_vdev->reset_lock); +} + +static void xe_vfio_pci_reset_done(struct pci_dev *pdev) +{ + struct xe_vfio_pci_core_device *xe_vdev =3D pci_get_drvdata(pdev); + int ret; + + if (!pdev->is_virtfn) + return; + + /* + * VF FLR requires additional processing done by PF driver. + * The processing is done after FLR is already finished from PCIe + * perspective. + * In order to avoid a scenario where VF is used while PF processing + * is still in progress, additional synchronization point is needed. + */ + ret =3D xe_sriov_vfio_wait_flr_done(xe_vdev->xe, xe_vdev->vfid); + if (ret) + dev_err(&pdev->dev, "Failed to wait for FLR: %d\n", ret); + + if (!xe_vdev->vfid) + return; + + /* + * As the higher VFIO layers are holding locks across reset and using + * those same locks with the mm_lock we need to prevent ABBA deadlock + * with the state_mutex and mm_lock. + * In case the state_mutex was taken already we defer the cleanup work + * to the unlock flow of the other running context. + */ + spin_lock(&xe_vdev->reset_lock); + xe_vdev->deferred_reset =3D true; + if (!mutex_trylock(&xe_vdev->state_mutex)) { + spin_unlock(&xe_vdev->reset_lock); + return; + } + spin_unlock(&xe_vdev->reset_lock); + xe_vfio_pci_state_mutex_unlock(xe_vdev); + + xe_vfio_pci_reset(xe_vdev); +} + +static const struct pci_error_handlers xe_vfio_pci_err_handlers =3D { + .reset_done =3D xe_vfio_pci_reset_done, + .error_detected =3D vfio_pci_core_aer_err_detected, +}; + +static int xe_vfio_pci_open_device(struct vfio_device *core_vdev) +{ + struct xe_vfio_pci_core_device *xe_vdev =3D + container_of(core_vdev, struct xe_vfio_pci_core_device, core_device.vdev= ); + struct vfio_pci_core_device *vdev =3D &xe_vdev->core_device; + int ret; + + ret =3D vfio_pci_core_enable(vdev); + if (ret) + return ret; + + xe_vdev->mig_state =3D VFIO_DEVICE_STATE_RUNNING; + + vfio_pci_core_finish_enable(vdev); + + return 0; +} + +static void xe_vfio_pci_close_device(struct vfio_device *core_vdev) +{ + struct xe_vfio_pci_core_device *xe_vdev =3D + container_of(core_vdev, struct xe_vfio_pci_core_device, core_device.vdev= ); + + xe_vfio_pci_state_mutex_lock(xe_vdev); + xe_vfio_pci_reset(xe_vdev); + xe_vfio_pci_state_mutex_unlock(xe_vdev); + vfio_pci_core_close_device(core_vdev); +} + +static int xe_vfio_pci_release_file(struct inode *inode, struct file *filp) +{ + struct xe_vfio_pci_migration_file *migf =3D filp->private_data; + + mutex_destroy(&migf->lock); + kfree(migf); + + return 0; +} + +static ssize_t xe_vfio_pci_save_read(struct file *filp, char __user *buf, = size_t len, loff_t *pos) +{ + struct xe_vfio_pci_migration_file *migf =3D filp->private_data; + ssize_t ret; + + if (pos) + return -ESPIPE; + + mutex_lock(&migf->lock); + if (migf->disabled) { + mutex_unlock(&migf->lock); + return -ENODEV; + } + + ret =3D xe_sriov_vfio_data_read(migf->xe_vdev->xe, migf->xe_vdev->vfid, b= uf, len); + mutex_unlock(&migf->lock); + + return ret; +} + +static const struct file_operations xe_vfio_pci_save_fops =3D { + .owner =3D THIS_MODULE, + .read =3D xe_vfio_pci_save_read, + .release =3D xe_vfio_pci_release_file, + .llseek =3D noop_llseek, +}; + +static ssize_t xe_vfio_pci_resume_write(struct file *filp, const char __us= er *buf, + size_t len, loff_t *pos) +{ + struct xe_vfio_pci_migration_file *migf =3D filp->private_data; + ssize_t ret; + + if (pos) + return -ESPIPE; + + mutex_lock(&migf->lock); + if (migf->disabled) { + mutex_unlock(&migf->lock); + return -ENODEV; + } + + ret =3D xe_sriov_vfio_data_write(migf->xe_vdev->xe, migf->xe_vdev->vfid, = buf, len); + mutex_unlock(&migf->lock); + + return ret; +} + +static const struct file_operations xe_vfio_pci_resume_fops =3D { + .owner =3D THIS_MODULE, + .write =3D xe_vfio_pci_resume_write, + .release =3D xe_vfio_pci_release_file, + .llseek =3D noop_llseek, +}; + +static const char *vfio_dev_state_str(u32 state) +{ + switch (state) { + case VFIO_DEVICE_STATE_RUNNING: return "running"; + case VFIO_DEVICE_STATE_RUNNING_P2P: return "running_p2p"; + case VFIO_DEVICE_STATE_STOP_COPY: return "stopcopy"; + case VFIO_DEVICE_STATE_STOP: return "stop"; + case VFIO_DEVICE_STATE_RESUMING: return "resuming"; + case VFIO_DEVICE_STATE_ERROR: return "error"; + default: return ""; + } +} + +enum xe_vfio_pci_file_type { + XE_VFIO_FILE_SAVE =3D 0, + XE_VFIO_FILE_RESUME, +}; + +static struct xe_vfio_pci_migration_file * +xe_vfio_pci_alloc_file(struct xe_vfio_pci_core_device *xe_vdev, + enum xe_vfio_pci_file_type type) +{ + struct xe_vfio_pci_migration_file *migf; + const struct file_operations *fops; + int flags; + + migf =3D kzalloc(sizeof(*migf), GFP_KERNEL_ACCOUNT); + if (!migf) + return ERR_PTR(-ENOMEM); + + fops =3D type =3D=3D XE_VFIO_FILE_SAVE ? &xe_vfio_pci_save_fops : &xe_vfi= o_pci_resume_fops; + flags =3D type =3D=3D XE_VFIO_FILE_SAVE ? O_RDONLY : O_WRONLY; + migf->filp =3D anon_inode_getfile("xe_vfio_mig", fops, migf, flags); + if (IS_ERR(migf->filp)) { + kfree(migf); + return ERR_CAST(migf->filp); + } + + mutex_init(&migf->lock); + migf->xe_vdev =3D xe_vdev; + xe_vdev->migf =3D migf; + + stream_open(migf->filp->f_inode, migf->filp); + + return migf; +} + +static struct file * +xe_vfio_set_state(struct xe_vfio_pci_core_device *xe_vdev, u32 new) +{ + u32 cur =3D xe_vdev->mig_state; + int ret; + + dev_dbg(xe_vdev_to_dev(xe_vdev), + "state: %s->%s\n", vfio_dev_state_str(cur), vfio_dev_state_str(new)); + + /* + * "STOP" handling is reused for "RUNNING_P2P", as the device doesn't + * have the capability to selectively block outgoing p2p DMA transfers. + * While the device is allowing BAR accesses when the VF is stopped, it + * is not processing any new workload requests, effectively stopping + * any outgoing DMA transfers (not just p2p). + * Any VRAM / MMIO accesses occurring during "RUNNING_P2P" are kept and + * will be migrated to target VF during stop-copy. + */ + if (cur =3D=3D VFIO_DEVICE_STATE_RUNNING && new =3D=3D VFIO_DEVICE_STATE_= RUNNING_P2P) { + ret =3D xe_sriov_vfio_suspend_device(xe_vdev->xe, xe_vdev->vfid); + if (ret) + goto err; + + return NULL; + } + + if ((cur =3D=3D VFIO_DEVICE_STATE_RUNNING_P2P && new =3D=3D VFIO_DEVICE_S= TATE_STOP) || + (cur =3D=3D VFIO_DEVICE_STATE_STOP && new =3D=3D VFIO_DEVICE_STATE_RU= NNING_P2P)) + return NULL; + + if (cur =3D=3D VFIO_DEVICE_STATE_RUNNING_P2P && new =3D=3D VFIO_DEVICE_ST= ATE_RUNNING) { + ret =3D xe_sriov_vfio_resume_device(xe_vdev->xe, xe_vdev->vfid); + if (ret) + goto err; + + return NULL; + } + + if (cur =3D=3D VFIO_DEVICE_STATE_STOP && new =3D=3D VFIO_DEVICE_STATE_STO= P_COPY) { + struct xe_vfio_pci_migration_file *migf; + + migf =3D xe_vfio_pci_alloc_file(xe_vdev, XE_VFIO_FILE_SAVE); + if (IS_ERR(migf)) { + ret =3D PTR_ERR(migf); + goto err; + } + get_file(migf->filp); + + ret =3D xe_sriov_vfio_stop_copy_enter(xe_vdev->xe, xe_vdev->vfid); + if (ret) { + fput(migf->filp); + goto err; + } + + return migf->filp; + } + + if (cur =3D=3D VFIO_DEVICE_STATE_STOP_COPY && new =3D=3D VFIO_DEVICE_STAT= E_STOP) { + if (xe_vdev->migf) + xe_vfio_pci_put_file(xe_vdev); + + ret =3D xe_sriov_vfio_stop_copy_exit(xe_vdev->xe, xe_vdev->vfid); + if (ret) + goto err; + + return NULL; + } + + if (cur =3D=3D VFIO_DEVICE_STATE_STOP && new =3D=3D VFIO_DEVICE_STATE_RES= UMING) { + struct xe_vfio_pci_migration_file *migf; + + migf =3D xe_vfio_pci_alloc_file(xe_vdev, XE_VFIO_FILE_RESUME); + if (IS_ERR(migf)) { + ret =3D PTR_ERR(migf); + goto err; + } + get_file(migf->filp); + + ret =3D xe_sriov_vfio_resume_data_enter(xe_vdev->xe, xe_vdev->vfid); + if (ret) { + fput(migf->filp); + goto err; + } + + return migf->filp; + } + + if (cur =3D=3D VFIO_DEVICE_STATE_RESUMING && new =3D=3D VFIO_DEVICE_STATE= _STOP) { + if (xe_vdev->migf) + xe_vfio_pci_put_file(xe_vdev); + + ret =3D xe_sriov_vfio_resume_data_exit(xe_vdev->xe, xe_vdev->vfid); + if (ret) + goto err; + + return NULL; + } + + WARN(true, "Unknown state transition %d->%d", cur, new); + return ERR_PTR(-EINVAL); + +err: + dev_dbg(xe_vdev_to_dev(xe_vdev), + "Failed to transition state: %s->%s err=3D%d\n", + vfio_dev_state_str(cur), vfio_dev_state_str(new), ret); + return ERR_PTR(ret); +} + +static struct file * +xe_vfio_pci_set_device_state(struct vfio_device *core_vdev, + enum vfio_device_mig_state new_state) +{ + struct xe_vfio_pci_core_device *xe_vdev =3D + container_of(core_vdev, struct xe_vfio_pci_core_device, core_device.vdev= ); + enum vfio_device_mig_state next_state; + struct file *f =3D NULL; + int ret; + + xe_vfio_pci_state_mutex_lock(xe_vdev); + while (new_state !=3D xe_vdev->mig_state) { + ret =3D vfio_mig_get_next_state(core_vdev, xe_vdev->mig_state, + new_state, &next_state); + if (ret) { + xe_sriov_vfio_error(xe_vdev->xe, xe_vdev->vfid); + f =3D ERR_PTR(ret); + break; + } + f =3D xe_vfio_set_state(xe_vdev, next_state); + if (IS_ERR(f)) + break; + + xe_vdev->mig_state =3D next_state; + + /* Multiple state transitions with non-NULL file in the middle */ + if (f && new_state !=3D xe_vdev->mig_state) { + fput(f); + f =3D ERR_PTR(-EINVAL); + break; + } + } + xe_vfio_pci_state_mutex_unlock(xe_vdev); + + return f; +} + +static int xe_vfio_pci_get_device_state(struct vfio_device *core_vdev, + enum vfio_device_mig_state *curr_state) +{ + struct xe_vfio_pci_core_device *xe_vdev =3D + container_of(core_vdev, struct xe_vfio_pci_core_device, core_device.vdev= ); + + xe_vfio_pci_state_mutex_lock(xe_vdev); + *curr_state =3D xe_vdev->mig_state; + xe_vfio_pci_state_mutex_unlock(xe_vdev); + + return 0; +} + +static int xe_vfio_pci_get_data_size(struct vfio_device *vdev, + unsigned long *stop_copy_length) +{ + struct xe_vfio_pci_core_device *xe_vdev =3D + container_of(vdev, struct xe_vfio_pci_core_device, core_device.vdev); + + xe_vfio_pci_state_mutex_lock(xe_vdev); + *stop_copy_length =3D xe_sriov_vfio_stop_copy_size(xe_vdev->xe, xe_vdev->= vfid); + xe_vfio_pci_state_mutex_unlock(xe_vdev); + + return 0; +} + +static const struct vfio_migration_ops xe_vfio_pci_migration_ops =3D { + .migration_set_state =3D xe_vfio_pci_set_device_state, + .migration_get_state =3D xe_vfio_pci_get_device_state, + .migration_get_data_size =3D xe_vfio_pci_get_data_size, +}; + +static void xe_vfio_pci_migration_init(struct xe_vfio_pci_core_device *xe_= vdev) +{ + struct vfio_device *core_vdev =3D &xe_vdev->core_device.vdev; + struct pci_dev *pdev =3D to_pci_dev(core_vdev->dev); + struct xe_device *xe =3D xe_sriov_vfio_get_pf(pdev); + + if (!xe) + return; + if (!xe_sriov_vfio_migration_supported(xe)) + return; + + mutex_init(&xe_vdev->state_mutex); + spin_lock_init(&xe_vdev->reset_lock); + + /* PF internal control uses vfid index starting from 1 */ + xe_vdev->vfid =3D pci_iov_vf_id(pdev) + 1; + xe_vdev->xe =3D xe; + + core_vdev->migration_flags =3D VFIO_MIGRATION_STOP_COPY | VFIO_MIGRATION_= P2P; + core_vdev->mig_ops =3D &xe_vfio_pci_migration_ops; +} + +static void xe_vfio_pci_migration_fini(struct xe_vfio_pci_core_device *xe_= vdev) +{ + if (!xe_vdev->vfid) + return; + + mutex_destroy(&xe_vdev->state_mutex); +} + +static int xe_vfio_pci_init_dev(struct vfio_device *core_vdev) +{ + struct xe_vfio_pci_core_device *xe_vdev =3D + container_of(core_vdev, struct xe_vfio_pci_core_device, core_device.vdev= ); + + xe_vfio_pci_migration_init(xe_vdev); + + return vfio_pci_core_init_dev(core_vdev); +} + +static void xe_vfio_pci_release_dev(struct vfio_device *core_vdev) +{ + struct xe_vfio_pci_core_device *xe_vdev =3D + container_of(core_vdev, struct xe_vfio_pci_core_device, core_device.vdev= ); + + xe_vfio_pci_migration_fini(xe_vdev); +} + +static const struct vfio_device_ops xe_vfio_pci_ops =3D { + .name =3D "xe-vfio-pci", + .init =3D xe_vfio_pci_init_dev, + .release =3D xe_vfio_pci_release_dev, + .open_device =3D xe_vfio_pci_open_device, + .close_device =3D xe_vfio_pci_close_device, + .ioctl =3D vfio_pci_core_ioctl, + .device_feature =3D vfio_pci_core_ioctl_feature, + .read =3D vfio_pci_core_read, + .write =3D vfio_pci_core_write, + .mmap =3D vfio_pci_core_mmap, + .request =3D vfio_pci_core_request, + .match =3D vfio_pci_core_match, + .match_token_uuid =3D vfio_pci_core_match_token_uuid, + .bind_iommufd =3D vfio_iommufd_physical_bind, + .unbind_iommufd =3D vfio_iommufd_physical_unbind, + .attach_ioas =3D vfio_iommufd_physical_attach_ioas, + .detach_ioas =3D vfio_iommufd_physical_detach_ioas, +}; + +static int xe_vfio_pci_probe(struct pci_dev *pdev, const struct pci_device= _id *id) +{ + struct xe_vfio_pci_core_device *xe_vdev; + int ret; + + xe_vdev =3D vfio_alloc_device(xe_vfio_pci_core_device, core_device.vdev, = &pdev->dev, + &xe_vfio_pci_ops); + if (IS_ERR(xe_vdev)) + return PTR_ERR(xe_vdev); + + dev_set_drvdata(&pdev->dev, &xe_vdev->core_device); + + ret =3D vfio_pci_core_register_device(&xe_vdev->core_device); + if (ret) { + vfio_put_device(&xe_vdev->core_device.vdev); + return ret; + } + + return 0; +} + +static void xe_vfio_pci_remove(struct pci_dev *pdev) +{ + struct xe_vfio_pci_core_device *xe_vdev =3D pci_get_drvdata(pdev); + + vfio_pci_core_unregister_device(&xe_vdev->core_device); + vfio_put_device(&xe_vdev->core_device.vdev); +} + +#define INTEL_PCI_VFIO_DEVICE(_id) { \ + PCI_DRIVER_OVERRIDE_DEVICE_VFIO(PCI_VENDOR_ID_INTEL, (_id)) \ +} + +static const struct pci_device_id xe_vfio_pci_table[] =3D { + INTEL_PTL_IDS(INTEL_PCI_VFIO_DEVICE), + INTEL_WCL_IDS(INTEL_PCI_VFIO_DEVICE), + INTEL_BMG_IDS(INTEL_PCI_VFIO_DEVICE), + {} +}; +MODULE_DEVICE_TABLE(pci, xe_vfio_pci_table); + +static struct pci_driver xe_vfio_pci_driver =3D { + .name =3D "xe-vfio-pci", + .id_table =3D xe_vfio_pci_table, + .probe =3D xe_vfio_pci_probe, + .remove =3D xe_vfio_pci_remove, + .err_handler =3D &xe_vfio_pci_err_handlers, + .driver_managed_dma =3D true, +}; +module_pci_driver(xe_vfio_pci_driver); + +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Micha=C5=82 Winiarski "); +MODULE_DESCRIPTION("VFIO PCI driver with migration support for Intel Graph= ics"); --=20 2.51.2