From nobody Sat Feb 7 21:23:49 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 5BA7A296BD6; Thu, 22 Jan 2026 19:45:00 +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=1769111113; cv=none; b=TV8nEBS9WDCeNCwq17b8rqR9AVpMCT0oCbZwzZbox8dIiGP+M/ZM1G7FSRe7QfRRx6wnm4llTq5PBoTs8gNZGz8H0hKUq/9JRQGvdbf+NbILk36yaEbOqL0+HDvO3Ok2MeWD1rz2Ax/rFgb/GbbNPAkHRoIYJVZapJ4rUBjzPGI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769111113; c=relaxed/simple; bh=m63QfxARQvHUgDVt2i52IKO/FOBfIOev/slH0ixA0iQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=IG38Af7ZlE1pKFdjUKDgjRJ61sYBKeNlA23VhxG6cSgg23uSCvEiJZyEzDZICo1BnmPzo3DKWSkMuWZ2hZZXd/bRqbgBFZEReAguX2AKhGKMJVkLvIoSPKbCvNNU5oWHXqYc/+Kn0CN/7JlfayqAWnDMC0e8ZW/tXjpa778QiPU= 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=fldMFBAh; 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="fldMFBAh" Received: from pps.filterd (m0353725.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 60MIHVon005726; Thu, 22 Jan 2026 19:44:43 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=y8DoS2CKR0BbXS854 POL/emHyULromFo/4PdBxP1lDo=; b=fldMFBAhSFz9lXiDenxiurL2KDQpvs6uO rQHtdhHOY+vVWvdQFp8QRvFv90mgPFvMm17trWLF3r+DaAH/gjUak9eP412p5eLO nUjXj6L/D4amuvDVz51f5gyHo2kPzuFpCw6A1ivGf2bhyXFPWok6bevwgK6UaqGl fKvLCTNbwtqm8GkmRL/DsC9EyMRmPWni+WxBmGCCs1rQn2Me8507s8RU/bRoH5k4 odWEYOIonyLmwicrYOnhqJnWlfWbC5U7z3JENrYHRHwdzvURulB4NjNzVAg4eq8P e2+LyujjOOxAAxER++RPCCCATN5QkNpbnRV3xmbnI8W3WoEsiCjHw== Received: from ppma21.wdc07v.mail.ibm.com (5b.69.3da9.ip4.static.sl-reverse.com [169.61.105.91]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4bus1prbxw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 22 Jan 2026 19:44:43 +0000 (GMT) Received: from pps.filterd (ppma21.wdc07v.mail.ibm.com [127.0.0.1]) by ppma21.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 60MIVqdr027220; Thu, 22 Jan 2026 19:44:42 GMT Received: from smtprelay02.wdc07v.mail.ibm.com ([172.16.1.69]) by ppma21.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4brnrncg26-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 22 Jan 2026 19:44:42 +0000 Received: from smtpav03.dal12v.mail.ibm.com (smtpav03.dal12v.mail.ibm.com [10.241.53.102]) by smtprelay02.wdc07v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 60MJiedc393770 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 22 Jan 2026 19:44:41 GMT Received: from smtpav03.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 968DE5805A; Thu, 22 Jan 2026 19:44:40 +0000 (GMT) Received: from smtpav03.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id B5E1B58056; Thu, 22 Jan 2026 19:44:39 +0000 (GMT) Received: from IBM-D32RQW3.ibm.com (unknown [9.61.248.216]) by smtpav03.dal12v.mail.ibm.com (Postfix) with ESMTP; Thu, 22 Jan 2026 19:44:39 +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, lukas@wunner.de, alex@shazbot.org, clg@redhat.com, stable@vger.kernel.org, alifm@linux.ibm.com, schnelle@linux.ibm.com, mjrosato@linux.ibm.com, julianr@linux.ibm.com Subject: [PATCH v8 1/9] PCI: Allow per function PCI slots Date: Thu, 22 Jan 2026 11:44:29 -0800 Message-ID: <20260122194437.1903-2-alifm@linux.ibm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260122194437.1903-1-alifm@linux.ibm.com> References: <20260122194437.1903-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-ORIG-GUID: 2jwfsiqnyUq2jBY1CXNathlAGsauAmHn X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTIyMDE0OCBTYWx0ZWRfX3qsIyWTdCI0Z geI+GRzzt+IqWNxXyztP2y/dph8AzPNAgodIXVhakazyoBr7oxftC8wbfVWpMOpQPOy07CXLT4k ok6J6Lkd8wKtaZIAiF3LnjFmi3kNLNWh5H08s2Dx2J0tcMdIU7zI3tAtRK0Zz1ug7nFawjJ0r6u GuGdZ8+ZbsmOMSZWdP9n1Cy7CQIjJiXrGTP6wqKJPx2nsOoSav/o2QPaW/ugVx7X7UKEEdkxk4G bQa85Q9nTBi/8A7Fgh8nPPLl4XqzwNWi4M5n9zgS6rzcrPVX8mwvahNXquJyiIiBv9uNxrNJpIX +0c+wggzsSBm5XuLagzU2/cjESrXHDfxP1zHl/BPBPJ6flI5rQkADC7U/OSPg6XhJHN+l6bPPBx jpCKjrCVQrfamzzPdNzcQd4hJOZycB0tg2gnF3rU13KGDtwGLlniiu+EVymJJBZohXAJT5mzDNx 0LOuIcKo2HH/k9zvI+A== X-Proofpoint-GUID: 2jwfsiqnyUq2jBY1CXNathlAGsauAmHn X-Authority-Analysis: v=2.4 cv=GY8aXAXL c=1 sm=1 tr=0 ts=69727e2b cx=c_pps a=GFwsV6G8L6GxiO2Y/PsHdQ==:117 a=GFwsV6G8L6GxiO2Y/PsHdQ==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=VwQbUJbxAAAA:8 a=VnNF1IyMAAAA:8 a=Oaqo05sdQjFGKWlA34QA:9 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.20,FMLib:17.12.100.49 definitions=2026-01-22_04,2026-01-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 impostorscore=0 phishscore=0 lowpriorityscore=0 spamscore=0 malwarescore=0 priorityscore=1501 bulkscore=0 adultscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2601150000 definitions=main-2601220148 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 kernel's PCI_SLOT() macro 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. 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. 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 | 25 ++++++++++++++++++++++--- include/linux/pci.h | 1 + 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 13dbb405dc31..c105e285cff8 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -4832,8 +4832,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 50fb3eb595fe..ed10fa3ae727 100644 --- a/drivers/pci/slot.c +++ b/drivers/pci/slot.c @@ -63,6 +63,22 @@ 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 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; @@ -73,7 +89,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 (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 @@ -166,7 +182,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 (PCI_SLOT(dev->devfn) =3D=3D slot->number) + if (pci_dev_matches_slot(dev, slot)) dev->slot =3D slot; mutex_unlock(&pci_slot_mutex); } @@ -265,6 +281,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); @@ -285,7 +304,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 (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 b5cc0c2b9906..73d051c287a7 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -78,6 +78,7 @@ struct pci_slot { struct list_head list; /* Node in list of slots */ struct hotplug_slot *hotplug; /* Hotplug info (move here) */ unsigned char number; /* PCI_SLOT(pci_dev->devfn) */ + unsigned int per_func_slot:1; /* Allow per function slot */ struct kobject kobj; }; =20 --=20 2.43.0 From nobody Sat Feb 7 21:23:49 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 8D9B3353ECC; Thu, 22 Jan 2026 19:45:02 +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=1769111110; cv=none; b=kloJqxaWkxYbHtyff9X0DzbJ8F/S7nCXGhCYOISuMoi+JZEhxEKV2z0qkdg7TAyX3gwu4MG6FC0/MF//0TTL3Y5RBOffomUOVqV152A2ndUg/TjFtAVUUuXkJWeHXk8bWbSc5WJPjxH6c7uGuKLfL7Zc8gQ3nWZo/2sXyqZOmAc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769111110; c=relaxed/simple; bh=rpGbw6aPatBFoO1n6MG8kM9PgC511SMrfUTMIJhpc3g=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Zvf1Slh7EK4VJLpblURlDiR93wA58agD3DzPV90PSuKbzGJN6OUBDciTc5VhG4tCT76mvKyhRXq/OqdEoblQ0BdfxORmMv9WCpMqQGVes25QNWjK8rtA7IftingyNJ3NzIW1VFhW1xUobZly2C+eb2TxMZEy5NpCAjEqWihdGdQ= 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=N7MFIPD2; 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="N7MFIPD2" Received: from pps.filterd (m0356516.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 60MCSYnS007700; Thu, 22 Jan 2026 19:44:44 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=Y9znmSbPzfrs06b6s 0xx9RdEZOPm29RJowDzYc/AEco=; b=N7MFIPD2/kNCHnc2I3eN0yni9a+O0tfi9 6Qa2YEXEIXoZ0RzNwAgKPYU0A9Tk5gWtogNihtUpWiuHOjGK2ultxp7Gy7MgNEoF +ct5+JK6272bbvqDIJlH/RTT/8nlYu+dtkiZhMZXXv00VVV4fjqJS17IIBdmkVqL DgM/Qcdg/zKYhJgaLSE1ViaIWspo8xcZcpRQUyELai9byI0V0Fzrq9NIII/UK2Xp EJJU8lu677euz0Dw0ikR8kBnsRISiTRQiMpWWoiRX6uVbj6BQMKR7UprdaqdxUbX D5IS3xpyQQPaltCac91JYCUsM/H/Dv5QjMrU9SbzoB5FwriRzDCFA== 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 4bqyukjgra-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 22 Jan 2026 19:44:44 +0000 (GMT) Received: from pps.filterd (ppma12.dal12v.mail.ibm.com [127.0.0.1]) by ppma12.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 60MIkCXA024640; Thu, 22 Jan 2026 19:44:43 GMT Received: from smtprelay03.wdc07v.mail.ibm.com ([172.16.1.70]) by ppma12.dal12v.mail.ibm.com (PPS) with ESMTPS id 4brxas2t9e-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 22 Jan 2026 19:44:43 +0000 Received: from smtpav03.dal12v.mail.ibm.com (smtpav03.dal12v.mail.ibm.com [10.241.53.102]) by smtprelay03.wdc07v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 60MJiNm525231914 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 22 Jan 2026 19:44:23 GMT Received: from smtpav03.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 9EB1658056; Thu, 22 Jan 2026 19:44:41 +0000 (GMT) Received: from smtpav03.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id B437758060; Thu, 22 Jan 2026 19:44:40 +0000 (GMT) Received: from IBM-D32RQW3.ibm.com (unknown [9.61.248.216]) by smtpav03.dal12v.mail.ibm.com (Postfix) with ESMTP; Thu, 22 Jan 2026 19:44:40 +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, lukas@wunner.de, alex@shazbot.org, clg@redhat.com, stable@vger.kernel.org, alifm@linux.ibm.com, schnelle@linux.ibm.com, mjrosato@linux.ibm.com, julianr@linux.ibm.com Subject: [PATCH v8 2/9] s390/pci: Add architecture specific resource/bus address translation Date: Thu, 22 Jan 2026 11:44:30 -0800 Message-ID: <20260122194437.1903-3-alifm@linux.ibm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260122194437.1903-1-alifm@linux.ibm.com> References: <20260122194437.1903-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: AW1haW4tMjYwMTIyMDE0OCBTYWx0ZWRfX+//u5YZN6dlt eMwOc61cGf7ag5Wncjm708VwJnyoYm0bMxPjSD1KOonp883x2zopbQsXVpmsvo0IU3W7LaXxCqw 8ZOkeHbHl7xj00kZh1Fd730WJwhVSeBDuMn4+ZbJQVlqb31ZZwTYFtRnzE3/WBKcESLcfrJaOqo pLeWHP6RopHO9WWy117OkRjrCS+jf8NdyO9fBTXpmcOwDEZyFRzaI7YZmRZn3s7BOgK0cW3UnCa NL4PRfYeZlEtno2VewyW/esxLp+G8PhSRcwDSHC5kUptKAM3hIe3EQXBqFR5R8PiR+j2XlYy0+C cpx6K6VwNaaJ4VmqUdLolwATbi5b1zbkipA4AfKWETwLyDs5VmBeY9LK0me7fUC0XO05pIMmFqa nXYiY2UYTcq0PLiW7Nw9oTdpGtgYNWCmBRVHHD2+WN0mrUPcntbbGaHdsn10nl4j5hZmGfO4iX4 pcRQG3vY10aM8WdZbaQ== X-Authority-Analysis: v=2.4 cv=bsBBxUai c=1 sm=1 tr=0 ts=69727e2c cx=c_pps a=bLidbwmWQ0KltjZqbj+ezA==:117 a=bLidbwmWQ0KltjZqbj+ezA==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=VnNF1IyMAAAA:8 a=WI2LcE4NPZyv2LzpnzYA:9 X-Proofpoint-ORIG-GUID: RYunstVLvxQQISuc7w9rxjfStLq4SJCZ X-Proofpoint-GUID: RYunstVLvxQQISuc7w9rxjfStLq4SJCZ X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.20,FMLib:17.12.100.49 definitions=2026-01-22_04,2026-01-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 suspectscore=0 phishscore=0 lowpriorityscore=0 bulkscore=0 impostorscore=0 malwarescore=0 clxscore=1015 adultscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2601150000 definitions=main-2601220148 Content-Type: text/plain; charset="utf-8" On s390 today we overwrite the PCI BAR resource address to either an artificial cookie address or MIO address. However this address is different from the bus address of the BARs programmed by firmware. The artificial cookie address was created to index into an array of function handles (zpci_iomap_start). The MIO (mapped I/O) addresses are provided by firmware but maybe different from the bus addresses. This creates an issue when trying to convert the BAR resource address to bus address using the generic pcibios_resource_to_bus(). Implement an architecture specific pcibios_resource_to_bus() function to correctly translate PCI BAR resource addresses to bus addresses for s390. Similarly add architecture specific pcibios_bus_to_resource function to do the reverse translation. Reviewed-by: Niklas Schnelle Signed-off-by: Farhan Ali --- arch/s390/pci/pci.c | 74 +++++++++++++++++++++++++++++++++++++++ drivers/pci/host-bridge.c | 8 ++--- 2 files changed, 78 insertions(+), 4 deletions(-) diff --git a/arch/s390/pci/pci.c b/arch/s390/pci/pci.c index 57f3980b98a9..81e7e6b689d1 100644 --- a/arch/s390/pci/pci.c +++ b/arch/s390/pci/pci.c @@ -263,6 +263,80 @@ resource_size_t pcibios_align_resource(void *data, con= st struct resource *res, return 0; } =20 +void pcibios_resource_to_bus(struct pci_bus *bus, struct pci_bus_region *r= egion, + struct resource *res) +{ + struct zpci_bus *zbus =3D bus->sysdata; + struct zpci_bar_struct *zbar; + struct zpci_dev *zdev; + + region->start =3D res->start; + region->end =3D res->end; + + for (int i =3D 0; i < ZPCI_FUNCTIONS_PER_BUS; i++) { + int j =3D 0; + + zbar =3D NULL; + zdev =3D zbus->function[i]; + if (!zdev) + continue; + + for (j =3D 0; j < PCI_STD_NUM_BARS; j++) { + if (zdev->bars[j].res->start =3D=3D res->start && + zdev->bars[j].res->end =3D=3D res->end && + res->flags & IORESOURCE_MEM) { + zbar =3D &zdev->bars[j]; + break; + } + } + + if (zbar) { + /* only MMIO is supported */ + region->start =3D zbar->val & PCI_BASE_ADDRESS_MEM_MASK; + if (zbar->val & PCI_BASE_ADDRESS_MEM_TYPE_64) + region->start |=3D (u64)zdev->bars[j + 1].val << 32; + + region->end =3D region->start + (1UL << zbar->size) - 1; + return; + } + } +} + +void pcibios_bus_to_resource(struct pci_bus *bus, struct resource *res, + struct pci_bus_region *region) +{ + struct zpci_bus *zbus =3D bus->sysdata; + struct zpci_dev *zdev; + resource_size_t start, end; + + res->start =3D region->start; + res->end =3D region->end; + + for (int i =3D 0; i < ZPCI_FUNCTIONS_PER_BUS; i++) { + zdev =3D zbus->function[i]; + if (!zdev || !zdev->has_resources) + continue; + + for (int j =3D 0; j < PCI_STD_NUM_BARS; j++) { + if (!zdev->bars[j].size) + continue; + + /* only MMIO is supported */ + start =3D zdev->bars[j].val & PCI_BASE_ADDRESS_MEM_MASK; + if (zdev->bars[j].val & PCI_BASE_ADDRESS_MEM_TYPE_64) + start |=3D (u64)zdev->bars[j + 1].val << 32; + + end =3D start + (1UL << zdev->bars[j].size) - 1; + + if (start =3D=3D region->start && end =3D=3D region->end) { + res->start =3D zdev->bars[j].res->start; + res->end =3D zdev->bars[j].res->end; + return; + } + } + } +} + void __iomem *ioremap_prot(phys_addr_t phys_addr, size_t size, pgprot_t prot) { diff --git a/drivers/pci/host-bridge.c b/drivers/pci/host-bridge.c index be5ef6516cff..aed031b8a9f3 100644 --- a/drivers/pci/host-bridge.c +++ b/drivers/pci/host-bridge.c @@ -49,8 +49,8 @@ void pci_set_host_bridge_release(struct pci_host_bridge *= bridge, } EXPORT_SYMBOL_GPL(pci_set_host_bridge_release); =20 -void pcibios_resource_to_bus(struct pci_bus *bus, struct pci_bus_region *r= egion, - struct resource *res) +void __weak pcibios_resource_to_bus(struct pci_bus *bus, struct pci_bus_re= gion *region, + struct resource *res) { struct pci_host_bridge *bridge =3D pci_find_host_bridge(bus); struct resource_entry *window; @@ -74,8 +74,8 @@ static bool region_contains(struct pci_bus_region *region= 1, return region1->start <=3D region2->start && region1->end >=3D region2->e= nd; } =20 -void pcibios_bus_to_resource(struct pci_bus *bus, struct resource *res, - struct pci_bus_region *region) +void __weak pcibios_bus_to_resource(struct pci_bus *bus, struct resource *= res, + struct pci_bus_region *region) { struct pci_host_bridge *bridge =3D pci_find_host_bridge(bus); struct resource_entry *window; --=20 2.43.0 From nobody Sat Feb 7 21:23:49 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 33F2B285CBA; Thu, 22 Jan 2026 19:45:10 +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=1769111126; cv=none; b=f8U9EpUzeaFqpwq03aAKkkNzld3Z8jrk0qrwknTBYa/h7uJf18Ui0svr0y34Nfiwp6e5K24SiG/R8w2/Vvqe5AntS46HRhn2k7zGVpNAqIiMU6HLjhK2oU0rpUNJ4uB23poA+/8v3PEVfydxsatf9uoz7nvBCZiy1qEYB+vtfsQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769111126; c=relaxed/simple; bh=qdYOuZETphoSrYosgQirPiv2ckz7+9ATv7pHMUlE6qs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=AiQ9D49mvqwTCSAphpkfF2HrzXIVaMHZK7HIGvBF+Ewd/1sS5O8mjKgIaDBvYyQFpisx2osoouAuB4Y3RRrd07kPJ6s+jloBeDB1nH03emR2IPA17ff8HlTJuiI7oYP+kSbjjdmJTOsEOdyKEKIaxj+XT5GeBILVSEug2iZFj/A= 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=QvqjRDpW; 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="QvqjRDpW" Received: from pps.filterd (m0356517.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 60MCmAhj019492; Thu, 22 Jan 2026 19:44:45 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=3oNI0gV4CEhTXWZ2T szmdDtvkLJZcLUHUBHDHL/alnU=; b=QvqjRDpWOLaRoU8lbDtRW9zP8BlZqkqTU 5Js/Kv8s/mTpsaBmzFNcu1tfxcswtR9Qqn+3FIAbW5tx1kfUg5m8lxyJDWBM/eZA Ge3FA2XVT3UL2DucATHJRaktHI2HoUNvaa3F+EYSy1USSIyp68Z/gckq+gSodmtM WMxlZ4c5iqwXYd8PSSuPpMw09NoB29y4ZOdJyLPV2ci6aW1LpvzH8umn6F5QBOeu Pod7SAzGaXeEbeevDIQQFEBNMX/RNgW/j6bo1Iox/vuZtjluTigoHDmxKsmr2e1p VqSgbcQJr4uwVaDexqp8wcUrYGg9Vu30mbr+9ZYwXIKneNd477hoQ== Received: from ppma21.wdc07v.mail.ibm.com (5b.69.3da9.ip4.static.sl-reverse.com [169.61.105.91]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4br256bt3q-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 22 Jan 2026 19:44:45 +0000 (GMT) Received: from pps.filterd (ppma21.wdc07v.mail.ibm.com [127.0.0.1]) by ppma21.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 60MIXcXs027233; Thu, 22 Jan 2026 19:44:44 GMT Received: from smtprelay04.wdc07v.mail.ibm.com ([172.16.1.71]) by ppma21.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4brnrncg29-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 22 Jan 2026 19:44:44 +0000 Received: from smtpav03.dal12v.mail.ibm.com (smtpav03.dal12v.mail.ibm.com [10.241.53.102]) by smtprelay04.wdc07v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 60MJigOl59507194 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 22 Jan 2026 19:44:43 GMT Received: from smtpav03.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id AD59858056; Thu, 22 Jan 2026 19:44:42 +0000 (GMT) Received: from smtpav03.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id BBD445805A; Thu, 22 Jan 2026 19:44:41 +0000 (GMT) Received: from IBM-D32RQW3.ibm.com (unknown [9.61.248.216]) by smtpav03.dal12v.mail.ibm.com (Postfix) with ESMTP; Thu, 22 Jan 2026 19:44:41 +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, lukas@wunner.de, alex@shazbot.org, clg@redhat.com, stable@vger.kernel.org, alifm@linux.ibm.com, schnelle@linux.ibm.com, mjrosato@linux.ibm.com, julianr@linux.ibm.com Subject: [PATCH v8 3/9] PCI: Avoid saving config space state if inaccessible Date: Thu, 22 Jan 2026 11:44:31 -0800 Message-ID: <20260122194437.1903-4-alifm@linux.ibm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260122194437.1903-1-alifm@linux.ibm.com> References: <20260122194437.1903-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: AW1haW4tMjYwMTIyMDE0OCBTYWx0ZWRfX0RzuDmWDJ8xm DED3A4HWPmIZoh7Igq0wa7LtYDZKJiSYyfIM1f9ZSw7L0rqPA6V4h7RyUvvNL8tt0AWe3ViphbX VH0T/8YyYNHyCXuhJr7HnY+pO8sgLkCJoIl1ESJkD8ka+OXvZNlY/5Jv1lhIvlRL5qVkOiArXB4 HhIjFClQLXJ6oJPhdeqxkXfwegURaMtTmBMTMvB5Czi+6COZkZuG9Q4/liIRT78+bSBD/+HZVm7 ASKW9tPt6B6NbnfCQuXRHJ3d9TdUArEDe/l/2gasqr/Rn4bX5Mn+tow6J9mq7ZVkh3qnLKzSxmy o/9DeIxcXHKiOLSrrCioKiNFZd4cOwCrwq3Dsyb4fFuzKTeYQc0oL9Vh6RseARgwSneZ7rJ+zw1 +RjOI/QfKYPepKY+BSTvGVOUY3HBX1ncJKznOqhpGYeuH9f45IpZl+2u+S+He2/MJ0Y1xAxf+c9 QJFpMkia7Tgf03SUIEA== X-Authority-Analysis: v=2.4 cv=BpSQAIX5 c=1 sm=1 tr=0 ts=69727e2d cx=c_pps a=GFwsV6G8L6GxiO2Y/PsHdQ==:117 a=GFwsV6G8L6GxiO2Y/PsHdQ==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=VnNF1IyMAAAA:8 a=zIJZGsahcqu1twqqOCkA:9 X-Proofpoint-GUID: ZlIJyRKnOE2_CFtfkWIgBVZL-tgArplO X-Proofpoint-ORIG-GUID: ZlIJyRKnOE2_CFtfkWIgBVZL-tgArplO X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.20,FMLib:17.12.100.49 definitions=2026-01-22_04,2026-01-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 bulkscore=0 clxscore=1015 adultscore=0 phishscore=0 malwarescore=0 impostorscore=0 suspectscore=0 priorityscore=1501 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2601150000 definitions=main-2601220148 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) or config space may be corrupted. This results in saving corrupted 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. Signed-off-by: Farhan Ali Reviewed-by: Niklas Schnelle --- drivers/pci/pci.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index c105e285cff8..e7beaf1f65a7 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -4960,6 +4960,7 @@ EXPORT_SYMBOL_GPL(pci_dev_unlock); =20 static void pci_dev_save_and_disable(struct pci_dev *dev) { + u32 val; const struct pci_error_handlers *err_handler =3D dev->driver ? dev->driver->err_handler : NULL; =20 @@ -4980,6 +4981,19 @@ static void pci_dev_save_and_disable(struct pci_dev = *dev) */ pci_set_power_state(dev, PCI_D0); =20 + /* + * 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. At the very least we should + * avoid restoring config space for device with error bits set in + * Status register. + */ + pci_read_config_dword(dev, PCI_COMMAND, &val); + if (PCI_POSSIBLE_ERROR(val)) { + pci_warn(dev, "Device config space inaccessible\n"); + return; + } + pci_save_state(dev); /* * Disable the device by clearing the Command register, except for --=20 2.43.0 From nobody Sat Feb 7 21:23:49 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 3404B36C0D3; Thu, 22 Jan 2026 19:45:10 +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=1769111124; cv=none; b=DltSrx4D/yyOhOIOTDkmjczpkO+TdTOQomcb1Pbmvyd/zDXAUB7mn1SyqbnoWAH88dXccSvn5ts6nQniTXSEJ8blyBGlHIjinFbIwThxN49pqFSnz1P5/Eg4X++tVtz+JNLILWcNNS3b4rau8OpqQvMJ+cm4wAegjCG4ra2RgJM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769111124; c=relaxed/simple; bh=GPFD3qc1VHTR0uhbsKNpqHY+0vJfMVltXW9tfMgERKM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=UmNLWUZf3+wHzkQbwhjedQL20DE6iMKrqmB9NdrIxIGcRmnhGpPqWhOeHW8CXG/aitGN6OIEQF0hn2IVy+Mmnh8urUSnU9Ui5hMpUpEVsYLR9CldoSv6DAXmkIpe7HzWdMKZiH9IPNdlR66IfzEzpWSmSRKIc7pnBctgwMzMPsc= 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=rpnNNsPy; 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="rpnNNsPy" Received: from pps.filterd (m0356517.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 60MDtnjg019532; Thu, 22 Jan 2026 19:44:47 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=u/S734DCJ5Mg543I8 3Qjcf7Q2ZoDQHYB42ma1HX+sbo=; b=rpnNNsPyy2R99SvyLoo0dPGCTa65IqyUD d9dKmEKVbFGJAJiI8/+nfRDk5VMHHxErISguAeAiEe6yeL9OcMJf/iNoMoQH3Kt6 fSdVHc8AqS0jW3/IeqYpj6Yyx7uC+IYcXoBKtliknBZSoxR1Rf7SeQqd76re2ZNR vEt+FlLjUFTanYCroSLj57mMWSEZ+oWiPuLjY/WhQWOXKcr+vBdS8rRW9XvNrRHq KfF+vz6BZEhfUbLVXi5pMsCMgPmqXpzNrOPQxIzBVUjPxLqTAu4KbcabHsE02HnL iBoAUamxhCGWQmOzMpKITluB+7bwH2YYIt/D6XCM7M6PElrDMvqJw== 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 4br256bt3s-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 22 Jan 2026 19:44:46 +0000 (GMT) Received: from pps.filterd (ppma12.dal12v.mail.ibm.com [127.0.0.1]) by ppma12.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 60MIQjaj024610; Thu, 22 Jan 2026 19:44:45 GMT Received: from smtprelay05.wdc07v.mail.ibm.com ([172.16.1.72]) by ppma12.dal12v.mail.ibm.com (PPS) with ESMTPS id 4brxas2t9g-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 22 Jan 2026 19:44:45 +0000 Received: from smtpav03.dal12v.mail.ibm.com (smtpav03.dal12v.mail.ibm.com [10.241.53.102]) by smtprelay05.wdc07v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 60MJihF33342952 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 22 Jan 2026 19:44:44 GMT Received: from smtpav03.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id C206358056; Thu, 22 Jan 2026 19:44:43 +0000 (GMT) Received: from smtpav03.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id CC2EE58060; Thu, 22 Jan 2026 19:44:42 +0000 (GMT) Received: from IBM-D32RQW3.ibm.com (unknown [9.61.248.216]) by smtpav03.dal12v.mail.ibm.com (Postfix) with ESMTP; Thu, 22 Jan 2026 19:44:42 +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, lukas@wunner.de, alex@shazbot.org, clg@redhat.com, stable@vger.kernel.org, alifm@linux.ibm.com, schnelle@linux.ibm.com, mjrosato@linux.ibm.com, julianr@linux.ibm.com, Benjamin Block Subject: [PATCH v8 4/9] PCI: Add additional checks for flr reset Date: Thu, 22 Jan 2026 11:44:32 -0800 Message-ID: <20260122194437.1903-5-alifm@linux.ibm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260122194437.1903-1-alifm@linux.ibm.com> References: <20260122194437.1903-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: AW1haW4tMjYwMTIyMDE0OCBTYWx0ZWRfX4DREh+7gHQnn aglrDDecY/kSf5HpaF0dNYuzrnQwt3AnfpjjgOBxK+R+O6oisRgx/hG8bCgsq2+4DQpuKgWvifO OCejzjRcjcydIwGzn9jvsr3Ajq7acuPIbkrGfGtO6Z952VIMi3cuCjMkIiwPsAau53KWL/1glNc 1qVPOUuOvzHdevtcrVcr2VH9nXkOkWuG4WeqLNVp8EbnlDDUSI0OYLUZ3wJc28cPoSS9tXTncIq d9sEuEBorQUmqNmVSfePSz1Kcehs1ZaA/DeP/louxRl8lIs1vknxGkd65SfExDSK3qFjvX4GOzf U4T2KS1jpG2M3GnTHbko1q2EuJSDU0lUtfCVO8VoEfxQNF4CkLLDOox4LHbmLQOUQUCA9vgwP98 rOKQU47obu5V1Zgfbm+4WKwdKUbV+eD8jfGJlpXwzE1L/eSUtsBr/Uy/eQq/y9vJ+2k0l3iBXWf gVjvecqMckv4M60zZjA== X-Authority-Analysis: v=2.4 cv=BpSQAIX5 c=1 sm=1 tr=0 ts=69727e2e cx=c_pps a=bLidbwmWQ0KltjZqbj+ezA==:117 a=bLidbwmWQ0KltjZqbj+ezA==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=VwQbUJbxAAAA:8 a=VnNF1IyMAAAA:8 a=_COy7Z8VS3VoYlkUqhYA:9 X-Proofpoint-GUID: nkCeWH2aLBt8wEgIKJLKEBUoBHeUIgLJ X-Proofpoint-ORIG-GUID: nkCeWH2aLBt8wEgIKJLKEBUoBHeUIgLJ X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.20,FMLib:17.12.100.49 definitions=2026-01-22_04,2026-01-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 bulkscore=0 clxscore=1015 adultscore=0 phishscore=0 malwarescore=0 impostorscore=0 suspectscore=0 priorityscore=1501 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2601150000 definitions=main-2601220148 Content-Type: text/plain; charset="utf-8" If a device is in an error state, then any reads of device registers can return error value. Add addtional checks to validate if a device is in an error state before doing an flr reset. Cc: stable@vger.kernel.org Reviewed-by: Benjamin Block Reviewed-by: Niklas Schnelle Signed-off-by: Farhan Ali --- drivers/pci/pci.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index e7beaf1f65a7..2d0a4c7714af 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -4358,12 +4358,19 @@ EXPORT_SYMBOL_GPL(pcie_flr); */ int pcie_reset_flr(struct pci_dev *dev, bool probe) { + u32 reg; + if (dev->dev_flags & PCI_DEV_FLAGS_NO_FLR_RESET) return -ENOTTY; =20 if (!(dev->devcap & PCI_EXP_DEVCAP_FLR)) return -ENOTTY; =20 + if (pcie_capability_read_dword(dev, PCI_EXP_DEVCAP, ®)) { + pci_warn(dev, "Device unable to do an FLR\n"); + return -ENOTTY; + } + if (probe) return 0; =20 --=20 2.43.0 From nobody Sat Feb 7 21:23:49 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 7EE5A3C07A; Thu, 22 Jan 2026 19:45:02 +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=1769111118; cv=none; b=rCrphFUeKwnWzuHYnMVcpLtQCPSzW8yqjqktHpCLTX33VMDbJf5IvxA1EVgbI7VhxoS+PaT6ZS84V8FQaW5LB0EfxYT0p/cFKMhMGQQ4KugSvbcWwZ6bICkll9G1uZG/gNR69VkaJgklNU/KlhBiDB6bPqIpKUi60mkG3E8f3Ec= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769111118; c=relaxed/simple; bh=YhMjb/UNnC49ZtdnrN3awZkC7cL4VLUUSXKJTq4yGLI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VDT/sdaxAmIn5AUZLmmAbRjgkSJNiykW3VMVZgp5e/Vmdhj35bw+VgesxMH2TIjfRfsF301l6QpQgS1VemI0l3bQIrcQsi98Ak5nfEtaGMF/bnsenuvezH2hzDUxXzo6DHGRrpP4GfWJ+m4teDyJUfrp5CrgGQJxJg0EmgVMh7E= 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=UYgv8aXs; 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="UYgv8aXs" Received: from pps.filterd (m0356516.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 60MEBphq009036; Thu, 22 Jan 2026 19:44:46 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=c43eaOrCUMS978Urc kknSWwXnr7+gE9biC3IcpIolDU=; b=UYgv8aXs3Ye0AHgU4s/i9vN0vJIcbXo0l rbnhXH8YoKOor9SqjeFJod5Fq7m7oBmbL95y/ZnquY2sLESaVOhAt8J9PzTOeSAR M28eD2NXWePC87VVIHGmBJg2zVgyVuO6LIL/1Y5younw+K4xZWky/TvpXptpIILh OOVY62S8MasXs0nt33v3k3FoDUbz6i67BmVimKPcgVmeQ+pIGoD5IhsariWTjeRa 7o0bYocOiI8RMMEh6F+thdWGNI7WNQcmdQFvKiD+MTn/jYgSQarhKqKfumORCRqW 3ASfs5VRVhhBCB/vQTW2ChtFsxPC9HAKbrEJbFQ+E2ePY1R8tR2+A== 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 4bqyukjgrb-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 22 Jan 2026 19:44:46 +0000 (GMT) Received: from pps.filterd (ppma22.wdc07v.mail.ibm.com [127.0.0.1]) by ppma22.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 60MIP42K016600; Thu, 22 Jan 2026 19:44:46 GMT Received: from smtprelay07.dal12v.mail.ibm.com ([172.16.1.9]) by ppma22.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4brn4ycn0j-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 22 Jan 2026 19:44:46 +0000 Received: from smtpav03.dal12v.mail.ibm.com (smtpav03.dal12v.mail.ibm.com [10.241.53.102]) by smtprelay07.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 60MJiiuC17629698 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 22 Jan 2026 19:44:44 GMT Received: from smtpav03.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id C15CE58056; Thu, 22 Jan 2026 19:44:44 +0000 (GMT) Received: from smtpav03.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id DF2F658060; Thu, 22 Jan 2026 19:44:43 +0000 (GMT) Received: from IBM-D32RQW3.ibm.com (unknown [9.61.248.216]) by smtpav03.dal12v.mail.ibm.com (Postfix) with ESMTP; Thu, 22 Jan 2026 19:44:43 +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, lukas@wunner.de, alex@shazbot.org, clg@redhat.com, stable@vger.kernel.org, alifm@linux.ibm.com, schnelle@linux.ibm.com, mjrosato@linux.ibm.com, julianr@linux.ibm.com Subject: [PATCH v8 5/9] s390/pci: Update the logic for detecting passthrough device Date: Thu, 22 Jan 2026 11:44:33 -0800 Message-ID: <20260122194437.1903-6-alifm@linux.ibm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260122194437.1903-1-alifm@linux.ibm.com> References: <20260122194437.1903-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: AW1haW4tMjYwMTIyMDE0OCBTYWx0ZWRfX1IHlPP9izYUW 8F/5JcFs5b1YXSXCrdD79KLi2ytPD77OC+Bqr88ovROoLX9h3HwQdmo9JwWCBWNF5fGDxK7ykyx t5E3jzsh7c8mQsQvZatQry8QD/IWikpLBzcvhLfTilb+FIbeQHQ6q0v4Bu4MUXEkuKeWGQaS32I lgvhqlEmDT+Pm2f5Bf5zNDoLaG2zI6MCw/tRbXmXNcR8wuMQrH03yy7xYRHcsVi6p93/zb/5Wqc tan2Joixe3qOWGoAmt1OQZl8b3hmD8nbIznp4H9CUDQJ9zq/nmoWp1iOV7PANKBBfJEy93dI2uN rrZphEKqrcdXZtA5b0eNDyUnZglmC1/nVBhekWXlskORWfwagVW/eRT+KK0G/w2HGaBQwHGN/NQ F/dCiU6PTy5GduXbCrsxaICPlR2tQ4+DpeCtqgrG6VbKGGI8Vp0c9F1VeE+xHYCK09ptBDrBmOT QgmfatZ/buLEMdvAvJw== X-Authority-Analysis: v=2.4 cv=bsBBxUai c=1 sm=1 tr=0 ts=69727e2e cx=c_pps a=5BHTudwdYE3Te8bg5FgnPg==:117 a=5BHTudwdYE3Te8bg5FgnPg==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=VnNF1IyMAAAA:8 a=MtaQWmmsotiDqj5H3ecA:9 X-Proofpoint-ORIG-GUID: FWTm4DnapFReLRSkk_rMf-a3bVVHNVNm X-Proofpoint-GUID: FWTm4DnapFReLRSkk_rMf-a3bVVHNVNm X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.20,FMLib:17.12.100.49 definitions=2026-01-22_04,2026-01-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 suspectscore=0 phishscore=0 lowpriorityscore=0 bulkscore=0 impostorscore=0 malwarescore=0 clxscore=1015 adultscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2601150000 definitions=main-2601220148 Content-Type: text/plain; charset="utf-8" We can now have userspace drivers (vfio-pci based) on s390x. The userspace drivers will not have any KVM fd and so no kzdev associated with them. So we need to update the logic for detecting passthrough devices to not depend on struct kvm_zdev. Reviewed-by: Niklas Schnelle Signed-off-by: Farhan Ali --- arch/s390/include/asm/pci.h | 1 + arch/s390/pci/pci_event.c | 14 ++++---------- drivers/vfio/pci/vfio_pci_zdev.c | 9 ++++++++- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/arch/s390/include/asm/pci.h b/arch/s390/include/asm/pci.h index c0ff19dab580..ec8a772bf526 100644 --- a/arch/s390/include/asm/pci.h +++ b/arch/s390/include/asm/pci.h @@ -171,6 +171,7 @@ struct zpci_dev { =20 char res_name[16]; bool mio_capable; + bool mediated_recovery; struct zpci_bar_struct bars[PCI_STD_NUM_BARS]; =20 u64 start_dma; /* Start of available DMA addresses */ diff --git a/arch/s390/pci/pci_event.c b/arch/s390/pci/pci_event.c index 839bd91c056e..de504925f709 100644 --- a/arch/s390/pci/pci_event.c +++ b/arch/s390/pci/pci_event.c @@ -60,16 +60,10 @@ static inline bool ers_result_indicates_abort(pci_ers_r= esult_t ers_res) } } =20 -static bool is_passed_through(struct pci_dev *pdev) +static bool needs_mediated_recovery(struct pci_dev *pdev) { struct zpci_dev *zdev =3D to_zpci(pdev); - bool ret; - - mutex_lock(&zdev->kzdev_lock); - ret =3D !!zdev->kzdev; - mutex_unlock(&zdev->kzdev_lock); - - return ret; + return zdev->mediated_recovery; } =20 static bool is_driver_supported(struct pci_driver *driver) @@ -194,7 +188,7 @@ static pci_ers_result_t zpci_event_attempt_error_recove= ry(struct pci_dev *pdev) } pdev->error_state =3D pci_channel_io_frozen; =20 - if (is_passed_through(pdev)) { + if (needs_mediated_recovery(pdev)) { pr_info("%s: Cannot be recovered in the host because it is a pass-throug= h device\n", pci_name(pdev)); status_str =3D "failed (pass-through)"; @@ -279,7 +273,7 @@ static void zpci_event_io_failure(struct pci_dev *pdev,= pci_channel_state_t es) * we will inject the error event and let the guest recover the device * itself. */ - if (is_passed_through(pdev)) + if (needs_mediated_recovery(pdev)) goto out; driver =3D to_pci_driver(pdev->dev.driver); if (driver && driver->err_handler && driver->err_handler->error_detected) diff --git a/drivers/vfio/pci/vfio_pci_zdev.c b/drivers/vfio/pci/vfio_pci_z= dev.c index 0990fdb146b7..a7bc23ce8483 100644 --- a/drivers/vfio/pci/vfio_pci_zdev.c +++ b/drivers/vfio/pci/vfio_pci_zdev.c @@ -148,6 +148,8 @@ int vfio_pci_zdev_open_device(struct vfio_pci_core_devi= ce *vdev) if (!zdev) return -ENODEV; =20 + zdev->mediated_recovery =3D true; + if (!vdev->vdev.kvm) return 0; =20 @@ -161,7 +163,12 @@ void vfio_pci_zdev_close_device(struct vfio_pci_core_d= evice *vdev) { struct zpci_dev *zdev =3D to_zpci(vdev->pdev); =20 - if (!zdev || !vdev->vdev.kvm) + if (!zdev) + return; + + zdev->mediated_recovery =3D false; + + if (!vdev->vdev.kvm) return; =20 if (zpci_kvm_hook.kvm_unregister) --=20 2.43.0 From nobody Sat Feb 7 21:23:49 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 0A0773803EC; Thu, 22 Jan 2026 19:45:06 +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=1769111113; cv=none; b=JIHGFDD5FGxXUJsAm1U8X1XJTKZf9S2Kvs3EKjuCZS2BtRyQN8uhF/w84/A+yutxNg/nrNkctJ68yUYyhNcZvRH53egvEzTEL59RsFpwkdgLOPCATBAfzi7/Y1gEx7fcMCbdhPDnwOnxfO9eJu1FeZSUOvzajet78PQPhle4/Ss= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769111113; c=relaxed/simple; bh=9UIw2iuyvjpO58D3t7uC6pT+I44iThrsuMkzhLS3Lw8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=g03uJE4LgOc9R3Th8z87+9NBhwxgoim7O13bUF9sO1qEExPHZvnwfB26G7vLZlOtwOpo61mVYgi8oKpSwcFdzUMWW/Ncj76N9BrY0pylrUsfeGDSWhWzvbLyBWi86HRzuNLu3HHvivsPrOC4vRkaGNr7WLYtKL6U86OWy5C4TXg= 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=K+XOjVFr; 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="K+XOjVFr" Received: from pps.filterd (m0360083.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 60MDb45u028624; Thu, 22 Jan 2026 19:44:49 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=B3h7xuHWKqpI0/AkD OMPMgjp0iE72TMUKWwuCLGJaMQ=; b=K+XOjVFrZI+7IOupc5vlY3T3bADE3EOUg rFFRhErYM0uq43zmT17mIAYoGZc4sOEtwvRXQbRhbEA04VhTUVRHuV/ykj9U6V3r rjf6JK7i7HVmR+8yh+Jtd8csLWV+WtTPQl4nSWD1riTL8PORHrxRUlV0eW7O3h/+ jwgdHdbonHTK63xH+WiC6h4hpZzKg4s6D7zVvJ4HAQAWZmWLBod4nJ4NvHuN+rJo 96CFwDtvYeYmaUdP3DdWFIa85mPlaKzQTnBufedEG0S7CF6Byc3B0BIAow3RH0QF PPmB8kpNf/p/XTlDLLhU0rFDjltr/TX70MMfHGSOyWFOOTdyEn5Ug== 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 4bt60eycxk-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 22 Jan 2026 19:44:48 +0000 (GMT) Received: from pps.filterd (ppma11.dal12v.mail.ibm.com [127.0.0.1]) by ppma11.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 60MHT54U006399; Thu, 22 Jan 2026 19:44:47 GMT Received: from smtprelay01.wdc07v.mail.ibm.com ([172.16.1.68]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 4brqf1v64p-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 22 Jan 2026 19:44:47 +0000 Received: from smtpav03.dal12v.mail.ibm.com (smtpav03.dal12v.mail.ibm.com [10.241.53.102]) by smtprelay01.wdc07v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 60MJijUd57540994 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 22 Jan 2026 19:44:46 GMT Received: from smtpav03.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id BFC4858064; Thu, 22 Jan 2026 19:44:45 +0000 (GMT) Received: from smtpav03.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id DF73558060; Thu, 22 Jan 2026 19:44:44 +0000 (GMT) Received: from IBM-D32RQW3.ibm.com (unknown [9.61.248.216]) by smtpav03.dal12v.mail.ibm.com (Postfix) with ESMTP; Thu, 22 Jan 2026 19:44:44 +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, lukas@wunner.de, alex@shazbot.org, clg@redhat.com, stable@vger.kernel.org, alifm@linux.ibm.com, schnelle@linux.ibm.com, mjrosato@linux.ibm.com, julianr@linux.ibm.com Subject: [PATCH v8 6/9] s390/pci: Store PCI error information for passthrough devices Date: Thu, 22 Jan 2026 11:44:34 -0800 Message-ID: <20260122194437.1903-7-alifm@linux.ibm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260122194437.1903-1-alifm@linux.ibm.com> References: <20260122194437.1903-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-Authority-Analysis: v=2.4 cv=WMdyn3sR c=1 sm=1 tr=0 ts=69727e31 cx=c_pps a=aDMHemPKRhS1OARIsFnwRA==:117 a=aDMHemPKRhS1OARIsFnwRA==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=VnNF1IyMAAAA:8 a=JwDFWkoFWNOLAMzFnh4A:9 X-Proofpoint-GUID: aKStqxVbf7Gv6lLFkBxaSzCJVAuy-0U2 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTIyMDE0OCBTYWx0ZWRfX2P6DWaQ+MfXU e1vJOwgHmkYIRnYwj/GfdTtwPkko6SmFhraQ+gSb0C7D5KtjbWuJss7grC7RiekkMfamrUl5zLT 9rAKQoWXnIbjAPhkhBzqqatucSRxpSynBj2uSajG1BkSXva4c5Nkstq06iJ99sC9yLYLdX6rmi7 yditBxhw1S++4LGtZzYKRCI6M+j9qMsNFkDmf65oxPrwW4dstTHEJySjvvGtHSH89SRoopAznq3 rwLiQHAzkXzAcNjwYkbXzeAVz6bQEQZ++gvLPk+7a95ztqJuODtFr21P8DFM5O7vMbJX7lkg87x nJaTMcOnT+GgaDfjfJHRriS7J6unrzLJuHawF0uW/WpJ8xaHdmhpYx14TBMmW5RX6sRnvk/S0iM ZJGnPnDxbA3s9eOw/1YtSjlExnsVSBMLa8P7UOv9U53TfvFvQwqHCsgiDxLHbrv928wk/TomGWK 3cbQ7lbs2brGBEVfHCQ== X-Proofpoint-ORIG-GUID: aKStqxVbf7Gv6lLFkBxaSzCJVAuy-0U2 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.20,FMLib:17.12.100.49 definitions=2026-01-22_04,2026-01-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 malwarescore=0 suspectscore=0 bulkscore=0 adultscore=0 impostorscore=0 spamscore=0 clxscore=1015 priorityscore=1501 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2601150000 definitions=main-2601220148 Content-Type: text/plain; charset="utf-8" For a passthrough device we need co-operation from user space to recover the device. This would require to bubble up any error information to user space. Let's store this error information for passthrough devices, so it can be retrieved later. Reviewed-by: Niklas Schnelle Signed-off-by: Farhan Ali --- arch/s390/include/asm/pci.h | 28 ++++++++++ arch/s390/pci/pci.c | 1 + arch/s390/pci/pci_event.c | 95 +++++++++++++++++++------------- drivers/vfio/pci/vfio_pci_zdev.c | 2 + 4 files changed, 88 insertions(+), 38 deletions(-) diff --git a/arch/s390/include/asm/pci.h b/arch/s390/include/asm/pci.h index ec8a772bf526..383f6483b656 100644 --- a/arch/s390/include/asm/pci.h +++ b/arch/s390/include/asm/pci.h @@ -118,6 +118,31 @@ struct zpci_bus { enum pci_bus_speed max_bus_speed; }; =20 +/* Content Code Description for PCI Function Error */ +struct zpci_ccdf_err { + u32 reserved1; + u32 fh; /* function handle */ + u32 fid; /* function id */ + u32 ett : 4; /* expected table type */ + u32 mvn : 12; /* MSI vector number */ + u32 dmaas : 8; /* DMA address space */ + u32 reserved2 : 6; + u32 q : 1; /* event qualifier */ + u32 rw : 1; /* read/write */ + u64 faddr; /* failing address */ + u32 reserved3; + u16 reserved4; + u16 pec; /* PCI event code */ +} __packed; + +#define ZPCI_ERR_PENDING_MAX 4 +struct zpci_ccdf_pending { + u8 count; + u8 head; + u8 tail; + struct zpci_ccdf_err err[ZPCI_ERR_PENDING_MAX]; +}; + /* Private data per function */ struct zpci_dev { struct zpci_bus *zbus; @@ -193,6 +218,8 @@ struct zpci_dev { struct iommu_domain *s390_domain; /* attached IOMMU domain */ struct kvm_zdev *kzdev; struct mutex kzdev_lock; + struct zpci_ccdf_pending pending_errs; + struct mutex pending_errs_lock; spinlock_t dom_lock; /* protect s390_domain change */ }; =20 @@ -331,6 +358,7 @@ void zpci_debug_exit_device(struct zpci_dev *); int zpci_report_error(struct pci_dev *, struct zpci_report_error_header *); int zpci_clear_error_state(struct zpci_dev *zdev); int zpci_reset_load_store_blocked(struct zpci_dev *zdev); +void zpci_cleanup_pending_errors(struct zpci_dev *zdev); =20 #ifdef CONFIG_NUMA =20 diff --git a/arch/s390/pci/pci.c b/arch/s390/pci/pci.c index 81e7e6b689d1..5f7412b6bb57 100644 --- a/arch/s390/pci/pci.c +++ b/arch/s390/pci/pci.c @@ -902,6 +902,7 @@ struct zpci_dev *zpci_create_device(u32 fid, u32 fh, en= um zpci_state state) mutex_init(&zdev->state_lock); mutex_init(&zdev->fmb_lock); mutex_init(&zdev->kzdev_lock); + mutex_init(&zdev->pending_errs_lock); =20 return zdev; =20 diff --git a/arch/s390/pci/pci_event.c b/arch/s390/pci/pci_event.c index de504925f709..9f4ccd79771a 100644 --- a/arch/s390/pci/pci_event.c +++ b/arch/s390/pci/pci_event.c @@ -17,23 +17,6 @@ #include "pci_bus.h" #include "pci_report.h" =20 -/* Content Code Description for PCI Function Error */ -struct zpci_ccdf_err { - u32 reserved1; - u32 fh; /* function handle */ - u32 fid; /* function id */ - u32 ett : 4; /* expected table type */ - u32 mvn : 12; /* MSI vector number */ - u32 dmaas : 8; /* DMA address space */ - u32 : 6; - u32 q : 1; /* event qualifier */ - u32 rw : 1; /* read/write */ - u64 faddr; /* failing address */ - u32 reserved3; - u16 reserved4; - u16 pec; /* PCI event code */ -} __packed; - /* Content Code Description for PCI Function Availability */ struct zpci_ccdf_avail { u32 reserved1; @@ -75,6 +58,42 @@ static bool is_driver_supported(struct pci_driver *drive= r) return true; } =20 +static void zpci_store_pci_error(struct pci_dev *pdev, + struct zpci_ccdf_err *ccdf) +{ + struct zpci_dev *zdev =3D to_zpci(pdev); + int i; + + mutex_lock(&zdev->pending_errs_lock); + if (zdev->pending_errs.count >=3D ZPCI_ERR_PENDING_MAX) { + pr_err("%s: Maximum number (%d) of pending error events queued", + pci_name(pdev), ZPCI_ERR_PENDING_MAX); + mutex_unlock(&zdev->pending_errs_lock); + return; + } + + i =3D zdev->pending_errs.tail % ZPCI_ERR_PENDING_MAX; + memcpy(&zdev->pending_errs.err[i], ccdf, sizeof(struct zpci_ccdf_err)); + zdev->pending_errs.tail++; + zdev->pending_errs.count++; + mutex_unlock(&zdev->pending_errs_lock); +} + +void zpci_cleanup_pending_errors(struct zpci_dev *zdev) +{ + struct pci_dev *pdev =3D NULL; + + mutex_lock(&zdev->pending_errs_lock); + pdev =3D pci_get_slot(zdev->zbus->bus, zdev->devfn); + if (zdev->pending_errs.count) + pr_info("%s: Unhandled PCI error events count=3D%d", + pci_name(pdev), zdev->pending_errs.count); + memset(&zdev->pending_errs, 0, sizeof(struct zpci_ccdf_pending)); + pci_dev_put(pdev); + mutex_unlock(&zdev->pending_errs_lock); +} +EXPORT_SYMBOL_GPL(zpci_cleanup_pending_errors); + static pci_ers_result_t zpci_event_notify_error_detected(struct pci_dev *p= dev, struct pci_driver *driver) { @@ -169,7 +188,8 @@ static pci_ers_result_t zpci_event_do_reset(struct pci_= dev *pdev, * and the platform determines which functions are affected for * multi-function devices. */ -static pci_ers_result_t zpci_event_attempt_error_recovery(struct pci_dev *= pdev) +static pci_ers_result_t zpci_event_attempt_error_recovery(struct pci_dev *= pdev, + struct zpci_ccdf_err *ccdf) { pci_ers_result_t ers_res =3D PCI_ERS_RESULT_DISCONNECT; struct zpci_dev *zdev =3D to_zpci(pdev); @@ -188,13 +208,6 @@ static pci_ers_result_t zpci_event_attempt_error_recov= ery(struct pci_dev *pdev) } pdev->error_state =3D pci_channel_io_frozen; =20 - if (needs_mediated_recovery(pdev)) { - pr_info("%s: Cannot be recovered in the host because it is a pass-throug= h device\n", - pci_name(pdev)); - status_str =3D "failed (pass-through)"; - goto out_unlock; - } - driver =3D to_pci_driver(pdev->dev.driver); if (!is_driver_supported(driver)) { if (!driver) { @@ -210,12 +223,23 @@ static pci_ers_result_t zpci_event_attempt_error_reco= very(struct pci_dev *pdev) goto out_unlock; } =20 + if (needs_mediated_recovery(pdev)) + zpci_store_pci_error(pdev, ccdf); + ers_res =3D zpci_event_notify_error_detected(pdev, driver); if (ers_result_indicates_abort(ers_res)) { status_str =3D "failed (abort on detection)"; goto out_unlock; } =20 + if (needs_mediated_recovery(pdev)) { + pr_info("%s: Leaving recovery of pass-through device to user-space\n", + pci_name(pdev)); + ers_res =3D PCI_ERS_RESULT_RECOVERED; + status_str =3D "in progress"; + goto out_unlock; + } + if (ers_res !=3D PCI_ERS_RESULT_NEED_RESET) { ers_res =3D zpci_event_do_error_state_clear(pdev, driver); if (ers_result_indicates_abort(ers_res)) { @@ -260,25 +284,20 @@ static pci_ers_result_t zpci_event_attempt_error_reco= very(struct pci_dev *pdev) * @pdev: PCI function for which to report * @es: PCI channel failure state to report */ -static void zpci_event_io_failure(struct pci_dev *pdev, pci_channel_state_= t es) +static void zpci_event_io_failure(struct pci_dev *pdev, pci_channel_state_= t es, + struct zpci_ccdf_err *ccdf) { struct pci_driver *driver; =20 pci_dev_lock(pdev); pdev->error_state =3D es; - /** - * While vfio-pci's error_detected callback notifies user-space QEMU - * reacts to this by freezing the guest. In an s390 environment PCI - * errors are rarely fatal so this is overkill. Instead in the future - * we will inject the error event and let the guest recover the device - * itself. - */ + if (needs_mediated_recovery(pdev)) - goto out; + zpci_store_pci_error(pdev, ccdf); driver =3D to_pci_driver(pdev->dev.driver); if (driver && driver->err_handler && driver->err_handler->error_detected) driver->err_handler->error_detected(pdev, pdev->error_state); -out: + pci_dev_unlock(pdev); } =20 @@ -324,12 +343,12 @@ static void __zpci_event_error(struct zpci_ccdf_err *= ccdf) break; case 0x0040: /* Service Action or Error Recovery Failed */ case 0x003b: - zpci_event_io_failure(pdev, pci_channel_io_perm_failure); + zpci_event_io_failure(pdev, pci_channel_io_perm_failure, ccdf); break; default: /* PCI function left in the error state attempt to recover */ - ers_res =3D zpci_event_attempt_error_recovery(pdev); + ers_res =3D zpci_event_attempt_error_recovery(pdev, ccdf); if (ers_res !=3D PCI_ERS_RESULT_RECOVERED) - zpci_event_io_failure(pdev, pci_channel_io_perm_failure); + zpci_event_io_failure(pdev, pci_channel_io_perm_failure, ccdf); break; } pci_dev_put(pdev); diff --git a/drivers/vfio/pci/vfio_pci_zdev.c b/drivers/vfio/pci/vfio_pci_z= dev.c index a7bc23ce8483..2be37eab9279 100644 --- a/drivers/vfio/pci/vfio_pci_zdev.c +++ b/drivers/vfio/pci/vfio_pci_zdev.c @@ -168,6 +168,8 @@ void vfio_pci_zdev_close_device(struct vfio_pci_core_de= vice *vdev) =20 zdev->mediated_recovery =3D false; =20 + zpci_cleanup_pending_errors(zdev); + if (!vdev->vdev.kvm) return; =20 --=20 2.43.0 From nobody Sat Feb 7 21:23:49 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 AB3C73816E6; Thu, 22 Jan 2026 19:45:08 +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=1769111123; cv=none; b=sH4nyh1itKLXK+sA+w3YArS6ufwjdt8hydMWaK48eY6iMM/n1g6N8lpXN1jWUqOaEcHpumIzCqABbN2Q575+6wtI7iZsb2jWj4yF+lf0cRoSCcU5GlF5gX0+O53u+qxiZMOefq50QGNf5M4CNKjh7uvlENbqoqOqGA6TLduZdvY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769111123; c=relaxed/simple; bh=835fFZrZ5WWiUhTdA3Vik6F+DFzFK8pgVD6cqlJhMDA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ZLoJEn3etOK6R2hzehKgGk3MAL5fSp/Og+k8sARGCGLXxwIX3LKiGZyCZFHU14M2M4gxGm1953jBuzARRfZSUP2JCtOpjHjZgvC24PN9+Ku7kdL1cQSTFTBQzbvBWeOJranec2DFRlZFfwP7AVwcvVY8iqLKkwPCHJVVa/QePbg= 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=CxIRxkn0; 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="CxIRxkn0" Received: from pps.filterd (m0356517.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 60MF00qQ019547; Thu, 22 Jan 2026 19:44:49 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=a/qqyoatum+Z/MheO nJ9ycVdJvlJKsHkewjz4AU1YFk=; b=CxIRxkn0Bk+kAhc+nSp/vLegs6bUPNs/W UesuF5VEME80AYZ9BKp7DRTeUZONZsf0P+AeYPhj4CjJr8HzHT2cUTmCcvsJg/gv QITR+yJyjVoUd+dD7c83O6GCk1uP5LFQZBwW1+Puh/tfKLWj1pNitPKz356OBiIO /O2Kb6CqqeC7jD8QaNWeD2vZAW1EqJasQH1RzcDsQQoRg4KAXMOlgtrY9OB2/ZfW RYuPiIVFHal1jQDfE+XzDfxR7yy7SGw+jsyB6JDbM8LCQzMdYPdqxmyF9NLIg3H0 WKHNISkeF9XUdNsB0SbbbXMxsgOduw0DTSEs74g3htrsFfmHPQFJQ== 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 4br256bt3v-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 22 Jan 2026 19:44:48 +0000 (GMT) Received: from pps.filterd (ppma11.dal12v.mail.ibm.com [127.0.0.1]) by ppma11.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 60MHT54T006399; Thu, 22 Jan 2026 19:44:47 GMT Received: from smtprelay02.dal12v.mail.ibm.com ([172.16.1.4]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 4brqf1v64q-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 22 Jan 2026 19:44:47 +0000 Received: from smtpav03.dal12v.mail.ibm.com (smtpav03.dal12v.mail.ibm.com [10.241.53.102]) by smtprelay02.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 60MJikuu66650438 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 22 Jan 2026 19:44:46 GMT Received: from smtpav03.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id BA83E58060; Thu, 22 Jan 2026 19:44:46 +0000 (GMT) Received: from smtpav03.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id DD10558056; Thu, 22 Jan 2026 19:44:45 +0000 (GMT) Received: from IBM-D32RQW3.ibm.com (unknown [9.61.248.216]) by smtpav03.dal12v.mail.ibm.com (Postfix) with ESMTP; Thu, 22 Jan 2026 19:44:45 +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, lukas@wunner.de, alex@shazbot.org, clg@redhat.com, stable@vger.kernel.org, alifm@linux.ibm.com, schnelle@linux.ibm.com, mjrosato@linux.ibm.com, julianr@linux.ibm.com Subject: [PATCH v8 7/9] vfio-pci/zdev: Add a device feature for error information Date: Thu, 22 Jan 2026 11:44:35 -0800 Message-ID: <20260122194437.1903-8-alifm@linux.ibm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260122194437.1903-1-alifm@linux.ibm.com> References: <20260122194437.1903-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: AW1haW4tMjYwMTIyMDE0OCBTYWx0ZWRfX2Z5ZFVcPMqWZ YMr4nxNbQqi119OyNIX3ITBz7Y8WBJKZnKge0OeHR0FEXYGcL0ZpJDUo03xkmETP7JDfcJUCdOJ RPDJzWbZrn/qKCAt6CBS1RKJNRzLDyX0ML7vAc3QXpuBemdmoQaRt+dghqD4RV8r0vE4xGfA6nG gqT41rXjFL/QU4wNsvTSTNX5nkY0Kf0TJ3s4CJqQVE+3rzas+Zp6rf///wJRoBYOdBy0A9r2twr RajiiVIU1Ru+RIrkHsSrBwGOdVZdSf+lGbxRUubKMTLgmqXWNWyk1KB35keXbSHTMfhC73OVZD9 +a8/D77kYwIha4CYefIxM4w2KAupLI6AsoZmfHVb5bSvyIXj/O7aGpKNL3YzvTHVgPqbeM0RL1I ITrQIRZ5WmSTAmINLY6bCRMzB81Mp1H8EDFB3VEPpMP52WCvc/YKf+7Dpt9WLFJhzAIKhPow637 Zhpdy6fj1qdWHA2ozxg== X-Authority-Analysis: v=2.4 cv=BpSQAIX5 c=1 sm=1 tr=0 ts=69727e30 cx=c_pps a=aDMHemPKRhS1OARIsFnwRA==:117 a=aDMHemPKRhS1OARIsFnwRA==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=VnNF1IyMAAAA:8 a=QIy8Zix3hhx26zbqT_4A:9 X-Proofpoint-GUID: bzYZNlojqRgN3CJi-tVKMu6cFDpR3TC2 X-Proofpoint-ORIG-GUID: bzYZNlojqRgN3CJi-tVKMu6cFDpR3TC2 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.20,FMLib:17.12.100.49 definitions=2026-01-22_04,2026-01-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 bulkscore=0 clxscore=1015 adultscore=0 phishscore=0 malwarescore=0 impostorscore=0 suspectscore=0 priorityscore=1501 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2601150000 definitions=main-2601220148 Content-Type: text/plain; charset="utf-8" For zPCI devices, we have platform specific error information. The platform firmware provides this error information to the operating system in an architecture specific mechanism. To enable recovery from userspace for these devices, we want to expose this error information to userspace. Add a new device feature to expose this information. Signed-off-by: Farhan Ali --- drivers/vfio/pci/vfio_pci_core.c | 2 ++ drivers/vfio/pci/vfio_pci_priv.h | 9 ++++++++ drivers/vfio/pci/vfio_pci_zdev.c | 35 ++++++++++++++++++++++++++++++++ include/uapi/linux/vfio.h | 16 +++++++++++++++ 4 files changed, 62 insertions(+) diff --git a/drivers/vfio/pci/vfio_pci_core.c b/drivers/vfio/pci/vfio_pci_c= ore.c index 3a11e6f450f7..f677705921e6 100644 --- a/drivers/vfio/pci/vfio_pci_core.c +++ b/drivers/vfio/pci/vfio_pci_core.c @@ -1526,6 +1526,8 @@ int vfio_pci_core_ioctl_feature(struct vfio_device *d= evice, u32 flags, return vfio_pci_core_feature_token(vdev, flags, arg, argsz); case VFIO_DEVICE_FEATURE_DMA_BUF: return vfio_pci_core_feature_dma_buf(vdev, flags, arg, argsz); + case VFIO_DEVICE_FEATURE_ZPCI_ERROR: + return vfio_pci_zdev_feature_err(device, flags, arg, argsz); default: return -ENOTTY; } diff --git a/drivers/vfio/pci/vfio_pci_priv.h b/drivers/vfio/pci/vfio_pci_p= riv.h index 27ac280f00b9..eed69926d8a1 100644 --- a/drivers/vfio/pci/vfio_pci_priv.h +++ b/drivers/vfio/pci/vfio_pci_priv.h @@ -89,6 +89,8 @@ int vfio_pci_info_zdev_add_caps(struct vfio_pci_core_devi= ce *vdev, struct vfio_info_cap *caps); int vfio_pci_zdev_open_device(struct vfio_pci_core_device *vdev); void vfio_pci_zdev_close_device(struct vfio_pci_core_device *vdev); +int vfio_pci_zdev_feature_err(struct vfio_device *device, u32 flags, + void __user *arg, size_t argsz); #else static inline int vfio_pci_info_zdev_add_caps(struct vfio_pci_core_device = *vdev, struct vfio_info_cap *caps) @@ -103,6 +105,13 @@ static inline int vfio_pci_zdev_open_device(struct vfi= o_pci_core_device *vdev) =20 static inline void vfio_pci_zdev_close_device(struct vfio_pci_core_device = *vdev) {} + +static inline int vfio_pci_zdev_feature_err(struct vfio_device *device, + u32 flags, void __user *arg, + size_t argsz) +{ + return -ENODEV; +} #endif =20 static inline bool vfio_pci_is_vga(struct pci_dev *pdev) diff --git a/drivers/vfio/pci/vfio_pci_zdev.c b/drivers/vfio/pci/vfio_pci_z= dev.c index 2be37eab9279..b9150782bafa 100644 --- a/drivers/vfio/pci/vfio_pci_zdev.c +++ b/drivers/vfio/pci/vfio_pci_zdev.c @@ -141,6 +141,41 @@ int vfio_pci_info_zdev_add_caps(struct vfio_pci_core_d= evice *vdev, return ret; } =20 +int vfio_pci_zdev_feature_err(struct vfio_device *device, u32 flags, + void __user *arg, size_t argsz) +{ + struct vfio_device_feature_zpci_err err; + struct vfio_pci_core_device *vdev; + struct zpci_dev *zdev; + int head =3D 0; + int ret; + + vdev =3D container_of(device, struct vfio_pci_core_device, vdev); + zdev =3D to_zpci(vdev->pdev); + if (!zdev) + return -ENODEV; + + ret =3D vfio_check_feature(flags, argsz, VFIO_DEVICE_FEATURE_GET, + sizeof(err)); + if (ret !=3D 1) + return ret; + + mutex_lock(&zdev->pending_errs_lock); + if (zdev->pending_errs.count) { + head =3D zdev->pending_errs.head % ZPCI_ERR_PENDING_MAX; + err.pec =3D zdev->pending_errs.err[head].pec; + zdev->pending_errs.head++; + zdev->pending_errs.count--; + err.pending_errors =3D zdev->pending_errs.count; + } + mutex_unlock(&zdev->pending_errs_lock); + + if (copy_to_user(arg, &err, sizeof(err))) + return -EFAULT; + + return 0; +} + int vfio_pci_zdev_open_device(struct vfio_pci_core_device *vdev) { struct zpci_dev *zdev =3D to_zpci(vdev->pdev); diff --git a/include/uapi/linux/vfio.h b/include/uapi/linux/vfio.h index ac2329f24141..89b44762ef02 100644 --- a/include/uapi/linux/vfio.h +++ b/include/uapi/linux/vfio.h @@ -1506,6 +1506,22 @@ struct vfio_device_feature_dma_buf { struct vfio_region_dma_range dma_ranges[] __counted_by(nr_ranges); }; =20 +/** + * VFIO_DEVICE_FEATURE_ZPCI_ERROR feature provides PCI error information to + * userspace for vfio-pci devices on s390x. On s390x PCI error recovery in= volves + * platform firmware and notification to operating system is done by + * architecture specific mechanism. Exposing this information to userspace + * allows userspace to take appropriate actions to handle an error on the + * device. + */ + +struct vfio_device_feature_zpci_err { + __u16 pec; + __u8 pending_errors; + __u8 pad; +}; +#define VFIO_DEVICE_FEATURE_ZPCI_ERROR 12 + /* -------- API for Type1 VFIO IOMMU -------- */ =20 /** --=20 2.43.0 From nobody Sat Feb 7 21:23:49 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 84AB7387597; Thu, 22 Jan 2026 19:45:05 +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=1769111122; cv=none; b=ILAANqaGLRD3Qjf/PfdUyI2sgXJuSJ0/faui5Pc+1KXN1ASY0UihCax567c0qjY5U1D6cQaz0kZpbk3VrTw0Mo7dKee8X+o1iSzyQtc2DlS+JTM0ZdBMm0Lh8q3Fv0IwpdvsXU7VtuMaQ41l64BTM6DE8mNxRJMamxzxv4MBDwY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769111122; c=relaxed/simple; bh=GDZAjiH5XdtX4onMuH1IiC67RRALM5b5a+nsV2ECRgU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=gKTB8jA1JdCHrTvak9Tl/e2lKDRQpYDhdc9fqPtmZsHGrjCP+VUNLGA1l8Ad/52Tpcu2E87fJIBB5XPwGkHYyDiTN+P9b3GVm78wOrsVN3IyBfRWz/lT8bORWcppktel0Fn3nF9IFBqSxrlM6SQkUqjIwrXFBRAPvLZRrkndD2c= 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=KsxYmKL4; 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="KsxYmKL4" Received: from pps.filterd (m0353725.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 60MII1Zk007604; Thu, 22 Jan 2026 19:44:49 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=3TyrxEiRSJ0hxwj9f M9XUyOEsX3cDVm7CHqiQQUO200=; b=KsxYmKL4rv/2E6IoQMZASTHSNHd41OD4w 4zk7KOvK8mUsLyeUVfcHIJe9vigmuLFyeJ69HbueoAcm4e4CZIJgTJOQEYVBdnnq aXPMVLBUuWz1sp+4IjdaBBSCWxbrb7UhYkos9Cz9ZzgoV5nlFTIFk8bYjWigqRXb cwGHgL9qlc+xNnEyfaEiKhgTi45rpnZpaJ7qbQzDduyTP0Bg5heSSbrofYbknjTV Hh0f77WViN7o59TPOuLOEg/X9/0CDNPPLJVFpBGj0U8I0EckP5uQL8PK4JKGvsPg v+r70g+kLCAB5Y5++yu1SFKzUE4hjd0hqCRIpjynr8HNoFFgH+j3w== 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 4bus1prby7-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 22 Jan 2026 19:44:49 +0000 (GMT) Received: from pps.filterd (ppma23.wdc07v.mail.ibm.com [127.0.0.1]) by ppma23.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 60MIwopP009377; Thu, 22 Jan 2026 19:44:49 GMT Received: from smtprelay03.dal12v.mail.ibm.com ([172.16.1.5]) by ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4brp8kme8h-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 22 Jan 2026 19:44:49 +0000 Received: from smtpav03.dal12v.mail.ibm.com (smtpav03.dal12v.mail.ibm.com [10.241.53.102]) by smtprelay03.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 60MJilc827394646 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 22 Jan 2026 19:44:47 GMT Received: from smtpav03.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id B7FDC58060; Thu, 22 Jan 2026 19:44:47 +0000 (GMT) Received: from smtpav03.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id DBEF858056; Thu, 22 Jan 2026 19:44:46 +0000 (GMT) Received: from IBM-D32RQW3.ibm.com (unknown [9.61.248.216]) by smtpav03.dal12v.mail.ibm.com (Postfix) with ESMTP; Thu, 22 Jan 2026 19:44:46 +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, lukas@wunner.de, alex@shazbot.org, clg@redhat.com, stable@vger.kernel.org, alifm@linux.ibm.com, schnelle@linux.ibm.com, mjrosato@linux.ibm.com, julianr@linux.ibm.com Subject: [PATCH v8 8/9] vfio: Add a reset_done callback for vfio-pci driver Date: Thu, 22 Jan 2026 11:44:36 -0800 Message-ID: <20260122194437.1903-9-alifm@linux.ibm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260122194437.1903-1-alifm@linux.ibm.com> References: <20260122194437.1903-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-ORIG-GUID: Umi-9944ogRBAjgU2DQbrQ8t3WFnXHR1 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTIyMDE0OCBTYWx0ZWRfX1KukSXJYJMRc vbUJhPJfnNHvsXIulc/BLu9XFkXQV3IAzeMMB5Cvgzbz9rSdnjznjR/Fm9eUPx7lm9clQwYvYAk YUl5OHiX0QHpoJwrFYYHfxjJkHUSs2QzOhK4gbwKzkdRB+WB4YyQ9D0pKLFA/YbZppPGxdMJ9Kd XqFwkFNlhlBtlUvdOtVvmVBs4b2PFmed6WBfmnOttjrijLkPV+JvX8lGcDhrzY5+yuNEk1etx0x WK2DfykZGzKoBmCG+ccKlv9mj1jP9n1axeSKy4ge9E626b7n9FXntscjVQbdF+NXjOXfBNAzRxo O6fit+gLpZaklQTiD4u4RuJcB6ecUltxtV7hlifJ+mcrWlGcH/b8yv8VuGnZKPQi7lBXQGJsGAs AEntxPMQHJSshTGCqKetWfhWGuex6pvPGDOJzgjYklnCNV4gxDHMLpKEA5k8LJma7P5s4cT+mL9 fM5L7MsQ9EZD4sIgVyg== X-Proofpoint-GUID: Umi-9944ogRBAjgU2DQbrQ8t3WFnXHR1 X-Authority-Analysis: v=2.4 cv=GY8aXAXL c=1 sm=1 tr=0 ts=69727e31 cx=c_pps a=3Bg1Hr4SwmMryq2xdFQyZA==:117 a=3Bg1Hr4SwmMryq2xdFQyZA==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=VnNF1IyMAAAA:8 a=hcTHx3Z5Akp3fEzgVBYA:9 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.20,FMLib:17.12.100.49 definitions=2026-01-22_04,2026-01-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 impostorscore=0 phishscore=0 lowpriorityscore=0 spamscore=0 malwarescore=0 priorityscore=1501 bulkscore=0 adultscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2601150000 definitions=main-2601220148 Content-Type: text/plain; charset="utf-8" On error recovery for a PCI device bound to vfio-pci driver, we want to recover the state of the device to its last known saved state. The callback restores the state of the device to its initial saved state. Reviewed-by: Julian Ruess Signed-off-by: Farhan Ali Reviewed-by: Niklas Schnelle --- drivers/vfio/pci/vfio_pci_core.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/drivers/vfio/pci/vfio_pci_core.c b/drivers/vfio/pci/vfio_pci_c= ore.c index f677705921e6..c92c6c512b24 100644 --- a/drivers/vfio/pci/vfio_pci_core.c +++ b/drivers/vfio/pci/vfio_pci_core.c @@ -2249,6 +2249,17 @@ pci_ers_result_t vfio_pci_core_aer_err_detected(stru= ct pci_dev *pdev, } EXPORT_SYMBOL_GPL(vfio_pci_core_aer_err_detected); =20 +static void vfio_pci_core_aer_reset_done(struct pci_dev *pdev) +{ + struct vfio_pci_core_device *vdev =3D dev_get_drvdata(&pdev->dev); + + if (!vdev->pci_saved_state) + return; + + pci_load_saved_state(pdev, vdev->pci_saved_state); + pci_restore_state(pdev); +} + int vfio_pci_core_sriov_configure(struct vfio_pci_core_device *vdev, int nr_virtfn) { @@ -2313,6 +2324,7 @@ EXPORT_SYMBOL_GPL(vfio_pci_core_sriov_configure); =20 const struct pci_error_handlers vfio_pci_core_err_handlers =3D { .error_detected =3D vfio_pci_core_aer_err_detected, + .reset_done =3D vfio_pci_core_aer_reset_done, }; EXPORT_SYMBOL_GPL(vfio_pci_core_err_handlers); =20 --=20 2.43.0 From nobody Sat Feb 7 21:23:49 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 BC3223994D7; Thu, 22 Jan 2026 19:45:08 +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=1769111126; cv=none; b=isR5eNjUDdX+7rneJtmemk4GRerY8MGBowuZ1ifZ+WavO14/KzYubBJsyZT15PUB+zClx73VlPpicdrTMOIrIdtPqWPh4ybsCYIFKGAxfU6UR0tk8O5ZLfyoBZTLUZqQ8z9B13wnMlRaYh6HsOYWe1IgLCCRIfBkG1mFf/wBl1Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769111126; c=relaxed/simple; bh=nSmySBySN2Hw/5EveVaUYdlLwQnt1kcp5+gNd5r/IIc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=uBib1ItB7QJUwOIjMPcJT/oZr9JRUfBKrxtEXxe7K7RXpICN5zIlqEKm6RkQy/2NgbYVIjoLQR5QVS80HOdeSm2NQQJvDtHHP0vitDUMp7vsBD20gy36B73aFF8zICnXeIG8pqWhwjpR1BqNa7n49jekbPEViyIsDBNZbuVIvMM= 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=a0Jajtzd; 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="a0Jajtzd" Received: from pps.filterd (m0360083.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 60MCo21S028543; Thu, 22 Jan 2026 19:44:51 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=JFB8K2p7vYMAhirId hFMBgDuwuin6nX5Bg2vjH4kOmg=; b=a0JajtzdXrcvf/YGhE/lHZ/zSd/qDRmLF HQGArGEVwYbFIGMR8ZgyIIXlQ+K6jDVqpzFSjcUTK7IOhcIvf1p/1VJT6m6m4vfo q3ek8dOJH3drgP/HSAHy6/Ag+y9BZ74XpkN6EdjmpL/aNtnCMZKtj+a3isvAaH7C jNo0AQ34EEJYamzSBdE+YqYBBxJGzYE7IQWWnMZ8euyPJXIA5gcONKaC5mNm9tC9 c1IOpdJHCS7oUoIDjZC1rtMqi312a+S1six167t1t/qyeOTy2xl5sFirX39f7hVu YHq5KJ84fR/Foh6K1rGUWPNBS85qgZbolkBpqC2F3kBDhTClIQQ+Q== Received: from ppma13.dal12v.mail.ibm.com (dd.9e.1632.ip4.static.sl-reverse.com [50.22.158.221]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4bt60eycxn-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 22 Jan 2026 19:44:50 +0000 (GMT) Received: from pps.filterd (ppma13.dal12v.mail.ibm.com [127.0.0.1]) by ppma13.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 60MJ5X9T001441; Thu, 22 Jan 2026 19:44:49 GMT Received: from smtprelay04.dal12v.mail.ibm.com ([172.16.1.6]) by ppma13.dal12v.mail.ibm.com (PPS) with ESMTPS id 4brpyk49xh-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 22 Jan 2026 19:44:49 +0000 Received: from smtpav03.dal12v.mail.ibm.com (smtpav03.dal12v.mail.ibm.com [10.241.53.102]) by smtprelay04.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 60MJimHc19923678 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 22 Jan 2026 19:44:48 GMT Received: from smtpav03.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id B5A0B58060; Thu, 22 Jan 2026 19:44:48 +0000 (GMT) Received: from smtpav03.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id D672558056; Thu, 22 Jan 2026 19:44:47 +0000 (GMT) Received: from IBM-D32RQW3.ibm.com (unknown [9.61.248.216]) by smtpav03.dal12v.mail.ibm.com (Postfix) with ESMTP; Thu, 22 Jan 2026 19:44:47 +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, lukas@wunner.de, alex@shazbot.org, clg@redhat.com, stable@vger.kernel.org, alifm@linux.ibm.com, schnelle@linux.ibm.com, mjrosato@linux.ibm.com, julianr@linux.ibm.com Subject: [PATCH v8 9/9] vfio: Remove the pcie check for VFIO_PCI_ERR_IRQ_INDEX Date: Thu, 22 Jan 2026 11:44:37 -0800 Message-ID: <20260122194437.1903-10-alifm@linux.ibm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260122194437.1903-1-alifm@linux.ibm.com> References: <20260122194437.1903-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-Authority-Analysis: v=2.4 cv=WMdyn3sR c=1 sm=1 tr=0 ts=69727e32 cx=c_pps a=AfN7/Ok6k8XGzOShvHwTGQ==:117 a=AfN7/Ok6k8XGzOShvHwTGQ==:17 a=vUbySO9Y5rIA:10 a=VkNPw1HP01LnGYTKEx00:22 a=VnNF1IyMAAAA:8 a=9wliL4UQvNVLrYCoNVcA:9 X-Proofpoint-GUID: uB2SGKpzz1QKxIOpcEkg3bPA05Gqv7oQ X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTIyMDE0OCBTYWx0ZWRfX/qbkvG3RNTxI 0Z4nHy5CmRVB9boqXQac/5hPESgGwOm0S1+kD1FRS4rfdCXfz4zYJxQLBLAu3pNc2gDMXYQF6R2 F1GX6Y1G1GYJksoaNprFMpC21K8aGh7ovDt57m5gD8tiaAad2GVyEBJDERkBhJQEbraLD2W/ly7 KCh7KdtkOouDEtky3cSfC0M0sD4A9JQgCRkQkbKXuTpL4Dw5be+1L+NqLQazagaM9yQlZtlE9z+ bAxnKzf2fK6jnMVWi6syuVzsMmIkZUez2gQUTLnEDENyVsa6/GCKRIEtTpT6sDY3dewZPoVPInl Gt8Qf60IeDIzhA3sux7V85qNtLgPc/Eu1OxDHuVkxGBhEor3wrJ9aBoapRFSIJsYwFjbdjIMMlg mQi8EHB7EMpYo6MMn9J2jw8WEVhKq5bPGr57HtYFGfp0z999O6WXSoznq/lSwwCZ6ClRy+ip46M 6emdZJuoeJjhVwotQVQ== X-Proofpoint-ORIG-GUID: uB2SGKpzz1QKxIOpcEkg3bPA05Gqv7oQ X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.20,FMLib:17.12.100.49 definitions=2026-01-22_04,2026-01-22_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 malwarescore=0 suspectscore=0 bulkscore=0 adultscore=0 impostorscore=0 spamscore=0 clxscore=1015 priorityscore=1501 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2601150000 definitions=main-2601220148 Content-Type: text/plain; charset="utf-8" We are configuring the error signaling on the vast majority of devices and it's extremely rare that it fires anyway. This allows userspace to be notified on errors for legacy PCI devices. The Internal Shared Memory (ISM) device on s390x is one such device. For PCI devices on IBM s390x error recovery involves platform firmware and notification to operating system is done by architecture specific way. So the ISM device can still be recovered when notified of an error. Signed-off-by: Farhan Ali Reviewed-by: Julian Ruess Reviewed-by: Niklas Schnelle --- drivers/vfio/pci/vfio_pci_core.c | 8 ++------ drivers/vfio/pci/vfio_pci_intrs.c | 3 +-- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/drivers/vfio/pci/vfio_pci_core.c b/drivers/vfio/pci/vfio_pci_c= ore.c index c92c6c512b24..9d44df9e21db 100644 --- a/drivers/vfio/pci/vfio_pci_core.c +++ b/drivers/vfio/pci/vfio_pci_core.c @@ -778,8 +778,7 @@ static int vfio_pci_get_irq_count(struct vfio_pci_core_= device *vdev, int irq_typ return (flags & PCI_MSIX_FLAGS_QSIZE) + 1; } } else if (irq_type =3D=3D VFIO_PCI_ERR_IRQ_INDEX) { - if (pci_is_pcie(vdev->pdev)) - return 1; + return 1; } else if (irq_type =3D=3D VFIO_PCI_REQ_IRQ_INDEX) { return 1; } @@ -1155,11 +1154,8 @@ static int vfio_pci_ioctl_get_irq_info(struct vfio_p= ci_core_device *vdev, switch (info.index) { case VFIO_PCI_INTX_IRQ_INDEX ... VFIO_PCI_MSIX_IRQ_INDEX: case VFIO_PCI_REQ_IRQ_INDEX: - break; case VFIO_PCI_ERR_IRQ_INDEX: - if (pci_is_pcie(vdev->pdev)) - break; - fallthrough; + break; default: return -EINVAL; } diff --git a/drivers/vfio/pci/vfio_pci_intrs.c b/drivers/vfio/pci/vfio_pci_= intrs.c index c76e753b3cec..b6cedaf0bcca 100644 --- a/drivers/vfio/pci/vfio_pci_intrs.c +++ b/drivers/vfio/pci/vfio_pci_intrs.c @@ -859,8 +859,7 @@ int vfio_pci_set_irqs_ioctl(struct vfio_pci_core_device= *vdev, uint32_t flags, case VFIO_PCI_ERR_IRQ_INDEX: switch (flags & VFIO_IRQ_SET_ACTION_TYPE_MASK) { case VFIO_IRQ_SET_ACTION_TRIGGER: - if (pci_is_pcie(vdev->pdev)) - func =3D vfio_pci_set_err_trigger; + func =3D vfio_pci_set_err_trigger; break; } break; --=20 2.43.0