7230df2ed5
- Added the following patches for bsc#1165978. zpcictl --reset only issues a SCLP reset and leaves the PCI function in an error state. Initiate an OS level recovery by calling /sys/bus/devices/<dev>/recover after the SCLP reset. * s390-tools-sles15sp2-01-zpcictl-Initiate-recover-after-reset.patch * s390-tools-sles15sp2-02-zpcictl-Rename-misleading-sysfs_write_data.patch * s390-tools-sles15sp2-03-zpcitctl-Exit-on-error-in-sysfs_report_error.patch - The zipl boot loader may crash during boot. The solution is to implement vsnprintf and make use of it. (bsc#1165317) * s390-tools-sles15sp2-01-zipl-libc-Introduce-vsnprintf.patch * s390-tools-sles15sp2-02-zipl-libc-Fix-potential-buffer-overflow-in-printf.patch * s390-tools-sles15sp2-03-zipl-libc-Replace-sprintf-with-snprintf.patch * s390-tools-sles15sp2-04-zipl-libc-Indicate-truncated-lines-in-printf-with.patch OBS-URL: https://build.opensuse.org/request/show/783519 OBS-URL: https://build.opensuse.org/package/show/Base:System/s390-tools?expand=0&rev=90
71 lines
2.2 KiB
Diff
71 lines
2.2 KiB
Diff
Subject: [PATCH] [BZ 184174] zpcictl: Initiate recover after reset
|
|
From: Jan Hoeppner <hoeppner@linux.ibm.com>
|
|
|
|
Description: zpcictl: Initiate recover after reset
|
|
Symptom: If a PCI function is reset using zpcictl --reset, the function
|
|
is in an error state.
|
|
Problem: zpcictl --reset only issues a SCLP reset and leaves the PCI
|
|
function in an error state.
|
|
Solution: Initiate an OS level recovery by calling
|
|
/sys/bus/devices/<dev>/recover after the SCLP reset.
|
|
Reproduction: Call zpcictl --reset <dev>
|
|
Under z/VM check the state of the function with 'vmcp q pcif'
|
|
Upstream-ID: bc0d40c5803d4c5426b17b6d59aa0f1e46a2aacc
|
|
Problem-ID: 184174
|
|
|
|
Upstream-Description:
|
|
|
|
zpcictl: Initiate recover after reset
|
|
|
|
After a zpcitctl --reset the PCI function is currently left in an error
|
|
state. This seems unexpected, so follow the SCLP reset with an OS level
|
|
recovery using /sys/bus/devices/<dev>/recover.
|
|
|
|
Signed-off-by: Niklas Schnelle <schnelle@linux.ibm.com>
|
|
Reviewed-by: Jan Hoeppner <hoeppner@linux.ibm.com>
|
|
Signed-off-by: Jan Hoeppner <hoeppner@linux.ibm.com>
|
|
|
|
|
|
Signed-off-by: Jan Hoeppner <hoeppner@linux.ibm.com>
|
|
---
|
|
zpcictl/zpcictl.c | 21 +++++++++++++++++++++
|
|
1 file changed, 21 insertions(+)
|
|
|
|
--- a/zpcictl/zpcictl.c
|
|
+++ b/zpcictl/zpcictl.c
|
|
@@ -163,6 +163,26 @@ static unsigned int sysfs_read_value(str
|
|
return val;
|
|
}
|
|
|
|
+static void sysfs_write_value(struct zpci_device *pdev, const char *attr,
|
|
+ unsigned int val)
|
|
+{
|
|
+ char *path;
|
|
+ FILE *fp;
|
|
+
|
|
+ path = util_path_sysfs("bus/pci/devices/%s/%s", pdev->slot, attr);
|
|
+ fp = fopen(path, "w");
|
|
+ if (!fp)
|
|
+ fopen_err(path);
|
|
+ if (fprintf(fp, "%x", val) < 0) {
|
|
+ fclose(fp);
|
|
+ warnx("Could not write to file %s: %s", path, strerror(errno));
|
|
+ free(path);
|
|
+ exit(EXIT_FAILURE);
|
|
+ }
|
|
+ fclose(fp);
|
|
+ free(path);
|
|
+}
|
|
+
|
|
static void sysfs_write_data(struct zpci_report_error *report, char *slot)
|
|
{
|
|
size_t r_size;
|
|
@@ -297,6 +317,7 @@ static void sclp_issue_action(struct zpc
|
|
static void sclp_reset_device(struct zpci_device *pdev)
|
|
{
|
|
sclp_issue_action(pdev, SCLP_ERRNOTIFY_AQ_RESET);
|
|
+ sysfs_write_value(pdev, "recover", 1);
|
|
}
|
|
|
|
/*
|