diff options
Diffstat (limited to 'arch/s390/pci/pci_event.c')
-rw-r--r-- | arch/s390/pci/pci_event.c | 35 |
1 files changed, 14 insertions, 21 deletions
diff --git a/arch/s390/pci/pci_event.c b/arch/s390/pci/pci_event.c index 0aecaf954845..278e671ec9ac 100644 --- a/arch/s390/pci/pci_event.c +++ b/arch/s390/pci/pci_event.c | |||
@@ -10,6 +10,7 @@ | |||
10 | 10 | ||
11 | #include <linux/kernel.h> | 11 | #include <linux/kernel.h> |
12 | #include <linux/pci.h> | 12 | #include <linux/pci.h> |
13 | #include <asm/pci_debug.h> | ||
13 | 14 | ||
14 | /* Content Code Description for PCI Function Error */ | 15 | /* Content Code Description for PCI Function Error */ |
15 | struct zpci_ccdf_err { | 16 | struct zpci_ccdf_err { |
@@ -41,25 +42,15 @@ struct zpci_ccdf_avail { | |||
41 | u16 pec; /* PCI event code */ | 42 | u16 pec; /* PCI event code */ |
42 | } __packed; | 43 | } __packed; |
43 | 44 | ||
44 | static void zpci_event_log_err(struct zpci_ccdf_err *ccdf) | ||
45 | { | ||
46 | struct zpci_dev *zdev = get_zdev_by_fid(ccdf->fid); | ||
47 | |||
48 | zpci_err("SEI error CCD:\n"); | ||
49 | zpci_err_hex(ccdf, sizeof(*ccdf)); | ||
50 | dev_err(&zdev->pdev->dev, "event code: 0x%x\n", ccdf->pec); | ||
51 | } | ||
52 | |||
53 | static void zpci_event_log_avail(struct zpci_ccdf_avail *ccdf) | 45 | static void zpci_event_log_avail(struct zpci_ccdf_avail *ccdf) |
54 | { | 46 | { |
55 | struct zpci_dev *zdev = get_zdev_by_fid(ccdf->fid); | 47 | struct zpci_dev *zdev = get_zdev_by_fid(ccdf->fid); |
48 | struct pci_dev *pdev = zdev ? zdev->pdev : NULL; | ||
56 | 49 | ||
57 | pr_err("%s%s: availability event: fh: 0x%x fid: 0x%x event code: 0x%x reason:", | 50 | pr_info("%s: Event 0x%x reconfigured PCI function 0x%x\n", |
58 | (zdev) ? dev_driver_string(&zdev->pdev->dev) : "?", | 51 | pdev ? pci_name(pdev) : "n/a", ccdf->pec, ccdf->fid); |
59 | (zdev) ? dev_name(&zdev->pdev->dev) : "?", | 52 | zpci_err("avail CCDF:\n"); |
60 | ccdf->fh, ccdf->fid, ccdf->pec); | 53 | zpci_err_hex(ccdf, sizeof(*ccdf)); |
61 | print_hex_dump(KERN_CONT, "ccdf", DUMP_PREFIX_OFFSET, | ||
62 | 16, 1, ccdf, sizeof(*ccdf), false); | ||
63 | 54 | ||
64 | switch (ccdf->pec) { | 55 | switch (ccdf->pec) { |
65 | case 0x0301: | 56 | case 0x0301: |
@@ -79,14 +70,16 @@ static void zpci_event_log_avail(struct zpci_ccdf_avail *ccdf) | |||
79 | void zpci_event_error(void *data) | 70 | void zpci_event_error(void *data) |
80 | { | 71 | { |
81 | struct zpci_ccdf_err *ccdf = data; | 72 | struct zpci_ccdf_err *ccdf = data; |
82 | struct zpci_dev *zdev; | 73 | struct zpci_dev *zdev = get_zdev_by_fid(ccdf->fid); |
74 | |||
75 | zpci_err("error CCDF:\n"); | ||
76 | zpci_err_hex(ccdf, sizeof(*ccdf)); | ||
83 | 77 | ||
84 | zpci_event_log_err(ccdf); | 78 | if (!zdev) |
85 | zdev = get_zdev_by_fid(ccdf->fid); | ||
86 | if (!zdev) { | ||
87 | pr_err("Error event for unknown fid: %x", ccdf->fid); | ||
88 | return; | 79 | return; |
89 | } | 80 | |
81 | pr_err("%s: Event 0x%x reports an error for PCI function 0x%x\n", | ||
82 | pci_name(zdev->pdev), ccdf->pec, ccdf->fid); | ||
90 | } | 83 | } |
91 | 84 | ||
92 | void zpci_event_availability(void *data) | 85 | void zpci_event_availability(void *data) |