From nobody Tue Apr 7 02:34:20 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 62D883ED103; Mon, 16 Mar 2026 19:15:59 +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=1773688560; cv=none; b=unYPZnH7D5OfpjvefwANpye1UPLQFijVixaOUC+opyKE4oT9gWc5j7/CoFtE80pU9V1KZEkTJB0gFxPpwcIrKG7MhT45RWSr7pzujJi16FDso8xXVhpFVuER0Dt/k0hvGA6n1DjvVaXaqfQbnSljk26cmYgABuK2KLg0cNuaejk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773688560; c=relaxed/simple; bh=WbS9ppjv+BWD5+OBgelpWAZisi3St0uwIJHgGu/41Wg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=cYiQrLU6maWKAoWDKYDjiY75Pg5HFVmYrBVUXOOwrqNyCqNq8DQavXHhT3ZpCmHtCMh1ceVbFnyM3ej6BMgMcTWJWUAK7997rs1XOYb0PFPzY+KpxsCdAiH/hFwtiX/pJfKR541xiUoXc5CYjZyo77sez94d6XMKGJu0gE+FQSk= 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=HxabpsIb; 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="HxabpsIb" Received: from pps.filterd (m0360072.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62GEoeNl829867; Mon, 16 Mar 2026 19:15:53 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=4SsCqPZIE1eZZDBJi q/Cg2OwRL2zymGQXlyBRYwxd6M=; b=HxabpsIbdPfUMyZrRaRmOLgtVkh7f+fPQ CZcksvNXrUPj9bvja8DwQruPvlWZ9ZJ+PVNV+6KX8Gsu/NY6P6XKuwmXs9aLtX/5 E4/Un03FmHqYGWvjt012g5zFxL+3zeB8Rmjt/vd7Rfjr3qh1SHFa8wl6tD0YPaRX Cy51i1FlsFBeF3yMishHcOpDwd1TmgaAtnu8OGpyTdxOx+tXIphY7nG1xqBv9z/p KYrfSQ5s5/trSCp139BGYZVOvs6L23/Cm54MEG/9CnROn/cvQOkrCqjXu8l6jhnJ FLDxGlOAg0MRm2OjvhCTF4Nadmn2Z+X5Xdd4Efkl/QX4gKHzDwRCA== 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 4cvyau8yh4-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 16 Mar 2026 19:15:53 +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 62GF0OiK028708; Mon, 16 Mar 2026 19:15:52 GMT Received: from smtprelay06.wdc07v.mail.ibm.com ([172.16.1.73]) by ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4cwkgk602u-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 16 Mar 2026 19:15:52 +0000 Received: from smtpav01.wdc07v.mail.ibm.com (smtpav01.wdc07v.mail.ibm.com [10.39.53.228]) by smtprelay06.wdc07v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 62GJFpY232506418 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 16 Mar 2026 19:15:51 GMT Received: from smtpav01.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 0161B58055; Mon, 16 Mar 2026 19:15:51 +0000 (GMT) Received: from smtpav01.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id A55EE5804B; Mon, 16 Mar 2026 19:15:49 +0000 (GMT) Received: from IBM-D32RQW3.ibm.com (unknown [9.61.241.131]) by smtpav01.wdc07v.mail.ibm.com (Postfix) with ESMTP; Mon, 16 Mar 2026 19:15:49 +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, kbusch@kernel.org, clg@redhat.com, stable@vger.kernel.org, alifm@linux.ibm.com, schnelle@linux.ibm.com, mjrosato@linux.ibm.com Subject: [PATCH v11 1/9] PCI: Allow per function PCI slots Date: Mon, 16 Mar 2026 12:15:36 -0700 Message-ID: <20260316191544.2279-2-alifm@linux.ibm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260316191544.2279-1-alifm@linux.ibm.com> References: <20260316191544.2279-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: AW1haW4tMjYwMzE2MDE1MyBTYWx0ZWRfX3J/mq3cLYch+ wlq5K5+AvvY+WXIcSJlaEGq3tHtnEzLMkizxd++583xrJ0n5k1Bsb7AgfGNOzG6vEMccqiMAGdz rr2mH4rIBlB0rRYDp51+7fbntALrLJTiT5D1OSfPi/2HIotHu1g+oUzGQd16XszNmafaAuGqQP9 d7W8lH/7RpOjPRQGxou//GcDrpPS42RgfZBQUFqN0HQYUIWCpMSIVdfi4QoYbLL/2F86QweeljB vQofwa6kDsRZdbH+hQ884JSDE+IH+2T68H807JQqplCRUew+03lK4/li/3Yo884WxgEAWAPPF7N OmgxKeqFUXIzbv44B1AJaXT5Vvcu5jdr6c3k18nABxoSVcj2v8Xqm0m9XsSO8mYLBSmjTuOAbzz BYUu0/6TbET09No0+5De8FMmuqv9fZxktCJf6mwr+LWRf1QJN7ORoXkBbMQawcM6P+07jV7LffJ yKwX42gAlVllqwzkeVA== X-Authority-Analysis: v=2.4 cv=GIQF0+NK c=1 sm=1 tr=0 ts=69b856e9 cx=c_pps a=3Bg1Hr4SwmMryq2xdFQyZA==:117 a=3Bg1Hr4SwmMryq2xdFQyZA==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=RzCfie-kr_QcCd8fBx8p:22 a=VwQbUJbxAAAA:8 a=VnNF1IyMAAAA:8 a=dQWU-RC_n072PXZGCE0A:9 a=O8hF6Hzn-FEA:10 X-Proofpoint-ORIG-GUID: F4n-XmIq92N3nWAAO2mt-UA3WmIWVx6G X-Proofpoint-GUID: F4n-XmIq92N3nWAAO2mt-UA3WmIWVx6G X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-16_05,2026-03-16_06,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 priorityscore=1501 bulkscore=0 lowpriorityscore=0 malwarescore=0 phishscore=0 impostorscore=0 suspectscore=0 adultscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603160153 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. Since we can use all 8 bits for slot 'number' (for ARI devices), change slot 'number' u16 to account for special values -1 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 | 31 ++++++++++++++++++++++++------- include/linux/pci.h | 5 +++-- 3 files changed, 30 insertions(+), 11 deletions(-) diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 115e5c11bab3..a93084053537 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -4867,8 +4867,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 e0b7fb43423c..8842fa069392 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 (u16)-1) return sysfs_emit(buf, "%04x:%02x\n", pci_domain_nr(slot->bus), slot->bus->number); @@ -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 @@ -176,8 +192,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); } @@ -287,6 +302,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); @@ -307,8 +325,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 8861eeb4381d..50a84bba3c91 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -78,14 +78,15 @@ * 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 /* 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 Tue Apr 7 02:34:20 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 4DD8B338592; Mon, 16 Mar 2026 19:16:02 +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=1773688563; cv=none; b=WlJ3Ltf4Wr040WCWkZQFwKGj3U4oNNC+oNHvPYw0UbdA4F4Z/9yEYARDDWhvoVcHM0xLHg5uKBVo5Tln0YvNXyjgwrRWNODg5+eHysbPicbd0d6UVN+nCvSno58MkL9kXqMC5f+mUYauSqoVofhc/cq4yJ+7uSlmn6iO36+91Qs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773688563; c=relaxed/simple; bh=TY2zpKNifG/8eMBOZOhi6HU+JgCTeK/+REWlaOd7vW8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=F4JnYNr7NEB3im4qDrPe5S37c4eS9D3i2vo1csBnBKdbv5vzPbe+2Nw+FPb0wFd2ds+f/e0BJVyEuKTB26JilLIgrMT4MPhg41H+hH/jHydPnA3YR0xedL6zF4LoryzKWd1tI4st4ZUlI9NZ6ZLx5rR0WUA7Ruvku3cddGaXGxg= 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=IlSsUfKW; 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="IlSsUfKW" 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 62GDmT7v231841; Mon, 16 Mar 2026 19:15:55 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=aOTMZASEbw1JAk72/ rixAqSaOEQh2zzVQjtzAMAH4bo=; b=IlSsUfKWh2MHVcW/Ip801uPGZJppXLHxv NNy/qB/QqVYUIjFd2mpoUUMU8XbBW9ZNiPrF8aWCyQSg8kx/uesFbU2W5K/91EmB +uFL90eDo4iwbNVR3jD5m/8m/Fe0W+Rp5mUR6128YefIA6j+Xapu85RchYD/fXu5 Ysr8f0nQRVSz8htcrUJMj88WcMXnRT6GqfSKStE+JKFXJQii8rGF1uOPd9pzDMGa luclLrms7TgzncS7dErptONQdqNsgqd0cKp9IGqDUE321JKZPgB9tGuyQxFwshyP /0qyLv+1W3M4g3yaC7K8gLy7WXjv3YPUCrhwHGsKTIu42x2T1c0vw== 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 4cvybs1d31-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 16 Mar 2026 19:15:55 +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 62GGZPJp028452; Mon, 16 Mar 2026 19:15:54 GMT Received: from smtprelay07.wdc07v.mail.ibm.com ([172.16.1.74]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 4cwmq15tt5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 16 Mar 2026 19:15:54 +0000 Received: from smtpav01.wdc07v.mail.ibm.com (smtpav01.wdc07v.mail.ibm.com [10.39.53.228]) by smtprelay07.wdc07v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 62GJFqwL4588032 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 16 Mar 2026 19:15:52 GMT Received: from smtpav01.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 8032B58055; Mon, 16 Mar 2026 19:15:52 +0000 (GMT) Received: from smtpav01.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 2AFA158063; Mon, 16 Mar 2026 19:15:51 +0000 (GMT) Received: from IBM-D32RQW3.ibm.com (unknown [9.61.241.131]) by smtpav01.wdc07v.mail.ibm.com (Postfix) with ESMTP; Mon, 16 Mar 2026 19:15:51 +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, kbusch@kernel.org, clg@redhat.com, stable@vger.kernel.org, alifm@linux.ibm.com, schnelle@linux.ibm.com, mjrosato@linux.ibm.com Subject: [PATCH v11 2/9] s390/pci: Add architecture specific resource/bus address translation Date: Mon, 16 Mar 2026 12:15:37 -0700 Message-ID: <20260316191544.2279-3-alifm@linux.ibm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260316191544.2279-1-alifm@linux.ibm.com> References: <20260316191544.2279-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=MMttWcZl c=1 sm=1 tr=0 ts=69b856eb cx=c_pps a=aDMHemPKRhS1OARIsFnwRA==:117 a=aDMHemPKRhS1OARIsFnwRA==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=uAbxVGIbfxUO_5tXvNgY:22 a=VnNF1IyMAAAA:8 a=WI2LcE4NPZyv2LzpnzYA:9 X-Proofpoint-ORIG-GUID: 9B3VMW4k79C6H2lLa666312DBvUpP6oo X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzE2MDE1MyBTYWx0ZWRfX5NpBeL/2x8Um 421P7c/cW8Q92JxG2L8c43QxPU7hGOcEf52+z9/QnHwaEjQZCnzef95zeqXCMSgFM7t8laVEQx9 cnqBAJJiczPHVxijvFWrU5JzRRibvqHIEgW6PjfAji+k+TH6i/5vNVpcbnRllZJb4sEzZEedxZS vIxKJyD/U3KniKKTLCnNtRrU0iZ9101QTTuv/eEpHBGno62FH8U+aXNDBaupNTjIJ98/qYMUleP DKrIwE1sqEQo+MkPWWq+W9X9Sfwpt5EeFvukRgW8pqNiPzqygCdH1VvcrRRH2AT8ptXkCcrFGY2 TSC6MLrCZf+TiUvo+pKYUisKLU4bcgAYSGhFNigWnkshb1bL+yZF3vlkpbVUeFz0OAVBCuodW6Q +iqMjcyP5UfLYSfRUgXnc7M8CK91DxHOobWDHsr2qbG1suGNhmzG++/OFi2lcEcpDhD9OoRP5hE OaZAPRmd+eYfNPeaBTg== X-Proofpoint-GUID: 9B3VMW4k79C6H2lLa666312DBvUpP6oo X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-16_05,2026-03-16_06,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 lowpriorityscore=0 malwarescore=0 spamscore=0 priorityscore=1501 impostorscore=0 adultscore=0 phishscore=0 clxscore=1015 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603160153 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 2a430722cbe4..87077e510266 100644 --- a/arch/s390/pci/pci.c +++ b/arch/s390/pci/pci.c @@ -272,6 +272,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 Tue Apr 7 02:34:20 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 7F32D3ECBF2; Mon, 16 Mar 2026 19:16:01 +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=1773688563; cv=none; b=c+oci9zjMGxYnFiCINPFiBwtiTpP8Y81AkHk/NIcLtvuOkh+wA1/FF09HKsnV6ZDYAKNAQKMNvl1oMXn1+YmIIHA9pr7cHagpsc+J+XAz7vlQtJpJ/JvJDP11I8a60GE3GHAoyWXI8GXGIrMoiURdAh5tnGhxkh3hKl7p/ndESw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773688563; c=relaxed/simple; bh=/TAkttD/m8UcNbC+JGdCeHld2Xon1e0lpOiw6KxQiQk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=T43NyGnqHPfvgj3koqA86nRTbnrT0m0Ya9+wiiXdvDVzeZucUiMhJVWagidEqZbMlZ7I/8ORuP092SkFhE7PxSTqp3BEkHUpFFGq1gFskpPJL1IWHHIoZU/NV6L3CsGFqDjA4ifIQyysmGMxgiiyK5pYFsDgPCvx/kwTmHNjwk8= 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=n3Hvou1/; 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="n3Hvou1/" Received: from pps.filterd (m0360072.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62GABFaR3402882; Mon, 16 Mar 2026 19:15:56 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=uhUr2ihj00lp3TH0a EtGm1BA+ajK9Cbm95BModvo6JU=; b=n3Hvou1/mTY0TGUfDaVdCCv3E/a2iY4ab 7RfxuK/gz5yf6OKsyDtepquYarP94mA7qsZgd5xj2dIVUmXjnhUFSG89db1LNvCP qwoI8r7vcNbYGMg5ZM6LG5345XX0BfGDlqvF9dOazs8Ts5r4JnFekw0x8/+wzghB 0oT4ACuPpJ5/pHa93A8rbD1gF9lGaco2d1Wsy9hle/845KqpsmvIk4m1TSGRbpx4 fPVguuZWcMocpurkIT7lMDkBE78t5SnjNnKnTuaya1Ck+uqak2CNEW5fieTuOggn wg1DsqLkd0hfQhoUlXR72uwDx1OjZBn9654rZFaE/16tS/AP7b1Kg== 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 4cvyau8yha-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 16 Mar 2026 19:15:56 +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 62GEPTWi014032; Mon, 16 Mar 2026 19:15:55 GMT Received: from smtprelay03.dal12v.mail.ibm.com ([172.16.1.5]) by ppma22.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4cwjcxx3yn-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 16 Mar 2026 19:15:55 +0000 Received: from smtpav01.wdc07v.mail.ibm.com (smtpav01.wdc07v.mail.ibm.com [10.39.53.228]) by smtprelay03.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 62GJFsB832637606 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 16 Mar 2026 19:15:54 GMT Received: from smtpav01.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id E794358055; Mon, 16 Mar 2026 19:15:53 +0000 (GMT) Received: from smtpav01.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id A9F985804B; Mon, 16 Mar 2026 19:15:52 +0000 (GMT) Received: from IBM-D32RQW3.ibm.com (unknown [9.61.241.131]) by smtpav01.wdc07v.mail.ibm.com (Postfix) with ESMTP; Mon, 16 Mar 2026 19:15:52 +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, kbusch@kernel.org, clg@redhat.com, stable@vger.kernel.org, alifm@linux.ibm.com, schnelle@linux.ibm.com, mjrosato@linux.ibm.com Subject: [PATCH v11 3/9] PCI: Avoid saving config space state if inaccessible Date: Mon, 16 Mar 2026 12:15:38 -0700 Message-ID: <20260316191544.2279-4-alifm@linux.ibm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260316191544.2279-1-alifm@linux.ibm.com> References: <20260316191544.2279-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: AW1haW4tMjYwMzE2MDE1MyBTYWx0ZWRfX9c79WJrVBsTB lo4pL7cVsZM7wzO2sLxM3hKT502d8AJ/JaOIuMyWsJXu4P8Ykz7a7R9SVOOXM2diG2xY8oNLsk2 T3kNXM3zCyqKB1CNG9yCuV2pRxV9m1KLtq2/qHpRym68TB4MvFIwZ9pqPdonGs3RG1tlbnq4CcO BJ70ZX2jeLgK1hXcQ5U4t+PaSClksRUgFMGebTRpjPnVAHU48zj8UcIErxMeqe20EDYo4UI9h3j 5yhwEyx2MOv6Xi3dvQuKYRayYbIQofnaMPqwfoCNLJbMWh/z9CHtnaIjuG3P3qCyjikftjQf9jR IukzmeWZf2Z4kkh17P+1UahCsQBnMIDNCe2AyfFRfNJBx9BNuk7Fszd1kMcZm3gNd5QPaI1df+A mVyDpYS2JxVw//Fal1RV6TkV6HxDyHUiD5D+PDxVeU7LgY7Te7UrHl0bFVocxwKjfsv+KOO9lF4 sBoBYHXuS+LsZm+hXEw== X-Authority-Analysis: v=2.4 cv=GIQF0+NK c=1 sm=1 tr=0 ts=69b856ec cx=c_pps a=5BHTudwdYE3Te8bg5FgnPg==:117 a=5BHTudwdYE3Te8bg5FgnPg==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=RzCfie-kr_QcCd8fBx8p:22 a=VnNF1IyMAAAA:8 a=zIJZGsahcqu1twqqOCkA:9 X-Proofpoint-ORIG-GUID: atdWXU3xHPgmlDB3jke0XVY08A_n6ylN X-Proofpoint-GUID: atdWXU3xHPgmlDB3jke0XVY08A_n6ylN X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-16_05,2026-03-16_06,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 priorityscore=1501 bulkscore=0 lowpriorityscore=0 malwarescore=0 phishscore=0 impostorscore=0 suspectscore=0 adultscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603160153 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 Reviewed-by: Bjorn Helgaas --- drivers/pci/pci.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index a93084053537..373421f4b9d8 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -5014,6 +5014,7 @@ static void pci_dev_save_and_disable(struct pci_dev *= dev) { const struct pci_error_handlers *err_handler =3D dev->driver ? dev->driver->err_handler : NULL; + u32 val; =20 /* * dev->driver->err_handler->reset_prepare() is protected against @@ -5033,6 +5034,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 Tue Apr 7 02:34:20 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 251EA3ED129; Mon, 16 Mar 2026 19:16: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=1773688567; cv=none; b=ono3/aB6P2yIM5QmJ93pWBswjQJYh9O6N0fwS8MpQ5gUifIKd98iHeQf84Fh1tE8F2H7uQPzkHoirxUmkpgkAssFuXRRfIxsmrn5FV6HiY69fZTFML4yNrMKXe6sbdhV/5Jo0FJ+KNUA23685zZ595Iuqd/rh+ebVjlJ1hvJeLQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773688567; c=relaxed/simple; bh=sqH4CNseM+g5AdP+kWFJrBmAif5i7CB6o/CQIX21O3c=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=iaubySmett2xHnSOwSx1NOHWaxDk1ZR2xt2PjDWdcWu3hrQNj+30cBUS1npmfDGeNjxVOnfNFXayp1bQ/plGxK9+DmaYUDFksHP3zx9htKEI3sk2CXeJanlDn1VSxcLgb5zhiUstWYwoCCw1vOu2vbf1pntqr1MwljoGymGTt28= 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=ZWGUthVS; 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="ZWGUthVS" 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 62GFgPTJ752470; Mon, 16 Mar 2026 19:15:57 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=bNx6CfAfsKbeiaX8T FWOGFnwQv2tLImSj8pacugZZKI=; b=ZWGUthVSFXFyp6eQc2GWF5YnR0L+xoW19 xufDBqp29Tb4Y8boL1chlfSrKBfs0u77WQo1lmVCSSTNK3brxDvjOMudJ0xSX6/2 NxbRSsyIKe2H/Gbpbs0EDmwqtbch37rpEfbnHeJzyshnVAJGu3d3Zw+Cl2br0iVt 2MsgDAHM7betapO8w8rsQq2bUBM6yKl9HvTCMHAMPSYf2Gwwe26FN3y7E2kWkGcs tgcC954yeX+l0Cy6iD9GdPLO+r0IZk6+pFzP/iI+uHp/6N8+3zq1uYEpOcfnKDqS wSL3yAPQwqBF0yX2mCTgrPucALJIL+BpvaIE+869+RALWXiZNNqmg== 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 4cvx3cs2h9-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 16 Mar 2026 19:15:57 +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 62GEMPKQ004737; Mon, 16 Mar 2026 19:15:56 GMT Received: from smtprelay04.dal12v.mail.ibm.com ([172.16.1.6]) by ppma12.dal12v.mail.ibm.com (PPS) with ESMTPS id 4cwj0s65h7-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 16 Mar 2026 19:15:56 +0000 Received: from smtpav01.wdc07v.mail.ibm.com (smtpav01.wdc07v.mail.ibm.com [10.39.53.228]) by smtprelay04.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 62GJFtFB20906606 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 16 Mar 2026 19:15:55 GMT Received: from smtpav01.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 7D76558055; Mon, 16 Mar 2026 19:15:55 +0000 (GMT) Received: from smtpav01.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 1E92C5804B; Mon, 16 Mar 2026 19:15:54 +0000 (GMT) Received: from IBM-D32RQW3.ibm.com (unknown [9.61.241.131]) by smtpav01.wdc07v.mail.ibm.com (Postfix) with ESMTP; Mon, 16 Mar 2026 19:15:53 +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, kbusch@kernel.org, clg@redhat.com, stable@vger.kernel.org, alifm@linux.ibm.com, schnelle@linux.ibm.com, mjrosato@linux.ibm.com, Benjamin Block Subject: [PATCH v11 4/9] PCI: Add additional checks for flr reset Date: Mon, 16 Mar 2026 12:15:39 -0700 Message-ID: <20260316191544.2279-5-alifm@linux.ibm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260316191544.2279-1-alifm@linux.ibm.com> References: <20260316191544.2279-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=arO/yCZV c=1 sm=1 tr=0 ts=69b856ed cx=c_pps a=bLidbwmWQ0KltjZqbj+ezA==:117 a=bLidbwmWQ0KltjZqbj+ezA==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=V8glGbnc2Ofi9Qvn3v5h:22 a=VwQbUJbxAAAA:8 a=VnNF1IyMAAAA:8 a=_COy7Z8VS3VoYlkUqhYA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzE2MDE1MyBTYWx0ZWRfXxtCr1f3DilU7 87whUQzLgJObH5iUz3G/f/fsFaz621tSnekHyOlCb7exNOh5t1a45LgjcWYJfZ8Z1dvM8O4npAJ ffakMqFBb/nX4Rj64FGvfRxMsn9AQ7/7B59k0MPgjEC3moLKFCqZb3txuSk6nC5JrfdavEyqZDI 1PCwbT2RpcrTTxFA/pl+3+wR8qRXh2fggppOChzA+UY36Daa6a3y76THiDa8YiLEFk+L/RdtQmY hGBBt/zQTKRuELCE7J6s2GttN2cPrlHDQlFLWGHSFTljyoZEQU/eQNdbi234MSmLZijhx6sMa02 3nl8ZgMgqbmrufjETTRpO6tnDR1qt7RrblRuWTMqRFcFEVKvLdkoLWaiAirEjJURpBQM4bnKURA w00PoJFZRAwTuWrGvtAdWl1elpoe9zBT/klZF2agpcnvX7zwwGV152WPinN1NZPrhxV9GSmM2pa 15tbCSUD5DRBtmvWoHA== X-Proofpoint-GUID: iPG7gyNGzXngN8ja6M1SSCp2XfWSudY5 X-Proofpoint-ORIG-GUID: iPG7gyNGzXngN8ja6M1SSCp2XfWSudY5 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-16_05,2026-03-16_06,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 spamscore=0 lowpriorityscore=0 impostorscore=0 adultscore=0 bulkscore=0 suspectscore=0 malwarescore=0 clxscore=1015 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603160153 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 additional 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 373421f4b9d8..8e4d924f4e88 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -4371,12 +4371,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 Tue Apr 7 02:34:20 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 9C2C8338592; Mon, 16 Mar 2026 19:16:05 +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=1773688573; cv=none; b=caH6TXC754u4YCAc412jMKCyQXR3A3u9Ht8ML9SGxtvxvTQywCFhVCwcIAANT2c4FXeQ9DtvchLOAgoqz5PJ/qIlKs2cbpcleJffN7iy69oV0D/Um1dTjaFRH03xpjNX8ch/GbCLt9oNz+WhWeT/Gi+7mMq42mhtnGj63OAkgaA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773688573; c=relaxed/simple; bh=YhMjb/UNnC49ZtdnrN3awZkC7cL4VLUUSXKJTq4yGLI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=CVgnajb6LkKCVG75UqhPnvvHOsXI7erQEiyRG/MGrPqaS26fXliHleYI4EFLW9uybXAZ0clFcUpnJJZxAf/aF2AD/nhaVVgCG6vEBXFp9DekQWdUmOGCealImnuk7XxycPik+xGK1r2BC8VIcXvimZbjZACl9YLNJL/1/+2AoNM= 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=YSCuGLmP; 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="YSCuGLmP" Received: from pps.filterd (m0360083.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62GEuSY71200667; Mon, 16 Mar 2026 19:16:00 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=YSCuGLmPepu16ld3TZqem5G9CVyx4a/S6 3x5cLRg/mi2VFrn2PkuWsJ4vdQubgVSLBzk2j0AJYXB+w4+FI5G0DGpHXom5pHmC zybrhVI7XtgqbZos35cHrk2BhlSlFwsJ3fvGkj3O3oQvaf9MESdF4nKPLKyVg9+j S2rnk9g1ZhNK3nna5F5+d5xcp1e3H0d/x5yuZVZAzx2cCIEv+sZQWiYwQIJzZ2DF Ubrk1uD07Y+90pfYcB5A9DlVtdSB365ydiunRrPS9ScdZTsK8YDCovp1EsKKpP/W 6UK6j6nnZo6zaXTiJFgCLLGK5W4R1gp1zuGGGF2qzlsaKsmSYHaIw== 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 4cvy64hf1g-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 16 Mar 2026 19:15:59 +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 62GFdSjK029194; Mon, 16 Mar 2026 19:15:58 GMT Received: from smtprelay05.dal12v.mail.ibm.com ([172.16.1.7]) by ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4cwkgk6030-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 16 Mar 2026 19:15:58 +0000 Received: from smtpav01.wdc07v.mail.ibm.com (smtpav01.wdc07v.mail.ibm.com [10.39.53.228]) by smtprelay05.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 62GJFvps60096820 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 16 Mar 2026 19:15:57 GMT Received: from smtpav01.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id E43855804B; Mon, 16 Mar 2026 19:15:56 +0000 (GMT) Received: from smtpav01.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id A620858059; Mon, 16 Mar 2026 19:15:55 +0000 (GMT) Received: from IBM-D32RQW3.ibm.com (unknown [9.61.241.131]) by smtpav01.wdc07v.mail.ibm.com (Postfix) with ESMTP; Mon, 16 Mar 2026 19:15:55 +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, kbusch@kernel.org, clg@redhat.com, stable@vger.kernel.org, alifm@linux.ibm.com, schnelle@linux.ibm.com, mjrosato@linux.ibm.com Subject: [PATCH v11 5/9] s390/pci: Update the logic for detecting passthrough device Date: Mon, 16 Mar 2026 12:15:40 -0700 Message-ID: <20260316191544.2279-6-alifm@linux.ibm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260316191544.2279-1-alifm@linux.ibm.com> References: <20260316191544.2279-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: -Q5RPPQY4oXnRssNgRr0KLeydwUdQazV X-Proofpoint-GUID: -Q5RPPQY4oXnRssNgRr0KLeydwUdQazV X-Authority-Analysis: v=2.4 cv=KYnfcAYD c=1 sm=1 tr=0 ts=69b856ef cx=c_pps a=3Bg1Hr4SwmMryq2xdFQyZA==:117 a=3Bg1Hr4SwmMryq2xdFQyZA==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=iQ6ETzBq9ecOQQE5vZCe:22 a=VnNF1IyMAAAA:8 a=MtaQWmmsotiDqj5H3ecA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzE2MDE1MyBTYWx0ZWRfX4CnzmPCL5QjO I0bQ7NhLEaCeTtCpyw3gcMwJ0hwduS9WKtWj+A3SjAM4Gwq/wHC0SgTfNhW54lhzbqncPMTQ0P5 bJzpxH9+Hyt4Mgamk/2SAUHpV0ByzTvtRgqqyM1jMPUruy7Lo/9/JwPWkpe8tJiSKV9+yjR6zF0 oBZCWjIja8FoRt828IrVH9+t5OhwPIOvpYndJViJnuEKSKp6IZbc0ot39m+MGfPtKvflOUa25qF f0leFQAYLGtVlrIIW8sQMJZiq/9jGAxEl6BdXawMi8CDCBeuazXaROAJpYlEfZ+q9mt6BxX9UmZ W1i5erGH03EcaDyqEn++GbVzuGyafJkvCs2NMasaceYi4fXxeD6P60PUxhDlKxvAQP8LmAcrsKA 3GTPcqeLrVUUQnczQTHYDbN5L0btTqoro+hVLlGHOhDIQ2+UPbxZHwlEKmbr3TqM09fjuL1dYJ2 9c5Fql58uW4D3cNrtDg== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-16_05,2026-03-16_06,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 lowpriorityscore=0 priorityscore=1501 suspectscore=0 bulkscore=0 spamscore=0 impostorscore=0 malwarescore=0 adultscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603160153 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 Acked-by: Alex Williamson --- 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 Tue Apr 7 02:34:20 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 2527F3ED12F; Mon, 16 Mar 2026 19:16: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=1773688567; cv=none; b=FuWYnEQTR8wVUGEW8fnnd+GFzDjx01S8DfVAn2sS0Wd5BEIxC2jlA5wm/gqqfJDITqYmZXWGOSxT4752njnXzII79Z3OE3bIWL7YTH52jbCcgDIct78nxXlezfiNBo6K5Z6F+VbF5VOaAlObW6g38O+fEo5FG2Kl5X9wzbdxHeE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773688567; c=relaxed/simple; bh=Ir/B9h/DYt1jjg1Y6mY+WhYUmFB8DhtDw+jORTssZVU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NT/TwRRblaKu5jiJihsbhvbhDf3WTSrpmfemZv7CEZdpQHzeLlKfhrlo9fPnZ4mpp9F2fT8M9kxEfNeGChlbNmoJuV70ObN+TFzfjTFcfMaRry43uw+s0B72LEeRn1EaoWD6hs3hi1gnkja51n17XchnhUnZq2ZpwpDArWt3/qk= 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=omGXgW1K; 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="omGXgW1K" 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 62GEdoL1596541; Mon, 16 Mar 2026 19:16:00 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=+tC5P8lsvjQE8tTEl 3uZh+zVFKaGcY/sD9rsWtuxJ2o=; b=omGXgW1KSVne9CB8Dad5LczQ5C0TkHkrY yOzApTJjbSLNCw2Ka4NonvQskqLHdBA2fH96yhAmAVy+HexKjtT9Ey+IEHzT2XRC OVEr9jaW0KaoiGb5Vg7csg1rCBazkMD2UC0StMIkFLXGajOFXuIzQtAMMAZGrSbU Baou/ky51TT+ovEmpWQ51d9dWzyE7NccKlpXFmeNR9dSRIYSbjeyv8tLtcgaqerj QiIIaJwGXEBTYmwcVJJpbQyIllMzafHTj/UdFgEiDBn5VcpKCNguUM3Tq5XAxeG9 SJwQ9SKqEGQCvaDGtMa4T5snW++LU8ov/4YA8VuHa1y30hZe4HMLQ== 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 4cvx3cs2he-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 16 Mar 2026 19:16:00 +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 62GFmFLh028785; Mon, 16 Mar 2026 19:15:59 GMT Received: from smtprelay07.dal12v.mail.ibm.com ([172.16.1.9]) by ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4cwkgk6032-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 16 Mar 2026 19:15:59 +0000 Received: from smtpav01.wdc07v.mail.ibm.com (smtpav01.wdc07v.mail.ibm.com [10.39.53.228]) by smtprelay07.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 62GJFwra24576694 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 16 Mar 2026 19:15:58 GMT Received: from smtpav01.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 55A8E58065; Mon, 16 Mar 2026 19:15:58 +0000 (GMT) Received: from smtpav01.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 1B0A858059; Mon, 16 Mar 2026 19:15:57 +0000 (GMT) Received: from IBM-D32RQW3.ibm.com (unknown [9.61.241.131]) by smtpav01.wdc07v.mail.ibm.com (Postfix) with ESMTP; Mon, 16 Mar 2026 19:15:56 +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, kbusch@kernel.org, clg@redhat.com, stable@vger.kernel.org, alifm@linux.ibm.com, schnelle@linux.ibm.com, mjrosato@linux.ibm.com Subject: [PATCH v11 6/9] s390/pci: Store PCI error information for passthrough devices Date: Mon, 16 Mar 2026 12:15:41 -0700 Message-ID: <20260316191544.2279-7-alifm@linux.ibm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260316191544.2279-1-alifm@linux.ibm.com> References: <20260316191544.2279-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=arO/yCZV c=1 sm=1 tr=0 ts=69b856f0 cx=c_pps a=3Bg1Hr4SwmMryq2xdFQyZA==:117 a=3Bg1Hr4SwmMryq2xdFQyZA==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=V8glGbnc2Ofi9Qvn3v5h:22 a=VnNF1IyMAAAA:8 a=JwDFWkoFWNOLAMzFnh4A:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzE2MDE1MyBTYWx0ZWRfXx8zapAzR2aW9 OQpAklOO5cUjRh8vhlcxlPhH6ONL8PfXOGXcc3t4S8WN/4mCTLB8PFDI6PJswpDk8v5eNe1yxhz 7YKez8TF8/Ma0/9KV5MmzEW04LrrYHYTvEYsDu655OPwdyJU3RE2DoxBLuPKDx56XZTjTreBEnW 628Ro7c/KuBKkxn1DOV1ICTGU1P0rnlO11XW0ZJvXr/nYbEddfWErr7H7oVy59/ri0oE0w+uQBd e1AeZLQv9dsMwIxUBi3IS5l87gcIWBl+bqcKNGzWq40NFsl7GjpiXmfXplR0zyAyVpx230d45W3 sAKUtrsoQU5ZUxGQqUz0ysiu9HYRku/tKA2NW3ErGJ/SJbVgD6eI8kvtU1LA75XqXRLBbJmzYY5 +cMGuSVKoz709pVuQmv9q5sSY/KMVog4R4z6NcPGSXg0/xf121v6dw2O5Rc7F+qFF26NLjgs2q2 hpX9AvOEj07I10soGSg== X-Proofpoint-GUID: gs0x2Y34i89cUaeFMSlgyj8JSqQtNdky X-Proofpoint-ORIG-GUID: gs0x2Y34i89cUaeFMSlgyj8JSqQtNdky X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-16_05,2026-03-16_06,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 spamscore=0 lowpriorityscore=0 impostorscore=0 adultscore=0 bulkscore=0 suspectscore=0 malwarescore=0 clxscore=1015 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603160153 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 | 94 +++++++++++++++++++------------- drivers/vfio/pci/vfio_pci_zdev.c | 2 + 4 files changed, 87 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 87077e510266..bc253cc52056 100644 --- a/arch/s390/pci/pci.c +++ b/arch/s390/pci/pci.c @@ -915,6 +915,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..5b24f3a9fe23 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,41 @@ 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; + + guard(mutex)(&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); +} +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 +187,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 +207,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 +222,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 +283,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 +342,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 Tue Apr 7 02:34:20 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 B2D393ED113; Mon, 16 Mar 2026 19:16:07 +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=1773688572; cv=none; b=XLBmv5IpxCEH23vvdS0Qo9TD9ab1XOrkF+im3R04jBAoWY+Hv7rfmiGQLJIp0tNU5OlcXAm2n4nTIOPchVSpPjwaZkGTh8tQQJsbRIPEayMzBfq2SmH1l94/LQ6/DKrkWnn2erdM13f3IS1EZhDB0oTNYULDWhd0R9i6g/t1AxA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773688572; c=relaxed/simple; bh=dolDlmty2gDg9KbcjZlyQImF27gwC0nzDfbxrwRpy9s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=scbqI5xZPVnFh7CeJX75YVsmJ5akieDGUsh4BZJ4Oqtv9ffah7CsaHRjc6u2sxMBxFz5oHCpPFGhKc6IET2tLU4pIUgd9zh5iOZ+fnvHr2rFq5Q8oE4RBY8dQrSPXJcszvkCUaow+62KXMfheqYIgW4tay9aHceXca0KzFlgKdE= 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=DbRKPGd+; 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="DbRKPGd+" Received: from pps.filterd (m0356517.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62GGj2ha1188628; Mon, 16 Mar 2026 19:16:02 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=va+WUlTzDwquCuYnP i0mK7x/VduB97z7b2jwvNjvPr8=; b=DbRKPGd+yrZkAEtZx0lch3IkW6qgzq2nB 27YMfb7EPpW3Pwijg7GDmyEd4Lu+cKazEMOd+22wiDGuQ2XAzqeKrHRSgCMRrcOK z2SqBM2ncpjTDhdvCVuGaT+zqwDZl+D3qnpvPG74Z4sGvSZOGVXLfGVWBqtdSB/Z LYcQdavbBbdAe+C1KCXgLdDT9091IKQw7UH4O7LyxTEktlDuuvC5f6CFI3G4nUAL UDCQv8EHuaChR2WYYtJVsAQSkxsXmS+hbLrZxgjHndzSls/cdMb930RxBz494CCZ rlR6CxvuZHgFn6LeRXzmQJd1NdtFRvNGlmlJIQgNhKrMccIpNRLkA== 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 4cx7vfbp55-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 16 Mar 2026 19:16:02 +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 62GFOiBx028753; Mon, 16 Mar 2026 19:16:01 GMT Received: from smtprelay01.wdc07v.mail.ibm.com ([172.16.1.68]) by ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4cwkgk6033-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 16 Mar 2026 19:16:01 +0000 Received: from smtpav01.wdc07v.mail.ibm.com (smtpav01.wdc07v.mail.ibm.com [10.39.53.228]) by smtprelay01.wdc07v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 62GJFxFq57213342 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 16 Mar 2026 19:15:59 GMT Received: from smtpav01.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id BBA645804B; Mon, 16 Mar 2026 19:15:59 +0000 (GMT) Received: from smtpav01.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 8035758059; Mon, 16 Mar 2026 19:15:58 +0000 (GMT) Received: from IBM-D32RQW3.ibm.com (unknown [9.61.241.131]) by smtpav01.wdc07v.mail.ibm.com (Postfix) with ESMTP; Mon, 16 Mar 2026 19:15:58 +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, kbusch@kernel.org, clg@redhat.com, stable@vger.kernel.org, alifm@linux.ibm.com, schnelle@linux.ibm.com, mjrosato@linux.ibm.com Subject: [PATCH v11 7/9] vfio-pci/zdev: Add a device feature for error information Date: Mon, 16 Mar 2026 12:15:42 -0700 Message-ID: <20260316191544.2279-8-alifm@linux.ibm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260316191544.2279-1-alifm@linux.ibm.com> References: <20260316191544.2279-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: 3PDl8dNd4PZq2fZZKDXWToW6_oZh_QIX X-Authority-Analysis: v=2.4 cv=KajfcAYD c=1 sm=1 tr=0 ts=69b856f2 cx=c_pps a=3Bg1Hr4SwmMryq2xdFQyZA==:117 a=3Bg1Hr4SwmMryq2xdFQyZA==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=U7nrCbtTmkRpXpFmAIza:22 a=VnNF1IyMAAAA:8 a=QIy8Zix3hhx26zbqT_4A:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzE2MDE1MyBTYWx0ZWRfX04g2ytq8XHJ1 AlLZoYas+Yv9kwk1sdaZGmA+g7hzYCT+q3Tgsf0KGOfL+5OcV/7bsP3WlvQWuyGhyxAKmZreVMm 6/YGw6ErCXMwjgVtXMW0BmRg+iO0ataWjWj0ZNPoy1MnBxzR2msdRmVrfiJzH419fqMzeo3iRkJ 6BrEiDCv/3OXiMVTDuKDbXOhNso5/Ivmcb6naNEv9aD9gBdXfESe9bkEEXdFAD8NkRCkDT/dSxr LFvkRxtBoqi6HltDs/F9T7AjUEY5lg6m9VsKMfd4OgYiGyte/Bk6395F+OBPimOCMf27BFah14u 64EChSOtwkfZooI4xvkJTewdw3tj5xH+meGd/TwJuMBtNQpsO/2TGTnTffFmMssgOwmGRz0hVyO 83R9c2l5/SYMls05rqPjpRFDGk6/G0laWf2uu0F+/v9URFFl+BfsV18qjVplL4KDfcisCVOze8+ 91MGcUTmGSHUvDSNudA== X-Proofpoint-GUID: 3PDl8dNd4PZq2fZZKDXWToW6_oZh_QIX X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-16_05,2026-03-16_06,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 adultscore=0 spamscore=0 malwarescore=0 clxscore=1015 impostorscore=0 bulkscore=0 lowpriorityscore=0 priorityscore=1501 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603160153 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 | 36 ++++++++++++++++++++++++++++++++ include/uapi/linux/vfio.h | 17 +++++++++++++++ 4 files changed, 64 insertions(+) diff --git a/drivers/vfio/pci/vfio_pci_core.c b/drivers/vfio/pci/vfio_pci_c= ore.c index d43745fe4c84..bbdb625e35ef 100644 --- a/drivers/vfio/pci/vfio_pci_core.c +++ b/drivers/vfio/pci/vfio_pci_core.c @@ -1534,6 +1534,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..d2748dd67c55 100644 --- a/drivers/vfio/pci/vfio_pci_zdev.c +++ b/drivers/vfio/pci/vfio_pci_zdev.c @@ -141,6 +141,42 @@ 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); + + err.version =3D 1; + 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 bb7b89330d35..21b1473e4779 100644 --- a/include/uapi/linux/vfio.h +++ b/include/uapi/linux/vfio.h @@ -1510,6 +1510,23 @@ 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 { + __u8 version; + __u8 pending_errors; + __u16 pec; +}; + +#define VFIO_DEVICE_FEATURE_ZPCI_ERROR 12 + /* -------- API for Type1 VFIO IOMMU -------- */ =20 /** --=20 2.43.0 From nobody Tue Apr 7 02:34:20 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 C5D433ED5DF; Mon, 16 Mar 2026 19:16: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=1773688572; cv=none; b=Nj9KXea0b08Qs8xFf5bECD7oUlmd76WpprI1tFvNg3Qswsr8AwQ8cezVGMC2sCL0ifRXLKAaouKEJ6XP+8UgplRPwDPDS7Qo6OC5ZT6cp+87ihi5WLkIA0hUThgfP3/oVWQ/PkAdVlO4+Kij4fCg+3xHWLam6dRhNLkK6J+ecek= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773688572; c=relaxed/simple; bh=JU2S/D1vIdNZRnF3thIXfdANBZsmsxh8AT3Bc52zZ5k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=BngEJ5b+jAdzJbVf/t90ZMEI030m1h/mvxF9L5BEApzLlwbwdyUN3GG1dn9N6EC0gkVNz66hZia+JNKJUOqPH26S+J0UVtwYs9aIOkQxvERqZxKi047+3F1nHFnvIflRs0MPf6IGPkGlmKTyplNxQi3GwlQOmGEfHzyV08eItjE= 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=rF/FMSqC; 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="rF/FMSqC" Received: from pps.filterd (m0356517.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62GHFZCE1394708; Mon, 16 Mar 2026 19:16:04 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=/Q3cbR0hn2isfELGq liRAPHKU4vVJLMuvRD4mjbhUEM=; b=rF/FMSqCnl/06s2nlKvoZXut/49YagOnw RMK/w9XlHhUnDIw9GaX8YmlyEkVtnpthrW+HOsLwumQBS7LczIpjYjOUsp/oRzOP RxIcXB1/gPrMkTol6QBiNTBWTLw452mIxXC5sbUNNf9l0qqi3WIK5qjrLBKsUwCU tUCSL/yyt1x6F34yc14SozIWvf7aIyP1Q39GqqG+YdBVum222t2XM/cukkJYIRT4 TQs2eZ4J/0amBapTST+O0Salrci2HL5W0FTjqNvK57E89uAe7LPr2BL117RVXtUg IpR5xhix9KbC4UaOL2WTOuNEbaeteOYRyeLLoBYeKCCkLnM8LDgww== 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 4cx7vfbp58-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 16 Mar 2026 19:16:03 +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 62GEbpsV004575; Mon, 16 Mar 2026 19:16:03 GMT Received: from smtprelay03.wdc07v.mail.ibm.com ([172.16.1.70]) by ppma12.dal12v.mail.ibm.com (PPS) with ESMTPS id 4cwj0s65h9-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 16 Mar 2026 19:16:03 +0000 Received: from smtpav01.wdc07v.mail.ibm.com (smtpav01.wdc07v.mail.ibm.com [10.39.53.228]) by smtprelay03.wdc07v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 62GJFcUY30409372 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 16 Mar 2026 19:15:38 GMT Received: from smtpav01.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 4482958059; Mon, 16 Mar 2026 19:16:01 +0000 (GMT) Received: from smtpav01.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id E8FA458055; Mon, 16 Mar 2026 19:15:59 +0000 (GMT) Received: from IBM-D32RQW3.ibm.com (unknown [9.61.241.131]) by smtpav01.wdc07v.mail.ibm.com (Postfix) with ESMTP; Mon, 16 Mar 2026 19:15:59 +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, kbusch@kernel.org, clg@redhat.com, stable@vger.kernel.org, alifm@linux.ibm.com, schnelle@linux.ibm.com, mjrosato@linux.ibm.com, Julian Ruess Subject: [PATCH v11 8/9] vfio: Add a reset_done callback for vfio-pci driver Date: Mon, 16 Mar 2026 12:15:43 -0700 Message-ID: <20260316191544.2279-9-alifm@linux.ibm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260316191544.2279-1-alifm@linux.ibm.com> References: <20260316191544.2279-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: d0Eq198Gl0u3s4BeRktP9Pcm8bQ_L656 X-Authority-Analysis: v=2.4 cv=KajfcAYD c=1 sm=1 tr=0 ts=69b856f3 cx=c_pps a=bLidbwmWQ0KltjZqbj+ezA==:117 a=bLidbwmWQ0KltjZqbj+ezA==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=U7nrCbtTmkRpXpFmAIza:22 a=VnNF1IyMAAAA:8 a=hcTHx3Z5Akp3fEzgVBYA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzE2MDE1MyBTYWx0ZWRfX+IC7SASBoomk ngI0s4sS6XqXms73hUSAzoaGgu+DdTAMjg8q8Ly24zWgmBiVu2a4YJmu6GGeHoGXA9uL73+TdTI HnT+eJsiZbXVEjaOIxhJi0iSsK4mft8f9CY3a46+a9DoWFIC+jfQO4MzI/rMrFXMHoRwM/0ReUO /8yYuCu13GW920cLSFzeo8rELyGW2t8MfuioXxVBr/MjqJAriOx9ZmMXvohFWzX6PXZBOtVnxhX yq6qLmKgEln7q01gz5x2jkODE5APlhPh8hvHH0t1GzSpZW0mt8bLuU5fkIj939vLht/S0J7yyvs winKX3BW0LKAc5lqQfcvdeVCLTumyjWF1qcAuT2QRoVo9pZVzeT6N7jxn/Cx7cggAS9qnHaxae6 EReyHquXDYnkfnuAVGXS0GesAOoyRxOTTo3EbriBWaIhC8puXtpelCFLiLQ/j8DlwJG6SFnvgLL WLzJdjDb/Ll5e6FK06w== X-Proofpoint-GUID: d0Eq198Gl0u3s4BeRktP9Pcm8bQ_L656 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-16_05,2026-03-16_06,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 adultscore=0 spamscore=0 malwarescore=0 clxscore=1015 impostorscore=0 bulkscore=0 lowpriorityscore=0 priorityscore=1501 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603160153 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 Reviewed-by: Niklas Schnelle Signed-off-by: Farhan Ali Acked-by: Alex Williamson --- 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 bbdb625e35ef..f1bd1266b88f 100644 --- a/drivers/vfio/pci/vfio_pci_core.c +++ b/drivers/vfio/pci/vfio_pci_core.c @@ -2257,6 +2257,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) { @@ -2321,6 +2332,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 Tue Apr 7 02:34:20 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 C5DD33EDAA5; Mon, 16 Mar 2026 19:16: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=1773688572; cv=none; b=Afshv18MY/W6em/YQnvv4VuCj8zh43RQ2wXfhODRBXjfjcYLrAgkTiWkP7L2OcKfV7j/rM+SB+q7OHdmpJ9EgGFStx4ofnlySf/NGC7c8DKz5NWUsu3l/oLbcfNK5yzMiUFFvHPBR/atT6ADY/id9+7mHEyerZ1AxROyb1VN/Ts= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773688572; c=relaxed/simple; bh=8OogfMIhqpJmvSOuDItyCiOh2Iao9nb8IfUV5zKlBKU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=faPaS7x3hGQJZ3hEl4Iqqzb8kkDf5/sGPGT9aWfzChPEXIqCtBeiXKhK89o2PtSRn2TXZe8GcCDfGfPMrvvcP1a7bjCHthKshpmp3bM6Dqb0fGJwQxQYE2rdY05UcdhG0SJE1jyFxTDT2HbUuVqhskaQ9VYUD9nRGh59/Mp6wEQ= 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=fmuSqOAe; 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="fmuSqOAe" Received: from pps.filterd (m0356517.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62GIFH9A1518585; Mon, 16 Mar 2026 19:16:05 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=lx/c25tISjemDlf4Q BUKY5eA8DcTv+7gKChhoPKjTEk=; b=fmuSqOAe500BlBOB2Xuq3Nc2SC4WRCiEI HleBzw7/IzOoetmHsYDmpyLN5TfLwjCvwnWyDpd9IjizdIyj4oR+5tIOFB8dKe5k iRZVMdhNEXchOPDQhM72XARrPIBg525Ys4FLMoocHUUo9zBrNE/6ILFxycMytHdX 79ecUM5YEkm6Hya4cl3w/KTPTkb8MEdYzF+53CDEF5mzHXtVM1+TMP2xXzZSOfR9 vbQWqPV+voxC6YxtO/OLgfrOcI9b/em0Aoa6zN2yATx27+yqZdiyplbPWq1556dU 2OgMwrf9JVw7fzD2cpi2zXiG1NeL8fKxBDzKSi6EWnFEwZ0rOzcow== 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 4cx7vfbp5c-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 16 Mar 2026 19:16:05 +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 62GG7WXm032346; Mon, 16 Mar 2026 19:16:04 GMT Received: from smtprelay04.wdc07v.mail.ibm.com ([172.16.1.71]) by ppma13.dal12v.mail.ibm.com (PPS) with ESMTPS id 4cwm7jnvmx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 16 Mar 2026 19:16:04 +0000 Received: from smtpav01.wdc07v.mail.ibm.com (smtpav01.wdc07v.mail.ibm.com [10.39.53.228]) by smtprelay04.wdc07v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 62GJG2Qb14811710 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 16 Mar 2026 19:16:02 GMT Received: from smtpav01.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id BAFA85804B; Mon, 16 Mar 2026 19:16:02 +0000 (GMT) Received: from smtpav01.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 6D49B58055; Mon, 16 Mar 2026 19:16:01 +0000 (GMT) Received: from IBM-D32RQW3.ibm.com (unknown [9.61.241.131]) by smtpav01.wdc07v.mail.ibm.com (Postfix) with ESMTP; Mon, 16 Mar 2026 19:16:01 +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, kbusch@kernel.org, clg@redhat.com, stable@vger.kernel.org, alifm@linux.ibm.com, schnelle@linux.ibm.com, mjrosato@linux.ibm.com, Julian Ruess Subject: [PATCH v11 9/9] vfio: Remove the pcie check for VFIO_PCI_ERR_IRQ_INDEX Date: Mon, 16 Mar 2026 12:15:44 -0700 Message-ID: <20260316191544.2279-10-alifm@linux.ibm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260316191544.2279-1-alifm@linux.ibm.com> References: <20260316191544.2279-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: ks_MQXTreL5RG_vLvsJ-Ov9fRJAdLHuP X-Authority-Analysis: v=2.4 cv=KajfcAYD c=1 sm=1 tr=0 ts=69b856f5 cx=c_pps a=AfN7/Ok6k8XGzOShvHwTGQ==:117 a=AfN7/Ok6k8XGzOShvHwTGQ==:17 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=U7nrCbtTmkRpXpFmAIza:22 a=VnNF1IyMAAAA:8 a=9wliL4UQvNVLrYCoNVcA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzE2MDE1MyBTYWx0ZWRfX2QCGdkHhpzz9 Edh/aiET1qaZ1FtwRcrtayJqyclOiMXIo5Jd0NjoziI34RsmemFIZ1sHkFx+fMyEkY4LEQ2QyGr QxCYxUg1V14BB/JMvCcTaSM2IR8doxV3OhjA6416HwmLAqriQ4XQ57meCK7i3fnPpL1E37pRpCZ N1aZOXpYDN8LvmR7+ghhYGSp6WhZZGp+6/Pg56KDMNSZbETBRi+UQJbZhByshKRM8Jp/c3aqH+e XM9VCa2la+ZTZbq+GKnzWVzRdZjHTFEg++5/JcJ9APrnj7zU6nEiauudbXUtpnOiM147lt98EtZ n2V6IDUOGFxuxbVft717ie4+CD6mEzTKn1b3Jy5b8gmLqOwClneEfXWNM8DEXdr+Rffrr+5qeXY kCJBIa8Y6fpgPzJ6jR52GjovZkoP6DxzHdhng22j3+bADydfugB4VPU8G10BjeHLxDpd97kZky7 nb7EBXRJpth1c2oQdSQ== X-Proofpoint-GUID: ks_MQXTreL5RG_vLvsJ-Ov9fRJAdLHuP X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-16_05,2026-03-16_06,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 adultscore=0 spamscore=0 malwarescore=0 clxscore=1015 impostorscore=0 bulkscore=0 lowpriorityscore=0 priorityscore=1501 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603160153 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 s390 is one such device. For PCI devices on IBM s390 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. Reviewed-by: Julian Ruess Reviewed-by: Niklas Schnelle Signed-off-by: Farhan Ali --- 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 f1bd1266b88f..cfd9a51cd194 100644 --- a/drivers/vfio/pci/vfio_pci_core.c +++ b/drivers/vfio/pci/vfio_pci_core.c @@ -786,8 +786,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; } @@ -1163,11 +1162,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 33944d4d9dc4..64f80f64ff57 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