From patchwork Wed Mar 12 22:59:46 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: 14014028 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 81E9EC28B2E for ; Wed, 12 Mar 2025 23:00:50 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id E4DFD10E7D5; Wed, 12 Mar 2025 23:00:49 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.b="TgiIqU+M"; dkim-atps=neutral Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.18]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4C96110E7DA; Wed, 12 Mar 2025 23:00:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741820448; x=1773356448; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=TtMSUusmWmjB1rwNvgEx+sIgB1ocbc17jU5tWGuzdu8=; b=TgiIqU+Mi9upenxvEzb8X5oi0xHi3D+N169d+aO5yyaaSaG6g3/JxTE4 a6DEIZanDuPqrrwf6i/fotZnfyx54U4guGe2kTi2XrI74AJ7P2ujtshB+ qRUvNSJMaf3glGnvdryJCDMkkz56kORJWMVHjPNEJPDZZksOdHDZl+iiB P4YJooUcoqm+6/4HloGai+ZcFSG6c0AzwG9SuoJgiVStOhCJYoeR3Bb8u WDlZ1kOXjsQAkRyWAkRkBdbbyCe6GeqjQjnW/hspC/SVwb4cPnXSRsA0V 3CmAqvdP+a/4WFnxU0LrU9tnFnsZdGCgCepJ9ejFsRHSLgGgm6UJBu2bS Q==; X-CSE-ConnectionGUID: 7h+DJDRES76GyG8Eg7dCtQ== X-CSE-MsgGUID: LjimciSdR4qTHh1jyrfXLA== X-IronPort-AV: E=McAfee;i="6700,10204,11371"; a="43103790" X-IronPort-AV: E=Sophos;i="6.14,243,1736841600"; d="scan'208";a="43103790" Received: from orviesa002.jf.intel.com ([10.64.159.142]) by orvoesa110.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Mar 2025 16:00:48 -0700 X-CSE-ConnectionGUID: hZOL3AeRTLOnZdUja6Z0Kg== X-CSE-MsgGUID: U8Cg4+C3TrCBOnv23X0RIA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,243,1736841600"; d="scan'208";a="151604547" Received: from orsmsx902.amr.corp.intel.com ([10.22.229.24]) by orviesa002.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Mar 2025 16:00:48 -0700 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.1544.14; Wed, 12 Mar 2025 16:00:47 -0700 Received: from orsedg603.ED.cps.intel.com (10.7.248.4) 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.1544.14 via Frontend Transport; Wed, 12 Mar 2025 16:00:47 -0700 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (104.47.66.47) 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; Wed, 12 Mar 2025 16:00:45 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=A6S2VM2pWqVLpH99LGbvelWuPGRRdPHHRhFCfEQLqcwVghNqlDQXVptVNVdO81Sir7HUQsH6TJU+D4ck7px3emj6/dYwPLAtkK2GNjGtTOQfOfqp88ucHafQCrUy+4/0gIouKZpyn1HQuSIBqlUEydIrvIbBkodtfTK5kXFWfyNEEdv2M43Oi3VkOoK9GF8zkLf1POrjccRsqGesaBmBJKUTMPeB3e180RTpL/jEis+8/IicoWCsuESrDREn1ZvlRgNTnhxu1GXpJ2QgeFa3m+SxCnEbWDtD2yGVhKn+NaE4xYFnRFQtnAxTJrMocraQqPRwWsI+KUW3ssA0V6ffxw== 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=ZfIWIC/7sl2+W7J/a5Gjhp+3q+DCpTS4//M8bZQbVWU=; b=QvYeeAsg0yejhO123Rwr/Zk1UFUG+ABVTAyUzNSzkVwD2AM8ue1wsiVzbbxEtZ/hT9BYZMtWaMqG4lwgbf8DwhCTUXT7zgaqpGQfaHEbuXsTUxmR39nfc+ZaATAXwTWYkgMcEyEV4XojWBKU13MjICc2cuXiO/lodg5NsPf3KsYP2TxlrMp4lTUL2CNunX+yCgrlOZCWlA6Jt7m+2/StVs9g05/fUIEomgfpz2Nl/D6nq6lIaIlsAv9VDgrNf05t2iK7WcDPHg7snYD4pivowrCE+W8JoPykNDmp8KN/q53nc28H+kE7uCWHd4kULGEVmlhDN6Ky5N05ia1Ev2lCbA== 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 SA1PR11MB6735.namprd11.prod.outlook.com (2603:10b6:806:25e::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8511.27; Wed, 12 Mar 2025 23:00:42 +0000 Received: from DM4PR11MB5373.namprd11.prod.outlook.com ([fe80::927a:9c08:26f7:5b39]) by DM4PR11MB5373.namprd11.prod.outlook.com ([fe80::927a:9c08:26f7:5b39%6]) with mapi id 15.20.8511.026; Wed, 12 Mar 2025 23:00:42 +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 v5 3/6] PCI: Allow IOV resources to be resized in pci_resize_resource() Date: Wed, 12 Mar 2025 23:59:46 +0100 Message-ID: <20250312225949.969716-4-michal.winiarski@intel.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250312225949.969716-1-michal.winiarski@intel.com> References: <20250312225949.969716-1-michal.winiarski@intel.com> X-ClientProxiedBy: MI1P293CA0004.ITAP293.PROD.OUTLOOK.COM (2603:10a6:290:2::13) To DM4PR11MB5373.namprd11.prod.outlook.com (2603:10b6:5:394::7) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR11MB5373:EE_|SA1PR11MB6735:EE_ X-MS-Office365-Filtering-Correlation-Id: 330bd5ed-34f6-470e-8ae6-08dd61b9b6b0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|7416014; X-Microsoft-Antispam-Message-Info: =?utf-8?q?s2XxyBX8WIIVbgB9pKhma6xuLMCaFya?= =?utf-8?q?8nGIvby1rpPn11VEMW8pJ30aAUz2gZyq4LqtTzbIoYPWJqHMgoZufTKxOebxnzTmF?= =?utf-8?q?UBEz9/ZJ3nZQ59+sfAMyLRVHctsu3LpmNXo4rSCFWdKlHz3DuyP8IdI1Wne5zg/qt?= =?utf-8?q?M3FQO+Jb4z7Bt66kvmiGfkpbnPc/oifblA877c4dEPTN/GgywbZXzTQdewhQ332FR?= =?utf-8?q?9n2zbIm5WN2x4q9WynmYgzH4T3MjttZZhMZemt6ZIoCorZOF6e08hq+5HUKGwBonJ?= =?utf-8?q?Q0MzQZAX3Cj6vKIDhs9e7qBBnsAhzu9qV/VgNgi8gtDJIzQyFm/MHcIxR1R31tjvt?= =?utf-8?q?Fq9sar7OnjuKND73QW+8ppcJafKfunFcyHugLpq6gCB7NPgjZp1mAydHuebXGCxCE?= =?utf-8?q?zy1Cs9rCQg49ntOo4mUVg5F1XHBR0eE+ypWfe6wQzIRff7ljkzTmEIhWuy0FB9ONc?= =?utf-8?q?EPgv4hO/79coHrHNGFZ7CE6nx6SGoNK4QPOfs6QP0DXtg/lu8nDMRD379V2HkPBwv?= =?utf-8?q?E5eF74NpmwrbTJPt3a1XcLFmuR7G4whBsyHvi448x5rRua+zzo/0S4LpxRLNQcrmd?= =?utf-8?q?quKNro0CLlfm0b7MzAnejPPsVecGVwwpJJsSM5ddzVfe3ttJvDI+oAjBusJ8XNJk8?= =?utf-8?q?mgePjnkoNunvfgU7hQOILccRlueBDYrawHRL8YPVX89F/sPk0dVzgMWg2OQeG3T8O?= =?utf-8?q?6h1e/z1ZgCOZUo1npP01vyt6giGRXSE56BllbV1KsBjAMm67RHBbEWwbbhQIP5O5T?= =?utf-8?q?mzJWB5OnuYyuc2nin6yVNTHybWnpJSbBXn/Tr4pfjA9/JpbpzVurby279Ya/H8J9K?= =?utf-8?q?IkG8UHN9KiL777V3PkbstYbzu7h+T+0h94F+DK7OmxkoMaZmEnU+OVoAwSZbT/KAJ?= =?utf-8?q?4y2BTVODOFdXipKRj4GOQxKD9JW0GfnysMNU3GOocOXI8AkCPwGutmdO379GzpiSs?= =?utf-8?q?Wh8Zow2NWO+7Ybf3mved0uRBZwelPJaVIGyORS7B98fw4E04e9/dv0QZ5/xDVzplJ?= =?utf-8?q?bwo8CdIIfaKPVxDor+uF4EVuVCxF2FyTU0VTnnT1vWvfVDR5u0w2u6aX6+2eGJHaS?= =?utf-8?q?9O7A7dwQzGzf159qnLh8USFBAMqY4roVIo7mw4pGzAxyyezMxGBPvDskYgzl6xHU5?= =?utf-8?q?lkxdXu80QqI5URGg2ba3/wU9/dQksGN9/klvtZ5JxsBj04OVs9vXluyF3VEDMkM8H?= =?utf-8?q?IXMDeOa1fqPNkZ+b9Q+LbB3Sg9zYqv6hWNKbExRl+iKExUOVJfmep6eUUac4BdcpA?= =?utf-8?q?91MQCSc3k/Shzi0L7T+STU3LQb3NRG1qToFM76lhZ4XfifurH/Qw8ZPGizDHV7Teo?= =?utf-8?q?iI5j3yZHijLT?= 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); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?JRwPzHf/YR1u1MxD2CWqVgR9voN7?= =?utf-8?q?vapld36+u4415noYim5mWMQ8xkNOhDTe98UeSjOVzqqZeN/4OEHa5XUbZGDeIN1PD?= =?utf-8?q?NoXiLYeWSXPi/dTe/lnn5JfJ9zjD55gGhNVrOTcAWfmr6qsQUHLsKMPeBR4AvKXN9?= =?utf-8?q?XdDTDc7NqDVIa69Pj/T0d430safstcv5e9b5UrRBPxJ7irDuzn3ME67jT+2loDxv9?= =?utf-8?q?cT1XZljq98XeDzPc3XH1UPLFrNM1wjWEFWMuaHkh+XvB3asp3/bgT6O5D7mPMcezO?= =?utf-8?q?V+lT2eGvHvqTT2zuuseFfhkui+yApcbEKsixfFY/1wUsGwg07k+RyGHEDiq44gPGW?= =?utf-8?q?J8Uno5m4YZL6+rB4N2vkeDc43+A1K7V3rE2GYiGOkBx2+1T249tuDXpibkBQTEh4Y?= =?utf-8?q?AjAA/yPiGEbbQluppZ1D3FoTYxoWjdC3ZPECtMLARcMg+j8AxQDshXE/Gl66R/6U8?= =?utf-8?q?d5ucLl+2gEYATkgs+7fUen3TtLfa3GJ6rMWLyUidX/+t5TC+ron6FZK32BFjlufNR?= =?utf-8?q?1GGGOe3K9vy0pX1YPtri/cfU5bULL/sj/jRnocJehviFvlQMCZT2Y54+3uKeiunOl?= =?utf-8?q?hPROlgDyRaoK+4tc0C1l/nA1xsjmHHPMNa1zbLFWEg3rrp1i3up5p9a/YaACiWi3l?= =?utf-8?q?zrCeDj9ncwiPNtKhCxojWH4GtkNaCoUL2diEo5/oRsKrlRYO5h9//DiF4Tj/sPWsi?= =?utf-8?q?dDbv387qWxeNvL5bhNnfAw75U19c3ayBnQpQV9/74bC6cpUyJjPkKvdq7ZA8qkVzu?= =?utf-8?q?qnZxMep+k9M/yX+nK6ZzpHJ1Cqv5LohykJ4tYJdxbrf3I0odX9xvavTGEzOkzxpM5?= =?utf-8?q?9AA69i4jBAQNea1amdENQlOLcfZYKVkhjDrOju/RGiyZwbmHXSk7pMcHNVme/PHat?= =?utf-8?q?KAdZXzTZNcgFOiCp7cnwWKI7tbNecjNTs731NJShfBvmyA+AzPkadAa9tTH0KTlP+?= =?utf-8?q?NwRhT2bmZsWArrTR83RVGymfux6at7kUQkpeLcZJXqhaUxSVxNTF2WDS02qFscpIF?= =?utf-8?q?EpBlVHD9+CGTvUWbjCz1OHqNBYmYKwWKwY+dANTCWJFZBSBram1nzVJmecnhF8sQZ?= =?utf-8?q?iuF62nTGnHwmr6Je+u24mZI3KesILzMQR9kjiD58wHJGN8qfoqvGNa1SFmdXXu5aY?= =?utf-8?q?1Uiqc2hoWcsEmTISE4o77ia56LS0WFqBkCPMAvswJIqTMErFBYTHJY4BxngwdlgDJ?= =?utf-8?q?ZQRT5+6J4hiVFCfBktiahMDx5JYRuNjOGmQfhSSCXQCFDnJw7Zp4+OgSr+0xzukVf?= =?utf-8?q?LXz9sZX8iagfCJx3UwPKkamw91mEHmMRaKxg7bIi4WluC0s+GsaWsVoq6HnP7F4SY?= =?utf-8?q?Q3GSqZnUXCUJIsI7bZ3tSHbBXCMe5MJL2pooJ3xuoy0yHWStMOJ6jwEF5+dJZTs+b?= =?utf-8?q?UFGS2oN1vKOkiYWq4IenIm2/WcCtqIixc8ypLnyGO/5wDA0F85TZD/v2vRuZTsMR4?= =?utf-8?q?N0P6tx16nv4NtaYuSOBDOvEL95PiCxKUsTeXv60aG9OU9ly9IUOZYcT91mKlakNL4?= =?utf-8?q?l5jXJlL3HDqfuX55m1AZr32li12YkFFWUA=3D=3D?= X-MS-Exchange-CrossTenant-Network-Message-Id: 330bd5ed-34f6-470e-8ae6-08dd61b9b6b0 X-MS-Exchange-CrossTenant-AuthSource: DM4PR11MB5373.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Mar 2025 23:00:41.9580 (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: QD2mj7Fow11/Xq6k17oSiwRudqAsQswxlNCAqBwez6MF3R9FnteLiFjvmfTWQL2WKZ7VflcKOxdi94AvBwqUdpw2u+UExvBE8uSS6b90RdQ= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR11MB6735 X-OriginatorOrg: intel.com X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" 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 | 10 +++++++++- drivers/pci/pci.h | 9 +++++++++ drivers/pci/setup-res.c | 35 ++++++++++++++++++++++++++++++----- 4 files changed, 69 insertions(+), 6 deletions(-) diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c index 23c741e9ede89..7cc17e898cea7 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 72ac91e359aaf..e6a986ad24d61 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -3731,8 +3731,16 @@ static int pci_rebar_find_pos(struct pci_dev *pdev, int bar) { unsigned int pos, nbars, i; u32 ctrl; + int cap; - pos = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_REBAR); + if (pci_resource_is_iov(bar)) { + cap = PCI_EXT_CAP_ID_VF_REBAR; + bar = pci_resource_num_to_vf_bar(bar); + } else { + cap = PCI_EXT_CAP_ID_REBAR; + } + + pos = pci_find_ext_capability(pdev, cap); if (!pos) return -ENOTSUPP; diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h index e3cd9b8f9b734..af41f6c24451f 100644 --- a/drivers/pci/pci.h +++ b/drivers/pci/pci.h @@ -655,6 +655,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; @@ -688,6 +691,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..6cce3e19f22b0 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 = dev->resource + 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);