From nobody Fri Oct 2 03:03:00 2026 Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) (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 E0E22484239; Wed, 5 Aug 2026 16:55:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.158.5 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785948940; cv=none; b=LdDgc+t6hDfTYZ4S5xJJCQA6KpDLJRWAteUrWcWhZr8ekwjnCa1QD3F6c//iI4NwgbG/rexh+XrtyfnZrrCdnmffSueSERuKJBxkqxYw26Ocdnu6BOB7lItxQAo1KQ7ITVSQrYfbG4hQ6tpfv9FhRqcHCmFTsmfFC/8QAS99AjQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785948940; c=relaxed/simple; bh=mwyL+uTOIizoOJ1dR3CUCfAzaqvs8OoK/rzdHk5LGxc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=GPZsse+BKxjE016ilqJCX7mlwb2isHoQU1KgJJqj7GtRgjnIqHwW+sCar6oJfqXDP9YjOs2r8qfSjOuktHBtESVbt7MUaZ8nuy4Vaz/r6P4G0q/K4ZQRBXcBshsspsEvicyL9RT93vsoCdqemXkarEghMvTF2BO831nXG3bI3OA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=SATKCLOD; arc=none smtp.client-ip=148.163.158.5 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="SATKCLOD" Received: from pps.filterd (m0353725.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 675Fn8aA4182910; Wed, 5 Aug 2026 16:55:25 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=/paASlYgCKWMyLSDO c0pQbQXYk5kkShdCoGGj0vuXPM=; b=SATKCLODdcvriAnpXrOQAWVpn1VRa8gG1 phGvxAF2tjFWCdrzDHn4gWWkAfNS15HXWUys6oMVgv47qmw5pOB1E7mQPWzgeQ4K NWXeOSHEGKR3RGXKYviW2IMDMz3sZVntNxb1qYijrAz0CrS5EdIiM/KxNXR64ve5 SPXg0biQTZkeBH8EuKpz0+Zawg0tt99Kz3ukswWvL+sfTEdzFyY4JW6eroqnCF8B mx6ZYEk6fJxPhieNYAryfiG4mmVDP4iUpG7FFRVnrlpBrAYR4n567yYpDBgnILCm qVx+SWIi7pUNfKA5xYzyKaAv6PR82NvgIm8jzLacztmguJs8CrMfQ== Received: from ppma22.wdc07v.mail.ibm.com (5c.69.3da9.ip4.static.sl-reverse.com [169.61.105.92]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fs77gbq1c-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 05 Aug 2026 16:55:24 +0000 (GMT) Received: from pps.filterd (ppma22.wdc07v.mail.ibm.com [127.0.0.1]) by ppma22.wdc07v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 675GfG2a023471; Wed, 5 Aug 2026 16:55:23 GMT Received: from smtprelay06.dal12v.mail.ibm.com ([172.16.1.8]) by ppma22.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4fsugw7hnm-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 05 Aug 2026 16:55:23 +0000 (GMT) Received: from smtpav05.wdc07v.mail.ibm.com (smtpav05.wdc07v.mail.ibm.com [10.39.53.232]) by smtprelay06.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 675GtMds28443270 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 5 Aug 2026 16:55:22 GMT Received: from smtpav05.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 3D56058043; Wed, 5 Aug 2026 16:55:22 +0000 (GMT) Received: from smtpav05.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id EB41958053; Wed, 5 Aug 2026 16:55:20 +0000 (GMT) Received: from IBM-D32RQW3.ibm.com (unknown [9.61.241.193]) by smtpav05.wdc07v.mail.ibm.com (Postfix) with ESMTP; Wed, 5 Aug 2026 16:55:20 +0000 (GMT) From: Farhan Ali To: linux-s390@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org Cc: helgaas@kernel.org, alex@shazbot.org, alifm@linux.ibm.com, schnelle@linux.ibm.com, mjrosato@linux.ibm.com, Madhavan Srinivasan , Tyrel Datwyler , linuxppc-dev@lists.ozlabs.org, Bjorn Helgaas Subject: [PATCH v23 1/5] PCI: Introduce PCI_SLOT_PLACEHOLDER constant for slot_nr placeholder value Date: Wed, 5 Aug 2026 09:55:14 -0700 Message-ID: <20260805165518.794-2-alifm@linux.ibm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260805165518.794-1-alifm@linux.ibm.com> References: <20260805165518.794-1-alifm@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Reinject: loops=2 maxloops=12 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODA1MDEzNyBTYWx0ZWRfX0C1OW3il8F1U iimGAvtihsBd6wh/pMhH7yPtZpNQ5fi2sfccOJblgtmLv6eckbnjOdRvnfAz7MwV9VlTPOO3At5 ou7AwYx5B363ehmW5R6GUEkZ8TpBtoj2OaYzDC/nixWN6alEMgzyu1wLo6mHDSG29ULU3eI24TY skb4KJ0hpmcgVIpc8WpPzJS6bQfnec8f6F1EZD2UNPi7jh/Vp7FrQMx5sc011T23jl60SiSwPav CVGc1rhE1HQnCzW1UknLIiUmsyE5f34uP3a4DF9oE0/QizZMCgMJq8xnep4sG5VUYCIL5Gkrd0r UoHrJWIeuh/S+lTbWZxuSpfbia266ZCWrbLfyHl5P8TNfYKuqCiWPS96yHX6Blu9/1q3Kw6VxVn fNNp6I4+A/S3VIa8jGS5OUHIAKZA/LOxBKQjhC+L5Z0uIVoaYM3lrnQyIAmrEUrfvlaFCF9eNdo e+DiEAoecOkOOiZIq5A== X-Authority-Analysis: v=2.4 cv=WIFPmHsR c=1 sm=1 tr=0 ts=6a736afc cx=c_pps a=5BHTudwdYE3Te8bg5FgnPg==:117 a=5BHTudwdYE3Te8bg5FgnPg==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=V8glGbnc2Ofi9Qvn3v5h:22 a=VnNF1IyMAAAA:8 a=voM4FWlXAAAA:8 a=1XWaLZrsAAAA:8 a=t8iQWNR-jnTgK4UFVGYA:9 a=IC2XNlieTeVoXbcui8wp:22 X-Proofpoint-GUID: 2N6UDDSNodACujrYcP2WQu8UbnarNusk X-Proofpoint-ORIG-GUID: 7Co9pH3paRsnpcDW5DfjTNqiWdjOuVgX X-Proofpoint-Spam-Info: AW1haW4tMjYwODA1MDEzNyBTYWx0ZWRfX+jHqWNeQGxCq JrcW1NfxhUMPnsVKQtOhvxqdk2RYSWZzhgoY+pNZrIE+boEOEIKFsjqWJWpG1IIyMx/rbTFZfzM n/mtrkg5PsnFomhWDmAi8EoAoOJcLJc= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-05_05,2026-08-04_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 lowpriorityscore=0 priorityscore=1501 phishscore=0 malwarescore=0 suspectscore=0 clxscore=1011 impostorscore=0 bulkscore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608050137 Content-Type: text/plain; charset="utf-8" Introduce a constant for placeholder value and update the kerneldoc for pci_create_slot() to reference PCI_SLOT_PLACEHOLDER instead of -1 throughout. No functional change. Cc: Madhavan Srinivasan Cc: Tyrel Datwyler Cc: linuxppc-dev@lists.ozlabs.org Suggested-by: Bjorn Helgaas Signed-off-by: Farhan Ali --- drivers/pci/hotplug/pnv_php.c | 2 +- drivers/pci/hotplug/rpaphp_slot.c | 2 +- drivers/pci/slot.c | 21 +++++++++++---------- include/linux/pci.h | 3 +++ 4 files changed, 16 insertions(+), 12 deletions(-) diff --git a/drivers/pci/hotplug/pnv_php.c b/drivers/pci/hotplug/pnv_php.c index ff92a5c301b8..37299d59f906 100644 --- a/drivers/pci/hotplug/pnv_php.c +++ b/drivers/pci/hotplug/pnv_php.c @@ -808,7 +808,7 @@ static struct pnv_php_slot *pnv_php_alloc_slot(struct d= evice_node *dn) if (dn->child && PCI_DN(dn->child)) php_slot->slot_no =3D PCI_SLOT(PCI_DN(dn->child)->devfn); else - php_slot->slot_no =3D -1; /* Placeholder slot */ + php_slot->slot_no =3D PCI_SLOT_PLACEHOLDER; /* Placeholder slot */ =20 kref_init(&php_slot->kref); php_slot->state =3D PNV_PHP_STATE_INITIALIZED; diff --git a/drivers/pci/hotplug/rpaphp_slot.c b/drivers/pci/hotplug/rpaphp= _slot.c index 67362e5b9971..92eabf5f61b9 100644 --- a/drivers/pci/hotplug/rpaphp_slot.c +++ b/drivers/pci/hotplug/rpaphp_slot.c @@ -84,7 +84,7 @@ int rpaphp_register_slot(struct slot *slot) struct hotplug_slot *php_slot =3D &slot->hotplug_slot; u32 my_index; int retval; - int slotno =3D -1; + int slotno =3D PCI_SLOT_PLACEHOLDER; =20 dbg("%s registering slot:path[%pOF] index[%x], name[%s] pdomain[%x] type[= %d]\n", __func__, slot->dn, slot->index, slot->name, diff --git a/drivers/pci/slot.c b/drivers/pci/slot.c index 6d5cd37bfb1e..42ff66461f74 100644 --- a/drivers/pci/slot.c +++ b/drivers/pci/slot.c @@ -37,7 +37,7 @@ static const struct sysfs_ops pci_slot_sysfs_ops =3D { =20 static ssize_t address_read_file(struct pci_slot *slot, char *buf) { - if (slot->number =3D=3D 0xff) + if (slot->number =3D=3D PCI_SLOT_PLACEHOLDER) return sysfs_emit(buf, "%04x:%02x\n", pci_domain_nr(slot->bus), slot->bus->number); @@ -210,7 +210,7 @@ static struct pci_slot *get_slot(struct pci_bus *parent= , int slot_nr) /** * pci_create_slot - create or increment refcount for physical PCI slot * @parent: struct pci_bus of parent bridge - * @slot_nr: PCI_SLOT(pci_dev->devfn), -1 for placeholder, or + * @slot_nr: PCI_SLOT(pci_dev->devfn), PCI_SLOT_PLACEHOLDER for placeholde= r, or * PCI_SLOT_ALL_DEVICES * @name: user visible string presented in /sys/bus/pci/slots/ * @hotplug: set if caller is hotplug driver, NULL otherwise @@ -236,15 +236,16 @@ static struct pci_slot *get_slot(struct pci_bus *pare= nt, int slot_nr) * In most cases, @pci_bus, @slot_nr will be sufficient to uniquely identi= fy * a slot. There is one notable exception - pSeries (rpaphp), where the * @slot_nr cannot be determined until a device is actually inserted into - * the slot. In this scenario, the caller may pass -1 for @slot_nr. + * the slot. In this scenario, the caller may pass PCI_SLOT_PLACEHOLDER fo= r @slot_nr. * * The following semantics are imposed when the caller passes @slot_nr =3D= =3D - * -1. First, we no longer check for an existing %struct pci_slot, as there - * may be many slots with @slot_nr of -1. The other change in semantics is - * user-visible, which is the 'address' parameter presented in sysfs will - * consist solely of a dddd:bb tuple, where dddd is the PCI domain of the - * %struct pci_bus and bb is the bus number. In other words, the devfn of - * the 'placeholder' slot will not be displayed. + * PCI_SLOT_PLACEHOLDER. First, we no longer check for an existing %struct + * pci_slot, as there may be many slots with @slot_nr of + * PCI_SLOT_PLACEHOLDER. The other change in semantics is user-visible, + * which is the 'address' parameter presented in sysfs will consist solely + * of a dddd:bb tuple, where dddd is the PCI domain of the %struct pci_bus + * and bb is the bus number. In other words, the devfn of the 'placeholder' + * slot will not be displayed. * * Bus-wide slots: * For PCIe hotplug, the physical slot encompasses the entire secondary @@ -267,7 +268,7 @@ struct pci_slot *pci_create_slot(struct pci_bus *parent= , int slot_nr, =20 mutex_lock(&pci_slot_mutex); =20 - if (slot_nr =3D=3D -1) + if (slot_nr =3D=3D PCI_SLOT_PLACEHOLDER) goto placeholder; =20 /* diff --git a/include/linux/pci.h b/include/linux/pci.h index 64b308b6e61c..b628787e9485 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -81,6 +81,9 @@ */ #define PCI_SLOT_ALL_DEVICES 0xfe =20 +/* Used to identify a slot as a placeholder */ +#define PCI_SLOT_PLACEHOLDER 0xff + /* pci_slot represents a physical slot */ struct pci_slot { struct pci_bus *bus; /* Bus this slot is on */ --=20 2.43.0 From nobody Fri Oct 2 03:03:00 2026 Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) (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 A785C48383F; Wed, 5 Aug 2026 16:55:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.158.5 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785948939; cv=none; b=JGtDTVgCVVWChTfFdSKjWxbgTYK8VaiLM1XC0vyRQ7JIoEakfww/H9DO4Lz4INn8U9NUxSd8UqTkWIv6wC/iS8YprarDQUYDLIVLEMAUB4vFt/IFeRk9xJ1Es7GHdCoiFNBPQYYQj4mVWICfCqNFQLg7i/YpqInNdiILZg91AAs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785948939; c=relaxed/simple; bh=/YPJD1hdnXK2IbrTl/7kxbTzCrQs51g9m2tNqi1ikaY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YKcOD8rhFMm8uCJCs5DysEOw2GisOyhs2BhjfAr+fSlLHV3I4tO4wvLvmLNQD1bG+Ne39uPZIRzwWpa3K7Kr0Uv7OTpZ1V1aB/sYEmsjJ6/K2pt9yiEFzsFC2rAI05m30hgTk1ZlfxdOJSVRhOuhWDOHRRiiPGW/bmUNLOJgGvA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=Uhu8i6/M; arc=none smtp.client-ip=148.163.158.5 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="Uhu8i6/M" Received: from pps.filterd (m0353725.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 675Flenj4179320; Wed, 5 Aug 2026 16:55:25 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=Tqev6UqG4ef7wXqrS oKzHw0uyksSrFv8iBP1pHmpGuY=; b=Uhu8i6/M6MhiPODDnc2zsabPCABppdkGX Z5LJ7agwFQo1mnjQYX/0GiADo8HldEktZkN2INWi+Kktsx9cnzyYi/jA8gL7LkYr v0trCbNpJWibm+uTMnDfJSbISsIrBbVrisJ1Zn22YRLX3QeArIofo/S07o8OSCNn LOQ4KvJBQwP1I5LzdZh32DkLeWCqmcVuOEjfGbsQneMBUDFGZ18Fd981inw3ctak nTygIRls+yOZwF0YrSz2jX6emKvnXNl7xj+c0Djko0Y8tGuIgjcesJZ3qVjJ1rPs z/B2OG0k7sVosveGZiA9EZoDssPJxCpAGK8+U2dPbXJj3luI/VSoA== Received: from ppma23.wdc07v.mail.ibm.com (5d.69.3da9.ip4.static.sl-reverse.com [169.61.105.93]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fs77gbq1k-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 05 Aug 2026 16:55:25 +0000 (GMT) Received: from pps.filterd (ppma23.wdc07v.mail.ibm.com [127.0.0.1]) by ppma23.wdc07v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 675GfJX2032417; Wed, 5 Aug 2026 16:55:25 GMT Received: from smtprelay07.dal12v.mail.ibm.com ([172.16.1.9]) by ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4fsvmhfbuq-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 05 Aug 2026 16:55:25 +0000 (GMT) Received: from smtpav05.wdc07v.mail.ibm.com (smtpav05.wdc07v.mail.ibm.com [10.39.53.232]) by smtprelay07.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 675GtNqN30343930 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 5 Aug 2026 16:55:23 GMT Received: from smtpav05.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 699555805D; Wed, 5 Aug 2026 16:55:23 +0000 (GMT) Received: from smtpav05.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 689BF58053; Wed, 5 Aug 2026 16:55:22 +0000 (GMT) Received: from IBM-D32RQW3.ibm.com (unknown [9.61.241.193]) by smtpav05.wdc07v.mail.ibm.com (Postfix) with ESMTP; Wed, 5 Aug 2026 16:55:22 +0000 (GMT) From: Farhan Ali To: linux-s390@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org Cc: helgaas@kernel.org, alex@shazbot.org, alifm@linux.ibm.com, schnelle@linux.ibm.com, mjrosato@linux.ibm.com, stable@vger.kernel.org Subject: [PATCH v23 2/5] PCI: Allow per function PCI slots to fix slot reset on s390 Date: Wed, 5 Aug 2026 09:55:15 -0700 Message-ID: <20260805165518.794-3-alifm@linux.ibm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260805165518.794-1-alifm@linux.ibm.com> References: <20260805165518.794-1-alifm@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODA1MDEzNyBTYWx0ZWRfX8CxrD494981k Kg2L/QjrBq7sKlAIvma8Qf+bJy0zMHxRQiWxZ/XsWweKGT7TfFvN9Hrvjm9abexL1i/UyEPjcbA KvRKZWwpqNoNv+YyA92uMCVcXXDmsnPyh7VAAyWPIU8diHO3k5ZaarZgUad6dhM580L8JXfKFFO iTctP0oOibzOAcdpcY7dJ6W59VBjQPNCsSWNuTEUsyZmJM/kX84aB1bWwXoZfCyEhLqfK4av3oE w8jv70ojsNICIYknXy5rBc9g+21bu8Lb6xbiUvPo0ZgLjuNqqYfOt2mccR5MA1s6/fOuIWEW6pL vywfIg+RQZdpP0v+/t6j2Caupa8bNb94G3H1yFAPDXnuimXKbqOBV7KOR7r+Jm+5BkDeKZb1yyH yOfX41pj7uft5JwWtTxnk0SX4FNorPc4vtk2vl+4M7HpxOYYY/zbnuL1TsU+dZtcSpENh2KvKxs 8nskvnBM2D4vWAGpmSw== X-Authority-Analysis: v=2.4 cv=WIFPmHsR c=1 sm=1 tr=0 ts=6a736afd cx=c_pps a=3Bg1Hr4SwmMryq2xdFQyZA==:117 a=3Bg1Hr4SwmMryq2xdFQyZA==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=V8glGbnc2Ofi9Qvn3v5h:22 a=VwQbUJbxAAAA:8 a=VnNF1IyMAAAA:8 a=dQWU-RC_n072PXZGCE0A:9 a=O8hF6Hzn-FEA:10 X-Proofpoint-GUID: tzY5m-UBowbBEaoPJfFL0Rf1avna4kus X-Proofpoint-ORIG-GUID: tzY5m-UBowbBEaoPJfFL0Rf1avna4kus X-Proofpoint-Spam-Info: AW1haW4tMjYwODA1MDEzNyBTYWx0ZWRfX7J+6bwoVmCVj buGQMXqtXHsAX8iNsqSUn77nX4OIRqRvP6TtqhZBvCcroa8KPYlRirc/lLkplnya35vYTOOTLgA GAGOscONLKxA4Hl68gWVQbMF/8jLbvE= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-05_05,2026-08-04_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 lowpriorityscore=0 priorityscore=1501 phishscore=0 malwarescore=0 suspectscore=0 clxscore=1015 impostorscore=0 bulkscore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608050137 Content-Type: text/plain; charset="utf-8" On s390 systems, which use a machine level hypervisor, PCI devices are always accessed through a form of PCI pass-through which fundamentally operates on a per PCI function granularity. This is also reflected in the s390 PCI hotplug driver which creates hotplug slots for individual PCI functions. Its reset_slot() function, which is a wrapper for zpci_hot_reset_device(), thus also resets individual functions. Currently, the pci_create_slot() assigns the same pci_slot object to multifunction devices. This approach worked fine on s390 systems that only exposed virtual functions as individual PCI domains to the operating system. Since commit 44510d6fa0c0 ("s390/pci: Handling multifunctions") s390 supports exposing the topology of multifunction PCI devices by grouping them in a shared PCI domain. This creates a problem when resetting a function through the hotplug driver's slot_reset() interface. When attempting to reset a function through the hotplug driver, the shared slot assignment causes the wrong function to be reset instead of the intended one. It also leaks memory as we do create a pci_slot object for the function, but don't correctly free it in pci_slot_release(). Add a flag for struct pci_slot to allow per function PCI slots for functions managed through a hypervisor, which exposes individual PCI functions while retaining the topology. Since we can use all 8 bits for slot 'number' (for ARI devices), change slot 'number' u16 to account for special values PCI_SLOT_PLACEHOLDER and PCI_SLOT_ALL_DEVICES. Fixes: 44510d6fa0c0 ("s390/pci: Handling multifunctions") Cc: stable@vger.kernel.org Suggested-by: Niklas Schnelle Reviewed-by: Niklas Schnelle Signed-off-by: Farhan Ali --- drivers/pci/pci.c | 5 +++-- drivers/pci/slot.c | 29 +++++++++++++++++++++++------ include/linux/pci.h | 7 ++++--- 3 files changed, 30 insertions(+), 11 deletions(-) diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 77b17b13ee61..350bae907ebf 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -4897,8 +4897,9 @@ static int pci_reset_hotplug_slot(struct hotplug_slot= *hotplug, bool probe) =20 static int pci_dev_reset_slot_function(struct pci_dev *dev, bool probe) { - if (dev->multifunction || dev->subordinate || !dev->slot || - dev->dev_flags & PCI_DEV_FLAGS_NO_BUS_RESET) + if (dev->subordinate || !dev->slot || + dev->dev_flags & PCI_DEV_FLAGS_NO_BUS_RESET || + (dev->multifunction && !dev->slot->per_func_slot)) return -ENOTTY; =20 return pci_reset_hotplug_slot(dev->slot->hotplug, probe); diff --git a/drivers/pci/slot.c b/drivers/pci/slot.c index 42ff66461f74..897223f01f6a 100644 --- a/drivers/pci/slot.c +++ b/drivers/pci/slot.c @@ -72,6 +72,23 @@ static ssize_t cur_speed_read_file(struct pci_slot *slot= , char *buf) return bus_speed_read(slot->bus->cur_bus_speed, buf); } =20 +static bool pci_dev_matches_slot(struct pci_dev *dev, struct pci_slot *slo= t) +{ + if (slot->per_func_slot) + return dev->devfn =3D=3D slot->number; + + return slot->number =3D=3D PCI_SLOT_ALL_DEVICES || + PCI_SLOT(dev->devfn) =3D=3D slot->number; +} + +static bool pci_slot_enabled_per_func(void) +{ + if (IS_ENABLED(CONFIG_S390)) + return true; + + return false; +} + static void pci_slot_release(struct kobject *kobj) { struct pci_dev *dev; @@ -82,8 +99,7 @@ static void pci_slot_release(struct kobject *kobj) =20 down_read(&pci_bus_sem); list_for_each_entry(dev, &slot->bus->devices, bus_list) - if (slot->number =3D=3D PCI_SLOT_ALL_DEVICES || - PCI_SLOT(dev->devfn) =3D=3D slot->number) + if (pci_dev_matches_slot(dev, slot)) dev->slot =3D NULL; up_read(&pci_bus_sem); =20 @@ -187,8 +203,7 @@ void pci_dev_assign_slot(struct pci_dev *dev) =20 mutex_lock(&pci_slot_mutex); list_for_each_entry(slot, &dev->bus->slots, list) - if (slot->number =3D=3D PCI_SLOT_ALL_DEVICES || - PCI_SLOT(dev->devfn) =3D=3D slot->number) + if (pci_dev_matches_slot(dev, slot)) dev->slot =3D slot; mutex_unlock(&pci_slot_mutex); } @@ -299,6 +314,9 @@ struct pci_slot *pci_create_slot(struct pci_bus *parent= , int slot_nr, slot->bus =3D pci_bus_get(parent); slot->number =3D slot_nr; =20 + if (pci_slot_enabled_per_func()) + slot->per_func_slot =3D 1; + slot->kobj.kset =3D pci_slots_kset; =20 slot_name =3D make_slot_name(name); @@ -319,8 +337,7 @@ struct pci_slot *pci_create_slot(struct pci_bus *parent= , int slot_nr, =20 down_read(&pci_bus_sem); list_for_each_entry(dev, &parent->devices, bus_list) - if (slot_nr =3D=3D PCI_SLOT_ALL_DEVICES || - PCI_SLOT(dev->devfn) =3D=3D slot_nr) + if (pci_dev_matches_slot(dev, slot)) dev->slot =3D slot; up_read(&pci_bus_sem); =20 diff --git a/include/linux/pci.h b/include/linux/pci.h index b628787e9485..43f80d6189a7 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -79,17 +79,18 @@ * and, if ARI Forwarding is enabled, functions may appear to be on multip= le * devices. */ -#define PCI_SLOT_ALL_DEVICES 0xfe +#define PCI_SLOT_ALL_DEVICES 0xfeff =20 /* Used to identify a slot as a placeholder */ -#define PCI_SLOT_PLACEHOLDER 0xff +#define PCI_SLOT_PLACEHOLDER 0xffff =20 /* pci_slot represents a physical slot */ struct pci_slot { struct pci_bus *bus; /* Bus this slot is on */ struct list_head list; /* Node in list of slots */ struct hotplug_slot *hotplug; /* Hotplug info (move here) */ - unsigned char number; /* Device nr, or PCI_SLOT_ALL_DEVICES */ + u16 number; /* Device nr, or PCI_SLOT_ALL_DEVICES */ + unsigned int per_func_slot:1; /* Allow per function slot */ struct kobject kobj; }; =20 --=20 2.43.0 From nobody Fri Oct 2 03:03:00 2026 Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (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 9DA7948423E; Wed, 5 Aug 2026 16:55:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.156.1 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785948939; cv=none; b=p6HqS+OeyHs5+bAM4Hx2ga5nR40S/fhwiPpKC2kZc8UMMV6/nXDUIxubRHQKRH3TxzSzQkGYMFIpB95nBl6/OTQ34Cg2nLswDq4tSth00wSQQXkS/iZBFLFlqyh80XuS8vQmBZRcEs4cKp4fBAdYvhjmVVrSda05jiTqyhikLaI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785948939; c=relaxed/simple; bh=S2J6GfTA17MRPi8hVmy1uCqMXutp4PYcAl3ULfkwQ5Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=tVNEKmLhJHF5q3FUTePZOj24QpInG0ENwx9LN/f5uMn0QLQNqjvy7S0qNk5JjQxgcPFb61zX7aiP4+pmJlUjeobMl4tTH2kpicxzdoPJCzbEsLKrfJzpbdSQR4YmuHocLpl7AWI7GKyIXyRrbmY9qwy5gSQYw1gq2loprm57dOE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=U6uxWKiR; arc=none smtp.client-ip=148.163.156.1 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="U6uxWKiR" Received: from pps.filterd (m0353729.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 675Flwbp2398214; Wed, 5 Aug 2026 16:55:27 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=12J8MB6C2cv981QXO JBi1IBshXR9vjAE306Ivlw7e6Y=; b=U6uxWKiRDaAiu5VxkFYia2SV/gYgqthfY kcOa7JGpBkoV+ChnzugAWJxSC3maTyYiS10x/ufUSrhRFDNmT+4tbliWYOdG7Naa cIFXQF/6/UFqTrzKMQ3Ij54qPAjcGfxJWdc3xOV/LTHEnIUG/td5yTO7+/4vOZwD H5MTHyBii4rrMi/qHGn5uQJ5DO4L0JSOK6MqGx8aK5/7lcJiEF4dzHcRQ0Nw+MtN EdIecxrpfgPfVx5fSC54XWNxZ8XxQ0JUUbfZ9GS1aepoE+HK83sBa4EdJ3TFSwqE H5AGxINqZZ3Xw9LVO/WjufcHH35qHeexaFY0AsxyWJidHj/h3ih8w== Received: from ppma12.dal12v.mail.ibm.com (dc.9e.1632.ip4.static.sl-reverse.com [50.22.158.220]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fs8fqv1hg-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 05 Aug 2026 16:55:27 +0000 (GMT) Received: from pps.filterd (ppma12.dal12v.mail.ibm.com [127.0.0.1]) by ppma12.dal12v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 675GfIIJ007553; Wed, 5 Aug 2026 16:55:26 GMT Received: from smtprelay01.wdc07v.mail.ibm.com ([172.16.1.68]) by ppma12.dal12v.mail.ibm.com (PPS) with ESMTPS id 4fsu4qqjc2-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 05 Aug 2026 16:55:26 +0000 (GMT) Received: from smtpav05.wdc07v.mail.ibm.com (smtpav05.wdc07v.mail.ibm.com [10.39.53.232]) by smtprelay01.wdc07v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 675GtO1058393074 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 5 Aug 2026 16:55:24 GMT Received: from smtpav05.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 92ABB58043; Wed, 5 Aug 2026 16:55:24 +0000 (GMT) Received: from smtpav05.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 93D3358053; Wed, 5 Aug 2026 16:55:23 +0000 (GMT) Received: from IBM-D32RQW3.ibm.com (unknown [9.61.241.193]) by smtpav05.wdc07v.mail.ibm.com (Postfix) with ESMTP; Wed, 5 Aug 2026 16:55:23 +0000 (GMT) From: Farhan Ali To: linux-s390@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org Cc: helgaas@kernel.org, alex@shazbot.org, alifm@linux.ibm.com, schnelle@linux.ibm.com, mjrosato@linux.ibm.com, Bjorn Helgaas Subject: [PATCH v23 3/5] PCI: Avoid saving config space state if inaccessible Date: Wed, 5 Aug 2026 09:55:16 -0700 Message-ID: <20260805165518.794-4-alifm@linux.ibm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260805165518.794-1-alifm@linux.ibm.com> References: <20260805165518.794-1-alifm@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Reinject: loops=2 maxloops=12 X-Proofpoint-GUID: 7wFz823zbD1o4DCd2xqTVqB2Dc6YdmQN X-Proofpoint-ORIG-GUID: PWo_ybriJhMSCga8pXki8OWWYdcG9kQH X-Proofpoint-Spam-Info: AW1haW4tMjYwODA1MDEzNyBTYWx0ZWRfX+9L9UUvgmotL d0ArEQDHr5FcRxGhpfUuraXsatpnTyJFGPZLQg6xuyhPHLjDDJ7B20l57xWoC4BnhytYX6GPkWN sw3RwESs+ybrU6LFuPWEWg4sf0Hqr5E= X-Authority-Analysis: v=2.4 cv=K8cS2SWI c=1 sm=1 tr=0 ts=6a736aff cx=c_pps a=bLidbwmWQ0KltjZqbj+ezA==:117 a=bLidbwmWQ0KltjZqbj+ezA==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=uAbxVGIbfxUO_5tXvNgY:22 a=VnNF1IyMAAAA:8 a=1XWaLZrsAAAA:8 a=qS04rNcGil1I7-YeviAA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODA1MDEzNyBTYWx0ZWRfX9RyaibMKvvjN NI3YDNPRvuDgH6nVFRq+tbo+NnC6YTyiedeXJStKbERGVbpi4w6VrgXIyp+g9NCNHKvS69cd78t 2jM5EA4sfyddyvsUSZYtaGNRaIFTFxNmX0ltYbp7Z2+C4geywlJbDXz6PjrOV8KIvJe6FzjFaQN cEboLiwvKmjXr30FwNp5IowvASPqLuAEzqNHzmOMCyG/FDjHMxLeudZ8nb7EuAOYblhRaDjZZ+f +X7k/mEY29hBanW1auyQl/PKODgnQAHXotbFHFbZDRqFjzubmUfJmX2NEBPckgcDpoExFnUekB6 Y88z2+vowUmo2WrYInQoMXgrOm0FnS+vlIu6c/m1HQzLuPOctW7pUwhv69CdpJSi5pX4azRvB+2 RQorwBuP5674kRsK2nmUG3amxEqwKSQqb5gw1J+fL7JwB6wAIbnp4/niYm57WouoY3jEktBY6dm tou3BhLdTNxYo19pdZg== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-05_05,2026-08-04_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 spamscore=0 impostorscore=0 bulkscore=0 priorityscore=1501 lowpriorityscore=0 malwarescore=0 phishscore=0 suspectscore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608050137 Content-Type: text/plain; charset="utf-8" The current reset process saves the device's config space state before reset and restores it afterward. However errors may occur unexpectedly and it may then be impossible to save config space because the device may be inaccessible (e.g. DPC). This results in saving invalid values that get written back to the device during state restoration. With a reset we want to recover/restore the device into a functional state. So avoid saving the state of the config space when the device config space is inaccessible. Reviewed-by: Niklas Schnelle Reviewed-by: Bjorn Helgaas Signed-off-by: Farhan Ali --- drivers/pci/pci.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 350bae907ebf..e8d7de77241a 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -713,6 +713,27 @@ u16 pci_find_dvsec_capability(struct pci_dev *dev, u16= vendor, u16 dvsec) } EXPORT_SYMBOL_GPL(pci_find_dvsec_capability); =20 +static bool pci_dev_config_accessible(struct pci_dev *dev, char *msg) +{ + u32 val; + + /* + * If device's config space is inaccessible it can return ~0 for + * any reads. Since VFs can also return ~0 for Device and Vendor ID + * check Command and Status registers. Note that this is racy + * because the device may become inaccessible partway through + * next access. + */ + pci_read_config_dword(dev, PCI_COMMAND, &val); + if (PCI_POSSIBLE_ERROR(val)) { + pci_warn(dev, "Device config space inaccessible; unable to %s\n", + msg); + return false; + } + + return true; +} + /** * pci_find_parent_resource - return resource region of parent bus of given * region @@ -5059,6 +5080,9 @@ static void pci_dev_save_and_disable(struct pci_dev *= dev) */ pci_set_power_state(dev, PCI_D0); =20 + if (!pci_dev_config_accessible(dev, "save state")) + return; + pci_save_state(dev); /* * Disable the device by clearing the Command register, except for --=20 2.43.0 From nobody Fri Oct 2 03:03:00 2026 Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) (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 7C272425873; Wed, 5 Aug 2026 16:55:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.158.5 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785948939; cv=none; b=O0OWlXX8DorEpSsBf4l1YJml3HiZH2ZvGg+qQ7PL8K3BNe7qlOoENv+5/u/nVmtXO7oB7SRaH2nvkI+jLppniKfDLhLP9y65BLlsTZytQyx0iVFHrSG7/3xTSdvT7L6Pq3R16+dAIwEiadYR6OSCFPDsgrbkcbcCUacfh/vG8HU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785948939; c=relaxed/simple; bh=cX5TZtvSZwarWBI5c6PMZ7i7miA4OLjgPxAssK4YgaM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VOkQJvgNfq+yFq40oKVc5PNkISbjzwwQTMYpS011fcsBdypvDtY0THomf17RsE8t56FbjHvz/J/TRGTgAFZ4KVd1oxlILZOWW+OMLuJ4BUWN609Cl2lLuc1qY5xULyrcBbOfbXsxKP8FjURsCzLeAdbVgtJHnMK0xS5LfyR6Aac= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=D08RBVaF; arc=none smtp.client-ip=148.163.158.5 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="D08RBVaF" Received: from pps.filterd (m0353725.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 675Flpeu4179505; Wed, 5 Aug 2026 16:55:27 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=vXU3DidQiGyzHYE/9 ch2T/ZRaHPRlcHfwPGBi3+olgE=; b=D08RBVaFzkGSV4wwE7YtGM9BnVO/SOBEi 3shG5K8zZSkCs3M0Y7Agmke4Z+krO2Iq79zwNHde8oJIN6UVcWeFSl4WODF80aEK /N7+uyMyfF/lRRSzCZphf0sPH8n1O/qDffDk77gBJ5MDQGfvyNc+ehxOPN+U74EM OO5HCU5OPp3KwCF49TLMICYekBjlG2MkGs/T0oNIrio92n/DKv03jhGcMLsyUcPJ 7Ea9zVbsysiGzaoVWDzMKfM64QOXO1Goq3ZM8wdg5iL39APoQeIysxolHaz7inmb 78RcU7ZT4RT7uZZbTke0Sf+makwnHEI1oxSueFQbftHIY8WVQOG3A== Received: from ppma22.wdc07v.mail.ibm.com (5c.69.3da9.ip4.static.sl-reverse.com [169.61.105.92]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fs77gbq1q-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 05 Aug 2026 16:55:27 +0000 (GMT) Received: from pps.filterd (ppma22.wdc07v.mail.ibm.com [127.0.0.1]) by ppma22.wdc07v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 675GfG2c023471; Wed, 5 Aug 2026 16:55:27 GMT Received: from smtprelay02.wdc07v.mail.ibm.com ([172.16.1.69]) by ppma22.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4fsugw7hnt-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 05 Aug 2026 16:55:27 +0000 (GMT) Received: from smtpav05.wdc07v.mail.ibm.com (smtpav05.wdc07v.mail.ibm.com [10.39.53.232]) by smtprelay02.wdc07v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 675GtPis30802564 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 5 Aug 2026 16:55:25 GMT Received: from smtpav05.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id C61525805D; Wed, 5 Aug 2026 16:55:25 +0000 (GMT) Received: from smtpav05.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id BF39058043; Wed, 5 Aug 2026 16:55:24 +0000 (GMT) Received: from IBM-D32RQW3.ibm.com (unknown [9.61.241.193]) by smtpav05.wdc07v.mail.ibm.com (Postfix) with ESMTP; Wed, 5 Aug 2026 16:55:24 +0000 (GMT) From: Farhan Ali To: linux-s390@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org Cc: helgaas@kernel.org, alex@shazbot.org, alifm@linux.ibm.com, schnelle@linux.ibm.com, mjrosato@linux.ibm.com, Benjamin Block Subject: [PATCH v23 4/5] PCI: Fail FLR when config space is inaccessible Date: Wed, 5 Aug 2026 09:55:17 -0700 Message-ID: <20260805165518.794-5-alifm@linux.ibm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260805165518.794-1-alifm@linux.ibm.com> References: <20260805165518.794-1-alifm@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODA1MDEzNyBTYWx0ZWRfXzCwtd+BoaI8+ FaQsbahskR50DgawAcs36H6/aDs2d0IWHfsaRuAYfb7Ff0ns/VdrLLzb5biE+2jSJAUVnZUpY6r KNi9/dUPDJqUozGOrnlDQ6s75dQ8q5CtzofPH92ui6ZULskkGKGnlcypaqkSeNFNNkx/Zx/3542 07+nHgbPvfeJMOYPdx+fmWCGwpGrAO1L3Hg9+Gl01nE2ozDcZLDC6bsRKabEuh4ZEIj+aUOuwiT RjXZcYjwqCEt+m2SOLpl8+GEFLFSrEtNL4uI8vuewJtqP6AaQO8Jk65IyKq9P9npf+DVRh8hdHR vkYw71PaUyOGDk1FMYyrf8zElF+l0SobU5C6jRH39/DUM7Z7U4hl3n/OpHgzxk94FmYBo0iF8Qs 8+s4LHZys8oVn/PoepuLn4pIxcUGFD2vcr+iuWfqfC3HkSh6PDI5+EHkoFlZffhx8V98szeQq3f lGbDbA46oqDpU+GJpYg== X-Authority-Analysis: v=2.4 cv=WIFPmHsR c=1 sm=1 tr=0 ts=6a736aff cx=c_pps a=5BHTudwdYE3Te8bg5FgnPg==:117 a=5BHTudwdYE3Te8bg5FgnPg==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=V8glGbnc2Ofi9Qvn3v5h:22 a=VnNF1IyMAAAA:8 a=1owyFLT6pZZ0tE0DW5YA:9 a=zgiPjhLxNE0A:10 X-Proofpoint-GUID: nYKQWf2c5tGdDO45B7lpghxWHQY_W83D X-Proofpoint-ORIG-GUID: nYKQWf2c5tGdDO45B7lpghxWHQY_W83D X-Proofpoint-Spam-Info: AW1haW4tMjYwODA1MDEzNyBTYWx0ZWRfX65e0g52Ak5D1 RhB5EzZswZzTLxqdwpzQ3GOwQhLPw8f27qhprIm4ZxA2Y3lk9Su/3nyBUEECJ0RiXv0cXc9XsZW 9YOPSYaqDpnRqQJh1xYfamG2PBL/paI= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-05_05,2026-08-04_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 lowpriorityscore=0 priorityscore=1501 phishscore=0 malwarescore=0 suspectscore=0 clxscore=1015 impostorscore=0 bulkscore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608050137 Content-Type: text/plain; charset="utf-8" If a device is in an error state, then it's config space may not be accssible. Add additional check to validate if a device's config space is accessible before doing an FLR reset. Reviewed-by: Benjamin Block Reviewed-by: Niklas Schnelle Signed-off-by: Farhan Ali --- drivers/pci/pci.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index e8d7de77241a..9a9d021301c4 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -4384,6 +4384,9 @@ int pcie_flr(struct pci_dev *dev) { int ret; =20 + if (!pci_dev_config_accessible(dev, "FLR")) + return -ENOTTY; + if (!pci_wait_for_pending_transaction(dev)) pci_err(dev, "timed out waiting for pending transaction; performing func= tion level reset anyway\n"); =20 --=20 2.43.0 From nobody Fri Oct 2 03:03:00 2026 Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (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 0EB8547045E; Wed, 5 Aug 2026 16:55:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.156.1 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785948938; cv=none; b=hKfZKeeKFg8K+PW3pbC5xn0MSkzL74MkRKDcgn+kIFj0ES81eugMCoL1x7MaNDSKH8T4rbjP7J0Jb0m6O0GUzbZ9O4LYES9P2h4fjoylbb1iwCKhFfIYhFZNszcK2/SFAfgBX8w7MAvoRoo2p6o0AL5mEVl4XHRRM9EXBKJbisc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785948938; c=relaxed/simple; bh=gKQYf74xPpytI8rbZnvPeewbN3H/KzF0nc088tK6OYs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=FYiGJB2e/v8lR0LKwvD7o+n8rX62VsS47DSnHkEFSDKfMEMlBf24m4ClkzuoX6MpI1AYHjJ/p0R8MJcOOEEZVt1MyaspPYv/AbsZazHgOAvx5X7U6CfLg9RWsGa/VqsFV+b8ym7Jal1++MKhIYi4x1Ot/h1iqoTk++lkuAz2MKk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=oZ8oAVrI; arc=none smtp.client-ip=148.163.156.1 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="oZ8oAVrI" Received: from pps.filterd (m0353729.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 675FldwX2397846; Wed, 5 Aug 2026 16:55:30 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=q3mWEO+m7Q0z7JDH5 ZGSHJF5tisumNe9dB4cIXGURIs=; b=oZ8oAVrIrFfn/eImqsVg0VHQbO82iT8SR XWlNlDPHRg3CIuHpF7EDyb3Z3BBgeJoODkJZ9gp6OFtxC5cSZ7G77tQ6l0kTvw9R JEgx7Dtpd4yvHC7Mm9YHSvt3b82mVGqxhmrUs6F6M9qDUHcKEQdZo5xhPSB+Mlls 7/0R5KROV1q8WstJk/3URbxnJVYXTzSeBDF70ZLvF5ZCiX0zNDodEj64DAaW74rY vtuE7uJu5JkFytZYFiTDhjTHkYAiHJI2ONUIPe3w1xCa+VojTlstfBVXD9cmJwKW FymLYYKVTOrOcIT/zOc55pu84BbCzzDT8HTUTUPvjBVfuQ6B7TDGg== Received: from ppma11.dal12v.mail.ibm.com (db.9e.1632.ip4.static.sl-reverse.com [50.22.158.219]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fs8fqv1hp-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 05 Aug 2026 16:55:29 +0000 (GMT) Received: from pps.filterd (ppma11.dal12v.mail.ibm.com [127.0.0.1]) by ppma11.dal12v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 675GfRtG014995; Wed, 5 Aug 2026 16:55:28 GMT Received: from smtprelay04.wdc07v.mail.ibm.com ([172.16.1.71]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 4fswtyq6pg-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 05 Aug 2026 16:55:28 +0000 (GMT) Received: from smtpav05.wdc07v.mail.ibm.com (smtpav05.wdc07v.mail.ibm.com [10.39.53.232]) by smtprelay04.wdc07v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 675GtRBn60752262 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 5 Aug 2026 16:55:27 GMT Received: from smtpav05.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 0E5DD58043; Wed, 5 Aug 2026 16:55:27 +0000 (GMT) Received: from smtpav05.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id F0EE458053; Wed, 5 Aug 2026 16:55:25 +0000 (GMT) Received: from IBM-D32RQW3.ibm.com (unknown [9.61.241.193]) by smtpav05.wdc07v.mail.ibm.com (Postfix) with ESMTP; Wed, 5 Aug 2026 16:55:25 +0000 (GMT) From: Farhan Ali To: linux-s390@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org Cc: helgaas@kernel.org, alex@shazbot.org, alifm@linux.ibm.com, schnelle@linux.ibm.com, mjrosato@linux.ibm.com, stable@vger.kernel.org, Thomas Gleixner Subject: [PATCH v23 5/5] PCI/MSI: Enable memory decoding before restoring MSI-X messages Date: Wed, 5 Aug 2026 09:55:18 -0700 Message-ID: <20260805165518.794-6-alifm@linux.ibm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260805165518.794-1-alifm@linux.ibm.com> References: <20260805165518.794-1-alifm@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-GUID: 7YHdNf-BmoHkdZzl1lDc47tngexues5m X-Proofpoint-ORIG-GUID: 7YHdNf-BmoHkdZzl1lDc47tngexues5m X-Proofpoint-Spam-Info: AW1haW4tMjYwODA1MDEzNyBTYWx0ZWRfX63aB1dHFPIyz Bwqxmy2B2wI7Fs5GCACykjnRNPZG9MueP1CpvGFB+dBVY8aVonFHu5oS7vgaFcudRWhPBqKDm9M bQLkX+WqDb5GHgqMsmV1YLgwxlgl4Dg= X-Authority-Analysis: v=2.4 cv=K8cS2SWI c=1 sm=1 tr=0 ts=6a736b01 cx=c_pps a=aDMHemPKRhS1OARIsFnwRA==:117 a=aDMHemPKRhS1OARIsFnwRA==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=uAbxVGIbfxUO_5tXvNgY:22 a=VwQbUJbxAAAA:8 a=VnNF1IyMAAAA:8 a=di-imCqyroNM6h0WoG0A:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODA1MDEzNyBTYWx0ZWRfXyc8zsJ3r0mvE iyWitw8NJaPir5V3bFnIeAasNpLC3J4ouCs1B8Vvv2U84Ax8vU3tmWg6x69k9SXRqn9/bAhnWNd VCipv3KVFcQffuF+9tZE7i8hHaQM2QA7LlWReLfBd2Vpoz8HlWvCZQtp0o+lo2lppKiuK8njW4/ 2TVYSpiY4VmJ6k2e3WU3Yhv4z9IPRyTV23Vo+XYxVK7sbh8p//IIyx0K1XSbqlfJh/ZlIF083Gv BuY6YtsQ9sgmy9wJV5ZDp71OplHoJIgfUgyZ6Yf9RO8F204cjOSkfOG6MhzB7CRyP2Csjt4VWYB G30XybtbzSkCicVn9Qlkcd4fy3ZzsQ8CrbeTLc/LVygGLtugJPk9MsRxil/wOWrJVwfpJDG8afj tnxzPGQR4cCMq2KHKT35zu1j6YwbzFXAs4Iy2/JEm4UVFhQZ+EmwTDeVsfJuMO/g12KMSmX9cof j+/hWK6akK/2igoigjA== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-05_05,2026-08-04_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 spamscore=0 impostorscore=0 bulkscore=0 priorityscore=1501 lowpriorityscore=0 malwarescore=0 phishscore=0 suspectscore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608050137 Content-Type: text/plain; charset="utf-8" The current MSI-X restoration path assumes the Command register Memory bit is enabled when writing MSI-X messages. But it's possible the last saved and restored state of a device may not have the Memory bit enabled, even if a device driver later enables Memory bit and MSI-X. Attempting to access Memory space without Memory bit enabled can lead to Unsupported Request (UR) from the device. Fix this by enabling Memory bit and restore it afterwards. Fixes: 41017f0cac92 ("[PATCH] PCI: MSI(X) save/restore for suspend/resume") Cc: stable@vger.kernel.org Reviewed-by: Thomas Gleixner Reviewed-by: Niklas Schnelle Signed-off-by: Farhan Ali --- drivers/pci/msi/msi.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/pci/msi/msi.c b/drivers/pci/msi/msi.c index 209373c92e9e..79c7e84d314b 100644 --- a/drivers/pci/msi/msi.c +++ b/drivers/pci/msi/msi.c @@ -870,6 +870,7 @@ void __pci_restore_msix_state(struct pci_dev *dev) { struct msi_desc *entry; bool write_msg; + u16 cmd; =20 if (!dev->msix_enabled) return; @@ -879,6 +880,14 @@ void __pci_restore_msix_state(struct pci_dev *dev) pci_msix_clear_and_set_ctrl(dev, 0, PCI_MSIX_FLAGS_ENABLE | PCI_MSIX_FLAGS_MASKALL); =20 + /* + * The restored device state may not have Memory decoding enabled + * in the Command register. Since the MSI-X was enabled for the + * device, enable Memory decoding before restoring MSI-X. + */ + pci_read_config_word(dev, PCI_COMMAND, &cmd); + pci_write_config_word(dev, PCI_COMMAND, cmd | PCI_COMMAND_MEMORY); + write_msg =3D arch_restore_msi_irqs(dev); =20 scoped_guard (msi_descs_lock, &dev->dev) { @@ -889,6 +898,7 @@ void __pci_restore_msix_state(struct pci_dev *dev) } } =20 + pci_write_config_word(dev, PCI_COMMAND, cmd); pci_msix_clear_and_set_ctrl(dev, PCI_MSIX_FLAGS_MASKALL, 0); } =20 --=20 2.43.0