From patchwork Thu Mar 20 11:08:51 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Micha=C5=82_Winiarski?= X-Patchwork-Id: 14023708 X-Patchwork-Delegate: bhelgaas@google.com Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.10]) (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 6CE2821CC41; Thu, 20 Mar 2025 11:09:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=192.198.163.10 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742468994; cv=fail; b=tXZT2dhH/ZWQq23anB7NsL7C2X8Hy4lrCx7jINR3eUQJ4X/BRPllnWHe7PztzvCJHVpZDHYBIOv7BkMlpkOexBa53nf00N+dZBxAYKfBVNdkehUNnVDlEqfspSE4bxS3fcddg7FNIQNYR9T3j/bXKObseBPt71LMftsQYI/j6xk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742468994; c=relaxed/simple; bh=Py+C7U8AL8Mhwsx5wsAyiuW0d5Lr/DX4NyaGNQSGdRM=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=VLrEK+85zyGaemfytO5S2Do0dR7zROFHlp9Qxw33vnh0ODf/Chxvo9RePBdQpZdL2bltVGZRkWj5ND8ZPJPwcFod/6h5/cYRiYq+OhF4nMafb8qvO7Z4UKBCN3afQojiLIztDvtW90EKys0ZY83yTZv8oGIo4BBi/S7SbZui2Ng= 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=k6bRoHi2; arc=fail smtp.client-ip=192.198.163.10 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="k6bRoHi2" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1742468993; x=1774004993; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=Py+C7U8AL8Mhwsx5wsAyiuW0d5Lr/DX4NyaGNQSGdRM=; b=k6bRoHi2zEqBaQRaa7bzTlg1e0PYbsvC/D/L+kM29h+JSUqqcQSD/WUe 2Zqei3SmR9OWhoUVzXfBqon/JaIDpz8D1iln3OTzqyAwRlLaGeJ3Wxptj tnQ5Z6ghKrrhL196qhDv5dyTOc8bKptfYFO9qSUp8kWNCt86CXmOVZKr6 M+kIenbHtCmunvlP3SXte8Jue1PWuuJEnfyZTv4f98EcOgjsjKaZ2obT7 SQ6cjsojEhSTDNb7kn/GaphbW2stQxZ1D9uE6Ce/pde622Pm9fhNYLidV XMT7fampqFG06Ho1+RljsVk7g/jQ9NwWFAdzr1T1Gf4sIsxD5X68qcXx5 A==; X-CSE-ConnectionGUID: yw0p/NT8TeewPyLlPQ+O0Q== X-CSE-MsgGUID: 0nWXWvXtQLW9XsuI67iKmA== X-IronPort-AV: E=McAfee;i="6700,10204,11378"; a="55070850" X-IronPort-AV: E=Sophos;i="6.14,261,1736841600"; d="scan'208";a="55070850" Received: from fmviesa002.fm.intel.com ([10.60.135.142]) by fmvoesa104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 20 Mar 2025 04:09:52 -0700 X-CSE-ConnectionGUID: YcWybnwVRu+Ex7/RF8AW8w== X-CSE-MsgGUID: ALZLpGlWR5yCb0ohY5LgxA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,261,1736841600"; d="scan'208";a="146265551" Received: from orsmsx601.amr.corp.intel.com ([10.22.229.14]) by fmviesa002.fm.intel.com with ESMTP/TLS/AES256-GCM-SHA384; 20 Mar 2025 04:09:51 -0700 Received: from orsmsx603.amr.corp.intel.com (10.22.229.16) by ORSMSX601.amr.corp.intel.com (10.22.229.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.44; Thu, 20 Mar 2025 04:09:51 -0700 Received: from orsedg603.ED.cps.intel.com (10.7.248.4) by orsmsx603.amr.corp.intel.com (10.22.229.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.44 via Frontend Transport; Thu, 20 Mar 2025 04:09:51 -0700 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (104.47.70.46) by edgegateway.intel.com (134.134.137.100) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.44; Thu, 20 Mar 2025 04:09:50 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ZMyaebHywiYTGFmRz2DccbT0sMxS94jWeLfhtwhAxeb62xaoWtFZWYgFYtYoNtCcU8ZOcHQBGrwSdIxrrKZ7Tpx/uIAZ+TMmDxekqIDZda6zS3dCA+2rjTQc1IJMwvvpRgmzztf7OaeL73l3BEAaAwUFORVnlwMVMzQMN5ZTs4cnPYfAHBCLy9BP58hL+3wQvZH+YYSvufbg08Hv8+EaaHv1vwvCRImr0yjLWHCGsHBBgjU2qmFGxRcs4If2XYs8GBH9ShqlqNrq8tq1Tjvq862qXpN3ct44OA9kp7Q42w1Nr79QvG40lBK44gTfyuOUzwSy5YLAexeWvZCKZb7q1Q== 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=LT2QoIDWpaGCsL+nS7tfdyFCxwyvZgbx2hTsMTk0fcM=; b=QXiAA8zsuG8XfR37V5xtedkHvKMz8fDGydU9PWz2tsWxnllT72RaX6Lhn+WiRz8iPa8YsUjFjVfaUAG4TH+1WuKqMIpqDfde+oPB+NcUfDE8btB3AMTqerHJaD/5q7dlrPVODL4pFytvsWPfQxrIC9vyHpetSw7no6D/69K1BDiBSx+Ra6JLjErfpBYFVKLnamOa56cK4ozQ6vSFQqWXnRz1Y5vAIOas8gayCF6afgwFy58DkhWf+x/Sg1O+EGS6+XMShIwGPXfktFEyTFZN3lXXzkEdvPQVm7XOPrGs41hwVHPgxqpTxzmLKghdxqjFAnzy5oNbsTXpUUx0sWCaGw== 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 SN7PR11MB6875.namprd11.prod.outlook.com (2603:10b6:806:2a6::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8534.34; Thu, 20 Mar 2025 11:09:48 +0000 Received: from DM4PR11MB5373.namprd11.prod.outlook.com ([fe80::927a:9c08:26f7:5b39]) by DM4PR11MB5373.namprd11.prod.outlook.com ([fe80::927a:9c08:26f7:5b39%7]) with mapi id 15.20.8534.036; Thu, 20 Mar 2025 11:09:48 +0000 From: =?utf-8?q?Micha=C5=82_Winiarski?= To: , , , , "Bjorn Helgaas" , =?utf-8?q?Christian_K=C3=B6nig?= , =?utf-8?q?Krzy?= =?utf-8?q?sztof_Wilczy=C5=84ski?= , =?utf-8?q?Ilpo_J=C3=A4rvi?= =?utf-8?q?nen?= CC: Rodrigo Vivi , Michal Wajdeczko , Lucas De Marchi , =?utf-8?q?Thomas_Hellstr=C3=B6m?= , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Matt Roper , =?utf-8?q?Micha=C5=82_Winiarski?= Subject: [PATCH v6 3/6] PCI: Allow IOV resources to be resized in pci_resize_resource() Date: Thu, 20 Mar 2025 12:08:51 +0100 Message-ID: <20250320110854.3866284-4-michal.winiarski@intel.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250320110854.3866284-1-michal.winiarski@intel.com> References: <20250320110854.3866284-1-michal.winiarski@intel.com> X-ClientProxiedBy: VI1PR09CA0134.eurprd09.prod.outlook.com (2603:10a6:803:12c::18) To DM4PR11MB5373.namprd11.prod.outlook.com (2603:10b6:5:394::7) Precedence: bulk X-Mailing-List: linux-pci@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR11MB5373:EE_|SN7PR11MB6875:EE_ X-MS-Office365-Filtering-Correlation-Id: 1ee32af5-afa2-403d-471f-08dd679fba81 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?utf-8?q?9BsUJuZ+kcwcR1PYjJDsFNfnpTEXVvS?= =?utf-8?q?nE22kmhRAm2zD2mHczugEBw+UBnYEimEqvAB/RpQ4bbeZ8qxVsl1KcgObtKORRqR0?= =?utf-8?q?LRnFB0jmcnJlXdcf+qFrs8iWAkHqXteDuThjPKkQMYa7fn9RTqAUJRRYuT8PdjLJr?= =?utf-8?q?dNe979thy/uo9kAOv5byhvgwh3iy0DTRpkccDJbDJ5YCeegm8ZW+l+ycJhFtEEJCq?= =?utf-8?q?dp22YTrDDqgWbgCtCzDUQBbiWaJRxXdjDC1z139Jvj6zHJ+7kpoZgnNbpwLWoLeG8?= =?utf-8?q?J0h41OGlxMIS28BJly+NhcJFiR7Vi2S/rabl/tAiaUAi8F0bFy4SE1iB5wJ3DsbwU?= =?utf-8?q?NwmyWzLLQKCp58xydSkRKPkd52e6XtTyhLUQpvJ9ovw4B6E28Qs+PpXPVP6Rc39zi?= =?utf-8?q?Eh9/5pT7/cTLn04bLvv4utA1n4wOB5bISWqddFQ1H98yl2c4n1NtCzPH3ldZSUoeS?= =?utf-8?q?0G8pS0ApJ5q3/qqpayxW8YGxzck1hSJb7ErB0qemU8nQSIfRYqQ3rLvmz11sElEu4?= =?utf-8?q?NYP7NP/OwE8kU9YEcgsU1kSM6oN7vDJ1wMvRC41tulJcUh3WBSXSO2cPJQZom7DmT?= =?utf-8?q?ILYYGweJQgWEEoSzofyM+4AxqxJ4ME4I7dUQ9NeZJPSG79GQl1hXw5OASqCR58ZPz?= =?utf-8?q?vRH3WlF1gNmJ1shGNrYT4py5XPh7NutLw987Hnr0R30cppHLOr7GlGIarmgd0MN59?= =?utf-8?q?i6nAYMwhkS0Gxct202JHGm+u4ZHADCs6w1rck88dIqE6MLHpMAYXlGs6oudxGnnMZ?= =?utf-8?q?S04yn/5K6m/84YDjvGd+2aFHxGK8Aiu4Z1fG88yA21+qU00MzsQ5eamcraYkPWc0y?= =?utf-8?q?6w0STFR9hJvp3R5++7GZvm2YMHnjE9YaPCbwgMCY+CmxKg1nyM3BLL20cVCHTfl+x?= =?utf-8?q?ZLMdAC5bjvkZoafT1zn7JuNRhPlzZ4je5Icjet4x4JaKjIcr+CKrkI0Qyt5+IeUBo?= =?utf-8?q?xHMV5cGjXbdR3HsCGTwS6HLGflygsOdVjd/AumioyDJbBKoGKJsTh0wmTdwF97QAU?= =?utf-8?q?fWU3YKRznp+DcGwvJOkh1mDNxqssKSyxZn7PuWs94CchzbwlSALVKtKgD2Kdmdp2z?= =?utf-8?q?aEyLSOs9hgorVLbIA8Gp/AN0L5/IKlkqu9YrDhrpj5nl0vWtQe8PGQdHFTiMy6+lJ?= =?utf-8?q?cbrYoh583YepeHy9c1PG7hlErgZ7BUOVgl0rQN0mdekwTbZRlxMftQqzhRyombyXi?= =?utf-8?q?54oNNXXBN8t/ThAqggXXiQNWG43L5mM4Gw8ikLuGLkocQ0Zo4KcoEUooFYBs4mEzQ?= =?utf-8?q?VJq1b6moqBjqv4oaX8RpL5o5JQVok0R2gIrDCEzNYXY9Hjouvst7N0Hq1ThTyXHOQ?= =?utf-8?q?AWb1Y6wUkSCO?= 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)(376014)(7416014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?NxbzbFOqTx8LCMF4+b8XiRePCWPt?= =?utf-8?q?frWRavc17kBq9wM7S3I/q9wKrPFIm4lm71xjOrTY/T+PhXkntne9tVrcHwJyGrmR5?= =?utf-8?q?X2Mo8LREUaE88dLsStU/6xvLMfg9pn1DBSW1PFpdD3I0SEz2LeygMOwSJvkaP6u9b?= =?utf-8?q?rSGk1vJe6YBmeOrKP39c2SN8URKr61wOQL+PffGw/AvvKWC+FZw6kc4++1DOTqUyA?= =?utf-8?q?ekekIvaIOA+kodrIADBuHnlCiMJibO9GKMtji8cxeOE+bfinf/ItCH2r/kZ3iUpbu?= =?utf-8?q?n4TSr57/FBE0QdRsjM97CJaZ1MfwS+5DGeIPzSK2drfxhlS36SFO7ZmszgFBlNHmO?= =?utf-8?q?3g1iz6sNCvdeqO7n86rnNgZueLPwqOWPJjfIMazRMHK0/9SR9OHPJdVBJcJI5tLnh?= =?utf-8?q?JXJEhgXWyc4A6sSn0hU4MlY2GD3MCQU/RaS/oe/J5Kgk5Mr7SI53x1KxtrCFMQzOI?= =?utf-8?q?2N60JuYFr7RbxaZKQEXb+QG/LrRJ7bANY37vK+x0UbODaap1wQagkAY6BpWPtneIw?= =?utf-8?q?xeBrKzWpMb+16uaRH+TDGeU/McLtiqJMtHcjpo0blgA/wYtAtOK8i1yHx8S0ypZRZ?= =?utf-8?q?S4wSCpcxd4ZxIhfR1EA9rBJmVTwI/FG8J7Oj2oBcxqbBinV5g2p4Ole5NJ49I6VDq?= =?utf-8?q?F/X4Og3Kd7oC25SsKrRdjL2Cv0/vMaHGx8qiLqhrdnlAjvwhVpEnlSqJB6/6fihnR?= =?utf-8?q?mc7yH4hiWwWljyDwr04adfIWPpLyW89KFl/R5Auw//Df3N0zWJYKLbuMVYSXGLiid?= =?utf-8?q?L1Qe/8SN4crZNBDe8uHD8Y050nF/RGygCVm90eqmjbAtr/LvWrG6iQ4M5lCJFTyWb?= =?utf-8?q?vQ2hT35v0Hz1xmjbB22F42WoOhgpEgXzc24I2R17IE3HpOaMYcyizE6P4Pu3DxSvC?= =?utf-8?q?AyTzj/zoZLa9tBAkQNLN2zOV56J3IbpqqVTtKY4hGfEj5SMjUe66SoPKDqq3mpd2d?= =?utf-8?q?+Sfyrt2GRt3CQ+6K/vvKl24QLc4ow3KSPanNz2fK8LTWJ7p3TJpClKjOiQ9YwtW64?= =?utf-8?q?3WX1D4LzZ7RLM6yYaPVc4BsSGPzfXduLe5PqqdhKnnIdM+9jGN2fwM53d4bjoFaXU?= =?utf-8?q?uY+Rwo2ZSpy72B5Nk7H7IlgkfHf/Zw3YOpu6zrEjnluk42JmFiM8W2BBNvP3XhoSr?= =?utf-8?q?7mG0eud3L5VnXhd9KEHk6sihQWJ9c4wUWPutfW8srE2Awhc3hhzfoG5xHyGihWcIq?= =?utf-8?q?ftk4Pcg85grmmExmAxxmGO3s7srw6QY8qkdGUoEA/KinBSlUB4gRU8CKlTGq50BkA?= =?utf-8?q?L6V7LOpsS59e1PWr9Y08/sUUtUb06IFTudDPwFnpVnjBXY8hhoRfapVhdHBr7u2iT?= =?utf-8?q?f2v2dSKI5/76G/LCq9OXUm4gUYFfpyH48M9oPMjLI+Bg22HIDs9sUVHVyofg91i51?= =?utf-8?q?0WDt2eje/6dFBH+28tsUY+EQgdI9+EzsfQnqyLdSeryvuVFUMNPXee+rFpMkPPCfc?= =?utf-8?q?Px3QyBbNagpezU7GCNUnY9lBUfvirh9kAByeu2SaRpBtxr0Ys0Sg206Q6wn3XZErv?= =?utf-8?q?dJ/gT+bkpMStc3ehHih7ZQO8EcvXi9yBYQ=3D=3D?= X-MS-Exchange-CrossTenant-Network-Message-Id: 1ee32af5-afa2-403d-471f-08dd679fba81 X-MS-Exchange-CrossTenant-AuthSource: DM4PR11MB5373.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Mar 2025 11:09:48.4729 (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: Lm/qHd8jokjvsV7yYKr2XnMRBRoj+LG4ikxdZk7POSc2wJ8wzdfsHRoSwvQsztnVQe+ARbz1HqFEx0T8n5dbzBysd3ccLNjOowgfDuLn1iY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN7PR11MB6875 X-OriginatorOrg: intel.com Similar to regular resizable BAR, VF BAR can also be resized. The structures are very similar, which means we can reuse most of the implementation. Extend the pci_resize_resource() function to accept IOV resources. See PCIe r4.0, sec 9.3.7.4. Signed-off-by: MichaƂ Winiarski --- drivers/pci/iov.c | 21 +++++++++++++++++++++ drivers/pci/pci.c | 8 +++++++- drivers/pci/pci.h | 9 +++++++++ drivers/pci/setup-res.c | 35 ++++++++++++++++++++++++++++++----- 4 files changed, 67 insertions(+), 6 deletions(-) diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c index 985ea11339c45..cbf335725d4fb 100644 --- a/drivers/pci/iov.c +++ b/drivers/pci/iov.c @@ -154,6 +154,27 @@ resource_size_t pci_iov_resource_size(struct pci_dev *dev, int resno) return dev->sriov->barsz[pci_resource_num_to_vf_bar(resno)]; } +void pci_iov_resource_set_size(struct pci_dev *dev, int resno, + resource_size_t size) +{ + if (!pci_resource_is_iov(resno)) { + pci_warn(dev, "%s is not an IOV resource\n", + pci_resource_name(dev, resno)); + return; + } + + dev->sriov->barsz[pci_resource_num_to_vf_bar(resno)] = size; +} + +bool pci_iov_is_memory_decoding_enabled(struct pci_dev *dev) +{ + u16 cmd; + + pci_read_config_word(dev, dev->sriov->pos + PCI_SRIOV_CTRL, &cmd); + + return cmd & PCI_SRIOV_CTRL_MSE; +} + static void pci_read_vf_config_common(struct pci_dev *virtfn) { struct pci_dev *physfn = virtfn->physfn; diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index ff69f3d653ced..1fad9f4c54977 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -3745,7 +3745,13 @@ static int pci_rebar_find_pos(struct pci_dev *pdev, int bar) unsigned int pos, nbars, i; u32 ctrl; - pos = pdev->rebar_cap; + if (pci_resource_is_iov(bar)) { + pos = pdev->physfn ? pdev->sriov->vf_rebar_cap : 0; + bar = pci_resource_num_to_vf_bar(bar); + } else { + pos = pdev->rebar_cap; + } + if (!pos) return -ENOTSUPP; diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h index f44840ee3c327..643cd8c737f66 100644 --- a/drivers/pci/pci.h +++ b/drivers/pci/pci.h @@ -689,6 +689,9 @@ void pci_iov_update_resource(struct pci_dev *dev, int resno); resource_size_t pci_sriov_resource_alignment(struct pci_dev *dev, int resno); void pci_restore_iov_state(struct pci_dev *dev); int pci_iov_bus_range(struct pci_bus *bus); +void pci_iov_resource_set_size(struct pci_dev *dev, int resno, + resource_size_t size); +bool pci_iov_is_memory_decoding_enabled(struct pci_dev *dev); static inline bool pci_resource_is_iov(int resno) { return resno >= PCI_IOV_RESOURCES && resno <= PCI_IOV_RESOURCE_END; @@ -722,6 +725,12 @@ static inline int pci_iov_bus_range(struct pci_bus *bus) { return 0; } +static inline void pci_iov_resource_set_size(struct pci_dev *dev, int resno, + resource_size_t size) { } +static inline bool pci_iov_is_memory_decoding_enabled(struct pci_dev *dev) +{ + return false; +} static inline bool pci_resource_is_iov(int resno) { return false; diff --git a/drivers/pci/setup-res.c b/drivers/pci/setup-res.c index c6657cdd06f67..d2b3ed51e8804 100644 --- a/drivers/pci/setup-res.c +++ b/drivers/pci/setup-res.c @@ -423,13 +423,39 @@ void pci_release_resource(struct pci_dev *dev, int resno) } EXPORT_SYMBOL(pci_release_resource); +static bool pci_resize_is_memory_decoding_enabled(struct pci_dev *dev, + int resno) +{ + u16 cmd; + + if (pci_resource_is_iov(resno)) + return pci_iov_is_memory_decoding_enabled(dev); + + pci_read_config_word(dev, PCI_COMMAND, &cmd); + + return cmd & PCI_COMMAND_MEMORY; +} + +static void pci_resize_resource_set_size(struct pci_dev *dev, int resno, + int size) +{ + resource_size_t res_size = pci_rebar_size_to_bytes(size); + struct resource *res = pci_resource_n(dev, resno); + + if (!pci_resource_is_iov(resno)) { + resource_set_size(res, res_size); + } else { + resource_set_size(res, res_size * pci_sriov_get_totalvfs(dev)); + pci_iov_resource_set_size(dev, resno, res_size); + } +} + int pci_resize_resource(struct pci_dev *dev, int resno, int size) { struct resource *res = pci_resource_n(dev, resno); struct pci_host_bridge *host; int old, ret; u32 sizes; - u16 cmd; /* Check if we must preserve the firmware's resource assignment */ host = pci_find_host_bridge(dev->bus); @@ -440,8 +466,7 @@ int pci_resize_resource(struct pci_dev *dev, int resno, int size) if (!(res->flags & IORESOURCE_UNSET)) return -EBUSY; - pci_read_config_word(dev, PCI_COMMAND, &cmd); - if (cmd & PCI_COMMAND_MEMORY) + if (pci_resize_is_memory_decoding_enabled(dev, resno)) return -EBUSY; sizes = pci_rebar_get_possible_sizes(dev, resno); @@ -459,7 +484,7 @@ int pci_resize_resource(struct pci_dev *dev, int resno, int size) if (ret) return ret; - resource_set_size(res, pci_rebar_size_to_bytes(size)); + pci_resize_resource_set_size(dev, resno, size); /* Check if the new config works by trying to assign everything. */ if (dev->bus->self) { @@ -471,7 +496,7 @@ int pci_resize_resource(struct pci_dev *dev, int resno, int size) error_resize: pci_rebar_set_size(dev, resno, old); - resource_set_size(res, pci_rebar_size_to_bytes(old)); + pci_resize_resource_set_size(dev, resno, old); return ret; } EXPORT_SYMBOL(pci_resize_resource);