summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/cmd/fm/dicts/PCI.dict6
-rw-r--r--usr/src/cmd/fm/dicts/PCI.po86
-rw-r--r--usr/src/cmd/fm/dicts/PCIEX.dict7
-rw-r--r--usr/src/cmd/fm/dicts/PCIEX.po136
-rw-r--r--usr/src/cmd/fm/eversholt/common/check.c55
-rw-r--r--usr/src/cmd/fm/eversholt/common/esclex.c5
-rw-r--r--usr/src/cmd/fm/eversholt/common/literals.h6
-rw-r--r--usr/src/cmd/fm/eversholt/common/tree.c10
-rw-r--r--usr/src/cmd/fm/eversholt/common/tree.h1
-rw-r--r--usr/src/cmd/fm/eversholt/files/common/pci.esc1435
-rw-r--r--usr/src/cmd/fm/eversholt/files/common/pciex.esc2856
-rw-r--r--usr/src/cmd/fm/eversholt/files/i386/i86pc/amd64.esc579
-rw-r--r--usr/src/cmd/fm/eversholt/files/i386/i86pc/gcpu.esc130
-rw-r--r--usr/src/cmd/fm/eversholt/files/i386/i86pc/gcpu_amd.esc211
-rw-r--r--usr/src/cmd/fm/eversholt/files/i386/i86pc/intel.esc572
-rw-r--r--usr/src/cmd/fm/eversholt/files/sparc/SUNW,Sun-Fire-15000/SUNW,Sun-Fire-15000.esc9
-rw-r--r--usr/src/cmd/fm/eversholt/files/sparc/sun4/fire.esc14
-rw-r--r--usr/src/cmd/fm/eversholt/files/sparc/sun4u/oberon.esc4
-rw-r--r--usr/src/cmd/fm/eversholt/files/sparc/sun4u/psycho.esc4
-rw-r--r--usr/src/cmd/fm/eversholt/files/sparc/sun4u/schizo.esc4
-rw-r--r--usr/src/cmd/fm/eversholt/files/sparc/sun4u/tomatillo.esc4
-rw-r--r--usr/src/cmd/fm/eversholt/files/sparc/sun4u/xmits.esc4
-rw-r--r--usr/src/cmd/fm/fmd/common/fmd_api.c109
-rw-r--r--usr/src/cmd/fm/fmd/common/fmd_asru.c23
-rw-r--r--usr/src/cmd/fm/modules/common/cpumem-retire/cma_main.c7
-rw-r--r--usr/src/cmd/fm/modules/common/eversholt/config.c4
-rw-r--r--usr/src/cmd/fm/modules/common/eversholt/eft.c10
-rw-r--r--usr/src/cmd/fm/modules/common/eversholt/eft.conf9
-rw-r--r--usr/src/cmd/fm/modules/common/eversholt/eval.c91
-rw-r--r--usr/src/cmd/fm/modules/common/eversholt/fme.c433
-rw-r--r--usr/src/cmd/fm/modules/common/eversholt/iexpr.c2
-rw-r--r--usr/src/cmd/fm/modules/common/eversholt/itree.c50
-rw-r--r--usr/src/cmd/fm/modules/common/eversholt/itree.h5
-rw-r--r--usr/src/cmd/fm/modules/common/eversholt/platform.c212
-rw-r--r--usr/src/cmd/fm/modules/common/io-retire/rio_main.c9
-rw-r--r--usr/src/cmd/fm/schemes/cpu/cpu.c86
-rw-r--r--usr/src/cmd/fm/schemes/fmd/scheme.c21
-rw-r--r--usr/src/cmd/fm/schemes/legacy-hc/scheme.c21
-rw-r--r--usr/src/cmd/fm/schemes/mod/amd64/Makefile8
-rw-r--r--usr/src/cmd/fm/schemes/mod/i386/Makefile7
-rw-r--r--usr/src/cmd/fm/schemes/mod/scheme.c140
-rw-r--r--usr/src/cmd/fm/schemes/mod/sparc/Makefile8
-rw-r--r--usr/src/cmd/fm/schemes/mod/sparcv9/Makefile7
-rw-r--r--usr/src/cmd/fm/schemes/pkg/amd64/Makefile8
-rw-r--r--usr/src/cmd/fm/schemes/pkg/i386/Makefile7
-rw-r--r--usr/src/cmd/fm/schemes/pkg/scheme.c121
-rw-r--r--usr/src/cmd/fm/schemes/pkg/sparc/Makefile8
-rw-r--r--usr/src/cmd/fm/schemes/pkg/sparcv9/Makefile7
-rw-r--r--usr/src/lib/fm/topo/libtopo/Makefile.com3
-rw-r--r--usr/src/lib/fm/topo/libtopo/amd64/Makefile4
-rw-r--r--usr/src/lib/fm/topo/libtopo/common/fmd.c155
-rw-r--r--usr/src/lib/fm/topo/libtopo/common/fmd.h46
-rw-r--r--usr/src/lib/fm/topo/libtopo/common/legacy_hc.c216
-rw-r--r--usr/src/lib/fm/topo/libtopo/common/legacy_hc.h46
-rw-r--r--usr/src/lib/fm/topo/libtopo/common/mod.c21
-rw-r--r--usr/src/lib/fm/topo/libtopo/common/pkg.c111
-rw-r--r--usr/src/lib/fm/topo/libtopo/common/zfs.c203
-rw-r--r--usr/src/lib/fm/topo/libtopo/common/zfs.h46
-rw-r--r--usr/src/lib/fm/topo/libtopo/i386/Makefile4
-rw-r--r--usr/src/lib/fm/topo/libtopo/sparc/Makefile2
-rw-r--r--usr/src/lib/fm/topo/libtopo/sparcv9/Makefile2
-rw-r--r--usr/src/lib/fm/topo/modules/i86pc/chip/chip_amd.c11
-rw-r--r--usr/src/uts/common/sys/fm/protocol.h2
63 files changed, 3989 insertions, 4434 deletions
diff --git a/usr/src/cmd/fm/dicts/PCI.dict b/usr/src/cmd/fm/dicts/PCI.dict
index 366692114b..5dc6f01380 100644
--- a/usr/src/cmd/fm/dicts/PCI.dict
+++ b/usr/src/cmd/fm/dicts/PCI.dict
@@ -1,5 +1,5 @@
#
-# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2008 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
# CDDL HEADER START
@@ -40,3 +40,7 @@ fault.io.pci.bus-linkerr fault.io.pci.device-interr=8
fault.io.pci.device-invreq fault.io.pci.device-noresp=9
fault.io.pci.device-interr fault.io.pci.device-invreq=10
fault.io.pci.device-noresp=11
+fault.io.pci.bus-linkerr-unaf fault.io.pci.device-interr-unaf=12
+fault.io.pci.device-interr-corr=13
+fault.io.pci.bus-linkerr-deg fault.io.pci.device-interr-deg=14
+fault.io.pci.device-interr-deg=15
diff --git a/usr/src/cmd/fm/dicts/PCI.po b/usr/src/cmd/fm/dicts/PCI.po
index 0adaffcbf3..42ecf7d38d 100644
--- a/usr/src/cmd/fm/dicts/PCI.po
+++ b/usr/src/cmd/fm/dicts/PCI.po
@@ -1,5 +1,5 @@
#
-# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2008 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
# CDDL HEADER START
@@ -146,13 +146,13 @@ msgstr "Fault"
msgid "PCI-8000-7J.severity"
msgstr "Critical"
msgid "PCI-8000-7J.description"
-msgstr "A problem was detected for a PCI device.\n Refer to %s for more information."
+msgstr "An unrecoverable problem was detected for a PCI device.\n Refer to %s for more information."
msgid "PCI-8000-7J.response"
msgstr "One or more device instances may be disabled\n"
msgid "PCI-8000-7J.impact"
msgstr "Possible loss of services provided by the device instances associated with this fault\n"
msgid "PCI-8000-7J.action"
-msgstr "Schedule a repair procedure to replace the affected device. Use fmdump -v -u <EVENT_ID> to identify the device or contact Sun for support.\n"
+msgstr "Schedule a repair procedure to replace the affected device. Use fmadm faulty to identify the device or contact Sun for support.\n"
#
# code: PCI-8000-8S
# keys: fault.io.pci.bus-linkerr fault.io.pci.device-interr
@@ -162,13 +162,13 @@ msgstr "Fault"
msgid "PCI-8000-8S.severity"
msgstr "Critical"
msgid "PCI-8000-8S.description"
-msgstr "A problem has been detected on the specified bus or on the specified transmitting device.\n Refer to %s for more information."
+msgstr "An unrecoverable problem has been detected on the specified bus or on the specified transmitting device.\n Refer to %s for more information."
msgid "PCI-8000-8S.response"
msgstr "One or more device instances may be disabled\n"
msgid "PCI-8000-8S.impact"
msgstr "Possible loss of services provided by the device instances associated with this fault\n"
msgid "PCI-8000-8S.action"
-msgstr "If a plug-in card is involved check for badly-seated cards or bent pins. Otherwise schedule a repair procedure to replace the affected device. Use fmdump -v -u <EVENT_ID> to identify the device and bus or contact Sun for support.\n"
+msgstr "If a plug-in card is involved check for badly-seated cards or bent pins. Otherwise schedule a repair procedure to replace the affected device. Use fmadm faulty to identify the device and bus or contact Sun for support.\n"
#
# code: PCI-8000-95
# keys: fault.io.pci.device-invreq fault.io.pci.device-noresp
@@ -176,7 +176,7 @@ msgstr "If a plug-in card is involved check for badly-seated cards or bent pins.
msgid "PCI-8000-95.type"
msgstr "Fault"
msgid "PCI-8000-95.severity"
-msgstr "Critical"
+msgstr "Major"
msgid "PCI-8000-95.description"
msgstr "Either the transmitting device sent an invalid request or the receiving device failed to respond.\n Refer to %s for more information."
msgid "PCI-8000-95.response"
@@ -184,7 +184,7 @@ msgstr "One or more device instances may be disabled\n"
msgid "PCI-8000-95.impact"
msgstr "Possible loss of services provided by the device instances associated with this fault\n"
msgid "PCI-8000-95.action"
-msgstr "Ensure that the latest drivers and patches are installed. If a plug-in card is involved check for badly-seated cards or bent pins. Otherwise schedule a repair procedure to replace the affected device(s). Use fmdump -v -u <EVENT_ID> to identify the devices or contact Sun for support.\n"
+msgstr "Ensure that the latest drivers and patches are installed. If a plug-in card is involved check for badly-seated cards or bent pins. Otherwise schedule a repair procedure to replace the affected device(s). Use fmadm faulty to identify the devices or contact Sun for support.\n"
#
# code: PCI-8000-AP
# keys: fault.io.pci.device-interr fault.io.pci.device-invreq
@@ -192,7 +192,7 @@ msgstr "Ensure that the latest drivers and patches are installed. If a plug-in c
msgid "PCI-8000-AP.type"
msgstr "Fault"
msgid "PCI-8000-AP.severity"
-msgstr "Critical"
+msgstr "Major"
msgid "PCI-8000-AP.description"
msgstr "Either the transmitting device sent an invalid request or the receiving device is reporting an internal fault.\n Refer to %s for more information."
msgid "PCI-8000-AP.response"
@@ -200,7 +200,7 @@ msgstr "One or more device instances may be disabled\n"
msgid "PCI-8000-AP.impact"
msgstr "Possible loss of services provided by the device instances associated with this fault\n"
msgid "PCI-8000-AP.action"
-msgstr "Ensure that the latest drivers and patches are installed. Otherwise schedule a repair procedure to replace the affected device(s). Use fmdump -v -u <EVENT_ID> to identify the devices or contact Sun for support.\n"
+msgstr "Ensure that the latest drivers and patches are installed. Otherwise schedule a repair procedure to replace the affected device(s). Use fmadm faulty to identify the devices or contact Sun for support.\n"
#
# code: PCI-8000-CA
# keys: fault.io.pci.device-noresp
@@ -208,7 +208,7 @@ msgstr "Ensure that the latest drivers and patches are installed. Otherwise sch
msgid "PCI-8000-CA.type"
msgstr "Fault"
msgid "PCI-8000-CA.severity"
-msgstr "Critical"
+msgstr "Major"
msgid "PCI-8000-CA.description"
msgstr "A device is failing to respond\n Refer to %s for more information."
msgid "PCI-8000-CA.response"
@@ -216,4 +216,68 @@ msgstr "One or more device instances may be disabled\n"
msgid "PCI-8000-CA.impact"
msgstr "Possible loss of services provided by the device instances associated with this fault\n"
msgid "PCI-8000-CA.action"
-msgstr "Schedule a repair procedure to replace the affected device.\n\nUse fmdump -v -u <EVENT_ID> to identify the device or contact Sun for support.\n"
+msgstr "Schedule a repair procedure to replace the affected device. Use fmadm faulty to identify the device or contact Sun for support.\n"
+#
+# code: PCI-8000-DH
+# keys: fault.io.pci.bus-linkerr-unaf fault.io.pci.device-interr-unaf
+#
+msgid "PCI-8000-DH.type"
+msgstr "Fault"
+msgid "PCI-8000-DH.severity"
+msgstr "Major"
+msgid "PCI-8000-DH.description"
+msgstr "Too many recovered bus faults have been detected, which indicates a problem with the specified bus or with the specified transmitting device. This may degrade into an unrecoverable fault.\n Refer to %s for more information."
+msgid "PCI-8000-DH.response"
+msgstr "One or more device instances may be disabled\n"
+msgid "PCI-8000-DH.impact"
+msgstr "Possible loss of services provided by the device instances associated with this fault\n"
+msgid "PCI-8000-DH.action"
+msgstr "If a plug-in card is involved check for badly-seated cards or bent pins. Otherwise schedule a repair procedure to replace the affected device. Use fmadm faulty to identify the device and bus or contact Sun for support.\n"
+#
+# code: PCI-8000-ED
+# keys: fault.io.pci.device-interr-corr
+#
+msgid "PCI-8000-ED.type"
+msgstr "Fault"
+msgid "PCI-8000-ED.severity"
+msgstr "Major"
+msgid "PCI-8000-ED.description"
+msgstr "Too many recovered internal faults have been detected within the specified PCI device. This may degrade into a non-recoverable fault.\n Refer to %s for more information."
+msgid "PCI-8000-ED.response"
+msgstr "One or more device instances may be disabled\n"
+msgid "PCI-8000-ED.impact"
+msgstr "Possible loss of services provided by the device instances associated with this fault\n"
+msgid "PCI-8000-ED.action"
+msgstr "Schedule a repair procedure to replace the affected device. Use fmadm faulty to identify the device or contact Sun for support.\n"
+#
+# code: PCI-8000-FY
+# keys: fault.io.pci.bus-linkerr-deg fault.io.pci.device-interr-deg
+#
+msgid "PCI-8000-FY.type"
+msgstr "Fault"
+msgid "PCI-8000-FY.severity"
+msgstr "Major"
+msgid "PCI-8000-FY.description"
+msgstr "An unrecoverable problem has been detected on the specified bus or on the specified transmitting device, which has resulted in that device running in a degraded state.\n Refer to %s for more information."
+msgid "PCI-8000-FY.response"
+msgstr "None\n"
+msgid "PCI-8000-FY.impact"
+msgstr "Degraded services provided by the device instances associated with this fault\n"
+msgid "PCI-8000-FY.action"
+msgstr "If a plug-in card is involved check for badly-seated cards or bent pins. Otherwise schedule a repair procedure to replace the affected device. Use fmadm faulty to identify the device and bus or contact Sun for support.\n"
+#
+# code: PCI-8000-G3
+# keys: fault.io.pci.device-interr-deg
+#
+msgid "PCI-8000-G3.type"
+msgstr "Fault"
+msgid "PCI-8000-G3.severity"
+msgstr "Major"
+msgid "PCI-8000-G3.description"
+msgstr "An unrecoverable problem was detected for a PCI device, which has resulted in that device running in a degraded state.\n Refer to %s for more information."
+msgid "PCI-8000-G3.response"
+msgstr "None\n"
+msgid "PCI-8000-G3.impact"
+msgstr "Degraded services provided by the device instances associated with this fault\n"
+msgid "PCI-8000-G3.action"
+msgstr "Schedule a repair procedure to replace the affected device. Use fmadm faulty to identify the device or contact Sun for support.\n"
diff --git a/usr/src/cmd/fm/dicts/PCIEX.dict b/usr/src/cmd/fm/dicts/PCIEX.dict
index 2d8a68633f..21cc870ad8 100644
--- a/usr/src/cmd/fm/dicts/PCIEX.dict
+++ b/usr/src/cmd/fm/dicts/PCIEX.dict
@@ -1,5 +1,5 @@
#
-# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2008 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
# CDDL HEADER START
@@ -45,3 +45,8 @@ fault.io.pciex.bus-linkerr fault.io.pciex.bus-noresp fault.io.pciex.device-inter
fault.io.pciex.bus-linkerr fault.io.pciex.bus-noresp fault.io.pciex.device-interr fault.io.pciex.device-invreq fault.io.pciex.device-noresp=14
fault.io.pciex.bus-noresp fault.io.pciex.device-interr fault.io.pciex.device-invreq fault.io.pciex.device-noresp=15
fault.io.pciex.bus-noresp fault.io.pciex.device-interr=16
+fault.io.pciex.device-interr-corr=17
+fault.io.pciex.bus-linkerr-corr fault.io.pciex.device-interr-corr=18
+fault.io.pci.bus-linkerr-unaf fault.io.pciex.device-interr-unaf=19
+fault.io.pciex.device-interr-unaf=20
+fault.io.pciex.device-interr-deg=21
diff --git a/usr/src/cmd/fm/dicts/PCIEX.po b/usr/src/cmd/fm/dicts/PCIEX.po
index 5d42cc40af..44e894e718 100644
--- a/usr/src/cmd/fm/dicts/PCIEX.po
+++ b/usr/src/cmd/fm/dicts/PCIEX.po
@@ -1,5 +1,5 @@
#
-# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2008 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
# CDDL HEADER START
@@ -40,7 +40,7 @@ msgstr "One or more device instances may be disabled\n"
msgid "PCIEX-8000-0A.impact"
msgstr "Loss of services provided by the device instances associated with this fault\n"
msgid "PCIEX-8000-0A.action"
-msgstr "Schedule a repair procedure to replace the affected device. Use fmdump -v -u <EVENT_ID> to identify the device or contact Sun for support.\n"
+msgstr "Schedule a repair procedure to replace the affected device. Use fmadm faulty to identify the device or contact Sun for support.\n"
#
# code: PCIEX-8000-1P
# keys: fault.io.pciex.device-interr fault.io.pciex.device-invreq
@@ -48,7 +48,7 @@ msgstr "Schedule a repair procedure to replace the affected device. Use fmdump
msgid "PCIEX-8000-1P.type"
msgstr "Fault"
msgid "PCIEX-8000-1P.severity"
-msgstr "Critical"
+msgstr "Major"
msgid "PCIEX-8000-1P.description"
msgstr "Either the transmitting device sent an invalid request or the receiving device is reporting an internal fault.\n Refer to %s for more information."
msgid "PCIEX-8000-1P.response"
@@ -56,7 +56,7 @@ msgstr "One or more device instances may be disabled\n"
msgid "PCIEX-8000-1P.impact"
msgstr "Loss of services provided by the device instances associated with this fault\n"
msgid "PCIEX-8000-1P.action"
-msgstr "Ensure that the latest drivers and patches are installed. Otherwise schedule a repair procedure to replace the affected device(s). Use fmdump -v -u <EVENT_ID> to identify the devices or contact Sun for support.\n"
+msgstr "Ensure that the latest drivers and patches are installed. Otherwise schedule a repair procedure to replace the affected device(s). Use fmadm faulty to identify the devices or contact Sun for support.\n"
#
# code: PCIEX-8000-25
# keys: fault.io.pciex.bus-noresp fault.io.pciex.device-noresp
@@ -72,7 +72,7 @@ msgstr "One or more device instances may be disabled\n"
msgid "PCIEX-8000-25.impact"
msgstr "Loss of services provided by the device instances associated with this fault\n"
msgid "PCIEX-8000-25.action"
-msgstr "If a plug-in card is involved check for badly-seated cards or bent pins. Otherwise schedule a repair procedure to replace the affected device(s). Use fmdump -v -u <EVENT_ID> to identify the devices or contact Sun for support.\n"
+msgstr "If a plug-in card is involved check for badly-seated cards or bent pins. Otherwise schedule a repair procedure to replace the affected device(s). Use fmadm faulty to identify the devices or contact Sun for support.\n"
#
# code: PCIEX-8000-3S
# keys: fault.io.pciex.bus-linkerr fault.io.pciex.device-interr
@@ -88,7 +88,7 @@ msgstr "One or more device instances may be disabled\n"
msgid "PCIEX-8000-3S.impact"
msgstr "Loss of services provided by the device instances associated with this fault\n"
msgid "PCIEX-8000-3S.action"
-msgstr "If a plug-in card is involved check for badly-seated cards or bent pins. Otherwise schedule a repair procedure to replace the affected device(s). Use fmdump -v -u <EVENT_ID> to identify the devices or contact Sun for support.\n"
+msgstr "If a plug-in card is involved check for badly-seated cards or bent pins. Otherwise schedule a repair procedure to replace the affected device(s). Use fmadm faulty to identify the devices or contact Sun for support.\n"
#
# code: PCIEX-8000-43
# keys: fault.io.pci.bus-linkerr fault.io.pciex.device-interr
@@ -104,7 +104,7 @@ msgstr "One or more device instances may be disabled\n"
msgid "PCIEX-8000-43.impact"
msgstr "Loss of services provided by the device instances associated with this fault\n"
msgid "PCIEX-8000-43.action"
-msgstr "If a plug-in card is involved check for badly-seated cards or bent pins. Otherwise schedule a repair procedure to replace the affected device. Use fmdump -v -u <EVENT_ID> to identify the device and bus or contact Sun for support.\n"
+msgstr "If a plug-in card is involved check for badly-seated cards or bent pins. Otherwise schedule a repair procedure to replace the affected device. Use fmadm faulty to identify the device and bus or contact Sun for support.\n"
#
# code: PCIEX-8000-5Y
# keys: fault.io.pci.device-invreq
@@ -112,7 +112,7 @@ msgstr "If a plug-in card is involved check for badly-seated cards or bent pins.
msgid "PCIEX-8000-5Y.type"
msgstr "Fault"
msgid "PCIEX-8000-5Y.severity"
-msgstr "Critical"
+msgstr "Major"
msgid "PCIEX-8000-5Y.description"
msgstr "The transmitting device sent an invalid request.\n Refer to %s for more information."
msgid "PCIEX-8000-5Y.response"
@@ -120,7 +120,7 @@ msgstr "One or more device instances may be disabled\n"
msgid "PCIEX-8000-5Y.impact"
msgstr "Loss of services provided by the device instances associated with this fault\n"
msgid "PCIEX-8000-5Y.action"
-msgstr "Ensure that the latest drivers and patches are installed. Otherwise schedule a repair procedure to replace the affected device(s). Use fmdump -v -u <EVENT_ID> to identify the devices or contact Sun for support.\n"
+msgstr "Ensure that the latest drivers and patches are installed. Otherwise schedule a repair procedure to replace the affected device(s). Use fmadm faulty to identify the devices or contact Sun for support.\n"
#
# code: PCIEX-8000-6D
# keys: fault.io.pci.device-invreq fault.io.pciex.device-interr
@@ -128,7 +128,7 @@ msgstr "Ensure that the latest drivers and patches are installed. Otherwise sche
msgid "PCIEX-8000-6D.type"
msgstr "Fault"
msgid "PCIEX-8000-6D.severity"
-msgstr "Critical"
+msgstr "Major"
msgid "PCIEX-8000-6D.description"
msgstr "Either the transmitting device sent an invalid request or the receiving device is reporting an internal fault.\n Refer to %s for more information."
msgid "PCIEX-8000-6D.response"
@@ -136,7 +136,7 @@ msgstr "One or more device instances may be disabled\n"
msgid "PCIEX-8000-6D.impact"
msgstr "Loss of services provided by the device instances associated with this fault\n"
msgid "PCIEX-8000-6D.action"
-msgstr "Ensure that the latest drivers and patches are installed. Otherwise schedule a repair procedure to replace the affected device(s). Use fmdump -v -u <EVENT_ID> to identify the devices or contact Sun for support.\n"
+msgstr "Ensure that the latest drivers and patches are installed. Otherwise schedule a repair procedure to replace the affected device(s). Use fmadm faulty to identify the devices or contact Sun for support.\n"
#
# code: PCIEX-8000-7H
# keys: fault.io.pci.device-interr fault.io.pciex.device-invreq
@@ -144,7 +144,7 @@ msgstr "Ensure that the latest drivers and patches are installed. Otherwise sch
msgid "PCIEX-8000-7H.type"
msgstr "Fault"
msgid "PCIEX-8000-7H.severity"
-msgstr "Critical"
+msgstr "Major"
msgid "PCIEX-8000-7H.description"
msgstr "Either the transmitting device sent an invalid request or the receiving device is reporting an internal fault.\n Refer to %s for more information."
msgid "PCIEX-8000-7H.response"
@@ -152,7 +152,7 @@ msgstr "One or more device instances may be disabled\n"
msgid "PCIEX-8000-7H.impact"
msgstr "Loss of services provided by the device instances associated with this fault\n"
msgid "PCIEX-8000-7H.action"
-msgstr "Ensure that the latest drivers and patches are installed. Otherwise schedule a repair procedure to replace the affected device(s). Use fmdump -v -u <EVENT_ID> to identify the devices or contact Sun for support.\n"
+msgstr "Ensure that the latest drivers and patches are installed. Otherwise schedule a repair procedure to replace the affected device(s). Use fmadm faulty to identify the devices or contact Sun for support.\n"
#
# code: PCIEX-8000-8R
# keys: fault.io.pciex.device-invreq
@@ -160,7 +160,7 @@ msgstr "Ensure that the latest drivers and patches are installed. Otherwise sch
msgid "PCIEX-8000-8R.type"
msgstr "Fault"
msgid "PCIEX-8000-8R.severity"
-msgstr "Critical"
+msgstr "Major"
msgid "PCIEX-8000-8R.description"
msgstr "The transmitting device sent an invalid request.\n Refer to %s for more information."
msgid "PCIEX-8000-8R.response"
@@ -168,7 +168,7 @@ msgstr "One or more device instances may be disabled\n"
msgid "PCIEX-8000-8R.impact"
msgstr "Loss of services provided by the device instances associated with this fault\n"
msgid "PCIEX-8000-8R.action"
-msgstr "Ensure that the latest drivers and patches are installed. Otherwise schedule a repair procedure to replace the affected device(s). Use fmdump -v -u <EVENT_ID> to identify the devices or contact Sun for support.\n"
+msgstr "Ensure that the latest drivers and patches are installed. Otherwise schedule a repair procedure to replace the affected device(s). Use fmadm faulty to identify the devices or contact Sun for support.\n"
#
# code: PCIEX-8000-94
# keys: fault.io.pci.device-noresp fault.io.pciex.device-invreq
@@ -176,7 +176,7 @@ msgstr "Ensure that the latest drivers and patches are installed. Otherwise sche
msgid "PCIEX-8000-94.type"
msgstr "Fault"
msgid "PCIEX-8000-94.severity"
-msgstr "Critical"
+msgstr "Major"
msgid "PCIEX-8000-94.description"
msgstr "Either the transmitting device sent an invalid request or the receiving device failed to respond.\n Refer to %s for more information."
msgid "PCIEX-8000-94.response"
@@ -184,7 +184,7 @@ msgstr "One or more device instances may be disabled\n"
msgid "PCIEX-8000-94.impact"
msgstr "Loss of services provided by the device instances associated with this fault\n"
msgid "PCIEX-8000-94.action"
-msgstr "Ensure that the latest drivers and patches are installed. If a plug-in card is involved check for badly-seated cards or bent pins. Otherwise schedule a repair procedure to replace the affected device(s). Use fmdump -v -u <EVENT_ID> to identify the devices or contact Sun for support.\n"
+msgstr "Ensure that the latest drivers and patches are installed. If a plug-in card is involved check for badly-seated cards or bent pins. Otherwise schedule a repair procedure to replace the affected device(s). Use fmadm faulty to identify the devices or contact Sun for support.\n"
#
# code: PCIEX-8000-AQ
# keys: fault.io.pci.device-invreq fault.io.pciex.device-noresp
@@ -192,7 +192,7 @@ msgstr "Ensure that the latest drivers and patches are installed. If a plug-in c
msgid "PCIEX-8000-AQ.type"
msgstr "Fault"
msgid "PCIEX-8000-AQ.severity"
-msgstr "Critical"
+msgstr "Major"
msgid "PCIEX-8000-AQ.description"
msgstr "Either the transmitting device sent an invalid request or the receiving device failed to respond.\n Refer to %s for more information."
msgid "PCIEX-8000-AQ.response"
@@ -200,7 +200,7 @@ msgstr "One or more device instances may be disabled\n"
msgid "PCIEX-8000-AQ.impact"
msgstr "Loss of services provided by the device instances associated with this fault\n"
msgid "PCIEX-8000-AQ.action"
-msgstr "Ensure that the latest drivers and patches are installed. If a plug-in card is involved check for badly-seated cards or bent pins. Otherwise schedule a repair procedure to replace the affected device(s). Use fmdump -v -u <EVENT_ID> to identify the devices or contact Sun for support.\n"
+msgstr "Ensure that the latest drivers and patches are installed. If a plug-in card is involved check for badly-seated cards or bent pins. Otherwise schedule a repair procedure to replace the affected device(s). Use fmadm faulty to identify the devices or contact Sun for support.\n"
#
# code: PCIEX-8000-CC
# keys: fault.io.pci.bus-linkerr fault.io.pci.device-interr fault.io.pciex.device-interr
@@ -216,7 +216,7 @@ msgstr "One or more device instances may be disabled\n"
msgid "PCIEX-8000-CC.impact"
msgstr "Loss of services provided by the device instances associated with this fault\n"
msgid "PCIEX-8000-CC.action"
-msgstr "If a plug-in card is involved check for badly-seated cards or bent pins. Otherwise schedule a repair procedure to replace the affected device(s). Use fmdump -v -u <EVENT_ID> to identify the devices or contact Sun for support.\n"
+msgstr "If a plug-in card is involved check for badly-seated cards or bent pins. Otherwise schedule a repair procedure to replace the affected device(s). Use fmadm faulty to identify the devices or contact Sun for support.\n"
#
# code: PCIEX-8000-DJ
# keys: fault.io.pciex.bus-noresp fault.io.pciex.device-interr fault.io.pciex.device-noresp
@@ -224,7 +224,7 @@ msgstr "If a plug-in card is involved check for badly-seated cards or bent pins.
msgid "PCIEX-8000-DJ.type"
msgstr "Fault"
msgid "PCIEX-8000-DJ.severity"
-msgstr "Critical"
+msgstr "Major"
msgid "PCIEX-8000-DJ.description"
msgstr "A problem has been detected on one of the specified devices or on one of the specified connecting buses.\n Refer to %s for more information."
msgid "PCIEX-8000-DJ.response"
@@ -232,7 +232,7 @@ msgstr "One or more device instances may be disabled\n"
msgid "PCIEX-8000-DJ.impact"
msgstr "Loss of services provided by the device instances associated with this fault\n"
msgid "PCIEX-8000-DJ.action"
-msgstr "If a plug-in card is involved check for badly-seated cards or bent pins. Otherwise schedule a repair procedure to replace the affected device(s). Use fmdump -v -u <EVENT_ID> to identify the devices or contact Sun for support.\n"
+msgstr "If a plug-in card is involved check for badly-seated cards or bent pins. Otherwise schedule a repair procedure to replace the affected device(s). Use fmadm faulty to identify the devices or contact Sun for support.\n"
#
# code: PCIEX-8000-EE
# keys: fault.io.pciex.bus-linkerr fault.io.pciex.bus-noresp fault.io.pciex.device-interr fault.io.pciex.device-noresp
@@ -248,7 +248,7 @@ msgstr "One or more device instances may be disabled\n"
msgid "PCIEX-8000-EE.impact"
msgstr "Loss of services provided by the device instances associated with this fault\n"
msgid "PCIEX-8000-EE.action"
-msgstr "If a plug-in card is involved check for badly-seated cards or bent pins. Otherwise schedule a repair procedure to replace the affected device(s). Use fmdump -v -u <EVENT_ID> to identify the devices or contact Sun for support.\n"
+msgstr "If a plug-in card is involved check for badly-seated cards or bent pins. Otherwise schedule a repair procedure to replace the affected device(s). Use fmadm faulty to identify the devices or contact Sun for support.\n"
#
# code: PCIEX-8000-FX
# keys: fault.io.pciex.bus-linkerr fault.io.pciex.bus-noresp fault.io.pciex.device-interr fault.io.pciex.device-invreq fault.io.pciex.device-noresp
@@ -264,7 +264,7 @@ msgstr "One or more device instances may be disabled\n"
msgid "PCIEX-8000-FX.impact"
msgstr "Loss of services provided by the device instances associated with this fault\n"
msgid "PCIEX-8000-FX.action"
-msgstr "Ensure that the latest drivers and patches are installed. If a plug-in card is involved check for badly-seated cards or bent pins. Otherwise schedule a repair procedure to replace the affected device(s). Use fmdump -v -u <EVENT_ID> to identify the devices or contact Sun for support.\n"
+msgstr "Ensure that the latest drivers and patches are installed. If a plug-in card is involved check for badly-seated cards or bent pins. Otherwise schedule a repair procedure to replace the affected device(s). Use fmadm faulty to identify the devices or contact Sun for support.\n"
#
# code: PCIEX-8000-G2
# keys: fault.io.pciex.bus-noresp fault.io.pciex.device-interr fault.io.pciex.device-invreq fault.io.pciex.device-noresp
@@ -272,7 +272,7 @@ msgstr "Ensure that the latest drivers and patches are installed. If a plug-in c
msgid "PCIEX-8000-G2.type"
msgstr "Fault"
msgid "PCIEX-8000-G2.severity"
-msgstr "Critical"
+msgstr "Major"
msgid "PCIEX-8000-G2.description"
msgstr "A problem has been detected on one of the specified devices or on one of the specified connecting buses.\n Refer to %s for more information."
msgid "PCIEX-8000-G2.response"
@@ -280,7 +280,7 @@ msgstr "One or more device instances may be disabled\n"
msgid "PCIEX-8000-G2.impact"
msgstr "Loss of services provided by the device instances associated with this fault\n"
msgid "PCIEX-8000-G2.action"
-msgstr "Ensure that the latest drivers and patches are installed. Otherwise schedule a repair procedure to replace the affected device(s). Use fmdump -v -u <EVENT_ID> to identify the devices or contact Sun for support.\n"
+msgstr "Ensure that the latest drivers and patches are installed. Otherwise schedule a repair procedure to replace the affected device(s). Use fmadm faulty to identify the devices or contact Sun for support.\n"
#
# code: PCIEX-8000-HS
# keys: fault.io.pciex.bus-noresp fault.io.pciex.device-interr
@@ -288,7 +288,7 @@ msgstr "Ensure that the latest drivers and patches are installed. Otherwise sche
msgid "PCIEX-8000-HS.type"
msgstr "Fault"
msgid "PCIEX-8000-HS.severity"
-msgstr "Critical"
+msgstr "Major"
msgid "PCIEX-8000-HS.description"
msgstr "A problem has been detected on one of the specified devices or on one of the specified connecting buses.\n Refer to %s for more information."
msgid "PCIEX-8000-HS.response"
@@ -296,4 +296,84 @@ msgstr "One or more device instances may be disabled\n"
msgid "PCIEX-8000-HS.impact"
msgstr "Loss of services provided by the device instances associated with this fault\n"
msgid "PCIEX-8000-HS.action"
-msgstr "If a plug-in card is involved check for badly-seated cards or bent pins. Otherwise schedule a repair procedure to replace the affected device(s). Use fmdump -v -u <EVENT_ID> to identify the devices or contact Sun for support.\n"
+msgstr "If a plug-in card is involved check for badly-seated cards or bent pins. Otherwise schedule a repair procedure to replace the affected device(s). Use fmadm faulty to identify the devices or contact Sun for support.\n"
+#
+# code: PCIEX-8000-J5
+# keys: fault.io.pciex.device-interr-corr
+#
+msgid "PCIEX-8000-J5.type"
+msgstr "Fault"
+msgid "PCIEX-8000-J5.severity"
+msgstr "Major"
+msgid "PCIEX-8000-J5.description"
+msgstr "Too many recovered internal errors have been detected within the specified PCIEX device. This may degrade into a non-recoverable fault.\n Refer to %s for more information."
+msgid "PCIEX-8000-J5.response"
+msgstr "One or more device instances may be disabled\n"
+msgid "PCIEX-8000-J5.impact"
+msgstr "Loss of services provided by the device instances associated with this fault\n"
+msgid "PCIEX-8000-J5.action"
+msgstr "Schedule a repair procedure to replace the affected device. Use fmadm faulty to identify the device or contact Sun for support.\n"
+#
+# code: PCIEX-8000-KP
+# keys: fault.io.pciex.bus-linkerr-corr fault.io.pciex.device-interr-corr
+#
+msgid "PCIEX-8000-KP.type"
+msgstr "Fault"
+msgid "PCIEX-8000-KP.severity"
+msgstr "Major"
+msgid "PCIEX-8000-KP.description"
+msgstr "Too many recovered bus errors have been detected, which indicates a problem with the specified bus or with the specified transmitting device. This may degrade into an unrecoverable fault.\n Refer to %s for more information."
+msgid "PCIEX-8000-KP.response"
+msgstr "One or more device instances may be disabled\n"
+msgid "PCIEX-8000-KP.impact"
+msgstr "Loss of services provided by the device instances associated with this fault\n"
+msgid "PCIEX-8000-KP.action"
+msgstr "If a plug-in card is involved check for badly-seated cards or bent pins. Otherwise schedule a repair procedure to replace the affected device. Use fmadm faulty to identify the device or contact Sun for support.\n"
+#
+# code: PCIEX-8000-LA
+# keys: fault.io.pci.bus-linkerr-unaf fault.io.pciex.device-interr-unaf
+#
+msgid "PCIEX-8000-LA.type"
+msgstr "Fault"
+msgid "PCIEX-8000-LA.severity"
+msgstr "Major"
+msgid "PCIEX-8000-LA.description"
+msgstr "Too many recovered bus errors have been detected, which indicates a problem with the specified bus or with the specified transmitting device. This may degrade into an unrecoverable fault.\n Refer to %s for more information."
+msgid "PCIEX-8000-LA.response"
+msgstr "One or more device instances may be disabled\n"
+msgid "PCIEX-8000-LA.impact"
+msgstr "Loss of services provided by the device instances associated with this fault\n"
+msgid "PCIEX-8000-LA.action"
+msgstr "If a plug-in card is involved check for badly-seated cards or bent pins. Otherwise schedule a repair procedure to replace the affected device. Use fmadm faulty to identify the device and bus or contact Sun for support.\n"
+#
+# code: PCIEX-8000-MH
+# keys: fault.io.pciex.device-interr-unaf
+#
+msgid "PCIEX-8000-MH.type"
+msgstr "Fault"
+msgid "PCIEX-8000-MH.severity"
+msgstr "Major"
+msgid "PCIEX-8000-MH.description"
+msgstr "Too many recovered errors have been detected, which indicates a problem with the specified PCIEX device. This may degrade into an unrecoverable fault.\n Refer to %s for more information."
+msgid "PCIEX-8000-MH.response"
+msgstr "One or more device instances may be disabled\n"
+msgid "PCIEX-8000-MH.impact"
+msgstr "Loss of services provided by the device instances associated with this fault\n"
+msgid "PCIEX-8000-MH.action"
+msgstr "Schedule a repair procedure to replace the affected device. Use fmadm faulty to identify the device or contact Sun for support.\n"
+#
+# code: PCIEX-8000-ND
+# keys: fault.io.pciex.device-interr-deg
+#
+msgid "PCIEX-8000-ND.type"
+msgstr "Fault"
+msgid "PCIEX-8000-ND.severity"
+msgstr "Major"
+msgid "PCIEX-8000-ND.description"
+msgstr "An unrecoverable problem was detected for a PCIEX device, which has resulted in that device running in a degraded state.\n Refer to %s for more information."
+msgid "PCIEX-8000-ND.response"
+msgstr "None\n"
+msgid "PCIEX-8000-ND.impact"
+msgstr "Degraded services provided by the device instances associated with this fault\n"
+msgid "PCIEX-8000-ND.action"
+msgstr "Schedule a repair procedure to replace the affected device. Use fmadm faulty to identify the device or contact Sun for support.\n"
diff --git a/usr/src/cmd/fm/eversholt/common/check.c b/usr/src/cmd/fm/eversholt/common/check.c
index c91c48edd0..e297a3feaa 100644
--- a/usr/src/cmd/fm/eversholt/common/check.c
+++ b/usr/src/cmd/fm/eversholt/common/check.c
@@ -69,22 +69,26 @@ static struct {
int (*checker)(enum nodetype t, const char *s, struct node *np);
int outflags;
} Allowednames[] = {
- { T_FAULT, "FITrate", 1, check_num_func, O_ERR },
+ { T_FAULT, "FITrate", 0, check_num_func, O_ERR },
{ T_FAULT, "FRU", 0, check_fru_asru, O_ERR },
{ T_FAULT, "ASRU", 0, check_fru_asru, O_ERR },
{ T_FAULT, "message", 0, check_num_func, O_ERR },
+ { T_FAULT, "retire", 0, check_num_func, O_ERR },
+ { T_FAULT, "response", 0, check_num_func, O_ERR },
{ T_FAULT, "action", 0, check_action, O_ERR },
{ T_FAULT, "count", 0, check_count, O_ERR },
+ { T_FAULT, "engine", 0, check_engine, O_ERR },
{ T_UPSET, "engine", 0, check_engine, O_ERR },
{ T_DEFECT, "FRU", 0, check_fru_asru, O_ERR },
{ T_DEFECT, "ASRU", 0, check_fru_asru, O_ERR },
+ { T_DEFECT, "engine", 0, check_engine, O_ERR },
{ T_EREPORT, "poller", 0, check_id, O_ERR },
{ T_EREPORT, "delivery", 0, check_timeval, O_ERR },
{ T_EREPORT, "discard_if_config_unknown", 0, check_num, O_ERR },
{ T_SERD, "N", 1, check_num, O_ERR },
{ T_SERD, "T", 1, check_timeval, O_ERR },
- { T_SERD, "method", 1, check_serd_method, O_ERR },
- { T_SERD, "trip", 1, check_reportlist, O_ERR },
+ { T_SERD, "method", 0, check_serd_method, O_ERR },
+ { T_SERD, "trip", 0, check_reportlist, O_ERR },
{ T_SERD, "FRU", 0, check_fru_asru, O_ERR },
{ T_SERD, "id", 0, check_serd_id, O_ERR },
{ T_ERROR, "ASRU", 0, check_fru_asru, O_ERR },
@@ -1092,33 +1096,39 @@ check_func(struct node *np)
np->u.func.s);
}
} else if (np->u.func.s == L_is_on) {
- if (arglist->t == T_FUNC &&
+ if (arglist->t == T_NAME ||
+ (arglist->t == T_FUNC &&
(arglist->u.func.s == L_fru ||
- arglist->u.func.s == L_asru)) {
- check_func(arglist);
+ arglist->u.func.s == L_asru))) {
+ if (arglist->t == T_FUNC)
+ check_func(arglist);
} else {
outfl(O_ERR, arglist->file, arglist->line,
- "argument to is_on() must be a call to "
+ "argument to is_on() must be a path or a call to "
"fru() or asru()");
}
} else if (np->u.func.s == L_is_present) {
- if (arglist->t == T_FUNC &&
+ if (arglist->t == T_NAME ||
+ (arglist->t == T_FUNC &&
(arglist->u.func.s == L_fru ||
- arglist->u.func.s == L_asru)) {
- check_func(arglist);
+ arglist->u.func.s == L_asru))) {
+ if (arglist->t == T_FUNC)
+ check_func(arglist);
} else {
outfl(O_ERR, arglist->file, arglist->line,
- "argument to is_present() must be a call to "
- "fru() or asru()");
+ "argument to is_present() must be a path or a call "
+ "to fru() or asru()");
}
} else if (np->u.func.s == L_is_type) {
- if (arglist->t == T_FUNC &&
+ if (arglist->t == T_NAME ||
+ (arglist->t == T_FUNC &&
(arglist->u.func.s == L_fru ||
- arglist->u.func.s == L_asru)) {
- check_func(arglist);
+ arglist->u.func.s == L_asru))) {
+ if (arglist->t == T_FUNC)
+ check_func(arglist);
} else {
outfl(O_ERR, arglist->file, arglist->line,
- "argument to is_type() must be a call to "
+ "argument to is_type() must be a path or a call to "
"fru() or asru()");
}
} else if (np->u.func.s == L_confcall) {
@@ -1131,14 +1141,16 @@ check_func(struct node *np)
} else if (np->u.func.s == L_confprop ||
np->u.func.s == L_confprop_defined) {
if (arglist->t == T_LIST &&
+ (arglist->u.expr.left->t == T_NAME ||
(arglist->u.expr.left->t == T_FUNC &&
(arglist->u.expr.left->u.func.s == L_fru ||
- arglist->u.expr.left->u.func.s == L_asru)) &&
+ arglist->u.expr.left->u.func.s == L_asru))) &&
arglist->u.expr.right->t == T_QUOTE) {
- check_func(arglist->u.expr.left);
+ if (arglist->u.expr.left->t == T_FUNC)
+ check_func(arglist->u.expr.left);
} else {
outfl(O_ERR, arglist->file, arglist->line,
- "%s(): first argument must be a call to "
+ "%s(): first argument must be a path or a call to "
"fru() or asru(); "
"second argument must be a string", np->u.func.s);
}
@@ -1179,6 +1191,11 @@ check_func(struct node *np)
"first arg must be a string, "
"second arg a value");
}
+ } else if (np->u.func.s == L_setserdn || np->u.func.s == L_setserdt ||
+ np->u.func.s == L_setserdsuffix || np->u.func.s ==
+ L_setserdincrement) {
+ if (arglist->t == T_FUNC)
+ check_func(arglist);
} else if (np->u.func.s == L_envprop) {
if (arglist->t != T_QUOTE)
outfl(O_ERR, arglist->file, arglist->line,
diff --git a/usr/src/cmd/fm/eversholt/common/esclex.c b/usr/src/cmd/fm/eversholt/common/esclex.c
index 3381795c5e..5f1869080f 100644
--- a/usr/src/cmd/fm/eversholt/common/esclex.c
+++ b/usr/src/cmd/fm/eversholt/common/esclex.c
@@ -114,6 +114,11 @@ static const struct {
*/
{ "is_connected", PATHFUNC },
{ "is_under", PATHFUNC },
+ { "is_on", PATHFUNC },
+ { "is_present", PATHFUNC },
+ { "is_type", PATHFUNC },
+ { "confprop", PATHFUNC },
+ { "confprop_defined", PATHFUNC },
};
/*
diff --git a/usr/src/cmd/fm/eversholt/common/literals.h b/usr/src/cmd/fm/eversholt/common/literals.h
index 509c827f28..9dd790d68b 100644
--- a/usr/src/cmd/fm/eversholt/common/literals.h
+++ b/usr/src/cmd/fm/eversholt/common/literals.h
@@ -124,6 +124,8 @@ L_DECL(FITrate);
L_DECL(FRU);
L_DECL(id);
L_DECL(message);
+L_DECL(retire);
+L_DECL(response);
L_DECL(FRUID);
L_DECL(N);
L_DECL(T);
@@ -158,6 +160,10 @@ L_DECL(payloadprop);
L_DECL(payloadprop_contains);
L_DECL(payloadprop_defined);
L_DECL(setpayloadprop);
+L_DECL(setserdsuffix);
+L_DECL(setserdincrement);
+L_DECL(setserdn);
+L_DECL(setserdt);
L_DECL(envprop);
L_DECL(is_connected);
L_DECL(is_under);
diff --git a/usr/src/cmd/fm/eversholt/common/tree.c b/usr/src/cmd/fm/eversholt/common/tree.c
index 1e89dcdb16..72c5f23f0b 100644
--- a/usr/src/cmd/fm/eversholt/common/tree.c
+++ b/usr/src/cmd/fm/eversholt/common/tree.c
@@ -1096,6 +1096,10 @@ tree_decl(enum nodetype t, struct node *np, struct node *nvpairs,
case N_FAULT:
ret = dodecl(T_FAULT, file, line, np, nvpairs,
&Faults, Faultcount, 0);
+
+ /* increment serd statement reference */
+ decl = tree_event2np_lut_lookup(Faults, np);
+ update_serd_refstmt(NULL, decl, NULL);
break;
case N_UPSET:
@@ -1110,6 +1114,10 @@ tree_decl(enum nodetype t, struct node *np, struct node *nvpairs,
case N_DEFECT:
ret = dodecl(T_DEFECT, file, line, np, nvpairs,
&Defects, Defectcount, 0);
+
+ /* increment serd statement reference */
+ decl = tree_event2np_lut_lookup(Defects, np);
+ update_serd_refstmt(NULL, decl, NULL);
break;
case N_ERROR:
@@ -1318,6 +1326,8 @@ tree_report()
* an upset "engine" property.
*/
lut_walk(Faults, (lut_cb)check_refcount, (void *)T_FAULT);
+ lut_walk(Faults, (lut_cb)check_upset_engine, (void *)T_FAULT);
+ lut_walk(Defects, (lut_cb)check_upset_engine, (void *)T_DEFECT);
lut_walk(Upsets, (lut_cb)check_upset_engine, (void *)T_UPSET);
lut_walk(Upsets, (lut_cb)check_refcount, (void *)T_UPSET);
lut_walk(Errors, (lut_cb)check_refcount, (void *)T_ERROR);
diff --git a/usr/src/cmd/fm/eversholt/common/tree.h b/usr/src/cmd/fm/eversholt/common/tree.h
index e95ebff605..f28b3286d2 100644
--- a/usr/src/cmd/fm/eversholt/common/tree.h
+++ b/usr/src/cmd/fm/eversholt/common/tree.h
@@ -244,6 +244,7 @@ struct node {
struct node *knp; /* K value */
struct node *prop; /* arrow is part of this prop */
int needed;
+ struct node *parent;
} arrow;
struct {
diff --git a/usr/src/cmd/fm/eversholt/files/common/pci.esc b/usr/src/cmd/fm/eversholt/files/common/pci.esc
index 79206a104b..e799a41cd4 100644
--- a/usr/src/cmd/fm/eversholt/files/common/pci.esc
+++ b/usr/src/cmd/fm/eversholt/files/common/pci.esc
@@ -46,44 +46,57 @@
*/
#define NONFATAL_COUNT 6
#define NONFATAL_TIME 2h
-#define NONFATAL_DPE_U_COUNT 3
-#define NONFATAL_DPE_U_TIME 168h
-#define NONFATAL_DPE_D_COUNT 3
-#define NONFATAL_DPE_D_TIME 168h
+#define NONFATAL_DPE_COUNT 3
+#define NONFATAL_DPE_TIME 168h
+
+#define PCIFN pcibus/pcidev/pcifn
+#define PCIFNHZ pcibus<>/pcidev<>/pcifn<>
+
+engine serd.io.device.nonfatal@PCIFN,
+ N=NONFATAL_COUNT, T=NONFATAL_TIME;
+
+engine serd.io.pci.nf-dpe@PCIFN,
+ N=NONFATAL_DPE_COUNT, T=NONFATAL_DPE_TIME;
+
+engine serd.io.pci.nf-dpe-bus@pcibus,
+ N=NONFATAL_DPE_COUNT, T=NONFATAL_DPE_TIME;
#define IS_LEAF \
- (confprop_defined(asru(pcibus/pcidev/pcifn), TOPO_PCI_CLASS) && \
- confprop(asru(pcibus/pcidev/pcifn), TOPO_PCI_CLASS) != "60400" && \
- confprop(asru(pcibus/pcidev/pcifn), TOPO_PCI_CLASS) != "60401")
+ (confprop_defined(PCIFN, TOPO_PCI_CLASS) && \
+ confprop(PCIFN, TOPO_PCI_CLASS) != "60400" && \
+ confprop(PCIFN, TOPO_PCI_CLASS) != "60401")
#define IS_BDG \
- (confprop(asru(pcibus/pcidev/pcifn), TOPO_PCI_CLASS) == "60400" || \
- confprop(asru(pcibus/pcidev/pcifn), TOPO_PCI_CLASS) == "60401")
+ (confprop(PCIFN, TOPO_PCI_CLASS) == "60400" || \
+ confprop(PCIFN, TOPO_PCI_CLASS) == "60401")
#define FD_IS_LEAF \
- (confprop_defined(asru(pcibus/pcidev[fromdev]/pcifn), \
- TOPO_PCI_CLASS) && \
- confprop(asru(pcibus/pcidev[fromdev]/pcifn), TOPO_PCI_CLASS) != \
- "60400" && \
- confprop(asru(pcibus/pcidev[fromdev]/pcifn), TOPO_PCI_CLASS) != "60401")
+ (confprop_defined(pcibus/pcidev[fromdev]/pcifn, TOPO_PCI_CLASS) && \
+ confprop(pcibus/pcidev[fromdev]/pcifn, TOPO_PCI_CLASS) != "60400" && \
+ confprop(pcibus/pcidev[fromdev]/pcifn, TOPO_PCI_CLASS) != "60401")
+#define IS_LF(f) (confprop_defined(f, TOPO_PCI_CLASS) && \
+ confprop(f, TOPO_PCI_CLASS) != "60400" && \
+ confprop(f, TOPO_PCI_CLASS) != "60401")
/*
* note general rule for errors is that for upstream propagations
- * @pcibus/pcidev/pcifn is the sending device while for downstream
+ * @PCIFN is the sending device while for downstream
* propagations it is the receiving device.
*/
-asru pcibus/pcidev/pcifn;
-fru pcibus/pcidev;
+event fault.io.pci.device-interr-corr@PCIFN,
+ engine=serd.io.device.nonfatal@PCIFN, FITrate=PCI_DEV_FIT;
-event fault.io.pci.device-interr@pcibus/pcidev/pcifn,
- FITrate=PCI_DEV_FIT, FRU=pcibus/pcidev, ASRU=pcibus/pcidev/pcifn;
+event fault.io.pci.device-interr-unaf@PCIFN,
+ engine=serd.io.pci.nf-dpe@PCIFN, FITrate=PCI_DEV_FIT;
-event fault.io.pci.device-invreq@pcibus/pcidev/pcifn,
- FITrate=PCI_DEV_FIT, FRU=pcibus/pcidev, ASRU=pcibus/pcidev/pcifn;
+event fault.io.pci.device-interr-deg@PCIFN, FITrate=PCI_DEV_FIT, retire=0;
-event fault.io.pci.device-noresp@pcibus/pcidev/pcifn,
- FITrate=PCI_DEV_FIT, FRU=pcibus/pcidev, ASRU=pcibus/pcidev/pcifn;
+event fault.io.pci.device-interr@PCIFN, FITrate=PCI_DEV_FIT;
+
+event fault.io.pci.device-invreq@PCIFN, FITrate=PCI_DEV_FIT;
+
+event fault.io.pci.device-noresp@PCIFN, FITrate=PCI_DEV_FIT;
/*
* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
@@ -107,55 +120,52 @@ event fault.io.pci.device-noresp@pcibus/pcidev/pcifn,
#define PCI_TO_HB pcibus/pcidev<todev>/pcifn<> {fromdev != 32 && todev == 32}
#define PCI_FROM_HB pcibus/pcidev<todev>/pcifn<> {fromdev == 32 && todev != 32}
-event error.io.pci.retry-to-d@pcibus/pcidev/pcifn;
-event error.io.pci.nr-pw-d@pcibus/pcidev/pcifn;
-event error.io.pci.nr-drw-d@pcibus/pcidev/pcifn;
-event error.io.pci.ta-pw-d@pcibus/pcidev/pcifn;
-event error.io.pci.ta-drw-d@pcibus/pcidev/pcifn;
-event error.io.pci.badreq-pw-d@pcibus/pcidev/pcifn;
-event error.io.pci.badreq-drw-d@pcibus/pcidev/pcifn;
-event error.io.pci.f-dpe-d@pcibus/pcidev/pcifn;
-event error.io.pci.nf-dpe-d@pcibus/pcidev/pcifn;
-event error.io.pci.nonfatal-dpe-d@pcibus/pcidev/pcifn;
-event error.io.pci.ape-d@pcibus/pcidev/pcifn;
-event error.io.pci.ape-u@pcibus/pcidev/pcifn;
-event error.io.pci.f-dpdata-dw-d@pcibus/pcidev/pcifn;
-event error.io.pci.nf-dpdata-dw-d@pcibus/pcidev/pcifn;
-event error.io.pci.f-dpdata-pw-d@pcibus/pcidev/pcifn;
-event error.io.pci.nf-dpdata-pw-d@pcibus/pcidev/pcifn;
-event error.io.pci.f-dpdata-dr-d@pcibus/pcidev/pcifn;
-event error.io.pci.nf-dpdata-dr-d@pcibus/pcidev/pcifn;
-event error.io.pci.dpdata-pw-u@pcibus/pcidev/pcifn;
-event error.io.pci.dpdata-dw-u@pcibus/pcidev/pcifn;
-event error.io.pci.dpdata-dr-u@pcibus/pcidev/pcifn;
-event error.io.pci.ta-u@pcibus/pcidev/pcifn;
-event error.io.pci.ma-u@pcibus/pcidev/pcifn;
-event error.io.pci.perr-dw-u@pcibus/pcidev/pcifn;
-event error.io.pci.perr-pw-u@pcibus/pcidev/pcifn;
-event error.io.pci.perr-dr-u@pcibus/pcidev/pcifn;
-event error.io.pci.badreq-drw-u@pcibus/pcidev/pcifn;
-event error.io.pci.badreq-pw-u@pcibus/pcidev/pcifn;
-event error.io.pci.device-serr@pcibus/pcidev/pcifn;
-event error.io.pci.device-ta@pcibus/pcidev/pcifn;
-event error.io.pci.device-par@pcibus/pcidev/pcifn;
-event error.io.pci.serr-u@pcibus/pcidev/pcifn;
-event error.io.pcix.scpe-d@pcibus/pcidev/pcifn;
-event error.io.pcix.scpe-u@pcibus/pcidev/pcifn;
-event error.io.pcix.spl-comp-ma-u@pcibus/pcidev/pcifn;
-event error.io.pcix.spl-comp-ta-u@pcibus/pcidev/pcifn;
-event error.io.pcix.spl-comp-ma-d@pcibus/pcidev/pcifn;
-event error.io.pcix.spl-comp-ta-d@pcibus/pcidev/pcifn;
-
-event ereport.io.pci.ma@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.pci.rta@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.pci.mdpe@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.pci.sta@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.pci.sserr@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.pci.dpe@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.pci.target-mdpe@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.pci.target-rta@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.pci.target-ma@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.pcix.discard@pcibus/pcidev/pcifn{within(5s)};
+event error.io.pci.retry-to-d@PCIFN;
+event error.io.pci.nr-pw-d@PCIFN;
+event error.io.pci.nr-drw-d@PCIFN;
+event error.io.pci.ta-pw-d@PCIFN;
+event error.io.pci.ta-drw-d@PCIFN;
+event error.io.pci.badreq-pw-d@PCIFN;
+event error.io.pci.badreq-drw-d@PCIFN;
+event error.io.pci.f-dpe-d@PCIFN;
+event error.io.pci.deg-dpe-d@PCIFN;
+event error.io.pci.nf-dpe-d@PCIFN;
+event error.io.pci.ape-d@PCIFN;
+event error.io.pci.ape-u@PCIFN;
+event error.io.pci.dpdata-dw-d@PCIFN;
+event error.io.pci.dpdata-pw-d@PCIFN;
+event error.io.pci.dpdata-dr-d@PCIFN;
+event error.io.pci.dpdata-pw-u@PCIFN;
+event error.io.pci.dpdata-dw-u@PCIFN;
+event error.io.pci.dpdata-dr-u@PCIFN;
+event error.io.pci.ta-u@PCIFN;
+event error.io.pci.ma-u@PCIFN;
+event error.io.pci.perr-dw-u@PCIFN;
+event error.io.pci.perr-pw-u@PCIFN;
+event error.io.pci.perr-dr-u@PCIFN;
+event error.io.pci.badreq-drw-u@PCIFN;
+event error.io.pci.badreq-pw-u@PCIFN;
+event error.io.pci.device-serr@PCIFN;
+event error.io.pci.device-ta@PCIFN;
+event error.io.pci.device-par@PCIFN;
+event error.io.pci.serr-u@PCIFN;
+event error.io.pcix.scpe-d@PCIFN;
+event error.io.pcix.scpe-u@PCIFN;
+event error.io.pcix.spl-comp-ma-u@PCIFN;
+event error.io.pcix.spl-comp-ta-u@PCIFN;
+event error.io.pcix.spl-comp-ma-d@PCIFN;
+event error.io.pcix.spl-comp-ta-d@PCIFN;
+
+event ereport.io.pci.ma@PCIFN{within(5s)};
+event ereport.io.pci.rta@PCIFN{within(5s)};
+event ereport.io.pci.mdpe@PCIFN{within(5s)};
+event ereport.io.pci.sta@PCIFN{within(5s)};
+event ereport.io.pci.sserr@PCIFN{within(5s)};
+event ereport.io.pci.dpe@PCIFN{within(5s)};
+event ereport.io.pci.target-mdpe@PCIFN{within(5s)};
+event ereport.io.pci.target-rta@PCIFN{within(5s)};
+event ereport.io.pci.target-ma@PCIFN{within(5s)};
+event ereport.io.pcix.discard@PCIFN{within(5s)};
prop fault.io.pci.device-noresp@pcibus/pcidev[fromdev]/pcifn (0)->
error.io.pci.nr-pw-d@PCI_FROM_HB,
@@ -166,14 +176,19 @@ prop fault.io.pci.device-invreq@pcibus/pcidev[fromdev]/pcifn (0)->
error.io.pci.badreq-pw-d@PCI_FROM_HB,
error.io.pci.badreq-drw-d@PCI_FROM_HB;
-prop fault.io.pci.device-interr@pcibus/pcidev/pcifn (0)->
- error.io.pci.device-par@pcibus/pcidev/pcifn,
- error.io.pci.device-ta@pcibus/pcidev/pcifn,
- error.io.pci.device-serr@pcibus/pcidev/pcifn;
+prop fault.io.pci.device-interr-unaf@pcibus/pcidev[fromdev]/pcifn (0)->
+ error.io.pci.nf-dpe-d@PCI_FROM_HB;
+
+prop fault.io.pci.device-interr-deg@pcibus/pcidev[fromdev]/pcifn (0)->
+ error.io.pci.deg-dpe-d@PCI_FROM_HB;
+
+prop fault.io.pci.device-interr@PCIFN (0)->
+ error.io.pci.device-par@PCIFN,
+ error.io.pci.device-ta@PCIFN,
+ error.io.pci.device-serr@PCIFN;
prop error.io.pci.device-par@pcibus/pcidev[fromdev]/pcifn (1)->
error.io.pci.f-dpe-d@PCI_FROM_HB,
- error.io.pci.nf-dpe-d@PCI_FROM_HB,
error.io.pcix.scpe-d@PCI_FROM_HB,
error.io.pci.ape-d@PCI_FROM_HB;
@@ -185,19 +200,9 @@ prop error.io.pci.device-ta@pcibus/pcidev[fromdev]/pcifn (1)->
ereport.io.pci.sta@pcibus/pcidev<todev>/pcifn {
todev == fromdev && fromdev == 32 };
-prop error.io.pci.device-serr@pcibus/pcidev/pcifn (2)->
- error.io.pci.serr-u@pcibus/pcidev/pcifn,
- ereport.io.pci.sserr@pcibus/pcidev/pcifn;
-
-prop error.io.pci.f-dpe-d@pcibus/pcidev/pcifn (1)->
- error.io.pci.f-dpdata-pw-d@pcibus/pcidev/pcifn,
- error.io.pci.f-dpdata-dw-d@pcibus/pcidev/pcifn,
- error.io.pci.f-dpdata-dr-d@pcibus/pcidev/pcifn;
-
-prop error.io.pci.nonfatal-dpe-d@pcibus/pcidev/pcifn (1)->
- error.io.pci.nf-dpdata-pw-d@pcibus/pcidev/pcifn,
- error.io.pci.nf-dpdata-dw-d@pcibus/pcidev/pcifn,
- error.io.pci.nf-dpdata-dr-d@pcibus/pcidev/pcifn;
+prop error.io.pci.device-serr@PCIFN (2)->
+ error.io.pci.serr-u@PCIFN,
+ ereport.io.pci.sserr@PCIFN;
/*
* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
@@ -240,9 +245,9 @@ prop error.io.pci.badreq-drw-u@pcibus/pcidev[fromdev]/pcifn (0)->
prop error.io.pci.badreq-pw-u@pcibus/pcidev[fromdev]/pcifn (0)->
ereport.io.pci.sta@PCI_TO_HB;
-prop error.io.pcix.scpe-u@pcibus/pcidev/pcifn (1)->
- error.io.pcix.spl-comp-ma-d@pcibus/pcidev/pcifn,
- error.io.pcix.spl-comp-ta-d@pcibus/pcidev/pcifn;
+prop error.io.pcix.scpe-u@PCIFN (1)->
+ error.io.pcix.spl-comp-ma-d@PCIFN,
+ error.io.pcix.spl-comp-ta-d@PCIFN;
prop error.io.pcix.scpe-u@pcibus/pcidev[fromdev]/pcifn (0)->
ereport.io.pci.dpe@PCI_TO_HB,
@@ -291,51 +296,65 @@ prop error.io.pcix.spl-comp-ta-u@pcibus/pcidev[fromdev]/pcifn (3)->
#define PCI_NOT_HB pcibus/pcidev[fromdev]/pcifn {fromdev != 32}
-event error.io.pci.retry-to-u@pcibus/pcidev/pcifn;
-event error.io.pci.nr-pw-u@pcibus/pcidev/pcifn;
-event error.io.pci.nr-drw-u@pcibus/pcidev/pcifn;
-event error.io.pci.ta-pw-u@pcibus/pcidev/pcifn;
-event error.io.pci.ta-drw-u@pcibus/pcidev/pcifn;
-event error.io.pci.f-dpe-u@pcibus/pcidev/pcifn;
-event error.io.pci.nf-dpe-u@pcibus/pcidev/pcifn;
-event error.io.pci.nonfatal-dpe-u@pcibus/pcidev/pcifn;
-event error.io.pci.flt-f-dpdata-pw-u@pcibus/pcidev/pcifn;
-event error.io.pci.flt-nf-dpdata-pw-u@pcibus/pcidev/pcifn;
-event error.io.pci.flt-f-dpdata-dw-u@pcibus/pcidev/pcifn;
-event error.io.pci.flt-nf-dpdata-dw-u@pcibus/pcidev/pcifn;
-event error.io.pci.flt-f-dpdata-dr-u@pcibus/pcidev/pcifn;
-event error.io.pci.flt-nf-dpdata-dr-u@pcibus/pcidev/pcifn;
-event error.io.pci.perr-d@pcibus/pcidev/pcifn;
-event error.io.pci.target-mdpe-d@pcibus/pcidev/pcifn;
-event error.io.pci.target-mdpe-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pci.target-rta-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pci.target-ma-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pcix.tx-oor@pcibus/pcidev/pcifn;
-event error.io.pcix.rx-unex-sc@pcibus/pcidev/pcifn;
-event error.io.pci.source-nf-dpdata-w-u@pcibus/pcidev/pcifn;
-event error.io.pci.source-f-dpdata-w-u@pcibus/pcidev/pcifn;
-event error.io.pci.source-nf-dpdata-r-u@pcibus/pcidev/pcifn;
-event error.io.pci.source-f-dpdata-r-u@pcibus/pcidev/pcifn;
-event error.io.device.nf-device@pcibus/pcidev/pcifn;
-event error.io.device.f-device@pcibus/pcidev/pcifn;
-
-event ereport.io.pcix.oor@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.pcix.unex-sc@pcibus/pcidev/pcifn{within(5s)};
+event error.io.pci.retry-to-u@PCIFN;
+event error.io.pci.nr-pw-u@PCIFN;
+event error.io.pci.nr-drw-u@PCIFN;
+event error.io.pci.ta-pw-u@PCIFN;
+event error.io.pci.ta-drw-u@PCIFN;
+event error.io.pci.f-dpe-u@PCIFN;
+event error.io.pci.deg-dpe-u@PCIFN;
+event error.io.pci.nf-dpe-u@PCIFN;
+event error.io.pci.flt-dpdata-pw-u@PCIFN;
+event error.io.pci.flt-dpdata-dw-u@PCIFN;
+event error.io.pci.flt-dpdata-dr-u@PCIFN;
+event error.io.pci.source-dpdata-u@PCIFN;
+event error.io.pci.f-source-dpdata-u@PCIFN;
+event error.io.pci.f-source-dpdata-u@PCIFN/PCIFN;
+event error.io.pci.deg-source-dpdata-u@PCIFN;
+event error.io.pci.deg-source-dpdata-u@PCIFN/PCIFN;
+event error.io.pci.nf-source-dpdata-u@PCIFN;
+event error.io.pci.nf-source-dpdata-u@PCIFN/PCIFN;
+event error.io.pci.perr-d@PCIFN;
+event error.io.pci.target-mdpe-d@PCIFN;
+event error.io.pci.target-mdpe-d@PCIFN/PCIFN;
+event error.io.pci.target-rta-d@PCIFN/PCIFN;
+event error.io.pci.target-ma-d@PCIFN/PCIFN;
+event error.io.pcix.tx-oor@PCIFN;
+event error.io.pcix.rx-unex-sc@PCIFN;
+event error.io.device.nf-device@PCIFN;
+event error.io.device.f-device@PCIFN;
+event error.io.device.deg-device@PCIFN;
+event error.io.service.restored@PCIFN;
+
+event ereport.io.pcix.oor@PCIFN{within(5s)};
+event ereport.io.pcix.unex-sc@PCIFN{within(5s)};
+event ereport.io.service.lost@PCIFN{within(5s)};
+event ereport.io.service.degraded@PCIFN{within(5s)};
+event ereport.io.service.unaffected@PCIFN{within(5s)};
+event ereport.io.service.restored@PCIFN{within(30s)};
prop fault.io.pci.device-noresp@pcibus/pcidev[fromdev]/pcifn (0)->
error.io.pci.nr-pw-u@PCI_NOT_HB,
error.io.pci.nr-drw-u@PCI_NOT_HB,
error.io.pci.retry-to-u@PCI_NOT_HB;
+prop fault.io.pci.device-interr-corr@pcibus/pcidev[fromdev]/pcifn (0)->
+ error.io.device.nf-device@PCI_NOT_HB;
+
+prop fault.io.pci.device-interr-unaf@pcibus/pcidev[fromdev]/pcifn (0)->
+ error.io.pci.nf-dpe-u@PCI_NOT_HB;
+
+prop fault.io.pci.device-interr-deg@pcibus/pcidev[fromdev]/pcifn (0)->
+ error.io.device.deg-device@PCI_NOT_HB,
+ error.io.pci.deg-dpe-u@PCI_NOT_HB;
+
prop fault.io.pci.device-interr@pcibus/pcidev[fromdev]/pcifn (0)->
error.io.pci.ta-pw-u@PCI_NOT_HB,
error.io.pci.ta-drw-u@PCI_NOT_HB,
error.io.pci.serr-u@PCI_NOT_HB,
error.io.pci.ape-u@PCI_NOT_HB,
error.io.pci.f-dpe-u@PCI_NOT_HB,
- error.io.pci.nf-dpe-u@PCI_NOT_HB,
error.io.device.f-device@PCI_NOT_HB,
- error.io.device.nf-device@PCI_NOT_HB,
error.io.pcix.scpe-u@PCI_NOT_HB,
error.io.pcix.tx-oor@PCI_NOT_HB,
error.io.pcix.rx-unex-sc@PCI_NOT_HB;
@@ -344,59 +363,77 @@ prop fault.io.pci.device-invreq@pcibus/pcidev[fromdev]/pcifn {FD_IS_LEAF} (0)->
error.io.pci.badreq-drw-u@PCI_NOT_HB,
error.io.pci.badreq-pw-u@PCI_NOT_HB;
-prop error.io.pcix.tx-oor@pcibus/pcidev/pcifn (1)->
- ereport.io.pcix.oor@pcibus/pcidev/pcifn;
+prop error.io.pcix.tx-oor@PCIFN (1)->
+ ereport.io.pcix.oor@PCIFN;
prop error.io.pcix.rx-unex-sc@pcibus/pcidev[fromdev]/pcifn (1)->
ereport.io.pcix.unex-sc@pcibus/pcidev<todev>/pcifn<> {fromdev != todev};
-prop error.io.pci.f-dpe-u@pcibus/pcidev/pcifn (1)->
- error.io.pci.flt-f-dpdata-pw-u@pcibus/pcidev/pcifn,
- error.io.pci.flt-f-dpdata-dw-u@pcibus/pcidev/pcifn,
- error.io.pci.flt-f-dpdata-dr-u@pcibus/pcidev/pcifn;
+prop error.io.pci.f-dpe-u@PCIFN (1)->
+ error.io.pci.flt-dpdata-pw-u@PCIFN,
+ error.io.pci.flt-dpdata-dw-u@PCIFN,
+ error.io.pci.flt-dpdata-dr-u@PCIFN;
+
+prop error.io.pci.f-dpe-u@PCIFN (1)->
+ error.io.pci.f-source-dpdata-u@PCIFN;
+
+prop error.io.pci.f-source-dpdata-u@PCIFN (1)->
+ error.io.pci.f-source-dpdata-u@PCIFN/PCIFNHZ;
-prop error.io.pci.flt-f-dpdata-pw-u@pcibus/pcidev/pcifn (2)->
- error.io.pci.source-f-dpdata-w-u@pcibus/pcidev/pcifn,
- error.io.pci.dpdata-pw-u@pcibus/pcidev/pcifn;
+prop error.io.pci.f-source-dpdata-u@PCIFN { IS_LF(PCIFN) } (1)->
+ error.io.pci.source-dpdata-u@PCIFN;
-prop error.io.pci.flt-f-dpdata-pw-u@pcibus/pcidev/pcifn { IS_BDG } (1)->
- error.io.pci.serr-u@pcibus/pcidev/pcifn;
+prop error.io.pci.f-source-dpdata-u@PCIFN { IS_LF(PCIFN) } (0)->
+ ereport.io.service.lost@PCIFN;
-prop error.io.pci.flt-f-dpdata-dw-u@pcibus/pcidev/pcifn (3)->
- error.io.pci.source-f-dpdata-w-u@pcibus/pcidev/pcifn,
- error.io.pci.perr-d@pcibus/pcidev/pcifn,
- error.io.pci.dpdata-dw-u@pcibus/pcidev/pcifn;
+prop error.io.pci.deg-dpe-u@PCIFN (1)->
+ error.io.pci.flt-dpdata-pw-u@PCIFN,
+ error.io.pci.flt-dpdata-dw-u@PCIFN,
+ error.io.pci.flt-dpdata-dr-u@PCIFN;
-prop error.io.pci.flt-f-dpdata-dr-u@pcibus/pcidev/pcifn (2)->
- error.io.pci.source-f-dpdata-r-u@pcibus/pcidev/pcifn,
- error.io.pci.dpdata-dr-u@pcibus/pcidev/pcifn;
+prop error.io.pci.deg-dpe-u@PCIFN (1)->
+ error.io.pci.deg-source-dpdata-u@PCIFN;
-prop error.io.pci.flt-f-dpdata-dr-u@pcibus/pcidev/pcifn (1)->
- error.io.pci.target-mdpe-d@pcibus/pcidev/pcifn;
+prop error.io.pci.deg-source-dpdata-u@PCIFN (1)->
+ error.io.pci.deg-source-dpdata-u@PCIFN/PCIFNHZ;
-prop error.io.pci.nonfatal-dpe-u@pcibus/pcidev/pcifn (1)->
- error.io.pci.flt-nf-dpdata-pw-u@pcibus/pcidev/pcifn,
- error.io.pci.flt-nf-dpdata-dw-u@pcibus/pcidev/pcifn,
- error.io.pci.flt-nf-dpdata-dr-u@pcibus/pcidev/pcifn;
+prop error.io.pci.deg-source-dpdata-u@PCIFN { IS_LF(PCIFN) } (1)->
+ error.io.pci.source-dpdata-u@PCIFN;
-prop error.io.pci.flt-nf-dpdata-pw-u@pcibus/pcidev/pcifn (2)->
- error.io.pci.source-nf-dpdata-w-u@pcibus/pcidev/pcifn,
- error.io.pci.dpdata-pw-u@pcibus/pcidev/pcifn;
+prop error.io.pci.deg-source-dpdata-u@PCIFN { IS_LF(PCIFN) } (1)->
+ ereport.io.service.degraded@PCIFN;
-prop error.io.pci.flt-nf-dpdata-pw-u@pcibus/pcidev/pcifn { IS_BDG } (1)->
- error.io.pci.serr-u@pcibus/pcidev/pcifn;
+prop error.io.pci.nf-dpe-u@PCIFN (1)->
+ error.io.pci.flt-dpdata-pw-u@PCIFN,
+ error.io.pci.flt-dpdata-dw-u@PCIFN,
+ error.io.pci.flt-dpdata-dr-u@PCIFN;
-prop error.io.pci.flt-nf-dpdata-dw-u@pcibus/pcidev/pcifn (3)->
- error.io.pci.source-nf-dpdata-w-u@pcibus/pcidev/pcifn,
- error.io.pci.perr-d@pcibus/pcidev/pcifn,
- error.io.pci.dpdata-dw-u@pcibus/pcidev/pcifn;
+prop error.io.pci.nf-dpe-u@PCIFN (1)->
+ error.io.pci.nf-source-dpdata-u@PCIFN;
-prop error.io.pci.flt-nf-dpdata-dr-u@pcibus/pcidev/pcifn (2)->
- error.io.pci.source-nf-dpdata-r-u@pcibus/pcidev/pcifn,
- error.io.pci.dpdata-dr-u@pcibus/pcidev/pcifn;
+prop error.io.pci.nf-source-dpdata-u@PCIFN (1)->
+ error.io.pci.nf-source-dpdata-u@PCIFN/PCIFNHZ;
-prop error.io.pci.flt-nf-dpdata-dr-u@pcibus/pcidev/pcifn (1)->
- error.io.pci.target-mdpe-d@pcibus/pcidev/pcifn;
+prop error.io.pci.nf-source-dpdata-u@PCIFN { IS_LF(PCIFN) } (1)->
+ error.io.pci.source-dpdata-u@PCIFN;
+
+prop error.io.pci.nf-source-dpdata-u@PCIFN { IS_LF(PCIFN) } (1)->
+ ereport.io.service.unaffected@PCIFN,
+ error.io.service.restored@PCIFN;
+
+prop error.io.pci.flt-dpdata-pw-u@PCIFN (1)->
+ error.io.pci.dpdata-pw-u@PCIFN;
+
+prop error.io.pci.flt-dpdata-pw-u@PCIFN { IS_BDG } (1)->
+ error.io.pci.serr-u@PCIFN;
+
+prop error.io.pci.flt-dpdata-dw-u@PCIFN (2)->
+ error.io.pci.perr-d@PCIFN,
+ error.io.pci.dpdata-dw-u@PCIFN;
+
+prop error.io.pci.flt-dpdata-dr-u@PCIFN (2)->
+ error.io.pci.dpdata-dr-u@PCIFN,
+ error.io.pci.target-mdpe-d@PCIFN;
/*
* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
@@ -415,28 +452,34 @@ prop error.io.pci.flt-nf-dpdata-dr-u@pcibus/pcidev/pcifn (1)->
* transaction retry.
*/
-event error.io.pci.ape-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pci.f-dpe-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pci.nf-dpe-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pci.retry-to-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pci.nr-pw-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pci.nr-drw-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pci.ta-pw-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pci.ta-drw-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pcix.scpe-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-
-prop fault.io.pci.device-noresp@pcibus/pcidev/pcifn (0)->
- error.io.pci.nr-pw-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn,
- error.io.pci.nr-drw-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn,
- error.io.pci.retry-to-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-
-prop fault.io.pci.device-interr@pcibus/pcidev/pcifn (0)->
- error.io.pci.ta-pw-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn,
- error.io.pci.ta-drw-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn,
- error.io.pci.ape-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn,
- error.io.pcix.scpe-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn,
- error.io.pci.f-dpe-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn,
- error.io.pci.nf-dpe-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
+event error.io.pci.ape-d@PCIFN/PCIFN;
+event error.io.pci.f-dpe-d@PCIFN/PCIFN;
+event error.io.pci.deg-dpe-d@PCIFN/PCIFN;
+event error.io.pci.nf-dpe-d@PCIFN/PCIFN;
+event error.io.pci.retry-to-d@PCIFN/PCIFN;
+event error.io.pci.nr-pw-d@PCIFN/PCIFN;
+event error.io.pci.nr-drw-d@PCIFN/PCIFN;
+event error.io.pci.ta-pw-d@PCIFN/PCIFN;
+event error.io.pci.ta-drw-d@PCIFN/PCIFN;
+event error.io.pcix.scpe-d@PCIFN/PCIFN;
+
+prop fault.io.pci.device-noresp@PCIFN (0)->
+ error.io.pci.nr-pw-d@PCIFN/PCIFN,
+ error.io.pci.nr-drw-d@PCIFN/PCIFN,
+ error.io.pci.retry-to-d@PCIFN/PCIFN;
+
+prop fault.io.pci.device-interr-unaf@PCIFN (0)->
+ error.io.pci.nf-dpe-d@PCIFN/PCIFN;
+
+prop fault.io.pci.device-interr-deg@PCIFN (0)->
+ error.io.pci.deg-dpe-d@PCIFN/PCIFN;
+
+prop fault.io.pci.device-interr@PCIFN (0)->
+ error.io.pci.ta-pw-d@PCIFN/PCIFN,
+ error.io.pci.ta-drw-d@PCIFN/PCIFN,
+ error.io.pci.ape-d@PCIFN/PCIFN,
+ error.io.pcix.scpe-d@PCIFN/PCIFN,
+ error.io.pci.f-dpe-d@PCIFN/PCIFN;
/*
* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
@@ -450,19 +493,26 @@ prop fault.io.pci.device-interr@pcibus/pcidev/pcifn (0)->
* - scpe-u: split completion to get corrupted during upstream transmission.
*/
-fru pcibus;
-asru pcibus;
+event fault.io.pci.bus-linkerr-unaf@pcibus,
+ engine=serd.io.pci.nf-dpe-bus@pcibus, FITrate=PCI_BUS_FIT;
+
+event fault.io.pci.bus-linkerr-deg@pcibus, FITrate=PCI_BUS_FIT, retire=0;
+
+event fault.io.pci.bus-linkerr@pcibus, FITrate=PCI_BUS_FIT;
-event fault.io.pci.bus-linkerr@pcibus,
- FITrate=PCI_BUS_FIT, FRU=pcibus, ASRU=pcibus;
+prop fault.io.pci.bus-linkerr-unaf@pcibus (0)->
+ error.io.pci.nf-dpe-d@pcibus/pcidev<todev>/pcifn { todev != 32},
+ error.io.pci.nf-dpe-u@pcibus/pcidev<todev>/pcifn { todev != 32};
+
+prop fault.io.pci.bus-linkerr-deg@pcibus (0)->
+ error.io.pci.deg-dpe-d@pcibus/pcidev<todev>/pcifn { todev != 32},
+ error.io.pci.deg-dpe-u@pcibus/pcidev<todev>/pcifn { todev != 32};
prop fault.io.pci.bus-linkerr@pcibus (0)->
error.io.pci.ape-d@pcibus/pcidev<todev>/pcifn { todev != 32},
error.io.pci.f-dpe-d@pcibus/pcidev<todev>/pcifn { todev != 32},
- error.io.pci.nf-dpe-d@pcibus/pcidev<todev>/pcifn { todev != 32},
error.io.pci.ape-u@pcibus/pcidev<todev>/pcifn { todev != 32},
error.io.pci.f-dpe-u@pcibus/pcidev<todev>/pcifn { todev != 32},
- error.io.pci.nf-dpe-u@pcibus/pcidev<todev>/pcifn { todev != 32},
error.io.pcix.scpe-d@pcibus/pcidev<todev>/pcifn { todev != 32},
error.io.pcix.scpe-u@pcibus/pcidev<todev>/pcifn { todev != 32},
error.io.pcix.tx-oor@pcibus/pcidev<todev>/pcifn { todev != 32},
@@ -474,53 +524,50 @@ prop fault.io.pci.bus-linkerr@pcibus (0)->
* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*/
-event error.io.pci.serr-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pci.perr-dw-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pci.perr-pw-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pci.perr-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pci.dpdata-pw-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pci.dpdata-dw-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pci.dpdata-dr-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pci.dpdata-pw-fwd-d@pcibus/pcidev/pcifn;
-event error.io.pci.dpdata-pw-fwd-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pci.dpdata-dw-fwd-d@pcibus/pcidev/pcifn;
-event error.io.pci.dpdata-dw-fwd-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pci.f-dpdata-dr-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pci.nf-dpdata-dr-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pci.leaf-ape-d@pcibus/pcidev/pcifn;
-event error.io.pci.ape-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pci.source-ape-u@pcibus/pcidev/pcifn;
-event error.io.pci.source-f-perr-u@pcibus/pcidev/pcifn;
-event error.io.pci.source-nf-perr-u@pcibus/pcidev/pcifn;
-event error.io.pci.badreq-pw-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pci.badreq-drw-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pci.badreq-pw-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pci.badreq-drw-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pci.ta-d@pcibus/pcidev/pcifn;
-event error.io.pci.ta-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pci.ta-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pci.target-rta-d@pcibus/pcidev/pcifn;
-event error.io.pci.target-ma-d@pcibus/pcidev/pcifn;
-event error.io.pci.ta-pw-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pci.ta-drw-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pci.nr-pw-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pci.ta-pw-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pci.retry-to-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pcix.scpe-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pcix.source-scpe-u@pcibus/pcidev/pcifn;
-event error.io.pcix.spl-comp-ma-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pcix.spl-comp-ta-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pci.ma-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-
-event ereport.io.pci.sec-ma@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.pci.sec-sta@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.pci.sec-rta@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.pci.sec-mdpe@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.pci.sec-dpe@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.pci.sec-rserr@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.pci.dto@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.pcix.sec-spl-dis@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.pcix.spl-dis@pcibus/pcidev/pcifn{within(5s)};
+event error.io.pci.serr-u@PCIFN/PCIFN;
+event error.io.pci.perr-dw-u@PCIFN/PCIFN;
+event error.io.pci.perr-pw-u@PCIFN/PCIFN;
+event error.io.pci.perr-d@PCIFN/PCIFN;
+event error.io.pci.dpdata-pw-u@PCIFN/PCIFN;
+event error.io.pci.dpdata-dw-u@PCIFN/PCIFN;
+event error.io.pci.dpdata-dr-u@PCIFN/PCIFN;
+event error.io.pci.dpdata-pw-fwd-d@PCIFN;
+event error.io.pci.dpdata-pw-fwd-d@PCIFN/PCIFN;
+event error.io.pci.dpdata-dw-fwd-d@PCIFN;
+event error.io.pci.dpdata-dw-fwd-d@PCIFN/PCIFN;
+event error.io.pci.dpdata-dr-fwd-d@PCIFN;
+event error.io.pci.dpdata-dr-fwd-d@PCIFN/PCIFN;
+event error.io.pci.source-perr-u@PCIFN;
+event error.io.pci.leaf-ape-d@PCIFN;
+event error.io.pci.ape-u@PCIFN/PCIFN;
+event error.io.pci.source-ape-u@PCIFN;
+event error.io.pci.badreq-pw-d@PCIFN/PCIFN;
+event error.io.pci.badreq-drw-d@PCIFN/PCIFN;
+event error.io.pci.badreq-pw-u@PCIFN/PCIFN;
+event error.io.pci.badreq-drw-u@PCIFN/PCIFN;
+event error.io.pci.ta-d@PCIFN;
+event error.io.pci.ta-d@PCIFN/PCIFN;
+event error.io.pci.ta-u@PCIFN/PCIFN;
+event error.io.pci.target-rta-d@PCIFN;
+event error.io.pci.target-ma-d@PCIFN;
+event error.io.pci.nr-pw-u@PCIFN/PCIFN;
+event error.io.pci.ta-pw-u@PCIFN/PCIFN;
+event error.io.pci.retry-to-u@PCIFN/PCIFN;
+event error.io.pcix.scpe-u@PCIFN/PCIFN;
+event error.io.pcix.source-scpe-u@PCIFN;
+event error.io.pcix.spl-comp-ma-u@PCIFN/PCIFN;
+event error.io.pcix.spl-comp-ta-u@PCIFN/PCIFN;
+event error.io.pci.ma-u@PCIFN/PCIFN;
+
+event ereport.io.pci.sec-ma@PCIFN{within(5s)};
+event ereport.io.pci.sec-sta@PCIFN{within(5s)};
+event ereport.io.pci.sec-rta@PCIFN{within(5s)};
+event ereport.io.pci.sec-mdpe@PCIFN{within(5s)};
+event ereport.io.pci.sec-dpe@PCIFN{within(5s)};
+event ereport.io.pci.sec-rserr@PCIFN{within(5s)};
+event ereport.io.pci.dto@PCIFN{within(5s)};
+event ereport.io.pcix.sec-spl-dis@PCIFN{within(5s)};
+event ereport.io.pcix.spl-dis@PCIFN{within(5s)};
/*
* SERR# can propagate upstream and may be seen by other devices on the bus
@@ -528,36 +575,36 @@ event ereport.io.pcix.spl-dis@pcibus/pcidev/pcifn{within(5s)};
prop error.io.pci.serr-u@pcibus/pcidev[fromdev]/pcifn (0)->
ereport.io.pci.sserr@pcibus/pcidev<todev>/pcifn<> {todev!=fromdev};
-prop error.io.pci.serr-u@pcibus/pcidev/pcifn { IS_BDG } (1)->
- ereport.io.pci.sserr@pcibus/pcidev/pcifn;
+prop error.io.pci.serr-u@PCIFN { IS_BDG } (1)->
+ ereport.io.pci.sserr@PCIFN;
-prop error.io.pci.serr-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (2)->
- ereport.io.pci.sec-rserr@pcibus/pcidev/pcifn,
- error.io.pci.serr-u@pcibus/pcidev/pcifn;
+prop error.io.pci.serr-u@PCIFN/PCIFN (2)->
+ ereport.io.pci.sec-rserr@PCIFN,
+ error.io.pci.serr-u@PCIFN;
/*
* PERR# can propagate upstream for delayed writes. For posted writes
* it turns into an SERR#.
*/
-prop error.io.pci.perr-dw-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (2)->
- ereport.io.pci.sec-mdpe@pcibus/pcidev/pcifn,
- error.io.pci.perr-dw-u@pcibus/pcidev/pcifn;
+prop error.io.pci.perr-dw-u@PCIFN/PCIFN (2)->
+ ereport.io.pci.sec-mdpe@PCIFN,
+ error.io.pci.perr-dw-u@PCIFN;
-prop error.io.pci.perr-pw-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (2)->
- ereport.io.pci.sec-mdpe@pcibus/pcidev/pcifn,
- error.io.pci.serr-u@pcibus/pcidev/pcifn;
+prop error.io.pci.perr-pw-u@PCIFN/PCIFN (2)->
+ ereport.io.pci.sec-mdpe@PCIFN,
+ error.io.pci.serr-u@PCIFN;
/*
* PERR# can propagate downstream (only for downstream dw parity error)
*/
-prop error.io.pci.perr-d@pcibus/pcidev/pcifn { IS_LEAF } (0)->
- ereport.io.pci.mdpe@pcibus/pcidev/pcifn;
+prop error.io.pci.perr-d@PCIFN { IS_LEAF } (0)->
+ ereport.io.pci.mdpe@PCIFN;
-prop error.io.pci.perr-d@pcibus/pcidev/pcifn { IS_BDG } (1)->
- ereport.io.pci.mdpe@pcibus/pcidev/pcifn;
+prop error.io.pci.perr-d@PCIFN { IS_BDG } (1)->
+ ereport.io.pci.mdpe@PCIFN;
-prop error.io.pci.perr-d@pcibus/pcidev/pcifn (1)->
- error.io.pci.perr-d@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
+prop error.io.pci.perr-d@PCIFN (1)->
+ error.io.pci.perr-d@PCIFN/PCIFNHZ;
/*
* downstream target ereports are for any descendant device
@@ -567,195 +614,195 @@ prop error.io.pci.perr-d@pcibus/pcidev/pcifn (1)->
* determined. This is not a requirement of the Diagnosis Engine, but can be
* valuable when available.
*/
-prop error.io.pci.target-mdpe-d@pcibus/pcidev/pcifn (0)->
- ereport.io.pci.target-mdpe@pcibus/pcidev/pcifn;
+prop error.io.pci.target-mdpe-d@PCIFN (0)->
+ ereport.io.pci.target-mdpe@PCIFN;
-prop error.io.pci.target-mdpe-d@pcibus/pcidev/pcifn (1)->
- error.io.pci.target-mdpe-d@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
+prop error.io.pci.target-mdpe-d@PCIFN (1)->
+ error.io.pci.target-mdpe-d@PCIFN/PCIFNHZ;
-prop error.io.pci.target-rta-d@pcibus/pcidev/pcifn (0)->
- ereport.io.pci.target-rta@pcibus/pcidev/pcifn;
+prop error.io.pci.target-rta-d@PCIFN (0)->
+ ereport.io.pci.target-rta@PCIFN;
-prop error.io.pci.target-rta-d@pcibus/pcidev/pcifn (1)->
- error.io.pci.target-rta-d@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
+prop error.io.pci.target-rta-d@PCIFN (1)->
+ error.io.pci.target-rta-d@PCIFN/PCIFNHZ;
-prop error.io.pci.target-ma-d@pcibus/pcidev/pcifn (0)->
- ereport.io.pci.target-ma@pcibus/pcidev/pcifn;
+prop error.io.pci.target-ma-d@PCIFN (0)->
+ ereport.io.pci.target-ma@PCIFN;
-prop error.io.pci.target-ma-d@pcibus/pcidev/pcifn (1)->
- error.io.pci.target-ma-d@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
+prop error.io.pci.target-ma-d@PCIFN (1)->
+ error.io.pci.target-ma-d@PCIFN/PCIFNHZ;
/*
* target aborts propagate upstream
*/
-prop error.io.pci.ta-u@pcibus/pcidev/pcifn { IS_BDG } (1)->
- ereport.io.pci.sta@pcibus/pcidev/pcifn;
+prop error.io.pci.ta-u@PCIFN { IS_BDG } (1)->
+ ereport.io.pci.sta@PCIFN;
-prop error.io.pci.ta-u@pcibus/pcidev/pcifn { IS_LEAF } (0)->
- ereport.io.pci.sta@pcibus/pcidev/pcifn;
+prop error.io.pci.ta-u@PCIFN { IS_LEAF } (0)->
+ ereport.io.pci.sta@PCIFN;
-prop error.io.pci.ta-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (2)->
- ereport.io.pci.sec-rta@pcibus/pcidev/pcifn,
- error.io.pci.ta-u@pcibus/pcidev/pcifn;
+prop error.io.pci.ta-u@PCIFN/PCIFN (2)->
+ ereport.io.pci.sec-rta@PCIFN,
+ error.io.pci.ta-u@PCIFN;
/*
* bad data (ie invalid but not an ape or dpe) can propagate downstream,
* and at some point may result in a target or master abort
*/
-prop error.io.pci.badreq-pw-d@pcibus/pcidev/pcifn (1)->
- error.io.pci.badreq-pw-d@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>,
- error.io.pci.nr-pw-u@pcibus/pcidev/pcifn,
- error.io.pci.ta-pw-u@pcibus/pcidev/pcifn;
+prop error.io.pci.badreq-pw-d@PCIFN (1)->
+ error.io.pci.badreq-pw-d@PCIFN/PCIFNHZ,
+ error.io.pci.nr-pw-u@PCIFN,
+ error.io.pci.ta-pw-u@PCIFN;
-prop error.io.pci.badreq-pw-d@pcibus/pcidev/pcifn { IS_LEAF } (0)->
- error.io.pci.nr-pw-u@pcibus/pcidev/pcifn,
- error.io.pci.ta-pw-u@pcibus/pcidev/pcifn;
+prop error.io.pci.badreq-pw-d@PCIFN { IS_LEAF } (0)->
+ error.io.pci.nr-pw-u@PCIFN,
+ error.io.pci.ta-pw-u@PCIFN;
-prop error.io.pci.badreq-drw-d@pcibus/pcidev/pcifn (1)->
- error.io.pci.badreq-drw-d@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>,
- error.io.pci.nr-drw-u@pcibus/pcidev/pcifn,
- error.io.pci.ta-drw-u@pcibus/pcidev/pcifn;
+prop error.io.pci.badreq-drw-d@PCIFN (1)->
+ error.io.pci.badreq-drw-d@PCIFN/PCIFNHZ,
+ error.io.pci.nr-drw-u@PCIFN,
+ error.io.pci.ta-drw-u@PCIFN;
-prop error.io.pci.badreq-drw-d@pcibus/pcidev/pcifn { IS_LEAF } (0)->
- error.io.pci.nr-drw-u@pcibus/pcidev/pcifn,
- error.io.pci.ta-drw-u@pcibus/pcidev/pcifn;
+prop error.io.pci.badreq-drw-d@PCIFN { IS_LEAF } (0)->
+ error.io.pci.nr-drw-u@PCIFN,
+ error.io.pci.ta-drw-u@PCIFN;
-prop error.io.pci.nr-pw-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (2)->
- ereport.io.pci.sec-ma@pcibus/pcidev/pcifn,
- error.io.pci.serr-u@pcibus/pcidev/pcifn;
+prop error.io.pci.nr-pw-u@PCIFN/PCIFN (2)->
+ ereport.io.pci.sec-ma@PCIFN,
+ error.io.pci.serr-u@PCIFN;
-prop error.io.pci.ta-pw-u@pcibus/pcidev/pcifn { IS_LEAF } (0)->
- ereport.io.pci.sta@pcibus/pcidev/pcifn;
+prop error.io.pci.ta-pw-u@PCIFN { IS_LEAF } (0)->
+ ereport.io.pci.sta@PCIFN;
-prop error.io.pci.ta-pw-u@pcibus/pcidev/pcifn { IS_BDG } (1)->
- ereport.io.pci.sta@pcibus/pcidev/pcifn;
+prop error.io.pci.ta-pw-u@PCIFN { IS_BDG } (1)->
+ ereport.io.pci.sta@PCIFN;
-prop error.io.pci.ta-pw-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (2)->
- ereport.io.pci.sec-rta@pcibus/pcidev/pcifn,
- error.io.pci.serr-u@pcibus/pcidev/pcifn;
+prop error.io.pci.ta-pw-u@PCIFN/PCIFN (2)->
+ ereport.io.pci.sec-rta@PCIFN,
+ error.io.pci.serr-u@PCIFN;
-prop error.io.pci.nr-drw-u@pcibus/pcidev/pcifn (1)->
- error.io.pci.ma-u@pcibus/pcidev/pcifn;
+prop error.io.pci.nr-drw-u@PCIFN (1)->
+ error.io.pci.ma-u@PCIFN;
-prop error.io.pci.nr-drw-u@pcibus/pcidev/pcifn (1)->
- error.io.pci.target-rta-d@pcibus/pcidev/pcifn,
- error.io.pci.target-ma-d@pcibus/pcidev/pcifn;
+prop error.io.pci.nr-drw-u@PCIFN (1)->
+ error.io.pci.target-rta-d@PCIFN,
+ error.io.pci.target-ma-d@PCIFN;
-prop error.io.pci.ma-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (1)->
- ereport.io.pci.sec-ma@pcibus/pcidev/pcifn;
+prop error.io.pci.ma-u@PCIFN/PCIFN (1)->
+ ereport.io.pci.sec-ma@PCIFN;
-prop error.io.pci.ma-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (1)->
- error.io.pci.ma-u@pcibus/pcidev/pcifn,
- error.io.pci.ta-u@pcibus/pcidev/pcifn;
+prop error.io.pci.ma-u@PCIFN/PCIFN (1)->
+ error.io.pci.ma-u@PCIFN,
+ error.io.pci.ta-u@PCIFN;
-prop error.io.pci.ta-drw-u@pcibus/pcidev/pcifn (1)->
- error.io.pci.ta-u@pcibus/pcidev/pcifn;
+prop error.io.pci.ta-drw-u@PCIFN (1)->
+ error.io.pci.ta-u@PCIFN;
-prop error.io.pci.ta-drw-u@pcibus/pcidev/pcifn (1)->
- error.io.pci.target-rta-d@pcibus/pcidev/pcifn;
+prop error.io.pci.ta-drw-u@PCIFN (1)->
+ error.io.pci.target-rta-d@PCIFN;
/*
* bad data (ie invalid but not an ape or dpe) can propagate upstream,
* and at some point may result in a target or master abort
*/
-prop error.io.pci.badreq-pw-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (1)->
- error.io.pci.badreq-pw-u@pcibus/pcidev/pcifn,
- error.io.pci.nr-pw-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn,
- error.io.pci.ta-pw-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
+prop error.io.pci.badreq-pw-u@PCIFN/PCIFN (1)->
+ error.io.pci.badreq-pw-u@PCIFN,
+ error.io.pci.nr-pw-d@PCIFN/PCIFN,
+ error.io.pci.ta-pw-d@PCIFN/PCIFN;
-prop error.io.pci.badreq-pw-u@pcibus/pcidev/pcifn (0)->
- error.io.pci.nr-pw-d@pcibus/pcidev/pcifn,
- error.io.pci.ta-pw-d@pcibus/pcidev/pcifn;
+prop error.io.pci.badreq-pw-u@PCIFN (0)->
+ error.io.pci.nr-pw-d@PCIFN,
+ error.io.pci.ta-pw-d@PCIFN;
-prop error.io.pci.nr-pw-d@pcibus/pcidev/pcifn { IS_LEAF } (0)->
- ereport.io.pci.ma@pcibus/pcidev/pcifn;
+prop error.io.pci.nr-pw-d@PCIFN { IS_LEAF } (0)->
+ ereport.io.pci.ma@PCIFN;
-prop error.io.pci.nr-pw-d@pcibus/pcidev/pcifn { IS_BDG } (2)->
- ereport.io.pci.ma@pcibus/pcidev/pcifn,
- error.io.pci.serr-u@pcibus/pcidev/pcifn;
+prop error.io.pci.nr-pw-d@PCIFN { IS_BDG } (2)->
+ ereport.io.pci.ma@PCIFN,
+ error.io.pci.serr-u@PCIFN;
-prop error.io.pci.ta-pw-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (1)->
- ereport.io.pci.sec-sta@pcibus/pcidev/pcifn;
+prop error.io.pci.ta-pw-d@PCIFN/PCIFN (1)->
+ ereport.io.pci.sec-sta@PCIFN;
-prop error.io.pci.ta-pw-d@pcibus/pcidev/pcifn { IS_LEAF } (0)->
- ereport.io.pci.rta@pcibus/pcidev/pcifn;
+prop error.io.pci.ta-pw-d@PCIFN { IS_LEAF } (0)->
+ ereport.io.pci.rta@PCIFN;
-prop error.io.pci.ta-pw-d@pcibus/pcidev/pcifn { IS_BDG } (2)->
- ereport.io.pci.rta@pcibus/pcidev/pcifn,
- error.io.pci.serr-u@pcibus/pcidev/pcifn;
+prop error.io.pci.ta-pw-d@PCIFN { IS_BDG } (2)->
+ ereport.io.pci.rta@PCIFN,
+ error.io.pci.serr-u@PCIFN;
/*
* for delayed writes we treat upstream badreq specially as rta always
* propagates back downstream to the leaf
*/
-prop error.io.pci.badreq-drw-u@pcibus/pcidev/pcifn { IS_LEAF } (0)->
- ereport.io.pci.rta@pcibus/pcidev/pcifn,
- ereport.io.pci.ma@pcibus/pcidev/pcifn;
+prop error.io.pci.badreq-drw-u@PCIFN { IS_LEAF } (0)->
+ ereport.io.pci.rta@PCIFN,
+ ereport.io.pci.ma@PCIFN;
-prop error.io.pci.badreq-drw-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (1)->
- ereport.io.pci.ma@pcibus/pcidev/pcifn,
- ereport.io.pci.rta@pcibus/pcidev/pcifn;
+prop error.io.pci.badreq-drw-u@PCIFN/PCIFN (1)->
+ ereport.io.pci.ma@PCIFN,
+ ereport.io.pci.rta@PCIFN;
-prop error.io.pci.badreq-drw-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (0)->
- ereport.io.pci.sec-sta@pcibus/pcidev/pcifn;
+prop error.io.pci.badreq-drw-u@PCIFN/PCIFN (0)->
+ ereport.io.pci.sec-sta@PCIFN;
-prop error.io.pci.badreq-drw-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (0)->
- error.io.pci.badreq-drw-u@pcibus/pcidev/pcifn;
+prop error.io.pci.badreq-drw-u@PCIFN/PCIFN (0)->
+ error.io.pci.badreq-drw-u@PCIFN;
-prop error.io.pci.nr-drw-d@pcibus/pcidev/pcifn { IS_LEAF } (0)->
- ereport.io.pci.ma@pcibus/pcidev/pcifn;
+prop error.io.pci.nr-drw-d@PCIFN { IS_LEAF } (0)->
+ ereport.io.pci.ma@PCIFN;
-prop error.io.pci.nr-drw-d@pcibus/pcidev/pcifn { IS_BDG } (1)->
- ereport.io.pci.ma@pcibus/pcidev/pcifn;
+prop error.io.pci.nr-drw-d@PCIFN { IS_BDG } (1)->
+ ereport.io.pci.ma@PCIFN;
-prop error.io.pci.nr-drw-d@pcibus/pcidev/pcifn { IS_BDG } (0)->
- ereport.io.pci.sec-sta@pcibus/pcidev/pcifn;
+prop error.io.pci.nr-drw-d@PCIFN { IS_BDG } (0)->
+ ereport.io.pci.sec-sta@PCIFN;
-prop error.io.pci.nr-drw-d@pcibus/pcidev/pcifn (1)->
- error.io.pci.ta-d@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>,
- error.io.pci.nr-drw-d@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
+prop error.io.pci.nr-drw-d@PCIFN (1)->
+ error.io.pci.ta-d@PCIFN/PCIFNHZ,
+ error.io.pci.nr-drw-d@PCIFN/PCIFNHZ;
-prop error.io.pci.ta-drw-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (1)->
- ereport.io.pci.sec-sta@pcibus/pcidev/pcifn;
+prop error.io.pci.ta-drw-d@PCIFN/PCIFN (1)->
+ ereport.io.pci.sec-sta@PCIFN;
-prop error.io.pci.ta-drw-d@pcibus/pcidev/pcifn (1)->
- error.io.pci.ta-d@pcibus/pcidev/pcifn;
+prop error.io.pci.ta-drw-d@PCIFN (1)->
+ error.io.pci.ta-d@PCIFN;
-prop error.io.pci.ta-d@pcibus/pcidev/pcifn { IS_LEAF } (0)->
- ereport.io.pci.rta@pcibus/pcidev/pcifn;
+prop error.io.pci.ta-d@PCIFN { IS_LEAF } (0)->
+ ereport.io.pci.rta@PCIFN;
-prop error.io.pci.ta-d@pcibus/pcidev/pcifn { IS_BDG } (2)->
- ereport.io.pci.sec-sta@pcibus/pcidev/pcifn,
- ereport.io.pci.rta@pcibus/pcidev/pcifn;
+prop error.io.pci.ta-d@PCIFN { IS_BDG } (2)->
+ ereport.io.pci.sec-sta@PCIFN,
+ ereport.io.pci.rta@PCIFN;
-prop error.io.pci.ta-d@pcibus/pcidev/pcifn (1)->
- error.io.pci.ta-d@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
+prop error.io.pci.ta-d@PCIFN (1)->
+ error.io.pci.ta-d@PCIFN/PCIFNHZ;
/*
* Request with address parity error must be detected by parent device
* and can optionally result in a target or master abort.
* It may also be detected by sibling devices on a bus
*/
-prop error.io.pci.ape-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (3)->
- ereport.io.pci.sec-dpe@pcibus/pcidev/pcifn,
- ereport.io.pci.sec-rserr@pcibus/pcidev/pcifn,
- error.io.pci.serr-u@pcibus/pcidev/pcifn;
+prop error.io.pci.ape-u@PCIFN/PCIFN (3)->
+ ereport.io.pci.sec-dpe@PCIFN,
+ ereport.io.pci.sec-rserr@PCIFN,
+ error.io.pci.serr-u@PCIFN;
-prop error.io.pci.ape-u@pcibus/pcidev/pcifn (0)->
- error.io.pci.nr-drw-d@pcibus/pcidev/pcifn,
- error.io.pci.ta-drw-d@pcibus/pcidev/pcifn,
- error.io.pci.nr-pw-d@pcibus/pcidev/pcifn,
- error.io.pci.ta-pw-d@pcibus/pcidev/pcifn;
+prop error.io.pci.ape-u@PCIFN (0)->
+ error.io.pci.nr-drw-d@PCIFN,
+ error.io.pci.ta-drw-d@PCIFN,
+ error.io.pci.nr-pw-d@PCIFN,
+ error.io.pci.ta-pw-d@PCIFN;
-prop error.io.pci.ape-u@pcibus/pcidev/pcifn (0)->
- ereport.io.pci.mdpe@pcibus/pcidev/pcifn;
+prop error.io.pci.ape-u@PCIFN (0)->
+ ereport.io.pci.mdpe@PCIFN;
prop error.io.pci.ape-u@pcibus/pcidev[fromdev]/pcifn (0)->
ereport.io.pci.dpe@pcibus/pcidev<todev>/pcifn<> {fromdev != todev},
ereport.io.pci.sserr@pcibus/pcidev<todev>/pcifn<> {fromdev != todev};
-prop error.io.pci.ape-u@pcibus/pcidev/pcifn (1)->
- error.io.pci.source-ape-u@pcibus/pcidev/pcifn;
+prop error.io.pci.ape-u@PCIFN (1)->
+ error.io.pci.source-ape-u@PCIFN;
/*
* If the bridge sees an upstream split completion error (pci-x only) it could
@@ -767,63 +814,63 @@ prop error.io.pci.ape-u@pcibus/pcidev/pcifn (1)->
* just drop the request (which the child device sees as a split
* completion ma)
*/
-prop error.io.pcix.scpe-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (0)->
- ereport.io.pci.sec-sta@pcibus/pcidev/pcifn,
- ereport.io.pci.sec-dpe@pcibus/pcidev/pcifn,
- ereport.io.pci.sec-rserr@pcibus/pcidev/pcifn,
- error.io.pci.serr-u@pcibus/pcidev/pcifn;
+prop error.io.pcix.scpe-u@PCIFN/PCIFN (0)->
+ ereport.io.pci.sec-sta@PCIFN,
+ ereport.io.pci.sec-dpe@PCIFN,
+ ereport.io.pci.sec-rserr@PCIFN,
+ error.io.pci.serr-u@PCIFN;
-prop error.io.pcix.scpe-u@pcibus/pcidev/pcifn (1)->
- error.io.pcix.spl-comp-ma-d@pcibus/pcidev/pcifn,
- error.io.pcix.spl-comp-ta-d@pcibus/pcidev/pcifn;
+prop error.io.pcix.scpe-u@PCIFN (1)->
+ error.io.pcix.spl-comp-ma-d@PCIFN,
+ error.io.pcix.spl-comp-ta-d@PCIFN;
-prop error.io.pcix.spl-comp-ma-d@pcibus/pcidev/pcifn (1)->
- error.io.pci.serr-u@pcibus/pcidev/pcifn;
+prop error.io.pcix.spl-comp-ma-d@PCIFN (1)->
+ error.io.pci.serr-u@PCIFN;
-prop error.io.pcix.spl-comp-ma-d@pcibus/pcidev/pcifn { IS_LEAF } (0)->
- ereport.io.pci.sserr@pcibus/pcidev/pcifn,
- ereport.io.pcix.spl-dis@pcibus/pcidev/pcifn;
+prop error.io.pcix.spl-comp-ma-d@PCIFN { IS_LEAF } (0)->
+ ereport.io.pci.sserr@PCIFN,
+ ereport.io.pcix.spl-dis@PCIFN;
-prop error.io.pcix.spl-comp-ma-d@pcibus/pcidev/pcifn { IS_BDG } (2)->
- ereport.io.pcix.spl-dis@pcibus/pcidev/pcifn,
- ereport.io.pci.ma@pcibus/pcidev/pcifn;
+prop error.io.pcix.spl-comp-ma-d@PCIFN { IS_BDG } (2)->
+ ereport.io.pcix.spl-dis@PCIFN,
+ ereport.io.pci.ma@PCIFN;
-prop error.io.pcix.spl-comp-ta-d@pcibus/pcidev/pcifn (1)->
- error.io.pci.serr-u@pcibus/pcidev/pcifn;
+prop error.io.pcix.spl-comp-ta-d@PCIFN (1)->
+ error.io.pci.serr-u@PCIFN;
-prop error.io.pcix.spl-comp-ta-d@pcibus/pcidev/pcifn { IS_LEAF } (0)->
- ereport.io.pci.sserr@pcibus/pcidev/pcifn,
- ereport.io.pcix.spl-dis@pcibus/pcidev/pcifn;
+prop error.io.pcix.spl-comp-ta-d@PCIFN { IS_LEAF } (0)->
+ ereport.io.pci.sserr@PCIFN,
+ ereport.io.pcix.spl-dis@PCIFN;
-prop error.io.pcix.spl-comp-ta-d@pcibus/pcidev/pcifn { IS_BDG } (2)->
- ereport.io.pcix.spl-dis@pcibus/pcidev/pcifn,
- ereport.io.pci.rta@pcibus/pcidev/pcifn;
+prop error.io.pcix.spl-comp-ta-d@PCIFN { IS_BDG } (2)->
+ ereport.io.pcix.spl-dis@PCIFN,
+ ereport.io.pci.rta@PCIFN;
-prop error.io.pcix.scpe-u@pcibus/pcidev/pcifn (1)->
- error.io.pcix.source-scpe-u@pcibus/pcidev/pcifn;
+prop error.io.pcix.scpe-u@PCIFN (1)->
+ error.io.pcix.source-scpe-u@PCIFN;
/*
* request with address parity error must be detected by child device
* and can optionally result in a target or master abort.
*/
-prop error.io.pci.ape-d@pcibus/pcidev/pcifn (1)->
- error.io.pci.serr-u@pcibus/pcidev/pcifn;
+prop error.io.pci.ape-d@PCIFN (1)->
+ error.io.pci.serr-u@PCIFN;
-prop error.io.pci.ape-d@pcibus/pcidev/pcifn { IS_LEAF } (0)->
- error.io.pci.leaf-ape-d@pcibus/pcidev/pcifn;
+prop error.io.pci.ape-d@PCIFN { IS_LEAF } (0)->
+ error.io.pci.leaf-ape-d@PCIFN;
-prop error.io.pci.leaf-ape-d@pcibus/pcidev/pcifn { IS_LEAF } (2)->
- ereport.io.pci.sserr@pcibus/pcidev/pcifn,
- ereport.io.pci.dpe@pcibus/pcidev/pcifn;
+prop error.io.pci.leaf-ape-d@PCIFN { IS_LEAF } (2)->
+ ereport.io.pci.sserr@PCIFN,
+ ereport.io.pci.dpe@PCIFN;
-prop error.io.pci.ape-d@pcibus/pcidev/pcifn { IS_BDG } (1)->
- ereport.io.pci.dpe@pcibus/pcidev/pcifn;
+prop error.io.pci.ape-d@PCIFN { IS_BDG } (1)->
+ ereport.io.pci.dpe@PCIFN;
-prop error.io.pci.ape-d@pcibus/pcidev/pcifn (0)->
- error.io.pci.ta-pw-u@pcibus/pcidev/pcifn,
- error.io.pci.ta-drw-u@pcibus/pcidev/pcifn,
- error.io.pci.nr-pw-u@pcibus/pcidev/pcifn,
- error.io.pci.nr-drw-u@pcibus/pcidev/pcifn;
+prop error.io.pci.ape-d@PCIFN (0)->
+ error.io.pci.ta-pw-u@PCIFN,
+ error.io.pci.ta-drw-u@PCIFN,
+ error.io.pci.nr-pw-u@PCIFN,
+ error.io.pci.nr-drw-u@PCIFN;
/*
* If the device sees a downstream split completion error (pci-x only) it could
@@ -835,27 +882,27 @@ prop error.io.pci.ape-d@pcibus/pcidev/pcifn (0)->
* just drop the request (which the parent bridge sees as a split
* completion ma)
*/
-prop error.io.pcix.scpe-d@pcibus/pcidev/pcifn (0)->
- ereport.io.pci.sta@pcibus/pcidev/pcifn,
- ereport.io.pci.dpe@pcibus/pcidev/pcifn,
- ereport.io.pci.sserr@pcibus/pcidev/pcifn,
- error.io.pci.serr-u@pcibus/pcidev/pcifn;
+prop error.io.pcix.scpe-d@PCIFN (0)->
+ ereport.io.pci.sta@PCIFN,
+ ereport.io.pci.dpe@PCIFN,
+ ereport.io.pci.sserr@PCIFN,
+ error.io.pci.serr-u@PCIFN;
-prop error.io.pcix.scpe-d@pcibus/pcidev/pcifn (1)->
- error.io.pcix.spl-comp-ma-u@pcibus/pcidev/pcifn,
- error.io.pcix.spl-comp-ta-u@pcibus/pcidev/pcifn;
+prop error.io.pcix.scpe-d@PCIFN (1)->
+ error.io.pcix.spl-comp-ma-u@PCIFN,
+ error.io.pcix.spl-comp-ta-u@PCIFN;
-prop error.io.pcix.spl-comp-ma-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (2)->
- ereport.io.pcix.sec-spl-dis@pcibus/pcidev/pcifn,
- error.io.pci.serr-u@pcibus/pcidev/pcifn;
+prop error.io.pcix.spl-comp-ma-u@PCIFN/PCIFN (2)->
+ ereport.io.pcix.sec-spl-dis@PCIFN,
+ error.io.pci.serr-u@PCIFN;
-prop error.io.pcix.spl-comp-ma-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (0)->
- ereport.io.pci.sec-ma@pcibus/pcidev/pcifn;
+prop error.io.pcix.spl-comp-ma-u@PCIFN/PCIFN (0)->
+ ereport.io.pci.sec-ma@PCIFN;
-prop error.io.pcix.spl-comp-ta-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (3)->
- ereport.io.pcix.sec-spl-dis@pcibus/pcidev/pcifn,
- error.io.pci.serr-u@pcibus/pcidev/pcifn,
- ereport.io.pci.sec-rta@pcibus/pcidev/pcifn;
+prop error.io.pcix.spl-comp-ta-u@PCIFN/PCIFN (3)->
+ ereport.io.pcix.sec-spl-dis@PCIFN,
+ error.io.pci.serr-u@PCIFN,
+ ereport.io.pci.sec-rta@PCIFN;
/*
* request with data parity error can propagate upstream
@@ -866,28 +913,28 @@ prop error.io.pcix.spl-comp-ta-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (3)->
* if there is a dpe on a retry on a delayed write, we don't send another
* retry, and eventually the dto timer will expire
*/
-prop error.io.pci.dpdata-pw-u@pcibus/pcidev/pcifn { IS_LEAF } (0)->
- ereport.io.pci.mdpe@pcibus/pcidev/pcifn;
+prop error.io.pci.dpdata-pw-u@PCIFN { IS_LEAF } (0)->
+ ereport.io.pci.mdpe@PCIFN;
-prop error.io.pci.dpdata-pw-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (3)->
- ereport.io.pci.mdpe@pcibus/pcidev/pcifn,
- ereport.io.pci.sec-dpe@pcibus/pcidev/pcifn,
- error.io.pci.dpdata-pw-u@pcibus/pcidev/pcifn;
+prop error.io.pci.dpdata-pw-u@PCIFN/PCIFN (3)->
+ ereport.io.pci.mdpe@PCIFN,
+ ereport.io.pci.sec-dpe@PCIFN,
+ error.io.pci.dpdata-pw-u@PCIFN;
-prop error.io.pci.dpdata-dw-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (1)->
- ereport.io.pci.sec-dpe@pcibus/pcidev/pcifn;
+prop error.io.pci.dpdata-dw-u@PCIFN/PCIFN (1)->
+ ereport.io.pci.sec-dpe@PCIFN;
-prop error.io.pci.dpdata-dw-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (0)->
- ereport.io.pci.mdpe@pcibus/pcidev/pcifn,
- error.io.pci.dpdata-dw-u@pcibus/pcidev/pcifn;
+prop error.io.pci.dpdata-dw-u@PCIFN/PCIFN (0)->
+ ereport.io.pci.mdpe@PCIFN,
+ error.io.pci.dpdata-dw-u@PCIFN;
-prop error.io.pci.dpdata-dw-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (0)->
- error.io.pci.retry-to-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
+prop error.io.pci.dpdata-dw-u@PCIFN/PCIFN (0)->
+ error.io.pci.retry-to-u@PCIFN/PCIFN;
-prop error.io.pci.dpdata-dr-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (3)->
- ereport.io.pci.sec-dpe@pcibus/pcidev/pcifn,
- ereport.io.pci.sec-mdpe@pcibus/pcidev/pcifn,
- error.io.pci.dpdata-dr-u@pcibus/pcidev/pcifn;
+prop error.io.pci.dpdata-dr-u@PCIFN/PCIFN (3)->
+ ereport.io.pci.sec-dpe@PCIFN,
+ ereport.io.pci.sec-mdpe@PCIFN,
+ error.io.pci.dpdata-dr-u@PCIFN;
/*
* Request with data parity error can propagate downstream. A hardened
@@ -902,203 +949,123 @@ prop error.io.pci.dpdata-dr-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (3)->
* if there is a dpe on a retry on a delayed write, we don't send another
* retry, and eventually the dto timer will expire
*/
-prop error.io.pci.f-dpdata-pw-d@pcibus/pcidev/pcifn (2)->
- error.io.pci.perr-pw-u@pcibus/pcidev/pcifn,
- error.io.pci.source-f-perr-u@pcibus/pcidev/pcifn;
-
-prop error.io.pci.f-dpdata-pw-d@pcibus/pcidev/pcifn { IS_LEAF } (0)->
- ereport.io.pci.dpe@pcibus/pcidev/pcifn;
-
-prop error.io.pci.f-dpdata-pw-d@pcibus/pcidev/pcifn { IS_BDG } (2)->
- ereport.io.pci.dpe@pcibus/pcidev/pcifn,
- ereport.io.pci.sec-mdpe@pcibus/pcidev/pcifn;
-
-prop error.io.pci.f-dpdata-pw-d@pcibus/pcidev/pcifn (1)->
- error.io.pci.dpdata-pw-fwd-d@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
-
-prop error.io.pci.nf-dpdata-pw-d@pcibus/pcidev/pcifn (2)->
- error.io.pci.perr-pw-u@pcibus/pcidev/pcifn,
- error.io.pci.source-nf-perr-u@pcibus/pcidev/pcifn;
+prop error.io.pci.f-dpe-d@PCIFN (1)->
+ error.io.pci.dpdata-pw-d@PCIFN,
+ error.io.pci.dpdata-dw-d@PCIFN,
+ error.io.pci.dpdata-dr-d@PCIFN;
-prop error.io.pci.nf-dpdata-pw-d@pcibus/pcidev/pcifn { IS_LEAF } (0)->
- ereport.io.pci.dpe@pcibus/pcidev/pcifn;
+prop error.io.pci.f-dpe-d@PCIFN (1)->
+ error.io.pci.f-source-dpdata-u@PCIFN;
-prop error.io.pci.nf-dpdata-pw-d@pcibus/pcidev/pcifn { IS_BDG } (2)->
- ereport.io.pci.dpe@pcibus/pcidev/pcifn,
- ereport.io.pci.sec-mdpe@pcibus/pcidev/pcifn;
+prop error.io.pci.deg-dpe-d@PCIFN (1)->
+ error.io.pci.dpdata-pw-d@PCIFN,
+ error.io.pci.dpdata-dw-d@PCIFN,
+ error.io.pci.dpdata-dr-d@PCIFN;
-prop error.io.pci.nf-dpdata-pw-d@pcibus/pcidev/pcifn (1)->
- error.io.pci.dpdata-pw-fwd-d@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
+prop error.io.pci.deg-dpe-d@PCIFN (1)->
+ error.io.pci.deg-source-dpdata-u@PCIFN;
-prop error.io.pci.dpdata-pw-fwd-d@pcibus/pcidev/pcifn { IS_LEAF } (0)->
- ereport.io.pci.dpe@pcibus/pcidev/pcifn;
+prop error.io.pci.nf-dpe-d@PCIFN (1)->
+ error.io.pci.dpdata-pw-d@PCIFN,
+ error.io.pci.dpdata-dw-d@PCIFN,
+ error.io.pci.dpdata-dr-d@PCIFN;
-prop error.io.pci.dpdata-pw-fwd-d@pcibus/pcidev/pcifn { IS_BDG } (2)->
- ereport.io.pci.dpe@pcibus/pcidev/pcifn,
- ereport.io.pci.sec-mdpe@pcibus/pcidev/pcifn;
+prop error.io.pci.nf-dpe-d@PCIFN (1)->
+ error.io.pci.nf-source-dpdata-u@PCIFN;
-prop error.io.pci.dpdata-pw-fwd-d@pcibus/pcidev/pcifn (1)->
- error.io.pci.dpdata-pw-fwd-d@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
+prop error.io.pci.dpdata-pw-d@PCIFN (2)->
+ error.io.pci.perr-pw-u@PCIFN,
+ error.io.pci.dpdata-pw-fwd-d@PCIFN;
-prop error.io.pci.f-dpdata-dw-d@pcibus/pcidev/pcifn (3)->
- error.io.pci.perr-dw-u@pcibus/pcidev/pcifn,
- error.io.pci.source-f-perr-u@pcibus/pcidev/pcifn,
- error.io.pci.target-mdpe-d@pcibus/pcidev/pcifn;
+prop error.io.pci.dpdata-pw-fwd-d@PCIFN { IS_LEAF } (1)->
+ error.io.pci.source-perr-u@PCIFN;
-prop error.io.pci.f-dpdata-dw-d@pcibus/pcidev/pcifn (0)->
- ereport.io.pci.sec-mdpe@pcibus/pcidev/pcifn,
- error.io.pci.dpdata-dw-fwd-d@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
+prop error.io.pci.dpdata-pw-fwd-d@PCIFN { IS_LEAF } (0)->
+ ereport.io.pci.dpe@PCIFN;
-prop error.io.pci.f-dpdata-dw-d@pcibus/pcidev/pcifn { IS_LEAF } (0)->
- ereport.io.pci.dpe@pcibus/pcidev/pcifn;
+prop error.io.pci.dpdata-pw-fwd-d@PCIFN { IS_BDG } (2)->
+ ereport.io.pci.dpe@PCIFN,
+ ereport.io.pci.sec-mdpe@PCIFN;
-prop error.io.pci.f-dpdata-dw-d@pcibus/pcidev/pcifn { IS_BDG } (1)->
- ereport.io.pci.dpe@pcibus/pcidev/pcifn;
+prop error.io.pci.dpdata-pw-fwd-d@PCIFN (1)->
+ error.io.pci.dpdata-pw-fwd-d@PCIFN/PCIFNHZ;
-prop error.io.pci.f-dpdata-dw-d@pcibus/pcidev/pcifn { IS_BDG } (0)->
- error.io.pci.retry-to-d@pcibus/pcidev/pcifn;
+prop error.io.pci.dpdata-dw-d@PCIFN (3)->
+ error.io.pci.perr-dw-u@PCIFN,
+ error.io.pci.target-mdpe-d@PCIFN,
+ error.io.pci.dpdata-dw-fwd-d@PCIFN;
-prop error.io.pci.nf-dpdata-dw-d@pcibus/pcidev/pcifn (3)->
- error.io.pci.perr-dw-u@pcibus/pcidev/pcifn,
- error.io.pci.source-nf-perr-u@pcibus/pcidev/pcifn,
- error.io.pci.target-mdpe-d@pcibus/pcidev/pcifn;
+prop error.io.pci.dpdata-dw-d@PCIFN { IS_BDG } (1)->
+ ereport.io.pci.dpe@PCIFN;
-prop error.io.pci.nf-dpdata-dw-d@pcibus/pcidev/pcifn (0)->
- ereport.io.pci.sec-mdpe@pcibus/pcidev/pcifn,
- error.io.pci.dpdata-dw-fwd-d@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
+prop error.io.pci.dpdata-dw-d@PCIFN { IS_BDG } (0)->
+ error.io.pci.retry-to-d@PCIFN;
-prop error.io.pci.nf-dpdata-dw-d@pcibus/pcidev/pcifn { IS_LEAF } (0)->
- ereport.io.pci.dpe@pcibus/pcidev/pcifn;
+prop error.io.pci.dpdata-dw-fwd-d@PCIFN { IS_LEAF } (1)->
+ error.io.pci.source-perr-u@PCIFN;
-prop error.io.pci.nf-dpdata-dw-d@pcibus/pcidev/pcifn { IS_BDG } (1)->
- ereport.io.pci.dpe@pcibus/pcidev/pcifn;
+prop error.io.pci.dpdata-dw-fwd-d@PCIFN { IS_LEAF } (0)->
+ ereport.io.pci.dpe@PCIFN;
-prop error.io.pci.nf-dpdata-dw-d@pcibus/pcidev/pcifn { IS_BDG } (0)->
- error.io.pci.retry-to-d@pcibus/pcidev/pcifn;
+prop error.io.pci.dpdata-dw-fwd-d@PCIFN { IS_BDG } (0)->
+ ereport.io.pci.dpe@PCIFN,
+ ereport.io.pci.sec-mdpe@PCIFN;
-prop error.io.pci.dpdata-dw-fwd-d@pcibus/pcidev/pcifn (0)->
- ereport.io.pci.dpe@pcibus/pcidev/pcifn,
- ereport.io.pci.sec-mdpe@pcibus/pcidev/pcifn,
- error.io.pci.dpdata-dw-fwd-d@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
+prop error.io.pci.dpdata-dw-fwd-d@PCIFN (0)->
+ error.io.pci.dpdata-dw-fwd-d@PCIFN/PCIFNHZ;
-prop error.io.pci.f-dpdata-dr-d@pcibus/pcidev/pcifn (2)->
- error.io.pci.perr-dr-u@pcibus/pcidev/pcifn,
- error.io.pci.source-f-perr-u@pcibus/pcidev/pcifn;
+prop error.io.pci.dpdata-dr-d@PCIFN (2)->
+ error.io.pci.dpdata-dr-fwd-d@PCIFN,
+ error.io.pci.perr-dr-u@PCIFN;
-prop error.io.pci.f-dpdata-dr-d@pcibus/pcidev/pcifn { IS_LEAF } (0)->
- ereport.io.pci.dpe@pcibus/pcidev/pcifn,
- ereport.io.pci.mdpe@pcibus/pcidev/pcifn;
+prop error.io.pci.dpdata-dr-fwd-d@PCIFN { IS_LEAF } (1)->
+ error.io.pci.source-perr-u@PCIFN;
-prop error.io.pci.f-dpdata-dr-d@pcibus/pcidev/pcifn { IS_BDG } (2)->
- ereport.io.pci.dpe@pcibus/pcidev/pcifn,
- ereport.io.pci.mdpe@pcibus/pcidev/pcifn;
+prop error.io.pci.dpdata-dr-fwd-d@PCIFN { IS_LEAF } (0)->
+ ereport.io.pci.dpe@PCIFN,
+ ereport.io.pci.mdpe@PCIFN;
-prop error.io.pci.f-dpdata-dr-d@pcibus/pcidev/pcifn (1)->
- error.io.pci.f-dpdata-dr-d@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
+prop error.io.pci.dpdata-dr-fwd-d@PCIFN { IS_BDG } (2)->
+ ereport.io.pci.dpe@PCIFN,
+ ereport.io.pci.mdpe@PCIFN;
-prop error.io.pci.nf-dpdata-dr-d@pcibus/pcidev/pcifn (2)->
- error.io.pci.perr-dr-u@pcibus/pcidev/pcifn,
- error.io.pci.source-nf-perr-u@pcibus/pcidev/pcifn;
-
-prop error.io.pci.nf-dpdata-dr-d@pcibus/pcidev/pcifn { IS_LEAF } (0)->
- ereport.io.pci.dpe@pcibus/pcidev/pcifn,
- ereport.io.pci.mdpe@pcibus/pcidev/pcifn;
-
-prop error.io.pci.nf-dpdata-dr-d@pcibus/pcidev/pcifn { IS_BDG } (2)->
- ereport.io.pci.dpe@pcibus/pcidev/pcifn,
- ereport.io.pci.mdpe@pcibus/pcidev/pcifn;
-
-prop error.io.pci.nf-dpdata-dr-d@pcibus/pcidev/pcifn (1)->
- error.io.pci.nf-dpdata-dr-d@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
+prop error.io.pci.dpdata-dr-fwd-d@PCIFN (1)->
+ error.io.pci.dpdata-dr-fwd-d@PCIFN/PCIFNHZ;
/*
* delayed read/write retry timeout can cause dto at a bridge
*/
-prop error.io.pci.retry-to-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (0)->
- error.io.pci.retry-to-u@pcibus/pcidev/pcifn;
+prop error.io.pci.retry-to-u@PCIFN/PCIFN (0)->
+ error.io.pci.retry-to-u@PCIFN;
-prop error.io.pci.retry-to-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (1)->
- ereport.io.pci.dto@pcibus/pcidev/pcifn;
+prop error.io.pci.retry-to-u@PCIFN/PCIFN (1)->
+ ereport.io.pci.dto@PCIFN;
-prop error.io.pci.retry-to-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn (0)->
- error.io.pci.serr-u@pcibus/pcidev/pcifn;
+prop error.io.pci.retry-to-u@PCIFN/PCIFN (0)->
+ error.io.pci.serr-u@PCIFN;
-prop error.io.pci.retry-to-d@pcibus/pcidev/pcifn (0)->
- error.io.pci.retry-to-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
+prop error.io.pci.retry-to-d@PCIFN (0)->
+ error.io.pci.retry-to-d@PCIFN/PCIFN;
-prop error.io.pci.retry-to-d@pcibus/pcidev/pcifn { IS_BDG } (1)->
- ereport.io.pci.dto@pcibus/pcidev/pcifn;
+prop error.io.pci.retry-to-d@PCIFN { IS_BDG } (1)->
+ ereport.io.pci.dto@PCIFN;
-prop error.io.pci.retry-to-d@pcibus/pcidev/pcifn { IS_BDG } (0)->
- error.io.pci.serr-u@pcibus/pcidev/pcifn;
+prop error.io.pci.retry-to-d@PCIFN { IS_BDG } (0)->
+ error.io.pci.serr-u@PCIFN;
/*
* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
* source- propagations.
* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*/
-event error.io.pci.source-f-dpdata-w-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pci.source-nf-dpdata-w-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pci.source-f-dpdata-r-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pci.source-nf-dpdata-r-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pci.source-f-perr-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pci.source-nf-perr-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pci.source-ape-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pcix.source-scpe-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.service.restored@pcibus/pcidev/pcifn;
-
-event ereport.io.service.lost@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.service.degraded@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.service.unaffected@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.service.restored@pcibus/pcidev/pcifn{within(30s)};
-
-prop error.io.pci.source-f-dpdata-w-u@pcibus/pcidev/pcifn { IS_LEAF } (0)->
- ereport.io.service.lost@pcibus/pcidev/pcifn,
- ereport.io.service.degraded@pcibus/pcidev/pcifn;
-
-prop error.io.pci.source-nf-dpdata-w-u@pcibus/pcidev/pcifn { IS_LEAF } (1)->
- ereport.io.service.unaffected@pcibus/pcidev/pcifn,
- error.io.service.restored@pcibus/pcidev/pcifn;
-
-prop error.io.pci.source-f-dpdata-r-u@pcibus/pcidev/pcifn { IS_LEAF } (0)->
- ereport.io.service.lost@pcibus/pcidev/pcifn,
- ereport.io.service.degraded@pcibus/pcidev/pcifn;
-
-prop error.io.pci.source-nf-dpdata-r-u@pcibus/pcidev/pcifn { IS_LEAF } (1)->
- ereport.io.service.unaffected@pcibus/pcidev/pcifn,
- error.io.service.restored@pcibus/pcidev/pcifn;
-
-prop error.io.pci.source-f-perr-u@pcibus/pcidev/pcifn { IS_LEAF } (0)->
- ereport.io.service.lost@pcibus/pcidev/pcifn,
- ereport.io.service.degraded@pcibus/pcidev/pcifn;
-
-prop error.io.pci.source-nf-perr-u@pcibus/pcidev/pcifn { IS_LEAF } (1)->
- ereport.io.service.unaffected@pcibus/pcidev/pcifn,
- error.io.service.restored@pcibus/pcidev/pcifn;
-
-prop error.io.pci.source-f-perr-u@pcibus/pcidev/pcifn (1)->
- error.io.pci.source-f-perr-u@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
-
-prop error.io.pci.source-nf-perr-u@pcibus/pcidev/pcifn (1)->
- error.io.pci.source-nf-perr-u@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
-
-prop error.io.pci.source-f-dpdata-w-u@pcibus/pcidev/pcifn (1)->
- error.io.pci.source-f-dpdata-w-u@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
-
-prop error.io.pci.source-nf-dpdata-w-u@pcibus/pcidev/pcifn (1)->
- error.io.pci.source-nf-dpdata-w-u@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
-
-prop error.io.pci.source-f-dpdata-r-u@pcibus/pcidev/pcifn (1)->
- error.io.pci.source-f-dpdata-r-u@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
-
-prop error.io.pci.source-nf-dpdata-r-u@pcibus/pcidev/pcifn (1)->
- error.io.pci.source-nf-dpdata-r-u@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
-
-prop error.io.pci.source-ape-u@pcibus/pcidev/pcifn (1)->
- error.io.pci.source-ape-u@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
+event error.io.pci.source-ape-u@PCIFN/PCIFN;
+event error.io.pcix.source-scpe-u@PCIFN/PCIFN;
+
+prop error.io.pci.source-ape-u@PCIFN (1)->
+ error.io.pci.source-ape-u@PCIFN/PCIFNHZ;
-prop error.io.pcix.source-scpe-u@pcibus/pcidev/pcifn (1)->
- error.io.pcix.source-scpe-u@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
+prop error.io.pcix.source-scpe-u@PCIFN (1)->
+ error.io.pcix.source-scpe-u@PCIFN/PCIFNHZ;
/*
* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
@@ -1106,117 +1073,53 @@ prop error.io.pcix.source-scpe-u@pcibus/pcidev/pcifn (1)->
* no service impact - otherwise fail immediately
* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*/
-event ereport.io.device.inval_state@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.device.no_response@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.device.stall@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.device.badint_limit@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.device.intern_corr@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.device.intern_uncorr@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.device.nf-device@pcibus/pcidev/pcifn{within(5s)};
-
-prop error.io.service.restored@pcibus/pcidev/pcifn { IS_LEAF } (1)->
- ereport.io.service.lost@pcibus/pcidev/pcifn,
- ereport.io.service.degraded@pcibus/pcidev/pcifn;
-
-prop error.io.service.restored@pcibus/pcidev/pcifn { IS_LEAF } (1)->
- ereport.io.service.restored@pcibus/pcidev/pcifn;
-
-prop error.io.device.f-device@pcibus/pcidev/pcifn { IS_LEAF } (1)->
- ereport.io.device.inval_state@pcibus/pcidev/pcifn,
- ereport.io.device.no_response@pcibus/pcidev/pcifn,
- ereport.io.device.stall@pcibus/pcidev/pcifn,
- ereport.io.device.badint_limit@pcibus/pcidev/pcifn,
- ereport.io.device.intern_corr@pcibus/pcidev/pcifn,
- ereport.io.device.intern_uncorr@pcibus/pcidev/pcifn;
-
-prop error.io.device.f-device@pcibus/pcidev/pcifn { IS_LEAF } (1)->
- ereport.io.service.lost@pcibus/pcidev/pcifn,
- ereport.io.service.degraded@pcibus/pcidev/pcifn;
-
-engine serd.io.device.nonfatal@pcibus/pcidev/pcifn,
- N=NONFATAL_COUNT, T=NONFATAL_TIME, method=persistent,
- trip=ereport.io.device.nf-device@pcibus/pcidev/pcifn;
-
-event upset.io.device.nonfatal@pcibus/pcidev/pcifn,
- engine=serd.io.device.nonfatal@pcibus/pcidev/pcifn;
-
-prop error.io.device.nf-device@pcibus/pcidev/pcifn { IS_LEAF } (1)->
- ereport.io.device.nf-device@pcibus/pcidev/pcifn;
-
-prop error.io.device.nf-device@pcibus/pcidev/pcifn { IS_LEAF } (0)->
- ereport.io.device.inval_state@pcibus/pcidev/pcifn,
- ereport.io.device.no_response@pcibus/pcidev/pcifn,
- ereport.io.device.stall@pcibus/pcidev/pcifn,
- ereport.io.device.badint_limit@pcibus/pcidev/pcifn,
- ereport.io.device.intern_corr@pcibus/pcidev/pcifn,
- ereport.io.device.intern_uncorr@pcibus/pcidev/pcifn,
- ereport.io.service.unaffected@pcibus/pcidev/pcifn,
- error.io.service.restored@pcibus/pcidev/pcifn;
-
-prop upset.io.device.nonfatal@pcibus/pcidev/pcifn { IS_LEAF } (1)->
- ereport.io.device.inval_state@pcibus/pcidev/pcifn,
- ereport.io.device.no_response@pcibus/pcidev/pcifn,
- ereport.io.device.stall@pcibus/pcidev/pcifn,
- ereport.io.device.badint_limit@pcibus/pcidev/pcifn,
- ereport.io.device.intern_corr@pcibus/pcidev/pcifn,
- ereport.io.device.intern_uncorr@pcibus/pcidev/pcifn;
-
-prop upset.io.device.nonfatal@pcibus/pcidev/pcifn { IS_LEAF } (1)->
- ereport.io.service.unaffected@pcibus/pcidev/pcifn,
- error.io.service.restored@pcibus/pcidev/pcifn;
-
-/*
- * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- * Handling of pci express nonfatal errors (dpe). Use serd engine if
- * no service impact - otherwise fail immediately
- * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- */
-event ereport.io.pci.nf-dpe-d@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.pci.nf-dpe-u@pcibus/pcidev/pcifn{within(5s)};
-
-engine serd.io.pci.nf-dpe-u@pcibus/pcidev/pcifn,
- N=NONFATAL_DPE_U_COUNT, T=NONFATAL_DPE_U_TIME, method=persistent,
- trip=ereport.io.pci.nf-dpe-u@pcibus/pcidev/pcifn;
-
-event upset.io.pci.nf-dpe-u@pcibus/pcidev/pcifn,
- engine=serd.io.pci.nf-dpe-u@pcibus/pcidev/pcifn;
-
-prop error.io.pci.nf-dpe-u@pcibus/pcidev/pcifn { IS_LEAF } (1)->
- ereport.io.pci.nf-dpe-u@pcibus/pcidev/pcifn;
-
-prop error.io.pci.nf-dpe-u@pcibus/pcidev/pcifn { IS_LEAF } (0)->
- error.io.pci.nonfatal-dpe-u@pcibus/pcidev/pcifn,
- ereport.io.service.unaffected@pcibus/pcidev/pcifn,
- error.io.service.restored@pcibus/pcidev/pcifn;
-
-prop upset.io.pci.nf-dpe-u@pcibus/pcidev/pcifn { IS_LEAF } (1)->
- error.io.pci.nonfatal-dpe-u@pcibus/pcidev/pcifn;
-
-prop upset.io.pci.nf-dpe-u@pcibus/pcidev/pcifn { IS_LEAF } (1)->
- ereport.io.service.unaffected@pcibus/pcidev/pcifn,
- error.io.service.restored@pcibus/pcidev/pcifn;
-
-engine serd.io.pci.nf-dpe-d@pcibus/pcidev/pcifn,
- N=NONFATAL_DPE_D_COUNT, T=NONFATAL_DPE_D_TIME, method=persistent,
- trip=ereport.io.pci.nf-dpe-d@pcibus/pcidev/pcifn;
-
-event upset.io.pci.nf-dpe-d@pcibus/pcidev/pcifn,
- engine=serd.io.pci.nf-dpe-d@pcibus/pcidev/pcifn;
-
-prop error.io.pci.nf-dpe-d@pcibus/pcidev/pcifn { IS_LEAF } (1)->
- ereport.io.pci.nf-dpe-d@pcibus/pcidev/pcifn;
-
-prop error.io.pci.nf-dpe-d@pcibus/pcidev/pcifn { IS_LEAF } (0)->
- error.io.pci.nonfatal-dpe-d@pcibus/pcidev/pcifn,
- ereport.io.service.unaffected@pcibus/pcidev/pcifn,
- error.io.service.restored@pcibus/pcidev/pcifn;
-
-prop upset.io.pci.nf-dpe-d@pcibus/pcidev/pcifn { IS_LEAF } (1)->
- error.io.pci.nonfatal-dpe-d@pcibus/pcidev/pcifn;
-
-prop upset.io.pci.nf-dpe-d@pcibus/pcidev/pcifn { IS_LEAF } (1)->
- ereport.io.service.unaffected@pcibus/pcidev/pcifn,
- error.io.service.restored@pcibus/pcidev/pcifn;
+event ereport.io.device.inval_state@PCIFN{within(5s)};
+event ereport.io.device.no_response@PCIFN{within(5s)};
+event ereport.io.device.stall@PCIFN{within(5s)};
+event ereport.io.device.badint_limit@PCIFN{within(5s)};
+event ereport.io.device.intern_corr@PCIFN{within(5s)};
+event ereport.io.device.intern_uncorr@PCIFN{within(5s)};
+
+prop error.io.service.restored@PCIFN { IS_LEAF } (1)->
+ ereport.io.service.lost@PCIFN,
+ ereport.io.service.degraded@PCIFN;
+
+prop error.io.service.restored@PCIFN { IS_LEAF } (1)->
+ ereport.io.service.restored@PCIFN;
+
+prop error.io.device.f-device@PCIFN { IS_LEAF } (1)->
+ ereport.io.device.inval_state@PCIFN,
+ ereport.io.device.no_response@PCIFN,
+ ereport.io.device.stall@PCIFN,
+ ereport.io.device.badint_limit@PCIFN,
+ ereport.io.device.intern_corr@PCIFN,
+ ereport.io.device.intern_uncorr@PCIFN;
+
+prop error.io.device.f-device@PCIFN { IS_LEAF } (1)->
+ ereport.io.service.lost@PCIFN;
+
+prop error.io.device.deg-device@PCIFN { IS_LEAF } (1)->
+ ereport.io.device.inval_state@PCIFN,
+ ereport.io.device.no_response@PCIFN,
+ ereport.io.device.stall@PCIFN,
+ ereport.io.device.badint_limit@PCIFN,
+ ereport.io.device.intern_corr@PCIFN,
+ ereport.io.device.intern_uncorr@PCIFN;
+
+prop error.io.device.deg-device@PCIFN { IS_LEAF } (1)->
+ ereport.io.service.degraded@PCIFN;
+
+prop error.io.device.nf-device@PCIFN { IS_LEAF } (1)->
+ ereport.io.device.inval_state@PCIFN,
+ ereport.io.device.no_response@PCIFN,
+ ereport.io.device.stall@PCIFN,
+ ereport.io.device.badint_limit@PCIFN,
+ ereport.io.device.intern_corr@PCIFN,
+ ereport.io.device.intern_uncorr@PCIFN;
+
+prop error.io.device.nf-device@PCIFN { IS_LEAF } (1)->
+ ereport.io.service.unaffected@PCIFN,
+ error.io.service.restored@PCIFN;
/*
* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
@@ -1231,51 +1134,51 @@ prop upset.io.pci.nf-dpe-d@pcibus/pcidev/pcifn { IS_LEAF } (1)->
* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*/
-event ereport.io.pci.nr@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.pcix.unex-spl@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.pcix.rx-spl@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.pcix.sec-unex-spl@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.pcix.sec-spl-or@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.pcix.sec-spl-dly@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.pcix.ecc.ce-addr@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.pcix.ecc.ce-attr@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.pcix.ecc.ce-data@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.pcix.ecc.ue-addr@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.pcix.ecc.ue-attr@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.pcix.ecc.ue-data@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.pcix.s-ce@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.pcix.s-ue@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.pcix.sec-ecc.ce-addr@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.pcix.sec-ecc.ce-attr@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.pcix.sec-ecc.ce-data@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.pcix.sec-ecc.ue-addr@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.pcix.sec-ecc.ue-attr@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.pcix.sec-ecc.ue-data@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.pcix.sec-s-ce@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.pcix.sec-s-ue@pcibus/pcidev/pcifn{within(5s)};
-
-event upset.io.pcix.discard@pcibus/pcidev/pcifn;
-
-prop upset.io.pcix.discard@pcibus/pcidev/pcifn (1)->
- ereport.io.pci.nr@pcibus/pcidev/pcifn,
- ereport.io.pcix.rx-spl@pcibus/pcidev/pcifn,
- ereport.io.pcix.unex-spl@pcibus/pcidev/pcifn,
- ereport.io.pcix.sec-unex-spl@pcibus/pcidev/pcifn,
- ereport.io.pcix.sec-spl-or@pcibus/pcidev/pcifn,
- ereport.io.pcix.sec-spl-dly@pcibus/pcidev/pcifn,
- ereport.io.pcix.ecc.ce-addr@pcibus/pcidev/pcifn,
- ereport.io.pcix.ecc.ce-attr@pcibus/pcidev/pcifn,
- ereport.io.pcix.ecc.ce-data@pcibus/pcidev/pcifn,
- ereport.io.pcix.ecc.ue-addr@pcibus/pcidev/pcifn,
- ereport.io.pcix.ecc.ue-attr@pcibus/pcidev/pcifn,
- ereport.io.pcix.ecc.ue-data@pcibus/pcidev/pcifn,
- ereport.io.pcix.s-ce@pcibus/pcidev/pcifn,
- ereport.io.pcix.s-ue@pcibus/pcidev/pcifn,
- ereport.io.pcix.sec-ecc.ce-addr@pcibus/pcidev/pcifn,
- ereport.io.pcix.sec-ecc.ce-attr@pcibus/pcidev/pcifn,
- ereport.io.pcix.sec-ecc.ce-data@pcibus/pcidev/pcifn,
- ereport.io.pcix.sec-ecc.ue-addr@pcibus/pcidev/pcifn,
- ereport.io.pcix.sec-ecc.ue-attr@pcibus/pcidev/pcifn,
- ereport.io.pcix.sec-ecc.ue-data@pcibus/pcidev/pcifn,
- ereport.io.pcix.sec-s-ce@pcibus/pcidev/pcifn,
- ereport.io.pcix.sec-s-ue@pcibus/pcidev/pcifn;
+event ereport.io.pci.nr@PCIFN{within(5s)};
+event ereport.io.pcix.unex-spl@PCIFN{within(5s)};
+event ereport.io.pcix.rx-spl@PCIFN{within(5s)};
+event ereport.io.pcix.sec-unex-spl@PCIFN{within(5s)};
+event ereport.io.pcix.sec-spl-or@PCIFN{within(5s)};
+event ereport.io.pcix.sec-spl-dly@PCIFN{within(5s)};
+event ereport.io.pcix.ecc.ce-addr@PCIFN{within(5s)};
+event ereport.io.pcix.ecc.ce-attr@PCIFN{within(5s)};
+event ereport.io.pcix.ecc.ce-data@PCIFN{within(5s)};
+event ereport.io.pcix.ecc.ue-addr@PCIFN{within(5s)};
+event ereport.io.pcix.ecc.ue-attr@PCIFN{within(5s)};
+event ereport.io.pcix.ecc.ue-data@PCIFN{within(5s)};
+event ereport.io.pcix.s-ce@PCIFN{within(5s)};
+event ereport.io.pcix.s-ue@PCIFN{within(5s)};
+event ereport.io.pcix.sec-ecc.ce-addr@PCIFN{within(5s)};
+event ereport.io.pcix.sec-ecc.ce-attr@PCIFN{within(5s)};
+event ereport.io.pcix.sec-ecc.ce-data@PCIFN{within(5s)};
+event ereport.io.pcix.sec-ecc.ue-addr@PCIFN{within(5s)};
+event ereport.io.pcix.sec-ecc.ue-attr@PCIFN{within(5s)};
+event ereport.io.pcix.sec-ecc.ue-data@PCIFN{within(5s)};
+event ereport.io.pcix.sec-s-ce@PCIFN{within(5s)};
+event ereport.io.pcix.sec-s-ue@PCIFN{within(5s)};
+
+event upset.io.pcix.discard@PCIFN;
+
+prop upset.io.pcix.discard@PCIFN (1)->
+ ereport.io.pci.nr@PCIFN,
+ ereport.io.pcix.rx-spl@PCIFN,
+ ereport.io.pcix.unex-spl@PCIFN,
+ ereport.io.pcix.sec-unex-spl@PCIFN,
+ ereport.io.pcix.sec-spl-or@PCIFN,
+ ereport.io.pcix.sec-spl-dly@PCIFN,
+ ereport.io.pcix.ecc.ce-addr@PCIFN,
+ ereport.io.pcix.ecc.ce-attr@PCIFN,
+ ereport.io.pcix.ecc.ce-data@PCIFN,
+ ereport.io.pcix.ecc.ue-addr@PCIFN,
+ ereport.io.pcix.ecc.ue-attr@PCIFN,
+ ereport.io.pcix.ecc.ue-data@PCIFN,
+ ereport.io.pcix.s-ce@PCIFN,
+ ereport.io.pcix.s-ue@PCIFN,
+ ereport.io.pcix.sec-ecc.ce-addr@PCIFN,
+ ereport.io.pcix.sec-ecc.ce-attr@PCIFN,
+ ereport.io.pcix.sec-ecc.ce-data@PCIFN,
+ ereport.io.pcix.sec-ecc.ue-addr@PCIFN,
+ ereport.io.pcix.sec-ecc.ue-attr@PCIFN,
+ ereport.io.pcix.sec-ecc.ue-data@PCIFN,
+ ereport.io.pcix.sec-s-ce@PCIFN,
+ ereport.io.pcix.sec-s-ue@PCIFN;
diff --git a/usr/src/cmd/fm/eversholt/files/common/pciex.esc b/usr/src/cmd/fm/eversholt/files/common/pciex.esc
index f68ba8e3de..116b1e8e39 100644
--- a/usr/src/cmd/fm/eversholt/files/common/pciex.esc
+++ b/usr/src/cmd/fm/eversholt/files/common/pciex.esc
@@ -62,12 +62,8 @@
*/
#define CORRLINK_COUNT 6
#define CORRLINK_TIME 2h
-#define NONFATAL_COUNT 6
-#define NONFATAL_TIME 2h
-#define NONFATAL_DPE_U_COUNT 3
-#define NONFATAL_DPE_U_TIME 168h
-#define NONFATAL_DPE_D_COUNT 3
-#define NONFATAL_DPE_D_TIME 168h
+#define NONFATAL_DPE_COUNT 3
+#define NONFATAL_DPE_TIME 168h
/*
* if the source-id payload is valid, then check it matches
@@ -80,7 +76,7 @@
#define SOURCE_ID_MATCHES_OWN_BDF \
(payloadprop_defined("source-valid") && \
payloadprop("source-valid") == 1 && \
- payloadprop("source-id") == (confprop(asru(pciexrc), TOPO_PCI_BDF) + 0))
+ payloadprop("source-id") == (confprop(pciexrc, TOPO_PCI_BDF) + 0))
/*
* Other useful macros. These use the EXCAP property (PCI Express Capabilities
@@ -89,110 +85,62 @@
* a PCI Express-PCI bridge - note that 60400 and 60401 are defined as PCI-PCI
* bridges, everything else is consider a PCI leaf device.
*/
-#define BDF_IS_UNDER_RC \
- is_under(pciexrc<>, pciexbus[b]/pciexdev[d]/pciexfn[f])
-
-#define PCIBDF_IS_UNDER_RC \
- is_under(pciexrc<>, pcibus[b]/pcidev[d]/pcifn[f])
-
-#define PCIBDF_IS_UNDER_DEV \
- is_under(pciexbus/pciexdev/pciexfn, pcibus[b]/pcidev[d]/pcifn[f])
-
-#define IS_SWD \
- (confprop(asru(pciexbus/pciexdev/pciexfn), TOPO_PCI_EXCAP) == \
- "pciexswd")
-
-#define IS_SWU \
- (confprop(asru(pciexbus/pciexdev/pciexfn), TOPO_PCI_EXCAP) == \
- "pciexswu")
-
-#define IS_LEAF \
- (confprop(asru(pciexbus/pciexdev/pciexfn), TOPO_PCI_EXCAP) == \
- "pciexdev")
-
-#define IS_PCI_LEAF \
- (confprop_defined(asru(pcibus/pcidev/pcifn), TOPO_PCI_CLASS) && \
- confprop(asru(pcibus/pcidev/pcifn), TOPO_PCI_CLASS) != "60400" && \
- confprop(asru(pcibus/pcidev/pcifn), TOPO_PCI_CLASS) != "60401")
-
-#define BDF_IS_PCI_LEAF \
- (confprop_defined(asru(pcibus[b]/pcidev[d]/pcifn[f]), \
- TOPO_PCI_CLASS) && \
- confprop(asru(pcibus[b]/pcidev[d]/pcifn[f]), TOPO_PCI_CLASS) != \
- "60400" && \
- confprop(asru(pcibus[b]/pcidev[d]/pcifn[f]), TOPO_PCI_CLASS) != "60401")
-
-#define IS_BDG \
- (confprop(asru(pciexbus/pciexdev/pciexfn), TOPO_PCI_EXCAP) == \
- "pcibus")
-
-#define BDF_IS_LEAF \
- (confprop(asru(pciexbus[b]/pciexdev[d]/pciexfn[f]), \
- TOPO_PCI_EXCAP) == "pciexdev")
+#define PCIEXFN pciexbus/pciexdev/pciexfn
+#define PCIEXFNHZ pciexbus<>/pciexdev<>/pciexfn<>
+#define PCIEXFN1 pciexbus[b]/pciexdev[d]/pciexfn[f]
+#define PCIFN pcibus/pcidev/pcifn
+#define PCIFNHZ pcibus<>/pcidev<>/pcifn<>
+#define PCIFN1 pcibus[b]/pcidev[d]/pcifn[f]
+#define IS_LF(f) (confprop(f, TOPO_PCI_EXCAP) == "pciexdev")
+#define IS_BG(f) (confprop(f, TOPO_PCI_EXCAP) == "pcibus")
+#define IS_SD(f) (confprop(f, TOPO_PCI_EXCAP) == "pciexswd")
+#define IS_SU(f) (confprop(f, TOPO_PCI_EXCAP) == "pciexswu")
+#define IS_PCI_LF(f) (confprop_defined(f, TOPO_PCI_CLASS) && \
+ confprop(f, TOPO_PCI_CLASS) != "60400" && \
+ confprop(f, TOPO_PCI_CLASS) != "60401")
/*
* define faults
*/
-asru pciexrc;
-fru pciexrc;
-asru pciexbus/pciexdev/pciexfn;
-fru pciexbus/pciexdev;
-fru pciexbus;
-asru pciexbus;
+event fault.io.pciex.device-interr@PCIEXFN, FITrate=PCIEX_DEV_FIT;
-event fault.io.pciex.device-interr@pciexbus/pciexdev/pciexfn,
- FITrate=PCIEX_DEV_FIT, FRU=pciexbus/pciexdev,
- ASRU=pciexbus/pciexdev/pciexfn;
+event fault.io.pciex.device-interr-deg@PCIEXFN, FITrate=PCIEX_DEV_FIT, retire=0;
-event fault.io.pciex.device-interr@pciexrc,
- FITrate=PCIEX_RC_FIT, FRU=pciexrc, ASRU=pciexrc;
+engine serd.io.pciex.flt-nf@PCIEXFN, N=NONFATAL_DPE_COUNT, T=NONFATAL_DPE_TIME;
+event fault.io.pciex.device-interr-unaf@PCIEXFN, FITrate=PCIEX_DEV_FIT,
+ engine=serd.io.pciex.flt-nf@PCIEXFN;
-event fault.io.pciex.device-invreq@pciexbus/pciexdev/pciexfn,
- FITrate=PCIEX_DEV_INV_FIT, FRU=pciexbus/pciexdev,
- ASRU=pciexbus/pciexdev/pciexfn;
+engine serd.io.pciex.corrlink@PCIEXFN, N=CORRLINK_COUNT, T=CORRLINK_TIME;
+event fault.io.pciex.device-interr-corr@PCIEXFN, FITrate=PCIEX_DEV_FIT,
+ engine=serd.io.pciex.corrlink@PCIEXFN;
-event fault.io.pciex.device-invreq@pciexrc,
- FITrate=PCIEX_RC_FIT, FRU=pciexrc, ASRU=pciexrc;
+event fault.io.pciex.device-interr@pciexrc, FITrate=PCIEX_RC_FIT;
-event fault.io.pciex.device-noresp@pciexbus/pciexdev/pciexfn,
- FITrate=PCIEX_DEV_NR_FIT, FRU=pciexbus/pciexdev,
- ASRU=pciexbus/pciexdev/pciexfn;
+event fault.io.pciex.device-interr-deg@pciexrc, FITrate=PCIEX_RC_FIT, retire=0;
-event fault.io.pciex.device-noresp@pciexrc,
- FITrate=PCIEX_RC_NR_FIT, FRU=pciexrc, ASRU=pciexrc;
+engine serd.io.pciex.flt-nf@pciexrc, N=NONFATAL_DPE_COUNT, T=NONFATAL_DPE_TIME;
+event fault.io.pciex.device-interr-unaf@pciexrc, FITrate=PCIEX_RC_FIT,
+ engine=serd.io.pciex.flt-nf@pciexrc;
-event fault.io.pciex.bus-noresp@pciexbus/pciexdev/pciexfn,
- FITrate=PCIEX_BUS_NR_FIT, FRU=pciexbus, ASRU=pciexbus/pciexdev/pciexfn;
+engine serd.io.pciex.corrlink@pciexrc, N=CORRLINK_COUNT, T=CORRLINK_TIME;
+event fault.io.pciex.device-interr-corr@pciexrc, FITrate=PCIEX_RC_FIT,
+ engine=serd.io.pciex.corrlink@pciexrc;
-event fault.io.pciex.bus-linkerr@pciexbus/pciexdev/pciexfn,
- FITrate=PCIEX_BUS_FIT, FRU=pciexbus, ASRU=pciexbus/pciexdev/pciexfn;
+event fault.io.pciex.device-invreq@PCIEXFN, FITrate=PCIEX_DEV_INV_FIT;
-/*
- * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- * serd engine for correctable link errors
- * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- */
-event error.io.pciex.corrlink@pciexbus;
-event error.io.pciex.corrlink@pciexrc/pciexbus;
-event error.io.pciex.corrlink@pciexbus/pciexdev/pciexfn/pciexbus;
-event error.io.pciex.corrlink_trip@pciexbus;
-event ereport.io.pciex.corrlink_trip@pciexbus{within(5s)};
+event fault.io.pciex.device-invreq@pciexrc, FITrate=PCIEX_RC_FIT;
-engine serd.io.pciex.corrlink@pciexbus,
- N=CORRLINK_COUNT, T=CORRLINK_TIME, method=persistent,
- trip=ereport.io.pciex.corrlink_trip@pciexbus;
+event fault.io.pciex.device-noresp@PCIEXFN, FITrate=PCIEX_DEV_NR_FIT;
-event upset.io.pciex.corrlink@pciexbus,
- engine=serd.io.pciex.corrlink@pciexbus;
+event fault.io.pciex.device-noresp@pciexrc, FITrate=PCIEX_RC_NR_FIT;
-prop upset.io.pciex.corrlink@pciexbus (1)->
- error.io.pciex.corrlink@pciexbus;
+event fault.io.pciex.bus-noresp@PCIEXFN, FITrate=PCIEX_BUS_NR_FIT;
-prop error.io.pciex.corrlink_trip@pciexbus (1)->
- ereport.io.pciex.corrlink_trip@pciexbus;
+event fault.io.pciex.bus-linkerr@PCIEXFN, FITrate=PCIEX_BUS_FIT;
-prop error.io.pciex.corrlink_trip@pciexbus (0)->
- error.io.pciex.corrlink@pciexbus;
+engine serd.io.pciex.corrlink-bus@PCIEXFN, N=CORRLINK_COUNT, T=CORRLINK_TIME;
+event fault.io.pciex.bus-linkerr-corr@PCIEXFN, FITrate=PCIEX_BUS_FIT,
+ engine=serd.io.pciex.corrlink-bus@PCIEXFN;
/*
* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
@@ -200,151 +148,112 @@ prop error.io.pciex.corrlink_trip@pciexbus (0)->
* no service impact - otherwise fail immediately
* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*/
-event ereport.io.device.inval_state@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.device.no_response@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.device.stall@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.device.badint_limit@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.device.intern_corr@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.device.intern_uncorr@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.service.lost@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.service.degraded@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.service.unaffected@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.service.restored@pciexbus/pciexdev/pciexfn{within(30s)};
-event ereport.io.device.nf-device@pciexbus/pciexdev/pciexfn{within(5s)};
-
-event error.io.service.restored@pciexbus/pciexdev/pciexfn;
-event error.io.device.nf-device@pciexbus/pciexdev/pciexfn;
-event error.io.device.f-device@pciexbus/pciexdev/pciexfn;
-
-prop error.io.device.f-device@pciexbus/pciexdev/pciexfn (1)->
- ereport.io.device.inval_state@pciexbus/pciexdev/pciexfn,
- ereport.io.device.no_response@pciexbus/pciexdev/pciexfn,
- ereport.io.device.stall@pciexbus/pciexdev/pciexfn,
- ereport.io.device.badint_limit@pciexbus/pciexdev/pciexfn,
- ereport.io.device.intern_corr@pciexbus/pciexdev/pciexfn,
- ereport.io.device.intern_uncorr@pciexbus/pciexdev/pciexfn;
-
-prop error.io.device.f-device@pciexbus/pciexdev/pciexfn (1)->
- ereport.io.service.lost@pciexbus/pciexdev/pciexfn,
- ereport.io.service.degraded@pciexbus/pciexdev/pciexfn;
-
-engine serd.io.device.nonfatal@pciexbus/pciexdev/pciexfn,
- N=NONFATAL_COUNT, T=NONFATAL_TIME, method=persistent,
- trip=ereport.io.device.nf-device@pciexbus/pciexdev/pciexfn;
-
-event upset.io.device.nonfatal@pciexbus/pciexdev/pciexfn,
- engine=serd.io.device.nonfatal@pciexbus/pciexdev/pciexfn;
-
-prop error.io.device.nf-device@pciexbus/pciexdev/pciexfn (1)->
- ereport.io.device.nf-device@pciexbus/pciexdev/pciexfn;
-
-prop error.io.device.nf-device@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.device.inval_state@pciexbus/pciexdev/pciexfn,
- ereport.io.device.no_response@pciexbus/pciexdev/pciexfn,
- ereport.io.device.stall@pciexbus/pciexdev/pciexfn,
- ereport.io.device.badint_limit@pciexbus/pciexdev/pciexfn,
- ereport.io.device.intern_corr@pciexbus/pciexdev/pciexfn,
- ereport.io.device.intern_uncorr@pciexbus/pciexdev/pciexfn,
- ereport.io.service.unaffected@pciexbus/pciexdev/pciexfn,
- error.io.service.restored@pciexbus/pciexdev/pciexfn;
-
-prop upset.io.device.nonfatal@pciexbus/pciexdev/pciexfn (1)->
- ereport.io.device.inval_state@pciexbus/pciexdev/pciexfn,
- ereport.io.device.no_response@pciexbus/pciexdev/pciexfn,
- ereport.io.device.stall@pciexbus/pciexdev/pciexfn,
- ereport.io.device.badint_limit@pciexbus/pciexdev/pciexfn,
- ereport.io.device.intern_corr@pciexbus/pciexdev/pciexfn,
- ereport.io.device.intern_uncorr@pciexbus/pciexdev/pciexfn;
-
-prop upset.io.device.nonfatal@pciexbus/pciexdev/pciexfn (1)->
- ereport.io.service.unaffected@pciexbus/pciexdev/pciexfn,
- error.io.service.restored@pciexbus/pciexdev/pciexfn;
+event ereport.io.device.inval_state@PCIEXFN{within(5s)};
+event ereport.io.device.no_response@PCIEXFN{within(5s)};
+event ereport.io.device.stall@PCIEXFN{within(5s)};
+event ereport.io.device.badint_limit@PCIEXFN{within(5s)};
+event ereport.io.device.intern_corr@PCIEXFN{within(5s)};
+event ereport.io.device.intern_uncorr@PCIEXFN{within(5s)};
+event ereport.io.service.lost@PCIEXFN{within(5s)};
+event ereport.io.service.degraded@PCIEXFN{within(5s)};
+event ereport.io.service.unaffected@PCIEXFN{within(5s)};
+event ereport.io.service.restored@PCIEXFN{within(30s)};
+event ereport.io.service.lost@PCIFN{within(5s)};
+event ereport.io.service.degraded@PCIFN{within(5s)};
+event ereport.io.service.unaffected@PCIFN{within(5s)};
+
+event error.io.pciex.noimpact-d@PCIEXFN;
+event error.io.pciex.noimpact-d@PCIEXFN/PCIEXFN;
+event error.io.pciex.noimpact-d@PCIEXFN/PCIFN;
+event error.io.pciex.noimpact-d@PCIFN/PCIFN;
+event error.io.pciex.noimpact-d@PCIFN;
+event error.io.pciex.degraded-d@PCIEXFN;
+event error.io.pciex.degraded-d@PCIEXFN/PCIEXFN;
+event error.io.pciex.degraded-d@PCIEXFN/PCIFN;
+event error.io.pciex.degraded-d@PCIFN/PCIFN;
+event error.io.pciex.degraded-d@PCIFN;
+event error.io.pciex.lost-d@PCIEXFN;
+event error.io.pciex.lost-d@PCIEXFN/PCIEXFN;
+event error.io.pciex.lost-d@PCIEXFN/PCIFN;
+event error.io.pciex.lost-d@PCIFN/PCIFN;
+event error.io.pciex.lost-d@PCIFN;
+event error.io.service.restored@PCIEXFN;
+event error.io.service.restored@PCIFN;
+event error.io.device.nf-device@PCIEXFN;
+event error.io.device.deg-device@PCIEXFN;
+event error.io.device.f-device@PCIEXFN;
+
+prop error.io.device.f-device@PCIEXFN (1)->
+ ereport.io.device.inval_state@PCIEXFN,
+ ereport.io.device.no_response@PCIEXFN,
+ ereport.io.device.stall@PCIEXFN,
+ ereport.io.device.badint_limit@PCIEXFN,
+ ereport.io.device.intern_corr@PCIEXFN,
+ ereport.io.device.intern_uncorr@PCIEXFN;
+
+prop error.io.device.f-device@PCIEXFN (1)->
+ error.io.pciex.lost-d@PCIEXFN;
+
+prop error.io.device.deg-device@PCIEXFN (1)->
+ ereport.io.device.inval_state@PCIEXFN,
+ ereport.io.device.no_response@PCIEXFN,
+ ereport.io.device.stall@PCIEXFN,
+ ereport.io.device.badint_limit@PCIEXFN,
+ ereport.io.device.intern_corr@PCIEXFN,
+ ereport.io.device.intern_uncorr@PCIEXFN;
+
+prop error.io.device.deg-device@PCIEXFN (1)->
+ error.io.pciex.degraded-d@PCIEXFN;
+
+prop error.io.device.nf-device@PCIEXFN (1)->
+ ereport.io.device.inval_state@PCIEXFN,
+ ereport.io.device.no_response@PCIEXFN,
+ ereport.io.device.stall@PCIEXFN,
+ ereport.io.device.badint_limit@PCIEXFN,
+ ereport.io.device.intern_corr@PCIEXFN,
+ ereport.io.device.intern_uncorr@PCIEXFN;
+
+prop error.io.device.nf-device@PCIEXFN (1)->
+ error.io.pciex.noimpact-d@PCIEXFN;
/*
- * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- * Handling of pci express nonfatal errors (ptlp/ecrc). Use serd engine if
- * no service impact - otherwise fail immediately
- * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ * handling of service impact ereports.
*/
-event ereport.io.pciex.flt-nf-d@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pciex.flt-nf-u@pciexbus/pciexdev/pciexfn{within(5s)};
-
-event error.io.pciex.flt-f-d@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.flt-f-u@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.flt-nf-d@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.flt-nf-u@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.flt-f-ecrcreq-u@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.flt-f-ecrccomp-u@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.flt-f-poisreq-u@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.flt-f-poiscomp-u@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.flt-f-ecrcreq-d@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.flt-f-ecrccomp-d@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.flt-f-poisreq-d@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.flt-f-poiscomp-d@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.flt-nf-ecrcreq-u@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.flt-nf-ecrccomp-u@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.flt-nf-poisreq-u@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.flt-nf-poiscomp-u@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.flt-nf-ecrcreq-d@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.flt-nf-ecrccomp-d@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.flt-nf-poisreq-d@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.flt-nf-poiscomp-d@pciexbus/pciexdev/pciexfn;
-
-prop error.io.pciex.flt-f-u@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.flt-f-ecrcreq-u@pciexbus/pciexdev/pciexfn,
- error.io.pciex.flt-f-ecrccomp-u@pciexbus/pciexdev/pciexfn,
- error.io.pciex.flt-f-poisreq-u@pciexbus/pciexdev/pciexfn,
- error.io.pciex.flt-f-poiscomp-u@pciexbus/pciexdev/pciexfn;
-
-prop error.io.pciex.flt-f-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.flt-f-ecrcreq-d@pciexbus/pciexdev/pciexfn,
- error.io.pciex.flt-f-ecrccomp-d@pciexbus/pciexdev/pciexfn,
- error.io.pciex.flt-f-poisreq-d@pciexbus/pciexdev/pciexfn,
- error.io.pciex.flt-f-poiscomp-d@pciexbus/pciexdev/pciexfn;
-
-engine serd.io.pciex.flt-nf-u@pciexbus/pciexdev/pciexfn,
- N=NONFATAL_DPE_U_COUNT, T=NONFATAL_DPE_U_TIME, method=persistent,
- trip=ereport.io.pciex.flt-nf-u@pciexbus/pciexdev/pciexfn;
-
-event upset.io.pciex.flt-nf-u@pciexbus/pciexdev/pciexfn,
- engine=serd.io.pciex.flt-nf-u@pciexbus/pciexdev/pciexfn;
-
-prop error.io.pciex.flt-nf-u@pciexbus/pciexdev/pciexfn (1)->
- ereport.io.pciex.flt-nf-u@pciexbus/pciexdev/pciexfn;
-
-prop error.io.pciex.flt-nf-u@pciexbus/pciexdev/pciexfn (0)->
- error.io.pciex.flt-nf-ecrcreq-u@pciexbus/pciexdev/pciexfn,
- error.io.pciex.flt-nf-ecrccomp-u@pciexbus/pciexdev/pciexfn,
- error.io.pciex.flt-nf-poisreq-u@pciexbus/pciexdev/pciexfn,
- error.io.pciex.flt-nf-poiscomp-u@pciexbus/pciexdev/pciexfn;
-
-prop upset.io.pciex.flt-nf-u@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.flt-nf-ecrcreq-u@pciexbus/pciexdev/pciexfn,
- error.io.pciex.flt-nf-ecrccomp-u@pciexbus/pciexdev/pciexfn,
- error.io.pciex.flt-nf-poisreq-u@pciexbus/pciexdev/pciexfn,
- error.io.pciex.flt-nf-poiscomp-u@pciexbus/pciexdev/pciexfn;
-
-engine serd.io.pciex.flt-nf-d@pciexbus/pciexdev/pciexfn,
- N=NONFATAL_DPE_D_COUNT, T=NONFATAL_DPE_D_TIME, method=persistent,
- trip=ereport.io.pciex.flt-nf-d@pciexbus/pciexdev/pciexfn;
-
-event upset.io.pciex.flt-nf-d@pciexbus/pciexdev/pciexfn,
- engine=serd.io.pciex.flt-nf-d@pciexbus/pciexdev/pciexfn;
-
-prop error.io.pciex.flt-nf-d@pciexbus/pciexdev/pciexfn (1)->
- ereport.io.pciex.flt-nf-d@pciexbus/pciexdev/pciexfn;
-
-prop error.io.pciex.flt-nf-d@pciexbus/pciexdev/pciexfn (0)->
- error.io.pciex.flt-nf-ecrcreq-d@pciexbus/pciexdev/pciexfn,
- error.io.pciex.flt-nf-ecrccomp-d@pciexbus/pciexdev/pciexfn,
- error.io.pciex.flt-nf-poisreq-d@pciexbus/pciexdev/pciexfn,
- error.io.pciex.flt-nf-poiscomp-d@pciexbus/pciexdev/pciexfn;
-
-prop upset.io.pciex.flt-nf-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.flt-nf-ecrcreq-d@pciexbus/pciexdev/pciexfn,
- error.io.pciex.flt-nf-ecrccomp-d@pciexbus/pciexdev/pciexfn,
- error.io.pciex.flt-nf-poisreq-d@pciexbus/pciexdev/pciexfn,
- error.io.pciex.flt-nf-poiscomp-d@pciexbus/pciexdev/pciexfn;
+prop error.io.pciex.lost-d@PCIEXFN (0)->
+ ereport.io.service.lost@PCIEXFN,
+ error.io.pciex.lost-d@PCIEXFN/PCIEXFNHZ,
+ error.io.pciex.lost-d@PCIEXFN/PCIFNHZ;
+
+prop error.io.pciex.lost-d@PCIFN (0)->
+ ereport.io.service.lost@PCIFN,
+ error.io.pciex.lost-d@PCIFN/PCIFNHZ;
+
+prop error.io.pciex.degraded-d@PCIEXFN (1)->
+ ereport.io.service.degraded@PCIEXFN,
+ error.io.pciex.degraded-d@PCIEXFN/PCIEXFNHZ,
+ error.io.pciex.degraded-d@PCIEXFN/PCIFNHZ;
+
+prop error.io.pciex.degraded-d@PCIFN (1)->
+ ereport.io.service.degraded@PCIFN,
+ error.io.pciex.degraded-d@PCIFN/PCIFNHZ;
+
+prop error.io.pciex.noimpact-d@PCIEXFN (1)->
+ ereport.io.service.unaffected@PCIEXFN,
+ error.io.service.restored@PCIEXFN,
+ error.io.pciex.noimpact-d@PCIEXFN/PCIEXFNHZ,
+ error.io.pciex.noimpact-d@PCIEXFN/PCIFNHZ;
+
+prop error.io.pciex.noimpact-d@PCIFN (1)->
+ ereport.io.service.unaffected@PCIFN,
+ error.io.service.restored@PCIFN,
+ error.io.pciex.noimpact-d@PCIFN/PCIFNHZ;
+
+prop error.io.service.restored@PCIEXFN (1)->
+ ereport.io.service.lost@PCIEXFN,
+ ereport.io.service.degraded@PCIEXFN;
+
+prop error.io.service.restored@PCIEXFN (1)->
+ ereport.io.service.restored@PCIEXFN;
/*
* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
@@ -362,78 +271,105 @@ prop upset.io.pciex.flt-nf-d@pciexbus/pciexdev/pciexfn (1)->
* - corrlink: correctable link or physical level error
* - fatlink: fatal link or physical level error
*/
-event error.io.pciex.nr-d@pciexrc/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.flt-ca-d@pciexrc/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.mtlp-d@pciexrc/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.badreq-d@pciexrc/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.flt-nf-d@pciexrc/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.flt-f-d@pciexrc/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.corrlink_trip@pciexrc/pciexbus;
-event error.io.pciex.fatlink@pciexrc/pciexbus/pciexdev/pciexfn;
+event error.io.pciex.nr-d@pciexrc/PCIEXFN;
+event error.io.pciex.ca-d@pciexrc/PCIEXFN;
+event error.io.pciex.mtlp-d@pciexrc/PCIEXFN;
+event error.io.pciex.corrlink@pciexrc/pciexbus;
+event error.io.pciex.fatlink@pciexrc/PCIEXFN;
+event error.io.pciex.badreq-d@pciexrc/PCIEXFN;
+event error.io.pciex.nf-poisecrc-d@pciexrc/PCIEXFN;
+event error.io.pciex.f-poisecrc-d@pciexrc/PCIEXFN;
+event error.io.pciex.deg-poisecrc-d@pciexrc/PCIEXFN;
prop fault.io.pciex.device-noresp@pciexrc (1)->
- error.io.pciex.nr-d@pciexrc/pciexbus<>/pciexdev<>/pciexfn<>;
+ error.io.pciex.nr-d@pciexrc/PCIEXFNHZ;
prop fault.io.pciex.device-invreq@pciexrc (1)->
- error.io.pciex.badreq-d@pciexrc/pciexbus<>/pciexdev<>/pciexfn<>;
+ error.io.pciex.badreq-d@pciexrc/PCIEXFNHZ;
+
+prop fault.io.pciex.device-interr-corr@pciexrc (1)->
+ error.io.pciex.corrlink@pciexrc/pciexbus<>;
+
+prop fault.io.pciex.device-interr-unaf@pciexrc (1)->
+ error.io.pciex.nf-poisecrc-d@pciexrc/PCIEXFNHZ;
+
+prop fault.io.pciex.device-interr-deg@pciexrc (1)->
+ error.io.pciex.deg-poisecrc-d@pciexrc/PCIEXFNHZ;
prop fault.io.pciex.device-interr@pciexrc (1)->
- error.io.pciex.flt-nf-d@pciexrc/pciexbus<>/pciexdev<>/pciexfn<>,
- error.io.pciex.flt-f-d@pciexrc/pciexbus<>/pciexdev<>/pciexfn<>,
- error.io.pciex.flt-ca-d@pciexrc/pciexbus<>/pciexdev<>/pciexfn<>,
- error.io.pciex.mtlp-d@pciexrc/pciexbus<>/pciexdev<>/pciexfn<>,
- error.io.pciex.corrlink_trip@pciexrc/pciexbus<>,
- error.io.pciex.fatlink@pciexrc/pciexbus<>/pciexdev<>/pciexfn<>;
+ error.io.pciex.f-poisecrc-d@pciexrc/PCIEXFNHZ,
+ error.io.pciex.ca-d@pciexrc/PCIEXFNHZ,
+ error.io.pciex.mtlp-d@pciexrc/PCIEXFNHZ,
+ error.io.pciex.fatlink@pciexrc/PCIEXFNHZ;
/*
* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
* A faulty PCI Express leaf device or upstream switch port may cause:
* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- * - nr-u: the device not to respond to a valid downstream request
- * - ca-u: the device to completer abort a valid downstream request
- * - badreq-u: a bad upstream request - not CRC error (may cause
+ * - flt-nr-u: the device not to respond to a valid downstream request
+ * - flt-ca-u: the device to completer abort a valid downstream request
+ * - flt-badreq-u: a bad upstream request - not CRC error (may cause
* completer to respond with ur or ca) - leaf only
- * - mtlp-u: a malformed tlp transmitted upstream - leaf only
- * - ecrcreq-u: request with end-to-end CRC error transmitted upstream
- * - ecrccomp-u: compl with end-to-end CRC error transmitted upstream
- * - poisreq-u: poisoned request transmitted upstream
- * - poiscomp-u: poisoned completion transmitted upstream
+ * - flt-mtlp-u: a malformed tlp transmitted upstream - leaf only
+ * - flt-ecrcreq-u: request with end-to-end CRC error transmitted upstream
+ * - flt-ecrccomp-u: compl with end-to-end CRC error transmitted upstream
+ * - flt-poisreq-u: poisoned request transmitted upstream
+ * - flt-poiscomp-u: poisoned completion transmitted upstream
* - device: internal error reported by leaf device
* - corrlink: correctable link or physical level error
* - fatlink: fatal link or physical level error
*/
-event error.io.pciex.flt-nr-u@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.flt-ca-u@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.mtlp-u@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.flt-badreq-u@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.fatlink@pciexbus/pciexdev/pciexfn;
-
-prop fault.io.pciex.device-noresp@pciexbus/pciexdev/pciexfn { IS_LEAF } (1)->
- error.io.pciex.flt-nr-u@pciexbus/pciexdev/pciexfn;
-
-prop fault.io.pciex.device-noresp@pciexbus/pciexdev/pciexfn { IS_SWU } (1)->
- error.io.pciex.flt-nr-u@pciexbus/pciexdev/pciexfn;
-
-prop fault.io.pciex.device-invreq@pciexbus/pciexdev/pciexfn { IS_LEAF } (1)->
- error.io.pciex.flt-badreq-u@pciexbus/pciexdev/pciexfn;
-
-prop fault.io.pciex.device-interr@pciexbus/pciexdev/pciexfn { IS_SWU } (1)->
- error.io.pciex.flt-nf-u@pciexbus/pciexdev/pciexfn,
- error.io.pciex.flt-f-u@pciexbus/pciexdev/pciexfn,
- error.io.pciex.flt-ca-u@pciexbus/pciexdev/pciexfn,
- error.io.pciex.corrlink_trip@pciexbus,
- error.io.pciex.fatlink@pciexbus/pciexdev/pciexfn;
-
-prop fault.io.pciex.device-interr@pciexbus/pciexdev/pciexfn { IS_LEAF } (1)->
- error.io.pciex.flt-nf-u@pciexbus/pciexdev/pciexfn,
- error.io.pciex.flt-f-u@pciexbus/pciexdev/pciexfn,
- error.io.device.nf-device@pciexbus/pciexdev/pciexfn,
- error.io.device.f-device@pciexbus/pciexdev/pciexfn,
- error.io.pciex.flt-ca-u@pciexbus/pciexdev/pciexfn,
- error.io.pciex.mtlp-u@pciexbus/pciexdev/pciexfn,
- error.io.pciex.corrlink_trip@pciexbus,
- error.io.pciex.fatlink@pciexbus/pciexdev/pciexfn;
+event error.io.pciex.flt-nr-u@PCIEXFN;
+event error.io.pciex.flt-ca-u@PCIEXFN;
+event error.io.pciex.flt-mtlp-u@PCIEXFN;
+event error.io.pciex.fatlink@PCIEXFN;
+event error.io.pciex.flt-badreq-u@PCIEXFN;
+event error.io.pciex.flt-nf-poisecrc-u@PCIEXFN;
+event error.io.pciex.flt-f-poisecrc-u@PCIEXFN;
+event error.io.pciex.flt-deg-poisecrc-u@PCIEXFN;
+event error.io.pciex.corrlink@pciexbus;
+
+prop fault.io.pciex.device-noresp@PCIEXFN { IS_LF(PCIEXFN) } (1)->
+ error.io.pciex.flt-nr-u@PCIEXFN;
+
+prop fault.io.pciex.device-noresp@PCIEXFN { IS_SU(PCIEXFN) } (1)->
+ error.io.pciex.flt-nr-u@PCIEXFN;
+
+prop fault.io.pciex.device-invreq@PCIEXFN { IS_LF(PCIEXFN) } (1)->
+ error.io.pciex.flt-badreq-u@PCIEXFN;
+
+prop fault.io.pciex.device-interr-corr@PCIEXFN { IS_SU(PCIEXFN) } (1)->
+ error.io.pciex.corrlink@pciexbus;
+
+prop fault.io.pciex.device-interr-unaf@PCIEXFN { IS_SU(PCIEXFN) } (1)->
+ error.io.pciex.flt-nf-poisecrc-u@PCIEXFN;
+
+prop fault.io.pciex.device-interr-corr@PCIEXFN { IS_LF(PCIEXFN) } (1)->
+ error.io.pciex.corrlink@pciexbus,
+ error.io.device.nf-device@PCIEXFN;
+
+prop fault.io.pciex.device-interr-unaf@PCIEXFN { IS_LF(PCIEXFN) } (1)->
+ error.io.pciex.flt-nf-poisecrc-u@PCIEXFN;
+
+prop fault.io.pciex.device-interr-deg@PCIEXFN { IS_SU(PCIEXFN) } (1)->
+ error.io.pciex.flt-deg-poisecrc-u@PCIEXFN;
+
+prop fault.io.pciex.device-interr@PCIEXFN { IS_SU(PCIEXFN) } (1)->
+ error.io.pciex.flt-f-poisecrc-u@PCIEXFN,
+ error.io.pciex.flt-ca-u@PCIEXFN,
+ error.io.pciex.fatlink@PCIEXFN;
+
+prop fault.io.pciex.device-interr-deg@PCIEXFN { IS_LF(PCIEXFN) } (1)->
+ error.io.pciex.flt-deg-poisecrc-u@PCIEXFN,
+ error.io.device.deg-device@PCIEXFN;
+
+prop fault.io.pciex.device-interr@PCIEXFN { IS_LF(PCIEXFN) } (1)->
+ error.io.pciex.flt-f-poisecrc-u@PCIEXFN,
+ error.io.device.f-device@PCIEXFN,
+ error.io.pciex.flt-ca-u@PCIEXFN,
+ error.io.pciex.flt-mtlp-u@PCIEXFN,
+ error.io.pciex.fatlink@PCIEXFN;
/*
* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
@@ -449,57 +385,64 @@ prop fault.io.pciex.device-interr@pciexbus/pciexdev/pciexfn { IS_LEAF } (1)->
* - fatlink: fatal link or physical level error
*/
-event error.io.pciex.nr-d@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.flt-ca-d@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.flt-nf-d@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.flt-f-d@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.corrlink_trip@pciexbus/pciexdev/pciexfn/pciexbus;
-event error.io.pciex.fatlink@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn;
+event error.io.pciex.nr-d@PCIEXFN/PCIEXFN;
+event error.io.pciex.ca-d@PCIEXFN/PCIEXFN;
+event error.io.pciex.corrlink@PCIEXFN/pciexbus;
+event error.io.pciex.fatlink@PCIEXFN/PCIEXFN;
+event error.io.pciex.nf-poisecrc-d@PCIEXFN/PCIEXFN;
+event error.io.pciex.f-poisecrc-d@PCIEXFN/PCIEXFN;
+event error.io.pciex.deg-poisecrc-d@PCIEXFN/PCIEXFN;
-prop fault.io.pciex.device-noresp@pciexbus/pciexdev/pciexfn { IS_SWD } (1)->
- error.io.pciex.nr-d@pciexbus/pciexdev/pciexfn/pciexbus<>/pciexdev<>/pciexfn<>;
+prop fault.io.pciex.device-noresp@PCIEXFN { IS_SD(PCIEXFN) } (1)->
+ error.io.pciex.nr-d@PCIEXFN/PCIEXFNHZ;
-prop fault.io.pciex.device-interr@pciexbus/pciexdev/pciexfn { IS_SWD } (1)->
- error.io.pciex.flt-ca-d@pciexbus/pciexdev/pciexfn/pciexbus<>/pciexdev<>/pciexfn<>,
- error.io.pciex.flt-nf-d@pciexbus/pciexdev/pciexfn/pciexbus<>/pciexdev<>/pciexfn<>,
- error.io.pciex.flt-f-d@pciexbus/pciexdev/pciexfn/pciexbus<>/pciexdev<>/pciexfn<>,
- error.io.pciex.corrlink_trip@pciexbus/pciexdev/pciexfn/pciexbus<>,
- error.io.pciex.fatlink@pciexbus/pciexdev/pciexfn/pciexbus<>/pciexdev<>/pciexfn<>;
+prop fault.io.pciex.device-interr-corr@PCIEXFN { IS_SD(PCIEXFN) } (1)->
+ error.io.pciex.corrlink@PCIEXFN/pciexbus<>;
+
+prop fault.io.pciex.device-interr-unaf@PCIEXFN { IS_SD(PCIEXFN) } (1)->
+ error.io.pciex.nf-poisecrc-d@PCIEXFN/PCIEXFNHZ;
+
+prop fault.io.pciex.device-interr-deg@PCIEXFN { IS_SD(PCIEXFN) } (1)->
+ error.io.pciex.deg-poisecrc-d@PCIEXFN/PCIEXFNHZ;
+
+prop fault.io.pciex.device-interr@PCIEXFN { IS_SD(PCIEXFN) } (1)->
+ error.io.pciex.ca-d@PCIEXFN/PCIEXFNHZ,
+ error.io.pciex.f-poisecrc-d@PCIEXFN/PCIEXFNHZ,
+ error.io.pciex.fatlink@PCIEXFN/PCIEXFNHZ;
/*
* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
* A faulty PCIEX bus may cause:
* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- * - nr-u: a device to not respond because the link is down
+ * - flt-nr-u: a device to not respond because the link is down
* - nr-d: a device to not respond because the link is down
* - corrlink: correctable link or physical level error
* - fatlink: fatal link or physical level error
*/
-event error.io.pciex.nr-d@pciexbus/pciexdev/pciexfn;
+event error.io.pciex.nr-d@PCIEXFN;
-prop fault.io.pciex.bus-noresp@pciexbus/pciexdev/pciexfn (0)->
- error.io.pciex.flt-nr-u@pciexbus/pciexdev/pciexfn
- { IS_SWU || IS_LEAF || IS_BDG },
- error.io.pciex.nr-d@pciexbus/pciexdev/pciexfn
- { IS_SWU || IS_LEAF || IS_BDG };
+prop fault.io.pciex.bus-noresp@PCIEXFN { !IS_SD(PCIEXFN) } (0)->
+ error.io.pciex.flt-nr-u@PCIEXFN,
+ error.io.pciex.nr-d@PCIEXFN;
-prop fault.io.pciex.bus-linkerr@pciexbus/pciexdev/pciexfn (0)->
- error.io.pciex.corrlink_trip@pciexbus,
- error.io.pciex.fatlink@pciexbus/pciexdev/pciexfn
- { IS_SWU || IS_LEAF || IS_BDG };
+prop fault.io.pciex.bus-linkerr-corr@PCIEXFN (0)->
+ error.io.pciex.corrlink@pciexbus;
+
+prop fault.io.pciex.bus-linkerr@PCIEXFN { !IS_SD(PCIEXFN) } (0)->
+ error.io.pciex.fatlink@PCIEXFN;
/*
* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
* A faulty pciex-pci bridge may cause
* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
* The following errors to propagate onto the PCI Express fabric
- * - nr-u: the device not to respond to a valid downstream request
- * - ca-u: the device to completer abort a valid downstream request
- * - ecrcreq-u: request with end-to-end CRC error transmitted upstream
- * - ecrccomp-u: compl with end-to-end CRC error transmitted upstream
- * - poisreq-u: poisoned request transmitted upstream
- * - poiscomp-u: poisoned completion transmitted upstream
+ * - flt-nr-u: the device not to respond to a valid downstream request
+ * - flt-ca-u: the device to completer abort a valid downstream request
+ * - flt-ecrcreq-u: request with end-to-end CRC error transmitted upstream
+ * - flt-ecrccomp-u: compl with end-to-end CRC error transmitted upstream
+ * - flt-poisreq-u: poisoned request transmitted upstream
+ * - flt-poiscomp-u: poisoned completion transmitted upstream
* - corrlink: correctable link or physical level error upstream
* - fatlink: fatal link or physical level error upstream
* - sec-interr: internal error on pci express to pci bridge
@@ -518,191 +461,207 @@ prop fault.io.pciex.bus-linkerr@pciexbus/pciexdev/pciexfn (0)->
* - scpe-d: split completion to get corrupted during downstream transmission
*/
-event error.io.pci.ape-d@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pci.f-dpe-d@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pci.nf-dpe-d@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pci.retry-to-d@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pci.nr-pw-d@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pci.nr-drw-d@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pci.ta-pw-d@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pci.ta-drw-d@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pcix.scpe-d@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pciex.sec-interr@pciexbus/pciexdev/pciexfn;
-event ereport.io.pci.sec-sta@pciexbus/pciexdev/pciexfn{within(5s)};
-
-prop fault.io.pciex.device-noresp@pciexbus/pciexdev/pciexfn { IS_BDG } (1)->
- error.io.pciex.flt-nr-u@pciexbus/pciexdev/pciexfn,
- error.io.pci.retry-to-d@pciexbus/pciexdev/pciexfn/pcibus<>/pcidev<>/pcifn<>,
- error.io.pci.nr-pw-d@pciexbus/pciexdev/pciexfn/pcibus<>/pcidev<>/pcifn<>,
- error.io.pci.nr-drw-d@pciexbus/pciexdev/pciexfn/pcibus<>/pcidev<>/pcifn<>;
-
-prop fault.io.pciex.device-interr@pciexbus/pciexdev/pciexfn { IS_BDG } (1)->
- error.io.pciex.flt-nf-u@pciexbus/pciexdev/pciexfn,
- error.io.pciex.flt-f-u@pciexbus/pciexdev/pciexfn,
- error.io.pciex.flt-ca-u@pciexbus/pciexdev/pciexfn,
- error.io.pciex.mtlp-u@pciexbus/pciexdev/pciexfn,
- error.io.pciex.sec-interr@pciexbus/pciexdev/pciexfn,
- error.io.pciex.corrlink_trip@pciexbus,
- error.io.pciex.fatlink@pciexbus/pciexdev/pciexfn,
- error.io.pci.ta-pw-d@pciexbus/pciexdev/pciexfn/pcibus<>/pcidev<>/pcifn<>,
- error.io.pci.ta-drw-d@pciexbus/pciexdev/pciexfn/pcibus<>/pcidev<>/pcifn<>,
- error.io.pci.ape-d@pciexbus/pciexdev/pciexfn/pcibus<>/pcidev<>/pcifn<>,
- error.io.pcix.scpe-d@pciexbus/pciexdev/pciexfn/pcibus<>/pcidev<>/pcifn<>,
- error.io.pci.f-dpe-d@pciexbus/pciexdev/pciexfn/pcibus<>/pcidev<>/pcifn<>,
- error.io.pci.nf-dpe-d@pciexbus/pciexdev/pciexfn/pcibus<>/pcidev<>/pcifn<>;
-
-prop fault.io.pciex.device-interr@pciexbus/pciexdev/pciexfn { IS_BDG } (0)->
- ereport.io.pci.sec-sta@pciexbus/pciexdev/pciexfn;
+event error.io.pci.ape-d@PCIEXFN/PCIFN;
+event error.io.pci.f-dpe-d@PCIEXFN/PCIFN;
+event error.io.pci.deg-dpe-d@PCIEXFN/PCIFN;
+event error.io.pci.nf-dpe-d@PCIEXFN/PCIFN;
+event error.io.pci.retry-to-d@PCIEXFN/PCIFN;
+event error.io.pci.nr-pw-d@PCIEXFN/PCIFN;
+event error.io.pci.nr-drw-d@PCIEXFN/PCIFN;
+event error.io.pci.ta-pw-d@PCIEXFN/PCIFN;
+event error.io.pci.ta-drw-d@PCIEXFN/PCIFN;
+event error.io.pcix.scpe-d@PCIEXFN/PCIFN;
+event error.io.pciex.sec-interr@PCIEXFN;
+event ereport.io.pci.sec-sta@PCIEXFN{within(5s)};
+
+prop fault.io.pciex.device-noresp@PCIEXFN { IS_BG(PCIEXFN) } (1)->
+ error.io.pciex.flt-nr-u@PCIEXFN,
+ error.io.pci.retry-to-d@PCIEXFN/PCIFNHZ,
+ error.io.pci.nr-pw-d@PCIEXFN/PCIFNHZ,
+ error.io.pci.nr-drw-d@PCIEXFN/PCIFNHZ;
+
+prop fault.io.pciex.device-interr-corr@PCIEXFN { IS_BG(PCIEXFN) } (1)->
+ error.io.pciex.corrlink@pciexbus;
+
+prop fault.io.pciex.device-interr-unaf@PCIEXFN { IS_BG(PCIEXFN) } (1)->
+ error.io.pciex.flt-nf-poisecrc-u@PCIEXFN,
+ error.io.pci.nf-dpe-d@PCIEXFN/PCIFNHZ;
+
+prop fault.io.pciex.device-interr-deg@PCIEXFN { IS_BG(PCIEXFN) } (1)->
+ error.io.pciex.flt-deg-poisecrc-u@PCIEXFN,
+ error.io.pci.deg-dpe-d@PCIEXFN/PCIFNHZ;
+
+prop fault.io.pciex.device-interr@PCIEXFN { IS_BG(PCIEXFN) } (1)->
+ error.io.pciex.flt-f-poisecrc-u@PCIEXFN,
+ error.io.pciex.flt-ca-u@PCIEXFN,
+ error.io.pciex.flt-mtlp-u@PCIEXFN,
+ error.io.pciex.sec-interr@PCIEXFN,
+ error.io.pciex.fatlink@PCIEXFN,
+ error.io.pci.ta-pw-d@PCIEXFN/PCIFNHZ,
+ error.io.pci.ta-drw-d@PCIEXFN/PCIFNHZ,
+ error.io.pci.ape-d@PCIEXFN/PCIFNHZ,
+ error.io.pcix.scpe-d@PCIEXFN/PCIFNHZ,
+ error.io.pci.f-dpe-d@PCIEXFN/PCIFNHZ;
+
+prop fault.io.pciex.device-interr-unaf@PCIEXFN { IS_BG(PCIEXFN) } (0)->
+ ereport.io.pci.sec-sta@PCIEXFN;
+
+prop fault.io.pciex.device-interr@PCIEXFN { IS_BG(PCIEXFN) } (0)->
+ ereport.io.pci.sec-sta@PCIEXFN;
+
+/*
+ * the following rules for ptlp and ecrc faults are split into fatal and
+ * nonfatal, depending on the service impact reported by the leaf driver
+ */
+event error.io.pciex.nf-poisecrc-d@PCIEXFN;
+event error.io.pciex.deg-poisecrc-d@PCIEXFN;
+event error.io.pciex.f-poisecrc-d@PCIEXFN;
+event error.io.pciex.ecrcreq-d@PCIEXFN;
+event error.io.pciex.ecrccomp-d@PCIEXFN;
+event error.io.pciex.poisreq-d@PCIEXFN;
+event error.io.pciex.poiscomp-d@PCIEXFN;
+event error.io.pciex.flt-poisreq-u@PCIEXFN;
+event error.io.pciex.flt-poiscomp-u@PCIEXFN;
+event error.io.pciex.flt-ecrcreq-u@PCIEXFN;
+event error.io.pciex.flt-ecrccomp-u@PCIEXFN;
+
+prop error.io.pciex.nf-poisecrc-d@PCIEXFN (1)->
+ error.io.pciex.ecrcreq-d@PCIEXFN,
+ error.io.pciex.ecrccomp-d@PCIEXFN,
+ error.io.pciex.poisreq-d@PCIEXFN,
+ error.io.pciex.poiscomp-d@PCIEXFN;
+
+prop error.io.pciex.nf-poisecrc-d@PCIEXFN (1)->
+ error.io.pciex.noimpact-d@PCIEXFN;
+
+prop error.io.pciex.f-poisecrc-d@PCIEXFN (1)->
+ error.io.pciex.ecrcreq-d@PCIEXFN,
+ error.io.pciex.ecrccomp-d@PCIEXFN,
+ error.io.pciex.poisreq-d@PCIEXFN,
+ error.io.pciex.poiscomp-d@PCIEXFN;
+
+prop error.io.pciex.f-poisecrc-d@PCIEXFN (1)->
+ error.io.pciex.lost-d@PCIEXFN;
+
+prop error.io.pciex.deg-poisecrc-d@PCIEXFN (1)->
+ error.io.pciex.ecrcreq-d@PCIEXFN,
+ error.io.pciex.ecrccomp-d@PCIEXFN,
+ error.io.pciex.poisreq-d@PCIEXFN,
+ error.io.pciex.poiscomp-d@PCIEXFN;
+
+prop error.io.pciex.deg-poisecrc-d@PCIEXFN (1)->
+ error.io.pciex.degraded-d@PCIEXFN;
+
+prop error.io.pciex.flt-nf-poisecrc-u@PCIEXFN (1)->
+ error.io.pciex.flt-ecrcreq-u@PCIEXFN,
+ error.io.pciex.flt-ecrccomp-u@PCIEXFN,
+ error.io.pciex.flt-poisreq-u@PCIEXFN,
+ error.io.pciex.flt-poiscomp-u@PCIEXFN;
+
+prop error.io.pciex.flt-nf-poisecrc-u@PCIEXFN (1)->
+ error.io.pciex.noimpact-d@PCIEXFN;
+
+prop error.io.pciex.flt-deg-poisecrc-u@PCIEXFN (1)->
+ error.io.pciex.flt-ecrcreq-u@PCIEXFN,
+ error.io.pciex.flt-ecrccomp-u@PCIEXFN,
+ error.io.pciex.flt-poisreq-u@PCIEXFN,
+ error.io.pciex.flt-poiscomp-u@PCIEXFN;
+
+prop error.io.pciex.flt-deg-poisecrc-u@PCIEXFN (1)->
+ error.io.pciex.degraded-d@PCIEXFN;
+
+prop error.io.pciex.flt-f-poisecrc-u@PCIEXFN (1)->
+ error.io.pciex.flt-ecrcreq-u@PCIEXFN,
+ error.io.pciex.flt-ecrccomp-u@PCIEXFN,
+ error.io.pciex.flt-poisreq-u@PCIEXFN,
+ error.io.pciex.flt-poiscomp-u@PCIEXFN;
+
+prop error.io.pciex.flt-f-poisecrc-u@PCIEXFN (1)->
+ error.io.pciex.lost-d@PCIEXFN;
/*
* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
* declarations
* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*/
-event error.io.pciex.fatal@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.nonfatal@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.flt-ur-u@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.ur-u@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.ur-u@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.ur-u@pciexrc/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.nr-u@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.nr-u@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.nr-u@pciexrc/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.ca-u@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.ca-u@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.ca-u@pciexrc/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.mtlp-d@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.sw-mtlp-d@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.mtlp-d@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.flt-ca-d@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.ca-d@pciexrc/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.ca-d@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.ca-d@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.poisreq-d@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.poisreq-d@pciexrc/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.poisreq-d@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.sw-poisreq-d@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.poiscomp-d@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.ecrcreq-d@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.sw-ecrcreq-d@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.ecrccomp-d@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.badreq-d@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.badreq-d@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.badreq-u@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.badreq-u@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.badreq-u@pciexbus/pciexdev;
-event error.io.pciex.badreq-u@pciexrc/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.ecrcreq-u@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.ecrcreq-u@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.source-f-ecrcreq-u@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.source-nf-ecrcreq-u@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.source-f-ecrcreq-u@pcibus/pcidev/pcifn;
-event error.io.pciex.source-nf-ecrcreq-u@pcibus/pcidev/pcifn;
-event error.io.pciex.ecrccomp-u@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.ecrccomp-u@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.source-f-ecrccomp-u@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.source-nf-ecrccomp-u@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.source-f-ecrccomp-u@pcibus/pcidev/pcifn;
-event error.io.pciex.source-nf-ecrccomp-u@pcibus/pcidev/pcifn;
-event error.io.pciex.poiscomp-u@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.poiscomp-u@pciexrc/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.poiscomp-u@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.source-f-poiscomp-u@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.source-nf-poiscomp-u@pciexbus/pciexdev/pciexfn;
-event error.io.pci.source-f-dpdata-r-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pci.source-nf-dpdata-r-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pci.source-f-dpdata-r-u@pcibus/pcidev/pcifn;
-event error.io.pci.source-nf-dpdata-r-u@pcibus/pcidev/pcifn;
-event error.io.pciex.poisreq-u@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.poisreq-u@pciexrc/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.poisreq-u@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.source-f-poisreq-u@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.source-nf-poisreq-u@pciexbus/pciexdev/pciexfn;
-event error.io.pci.source-f-dpdata-w-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pci.source-nf-dpdata-w-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pci.source-f-dpdata-w-u@pcibus/pcidev/pcifn;
-event error.io.pci.source-nf-dpdata-w-u@pcibus/pcidev/pcifn;
-event error.io.pciex.source-f-poisreq-u@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.source-nf-poisreq-u@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.source-mtlp-u@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.source-mtlp-u@pcibus/pcidev/pcifn;
-event error.io.pci.badreq-pw-u@pcibus/pcidev/pcifn;
-event error.io.pci.badreq-drw-u@pcibus/pcidev/pcifn;
-event error.io.pci.badreq-pw-d@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pci.badreq-drw-d@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pci.target-ma-d@pciexbus/pciexdev/pciexfn;
-event error.io.pci.target-rta-d@pciexbus/pciexdev/pciexfn;
-event error.io.pci.target-mdpe-d@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.f-poisreq-d@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.f-poisreq-d@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.f-lf-poisreq-d@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.nf-poisreq-d@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.nf-poisreq-d@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.anf-poisreq-d@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.anf-poisreq-d@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.f-poiscomp-d@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.f-poiscomp-d@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.f-lf-poiscomp-d@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.nf-poiscomp-d@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.nf-poiscomp-d@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.anf-poiscomp-d@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.anf-poiscomp-d@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.f-ecrcreq-d@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.f-ecrcreq-d@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.f-ecrcreq-d@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pciex.f-ecrcreq-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pciex.f-ecrcreq-d@pcibus/pcidev/pcifn;
-event error.io.pciex.nf-ecrcreq-d@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.nf-ecrcreq-d@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.nf-ecrcreq-d@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pciex.nf-ecrcreq-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pciex.nf-ecrcreq-d@pcibus/pcidev/pcifn;
-event error.io.pciex.f-ecrccomp-d@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.f-ecrccomp-d@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.f-ecrccomp-d@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pciex.f-ecrccomp-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pciex.f-ecrccomp-d@pcibus/pcidev/pcifn;
-event error.io.pciex.f-lf-ecrccomp-d@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.nf-ecrccomp-d@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.nf-ecrccomp-d@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.nf-ecrccomp-d@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pciex.nf-ecrccomp-d@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pciex.nf-ecrccomp-d@pcibus/pcidev/pcifn;
-event error.io.pciex.f-lf-poisreq-u@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.fatal-u@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.nonfatal-u@pciexbus/pciexdev/pciexfn;
-event error.io.pciex.fatal-u@pciexrc/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.nonfatal-u@pciexrc/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.fatal-u@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.nonfatal-u@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn;
-event error.io.service.restored@pcibus/pcidev/pcifn;
-
-event ereport.io.pci.ma@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pci.mdpe@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pci.dpe@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pci.rta@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pci.sta@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.service.lost@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.service.degraded@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.service.unaffected@pcibus/pcidev/pcifn{within(5s)};
-event ereport.io.pciex.dl.dllp@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pciex.dl.btlp@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pciex.dl.bdllp@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pciex.dl.rto@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pciex.dl.rnr@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pciex.pl.re@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pciex.pl.te@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pciex.tl.fcp@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pciex.tl.rof@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pciex.tl.mtlp@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pciex.tl.ur@pciexfn{within(5s)};
-event ereport.io.pciex.tl.ca@pciexfn{within(5s)};
-event ereport.io.pciex.tl.ur@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pciex.tl.ca@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pciex.tl.ptlp@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pciex.tl.ecrc@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pciex.tl.uc@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pciex.tl.cto@pciexbus/pciexdev/pciexfn{within(5s)};
+event error.io.pciex.fatal@PCIEXFN;
+event error.io.pciex.nonfatal@PCIEXFN;
+event error.io.pciex.flt-ur-u@PCIEXFN;
+event error.io.pciex.mtlp-d@PCIEXFN;
+event error.io.pciex.sw-mtlp-d@PCIEXFN;
+event error.io.pciex.mtlp-d@PCIEXFN/PCIEXFN;
+event error.io.pciex.ca-d@PCIEXFN;
+event error.io.pciex.ca-fwd-d@PCIEXFN;
+event error.io.pciex.ca-fwd-d@PCIEXFN/PCIEXFN;
+event error.io.pciex.poisreq-fwd-d@PCIEXFN;
+event error.io.pciex.poisreq-fwd-d@pciexrc/PCIEXFN;
+event error.io.pciex.poisreq-fwd-d@PCIEXFN/PCIEXFN;
+event error.io.pciex.poiscomp-fwd-d@PCIEXFN;
+event error.io.pciex.poiscomp-fwd-d@PCIEXFN/PCIEXFN;
+event error.io.pciex.ecrcreq-fwd-d@PCIEXFN/PCIEXFN;
+event error.io.pciex.ecrccomp-fwd-d@PCIEXFN/PCIEXFN;
+event error.io.pciex.ecrcreq-fwd-d@PCIEXFN;
+event error.io.pciex.ecrccomp-fwd-d@PCIEXFN;
+event error.io.pciex.source-ecrcreq-u@PCIEXFN;
+event error.io.pciex.source-ecrccomp-u@PCIEXFN;
+event error.io.pciex.source-poiscomp-u@PCIEXFN;
+event error.io.pciex.source-poisreq-u@PCIEXFN;
+event error.io.pciex.badreq-d@PCIEXFN;
+event error.io.pciex.badreq-d@PCIEXFN/PCIEXFN;
+event error.io.pci.badreq-pw-d@PCIEXFN/PCIFN;
+event error.io.pci.badreq-drw-d@PCIEXFN/PCIFN;
+event error.io.pci.target-ma-d@PCIEXFN;
+event error.io.pci.target-rta-d@PCIEXFN;
+event error.io.pci.dpdata-pw-d@PCIEXFN/PCIFN;
+event error.io.pci.dpdata-dw-d@PCIEXFN/PCIFN;
+event error.io.pci.dpdata-dr-d@PCIEXFN/PCIFN;
+event error.io.pciex.ca-u@PCIEXFN;
+event error.io.pciex.ca-u@PCIEXFN/PCIEXFN;
+event error.io.pciex.ca-u@pciexrc/PCIEXFN;
+event error.io.pciex.ur-u@PCIEXFN;
+event error.io.pciex.ur-u@PCIEXFN/PCIEXFN;
+event error.io.pciex.ur-u@pciexrc/PCIEXFN;
+event error.io.pciex.nr-u@PCIEXFN;
+event error.io.pciex.nr-u@PCIEXFN/PCIEXFN;
+event error.io.pciex.nr-u@pciexrc/PCIEXFN;
+event error.io.pciex.mtlp-u@PCIEXFN;
+event error.io.pciex.mtlp-u@PCIEXFN/PCIEXFN;
+event error.io.pciex.mtlp-u@pciexrc/PCIEXFN;
+event error.io.pciex.badreq-u@PCIEXFN;
+event error.io.pciex.badreq-u@PCIEXFN/PCIEXFN;
+event error.io.pciex.badreq-u@pciexrc/PCIEXFN;
+event error.io.pciex.poisreq-u@PCIEXFN;
+event error.io.pciex.poisreq-u@PCIEXFN/PCIEXFN;
+event error.io.pciex.poisreq-u@pciexrc/PCIEXFN;
+event error.io.pciex.poiscomp-u@PCIEXFN;
+event error.io.pciex.poiscomp-u@PCIEXFN/PCIEXFN;
+event error.io.pciex.poiscomp-u@pciexrc/PCIEXFN;
+event error.io.pciex.ecrcreq-u@PCIEXFN;
+event error.io.pciex.ecrcreq-u@PCIEXFN/PCIEXFN;
+event error.io.pciex.ecrccomp-u@PCIEXFN;
+event error.io.pciex.ecrccomp-u@PCIEXFN/PCIEXFN;
+
+event ereport.io.pci.ma@PCIEXFN{within(5s)};
+event ereport.io.pci.mdpe@PCIEXFN{within(5s)};
+event ereport.io.pci.dpe@PCIEXFN{within(5s)};
+event ereport.io.pci.rta@PCIEXFN{within(5s)};
+event ereport.io.pci.sta@PCIEXFN{within(5s)};
+event ereport.io.pciex.dl.dllp@PCIEXFN{within(5s)};
+event ereport.io.pciex.dl.btlp@PCIEXFN{within(5s)};
+event ereport.io.pciex.dl.bdllp@PCIEXFN{within(5s)};
+event ereport.io.pciex.dl.rto@PCIEXFN{within(5s)};
+event ereport.io.pciex.dl.rnr@PCIEXFN{within(5s)};
+event ereport.io.pciex.pl.re@PCIEXFN{within(5s)};
+event ereport.io.pciex.pl.te@PCIEXFN{within(5s)};
+event ereport.io.pciex.tl.fcp@PCIEXFN{within(5s)};
+event ereport.io.pciex.tl.rof@PCIEXFN{within(5s)};
+event ereport.io.pciex.tl.mtlp@PCIEXFN{within(5s)};
+event ereport.io.pciex.tl.ur@PCIEXFN{within(5s)};
+event ereport.io.pciex.tl.ca@PCIEXFN{within(5s)};
+event ereport.io.pciex.tl.ptlp@PCIEXFN{within(5s)};
+event ereport.io.pciex.tl.ecrc@PCIEXFN{within(5s)};
+event ereport.io.pciex.tl.uc@PCIEXFN{within(5s)};
+event ereport.io.pciex.tl.cto@PCIEXFN{within(5s)};
event ereport.io.pciex.dl.dllp@pciexrc{within(5s)};
event ereport.io.pciex.dl.btlp@pciexrc{within(5s)};
event ereport.io.pciex.dl.bdllp@pciexrc{within(5s)};
@@ -723,15 +682,18 @@ event ereport.io.pci.sec-mdpe@pciexrc{within(5s)};
event ereport.io.pci.sec-dpe@pciexrc{within(5s)};
event ereport.io.pci.sec-rta@pciexrc{within(5s)};
event ereport.io.pci.sec-sta@pciexrc{within(5s)};
-event ereport.io.pci.sec-mdpe@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pci.sec-dpe@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pci.sec-rserr@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pci.sserr@pciexbus/pciexdev/pciexfn{within(5s)};
+event ereport.io.pci.sec-mdpe@PCIEXFN{within(5s)};
+event ereport.io.pci.sec-dpe@PCIEXFN{within(5s)};
+event ereport.io.pci.sec-rserr@PCIEXFN{within(5s)};
+event ereport.io.pci.sserr@PCIEXFN{within(5s)};
event ereport.io.pci.sec-rserr@pciexrc{within(5s)};
event ereport.io.pciex.rc.fe-msg@pciexrc{within(5s)};
event ereport.io.pciex.rc.nfe-msg@pciexrc{within(5s)};
-event ereport.io.pciex.bdg.sec-interr@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pciex.bdg.sec-ude@pciexbus/pciexdev/pciexfn{within(5s)};
+event ereport.io.pciex.rc.mue-msg@pciexrc{within(5s)};
+event ereport.io.pciex.bdg.sec-interr@PCIEXFN{within(5s)};
+event ereport.io.pciex.bdg.sec-ude@PCIEXFN{within(5s)};
+event ereport.io.pci.target-mdpe@PCIEXFN{within(5s)};
+event ereport.io.pci.target-mdpe@PCIFN{within(5s)};
/*
* handling of fatal and nonfatal error messages propagated up to root complex
@@ -739,38 +701,34 @@ event ereport.io.pciex.bdg.sec-ude@pciexbus/pciexdev/pciexfn{within(5s)};
* Use these for errors reported by root-complex on behalf of another device.
* Can use source-id payload to identify where the message came from.
*/
-prop error.io.pciex.fatal@pciexbus[b]/pciexdev[d]/pciexfn[f] (1)->
- ereport.io.pciex.rc.fe-msg@pciexrc<> {
- SOURCE_ID_MATCHES_BDF && BDF_IS_UNDER_RC };
-
-prop error.io.pciex.fatal@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.fatal-u@pciexbus/pciexdev/pciexfn;
+prop error.io.pciex.fatal@PCIEXFN1 (1)->
+ ereport.io.pciex.rc.mue-msg@pciexrc { is_under(pciexrc, PCIEXFN1) },
+ ereport.io.pciex.rc.fe-msg@pciexrc { is_under(pciexrc, PCIEXFN1) &&
+ SOURCE_ID_MATCHES_BDF };
-prop error.io.pciex.fatal-u@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pci.sserr@pciexbus/pciexdev/pciexfn;
+prop error.io.pciex.fatal@PCIEXFN (0)->
+ ereport.io.pci.sserr@PCIEXFN1;
-prop error.io.pciex.fatal-u@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn (0)->
- error.io.pciex.fatal-u@pciexbus/pciexdev/pciexfn,
- ereport.io.pci.sec-rserr@pciexbus/pciexdev/pciexfn;
+prop error.io.pciex.fatal@PCIEXFN { is_under(PCIEXFN1, PCIEXFN) } (0)->
+ ereport.io.pci.sserr@PCIEXFN1,
+ ereport.io.pci.sec-rserr@PCIEXFN1;
-prop error.io.pciex.fatal-u@pciexrc/pciexbus/pciexdev/pciexfn (0)->
+prop error.io.pciex.fatal@PCIEXFN { is_under(pciexrc, PCIEXFN) } (0)->
ereport.io.pci.sec-rserr@pciexrc;
-prop error.io.pciex.nonfatal@pciexbus[b]/pciexdev[d]/pciexfn[f] (1)->
- ereport.io.pciex.rc.nfe-msg@pciexrc<> {
- SOURCE_ID_MATCHES_BDF && BDF_IS_UNDER_RC };
+prop error.io.pciex.nonfatal@PCIEXFN1 (1)->
+ ereport.io.pciex.rc.mue-msg@pciexrc { is_under(pciexrc, PCIEXFN1) },
+ ereport.io.pciex.rc.nfe-msg@pciexrc { is_under(pciexrc, PCIEXFN1) &&
+ SOURCE_ID_MATCHES_BDF };
-prop error.io.pciex.nonfatal@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.nonfatal-u@pciexbus/pciexdev/pciexfn;
+prop error.io.pciex.nonfatal@PCIEXFN (0)->
+ ereport.io.pci.sserr@PCIEXFN;
-prop error.io.pciex.nonfatal-u@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pci.sserr@pciexbus/pciexdev/pciexfn;
+prop error.io.pciex.nonfatal@PCIEXFN { is_under(PCIEXFN1, PCIEXFN) } (0)->
+ ereport.io.pci.sserr@PCIEXFN1,
+ ereport.io.pci.sec-rserr@PCIEXFN1;
-prop error.io.pciex.nonfatal-u@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn (0)->
- error.io.pciex.nonfatal-u@pciexbus/pciexdev/pciexfn,
- ereport.io.pci.sec-rserr@pciexbus/pciexdev/pciexfn;
-
-prop error.io.pciex.nonfatal-u@pciexrc/pciexbus/pciexdev/pciexfn (0)->
+prop error.io.pciex.nonfatal@PCIEXFN { is_under(pciexrc, PCIEXFN) } (0)->
ereport.io.pci.sec-rserr@pciexrc;
/*
@@ -779,24 +737,19 @@ prop error.io.pciex.nonfatal-u@pciexrc/pciexbus/pciexdev/pciexfn (0)->
* can use may propagations here as these ereports are only seen for these
* faults.
*/
-prop error.io.pciex.corrlink@pciexbus (0)->
- ereport.io.pciex.dl.btlp@pciexbus/pciexdev/pciexfn
- { IS_SWU || IS_LEAF || IS_BDG },
- ereport.io.pciex.dl.bdllp@pciexbus/pciexdev/pciexfn
- { IS_SWU || IS_LEAF || IS_BDG },
- ereport.io.pciex.dl.rto@pciexbus/pciexdev/pciexfn
- { IS_SWU || IS_LEAF || IS_BDG },
- ereport.io.pciex.dl.rnr@pciexbus/pciexdev/pciexfn
- { IS_SWU || IS_LEAF || IS_BDG },
- ereport.io.pciex.pl.re@pciexbus/pciexdev/pciexfn
- { IS_SWU || IS_LEAF || IS_BDG };
-
-prop error.io.pciex.corrlink@pciexbus/pciexdev/pciexfn/pciexbus (0)->
- ereport.io.pciex.dl.btlp@pciexbus/pciexdev/pciexfn { IS_SWD },
- ereport.io.pciex.dl.bdllp@pciexbus/pciexdev/pciexfn { IS_SWD },
- ereport.io.pciex.dl.rto@pciexbus/pciexdev/pciexfn { IS_SWD },
- ereport.io.pciex.dl.rnr@pciexbus/pciexdev/pciexfn { IS_SWD },
- ereport.io.pciex.pl.re@pciexbus/pciexdev/pciexfn { IS_SWD };
+prop error.io.pciex.corrlink@pciexbus { !IS_SD(PCIEXFN) } (0)->
+ ereport.io.pciex.dl.btlp@PCIEXFN,
+ ereport.io.pciex.dl.bdllp@PCIEXFN,
+ ereport.io.pciex.dl.rto@PCIEXFN,
+ ereport.io.pciex.dl.rnr@PCIEXFN,
+ ereport.io.pciex.pl.re@PCIEXFN;
+
+prop error.io.pciex.corrlink@PCIEXFN/pciexbus { IS_SD(PCIEXFN) } (0)->
+ ereport.io.pciex.dl.btlp@PCIEXFN,
+ ereport.io.pciex.dl.bdllp@PCIEXFN,
+ ereport.io.pciex.dl.rto@PCIEXFN,
+ ereport.io.pciex.dl.rnr@PCIEXFN,
+ ereport.io.pciex.pl.re@PCIEXFN;
prop error.io.pciex.corrlink@pciexrc/pciexbus (0)->
ereport.io.pciex.dl.btlp@pciexrc,
@@ -805,29 +758,24 @@ prop error.io.pciex.corrlink@pciexrc/pciexbus (0)->
ereport.io.pciex.dl.rnr@pciexrc,
ereport.io.pciex.pl.re@pciexrc;
-prop error.io.pciex.fatlink@pciexbus/pciexdev/pciexfn (0)->
- error.io.pciex.fatal@pciexbus/pciexdev/pciexfn
- { IS_SWU || IS_LEAF || IS_BDG };
-
-prop error.io.pciex.fatlink@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pciex.dl.dllp@pciexbus/pciexdev/pciexfn
- { IS_SWU || IS_LEAF || IS_BDG },
- ereport.io.pciex.tl.fcp@pciexbus/pciexdev/pciexfn
- { IS_SWU || IS_LEAF || IS_BDG },
- ereport.io.pciex.tl.rof@pciexbus/pciexdev/pciexfn
- { IS_SWU || IS_LEAF || IS_BDG };
-
-prop error.io.pciex.fatlink@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn
-(0)->
- error.io.pciex.fatal@pciexbus/pciexdev/pciexfn { IS_SWD };
-
-prop error.io.pciex.fatlink@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pciex.dl.dllp@pciexbus/pciexdev/pciexfn { IS_SWD },
- ereport.io.pciex.pl.te@pciexbus/pciexdev/pciexfn { IS_SWD },
- ereport.io.pciex.tl.fcp@pciexbus/pciexdev/pciexfn { IS_SWD },
- ereport.io.pciex.tl.rof@pciexbus/pciexdev/pciexfn { IS_SWD };
-
-prop error.io.pciex.fatlink@pciexrc/pciexbus/pciexdev/pciexfn (0)->
+prop error.io.pciex.fatlink@PCIEXFN { !IS_SD(PCIEXFN) } (0)->
+ error.io.pciex.fatal@PCIEXFN;
+
+prop error.io.pciex.fatlink@PCIEXFN { !IS_SD(PCIEXFN) } (0)->
+ ereport.io.pciex.dl.dllp@PCIEXFN,
+ ereport.io.pciex.tl.fcp@PCIEXFN,
+ ereport.io.pciex.tl.rof@PCIEXFN;
+
+prop error.io.pciex.fatlink@PCIEXFN/PCIEXFN { IS_SD(PCIEXFN) } (0)->
+ error.io.pciex.fatal@PCIEXFN;
+
+prop error.io.pciex.fatlink@PCIEXFN/PCIEXFN { IS_SD(PCIEXFN) } (0)->
+ ereport.io.pciex.dl.dllp@PCIEXFN,
+ ereport.io.pciex.pl.te@PCIEXFN,
+ ereport.io.pciex.tl.fcp@PCIEXFN,
+ ereport.io.pciex.tl.rof@PCIEXFN;
+
+prop error.io.pciex.fatlink@pciexrc/PCIEXFN (0)->
ereport.io.pciex.dl.dllp@pciexrc,
ereport.io.pciex.pl.te@pciexrc,
ereport.io.pciex.tl.fcp@pciexrc,
@@ -836,9 +784,9 @@ prop error.io.pciex.fatlink@pciexrc/pciexbus/pciexdev/pciexfn (0)->
/*
* bridge internal error
*/
-prop error.io.pciex.sec-interr@pciexbus/pciexdev/pciexfn (2) ->
- error.io.pciex.nonfatal@pciexbus/pciexdev/pciexfn { IS_BDG },
- ereport.io.pciex.bdg.sec-interr@pciexbus/pciexdev/pciexfn { IS_BDG };
+prop error.io.pciex.sec-interr@PCIEXFN { IS_BG(PCIEXFN) } (2) ->
+ error.io.pciex.nonfatal@PCIEXFN,
+ ereport.io.pciex.bdg.sec-interr@PCIEXFN;
/*
* downstream poisoned request
@@ -847,109 +795,63 @@ prop error.io.pciex.sec-interr@pciexbus/pciexdev/pciexfn (2) ->
* on route must raise a ptlp ereport while any switch ports forwarding
* the poisoned request must raise sec-mdpe ereports. The originator of the
* poisoning (be it root complex or downstream port of a switch) also raises
- * sec-mdpe. A hardened leaf driver will also raise ptlp. A target-mdpe
- * cascades down to the leaf (which may be a pci device beyond the bridge).
+ * sec-mdpe. A hardened leaf driver will also raise ptlp. A target-mdpe may
+ * be seen at the leaf (which may be a pci device beyond the bridge).
*
* Additionally, the leaf/bridge may treat the request as a ur, which the
* root complex will see and report an ma. Use flt-ur-u to represent this.
- * Note that sw-poisreq-d is to handle the case where the switch is actually
- * the target of the packet (config request etc).
*
* The fault can always be recognized and the source identified using the ptlp
* and sec-mdpe ereports.
*/
-prop error.io.pciex.flt-f-poisreq-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.f-poisreq-d@pciexbus/pciexdev/pciexfn;
-
-prop error.io.pciex.f-poisreq-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.sw-poisreq-d@pciexbus/pciexdev/pciexfn,
- error.io.pciex.f-poisreq-d@pciexbus/pciexdev/pciexfn/pciexbus<>/pciexdev<>/pciexfn<>;
-
-prop error.io.pciex.f-poisreq-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.poisreq-d@pciexbus/pciexdev/pciexfn;
-
-prop error.io.pciex.f-poisreq-d@pciexbus/pciexdev/pciexfn (0)->
- error.io.pciex.f-lf-poisreq-d@pciexbus/pciexdev/pciexfn { IS_LEAF };
-
-prop error.io.pciex.f-lf-poisreq-d@pciexbus/pciexdev/pciexfn (1)->
- ereport.io.pci.dpe@pciexbus/pciexdev/pciexfn;
-
-prop error.io.pciex.f-lf-poisreq-d@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pciex.tl.ptlp@pciexbus/pciexdev/pciexfn,
- ereport.io.service.lost@pciexbus/pciexdev/pciexfn,
- ereport.io.service.degraded@pciexbus/pciexdev/pciexfn;
-
-prop error.io.pciex.f-poisreq-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.nonfatal@pciexbus/pciexdev/pciexfn { IS_LEAF || IS_BDG };
-
-prop error.io.pciex.flt-nf-poisreq-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.nf-poisreq-d@pciexbus/pciexdev/pciexfn,
- error.io.pciex.anf-poisreq-d@pciexbus/pciexdev/pciexfn;
-
-prop error.io.pciex.nf-poisreq-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.nf-poisreq-d@pciexbus/pciexdev/pciexfn/pciexbus<>/pciexdev<>/pciexfn<>;
-
-prop error.io.pciex.nf-poisreq-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.poisreq-d@pciexbus/pciexdev/pciexfn;
-
-prop error.io.pciex.nf-poisreq-d@pciexbus/pciexdev/pciexfn (1)->
- ereport.io.pci.dpe@pciexbus/pciexdev/pciexfn { IS_LEAF };
-
-prop error.io.pciex.nf-poisreq-d@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pciex.tl.ptlp@pciexbus/pciexdev/pciexfn { IS_LEAF };
-
-prop error.io.pciex.nf-poisreq-d@pciexbus/pciexdev/pciexfn (1)->
- ereport.io.service.unaffected@pciexbus/pciexdev/pciexfn { IS_LEAF },
- error.io.service.restored@pciexbus/pciexdev/pciexfn { IS_LEAF };
-
-prop error.io.service.restored@pciexbus/pciexdev/pciexfn (1)->
- ereport.io.service.lost@pciexbus/pciexdev/pciexfn,
- ereport.io.service.degraded@pciexbus/pciexdev/pciexfn;
+prop error.io.pciex.poisreq-d@PCIEXFN (1)->
+ error.io.pciex.poisreq-fwd-d@PCIEXFN;
-prop error.io.service.restored@pciexbus/pciexdev/pciexfn (1)->
- ereport.io.service.restored@pciexbus/pciexdev/pciexfn;
+prop error.io.pciex.poisreq-fwd-d@PCIEXFN { IS_SD(PCIEXFN) ||
+ IS_SU(PCIEXFN) } (1)->
+ error.io.pciex.flt-ur-u@PCIEXFN,
+ error.io.pciex.poisreq-fwd-d@PCIEXFN/PCIEXFNHZ;
-prop error.io.pciex.nf-poisreq-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.nonfatal@pciexbus/pciexdev/pciexfn { IS_LEAF || IS_BDG };
-
-prop error.io.pciex.anf-poisreq-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.anf-poisreq-d@pciexbus/pciexdev/pciexfn/pciexbus<>/pciexdev<>/pciexfn<>;
-
-prop error.io.pciex.anf-poisreq-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.poisreq-d@pciexbus/pciexdev/pciexfn;
+prop error.io.pciex.poisreq-fwd-d@pciexrc/PCIEXFN (1)->
+ ereport.io.pci.sec-mdpe@pciexrc;
-prop error.io.pciex.anf-poisreq-d@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pci.dpe@pciexbus/pciexdev/pciexfn { IS_LEAF },
- ereport.io.pciex.tl.ptlp@pciexbus/pciexdev/pciexfn { IS_LEAF };
+prop error.io.pciex.poisreq-fwd-d@PCIEXFN/PCIEXFN { IS_SU(PCIEXFN) } (0)->
+ ereport.io.pci.sec-mdpe@PCIEXFN;
-prop error.io.pciex.poisreq-d@pciexrc/pciexbus/pciexdev/pciexfn (1)->
- ereport.io.pci.sec-mdpe@pciexrc;
+prop error.io.pciex.poisreq-fwd-d@PCIEXFN { IS_SU(PCIEXFN) } (2)->
+ ereport.io.pci.dpe@PCIEXFN,
+ ereport.io.pciex.tl.ptlp@PCIEXFN;
-prop error.io.pciex.poisreq-d@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn (1)->
- ereport.io.pci.sec-mdpe@pciexbus/pciexdev/pciexfn { IS_SWD };
+prop error.io.pciex.poisreq-fwd-d@PCIEXFN { IS_SU(PCIEXFN) } (0)->
+ error.io.pciex.nonfatal@PCIEXFN;
-prop error.io.pciex.poisreq-d@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pci.sec-mdpe@pciexbus/pciexdev/pciexfn { IS_SWU };
+prop error.io.pciex.poisreq-fwd-d@PCIEXFN/PCIEXFN { IS_SD(PCIEXFN) } (1)->
+ ereport.io.pci.sec-mdpe@PCIEXFN;
-prop error.io.pciex.poisreq-d@pciexbus/pciexdev/pciexfn (2)->
- ereport.io.pci.dpe@pciexbus/pciexdev/pciexfn { IS_SWU || IS_BDG },
- ereport.io.pciex.tl.ptlp@pciexbus/pciexdev/pciexfn { IS_SWU || IS_BDG };
+prop error.io.pciex.poisreq-fwd-d@PCIEXFN { IS_SD(PCIEXFN) } (0)->
+ ereport.io.pci.dpe@PCIEXFN,
+ ereport.io.pciex.tl.ptlp@PCIEXFN,
+ error.io.pciex.nonfatal@PCIEXFN;
-prop error.io.pciex.poisreq-d@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pci.dpe@pciexbus/pciexdev/pciexfn { IS_SWD },
- ereport.io.pciex.tl.ptlp@pciexbus/pciexdev/pciexfn { IS_SWD };
+prop error.io.pciex.poisreq-fwd-d@PCIEXFN { IS_BG(PCIEXFN) } (3)->
+ ereport.io.pci.dpe@PCIEXFN,
+ ereport.io.pciex.tl.ptlp@PCIEXFN,
+ error.io.pciex.nonfatal@PCIEXFN;
-prop error.io.pciex.poisreq-d@pciexbus/pciexdev/pciexfn (0)->
- error.io.pciex.flt-ur-u@pciexbus/pciexdev/pciexfn { IS_LEAF };
+prop error.io.pciex.poisreq-fwd-d@PCIEXFN { IS_BG(PCIEXFN) } (1)->
+ error.io.pci.dpdata-pw-d@PCIEXFN/PCIFNHZ,
+ error.io.pci.dpdata-dw-d@PCIEXFN/PCIFNHZ;
-prop error.io.pciex.poisreq-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pci.target-mdpe-d@pciexbus/pciexdev/pciexfn { IS_LEAF || IS_BDG };
+prop error.io.pciex.poisreq-fwd-d@PCIEXFN { IS_LF(PCIEXFN) } (1)->
+ error.io.pciex.nonfatal@PCIEXFN;
-prop error.io.pciex.sw-poisreq-d@pciexbus/pciexdev/pciexfn (0)->
- error.io.pciex.flt-ur-u@pciexbus/pciexdev/pciexfn { IS_SWU };
+prop error.io.pciex.poisreq-fwd-d@PCIEXFN { IS_LF(PCIEXFN) } (0)->
+ ereport.io.pci.dpe@PCIEXFN,
+ ereport.io.pciex.tl.ptlp@PCIEXFN,
+ error.io.pciex.flt-ur-u@PCIEXFN;
-prop error.io.pciex.sw-poisreq-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pci.target-mdpe-d@pciexbus/pciexdev/pciexfn { IS_SWU };
+prop error.io.pciex.poisreq-fwd-d@PCIEXFN (0)->
+ ereport.io.pci.target-mdpe@PCIEXFN;
/*
* downstream poisoned completion
@@ -961,83 +863,46 @@ prop error.io.pciex.sw-poisreq-d@pciexbus/pciexdev/pciexfn (1)->
* the root complex identifying the leaf device, we won't actually be informed
* that the error was an ptlp.
*/
-prop error.io.pciex.flt-f-poiscomp-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.f-poiscomp-d@pciexbus/pciexdev/pciexfn;
-
-prop error.io.pciex.f-poiscomp-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.f-poiscomp-d@pciexbus/pciexdev/pciexfn/pciexbus<>/pciexdev<>/pciexfn<>;
-
-prop error.io.pciex.f-poiscomp-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.poiscomp-d@pciexbus/pciexdev/pciexfn;
-
-prop error.io.pciex.f-poiscomp-d@pciexbus/pciexdev/pciexfn (0)->
- error.io.pciex.f-lf-poiscomp-d@pciexbus/pciexdev/pciexfn { IS_LEAF };
-
-prop error.io.pciex.f-lf-poiscomp-d@pciexbus/pciexdev/pciexfn (2)->
- ereport.io.pci.mdpe@pciexbus/pciexdev/pciexfn,
- ereport.io.pci.dpe@pciexbus/pciexdev/pciexfn;
-
-prop error.io.pciex.f-lf-poiscomp-d@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pciex.tl.ptlp@pciexbus/pciexdev/pciexfn,
- ereport.io.service.lost@pciexbus/pciexdev/pciexfn,
- ereport.io.service.degraded@pciexbus/pciexdev/pciexfn;
-
-prop error.io.pciex.f-poiscomp-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.nonfatal@pciexbus/pciexdev/pciexfn { IS_LEAF || IS_BDG };
-
-prop error.io.pciex.flt-nf-poiscomp-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.nf-poiscomp-d@pciexbus/pciexdev/pciexfn,
- error.io.pciex.anf-poiscomp-d@pciexbus/pciexdev/pciexfn;
-
-prop error.io.pciex.nf-poiscomp-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.nf-poiscomp-d@pciexbus/pciexdev/pciexfn/pciexbus<>/pciexdev<>/pciexfn<>;
-
-prop error.io.pciex.nf-poiscomp-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.poiscomp-d@pciexbus/pciexdev/pciexfn;
-
-prop error.io.pciex.nf-poiscomp-d@pciexbus/pciexdev/pciexfn (2)->
- ereport.io.pci.mdpe@pciexbus/pciexdev/pciexfn { IS_LEAF },
- ereport.io.pci.dpe@pciexbus/pciexdev/pciexfn { IS_LEAF };
+prop error.io.pciex.poiscomp-d@PCIEXFN (1)->
+ error.io.pciex.poiscomp-fwd-d@PCIEXFN;
-prop error.io.pciex.nf-poiscomp-d@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pciex.tl.ptlp@pciexbus/pciexdev/pciexfn { IS_LEAF };
+prop error.io.pciex.poiscomp-fwd-d@PCIEXFN (1)->
+ error.io.pciex.poiscomp-fwd-d@PCIEXFN/PCIEXFNHZ;
-prop error.io.pciex.nf-poiscomp-d@pciexbus/pciexdev/pciexfn (1)->
- ereport.io.service.unaffected@pciexbus/pciexdev/pciexfn { IS_LEAF },
- error.io.service.restored@pciexbus/pciexdev/pciexfn { IS_LEAF };
+prop error.io.pciex.poiscomp-fwd-d@PCIEXFN { IS_SU(PCIEXFN) } (2)->
+ ereport.io.pci.dpe@PCIEXFN,
+ ereport.io.pciex.tl.ptlp@PCIEXFN;
-prop error.io.pciex.nf-poiscomp-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.nonfatal@pciexbus/pciexdev/pciexfn { IS_LEAF || IS_BDG };
+prop error.io.pciex.poiscomp-fwd-d@PCIEXFN { IS_SU(PCIEXFN) } (1)->
+ ereport.io.pci.mdpe@PCIEXFN,
+ ereport.io.pci.sec-mdpe@PCIEXFN;
-prop error.io.pciex.anf-poiscomp-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.anf-poiscomp-d@pciexbus/pciexdev/pciexfn/pciexbus<>/pciexdev<>/pciexfn<>;
+prop error.io.pciex.poiscomp-fwd-d@PCIEXFN { IS_SU(PCIEXFN) } (0)->
+ error.io.pciex.nonfatal@PCIEXFN;
-prop error.io.pciex.anf-poiscomp-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.poiscomp-d@pciexbus/pciexdev/pciexfn;
+prop error.io.pciex.poiscomp-fwd-d@PCIEXFN { IS_SD(PCIEXFN) } (0)->
+ ereport.io.pci.mdpe@PCIEXFN,
+ ereport.io.pci.sec-mdpe@PCIEXFN,
+ ereport.io.pci.dpe@PCIEXFN,
+ ereport.io.pciex.tl.ptlp@PCIEXFN,
+ error.io.pciex.nonfatal@PCIEXFN;
-prop error.io.pciex.anf-poiscomp-d@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pci.mdpe@pciexbus/pciexdev/pciexfn { IS_LEAF },
- ereport.io.pci.dpe@pciexbus/pciexdev/pciexfn { IS_LEAF },
- ereport.io.pciex.tl.ptlp@pciexbus/pciexdev/pciexfn { IS_LEAF };
+prop error.io.pciex.poiscomp-fwd-d@PCIEXFN { IS_BG(PCIEXFN) } (4)->
+ ereport.io.pci.mdpe@PCIEXFN,
+ ereport.io.pci.dpe@PCIEXFN,
+ ereport.io.pciex.tl.ptlp@PCIEXFN,
+ error.io.pciex.nonfatal@PCIEXFN;
-prop error.io.pciex.poiscomp-d@pciexbus/pciexdev/pciexfn (3)->
- ereport.io.pci.mdpe@pciexbus/pciexdev/pciexfn { IS_BDG },
- ereport.io.pci.dpe@pciexbus/pciexdev/pciexfn { IS_BDG },
- ereport.io.pciex.tl.ptlp@pciexbus/pciexdev/pciexfn { IS_BDG };
+prop error.io.pciex.poiscomp-fwd-d@PCIEXFN { IS_BG(PCIEXFN) } (1)->
+ error.io.pci.dpdata-dr-d@PCIEXFN/PCIFNHZ;
-prop error.io.pciex.poiscomp-d@pciexbus/pciexdev/pciexfn (2)->
- ereport.io.pci.dpe@pciexbus/pciexdev/pciexfn { IS_SWU },
- ereport.io.pciex.tl.ptlp@pciexbus/pciexdev/pciexfn { IS_SWU };
+prop error.io.pciex.poiscomp-fwd-d@PCIEXFN { IS_LF(PCIEXFN) } (1)->
+ error.io.pciex.nonfatal@PCIEXFN;
-prop error.io.pciex.poiscomp-d@pciexbus/pciexdev/pciexfn (1)->
- ereport.io.pci.mdpe@pciexbus/pciexdev/pciexfn { IS_SWU },
- ereport.io.pci.sec-mdpe@pciexbus/pciexdev/pciexfn { IS_SWU };
-
-prop error.io.pciex.poiscomp-d@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pci.mdpe@pciexbus/pciexdev/pciexfn { IS_SWD },
- ereport.io.pci.sec-mdpe@pciexbus/pciexdev/pciexfn { IS_SWD },
- ereport.io.pci.dpe@pciexbus/pciexdev/pciexfn { IS_SWD },
- ereport.io.pciex.tl.ptlp@pciexbus/pciexdev/pciexfn { IS_SWD };
+prop error.io.pciex.poiscomp-fwd-d@PCIEXFN { IS_LF(PCIEXFN) } (0)->
+ ereport.io.pci.mdpe@PCIEXFN,
+ ereport.io.pci.dpe@PCIEXFN,
+ ereport.io.pciex.tl.ptlp@PCIEXFN;
/*
* downstream request with ecrc error.
@@ -1050,7 +915,7 @@ prop error.io.pciex.poiscomp-d@pciexbus/pciexdev/pciexfn (0)->
* was an ecrc.
*
* Additionally, as the leaf/bridge will just throw away the packet, we should
- * eventually get a cto at the root complex - so use an flt-nr-u at the pciex
+ * eventually get a cto at the root complex - so use an nr-u at the pciex
* leaf or bridge to get the appropriate behaviour. For the case where the leaf
* driver wasn't hardened we may be able to identify the leaf device (and
* therefore any intermediate switches which might have caused the problem)
@@ -1058,75 +923,31 @@ prop error.io.pciex.poiscomp-d@pciexbus/pciexdev/pciexfn (0)->
* reported from the root complex identifying the leaf device. The combination
* of a nonfatal error reported from the root complex and a cto from the root
* complex is sufficient to positively identify this case.
- *
- * Note that sw-ecrcreq-d is to handle the case where the switch is actually
- * the target of the packet (config request etc).
*/
-prop error.io.pciex.flt-f-ecrcreq-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.f-ecrcreq-d@pciexbus/pciexdev/pciexfn;
-
-prop error.io.pciex.f-ecrcreq-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.sw-ecrcreq-d@pciexbus/pciexdev/pciexfn,
- error.io.pciex.f-ecrcreq-d@pciexbus/pciexdev/pciexfn/pciexbus<>/pciexdev<>/pciexfn<>;
-
-prop error.io.pciex.f-ecrcreq-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.f-ecrcreq-d@pciexbus/pciexdev/pciexfn/pcibus<>/pcidev<>/pcifn<>;
-
-prop error.io.pciex.f-ecrcreq-d@pcibus/pcidev/pcifn (1)->
- error.io.pciex.f-ecrcreq-d@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
-
-prop error.io.pciex.f-ecrcreq-d@pcibus/pcidev/pcifn (0)->
- ereport.io.service.lost@pcibus/pcidev/pcifn { IS_PCI_LEAF },
- ereport.io.service.degraded@pcibus/pcidev/pcifn { IS_PCI_LEAF };
-
-prop error.io.pciex.f-ecrcreq-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.ecrcreq-d@pciexbus/pciexdev/pciexfn;
-
-prop error.io.pciex.f-ecrcreq-d@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pciex.tl.ecrc@pciexbus/pciexdev/pciexfn { IS_LEAF },
- ereport.io.service.lost@pciexbus/pciexdev/pciexfn { IS_LEAF },
- ereport.io.service.degraded@pciexbus/pciexdev/pciexfn { IS_LEAF };
-
-prop error.io.pciex.flt-nf-ecrcreq-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.nf-ecrcreq-d@pciexbus/pciexdev/pciexfn;
-
-prop error.io.pciex.nf-ecrcreq-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.nf-ecrcreq-d@pciexbus/pciexdev/pciexfn/pciexbus<>/pciexdev<>/pciexfn<>;
-
-prop error.io.pciex.nf-ecrcreq-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.nf-ecrcreq-d@pciexbus/pciexdev/pciexfn/pcibus<>/pcidev<>/pcifn<>;
-
-prop error.io.pciex.nf-ecrcreq-d@pcibus/pcidev/pcifn (1)->
- error.io.pciex.nf-ecrcreq-d@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
-
-prop error.io.pciex.nf-ecrcreq-d@pcibus/pcidev/pcifn (1)->
- ereport.io.service.unaffected@pcibus/pcidev/pcifn { IS_PCI_LEAF },
- error.io.service.restored@pcibus/pcidev/pcifn { IS_PCI_LEAF };
+prop error.io.pciex.ecrcreq-d@PCIEXFN (1)->
+ error.io.pciex.ecrcreq-fwd-d@PCIEXFN;
-prop error.io.pciex.nf-ecrcreq-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.ecrcreq-d@pciexbus/pciexdev/pciexfn;
+prop error.io.pciex.ecrcreq-fwd-d@PCIEXFN { IS_SU(PCIEXFN) ||
+ IS_SD(PCIEXFN) } (1)->
+ error.io.pciex.flt-nr-u@PCIEXFN,
+ error.io.pciex.ecrcreq-fwd-d@PCIEXFN/PCIEXFNHZ;
-prop error.io.pciex.nf-ecrcreq-d@pciexbus/pciexdev/pciexfn (1)->
- ereport.io.pciex.tl.ecrc@pciexbus/pciexdev/pciexfn { IS_LEAF };
+prop error.io.pciex.ecrcreq-fwd-d@PCIEXFN { IS_SU(PCIEXFN) ||
+ IS_SD(PCIEXFN) } (0)->
+ ereport.io.pciex.tl.ecrc@PCIEXFN,
+ error.io.pciex.nonfatal@PCIEXFN;
-prop error.io.pciex.nf-ecrcreq-d@pciexbus/pciexdev/pciexfn (1)->
- ereport.io.service.unaffected@pciexbus/pciexdev/pciexfn { IS_LEAF },
- error.io.service.restored@pciexbus/pciexdev/pciexfn { IS_LEAF };
+prop error.io.pciex.ecrcreq-fwd-d@PCIEXFN { IS_BG(PCIEXFN) } (3)->
+ error.io.pciex.nonfatal@PCIEXFN,
+ ereport.io.pciex.tl.ecrc@PCIEXFN,
+ error.io.pciex.flt-nr-u@PCIEXFN;
-prop error.io.pciex.ecrcreq-d@pciexbus/pciexdev/pciexfn (0)->
- error.io.pciex.flt-nr-u@pciexbus/pciexdev/pciexfn { IS_LEAF || IS_BDG };
+prop error.io.pciex.ecrcreq-fwd-d@PCIEXFN { IS_LF(PCIEXFN) } (2)->
+ error.io.pciex.nonfatal@PCIEXFN,
+ error.io.pciex.flt-nr-u@PCIEXFN;
-prop error.io.pciex.ecrcreq-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.nonfatal@pciexbus/pciexdev/pciexfn { IS_LEAF || IS_BDG };
-
-prop error.io.pciex.ecrcreq-d@pciexbus/pciexdev/pciexfn (1)->
- ereport.io.pciex.tl.ecrc@pciexbus/pciexdev/pciexfn { IS_BDG };
-
-prop error.io.pciex.ecrcreq-d@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pciex.tl.ecrc@pciexbus/pciexdev/pciexfn { IS_SWU || IS_SWD };
-
-prop error.io.pciex.sw-ecrcreq-d@pciexbus/pciexdev/pciexfn (0)->
- error.io.pciex.flt-nr-u@pciexbus/pciexdev/pciexfn { IS_SWU };
+prop error.io.pciex.ecrcreq-fwd-d@PCIEXFN { IS_LF(PCIEXFN) } (0)->
+ ereport.io.pciex.tl.ecrc@PCIEXFN;
/*
* downstream completion with ecrc error.
@@ -1143,86 +964,37 @@ prop error.io.pciex.sw-ecrcreq-d@pciexbus/pciexdev/pciexfn (0)->
* not hardened) but if we get both ecrc and cto we need to distinguish from
* cto only which would be an nr-d.
*/
-prop error.io.pciex.flt-f-ecrccomp-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.f-ecrccomp-d@pciexbus/pciexdev/pciexfn;
-
-prop error.io.pciex.f-ecrccomp-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.f-ecrccomp-d@pciexbus/pciexdev/pciexfn/pciexbus<>/pciexdev<>/pciexfn<>;
-
-prop error.io.pciex.f-ecrccomp-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.f-ecrccomp-d@pciexbus/pciexdev/pciexfn/pcibus<>/pcidev<>/pcifn<>;
-
-prop error.io.pciex.f-ecrccomp-d@pcibus/pcidev/pcifn (1)->
- error.io.pciex.f-ecrccomp-d@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
-
-prop error.io.pciex.f-ecrccomp-d@pcibus/pcidev/pcifn (0)->
- ereport.io.service.lost@pcibus/pcidev/pcifn { IS_PCI_LEAF },
- ereport.io.service.degraded@pcibus/pcidev/pcifn { IS_PCI_LEAF };
-
-prop error.io.pciex.f-ecrccomp-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.ecrccomp-d@pciexbus/pciexdev/pciexfn;
-
-prop error.io.pciex.f-ecrccomp-d@pciexbus/pciexdev/pciexfn (0)->
- error.io.pciex.f-lf-ecrccomp-d@pciexbus/pciexdev/pciexfn { IS_LEAF },
- ereport.io.service.lost@pciexbus/pciexdev/pciexfn { IS_LEAF },
- ereport.io.service.degraded@pciexbus/pciexdev/pciexfn { IS_LEAF };
-
-prop error.io.pciex.f-lf-ecrccomp-d@pciexbus/pciexdev/pciexfn (2)->
- ereport.io.pciex.tl.ecrc@pciexbus/pciexdev/pciexfn,
- ereport.io.pciex.tl.cto@pciexbus/pciexdev/pciexfn;
-
-prop error.io.pciex.f-lf-ecrccomp-d@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pci.ma@pciexbus/pciexdev/pciexfn;
-
-prop error.io.pciex.flt-nf-ecrccomp-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.nf-ecrccomp-d@pciexbus/pciexdev/pciexfn;
-
-prop error.io.pciex.nf-ecrccomp-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.nf-ecrccomp-d@pciexbus/pciexdev/pciexfn/pciexbus<>/pciexdev<>/pciexfn<>;
-
-prop error.io.pciex.nf-ecrccomp-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.nf-ecrccomp-d@pciexbus/pciexdev/pciexfn/pcibus<>/pcidev<>/pcifn<>;
+prop error.io.pciex.ecrccomp-d@PCIEXFN (1)->
+ error.io.pciex.ecrccomp-fwd-d@PCIEXFN;
-prop error.io.pciex.nf-ecrccomp-d@pcibus/pcidev/pcifn (1)->
- error.io.pciex.nf-ecrccomp-d@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
+prop error.io.pciex.ecrccomp-fwd-d@PCIEXFN (1)->
+ error.io.pciex.ecrccomp-fwd-d@PCIEXFN/PCIEXFNHZ;
-prop error.io.pciex.nf-ecrccomp-d@pcibus/pcidev/pcifn (1)->
- ereport.io.service.unaffected@pcibus/pcidev/pcifn { IS_PCI_LEAF },
- error.io.service.restored@pcibus/pcidev/pcifn { IS_PCI_LEAF };
+prop error.io.pciex.ecrccomp-fwd-d@PCIEXFN { IS_SU(PCIEXFN) ||
+ IS_SD(PCIEXFN) } (0)->
+ error.io.pciex.nonfatal@PCIEXFN,
+ ereport.io.pciex.tl.ecrc@PCIEXFN;
-prop error.io.pciex.nf-ecrccomp-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.ecrccomp-d@pciexbus/pciexdev/pciexfn;
+prop error.io.pciex.ecrccomp-fwd-d@PCIEXFN { IS_BG(PCIEXFN) } (3)->
+ error.io.pciex.nonfatal@PCIEXFN,
+ ereport.io.pciex.tl.ecrc@PCIEXFN,
+ error.io.pciex.nr-d@PCIEXFN;
-prop error.io.pciex.nf-ecrccomp-d@pciexbus/pciexdev/pciexfn (2)->
- ereport.io.pciex.tl.ecrc@pciexbus/pciexdev/pciexfn { IS_LEAF },
- ereport.io.pciex.tl.cto@pciexbus/pciexdev/pciexfn { IS_LEAF };
+prop error.io.pciex.ecrccomp-fwd-d@PCIEXFN { IS_LF(PCIEXFN) } (1)->
+ error.io.pciex.nonfatal@PCIEXFN;
-prop error.io.pciex.nf-ecrccomp-d@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pci.ma@pciexbus/pciexdev/pciexfn { IS_LEAF };
-
-prop error.io.pciex.nf-ecrccomp-d@pciexbus/pciexdev/pciexfn (1)->
- ereport.io.service.unaffected@pciexbus/pciexdev/pciexfn { IS_LEAF },
- error.io.service.restored@pciexbus/pciexdev/pciexfn { IS_LEAF };
-
-prop error.io.pciex.ecrccomp-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.nonfatal@pciexbus/pciexdev/pciexfn { IS_LEAF || IS_BDG };
-
-prop error.io.pciex.ecrccomp-d@pciexbus/pciexdev/pciexfn (2)->
- ereport.io.pciex.tl.ecrc@pciexbus/pciexdev/pciexfn { IS_BDG },
- error.io.pciex.nr-d@pciexbus/pciexdev/pciexfn { IS_BDG };
-
-prop error.io.pciex.ecrccomp-d@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pciex.tl.ecrc@pciexbus/pciexdev/pciexfn { IS_SWU || IS_SWD };
+prop error.io.pciex.ecrccomp-fwd-d@PCIEXFN { IS_LF(PCIEXFN) } (0)->
+ ereport.io.pciex.tl.ecrc@PCIEXFN,
+ error.io.pciex.nr-d@PCIEXFN;
/*
* upstream poisoned request
*
- * - flt-poisreq-u is just on the pciex node which generated the fault (if the
- * fault was generated by a pciex node and not a child pci node).
- * - source-poisreq-u cascades down to at least one leaf device (pciex or pci),
- * whose bdf (if pciex) must match the source-id in the payload of the
+ * - flt-poisreq-u is on the pciex node which generated the fault
+ * - source-poisreq-u refers to at least one leaf or bridge device
+ * whose bdf (if leaf) must match the source-id in the payload of the
* ereport generated from the root complex.
- * - poisreq-u cascades up to the root complex and any switch ports on
+ * - poisreq-u propagates up to the root complex and any switch ports on
* route will raise a ptlp ereport, while any upstream devices generating
* or forwarding the poisoned packed will raise an mdpe ereport. The root
* complex should also report a ptlp.
@@ -1239,113 +1011,72 @@ prop error.io.pciex.ecrccomp-d@pciexbus/pciexdev/pciexfn (0)->
* at the intervening switches will narrow the fault down to a single suspect.
*/
-prop error.io.pciex.flt-f-poisreq-u@pciexbus/pciexdev/pciexfn (2)->
- error.io.pciex.source-f-poisreq-u@pciexbus/pciexdev/pciexfn,
- error.io.pciex.poisreq-u@pciexbus/pciexdev/pciexfn;
-
-prop error.io.pciex.source-f-poisreq-u@pciexbus/pciexdev/pciexfn (0)->
- error.io.pciex.f-lf-poisreq-u@pciexbus/pciexdev/pciexfn { IS_LEAF };
-
-prop error.io.pciex.f-lf-poisreq-u@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.service.lost@pciexbus/pciexdev/pciexfn,
- ereport.io.service.degraded@pciexbus/pciexdev/pciexfn;
-
-prop error.io.pciex.f-lf-poisreq-u@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pci.ma@pciexbus/pciexdev/pciexfn;
-
-prop error.io.pciex.source-f-poisreq-u@pciexbus[b]/pciexdev[d]/pciexfn[f] (0)->
- ereport.io.pciex.tl.ptlp@pciexrc<> {
- BDF_IS_LEAF && SOURCE_ID_MATCHES_BDF && BDF_IS_UNDER_RC },
- ereport.io.pciex.tl.ur@pciexrc<> {
- BDF_IS_LEAF && SOURCE_ID_MATCHES_BDF && BDF_IS_UNDER_RC };
-
-prop error.io.pciex.source-f-poisreq-u@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pci.ma@pciexbus/pciexdev/pciexfn { IS_BDG };
-
-prop error.io.pciex.source-f-poisreq-u@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pci.sec-sta@pciexbus/pciexdev/pciexfn,
- error.io.pci.ta-drw-d@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-
-prop error.io.pci.source-f-dpdata-w-u@pcibus[b]/pcidev[d]/pcifn[f] (0)->
- ereport.io.pciex.tl.ptlp@pciexrc<> { PCIBDF_IS_UNDER_RC },
- ereport.io.pciex.tl.ur@pciexrc<> { PCIBDF_IS_UNDER_RC };
-
-prop error.io.pci.source-f-dpdata-w-u@pcibus[b]/pcidev[d]/pcifn[f] (0)->
- ereport.io.pciex.bdg.sec-ude@pciexbus/pciexdev/pciexfn { IS_BDG &&
- BDF_IS_PCI_LEAF && SOURCE_ID_MATCHES_BDF && PCIBDF_IS_UNDER_DEV };
-
-prop error.io.pciex.flt-nf-poisreq-u@pciexbus/pciexdev/pciexfn (2)->
- error.io.pciex.source-nf-poisreq-u@pciexbus/pciexdev/pciexfn,
- error.io.pciex.poisreq-u@pciexbus/pciexdev/pciexfn;
-
-prop error.io.pciex.source-nf-poisreq-u@pciexbus/pciexdev/pciexfn (1)->
- ereport.io.service.unaffected@pciexbus/pciexdev/pciexfn { IS_LEAF },
- error.io.service.restored@pciexbus/pciexdev/pciexfn { IS_LEAF };
+prop error.io.pciex.flt-poisreq-u@PCIEXFN1 { (IS_LF(PCIEXFN) ||
+ IS_BG(PCIEXFN)) && is_under(PCIEXFN1, PCIEXFN) } (0)->
+ error.io.pciex.source-poisreq-u@PCIEXFN;
-prop error.io.pciex.source-nf-poisreq-u@pciexbus[b]/pciexdev[d]/pciexfn[f] (0)->
- ereport.io.pciex.tl.ptlp@pciexrc<> {
- BDF_IS_LEAF && SOURCE_ID_MATCHES_BDF && BDF_IS_UNDER_RC },
- ereport.io.pciex.tl.ur@pciexrc<> {
- BDF_IS_LEAF && SOURCE_ID_MATCHES_BDF && BDF_IS_UNDER_RC };
+prop error.io.pciex.source-poisreq-u@PCIEXFN1 { IS_LF(PCIEXFN1) &&
+ SOURCE_ID_MATCHES_BDF && is_under(pciexrc, PCIEXFN1) } (0)->
+ ereport.io.pciex.tl.ptlp@pciexrc,
+ ereport.io.pciex.tl.ur@pciexrc;
-prop error.io.pciex.source-nf-poisreq-u@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pci.ma@pciexbus/pciexdev/pciexfn { IS_LEAF };
+prop error.io.pciex.source-poisreq-u@PCIEXFN { IS_LF(PCIEXFN) } (0)->
+ ereport.io.pci.ma@PCIEXFN;
-prop error.io.pciex.source-nf-poisreq-u@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pci.ma@pciexbus/pciexdev/pciexfn { IS_BDG };
+prop error.io.pciex.source-poisreq-u@PCIEXFN { IS_BG(PCIEXFN) &&
+ is_under(pciexrc, PCIEXFN) } (0)->
+ ereport.io.pciex.tl.ptlp@pciexrc,
+ ereport.io.pciex.tl.ur@pciexrc;
-prop error.io.pciex.source-nf-poisreq-u@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pci.sec-sta@pciexbus/pciexdev/pciexfn,
- error.io.pci.ta-drw-d@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
+prop error.io.pciex.source-poisreq-u@PCIEXFN { IS_BG(PCIEXFN) } (0)->
+ ereport.io.pci.ma@PCIEXFN,
+ ereport.io.pci.sec-sta@PCIEXFN,
+ error.io.pci.ta-drw-d@PCIEXFN/PCIFN;
-prop error.io.pci.source-nf-dpdata-w-u@pcibus[b]/pcidev[d]/pcifn[f] (0)->
- ereport.io.pciex.tl.ptlp@pciexrc<> { PCIBDF_IS_UNDER_RC },
- ereport.io.pciex.tl.ur@pciexrc<> { PCIBDF_IS_UNDER_RC };
+prop error.io.pciex.flt-poisreq-u@PCIEXFN (1)->
+ error.io.pciex.poisreq-u@PCIEXFN;
-prop error.io.pci.source-nf-dpdata-w-u@pcibus[b]/pcidev[d]/pcifn[f] (0)->
- ereport.io.pciex.bdg.sec-ude@pciexbus/pciexdev/pciexfn { IS_BDG &&
- BDF_IS_PCI_LEAF && SOURCE_ID_MATCHES_BDF && PCIBDF_IS_UNDER_DEV };
-
-prop error.io.pciex.poisreq-u@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pci.ma@pciexbus/pciexdev/pciexfn { IS_BDG };
-
-prop error.io.pciex.poisreq-u@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pci.sec-sta@pciexbus/pciexdev/pciexfn,
- error.io.pci.ta-drw-d@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
+/*
+ * the remaining propagations are also used for poisoned requests propagating
+ * up due to a fault behind a pcie-pci bridge
+ */
+prop error.io.pciex.poisreq-u@PCIEXFN/PCIEXFN (1)->
+ error.io.pciex.poisreq-u@PCIEXFN;
-prop error.io.pciex.poisreq-u@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.poisreq-u@pciexbus/pciexdev/pciexfn;
+prop error.io.pciex.poisreq-u@PCIEXFN { IS_BG(PCIEXFN) } (1)->
+ ereport.io.pci.mdpe@PCIEXFN;
-prop error.io.pciex.poisreq-u@pciexbus/pciexdev/pciexfn (2)->
- ereport.io.pci.sec-dpe@pciexbus/pciexdev/pciexfn { IS_SWD },
- ereport.io.pciex.tl.ptlp@pciexbus/pciexdev/pciexfn { IS_SWD };
+prop error.io.pciex.poisreq-u@PCIEXFN { IS_LF(PCIEXFN) } (0)->
+ ereport.io.pci.mdpe@PCIEXFN;
-prop error.io.pciex.poisreq-u@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pci.sec-dpe@pciexbus/pciexdev/pciexfn { IS_SWU },
- ereport.io.pciex.tl.ptlp@pciexbus/pciexdev/pciexfn { IS_SWU };
+prop error.io.pciex.poisreq-u@PCIEXFN { IS_SD(PCIEXFN) } (2)->
+ ereport.io.pci.sec-dpe@PCIEXFN,
+ ereport.io.pciex.tl.ptlp@PCIEXFN;
-prop error.io.pciex.poisreq-u@pciexbus/pciexdev/pciexfn (1)->
- ereport.io.pci.mdpe@pciexbus/pciexdev/pciexfn { IS_BDG || IS_SWU };
+prop error.io.pciex.poisreq-u@PCIEXFN { IS_SD(PCIEXFN) } (0)->
+ ereport.io.pci.mdpe@PCIEXFN,
+ error.io.pciex.nonfatal@PCIEXFN;
-prop error.io.pciex.poisreq-u@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pci.mdpe@pciexbus/pciexdev/pciexfn { IS_SWD };
+prop error.io.pciex.poisreq-u@PCIEXFN { IS_SU(PCIEXFN) } (1)->
+ ereport.io.pci.mdpe@PCIEXFN;
-prop error.io.pciex.poisreq-u@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pci.mdpe@pciexbus/pciexdev/pciexfn { IS_LEAF };
+prop error.io.pciex.poisreq-u@PCIEXFN { IS_SU(PCIEXFN) } (0)->
+ ereport.io.pci.sec-dpe@PCIEXFN,
+ ereport.io.pciex.tl.ptlp@PCIEXFN,
+ error.io.pciex.nonfatal@PCIEXFN;
-prop error.io.pciex.poisreq-u@pciexrc/pciexbus/pciexdev/pciexfn (1)->
+prop error.io.pciex.poisreq-u@pciexrc/PCIEXFN (1)->
ereport.io.pci.sec-dpe@pciexrc;
/*
* upstream poisoned completion
*
- * - flt-poiscomp-u is just on the pciex node which generated the fault (if the
- * fault was generated by a pciex node and not a child pci node). There will
+ * - flt-poiscomp-u is on the pciex node which generated the fault. There will
* be a target-mdpe downstream from here.
- * - source-poiscomp-u cascades down to at least one leaf device (pciex or pci),
- * whose bdf (if pciex) must match the source-id in the payload of the
+ * - source-poiscomp-u refers to at least one leaf or bridge device
+ * whose bdf (if leaf) must match the source-id in the payload of the
* ereport generated from the root complex.
- * - poiscomp-u cascades up to the root complex and any switches on
+ * - poiscomp-u propagates up to the root complex and any switches on
* route will raise ptlp and sec-mdpe ereports. The root complex will also
* raise a sec-mdpe and ptlp.
*
@@ -1355,78 +1086,69 @@ prop error.io.pciex.poisreq-u@pciexrc/pciexbus/pciexdev/pciexfn (1)->
* originator of the completion. The ptlp/sec-mdpe ereports at the intervening
* switches will narrow the fault down to a single suspect.
*/
-prop error.io.pciex.flt-f-poiscomp-u@pciexbus/pciexdev/pciexfn (3)->
- error.io.pciex.source-f-poiscomp-u@pciexbus/pciexdev/pciexfn,
- error.io.pciex.poiscomp-u@pciexbus/pciexdev/pciexfn,
- error.io.pci.target-mdpe-d@pciexbus/pciexdev/pciexfn;
-
-prop error.io.pciex.source-f-poiscomp-u@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.service.lost@pciexbus/pciexdev/pciexfn { IS_LEAF },
- ereport.io.service.degraded@pciexbus/pciexdev/pciexfn { IS_LEAF };
-
-prop error.io.pciex.source-f-poiscomp-u@pciexbus[b]/pciexdev[d]/pciexfn[f] (0)->
- ereport.io.pciex.tl.ptlp@pciexrc<> {
- SOURCE_ID_MATCHES_BDF && BDF_IS_UNDER_RC };
+prop error.io.pciex.flt-poiscomp-u@PCIEXFN { IS_LF(PCIEXFN1) &&
+ is_under(PCIEXFN, PCIEXFN1) } (0)->
+ ereport.io.pci.target-mdpe@PCIEXFN1;
-prop error.io.pci.source-f-dpdata-r-u@pcibus[b]/pcidev[d]/pcifn[f] (0)->
- ereport.io.pciex.tl.ptlp@pciexrc<> { PCIBDF_IS_UNDER_RC };
+prop error.io.pciex.flt-poiscomp-u@PCIEXFN { IS_PCI_LF(PCIFN) &&
+ is_under(PCIEXFN, PCIFN) } (0)->
+ ereport.io.pci.target-mdpe@PCIFN;
-prop error.io.pci.source-f-dpdata-r-u@pcibus[b]/pcidev[d]/pcifn[f] (0)->
- ereport.io.pciex.bdg.sec-ude@pciexbus/pciexdev/pciexfn { IS_BDG &&
- BDF_IS_PCI_LEAF && SOURCE_ID_MATCHES_BDF && PCIBDF_IS_UNDER_DEV };
+prop error.io.pciex.flt-poiscomp-u@PCIEXFN1 { (IS_LF(PCIEXFN) ||
+ IS_BG(PCIEXFN)) && is_under(PCIEXFN1, PCIEXFN) } (0)->
+ error.io.pciex.source-poiscomp-u@PCIEXFN;
-prop error.io.pciex.flt-nf-poiscomp-u@pciexbus/pciexdev/pciexfn (3)->
- error.io.pciex.source-nf-poiscomp-u@pciexbus/pciexdev/pciexfn,
- error.io.pciex.poiscomp-u@pciexbus/pciexdev/pciexfn,
- error.io.pci.target-mdpe-d@pciexbus/pciexdev/pciexfn;
+prop error.io.pciex.source-poiscomp-u@PCIEXFN1 { IS_LF(PCIEXFN1) &&
+ SOURCE_ID_MATCHES_BDF && is_under(pciexrc, PCIEXFN1) } (0)->
+ ereport.io.pciex.tl.ptlp@pciexrc;
-prop error.io.pciex.source-nf-poiscomp-u@pciexbus/pciexdev/pciexfn (1)->
- ereport.io.service.unaffected@pciexbus/pciexdev/pciexfn { IS_LEAF },
- error.io.service.restored@pciexbus/pciexdev/pciexfn { IS_LEAF };
+prop error.io.pciex.source-poiscomp-u@PCIEXFN1 { IS_BG(PCIEXFN1) &&
+ is_under(pciexrc, PCIEXFN1) } (0)->
+ ereport.io.pciex.tl.ptlp@pciexrc;
-prop error.io.pciex.source-nf-poiscomp-u@pciexbus[b]/pciexdev[d]/pciexfn[f] (0)->
- ereport.io.pciex.tl.ptlp@pciexrc<> {
- SOURCE_ID_MATCHES_BDF && BDF_IS_UNDER_RC };
+prop error.io.pciex.flt-poiscomp-u@PCIEXFN (1)->
+ error.io.pciex.poiscomp-u@PCIEXFN;
-prop error.io.pci.source-nf-dpdata-r-u@pcibus[b]/pcidev[d]/pcifn[f] (0)->
- ereport.io.pciex.tl.ptlp@pciexrc<> { PCIBDF_IS_UNDER_RC };
-
-prop error.io.pci.source-nf-dpdata-r-u@pcibus[b]/pcidev[d]/pcifn[f] (0)->
- ereport.io.pciex.bdg.sec-ude@pciexbus/pciexdev/pciexfn { IS_BDG &&
- BDF_IS_PCI_LEAF && SOURCE_ID_MATCHES_BDF && PCIBDF_IS_UNDER_DEV };
+/*
+ * the remaining propagations are also used for poisoned completions propagating
+ * up due to a fault behind a pcie-pci bridge
+ */
+prop error.io.pciex.poiscomp-u@PCIEXFN/PCIEXFN (1)->
+ error.io.pciex.poiscomp-u@PCIEXFN;
-prop error.io.pciex.poiscomp-u@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.poiscomp-u@pciexbus/pciexdev/pciexfn;
+prop error.io.pciex.poiscomp-u@PCIEXFN { IS_SD(PCIEXFN) } (2)->
+ ereport.io.pci.sec-dpe@PCIEXFN,
+ ereport.io.pciex.tl.ptlp@PCIEXFN;
-prop error.io.pciex.poiscomp-u@pciexbus/pciexdev/pciexfn (2)->
- ereport.io.pci.sec-dpe@pciexbus/pciexdev/pciexfn { IS_SWD },
- ereport.io.pciex.tl.ptlp@pciexbus/pciexdev/pciexfn { IS_SWD };
+prop error.io.pciex.poiscomp-u@PCIEXFN { IS_SD(PCIEXFN) } (1)->
+ ereport.io.pci.sec-mdpe@PCIEXFN,
+ ereport.io.pci.mdpe@PCIEXFN;
-prop error.io.pciex.poiscomp-u@pciexbus/pciexdev/pciexfn (1)->
- ereport.io.pci.sec-mdpe@pciexbus/pciexdev/pciexfn { IS_SWD },
- ereport.io.pci.mdpe@pciexbus/pciexdev/pciexfn { IS_SWD };
+prop error.io.pciex.poiscomp-u@PCIEXFN { IS_SD(PCIEXFN) } (0)->
+ error.io.pciex.nonfatal@PCIEXFN;
-prop error.io.pciex.poiscomp-u@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pci.mdpe@pciexbus/pciexdev/pciexfn { IS_SWU },
- ereport.io.pci.sec-mdpe@pciexbus/pciexdev/pciexfn { IS_SWU },
- ereport.io.pci.sec-dpe@pciexbus/pciexdev/pciexfn { IS_SWU },
- ereport.io.pciex.tl.ptlp@pciexbus/pciexdev/pciexfn { IS_SWU };
+prop error.io.pciex.poiscomp-u@PCIEXFN { IS_SU(PCIEXFN) } (0)->
+ ereport.io.pci.mdpe@PCIEXFN,
+ ereport.io.pci.sec-mdpe@PCIEXFN,
+ ereport.io.pci.sec-dpe@PCIEXFN,
+ ereport.io.pciex.tl.ptlp@PCIEXFN,
+ error.io.pciex.nonfatal@PCIEXFN;
-prop error.io.pciex.poiscomp-u@pciexrc/pciexbus/pciexdev/pciexfn (1)->
+prop error.io.pciex.poiscomp-u@pciexrc/PCIEXFN (1)->
ereport.io.pci.sec-dpe@pciexrc;
-prop error.io.pciex.poiscomp-u@pciexrc/pciexbus/pciexdev/pciexfn (0)->
+prop error.io.pciex.poiscomp-u@pciexrc/PCIEXFN (0)->
ereport.io.pci.sec-mdpe@pciexrc;
/*
* upstream request with ecrc error.
*
- * - flt-ecrcreq-u is just on the pciex node which generated the fault.
+ * - flt-ecrcreq-u is on the pciex node which generated the fault.
* - source-ecrcreq-u cascades down to at least one leaf device (pciex or pci),
* whose bdf (if pciex) must match the source-id in the payload of the
* ereport generated from the root complex.
- * - ecrcreq-u cascades up to the root complex which must report it with an ecrc
- * ereport and any switches on route can optionally raise an ecrc ereport.
+ * - ecrcreq-u propagates up to the root complex which must report it with an
+ * ecrc ereport and any switches on route can optionally raise an ecrc ereport
*
* Additionally, as the root complex will just throw away the packet, we may
* eventually get a cto - so use an nr-d at the pciex leaf or bridge to get
@@ -1437,65 +1159,40 @@ prop error.io.pciex.poiscomp-u@pciexrc/pciexbus/pciexdev/pciexfn (0)->
* can be done from the cto ereport (for a hardened leaf driver) or for a
* non-hardened leaf using the source-id payload of the ecrc.
*/
-prop error.io.pciex.flt-f-ecrcreq-u@pciexbus/pciexdev/pciexfn (2)->
- error.io.pciex.source-f-ecrcreq-u@pciexbus/pciexdev/pciexfn,
- error.io.pciex.ecrcreq-u@pciexbus/pciexdev/pciexfn;
-
-prop error.io.pciex.source-f-ecrcreq-u@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.service.lost@pciexbus/pciexdev/pciexfn { IS_LEAF },
- ereport.io.service.degraded@pciexbus/pciexdev/pciexfn { IS_LEAF };
-
-prop error.io.pciex.source-f-ecrcreq-u@pciexbus/pciexdev/pciexfn (0)->
- error.io.pciex.nr-d@pciexbus/pciexdev/pciexfn { IS_LEAF || IS_BDG };
-
-prop error.io.pciex.source-f-ecrcreq-u@pciexbus[b]/pciexdev[d]/pciexfn[f] (1)->
- ereport.io.pciex.tl.ecrc@pciexrc<> {
- BDF_IS_LEAF && SOURCE_ID_MATCHES_BDF && BDF_IS_UNDER_RC };
-
-prop error.io.pciex.source-f-ecrcreq-u@pcibus/pcidev/pcifn (0)->
- ereport.io.service.lost@pcibus/pcidev/pcifn { IS_PCI_LEAF },
- ereport.io.service.degraded@pcibus/pcidev/pcifn { IS_PCI_LEAF };
+prop error.io.pciex.flt-ecrcreq-u@PCIEXFN1 { (IS_LF(PCIEXFN) ||
+ IS_BG(PCIEXFN)) && is_under(PCIEXFN1, PCIEXFN) } (0)->
+ error.io.pciex.source-ecrcreq-u@PCIEXFN;
-prop error.io.pciex.source-f-ecrcreq-u@pcibus[b]/pcidev[d]/pcifn[f] (1)->
- ereport.io.pciex.tl.ecrc@pciexrc<> { PCIBDF_IS_UNDER_RC };
+prop error.io.pciex.source-ecrcreq-u@PCIEXFN (0)->
+ error.io.pciex.nr-d@PCIEXFN;
-prop error.io.pciex.flt-nf-ecrcreq-u@pciexbus/pciexdev/pciexfn (2)->
- error.io.pciex.source-nf-ecrcreq-u@pciexbus/pciexdev/pciexfn,
- error.io.pciex.ecrcreq-u@pciexbus/pciexdev/pciexfn;
+prop error.io.pciex.source-ecrcreq-u@PCIEXFN1 { IS_LF(PCIEXFN1) &&
+ SOURCE_ID_MATCHES_BDF && is_under(pciexrc, PCIEXFN1) } (0)->
+ ereport.io.pciex.tl.ecrc@pciexrc;
-prop error.io.pciex.source-nf-ecrcreq-u@pciexbus/pciexdev/pciexfn (0)->
- error.io.pciex.nr-d@pciexbus/pciexdev/pciexfn { IS_LEAF || IS_BDG };
+prop error.io.pciex.source-ecrcreq-u@PCIEXFN { IS_BG(PCIEXFN) &&
+ is_under(pciexrc, PCIEXFN) } (0)->
+ ereport.io.pciex.tl.ecrc@pciexrc;
-prop error.io.pciex.source-nf-ecrcreq-u@pciexbus/pciexdev/pciexfn (1)->
- ereport.io.service.unaffected@pciexbus/pciexdev/pciexfn { IS_LEAF },
- error.io.service.restored@pciexbus/pciexdev/pciexfn { IS_LEAF };
+prop error.io.pciex.flt-ecrcreq-u@PCIEXFN (1)->
+ error.io.pciex.ecrcreq-u@PCIEXFN;
-prop error.io.pciex.source-nf-ecrcreq-u@pciexbus[b]/pciexdev[d]/pciexfn[f] (1)->
- ereport.io.pciex.tl.ecrc@pciexrc<> {
- BDF_IS_LEAF && SOURCE_ID_MATCHES_BDF && BDF_IS_UNDER_RC };
+prop error.io.pciex.ecrcreq-u@PCIEXFN/PCIEXFN (1)->
+ error.io.pciex.ecrcreq-u@PCIEXFN;
-prop error.io.pciex.source-nf-ecrcreq-u@pcibus/pcidev/pcifn (1)->
- ereport.io.service.unaffected@pcibus/pcidev/pcifn { IS_PCI_LEAF },
- error.io.service.restored@pcibus/pcidev/pcifn { IS_PCI_LEAF };
-
-prop error.io.pciex.source-nf-ecrcreq-u@pcibus[b]/pcidev[d]/pcifn[f] (1)->
- ereport.io.pciex.tl.ecrc@pciexrc<> { PCIBDF_IS_UNDER_RC };
-
-prop error.io.pciex.ecrcreq-u@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.ecrcreq-u@pciexbus/pciexdev/pciexfn;
-
-prop error.io.pciex.ecrcreq-u@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pciex.tl.ecrc@pciexbus/pciexdev/pciexfn { IS_SWD || IS_SWU };
+prop error.io.pciex.ecrcreq-u@PCIEXFN { IS_SD(PCIEXFN)||IS_SU(PCIEXFN) } (0)->
+ ereport.io.pciex.tl.ecrc@PCIEXFN,
+ error.io.pciex.nonfatal@PCIEXFN;
/*
* upstream completion with ecrc error.
*
- * - flt-ecrccomp-u is just on the pciex node which generated the fault.
+ * - flt-ecrccomp-u is on the pciex node which generated the fault.
* - source-ecrccomp-u cascades down to at least one leaf device (pciex or pci),
* whose bdf (if pciex) must match the source-id in the payload of the
* ereport generated from the root complex.
- * - ecrccomp-u cascades up to the root complex, which should report it with an
- * ecrc ereport and any switches on route can optionally raise an ecrc
+ * - ecrccomp-u propagates up to the root complex, which should report it with
+ * an ecrc ereport and any switches on route can optionally raise an ecrc
* ereport.
*
* Additionally, as the root complex will just throw away the packet, we'll
@@ -1507,55 +1204,30 @@ prop error.io.pciex.ecrcreq-u@pciexbus/pciexdev/pciexfn (0)->
* using either the source-id payload of the ecrc or the target-ma ereport if
* available.
*/
-prop error.io.pciex.flt-f-ecrccomp-u@pciexbus/pciexdev/pciexfn (2)->
- error.io.pciex.source-f-ecrccomp-u@pciexbus/pciexdev/pciexfn,
- error.io.pciex.ecrccomp-u@pciexbus/pciexdev/pciexfn;
-
-prop error.io.pciex.source-f-ecrccomp-u@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.service.lost@pciexbus/pciexdev/pciexfn { IS_LEAF },
- ereport.io.service.degraded@pciexbus/pciexdev/pciexfn { IS_LEAF };
-
-prop error.io.pciex.source-f-ecrccomp-u@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.flt-nr-u@pciexbus/pciexdev/pciexfn { IS_LEAF || IS_BDG };
-
-prop error.io.pciex.source-f-ecrccomp-u@pciexbus[b]/pciexdev[d]/pciexfn[f] (1)->
- ereport.io.pciex.tl.ecrc@pciexrc<> {
- SOURCE_ID_MATCHES_BDF && BDF_IS_UNDER_RC };
-
-prop error.io.pciex.source-f-ecrccomp-u@pcibus/pcidev/pcifn (0)->
- ereport.io.service.lost@pcibus/pcidev/pcifn { IS_PCI_LEAF },
- ereport.io.service.degraded@pcibus/pcidev/pcifn { IS_PCI_LEAF };
+prop error.io.pciex.flt-ecrccomp-u@PCIEXFN1 { (IS_LF(PCIEXFN) ||
+ IS_BG(PCIEXFN)) && is_under(PCIEXFN1, PCIEXFN) } (0)->
+ error.io.pciex.source-ecrccomp-u@PCIEXFN;
-prop error.io.pciex.source-f-ecrccomp-u@pcibus[b]/pcidev[d]/pcifn[f] (1)->
- ereport.io.pciex.tl.ecrc@pciexrc<> { PCIBDF_IS_UNDER_RC };
+prop error.io.pciex.source-ecrccomp-u@PCIEXFN (0)->
+ error.io.pciex.flt-nr-u@PCIEXFN;
-prop error.io.pciex.flt-nf-ecrccomp-u@pciexbus/pciexdev/pciexfn (2)->
- error.io.pciex.source-nf-ecrccomp-u@pciexbus/pciexdev/pciexfn,
- error.io.pciex.ecrccomp-u@pciexbus/pciexdev/pciexfn;
+prop error.io.pciex.source-ecrccomp-u@PCIEXFN1 { IS_LF(PCIEXFN1) &&
+ SOURCE_ID_MATCHES_BDF && is_under(pciexrc, PCIEXFN1) } (0)->
+ ereport.io.pciex.tl.ecrc@pciexrc;
-prop error.io.pciex.source-nf-ecrccomp-u@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.flt-nr-u@pciexbus/pciexdev/pciexfn { IS_LEAF || IS_BDG };
+prop error.io.pciex.source-ecrccomp-u@PCIEXFN { IS_BG(PCIEXFN) &&
+ is_under(pciexrc, PCIEXFN) } (0)->
+ ereport.io.pciex.tl.ecrc@pciexrc;
-prop error.io.pciex.source-nf-ecrccomp-u@pciexbus/pciexdev/pciexfn (1)->
- ereport.io.service.unaffected@pciexbus/pciexdev/pciexfn { IS_LEAF },
- error.io.service.restored@pciexbus/pciexdev/pciexfn { IS_LEAF };
+prop error.io.pciex.flt-ecrccomp-u@PCIEXFN (1)->
+ error.io.pciex.ecrccomp-u@PCIEXFN;
-prop error.io.pciex.source-nf-ecrccomp-u@pciexbus[b]/pciexdev[d]/pciexfn[f] (1)->
- ereport.io.pciex.tl.ecrc@pciexrc<> {
- SOURCE_ID_MATCHES_BDF && BDF_IS_UNDER_RC };
+prop error.io.pciex.ecrccomp-u@PCIEXFN/PCIEXFN (1)->
+ error.io.pciex.ecrccomp-u@PCIEXFN;
-prop error.io.pciex.source-nf-ecrccomp-u@pcibus/pcidev/pcifn (1)->
- ereport.io.service.unaffected@pcibus/pcidev/pcifn { IS_PCI_LEAF },
- error.io.service.restored@pcibus/pcidev/pcifn { IS_PCI_LEAF };
-
-prop error.io.pciex.source-nf-ecrccomp-u@pcibus[b]/pcidev[d]/pcifn[f] (1)->
- ereport.io.pciex.tl.ecrc@pciexrc<> { PCIBDF_IS_UNDER_RC };
-
-prop error.io.pciex.ecrccomp-u@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.ecrccomp-u@pciexbus/pciexdev/pciexfn;
-
-prop error.io.pciex.ecrccomp-u@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pciex.tl.ecrc@pciexbus/pciexdev/pciexfn { IS_SWD || IS_SWU };
+prop error.io.pciex.ecrccomp-u@PCIEXFN { IS_SD(PCIEXFN)||IS_SU(PCIEXFN) } (0)->
+ ereport.io.pciex.tl.ecrc@PCIEXFN,
+ error.io.pciex.nonfatal@PCIEXFN;
/*
* no response to downstream requester
@@ -1568,41 +1240,47 @@ prop error.io.pciex.ecrccomp-u@pciexbus/pciexdev/pciexfn (0)->
* identifying the leaf device, we won't actually be informed that the error
* was a cto.
*/
-prop error.io.pciex.nr-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.nr-d@pciexbus/pciexdev/pciexfn/pciexbus<>/pciexdev<>/pciexfn<>;
+prop error.io.pciex.nr-d@PCIEXFN (1)->
+ error.io.pciex.nr-d@PCIEXFN/PCIEXFNHZ;
-prop error.io.pciex.nr-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.nonfatal@pciexbus/pciexdev/pciexfn { IS_LEAF || IS_BDG };
+prop error.io.pciex.nr-d@PCIEXFN { IS_BG(PCIEXFN) } (2)->
+ error.io.pciex.nonfatal@PCIEXFN,
+ ereport.io.pciex.tl.cto@PCIEXFN;
-prop error.io.pciex.nr-d@pciexbus/pciexdev/pciexfn (1)->
- ereport.io.pciex.tl.cto@pciexbus/pciexdev/pciexfn { IS_BDG };
+prop error.io.pciex.nr-d@PCIEXFN { IS_BG(PCIEXFN) } (0)->
+ ereport.io.pci.ma@PCIEXFN,
+ ereport.io.pci.sec-sta@PCIEXFN,
+ error.io.pci.nr-drw-d@PCIEXFN/PCIFN,
+ error.io.pci.ta-drw-d@PCIEXFN/PCIFN;
-prop error.io.pciex.nr-d@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pciex.tl.cto@pciexbus/pciexdev/pciexfn { IS_LEAF };
+prop error.io.pciex.nr-d@PCIEXFN { IS_LF(PCIEXFN) } (1)->
+ error.io.pciex.nonfatal@PCIEXFN;
-prop error.io.pciex.nr-d@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pci.ma@pciexbus/pciexdev/pciexfn { IS_LEAF || IS_BDG };
+prop error.io.pciex.nr-d@PCIEXFN { IS_LF(PCIEXFN) } (0)->
+ ereport.io.pci.ma@PCIEXFN,
+ ereport.io.pciex.tl.cto@PCIEXFN;
/*
* no response to upstream requester
*
- * - flt-nr-u is just on the pciex node which generated the fault.
- * - nr-u will effectively cascade upstream to the root complex which will
+ * - flt-nr-u will effectively cascade upstream to the root complex which will
* report it as a cto.
*
* We have to use target-ma to informs us which device failed to respond.
*/
-prop error.io.pciex.flt-nr-u@pciexbus/pciexdev/pciexfn (2)->
- error.io.pciex.nr-u@pciexbus/pciexdev/pciexfn,
- error.io.pci.target-ma-d@pciexbus/pciexdev/pciexfn;
+prop error.io.pciex.flt-nr-u@PCIEXFN (1)->
+ error.io.pci.target-ma-d@PCIEXFN;
+
+prop error.io.pciex.flt-nr-u@PCIEXFN (1)->
+ error.io.pciex.nr-u@PCIEXFN;
-prop error.io.pciex.nr-u@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.nr-u@pciexbus/pciexdev/pciexfn;
+prop error.io.pciex.nr-u@PCIEXFN/PCIEXFN (1)->
+ error.io.pciex.nr-u@PCIEXFN;
-prop error.io.pciex.nr-u@pciexrc/pciexbus/pciexdev/pciexfn (1)->
+prop error.io.pciex.nr-u@pciexrc/PCIEXFN (1)->
ereport.io.pciex.tl.cto@pciexrc;
-prop error.io.pciex.nr-u@pciexrc/pciexbus/pciexdev/pciexfn (0)->
+prop error.io.pciex.nr-u@pciexrc/PCIEXFN (0)->
ereport.io.pci.sec-ma@pciexrc;
/*
@@ -1615,43 +1293,44 @@ prop error.io.pciex.nr-u@pciexrc/pciexbus/pciexdev/pciexfn (0)->
* Note that sw-mtlp-d is to handle the case where the switch is actually
* the target of the packet (config request etc).
*/
-prop error.io.pciex.mtlp-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.sw-mtlp-d@pciexbus/pciexdev/pciexfn,
- error.io.pciex.mtlp-d@pciexbus/pciexdev/pciexfn/pciexbus<>/pciexdev<>/pciexfn<>;
+prop error.io.pciex.mtlp-d@PCIEXFN { IS_SD(PCIEXFN) || IS_SU(PCIEXFN) } (1)->
+ error.io.pciex.sw-mtlp-d@PCIEXFN,
+ error.io.pciex.mtlp-d@PCIEXFN/PCIEXFNHZ;
-prop error.io.pciex.mtlp-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.fatal@pciexbus/pciexdev/pciexfn { IS_LEAF || IS_BDG };
+prop error.io.pciex.sw-mtlp-d@PCIEXFN { IS_SU(PCIEXFN) } (2)->
+ error.io.pciex.fatal@PCIEXFN,
+ ereport.io.pciex.tl.mtlp@PCIEXFN;
-prop error.io.pciex.mtlp-d@pciexbus/pciexdev/pciexfn (1)->
- ereport.io.pciex.tl.mtlp@pciexbus/pciexdev/pciexfn { IS_BDG };
+prop error.io.pciex.mtlp-d@PCIEXFN { IS_BG(PCIEXFN) } (2)->
+ error.io.pciex.fatal@PCIEXFN,
+ ereport.io.pciex.tl.mtlp@PCIEXFN;
-prop error.io.pciex.mtlp-d@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pciex.tl.mtlp@pciexbus/pciexdev/pciexfn { IS_LEAF };
+prop error.io.pciex.mtlp-d@PCIEXFN { IS_LF(PCIEXFN) } (1)->
+ error.io.pciex.fatal@PCIEXFN;
-prop error.io.pciex.sw-mtlp-d@pciexbus/pciexdev/pciexfn (2)->
- error.io.pciex.fatal@pciexbus/pciexdev/pciexfn { IS_SWU },
- ereport.io.pciex.tl.mtlp@pciexbus/pciexdev/pciexfn { IS_SWU };
+prop error.io.pciex.mtlp-d@PCIEXFN { IS_LF(PCIEXFN) } (0)->
+ ereport.io.pciex.tl.mtlp@PCIEXFN;
/*
* upstream malformed tlp
*
* This will cascade upstream to the receiver which will report it as an mtlp.
*/
-prop error.io.pciex.mtlp-u@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.source-mtlp-u@pciexbus/pciexdev/pciexfn;
+prop error.io.pciex.flt-mtlp-u@PCIEXFN (1)->
+ error.io.pciex.mtlp-u@PCIEXFN;
-prop error.io.pciex.source-mtlp-u@pciexbus[b]/pciexdev[d]/pciexfn[f] (1)->
- ereport.io.pciex.tl.mtlp@pciexrc<> { BDF_IS_LEAF && BDF_IS_UNDER_RC };
+prop error.io.pciex.mtlp-u@PCIEXFN/PCIEXFN (1)->
+ error.io.pciex.mtlp-u@PCIEXFN;
-prop error.io.pciex.source-mtlp-u@pcibus[b]/pcidev[d]/pcifn[f] (1)->
- ereport.io.pciex.tl.mtlp@pciexrc<> { PCIBDF_IS_UNDER_RC };
+prop error.io.pciex.mtlp-u@pciexrc/PCIEXFN (1)->
+ ereport.io.pciex.tl.mtlp@pciexrc;
/*
* downstream completer aborts
*
* This could be the fault of the root complex or a switch reporting an internal
* error, or of the leaf device sending an invalid request (the latter is
- * handled by the badreq-u case below).
+ * handled by the flt-badreq-u case below).
*
* This is reported by the completer or by an intervening downstream switch
* port. The completer abort response propagates down to the initiator which
@@ -1661,75 +1340,35 @@ prop error.io.pciex.source-mtlp-u@pcibus[b]/pcidev[d]/pcifn[f] (1)->
* or downstream switch port. The originator of the request can be recognized
* by the rta for a hardened driver or by using the source-id payload of the
* ca ereport for a non-hardened driver.
- *
- * Note that there is no ur-d (we assume that a ur reported by the root complex
- * is always due to a badreq-u - see below).
*/
-prop error.io.pciex.flt-ca-d@pciexrc/pciexbus/pciexdev/pciexfn (0)->
- error.io.pciex.ca-d@pciexrc/pciexbus/pciexdev/pciexfn,
+prop error.io.pciex.ca-d@pciexrc/PCIEXFN (0)->
ereport.io.pciex.tl.ca@pciexrc;
-prop error.io.pciex.ca-d@pciexrc/pciexbus/pciexdev/pciexfn (1)->
+prop error.io.pciex.ca-d@pciexrc/PCIEXFN (1)->
ereport.io.pci.sec-sta@pciexrc;
-prop error.io.pciex.flt-ca-d@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pci.sec-sta@pciexbus/pciexdev/pciexfn;
-
-prop error.io.pciex.flt-ca-d@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn (2)->
- ereport.io.pciex.tl.ca@pciexbus/pciexdev/pciexfn,
- error.io.pciex.nonfatal@pciexbus/pciexdev/pciexfn;
-
-prop error.io.pciex.flt-ca-d@pciexbus/pciexdev/pciexfn (0)->
- error.io.pciex.ca-d@pciexbus/pciexdev/pciexfn;
+prop error.io.pciex.ca-d@PCIEXFN/PCIEXFN (0)->
+ ereport.io.pci.sec-sta@PCIEXFN;
-prop error.io.pciex.ca-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.ca-d@pciexbus/pciexdev/pciexfn/pciexbus<>/pciexdev<>/pciexfn<>;
+prop error.io.pciex.ca-d@PCIEXFN/PCIEXFN (2)->
+ ereport.io.pciex.tl.ca@PCIEXFN,
+ error.io.pciex.nonfatal@PCIEXFN;
-prop error.io.pciex.ca-d@pciexbus/pciexdev/pciexfn (1)->
- ereport.io.pci.rta@pciexbus/pciexdev/pciexfn { IS_BDG };
+prop error.io.pciex.ca-d@PCIEXFN (0)->
+ error.io.pciex.ca-fwd-d@PCIEXFN;
-prop error.io.pciex.ca-d@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pci.rta@pciexbus/pciexdev/pciexfn { IS_LEAF };
+prop error.io.pciex.ca-fwd-d@PCIEXFN (1)->
+ error.io.pciex.ca-fwd-d@PCIEXFN/PCIEXFNHZ;
-/*
- * upstream unexpected requests
- *
- * This could be the fault of a device behind a PCI Express/PCI(X) bridge not
- * responding, or of the root complex sending an invalid request (the latter
- * case is handled by badreq-d below).
- *
- * This is reported as a ur by the completer, which for non-posted reqs sets the
- * appropriate error bit in the completion message to the initiator which will
- * set the legacy pci bit sec-ma.
- *
- * The fault can always be recognized from the sec-ma bit at the root complex.
- *
- * If the fault was with the root complex, then we don't care which leaf is
- * involved.
- *
- * If the fault originated from a pci device behind a PCI Express/PCI(X) bridge
- * we can identify the leaf device from the target-ma ereport if available or
- * from the source-id payload of the sec-rma ereport from the bridge.
- */
-prop error.io.pciex.flt-ur-u@pciexbus/pciexdev/pciexfn (0)->
- error.io.pciex.nonfatal@pciexbus/pciexdev/pciexfn
- { IS_SWU || IS_LEAF || IS_BDG };
+prop error.io.pciex.ca-fwd-d@PCIEXFN { IS_BG(PCIEXFN) } (1)->
+ ereport.io.pci.rta@PCIEXFN;
-prop error.io.pciex.flt-ur-u@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pciex.tl.ur@pciexbus/pciexdev/pciexfn { IS_LEAF || IS_BDG };
+prop error.io.pciex.ca-fwd-d@PCIEXFN { IS_BG(PCIEXFN) } (0)->
+ ereport.io.pci.sec-sta@PCIEXFN,
+ error.io.pci.ta-drw-d@PCIEXFN/PCIFN;
-prop error.io.pciex.flt-ur-u@pciexbus/pciexdev/pciexfn (1)->
- ereport.io.pciex.tl.ur@pciexbus/pciexdev/pciexfn { IS_SWU };
-
-prop error.io.pciex.flt-ur-u@pciexbus/pciexdev/pciexfn (2)->
- error.io.pci.target-ma-d@pciexbus/pciexdev/pciexfn,
- error.io.pciex.ur-u@pciexbus/pciexdev/pciexfn;
-
-prop error.io.pciex.ur-u@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.ur-u@pciexbus/pciexdev/pciexfn;
-
-prop error.io.pciex.ur-u@pciexrc/pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pci.sec-ma@pciexrc;
+prop error.io.pciex.ca-fwd-d@PCIEXFN { IS_LF(PCIEXFN) } (0)->
+ ereport.io.pci.rta@PCIEXFN;
/*
* upstream completer aborts
@@ -1739,7 +1378,7 @@ prop error.io.pciex.ur-u@pciexrc/pciexbus/pciexdev/pciexfn (0)->
* request (the latter case is handled by badreq-d below).
*
* This is reported as a ca by the completer. The completer (for non-posted
- * requested) sends the appropriate error bits in the completion message to
+ * requests) sends the appropriate error bits in the completion message to
* the initiator which will set the legacy pci bit sec-rta.
*
* The fault can always be recognized from the sec-rta bit at the root complex.
@@ -1750,39 +1389,25 @@ prop error.io.pciex.ur-u@pciexrc/pciexbus/pciexdev/pciexfn (0)->
* If the fault was with a PCI Express leaf with a non-hardened driver, then we
* can still identify the leaf device from the source-id payload of the nonfatal
* message ereport from the root complex or from the target-rta ereport.
- *
- * If the fault originated from a PCI(X) device behind a PCI Express/PCI(X)
- * bridge, and it's driver is hardened, we can identify the device from the PCI
- * sta ereport or from the source-id payload of the sec-rta ereport from the
- * bridge.
- *
- * If the fault originated from a PCI(X) device behind a PCI Express/PCI(X)
- * bridge, and its driver is not hardened we can only identify the leaf device
- * from the target-rta ereport if available or from the source-id payload of
- * the sec-rta ereport from the bridge.
*/
-prop error.io.pciex.flt-ca-u@pciexbus/pciexdev/pciexfn (0)->
- error.io.pciex.nonfatal@pciexbus/pciexdev/pciexfn
- { IS_SWU || IS_LEAF || IS_BDG };
-
-prop error.io.pciex.flt-ca-u@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pci.sta@pciexbus/pciexdev/pciexfn { IS_LEAF },
- ereport.io.pciex.tl.ca@pciexbus/pciexdev/pciexfn { IS_LEAF };
+prop error.io.pciex.flt-ca-u@PCIEXFN { !IS_LF(PCIEXFN) } (1)->
+ ereport.io.pciex.tl.ca@PCIEXFN;
-prop error.io.pciex.flt-ca-u@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pci.sta@pciexbus/pciexdev/pciexfn { IS_SWU || IS_BDG };
+prop error.io.pciex.flt-ca-u@PCIEXFN { IS_LF(PCIEXFN) } (0)->
+ ereport.io.pciex.tl.ca@PCIEXFN;
-prop error.io.pciex.flt-ca-u@pciexbus/pciexdev/pciexfn (1)->
- ereport.io.pciex.tl.ca@pciexbus/pciexdev/pciexfn { IS_SWU || IS_BDG };
+prop error.io.pciex.flt-ca-u@PCIEXFN (0)->
+ error.io.pciex.nonfatal@PCIEXFN,
+ ereport.io.pci.sta@PCIEXFN;
-prop error.io.pciex.flt-ca-u@pciexbus/pciexdev/pciexfn (2)->
- error.io.pci.target-rta-d@pciexbus/pciexdev/pciexfn,
- error.io.pciex.ca-u@pciexbus/pciexdev/pciexfn;
+prop error.io.pciex.flt-ca-u@PCIEXFN (2)->
+ error.io.pci.target-rta-d@PCIEXFN,
+ error.io.pciex.ca-u@PCIEXFN;
-prop error.io.pciex.ca-u@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.ca-u@pciexbus/pciexdev/pciexfn;
+prop error.io.pciex.ca-u@PCIEXFN/PCIEXFN (1)->
+ error.io.pciex.ca-u@PCIEXFN;
-prop error.io.pciex.ca-u@pciexrc/pciexbus/pciexdev/pciexfn (0)->
+prop error.io.pciex.ca-u@pciexrc/PCIEXFN (0)->
ereport.io.pci.sec-rta@pciexrc;
/*
@@ -1796,79 +1421,41 @@ prop error.io.pciex.ca-u@pciexrc/pciexbus/pciexdev/pciexfn (0)->
* then sends the appropriate error bits in the completion message to the
* initiator which will set the legacy pci bits ma or rta.
*
- * For badreq-u, the ca/ur ereports contain a source-id payload that identifies
- * the initiator.
- * - flt-badreq-u represents the initiator that caused the fault. This may
- * be a child pci device in which case flt-badreq-u is generated in pci.esc
- * - badreq-u propagates up to the root complex.
+ * For flt-badreq-u, the ca/ur ereports contain a source-id payload that
+ * identifies the initiator.
*
* The fault can always be recognized by the ca/ur ereport from the root
* complex or downstream switch port. The originator of the request can be
* recognized by the rta/ma for a hardened driver or by using the source-id
* payload of the ca/ur ereport for a non-hardened driver.
- *
- * Note that handling of badreq-u where source and detector are both pciexfn
- * has to be handled specially to avoid path name matching.
*/
-prop error.io.pciex.flt-badreq-u@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.badreq-u@pciexbus/pciexdev/pciexfn;
+prop error.io.pciex.flt-badreq-u@PCIEXFN (0)->
+ ereport.io.pci.ma@PCIEXFN,
+ ereport.io.pci.rta@PCIEXFN;
+
+prop error.io.pciex.flt-badreq-u@PCIEXFN1 {
+ SOURCE_ID_MATCHES_BDF && is_under(pciexrc, PCIEXFN1) } (0)->
+ ereport.io.pciex.tl.ur@pciexrc,
+ ereport.io.pciex.tl.ca@pciexrc;
+
+prop error.io.pciex.flt-badreq-u@PCIEXFN (1)->
+ error.io.pciex.badreq-u@PCIEXFN;
-prop error.io.pciex.badreq-u@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.badreq-u@pciexbus/pciexdev/pciexfn;
+prop error.io.pciex.badreq-u@PCIEXFN/PCIEXFN (1)->
+ error.io.pciex.badreq-u@PCIEXFN;
-prop error.io.pciex.badreq-u@pciexrc/pciexbus/pciexdev/pciexfn (0)->
+prop error.io.pciex.badreq-u@pciexrc/PCIEXFN (0)->
ereport.io.pci.sec-sta@pciexrc;
-prop error.io.pciex.flt-badreq-u@pciexbus[b]/pciexdev[d]/pciexfn[f] (0)->
- ereport.io.pciex.tl.ur@pciexrc<> {
- BDF_IS_LEAF && SOURCE_ID_MATCHES_BDF && BDF_IS_UNDER_RC},
- ereport.io.pciex.tl.ca@pciexrc<> {
- BDF_IS_LEAF && SOURCE_ID_MATCHES_BDF && BDF_IS_UNDER_RC};
-
-prop error.io.pci.badreq-pw-u@pcibus[b]/pcidev[d]/pcifn[f] (0)->
- ereport.io.pciex.tl.ur@pciexrc<> { PCIBDF_IS_UNDER_RC },
- ereport.io.pciex.tl.ca@pciexrc<> { PCIBDF_IS_UNDER_RC };
-
-prop error.io.pci.badreq-drw-u@pcibus[b]/pcidev[d]/pcifn[f] (0)->
- ereport.io.pciex.tl.ur@pciexrc<> { PCIBDF_IS_UNDER_RC },
- ereport.io.pciex.tl.ca@pciexrc<> { PCIBDF_IS_UNDER_RC };
-
-prop error.io.pciex.badreq-u@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pci.sec-sta@pciexbus/pciexdev/pciexfn { IS_SWD };
-
-prop error.io.pciex.badreq-u@pciexbus/pciexdev/pciexfn (0)->
- error.io.pciex.badreq-u@pciexbus/pciexdev { IS_LEAF };
-
-prop error.io.pciex.badreq-u@pciexbus/pciexdev/pciexfn (0)->
- error.io.pciex.nonfatal@pciexbus/pciexdev/pciexfn;
-
-prop error.io.pciex.badreq-u@pciexbus[b]/pciexdev[d] (0)->
- ereport.io.pciex.tl.ur@pciexfn {
- (confprop(asru(pciexfn), TOPO_PCI_EXCAP) == "pciexswd") &&
- (!payloadprop_defined("source-valid") ||
- payloadprop("source-valid") == 0 ||
- (payloadprop("source-id") & 0xfff8) == ((b << 8) | (d << 3))) },
- ereport.io.pciex.tl.ca@pciexfn {
- (confprop(asru(pciexfn), TOPO_PCI_EXCAP) == "pciexswd") &&
- (!payloadprop_defined("source-valid") ||
- payloadprop("source-valid") == 0 ||
- (payloadprop("source-id") & 0xfff8) == ((b << 8) | (d << 3))) };
-
-prop error.io.pci.badreq-pw-u@pcibus[b]/pcidev[d]/pcifn[f] (0)->
- ereport.io.pciex.tl.ur@pciexbus/pciexdev/pciexfn { IS_SWD &&
- PCIBDF_IS_UNDER_DEV },
- ereport.io.pciex.tl.ca@pciexbus/pciexdev/pciexfn { IS_SWD &&
- PCIBDF_IS_UNDER_DEV };
-
-prop error.io.pci.badreq-drw-u@pcibus[b]/pcidev[d]/pcifn[f] (0)->
- ereport.io.pciex.tl.ur@pciexbus/pciexdev/pciexfn { IS_SWD &&
- PCIBDF_IS_UNDER_DEV },
- ereport.io.pciex.tl.ca@pciexbus/pciexdev/pciexfn { IS_SWD &&
- PCIBDF_IS_UNDER_DEV };
-
-prop error.io.pciex.flt-badreq-u@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pci.ma@pciexbus/pciexdev/pciexfn { IS_LEAF },
- ereport.io.pci.rta@pciexbus/pciexdev/pciexfn { IS_LEAF };
+prop error.io.pciex.flt-badreq-u@PCIEXFN1 { IS_SD(PCIEXFN) &&
+ SOURCE_ID_MATCHES_BDF && is_under(PCIEXFN, PCIEXFN1) } (0)->
+ ereport.io.pciex.tl.ur@PCIEXFN,
+ ereport.io.pciex.tl.ca@PCIEXFN;
+
+prop error.io.pciex.flt-badreq-u@PCIEXFN1 { IS_SD(PCIEXFN) &&
+ is_under(PCIEXFN, PCIEXFN1) } (0)->
+ ereport.io.pci.sec-sta@PCIEXFN,
+ error.io.pciex.nonfatal@PCIEXFN;
/*
* downstream bad request
@@ -1884,20 +1471,39 @@ prop error.io.pciex.flt-badreq-u@pciexbus/pciexdev/pciexfn (0)->
* legacy pci bits ma or rta (oddly there is no equivalent in pcie error
* reporting).
*/
-prop error.io.pciex.badreq-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.flt-ur-u@pciexbus/pciexdev/pciexfn,
- error.io.pciex.flt-ca-u@pciexbus/pciexdev/pciexfn,
- error.io.pciex.badreq-d@pciexbus/pciexdev/pciexfn/pciexbus<>/pciexdev<>/pciexfn<>;
+prop error.io.pciex.badreq-d@PCIEXFN { IS_SU(PCIEXFN) || IS_SD(PCIEXFN) } (1)->
+ error.io.pciex.flt-ur-u@PCIEXFN,
+ error.io.pciex.flt-ca-u@PCIEXFN,
+ error.io.pciex.badreq-d@PCIEXFN/PCIEXFNHZ;
+
+prop error.io.pciex.badreq-d@PCIEXFN { IS_BG(PCIEXFN) } (1)->
+ error.io.pciex.flt-ur-u@PCIEXFN,
+ error.io.pciex.flt-ca-u@PCIEXFN,
+ error.io.pci.badreq-pw-d@PCIEXFN/PCIFNHZ,
+ error.io.pci.badreq-drw-d@PCIEXFN/PCIFNHZ;
+
+prop error.io.pciex.badreq-d@PCIEXFN { IS_LF(PCIEXFN) } (1)->
+ error.io.pciex.flt-ur-u@PCIEXFN,
+ error.io.pciex.flt-ca-u@PCIEXFN;
-prop error.io.pciex.badreq-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.flt-ur-u@pciexbus/pciexdev/pciexfn { IS_LEAF },
- error.io.pciex.flt-ca-u@pciexbus/pciexdev/pciexfn { IS_LEAF };
+prop error.io.pciex.flt-ur-u@PCIEXFN { !IS_LF(PCIEXFN) } (1)->
+ ereport.io.pciex.tl.ur@PCIEXFN;
-prop error.io.pciex.badreq-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.flt-ur-u@pciexbus/pciexdev/pciexfn,
- error.io.pciex.flt-ca-u@pciexbus/pciexdev/pciexfn,
- error.io.pci.badreq-pw-d@pciexbus/pciexdev/pciexfn/pcibus<>/pcidev<>/pcifn<>,
- error.io.pci.badreq-drw-d@pciexbus/pciexdev/pciexfn/pcibus<>/pcidev<>/pcifn<>;
+prop error.io.pciex.flt-ur-u@PCIEXFN { IS_LF(PCIEXFN) } (0)->
+ ereport.io.pciex.tl.ur@PCIEXFN;
+
+prop error.io.pciex.flt-ur-u@PCIEXFN (2)->
+ error.io.pci.target-ma-d@PCIEXFN,
+ error.io.pciex.ur-u@PCIEXFN;
+
+prop error.io.pciex.flt-ur-u@PCIEXFN (0)->
+ error.io.pciex.nonfatal@PCIEXFN;
+
+prop error.io.pciex.ur-u@PCIEXFN/PCIEXFN (1)->
+ error.io.pciex.ur-u@PCIEXFN;
+
+prop error.io.pciex.ur-u@pciexrc/PCIEXFN (0)->
+ ereport.io.pci.sec-ma@pciexrc;
/*
* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
@@ -1912,13 +1518,12 @@ prop error.io.pciex.badreq-d@pciexbus/pciexdev/pciexfn (1)->
event error.io.pciex.discard_rc@pciexrc;
-event ereport.io.pciex.tl.uc@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pciex.noadverr@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pciex.correctable@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pciex.nonfatal@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pciex.a-nonfatal@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pciex.fatal@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pci.nr@pciexbus/pciexdev/pciexfn{within(5s)};
+event ereport.io.pciex.noadverr@PCIEXFN{within(5s)};
+event ereport.io.pciex.correctable@PCIEXFN{within(5s)};
+event ereport.io.pciex.nonfatal@PCIEXFN{within(5s)};
+event ereport.io.pciex.a-nonfatal@PCIEXFN{within(5s)};
+event ereport.io.pciex.fatal@PCIEXFN{within(5s)};
+event ereport.io.pci.nr@PCIEXFN{within(5s)};
event ereport.io.pci.nr@pciexrc{within(5s)};
event ereport.io.pci.ma@pciexrc{within(5s)};
event ereport.io.pci.rta@pciexrc{within(5s)};
@@ -1931,30 +1536,29 @@ event ereport.io.pciex.noadverr@pciexrc{within(5s)};
event ereport.io.pciex.a-nonfatal@pciexrc{within(5s)};
event ereport.io.pciex.rc.ce-msg@pciexrc{within(5s)};
event ereport.io.pciex.rc.mce-msg@pciexrc{within(5s)};
-event ereport.io.pciex.rc.mue-msg@pciexrc{within(5s)};
-event upset.io.pciex.discard_uc@pciexbus/pciexdev/pciexfn;
-event upset.io.pciex.discard@pciexbus/pciexdev/pciexfn;
+event upset.io.pciex.discard_uc@PCIEXFN;
+event upset.io.pciex.discard@PCIEXFN;
event upset.io.pciex.discard@pciexrc;
-prop upset.io.pciex.discard_uc@pciexbus/pciexdev/pciexfn (1)->
- ereport.io.pciex.tl.uc@pciexbus/pciexdev/pciexfn { IS_BDG };
+prop upset.io.pciex.discard_uc@PCIEXFN { IS_BG(PCIEXFN) } (1)->
+ ereport.io.pciex.tl.uc@PCIEXFN;
-prop upset.io.pciex.discard_uc@pciexbus/pciexdev/pciexfn (1)->
- ereport.io.pciex.tl.uc@pciexbus/pciexdev/pciexfn { IS_LEAF };
+prop upset.io.pciex.discard_uc@PCIEXFN { IS_LF(PCIEXFN) } (1)->
+ ereport.io.pciex.tl.uc@PCIEXFN;
-prop upset.io.pciex.discard@pciexbus/pciexdev/pciexfn (1)->
- ereport.io.pci.nr@pciexbus/pciexdev/pciexfn,
- ereport.io.pciex.noadverr@pciexbus/pciexdev/pciexfn,
- ereport.io.pciex.correctable@pciexbus/pciexdev/pciexfn,
- ereport.io.pciex.nonfatal@pciexbus/pciexdev/pciexfn,
- ereport.io.pciex.a-nonfatal@pciexbus/pciexdev/pciexfn,
- ereport.io.pciex.fatal@pciexbus/pciexdev/pciexfn;
+prop upset.io.pciex.discard@PCIEXFN (1)->
+ ereport.io.pci.nr@PCIEXFN,
+ ereport.io.pciex.noadverr@PCIEXFN,
+ ereport.io.pciex.correctable@PCIEXFN,
+ ereport.io.pciex.nonfatal@PCIEXFN,
+ ereport.io.pciex.a-nonfatal@PCIEXFN,
+ ereport.io.pciex.fatal@PCIEXFN;
-prop error.io.pciex.discard_rc@pciexrc (1)->
+prop error.io.pciex.discard_rc@pciexrc (0)->
+ ereport.io.pciex.rc.mue-msg@pciexrc,
ereport.io.pciex.rc.fe-msg@pciexrc { SOURCE_ID_MATCHES_OWN_BDF },
- ereport.io.pciex.rc.nfe-msg@pciexrc { SOURCE_ID_MATCHES_OWN_BDF },
- ereport.io.pciex.rc.ce-msg@pciexrc { SOURCE_ID_MATCHES_OWN_BDF };
+ ereport.io.pciex.rc.nfe-msg@pciexrc { SOURCE_ID_MATCHES_OWN_BDF };
prop upset.io.pciex.discard@pciexrc (1)->
error.io.pciex.discard_rc@pciexrc,
@@ -1963,7 +1567,6 @@ prop upset.io.pciex.discard@pciexrc (1)->
ereport.io.pciex.a-nonfatal@pciexrc,
ereport.io.pciex.rc.ce-msg@pciexrc,
ereport.io.pciex.rc.mce-msg@pciexrc,
- ereport.io.pciex.rc.mue-msg@pciexrc,
ereport.io.pciex.tl.uc@pciexrc,
ereport.io.pci.ma@pciexrc,
ereport.io.pci.rta@pciexrc,
@@ -1974,203 +1577,168 @@ prop upset.io.pciex.discard@pciexrc (1)->
/*
* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- * rules for PCI Express to PCI bridge propagations
+ * rules for propagations from child PCI bus
* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*/
-event error.io.pci.retry-to-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pci.badreq-pw-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pci.badreq-drw-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pci.ma-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pci.ta-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pci.ape-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pci.source-ape-u@pcibus/pcidev/pcifn;
-event error.io.pci.source-f-perr-u@pcibus/pcidev/pcifn;
-event error.io.pci.source-nf-perr-u@pcibus/pcidev/pcifn;
-event error.io.pci.target-ma-d@pcibus/pcidev/pcifn;
-event error.io.pci.target-rta-d@pcibus/pcidev/pcifn;
-event error.io.pci.f-dpdata-pw-d@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pci.nf-dpdata-pw-d@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pci.f-dpdata-dw-d@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pci.nf-dpdata-dw-d@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pci.f-dpdata-dr-d@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pci.nf-dpdata-dr-d@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pci.dpdata-pw-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pci.dpdata-dw-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pci.dpdata-dr-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pci.perr-pw-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pci.perr-dw-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pci.perr-dr-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pci.serr-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pcix.scpe-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pcix.source-scpe-u@pcibus/pcidev/pcifn;
-event error.io.pcix.spl-comp-ma-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pcix.spl-comp-ta-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pcix.spl-comp-ma-d@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pcix.spl-comp-ta-d@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pcix.uscmd@pciexbus/pciexdev/pciexfn;
-
-event ereport.io.pcix.sec-spl-dis@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pciex.bdg.uscmd@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pciex.bdg.sec-perr@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pciex.bdg.sec-uadr@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pciex.bdg.sec-uat@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pciex.bdg.sec-serr@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pciex.bdg.sec-tex@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pciex.bdg.sec-rma@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pciex.bdg.sec-rta@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pciex.bdg.sec-ma-sc@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pciex.bdg.sec-ta-sc@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pci.dto@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pci.sec-rta@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pci.sec-ma@pciexbus/pciexdev/pciexfn{within(5s)};
-
-/*
- * propagations from pci express onto pci/pci-x
- */
-
-/*
- * poisoned tlps propagate as parity/ecc errors.
- */
-prop error.io.pciex.f-poisreq-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pci.f-dpdata-pw-d@pciexbus/pciexdev/pciexfn/pcibus<>/pcidev<>/pcifn<>,
- error.io.pci.f-dpdata-dw-d@pciexbus/pciexdev/pciexfn/pcibus<>/pcidev<>/pcifn<>;
-
-prop error.io.pciex.nf-poisreq-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pci.nf-dpdata-pw-d@pciexbus/pciexdev/pciexfn/pcibus<>/pcidev<>/pcifn<>,
- error.io.pci.nf-dpdata-dw-d@pciexbus/pciexdev/pciexfn/pcibus<>/pcidev<>/pcifn<>;
-
-prop error.io.pciex.f-poiscomp-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pci.f-dpdata-dr-d@pciexbus/pciexdev/pciexfn/pcibus<>/pcidev<>/pcifn<>;
-
-prop error.io.pciex.nf-poiscomp-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pci.nf-dpdata-dr-d@pciexbus/pciexdev/pciexfn/pcibus<>/pcidev<>/pcifn<>;
-
-/*
- * ca-d only propagates on to pci bus if non-posted access
- */
-prop error.io.pciex.ca-d@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pci.sec-sta@pciexbus/pciexdev/pciexfn,
- error.io.pci.ta-drw-d@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-
-/*
- * nr-d only propagates on to pci bus if non-posted access
- */
-prop error.io.pciex.nr-d@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pci.sec-sta@pciexbus/pciexdev/pciexfn,
- error.io.pci.nr-drw-d@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn,
- error.io.pci.ta-drw-d@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-
-/*
- * propagations from pci/pci-x onto pci express
- */
+event error.io.pci.retry-to-u@PCIEXFN/PCIFN;
+event error.io.pci.ma-u@PCIEXFN/PCIFN;
+event error.io.pci.ta-u@PCIEXFN/PCIFN;
+event error.io.pci.ape-u@PCIEXFN/PCIFN;
+event error.io.pci.source-ape-u@PCIFN;
+event error.io.pci.target-ma-d@PCIFN;
+event error.io.pci.target-rta-d@PCIFN;
+event error.io.pci.badreq-pw-u@PCIEXFN/PCIFN;
+event error.io.pci.badreq-drw-u@PCIEXFN/PCIFN;
+event error.io.pci.source-perr-u@PCIFN;
+event error.io.pci.source-dpdata-u@PCIFN;
+event error.io.pci.dpdata-pw-u@PCIEXFN/PCIFN;
+event error.io.pci.dpdata-dw-u@PCIEXFN/PCIFN;
+event error.io.pci.dpdata-dr-u@PCIEXFN/PCIFN;
+event error.io.pci.perr-pw-u@PCIEXFN/PCIFN;
+event error.io.pci.perr-dw-u@PCIEXFN/PCIFN;
+event error.io.pci.perr-dr-u@PCIEXFN/PCIFN;
+event error.io.pci.serr-u@PCIEXFN/PCIFN;
+event error.io.pcix.scpe-u@PCIEXFN/PCIFN;
+event error.io.pcix.source-scpe-u@PCIFN;
+event error.io.pcix.spl-comp-ma-u@PCIEXFN/PCIFN;
+event error.io.pcix.spl-comp-ta-u@PCIEXFN/PCIFN;
+event error.io.pcix.spl-comp-ma-d@PCIEXFN/PCIFN;
+event error.io.pcix.spl-comp-ta-d@PCIEXFN/PCIFN;
+event error.io.pcix.uscmd@PCIEXFN;
+
+event ereport.io.pcix.sec-spl-dis@PCIEXFN{within(5s)};
+event ereport.io.pciex.bdg.uscmd@PCIEXFN{within(5s)};
+event ereport.io.pciex.bdg.sec-perr@PCIEXFN{within(5s)};
+event ereport.io.pciex.bdg.sec-uadr@PCIEXFN{within(5s)};
+event ereport.io.pciex.bdg.sec-uat@PCIEXFN{within(5s)};
+event ereport.io.pciex.bdg.sec-serr@PCIEXFN{within(5s)};
+event ereport.io.pciex.bdg.sec-tex@PCIEXFN{within(5s)};
+event ereport.io.pciex.bdg.sec-rma@PCIEXFN{within(5s)};
+event ereport.io.pciex.bdg.sec-rta@PCIEXFN{within(5s)};
+event ereport.io.pciex.bdg.sec-ma-sc@PCIEXFN{within(5s)};
+event ereport.io.pciex.bdg.sec-ta-sc@PCIEXFN{within(5s)};
+event ereport.io.pci.dto@PCIEXFN{within(5s)};
+event ereport.io.pci.sec-rta@PCIEXFN{within(5s)};
+event ereport.io.pci.sec-ma@PCIEXFN{within(5s)};
/*
* ma-u will only propagate on to pciex bus for non-posted accesses. It
* is then represented as an unsupported request.
*/
-prop error.io.pci.ma-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn (0)->
- ereport.io.pciex.tl.ur@pciexbus/pciexdev/pciexfn,
- error.io.pciex.ur-u@pciexbus/pciexdev/pciexfn;
+prop error.io.pci.ma-u@PCIEXFN/PCIFN (0)->
+ ereport.io.pciex.tl.ur@PCIEXFN;
+
+prop error.io.pci.ma-u@PCIEXFN/PCIFN { is_under(pciexrc, PCIEXFN/PCIFN) } (0)->
+ ereport.io.pci.sec-ma@pciexrc;
-prop error.io.pci.ma-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn (2)->
- ereport.io.pci.sec-ma@pciexbus/pciexdev/pciexfn,
- error.io.pciex.nonfatal@pciexbus/pciexdev/pciexfn;
+prop error.io.pci.ma-u@PCIEXFN/PCIFN (2)->
+ ereport.io.pci.sec-ma@PCIEXFN,
+ error.io.pciex.nonfatal@PCIEXFN;
-prop error.io.pci.target-ma-d@pcibus[b]/pcidev[d]/pcifn[f] (0)->
- ereport.io.pciex.bdg.sec-rma@pciexbus/pciexdev/pciexfn { IS_BDG &&
- BDF_IS_PCI_LEAF && SOURCE_ID_MATCHES_BDF && PCIBDF_IS_UNDER_DEV };
+prop error.io.pci.target-ma-d@PCIFN1 { IS_BG(PCIEXFN) && IS_PCI_LF(PCIFN1) &&
+ SOURCE_ID_MATCHES_BDF && is_under(PCIEXFN, PCIFN1) } (0)->
+ ereport.io.pciex.bdg.sec-rma@PCIEXFN;
/*
* ta-u will only propagate on to pciex bus for non-posted accesses. It is
* then represented as a completer abort.
*/
-prop error.io.pci.ta-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn (0)->
- ereport.io.pci.sta@pciexbus/pciexdev/pciexfn,
- ereport.io.pciex.tl.ca@pciexbus/pciexdev/pciexfn,
- error.io.pciex.ca-u@pciexbus/pciexdev/pciexfn;
+prop error.io.pci.ta-u@PCIEXFN/PCIFN (0)->
+ ereport.io.pci.sta@PCIEXFN,
+ ereport.io.pciex.tl.ca@PCIEXFN;
-prop error.io.pci.ta-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn (2)->
- ereport.io.pci.sec-rta@pciexbus/pciexdev/pciexfn,
- error.io.pciex.nonfatal@pciexbus/pciexdev/pciexfn;
+prop error.io.pci.ta-u@PCIEXFN/PCIFN { is_under(pciexrc, PCIEXFN/PCIFN) } (0)->
+ ereport.io.pci.sec-rta@pciexrc;
+
+prop error.io.pci.ta-u@PCIEXFN/PCIFN (2)->
+ ereport.io.pci.sec-rta@PCIEXFN,
+ error.io.pciex.nonfatal@PCIEXFN;
-prop error.io.pci.target-rta-d@pcibus[b]/pcidev[d]/pcifn[f] (0)->
- ereport.io.pciex.bdg.sec-rta@pciexbus/pciexdev/pciexfn { IS_BDG &&
- BDF_IS_PCI_LEAF && SOURCE_ID_MATCHES_BDF && PCIBDF_IS_UNDER_DEV };
+prop error.io.pci.target-rta-d@PCIFN1 { IS_BG(PCIEXFN) && IS_PCI_LF(PCIFN1) &&
+ SOURCE_ID_MATCHES_BDF && is_under(PCIEXFN, PCIFN1) } (0)->
+ ereport.io.pciex.bdg.sec-rta@PCIEXFN;
/*
* PERR# on a delayed write is represented as an unsupported request
*/
-prop error.io.pci.perr-dw-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn (1)->
- ereport.io.pci.sec-mdpe@pciexbus/pciexdev/pciexfn;
+prop error.io.pci.perr-dw-u@PCIEXFN/PCIFN (1)->
+ ereport.io.pci.sec-mdpe@PCIEXFN;
-prop error.io.pci.perr-dw-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn (0)->
- error.io.pciex.flt-ur-u@pciexbus/pciexdev/pciexfn;
+prop error.io.pci.perr-dw-u@PCIEXFN/PCIFN (0)->
+ error.io.pciex.flt-ur-u@PCIEXFN;
-prop error.io.pci.perr-pw-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn (1)->
- ereport.io.pci.sec-mdpe@pciexbus/pciexdev/pciexfn;
+prop error.io.pci.perr-pw-u@PCIEXFN/PCIFN (1)->
+ ereport.io.pci.sec-mdpe@PCIEXFN;
-prop error.io.pci.perr-pw-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn (0)->
- error.io.pciex.nonfatal@pciexbus/pciexdev/pciexfn;
+prop error.io.pci.perr-pw-u@PCIEXFN/PCIFN (0)->
+ error.io.pciex.nonfatal@PCIEXFN;
-prop error.io.pci.source-f-perr-u@pcibus[b]/pcidev[d]/pcifn[f] (0)->
- ereport.io.pciex.bdg.sec-perr@pciexbus/pciexdev/pciexfn { IS_BDG &&
- BDF_IS_PCI_LEAF && SOURCE_ID_MATCHES_BDF && PCIBDF_IS_UNDER_DEV };
+prop error.io.pci.perr-dr-u@PCIEXFN/PCIFN (1)->
+ error.io.pciex.nonfatal@PCIEXFN;
-prop error.io.pci.source-nf-perr-u@pcibus[b]/pcidev[d]/pcifn[f] (0)->
- ereport.io.pciex.bdg.sec-perr@pciexbus/pciexdev/pciexfn { IS_BDG &&
- BDF_IS_PCI_LEAF && SOURCE_ID_MATCHES_BDF && PCIBDF_IS_UNDER_DEV };
-
-prop error.io.pci.perr-dr-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn (1)->
- error.io.pciex.nonfatal@pciexbus/pciexdev/pciexfn;
+prop error.io.pci.source-perr-u@PCIFN1 { IS_BG(PCIEXFN) && IS_PCI_LF(PCIFN1) &&
+ SOURCE_ID_MATCHES_BDF && is_under(PCIEXFN, PCIFN1) } (0)->
+ ereport.io.pciex.bdg.sec-perr@PCIEXFN;
/*
* If the bridge receives data with bad ecc/parity from pci/pci-x, it will
* propagate onto pci express as a poisoned tlp
*/
-prop error.io.pci.dpdata-dr-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn (2)->
- ereport.io.pci.sec-dpe@pciexbus/pciexdev/pciexfn,
- error.io.pciex.poiscomp-u@pciexbus/pciexdev/pciexfn;
+prop error.io.pci.dpdata-dr-u@PCIEXFN/PCIFN (2)->
+ ereport.io.pci.sec-dpe@PCIEXFN,
+ error.io.pciex.poiscomp-u@PCIEXFN;
+
+prop error.io.pci.dpdata-dr-u@PCIEXFN/PCIFN (0)->
+ error.io.pciex.nonfatal@PCIEXFN;
-prop error.io.pci.dpdata-dr-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn (0)->
- error.io.pciex.nonfatal@pciexbus/pciexdev/pciexfn;
+prop error.io.pci.dpdata-dr-u@PCIEXFN/PCIFN (1)->
+ ereport.io.pci.sec-mdpe@PCIEXFN,
+ ereport.io.pci.mdpe@PCIEXFN;
-prop error.io.pci.dpdata-dr-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn (1)->
- ereport.io.pci.sec-mdpe@pciexbus/pciexdev/pciexfn,
- ereport.io.pci.mdpe@pciexbus/pciexdev/pciexfn;
+prop error.io.pci.dpdata-dw-u@PCIEXFN/PCIFN (1)->
+ ereport.io.pci.sec-dpe@PCIEXFN;
-prop error.io.pci.dpdata-dw-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn (1)->
- ereport.io.pci.sec-dpe@pciexbus/pciexdev/pciexfn;
+prop error.io.pci.dpdata-dw-u@PCIEXFN/PCIFN (0)->
+ error.io.pciex.nonfatal@PCIEXFN,
+ error.io.pciex.poisreq-u@PCIEXFN,
+ ereport.io.pci.ma@PCIEXFN,
+ ereport.io.pci.sec-sta@PCIEXFN,
+ error.io.pci.ta-drw-d@PCIEXFN/PCIFN;
-prop error.io.pci.dpdata-dw-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn (0)->
- error.io.pciex.nonfatal@pciexbus/pciexdev/pciexfn,
- error.io.pciex.poisreq-u@pciexbus/pciexdev/pciexfn;
+prop error.io.pci.dpdata-pw-u@PCIEXFN/PCIFN (2)->
+ ereport.io.pci.sec-dpe@PCIEXFN,
+ error.io.pciex.poisreq-u@PCIEXFN;
-prop error.io.pci.dpdata-pw-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn (2)->
- ereport.io.pci.sec-dpe@pciexbus/pciexdev/pciexfn,
- error.io.pciex.poisreq-u@pciexbus/pciexdev/pciexfn;
+prop error.io.pci.dpdata-pw-u@PCIEXFN/PCIFN (0)->
+ error.io.pciex.nonfatal@PCIEXFN,
+ ereport.io.pci.ma@PCIEXFN;
-prop error.io.pci.dpdata-pw-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn (0)->
- error.io.pciex.nonfatal@pciexbus/pciexdev/pciexfn;
+prop error.io.pci.source-dpdata-u@PCIFN { is_under(pciexrc, PCIFN) } (0)->
+ ereport.io.pciex.tl.ptlp@pciexrc,
+ ereport.io.pciex.tl.ur@pciexrc;
+
+prop error.io.pci.source-dpdata-u@PCIFN1 { IS_BG(PCIEXFN) && IS_PCI_LF(PCIFN1)
+ && SOURCE_ID_MATCHES_BDF && is_under(PCIEXFN, PCIFN1) } (0)->
+ ereport.io.pciex.bdg.sec-ude@PCIEXFN;
/*
* If the bridge sees an address or attribute parity error it is considered
* a fatal error.
*/
-prop error.io.pci.ape-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn (2)->
- ereport.io.pci.sec-dpe@pciexbus/pciexdev/pciexfn,
- error.io.pciex.fatal@pciexbus/pciexdev/pciexfn;
+prop error.io.pci.ape-u@PCIEXFN/PCIFN (2)->
+ ereport.io.pci.sec-dpe@PCIEXFN,
+ error.io.pciex.fatal@PCIEXFN;
-prop error.io.pci.source-ape-u@pcibus[b]/pcidev[d]/pcifn[f] (0)->
- ereport.io.pciex.bdg.sec-uat@pciexbus/pciexdev/pciexfn { IS_BDG &&
- BDF_IS_PCI_LEAF && SOURCE_ID_MATCHES_BDF && PCIBDF_IS_UNDER_DEV },
- ereport.io.pciex.bdg.sec-uadr@pciexbus/pciexdev/pciexfn { IS_BDG &&
- BDF_IS_PCI_LEAF && SOURCE_ID_MATCHES_BDF && PCIBDF_IS_UNDER_DEV };
+prop error.io.pci.source-ape-u@PCIFN1 { IS_BG(PCIEXFN) && IS_PCI_LF(PCIFN1) &&
+ SOURCE_ID_MATCHES_BDF && is_under(PCIEXFN, PCIFN1) } (0)->
+ ereport.io.pciex.bdg.sec-uat@PCIEXFN,
+ ereport.io.pciex.bdg.sec-uadr@PCIEXFN;
-prop error.io.pci.ape-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn (0)->
- ereport.io.pci.sec-rserr@pciexbus/pciexdev/pciexfn,
- ereport.io.pciex.bdg.sec-serr@pciexbus/pciexdev/pciexfn,
- ereport.io.pci.sec-sta@pciexbus/pciexdev/pciexfn;
+prop error.io.pci.ape-u@PCIEXFN/PCIFN (0)->
+ ereport.io.pci.sec-rserr@PCIEXFN,
+ ereport.io.pciex.bdg.sec-serr@PCIEXFN,
+ ereport.io.pci.sec-sta@PCIEXFN;
/*
* If the bridge sees a split completion error (pci-x only) it could
@@ -2184,231 +1752,151 @@ prop error.io.pci.ape-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn (0)->
* just drop the request (which the child device sees as a split
* completion ma)
*/
-prop error.io.pcix.scpe-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn (0)->
- ereport.io.pci.sec-dpe@pciexbus/pciexdev/pciexfn,
- ereport.io.pci.sec-rserr@pciexbus/pciexdev/pciexfn,
- ereport.io.pciex.bdg.sec-serr@pciexbus/pciexdev/pciexfn,
- ereport.io.pci.sec-sta@pciexbus/pciexdev/pciexfn,
- error.io.pciex.fatal@pciexbus/pciexdev/pciexfn;
-
-prop error.io.pcix.source-scpe-u@pcibus[b]/pcidev[d]/pcifn[f] (0)->
- ereport.io.pciex.bdg.sec-uat@pciexbus/pciexdev/pciexfn { IS_BDG &&
- BDF_IS_PCI_LEAF && SOURCE_ID_MATCHES_BDF && PCIBDF_IS_UNDER_DEV },
- ereport.io.pciex.bdg.sec-uadr@pciexbus/pciexdev/pciexfn { IS_BDG &&
- BDF_IS_PCI_LEAF && SOURCE_ID_MATCHES_BDF && PCIBDF_IS_UNDER_DEV };
-
-prop error.io.pcix.scpe-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn (1)->
- error.io.pcix.uscmd@pciexbus/pciexdev/pciexfn,
- error.io.pcix.spl-comp-ma-d@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn,
- error.io.pcix.spl-comp-ta-d@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-
-prop error.io.pcix.uscmd@pciexbus/pciexdev/pciexfn (5)->
- error.io.pciex.fatal@pciexbus/pciexdev/pciexfn,
- ereport.io.pci.sta@pciexbus/pciexdev/pciexfn,
- ereport.io.pciex.tl.ca@pciexbus/pciexdev/pciexfn,
- error.io.pciex.ca-u@pciexbus/pciexdev/pciexfn,
- ereport.io.pciex.bdg.uscmd@pciexbus/pciexdev/pciexfn;
+prop error.io.pcix.scpe-u@PCIEXFN/PCIFN (0)->
+ ereport.io.pci.sec-dpe@PCIEXFN,
+ ereport.io.pci.sec-rserr@PCIEXFN,
+ ereport.io.pciex.bdg.sec-serr@PCIEXFN,
+ ereport.io.pci.sec-sta@PCIEXFN,
+ error.io.pciex.fatal@PCIEXFN;
+
+prop error.io.pcix.source-scpe-u@PCIFN1 { IS_BG(PCIEXFN) && IS_PCI_LF(PCIFN1) &&
+ SOURCE_ID_MATCHES_BDF && is_under(PCIEXFN, PCIFN1) } (0)->
+ ereport.io.pciex.bdg.sec-uat@PCIEXFN,
+ ereport.io.pciex.bdg.sec-uadr@PCIEXFN;
+
+prop error.io.pcix.scpe-u@PCIEXFN/PCIFN (1)->
+ error.io.pcix.uscmd@PCIEXFN,
+ error.io.pcix.spl-comp-ma-d@PCIEXFN/PCIFN,
+ error.io.pcix.spl-comp-ta-d@PCIEXFN/PCIFN;
+
+prop error.io.pcix.uscmd@PCIEXFN (4)->
+ error.io.pciex.fatal@PCIEXFN,
+ ereport.io.pci.sta@PCIEXFN,
+ ereport.io.pciex.tl.ca@PCIEXFN,
+ ereport.io.pciex.bdg.uscmd@PCIEXFN;
+
+prop error.io.pcix.uscmd@PCIEXFN { is_under(pciexrc, PCIEXFN) } (0)->
+ ereport.io.pci.sec-rta@pciexrc;
/*
* Similarly a child device may have responded with a master abort or
* target abort to one of our split competions. The hardware just logs these.
*/
-prop error.io.pcix.spl-comp-ma-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn (3)->
- error.io.pciex.nonfatal@pciexbus/pciexdev/pciexfn,
- ereport.io.pcix.sec-spl-dis@pciexbus/pciexdev/pciexfn,
- ereport.io.pciex.bdg.sec-ma-sc@pciexbus/pciexdev/pciexfn;
+prop error.io.pcix.spl-comp-ma-u@PCIEXFN/PCIFN (3)->
+ error.io.pciex.nonfatal@PCIEXFN,
+ ereport.io.pcix.sec-spl-dis@PCIEXFN,
+ ereport.io.pciex.bdg.sec-ma-sc@PCIEXFN;
-prop error.io.pcix.spl-comp-ma-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn (0)->
- ereport.io.pci.sec-ma@pciexbus/pciexdev/pciexfn;
+prop error.io.pcix.spl-comp-ma-u@PCIEXFN/PCIFN (0)->
+ ereport.io.pci.sec-ma@PCIEXFN;
-prop error.io.pcix.spl-comp-ta-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn (4)->
- error.io.pciex.nonfatal@pciexbus/pciexdev/pciexfn,
- ereport.io.pcix.sec-spl-dis@pciexbus/pciexdev/pciexfn,
- ereport.io.pciex.bdg.sec-ta-sc@pciexbus/pciexdev/pciexfn,
- ereport.io.pci.sec-rta@pciexbus/pciexdev/pciexfn;
+prop error.io.pcix.spl-comp-ta-u@PCIEXFN/PCIFN (4)->
+ error.io.pciex.nonfatal@PCIEXFN,
+ ereport.io.pcix.sec-spl-dis@PCIEXFN,
+ ereport.io.pciex.bdg.sec-ta-sc@PCIEXFN,
+ ereport.io.pci.sec-rta@PCIEXFN;
/*
* SERR# is considered fatal
*/
-prop error.io.pci.serr-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn (3)->
- error.io.pciex.fatal@pciexbus/pciexdev/pciexfn,
- ereport.io.pci.sec-rserr@pciexbus/pciexdev/pciexfn,
- ereport.io.pciex.bdg.sec-serr@pciexbus/pciexdev/pciexfn;
+prop error.io.pci.serr-u@PCIEXFN/PCIFN (3)->
+ error.io.pciex.fatal@PCIEXFN,
+ ereport.io.pci.sec-rserr@PCIEXFN,
+ ereport.io.pciex.bdg.sec-serr@PCIEXFN;
/*
* Retry time-out is nonfatal. The initial requester has stopped retrying so
* there's nothing else the hardware can do but flag the error.
*/
-prop error.io.pci.retry-to-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn (2)->
- error.io.pciex.nonfatal@pciexbus/pciexdev/pciexfn,
- ereport.io.pciex.bdg.sec-tex@pciexbus/pciexdev/pciexfn;
+prop error.io.pci.retry-to-u@PCIEXFN/PCIFN (2)->
+ error.io.pciex.nonfatal@PCIEXFN,
+ ereport.io.pciex.bdg.sec-tex@PCIEXFN;
+
+prop error.io.pci.retry-to-u@PCIEXFN/PCIFN (0)->
+ ereport.io.pci.sta@PCIEXFN,
+ ereport.io.pci.dto@PCIEXFN;
-prop error.io.pci.retry-to-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn (0)->
- ereport.io.pci.sta@pciexbus/pciexdev/pciexfn,
- error.io.pciex.ca-u@pciexbus/pciexdev/pciexfn,
- ereport.io.pci.dto@pciexbus/pciexdev/pciexfn;
+prop error.io.pci.retry-to-u@PCIEXFN/PCIFN {
+ is_under(pciexrc, PCIEXFN/PCIFN) } (0)->
+ ereport.io.pci.sec-rta@pciexrc;
/*
* A bad dma request (eg with invalid address) propagates onto pci express
* as a bad dma request. The end result may be a master abort or target abort
* (depending on whether the child is pci-x or pci).
*/
-prop error.io.pci.badreq-pw-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn (0)->
- error.io.pciex.badreq-u@pciexbus/pciexdev/pciexfn,
- ereport.io.pci.ma@pciexbus/pciexdev/pciexfn,
- ereport.io.pci.rta@pciexbus/pciexdev/pciexfn,
- ereport.io.pci.sec-sta@pciexbus/pciexdev/pciexfn;
-
-prop error.io.pci.badreq-drw-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn (0)->
- error.io.pciex.badreq-u@pciexbus/pciexdev/pciexfn,
- ereport.io.pci.ma@pciexbus/pciexdev/pciexfn,
- ereport.io.pci.rta@pciexbus/pciexdev/pciexfn,
- ereport.io.pci.sec-sta@pciexbus/pciexdev/pciexfn;
+prop error.io.pci.badreq-pw-u@PCIEXFN/PCIFN (0)->
+ ereport.io.pci.ma@PCIEXFN,
+ ereport.io.pci.rta@PCIEXFN,
+ ereport.io.pci.sec-sta@PCIEXFN;
+
+prop error.io.pci.badreq-pw-u@PCIEXFN/PCIFN {
+ is_under(pciexrc, PCIEXFN/PCIFN) } (0)->
+ ereport.io.pciex.tl.ur@pciexrc,
+ ereport.io.pciex.tl.ca@pciexrc,
+ ereport.io.pci.sec-sta@pciexrc;
+
+prop error.io.pci.badreq-pw-u@PCIEXFN/PCIFN { IS_SD(PCIEXFN1) &&
+ is_under(PCIEXFN1, PCIEXFN/PCIFN) } (0)->
+ ereport.io.pciex.tl.ur@PCIEXFN1,
+ ereport.io.pciex.tl.ca@PCIEXFN1,
+ ereport.io.pci.sec-sta@PCIEXFN1,
+ error.io.pciex.nonfatal@PCIEXFN1;
+
+prop error.io.pci.badreq-drw-u@PCIEXFN/PCIFN (0)->
+ ereport.io.pci.ma@PCIEXFN,
+ ereport.io.pci.rta@PCIEXFN,
+ ereport.io.pci.sec-sta@PCIEXFN;
+
+prop error.io.pci.badreq-drw-u@PCIEXFN/PCIFN {
+ is_under(pciexrc, PCIEXFN/PCIFN) } (0)->
+ ereport.io.pciex.tl.ur@pciexrc,
+ ereport.io.pciex.tl.ca@pciexrc,
+ ereport.io.pci.sec-sta@pciexrc;
+
+prop error.io.pci.badreq-drw-u@PCIEXFN/PCIFN { IS_SD(PCIEXFN1) &&
+ is_under(PCIEXFN1, PCIEXFN/PCIFN) } (0)->
+ ereport.io.pciex.tl.ur@PCIEXFN1,
+ ereport.io.pciex.tl.ca@PCIEXFN1,
+ ereport.io.pci.sec-sta@PCIEXFN1,
+ error.io.pciex.nonfatal@PCIEXFN1;
/*
* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- * source- and target- propagations
+ * target- propagations
*
- * The source- propagations cascade down to a leaf device, which can then have
- * its bdf matched against the source-id of various ereports. This is necessary
- * because for a number of cases the source-id represents the original requester
- * of the packet which may be different from the detector of the error (which
- * could be a bridge or switch).
- *
* A Root Complex driver may generate "target-" ereports when knowledge of the
* physical address associated with a fault allows the target device to be
* determined. This is not a requirement of the Diagnosis Engine, but can be
* valuable when available.
* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*/
-event error.io.pci.target-ma-d@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn;
-event error.io.pci.target-rta-d@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn;
-event error.io.pci.target-mdpe-d@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn;
-event error.io.pci.target-ma-d@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pci.target-rta-d@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pci.target-mdpe-d@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pciex.source-f-poiscomp-u@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.source-nf-poiscomp-u@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn;
-event error.io.pci.source-f-dpdata-r-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pci.source-nf-dpdata-r-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pci.source-f-dpdata-w-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pci.source-nf-dpdata-w-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pciex.source-f-ecrcreq-u@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.source-nf-ecrcreq-u@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.source-f-ecrcreq-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pciex.source-nf-ecrcreq-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pciex.source-f-ecrcreq-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pciex.source-nf-ecrcreq-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pciex.source-f-ecrccomp-u@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.source-nf-ecrccomp-u@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.source-f-ecrccomp-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pciex.source-nf-ecrccomp-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pciex.source-f-ecrccomp-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pciex.source-nf-ecrccomp-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-event error.io.pciex.source-mtlp-u@pciexbus/pciexdev/pciexfn/pciexbus/pciexdev/pciexfn;
-event error.io.pciex.source-mtlp-u@pciexbus/pciexdev/pciexfn/pcibus/pcidev/pcifn;
-event error.io.pciex.source-mtlp-u@pcibus/pcidev/pcifn/pcibus/pcidev/pcifn;
-
-event ereport.io.pci.target-mdpe@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pci.target-rta@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pci.target-ma@pciexbus/pciexdev/pciexfn{within(5s)};
-
-prop error.io.pci.target-ma-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pci.target-ma-d@pciexbus/pciexdev/pciexfn/pciexbus<>/pciexdev<>/pciexfn<>;
-
-prop error.io.pci.target-ma-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pci.target-ma-d@pciexbus/pciexdev/pciexfn/pcibus<>/pcidev<>/pcifn<>;
-
-prop error.io.pci.target-ma-d@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pci.target-ma@pciexbus/pciexdev/pciexfn;
-
-prop error.io.pci.target-rta-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pci.target-rta-d@pciexbus/pciexdev/pciexfn/pciexbus<>/pciexdev<>/pciexfn<>;
-
-prop error.io.pci.target-rta-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pci.target-rta-d@pciexbus/pciexdev/pciexfn/pcibus<>/pcidev<>/pcifn<>;
-
-prop error.io.pci.target-rta-d@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pci.target-rta@pciexbus/pciexdev/pciexfn;
-
-prop error.io.pci.target-mdpe-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pci.target-mdpe-d@pciexbus/pciexdev/pciexfn/pciexbus<>/pciexdev<>/pciexfn<>;
-
-prop error.io.pci.target-mdpe-d@pciexbus/pciexdev/pciexfn (1)->
- error.io.pci.target-mdpe-d@pciexbus/pciexdev/pciexfn/pcibus<>/pcidev<>/pcifn<>;
-
-prop error.io.pci.target-mdpe-d@pciexbus/pciexdev/pciexfn (0)->
- ereport.io.pci.target-mdpe@pciexbus/pciexdev/pciexfn;
-
-prop error.io.pciex.source-f-poisreq-u@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.source-f-poisreq-u@pciexbus/pciexdev/pciexfn/pciexbus<>/pciexdev<>/pciexfn<>;
-
-prop error.io.pciex.source-nf-poisreq-u@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.source-nf-poisreq-u@pciexbus/pciexdev/pciexfn/pciexbus<>/pciexdev<>/pciexfn<>;
-
-prop error.io.pciex.source-f-poisreq-u@pciexbus/pciexdev/pciexfn (1)->
- error.io.pci.source-f-dpdata-w-u@pciexbus/pciexdev/pciexfn/pcibus<>/pcidev<>/pcifn<>;
-
-prop error.io.pciex.source-nf-poisreq-u@pciexbus/pciexdev/pciexfn (1)->
- error.io.pci.source-nf-dpdata-w-u@pciexbus/pciexdev/pciexfn/pcibus<>/pcidev<>/pcifn<>;
-
-prop error.io.pciex.source-f-poiscomp-u@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.source-f-poiscomp-u@pciexbus/pciexdev/pciexfn/pciexbus<>/pciexdev<>/pciexfn<>;
-
-prop error.io.pciex.source-nf-poiscomp-u@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.source-nf-poiscomp-u@pciexbus/pciexdev/pciexfn/pciexbus<>/pciexdev<>/pciexfn<>;
-
-prop error.io.pciex.source-f-poiscomp-u@pciexbus/pciexdev/pciexfn (1)->
- error.io.pci.source-f-dpdata-r-u@pciexbus/pciexdev/pciexfn/pcibus<>/pcidev<>/pcifn<>;
-
-prop error.io.pciex.source-nf-poiscomp-u@pciexbus/pciexdev/pciexfn (1)->
- error.io.pci.source-nf-dpdata-r-u@pciexbus/pciexdev/pciexfn/pcibus<>/pcidev<>/pcifn<>;
-
-prop error.io.pciex.source-f-ecrcreq-u@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.source-f-ecrcreq-u@pciexbus/pciexdev/pciexfn/pciexbus<>/pciexdev<>/pciexfn<>;
-
-prop error.io.pciex.source-f-ecrcreq-u@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.source-f-ecrcreq-u@pciexbus/pciexdev/pciexfn/pcibus<>/pcidev<>/pcifn<>;
-
-prop error.io.pciex.source-nf-ecrcreq-u@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.source-nf-ecrcreq-u@pciexbus/pciexdev/pciexfn/pciexbus<>/pciexdev<>/pciexfn<>;
-
-prop error.io.pciex.source-nf-ecrcreq-u@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.source-nf-ecrcreq-u@pciexbus/pciexdev/pciexfn/pcibus<>/pcidev<>/pcifn<>;
-
-prop error.io.pciex.source-f-ecrcreq-u@pcibus/pcidev/pcifn (1)->
- error.io.pciex.source-f-ecrcreq-u@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
-
-prop error.io.pciex.source-nf-ecrcreq-u@pcibus/pcidev/pcifn (1)->
- error.io.pciex.source-nf-ecrcreq-u@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
-
-prop error.io.pciex.source-f-ecrccomp-u@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.source-f-ecrccomp-u@pciexbus/pciexdev/pciexfn/pciexbus<>/pciexdev<>/pciexfn<>;
-
-prop error.io.pciex.source-f-ecrccomp-u@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.source-f-ecrccomp-u@pciexbus/pciexdev/pciexfn/pcibus<>/pcidev<>/pcifn<>;
-
-prop error.io.pciex.source-nf-ecrccomp-u@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.source-nf-ecrccomp-u@pciexbus/pciexdev/pciexfn/pciexbus<>/pciexdev<>/pciexfn<>;
-
-prop error.io.pciex.source-nf-ecrccomp-u@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.source-nf-ecrccomp-u@pciexbus/pciexdev/pciexfn/pcibus<>/pcidev<>/pcifn<>;
-
-prop error.io.pciex.source-f-ecrccomp-u@pcibus/pcidev/pcifn (1)->
- error.io.pciex.source-f-ecrccomp-u@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
-
-prop error.io.pciex.source-nf-ecrccomp-u@pcibus/pcidev/pcifn (1)->
- error.io.pciex.source-nf-ecrccomp-u@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
-
-prop error.io.pciex.source-mtlp-u@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.source-mtlp-u@pciexbus/pciexdev/pciexfn/pciexbus<>/pciexdev<>/pciexfn<>;
-
-prop error.io.pciex.source-mtlp-u@pciexbus/pciexdev/pciexfn (1)->
- error.io.pciex.source-mtlp-u@pciexbus/pciexdev/pciexfn/pcibus<>/pcidev<>/pcifn<>;
-
-prop error.io.pciex.source-mtlp-u@pcibus/pcidev/pcifn (1)->
- error.io.pciex.source-mtlp-u@pcibus/pcidev/pcifn/pcibus<>/pcidev<>/pcifn<>;
-
+event error.io.pci.target-ma-d@PCIEXFN/PCIEXFN;
+event error.io.pci.target-rta-d@PCIEXFN/PCIEXFN;
+event error.io.pci.target-ma-d@PCIEXFN/PCIFN;
+event error.io.pci.target-rta-d@PCIEXFN/PCIFN;
+
+event ereport.io.pci.target-rta@PCIEXFN{within(5s)};
+event ereport.io.pci.target-ma@PCIEXFN{within(5s)};
+
+prop error.io.pci.target-ma-d@PCIEXFN (1)->
+ error.io.pci.target-ma-d@PCIEXFN/PCIEXFNHZ;
+
+prop error.io.pci.target-ma-d@PCIEXFN (1)->
+ error.io.pci.target-ma-d@PCIEXFN/PCIFNHZ;
+
+prop error.io.pci.target-ma-d@PCIEXFN (0)->
+ ereport.io.pci.target-ma@PCIEXFN;
+
+prop error.io.pci.target-rta-d@PCIEXFN (1)->
+ error.io.pci.target-rta-d@PCIEXFN/PCIEXFNHZ;
+
+prop error.io.pci.target-rta-d@PCIEXFN (1)->
+ error.io.pci.target-rta-d@PCIEXFN/PCIFNHZ;
+
+prop error.io.pci.target-rta-d@PCIEXFN (0)->
+ ereport.io.pci.target-rta@PCIEXFN;
+
/*
* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
* stub unused pciex-pci bridge ereports
@@ -2419,31 +1907,31 @@ prop error.io.pciex.source-mtlp-u@pcibus/pcidev/pcifn (1)->
* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*/
-event ereport.io.pciex.bdg.usc@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pcix.sec-unex-spl@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pcix.sec-spl-or@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pcix.sec-spl-dly@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pcix.sec-ecc.ce-addr@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pcix.sec-ecc.ce-attr@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pcix.sec-ecc.ce-data@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pcix.sec-ecc.ue-addr@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pcix.sec-ecc.ue-attr@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pcix.sec-ecc.ue-data@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pcix.sec-s-ce@pciexbus/pciexdev/pciexfn{within(5s)};
-event ereport.io.pcix.sec-s-ue@pciexbus/pciexdev/pciexfn{within(5s)};
-
-event upset.io.pciex.discard-bdg@pciexbus/pciexdev/pciexfn;
-
-prop upset.io.pciex.discard-bdg@pciexbus/pciexdev/pciexfn (1)->
- ereport.io.pciex.bdg.usc@pciexbus/pciexdev/pciexfn,
- ereport.io.pcix.sec-unex-spl@pciexbus/pciexdev/pciexfn,
- ereport.io.pcix.sec-spl-or@pciexbus/pciexdev/pciexfn,
- ereport.io.pcix.sec-spl-dly@pciexbus/pciexdev/pciexfn,
- ereport.io.pcix.sec-ecc.ce-addr@pciexbus/pciexdev/pciexfn,
- ereport.io.pcix.sec-ecc.ce-attr@pciexbus/pciexdev/pciexfn,
- ereport.io.pcix.sec-ecc.ce-data@pciexbus/pciexdev/pciexfn,
- ereport.io.pcix.sec-ecc.ue-addr@pciexbus/pciexdev/pciexfn,
- ereport.io.pcix.sec-ecc.ue-attr@pciexbus/pciexdev/pciexfn,
- ereport.io.pcix.sec-ecc.ue-data@pciexbus/pciexdev/pciexfn,
- ereport.io.pcix.sec-s-ce@pciexbus/pciexdev/pciexfn,
- ereport.io.pcix.sec-s-ue@pciexbus/pciexdev/pciexfn;
+event ereport.io.pciex.bdg.usc@PCIEXFN{within(5s)};
+event ereport.io.pcix.sec-unex-spl@PCIEXFN{within(5s)};
+event ereport.io.pcix.sec-spl-or@PCIEXFN{within(5s)};
+event ereport.io.pcix.sec-spl-dly@PCIEXFN{within(5s)};
+event ereport.io.pcix.sec-ecc.ce-addr@PCIEXFN{within(5s)};
+event ereport.io.pcix.sec-ecc.ce-attr@PCIEXFN{within(5s)};
+event ereport.io.pcix.sec-ecc.ce-data@PCIEXFN{within(5s)};
+event ereport.io.pcix.sec-ecc.ue-addr@PCIEXFN{within(5s)};
+event ereport.io.pcix.sec-ecc.ue-attr@PCIEXFN{within(5s)};
+event ereport.io.pcix.sec-ecc.ue-data@PCIEXFN{within(5s)};
+event ereport.io.pcix.sec-s-ce@PCIEXFN{within(5s)};
+event ereport.io.pcix.sec-s-ue@PCIEXFN{within(5s)};
+
+event upset.io.pciex.discard-bdg@PCIEXFN;
+
+prop upset.io.pciex.discard-bdg@PCIEXFN (1)->
+ ereport.io.pciex.bdg.usc@PCIEXFN,
+ ereport.io.pcix.sec-unex-spl@PCIEXFN,
+ ereport.io.pcix.sec-spl-or@PCIEXFN,
+ ereport.io.pcix.sec-spl-dly@PCIEXFN,
+ ereport.io.pcix.sec-ecc.ce-addr@PCIEXFN,
+ ereport.io.pcix.sec-ecc.ce-attr@PCIEXFN,
+ ereport.io.pcix.sec-ecc.ce-data@PCIEXFN,
+ ereport.io.pcix.sec-ecc.ue-addr@PCIEXFN,
+ ereport.io.pcix.sec-ecc.ue-attr@PCIEXFN,
+ ereport.io.pcix.sec-ecc.ue-data@PCIEXFN,
+ ereport.io.pcix.sec-s-ce@PCIEXFN,
+ ereport.io.pcix.sec-s-ue@PCIEXFN;
diff --git a/usr/src/cmd/fm/eversholt/files/i386/i86pc/amd64.esc b/usr/src/cmd/fm/eversholt/files/i386/i86pc/amd64.esc
index 3ead64e294..7b7e587c11 100644
--- a/usr/src/cmd/fm/eversholt/files/i386/i86pc/amd64.esc
+++ b/usr/src/cmd/fm/eversholt/files/i386/i86pc/amd64.esc
@@ -32,25 +32,13 @@
* Eversholt rules for the AMD Opteron CPU/Memory
*/
-fru motherboard;
-fru chip;
-fru dimm;
-
-asru chip/cpu;
-asru dimm;
-asru dimm/rank;
-asru dram-channel;
-asru chip/memory-controller/chip-select;
-
#define MAX(x, y) ((x) >= (y) ? (x) : (y))
#define MIN(x, y) ((x) <= (y) ? (x) : (y))
/*
* SET_ADDR and SET_OFFSET are used to set a payload value in the fault that
* we diagnose for page faults, to record the physical address of the faulting
- * page. The "asru-" prefix is hooked in the "rewrite-ASRU" confcalls made on
- * diagnosis of associated faults when the libtopo mem scheme rewrites the
- * asru in "mem" scheme.
+ * page.
*/
#define SET_ADDR (setpayloadprop("asru-physaddr", payloadprop("IA32_MCi_ADDR")))
@@ -104,7 +92,8 @@ asru chip/memory-controller/chip-select;
(payloadprop("syndrome-type") == "C" && \
!CKSINGLE(payloadprop("syndrome")))
-/*
+/* #PAGE#
+ * #DIMM_SCU#
* A single bit fault in a memory rank can cause:
*
* - mem_ce : reported by nb
@@ -118,7 +107,7 @@ asru chip/memory-controller/chip-select;
* trips we diagnose a fault.memory.page so that the response agent can
* retire the page that caused the trip. If the total number of pages
* faulted in this way on a single rank exceeds a threshold we will
- * diagnose a fault.memory.dimm_sb against the containing.
+ * diagnose a fault.memory.dimm_sb against the containing dimm.
*
* Multibit ChipKill-correctable errors are treated identically to
* single-bit errors, but via separate serd engines to allow distinct
@@ -138,21 +127,10 @@ event ereport.cpu.amd.bu.s_ecc1@chip/cpu{within(5s)};
event ereport.cpu.amd.nb.mem_ce@chip/cpu{within(5s)};
/*
- * If the address is not valid then no resource member will be included
- * in a nb.mem_ce or nb.mem_ue ereport. These cases should be rare.
- * We will also discard all inf_sys_ecc1 events detected at the ic since they
- * have no syndrome and therefore no resource information.
- * We will discard such ereports. An alternative may be to SERD them
- * on a per MC basis and trip if we see too many such events.
- */
-
-event upset.memory.discard1@chip/cpu;
-
-/* #PAGE#
- * Single-bit correctable errors are diagnosed as upsets and feed into per-rank
+ * Single-bit correctable errors feed into per-rank
* SERD engines which diagnose fault.memory.page_sb if they trip.
*
- * Multi-bit correctable (via ChipKill) errors are diagnosed as upsets and feed
+ * Multi-bit correctable (via ChipKill) errors feed
* into additional per-rank SERD engines which diagnose fault.memory.page_ck
* if they trip.
*
@@ -161,12 +139,32 @@ event upset.memory.discard1@chip/cpu;
* whether to declare a dimm faulty after repeated page faults.
*/
-#define PAGE_FIT 1
#define PAGE_SB_COUNT 2
#define PAGE_SB_TIME 72h
#define PAGE_CK_COUNT 2
#define PAGE_CK_TIME 72h
+engine stat.sbpgflt@chip/memory-controller/dimm/rank;
+engine stat.ckpgflt@chip/memory-controller/dimm/rank;
+engine serd.memory.page_sb@chip/memory-controller/dimm/rank,
+ N=PAGE_SB_COUNT, T=PAGE_SB_TIME;
+engine serd.memory.page_ck@chip/memory-controller/dimm/rank,
+ N=PAGE_CK_COUNT, T=PAGE_CK_TIME;
+engine serd.memory.dimm_sb@chip/memory-controller/dimm/rank,
+ N=PAGE_SB_COUNT, T=PAGE_SB_TIME;
+engine serd.memory.dimm_ck@chip/memory-controller/dimm/rank,
+ N=PAGE_CK_COUNT, T=PAGE_CK_TIME;
+event fault.memory.page_sb@chip/memory-controller/dimm/rank, message=0,
+ count=stat.sbpgflt@chip/memory-controller/dimm/rank, response=0,
+ engine=serd.memory.page_sb@chip/memory-controller/dimm/rank;
+event fault.memory.page_ck@chip/memory-controller/dimm/rank, message=0,
+ count=stat.ckpgflt@chip/memory-controller/dimm/rank, response=0,
+ engine=serd.memory.page_ck@chip/memory-controller/dimm/rank;
+event fault.memory.dimm_sb@chip/memory-controller/dimm/rank,
+ engine=serd.memory.dimm_sb@chip/memory-controller/dimm/rank;
+event fault.memory.dimm_ck@chip/memory-controller/dimm/rank,
+ engine=serd.memory.dimm_ck@chip/memory-controller/dimm/rank;
+
/*
* The fraction of pages on a single rank that must be diagnosed as faulty
* with single correctable unit faults before we will fault the rank.
@@ -211,7 +209,7 @@ event upset.memory.discard1@chip/cpu;
* never more than 512.
*/
#define RANK_THRESH MIN(512, MAX(128, \
- _BPS_PGCNT(confprop(asru(chip/memory-controller/dimm/rank), "size"))))
+ _BPS_PGCNT(confprop(chip/memory-controller/dimm/rank, "size"))))
/*
* The maximum number of single-correctable-unit page faults we will diagnose
@@ -220,98 +218,10 @@ event upset.memory.discard1@chip/cpu;
*/
#define RANK_PGFLT_MAX (2 * RANK_THRESH)
-engine stat.sbpgflt@chip/memory-controller/dimm/rank;
-engine stat.ckpgflt@chip/memory-controller/dimm/rank;
-
-event fault.memory.page_sb@chip/memory-controller/dimm/rank,
- FITrate=PAGE_FIT, FRU=dimm, ASRU=dimm/rank, message=0,
- count=stat.sbpgflt@chip/memory-controller/dimm/rank,
- action=confcall("rewrite-ASRU"); /* rewrite ASRU to identify page in rank */
-
#define SB_PGFLTS (count(stat.sbpgflt@chip/memory-controller/dimm/rank))
-
-event fault.memory.page_ck@chip/memory-controller/dimm/rank,
- FITrate=PAGE_FIT, FRU=dimm, ASRU=dimm/rank, message=0,
- count=stat.ckpgflt@chip/memory-controller/dimm/rank,
- action=confcall("rewrite-ASRU"); /* rewrite ASRU to identify page in rank */
-
#define CK_PGFLTS (count(stat.ckpgflt@chip/memory-controller/dimm/rank))
-#define RANK_PGFLT_LIMIT_REACHED \
- (SB_PGFLTS + CK_PGFLTS > RANK_PGFLT_MAX)
-
-event ereport.memory.page_sb_trip@chip/memory-controller/dimm/rank{within(5s)};
-engine serd.memory.page_sb@chip/memory-controller/dimm/rank,
- N=PAGE_SB_COUNT, T=PAGE_SB_TIME, method=persistent,
- trip=ereport.memory.page_sb_trip@chip/memory-controller/dimm/rank;
-event upset.memory.page_sb@chip/memory-controller/dimm/rank,
- engine=serd.memory.page_sb@chip/memory-controller/dimm/rank;
-
-event ereport.memory.page_ck_trip@chip/memory-controller/dimm/rank{within(5s)};
-engine serd.memory.page_ck@chip/memory-controller/dimm/rank,
- N=PAGE_CK_COUNT, T=PAGE_CK_TIME, method=persistent,
- trip=ereport.memory.page_ck_trip@chip/memory-controller/dimm/rank;
-event upset.memory.page_ck@chip/memory-controller/dimm/rank,
- engine=serd.memory.page_ck@chip/memory-controller/dimm/rank;
-
-event upset.memory.overpgfltlimit@chip/memory-controller/dimm/rank;
-
-/*
- * If we have not reached the per-rank limit on faulted pages then
- * continue to explain ereport observations as upsets which can lead
- * lead to page fault diagnoses if the serd engine trips.
- */
-prop upset.memory.page_sb@chip/memory-controller/dimm/rank
- { CONTAINS_RANK && SINGLE_BIT_CE && !RANK_PGFLT_LIMIT_REACHED } (0)->
- ereport.cpu.amd.dc.inf_sys_ecc1@chip/cpu,
- ereport.cpu.amd.bu.s_ecc1@chip/cpu,
- ereport.cpu.amd.nb.mem_ce@chip/cpu;
-
-prop upset.memory.page_ck@chip/memory-controller/dimm/rank
- { CONTAINS_RANK && MULTI_BIT_CE && !RANK_PGFLT_LIMIT_REACHED } (0)->
- /* no dc.inf_sys_ecc1 or bu.s_ecc1 in ChipKill mode */
- ereport.cpu.amd.nb.mem_ce@chip/cpu;
-
-/*
- * If we have reached the per-rank limit on faulted pages then diagnose
- * further observations on the rank to a engine-less upset (i.e., discard
- * them).
- */
-prop upset.memory.overpgfltlimit@chip/memory-controller/dimm/rank
- { CONTAINS_RANK && RANK_PGFLT_LIMIT_REACHED } (1)->
- ereport.cpu.amd.dc.inf_sys_ecc1@chip/cpu,
- ereport.cpu.amd.bu.s_ecc1@chip/cpu,
- ereport.cpu.amd.nb.mem_ce@chip/cpu;
-
-prop fault.memory.page_sb@chip/memory-controller/dimm/rank (1)->
- ereport.memory.page_sb_trip@chip/memory-controller/dimm/rank;
-
-prop fault.memory.page_ck@chip/memory-controller/dimm/rank (1)->
- ereport.memory.page_ck_trip@chip/memory-controller/dimm/rank;
-
-prop fault.memory.page_sb@chip/memory-controller/dimm/rank
- { CONTAINS_RANK && SET_ADDR && SET_OFFSET } (0)->
- ereport.cpu.amd.dc.inf_sys_ecc1@chip/cpu,
- ereport.cpu.amd.bu.s_ecc1@chip/cpu,
- ereport.cpu.amd.nb.mem_ce@chip/cpu;
-
-prop fault.memory.page_ck@chip/memory-controller/dimm/rank
- { CONTAINS_RANK && SET_ADDR && SET_OFFSET } (0)->
- ereport.cpu.amd.dc.inf_sys_ecc1@chip/cpu,
- ereport.cpu.amd.bu.s_ecc1@chip/cpu,
- ereport.cpu.amd.nb.mem_ce@chip/cpu;
-
-/*
- * Discard memory ereports that do not indicate a resource.
- */
-prop upset.memory.discard1@chip/cpu
- { !RESOURCE_EXISTS } (1)->
- ereport.cpu.amd.ic.inf_sys_ecc1@chip/cpu,
- ereport.cpu.amd.dc.inf_sys_ecc1@chip/cpu,
- ereport.cpu.amd.bu.s_ecc1@chip/cpu,
- ereport.cpu.amd.nb.mem_ce@chip/cpu;
-
-/* #DIMM_SCU#
+/*
* "Single-correctable-unit" DIMM faults are diagnosed when the total number of
* page faults (diagnosed from repeated single-bit or multibit-chipkills)
* from any one rank on that DIMM reaches a threshold. A "correctable unit"
@@ -330,81 +240,49 @@ prop upset.memory.discard1@chip/cpu
*
* Implementation: we maintain parallel SERD engines to the page_sb and
* page_ck engines, which trip in unison. On trip it generates a distinct
- * ereport which we diagnose to a fault if the threshold has been
- * reached, or to a throwaway upset if not.
- *
+ * ereport which we diagnose to a fault if the threshold has been reached.
*/
-
-#define DIMM_SB_FIT 2000
-#define DIMM_CK_FIT 4000
-
-event fault.memory.dimm_sb@chip/memory-controller/dimm/rank,
- FITrate=DIMM_SB_FIT, FRU=dimm, ASRU=dimm,
- action=confcall("rewrite-ASRU"); /* rewrite non-leaf ASRU in mem scheme */
-
-event fault.memory.dimm_ck@chip/memory-controller/dimm/rank,
- FITrate=DIMM_CK_FIT, FRU=dimm, ASRU=dimm,
- action=confcall("rewrite-ASRU"); /* rewrite non-leaf ASRU in mem scheme */
-
-event ereport.memory.dimm_sb_trip@chip/memory-controller/dimm/rank
- { within(5s) };
-engine serd.memory.dimm_sb@chip/memory-controller/dimm/rank,
- N=PAGE_SB_COUNT, T=PAGE_SB_TIME, method=persistent,
- trip=ereport.memory.dimm_sb_trip@chip/memory-controller/dimm/rank;
-event upset.memory.dimm_sb@chip/memory-controller/dimm/rank,
- engine=serd.memory.dimm_sb@chip/memory-controller/dimm/rank;
-
-event ereport.memory.dimm_ck_trip@chip/memory-controller/dimm/rank
- { within(5s) };
-engine serd.memory.dimm_ck@chip/memory-controller/dimm/rank,
- N=PAGE_CK_COUNT, T=PAGE_CK_TIME, method=persistent,
- trip=ereport.memory.dimm_ck_trip@chip/memory-controller/dimm/rank;
-event upset.memory.dimm_ck@chip/memory-controller/dimm/rank,
- engine=serd.memory.dimm_ck@chip/memory-controller/dimm/rank;
-
-event upset.memory.discard2@chip/memory-controller/dimm/rank;
-
-prop upset.memory.dimm_sb@chip/memory-controller/dimm/rank
- { CONTAINS_RANK && SINGLE_BIT_CE } (0)->
+prop fault.memory.page_sb@chip/memory-controller/dimm/rank
+ { CONTAINS_RANK && SINGLE_BIT_CE &&
+ SB_PGFLTS + CK_PGFLTS < RANK_PGFLT_MAX && SET_ADDR && SET_OFFSET } (1)->
ereport.cpu.amd.dc.inf_sys_ecc1@chip/cpu,
ereport.cpu.amd.bu.s_ecc1@chip/cpu,
ereport.cpu.amd.nb.mem_ce@chip/cpu;
-prop upset.memory.dimm_ck@chip/memory-controller/dimm/rank
- { CONTAINS_RANK && MULTI_BIT_CE } (0)->
+prop fault.memory.page_ck@chip/memory-controller/dimm/rank
+ { CONTAINS_RANK && !SINGLE_BIT_CE &&
+ SB_PGFLTS + CK_PGFLTS < RANK_PGFLT_MAX && SET_ADDR && SET_OFFSET } (1)->
+ ereport.cpu.amd.dc.inf_sys_ecc1@chip/cpu,
+ ereport.cpu.amd.bu.s_ecc1@chip/cpu,
ereport.cpu.amd.nb.mem_ce@chip/cpu;
-/*
- * The following two propogations diagnose a fault.memory.dimm_sb when
- * either the dimm_sb or dimm_ck engine trips (for a new page fault)
- * and the total number of page faults (sb and ck) exceeds the threshold
- * value with the majority being from sb page faults.
- */
-prop fault.memory.dimm_sb@chip/memory-controller/dimm/rank (0)->
- ereport.memory.dimm_sb_trip@chip/memory-controller/dimm/rank
- { SB_PGFLTS + CK_PGFLTS > RANK_THRESH && SB_PGFLTS > RANK_THRESH / 2 };
+prop fault.memory.dimm_sb@chip/memory-controller/dimm/rank
+ { CONTAINS_RANK && SB_PGFLTS + CK_PGFLTS > RANK_THRESH &&
+ SB_PGFLTS > RANK_THRESH / 2 } (1)->
+ ereport.cpu.amd.dc.inf_sys_ecc1@chip/cpu,
+ ereport.cpu.amd.bu.s_ecc1@chip/cpu,
+ ereport.cpu.amd.nb.mem_ce@chip/cpu;
-prop fault.memory.dimm_sb@chip/memory-controller/dimm/rank (0)->
- ereport.memory.dimm_ck_trip@chip/memory-controller/dimm/rank
- { SB_PGFLTS + CK_PGFLTS > RANK_THRESH && SB_PGFLTS > RANK_THRESH / 2 };
+prop fault.memory.dimm_ck@chip/memory-controller/dimm/rank
+ { CONTAINS_RANK && SB_PGFLTS + CK_PGFLTS > RANK_THRESH &&
+ CK_PGFLTS > RANK_THRESH / 2 } (1)->
+ ereport.cpu.amd.nb.mem_ce@chip/cpu;
/*
- * The following two propogation diagnose a fault.memory.dimm_ck when
- * either the dimm_sb or dimm_ck engine trip (for a new page fault)
- * and the total number of page faults (sb and ck) exceeds the threshold
- * value with the majority being from ck page faults.
+ * If the address is not valid then no resource member will be included
+ * in a nb.mem_ce or nb.mem_ue ereport. These cases should be rare.
+ * We will also discard all inf_sys_ecc1 events detected at the ic since they
+ * have no syndrome and therefore no resource information.
+ * We will discard such ereports. An alternative may be to SERD them
+ * on a per MC basis and trip if we see too many such events.
*/
-prop fault.memory.dimm_ck@chip/memory-controller/dimm/rank (0)->
- ereport.memory.dimm_sb_trip@chip/memory-controller/dimm/rank
- { SB_PGFLTS + CK_PGFLTS > RANK_THRESH && CK_PGFLTS > RANK_THRESH / 2 };
-
-prop fault.memory.dimm_ck@chip/memory-controller/dimm/rank (0)->
- ereport.memory.dimm_ck_trip@chip/memory-controller/dimm/rank
- { SB_PGFLTS + CK_PGFLTS > RANK_THRESH && CK_PGFLTS > RANK_THRESH / 2 };
-
-prop upset.memory.discard2@chip/memory-controller/dimm/rank (1)->
- ereport.memory.dimm_sb_trip@chip/memory-controller/dimm/rank,
- ereport.memory.dimm_ck_trip@chip/memory-controller/dimm/rank;
+event upset.memory.discard1@chip/cpu;
+prop upset.memory.discard1@chip/cpu
+ { !RESOURCE_EXISTS } (1)->
+ ereport.cpu.amd.ic.inf_sys_ecc1@chip/cpu,
+ ereport.cpu.amd.dc.inf_sys_ecc1@chip/cpu,
+ ereport.cpu.amd.bu.s_ecc1@chip/cpu,
+ ereport.cpu.amd.nb.mem_ce@chip/cpu;
/* #DIMM_UE#
* #PAGE_UE#
@@ -414,72 +292,35 @@ prop upset.memory.discard2@chip/memory-controller/dimm/rank (1)->
* - inf_sys_eccm : reported by ic or dc; the ic does not report a syndrome
* - s_eccm : reported by bu
*
- * Note we use a SERD engine here simply as a way of ensuring that we get
- * both dimm and page faults reported.
- *
* Since on production systems we force HT Sync Flood on uncorrectable
* memory errors (if not already set as such by the BIOS, as it should be)
* we won't actually receive these ereports since the system will be reset.
*/
-#define DIMM_UE_FIT 6000
-
event ereport.cpu.amd.ic.inf_sys_eccm@chip/cpu{within(5s)};
event ereport.cpu.amd.dc.inf_sys_eccm@chip/cpu{within(5s)};
event ereport.cpu.amd.bu.s_eccm@chip/cpu{within(5s)};
event ereport.cpu.amd.nb.mem_ue@chip/cpu{within(5s)};
-event fault.memory.dimm_ue@chip/memory-controller/dimm/rank,
- FITrate=DIMM_UE_FIT, FRU=dimm, ASRU=dimm,
- action=confcall("rewrite-ASRU"); /* rewrite non-leaf ASRU in mem scheme */
-
-event fault.memory.page_ue@chip/memory-controller/dimm/rank,
- FITrate=PAGE_FIT, FRU=dimm, ASRU=dimm/rank, message=0,
- action=confcall("rewrite-ASRU"); /* rewrite ASRU to identify page in rank */
-
-event ereport.memory.dimm_ue_trip@chip/memory-controller/dimm/rank{within(5s)};
-engine serd.memory.dimm_ue@chip/memory-controller/dimm/rank,
- N=0, T=1h, method=persistent,
- trip=ereport.memory.dimm_ue_trip@chip/memory-controller/dimm/rank;
-event upset.memory.dimm_ue@chip/memory-controller/dimm/rank,
- engine=serd.memory.dimm_ue@chip/memory-controller/dimm/rank;
+event fault.memory.dimm_ue@chip/memory-controller/dimm/rank;
+event fault.memory.page_ue@chip/memory-controller/dimm/rank, message=0,
+ response=0;
-event ereport.memory.page_ue_trip@chip/memory-controller/dimm/rank{within(5s)};
-engine serd.memory.page_ue@chip/memory-controller/dimm/rank,
- N=0, T=1h, method=persistent,
- trip=ereport.memory.page_ue_trip@chip/memory-controller/dimm/rank;
-event upset.memory.page_ue@chip/memory-controller/dimm/rank,
- engine=serd.memory.page_ue@chip/memory-controller/dimm/rank;
-
-event upset.memory.discard3@chip/cpu;
-
-prop upset.memory.page_ue@chip/memory-controller/dimm/rank
- { CONTAINS_RANK } (0)->
- ereport.cpu.amd.ic.inf_sys_eccm@chip/cpu,
- ereport.cpu.amd.dc.inf_sys_eccm@chip/cpu,
- ereport.cpu.amd.bu.s_eccm@chip/cpu,
- ereport.cpu.amd.nb.mem_ue@chip/cpu;
-
-prop upset.memory.dimm_ue@chip/memory-controller/dimm/rank
- { CONTAINS_RANK } (0)->
+prop fault.memory.dimm_ue@chip/memory-controller/dimm/rank
+ { CONTAINS_RANK } (1)->
ereport.cpu.amd.ic.inf_sys_eccm@chip/cpu,
ereport.cpu.amd.dc.inf_sys_eccm@chip/cpu,
ereport.cpu.amd.bu.s_eccm@chip/cpu,
ereport.cpu.amd.nb.mem_ue@chip/cpu;
-prop fault.memory.page_ue@chip/memory-controller/dimm/rank (1)->
- ereport.memory.page_ue_trip@chip/memory-controller/dimm/rank;
-
prop fault.memory.page_ue@chip/memory-controller/dimm/rank
- { CONTAINS_RANK && SET_ADDR && SET_OFFSET } (0)->
+ { CONTAINS_RANK && SET_ADDR && SET_OFFSET } (1)->
ereport.cpu.amd.ic.inf_sys_eccm@chip/cpu,
ereport.cpu.amd.dc.inf_sys_eccm@chip/cpu,
ereport.cpu.amd.bu.s_eccm@chip/cpu,
ereport.cpu.amd.nb.mem_ue@chip/cpu;
-prop fault.memory.dimm_ue@chip/memory-controller/dimm/rank (1)->
- ereport.memory.dimm_ue_trip@chip/memory-controller/dimm/rank;
-
+event upset.memory.discard3@chip/cpu;
prop upset.memory.discard3@chip/cpu
{ !RESOURCE_EXISTS } (1)->
ereport.cpu.amd.ic.inf_sys_eccm@chip/cpu,
@@ -499,11 +340,7 @@ prop upset.memory.discard3@chip/cpu
*/
event ereport.cpu.amd.mc.cs_testfail@chip/memory-controller{within(5s)};
-
-event fault.memory.dimm_testfail@chip/memory-controller/dimm/rank,
- FITrate=1000, ASRU=dimm, FRU=dimm,
- action=confcall("rewrite-ASRU"); /* rewrite non-leaf ASRU in mem scheme */
-
+event fault.memory.dimm_testfail@chip/memory-controller/dimm/rank;
event error.memory.cs_testfail@chip/memory-controller/chip-select;
#define CONTAINS_CS (payloadprop_contains("resource", \
@@ -514,9 +351,9 @@ prop error.memory.cs_testfail@chip/memory-controller/chip-select (1)->
{ CONTAINS_CS };
#define CSMATCH(s) \
- (confprop_defined(asru(chip/memory-controller/chip-select), s) && \
- confprop(asru(chip/memory-controller/chip-select), s) == \
- confprop(asru(chip/memory-controller/dimm/rank), "csname"))
+ (confprop_defined(chip/memory-controller/chip-select, s) && \
+ confprop(chip/memory-controller/chip-select, s) == \
+ confprop(chip/memory-controller/dimm/rank, "csname"))
prop fault.memory.dimm_testfail@chip/memory-controller/dimm/rank (1)->
error.memory.cs_testfail@chip/memory-controller/chip-select
@@ -531,32 +368,11 @@ prop fault.memory.dimm_testfail@chip/memory-controller/dimm/rank (1)->
*/
event ereport.cpu.amd.nb.dramaddr_par@chip/cpu{within(5s)};
-
-event fault.cpu.amd.dramchannel@chip/memory-controller/dram-channel,
- FITrate=1000, ASRU=dram-channel;
-
-#define GET_CHANNEL ($chan = (payloadprop("IA32_MCi_STATUS") >> 32 & 0x200) ? \
- 1 : 0)
+event fault.cpu.amd.dramchannel@chip/memory-controller/dram-channel, response=0;
prop fault.cpu.amd.dramchannel@chip/memory-controller/dram-channel[y] (0)->
- ereport.cpu.amd.nb.dramaddr_par@chip/cpu { GET_CHANNEL && $chan == y };
-
-/*
- * l2 cache data errors.
- */
-
-#define L2CACHEDATA_FIT 1000
-#define L2CACHEDATA_SB_COUNT 3
-#define L2CACHEDATA_SB_TIME 12h
-
-event fault.cpu.amd.l2cachedata@chip/cpu, FITrate=L2CACHEDATA_FIT,
- FRU=chip, ASRU=chip/cpu;
-event error.cpu.amd.l2cachedata_sb@chip/cpu;
-event error.cpu.amd.l2cachedata_mb@chip/cpu;
-
-prop fault.cpu.amd.l2cachedata@chip/cpu (1)->
- error.cpu.amd.l2cachedata_sb@chip/cpu,
- error.cpu.amd.l2cachedata_mb@chip/cpu;
+ ereport.cpu.amd.nb.dramaddr_par@chip/cpu {
+ ((payloadprop("IA32_MCi_STATUS") >> 32 & 0x200) ? 1 : 0) == y };
/* #L2D_SINGLE#
* A single bit data array fault in an l2 cache can cause:
@@ -564,30 +380,17 @@ prop fault.cpu.amd.l2cachedata@chip/cpu (1)->
* - inf_l2_ecc1 : reported by ic on this cpu
* - inf_l2_ecc1 : reported by dc on this cpu
* - l2d_ecc1 : reported by bu on copyback or on snoop from another cpu
- *
- * Single-bit errors are diagnosed to cache upsets. SERD engines are used
- * to count upsets resulting from CEs.
*/
+#define L2CACHEDATA_SB_COUNT 3
+#define L2CACHEDATA_SB_TIME 12h
+
event ereport.cpu.amd.ic.inf_l2_ecc1@chip/cpu{within(5s)};
event ereport.cpu.amd.dc.inf_l2_ecc1@chip/cpu{within(5s)};
event ereport.cpu.amd.bu.l2d_ecc1@chip/cpu{within(5s)};
-event ereport.cpu.amd.l2d_sb_trip@chip/cpu{within(5s)};
-
engine serd.cpu.amd.l2d_sb@chip/cpu,
- N=L2CACHEDATA_SB_COUNT, T=L2CACHEDATA_SB_TIME, method=persistent,
- trip=ereport.cpu.amd.l2d_sb_trip@chip/cpu;
-
-event upset.cpu.amd.l2d_sb@chip/cpu,
- engine=serd.cpu.amd.l2d_sb@chip/cpu;
-
-prop upset.cpu.amd.l2d_sb@chip/cpu (1)->
- ereport.cpu.amd.ic.inf_l2_ecc1@chip/cpu,
- ereport.cpu.amd.dc.inf_l2_ecc1@chip/cpu,
- ereport.cpu.amd.bu.l2d_ecc1@chip/cpu;
-
-prop error.cpu.amd.l2cachedata_sb@chip/cpu (1)->
- ereport.cpu.amd.l2d_sb_trip@chip/cpu;
+ N=L2CACHEDATA_SB_COUNT, T=L2CACHEDATA_SB_TIME;
+event fault.cpu.amd.l2cachedata@chip/cpu, engine=serd.cpu.amd.l2d_sb@chip/cpu;
prop fault.cpu.amd.l2cachedata@chip/cpu (0)->
ereport.cpu.amd.ic.inf_l2_ecc1@chip/cpu,
@@ -606,61 +409,27 @@ event ereport.cpu.amd.ic.inf_l2_eccm@chip/cpu{within(5s)};
event ereport.cpu.amd.dc.inf_l2_eccm@chip/cpu{within(5s)};
event ereport.cpu.amd.bu.l2d_eccm@chip/cpu{within(5s)};
-prop error.cpu.amd.l2cachedata_mb@chip/cpu (1)->
+prop fault.cpu.amd.l2cachedata@chip/cpu
+ { setserdincrement(L2CACHEDATA_SB_COUNT + 1) } (0)->
ereport.cpu.amd.ic.inf_l2_eccm@chip/cpu,
ereport.cpu.amd.dc.inf_l2_eccm@chip/cpu,
ereport.cpu.amd.bu.l2d_eccm@chip/cpu;
-prop fault.cpu.amd.l2cachedata@chip/cpu (0)->
- ereport.cpu.amd.ic.inf_l2_eccm@chip/cpu,
- ereport.cpu.amd.dc.inf_l2_eccm@chip/cpu,
- ereport.cpu.amd.bu.l2d_eccm@chip/cpu;
-
-/*
- * l2 cache main tag errors
- */
-
-#define L2CACHETAG_FIT 1000
-#define L2CACHETAG_SB_COUNT 3
-#define L2CACHETAG_SB_TIME 12h
-
-event fault.cpu.amd.l2cachetag@chip/cpu, FITrate=L2CACHETAG_FIT,
- FRU=chip, ASRU=chip/cpu;
-event error.cpu.amd.l2cachetag_sb@chip/cpu;
-event error.cpu.amd.l2cachetag_mb@chip/cpu;
-
-prop fault.cpu.amd.l2cachetag@chip/cpu (1)->
- error.cpu.amd.l2cachetag_sb@chip/cpu,
- error.cpu.amd.l2cachetag_mb@chip/cpu;
-
/* #L2T_SINGLE#
* A single bit tag array fault in an l2 cache can cause:
*
* - l2t_ecc1 : reported by bu on this cpu when detected during snoop
* - l2t_par : reported by bu on this cpu when detected other than during snoop
- *
- * Note that the bu.l2t_par ereport could be due to a single bit or multi bit
- * event. If the l2t_sb_trip has already triggered it will be treated as another
- * ce, otherwise it will be treated as a ue event.
*/
+#define L2CACHETAG_SB_COUNT 3
+#define L2CACHETAG_SB_TIME 12h
+
event ereport.cpu.amd.bu.l2t_ecc1@chip/cpu{within(5s)};
event ereport.cpu.amd.bu.l2t_par@chip/cpu{within(5s)};
-event ereport.cpu.amd.l2t_sb_trip@chip/cpu{within(5s)};
-
engine serd.cpu.amd.l2t_sb@chip/cpu,
- N=L2CACHETAG_SB_COUNT, T=L2CACHETAG_SB_TIME, method=persistent,
- trip=ereport.cpu.amd.l2t_sb_trip@chip/cpu;
-
-event upset.cpu.amd.l2t_sb@chip/cpu,
- engine=serd.cpu.amd.l2t_sb@chip/cpu;
-
-prop upset.cpu.amd.l2t_sb@chip/cpu (1)->
- ereport.cpu.amd.bu.l2t_ecc1@chip/cpu,
- ereport.cpu.amd.bu.l2t_par@chip/cpu;
-
-prop error.cpu.amd.l2cachetag_sb@chip/cpu (1)->
- ereport.cpu.amd.l2t_sb_trip@chip/cpu;
+ N=L2CACHETAG_SB_COUNT, T=L2CACHETAG_SB_TIME;
+event fault.cpu.amd.l2cachetag@chip/cpu, engine=serd.cpu.amd.l2t_sb@chip/cpu;
prop fault.cpu.amd.l2cachetag@chip/cpu (0)->
ereport.cpu.amd.bu.l2t_ecc1@chip/cpu,
@@ -675,11 +444,8 @@ prop fault.cpu.amd.l2cachetag@chip/cpu (0)->
event ereport.cpu.amd.bu.l2t_eccm@chip/cpu{within(5s)};
-prop error.cpu.amd.l2cachetag_mb@chip/cpu (1)->
- ereport.cpu.amd.bu.l2t_eccm@chip/cpu,
- ereport.cpu.amd.bu.l2t_par@chip/cpu;
-
-prop fault.cpu.amd.l2cachetag@chip/cpu (0)->
+prop fault.cpu.amd.l2cachetag@chip/cpu
+ { setserdincrement(L2CACHETAG_SB_COUNT + 1) } (0)->
ereport.cpu.amd.bu.l2t_eccm@chip/cpu,
ereport.cpu.amd.bu.l2t_par@chip/cpu;
@@ -689,28 +455,14 @@ prop fault.cpu.amd.l2cachetag@chip/cpu (0)->
* - data_par : reported by ic on this cpu
*/
-#define ICACHEDATA_FIT 1000
#define ICACHEDATA_SB_COUNT 2
#define ICACHEDATA_SB_TIME 168h
event ereport.cpu.amd.ic.data_par@chip/cpu{within(5s)};
-event ereport.cpu.amd.ic_dp_trip@chip/cpu{within(5s)};
-
-event fault.cpu.amd.icachedata@chip/cpu, FITrate=ICACHEDATA_FIT,
- FRU=chip, ASRU=chip/cpu;
-
engine serd.cpu.amd.icachedata@chip/cpu,
- N=ICACHEDATA_SB_COUNT, T=ICACHEDATA_SB_TIME, method=persistent,
- trip=ereport.cpu.amd.ic_dp_trip@chip/cpu;
-
-event upset.cpu.amd.icachedata@chip/cpu,
- engine=serd.cpu.amd.icachedata@chip/cpu;
-
-prop upset.cpu.amd.icachedata@chip/cpu (1)->
- ereport.cpu.amd.ic.data_par@chip/cpu;
-
-prop fault.cpu.amd.icachedata@chip/cpu (1)->
- ereport.cpu.amd.ic_dp_trip@chip/cpu;
+ N=ICACHEDATA_SB_COUNT, T=ICACHEDATA_SB_TIME;
+event fault.cpu.amd.icachedata@chip/cpu,
+ engine=serd.cpu.amd.icachedata@chip/cpu;
prop fault.cpu.amd.icachedata@chip/cpu (0)->
ereport.cpu.amd.ic.data_par@chip/cpu;
@@ -721,28 +473,13 @@ prop fault.cpu.amd.icachedata@chip/cpu (0)->
* - tag_par : reported by ic on this cpu
*/
-#define ICACHETAG_FIT 1000
#define ICACHETAG_SB_COUNT 2
#define ICACHETAG_SB_TIME 168h
event ereport.cpu.amd.ic.tag_par@chip/cpu{within(5s)};
-event ereport.cpu.amd.ic_tp_trip@chip/cpu{within(5s)};
-
-event fault.cpu.amd.icachetag@chip/cpu, FITrate=ICACHETAG_FIT,
- FRU=chip, ASRU=chip/cpu;
-
engine serd.cpu.amd.icachetag@chip/cpu,
- N=ICACHETAG_SB_COUNT, T=ICACHETAG_SB_TIME, method=persistent,
- trip=ereport.cpu.amd.ic_tp_trip@chip/cpu;
-
-event upset.cpu.amd.icachetag@chip/cpu,
- engine=serd.cpu.amd.icachetag@chip/cpu;
-
-prop upset.cpu.amd.icachetag@chip/cpu (1)->
- ereport.cpu.amd.ic.tag_par@chip/cpu;
-
-prop fault.cpu.amd.icachetag@chip/cpu (1)->
- ereport.cpu.amd.ic_tp_trip@chip/cpu;
+ N=ICACHETAG_SB_COUNT, T=ICACHETAG_SB_TIME;
+event fault.cpu.amd.icachetag@chip/cpu, engine=serd.cpu.amd.icachetag@chip/cpu;
prop fault.cpu.amd.icachetag@chip/cpu (0)->
ereport.cpu.amd.ic.tag_par@chip/cpu;
@@ -753,12 +490,8 @@ prop fault.cpu.amd.icachetag@chip/cpu (0)->
* - stag_par : reported by ic on this cpu
*/
-#define ICACHESTAG_FIT 1000
-
event ereport.cpu.amd.ic.stag_par@chip/cpu{within(5s)};
-
-event fault.cpu.amd.icachestag@chip/cpu, FITrate=ICACHESTAG_FIT,
- FRU=chip, ASRU=chip/cpu;
+event fault.cpu.amd.icachestag@chip/cpu;
prop fault.cpu.amd.icachestag@chip/cpu (1)->
ereport.cpu.amd.ic.stag_par@chip/cpu;
@@ -769,28 +502,13 @@ prop fault.cpu.amd.icachestag@chip/cpu (1)->
* - l1tlb_par : reported by ic on this cpu
*/
-#define ICACHEL1TLB_FIT 1000
#define ICACHEL1TLB_SB_COUNT 2
#define ICACHEL1TLB_SB_TIME 168h
event ereport.cpu.amd.ic.l1tlb_par@chip/cpu{within(5s)};
-event ereport.cpu.amd.ic_l1tlb_trip@chip/cpu{within(5s)};
-
-event fault.cpu.amd.l1itlb@chip/cpu, FITrate=ICACHEL1TLB_FIT,
- FRU=chip, ASRU=chip/cpu;
-
engine serd.cpu.amd.l1itlb@chip/cpu,
- N=ICACHEL1TLB_SB_COUNT, T=ICACHEL1TLB_SB_TIME, method=persistent,
- trip=ereport.cpu.amd.ic_l1tlb_trip@chip/cpu;
-
-event upset.cpu.amd.l1itlb@chip/cpu,
- engine=serd.cpu.amd.l1itlb@chip/cpu;
-
-prop upset.cpu.amd.l1itlb@chip/cpu (1)->
- ereport.cpu.amd.ic.l1tlb_par@chip/cpu;
-
-prop fault.cpu.amd.l1itlb@chip/cpu (1)->
- ereport.cpu.amd.ic_l1tlb_trip@chip/cpu;
+ N=ICACHEL1TLB_SB_COUNT, T=ICACHEL1TLB_SB_TIME;
+event fault.cpu.amd.l1itlb@chip/cpu, engine=serd.cpu.amd.l1itlb@chip/cpu;
prop fault.cpu.amd.l1itlb@chip/cpu (0)->
ereport.cpu.amd.ic.l1tlb_par@chip/cpu;
@@ -801,88 +519,38 @@ prop fault.cpu.amd.l1itlb@chip/cpu (0)->
* - l2tlb_par : reported by ic on this cpu
*/
-#define ICACHEL2TLB_FIT 1000
#define ICACHEL2TLB_SB_COUNT 2
#define ICACHEL2TLB_SB_TIME 168h
event ereport.cpu.amd.ic.l2tlb_par@chip/cpu{within(5s)};
-event ereport.cpu.amd.ic_l2tlb_trip@chip/cpu{within(5s)};
-
-event fault.cpu.amd.l2itlb@chip/cpu, FITrate=ICACHEL2TLB_FIT,
- FRU=chip, ASRU=chip/cpu;
-
engine serd.cpu.amd.l2itlb@chip/cpu,
- N=ICACHEL2TLB_SB_COUNT, T=ICACHEL2TLB_SB_TIME, method=persistent,
- trip=ereport.cpu.amd.ic_l2tlb_trip@chip/cpu;
-
-event upset.cpu.amd.l2itlb@chip/cpu,
- engine=serd.cpu.amd.l2itlb@chip/cpu;
-
-prop upset.cpu.amd.l2itlb@chip/cpu (1)->
- ereport.cpu.amd.ic.l2tlb_par@chip/cpu;
-
-prop fault.cpu.amd.l2itlb@chip/cpu (1)->
- ereport.cpu.amd.ic_l2tlb_trip@chip/cpu;
+ N=ICACHEL2TLB_SB_COUNT, T=ICACHEL2TLB_SB_TIME;
+event fault.cpu.amd.l2itlb@chip/cpu, engine=serd.cpu.amd.l2itlb@chip/cpu;
prop fault.cpu.amd.l2itlb@chip/cpu (0)->
ereport.cpu.amd.ic.l2tlb_par@chip/cpu;
-/*
- * dcache data errors
- */
-
-#define DCACHEDATA_FIT 1000
-#define DCACHEDATA_SB_COUNT 2
-#define DCACHEDATA_SB_TIME 168h
-
-event fault.cpu.amd.dcachedata@chip/cpu, FITrate=DCACHEDATA_FIT,
- FRU=chip, ASRU=chip/cpu;
-event error.cpu.amd.dcachedata_sb@chip/cpu;
-event error.cpu.amd.dcachedata_mb@chip/cpu;
-
-prop fault.cpu.amd.dcachedata@chip/cpu (1)->
- error.cpu.amd.dcachedata_sb@chip/cpu,
- error.cpu.amd.dcachedata_mb@chip/cpu;
-
/* #DCD_SINGLE#
* A single bit data array fault in an D cache can cause:
*
* - data_ecc1 : reported by dc on this cpu by scrubber
* - data_ecc1_uc : reported by dc on this cpu other than by scrubber
*
- * Make data_ecc1_uc fault immediately as it may have caused a panic
+ * Make data_ecc1_uc fault immediately as it may have caused a panic, so
+ * it is handled by the multi-bit case in the following section.
*/
+#define DCACHEDATA_SB_COUNT 2
+#define DCACHEDATA_SB_TIME 168h
+
event ereport.cpu.amd.dc.data_ecc1@chip/cpu{within(5s)};
event ereport.cpu.amd.dc.data_ecc1_uc@chip/cpu{within(5s)};
-event ereport.cpu.amd.dc_sb_trip@chip/cpu{within(5s)};
-
engine serd.cpu.amd.dc_sb@chip/cpu,
- N=DCACHEDATA_SB_COUNT, T=DCACHEDATA_SB_TIME, method=persistent,
- trip=ereport.cpu.amd.dc_sb_trip@chip/cpu;
-
-engine serd.cpu.amd.dc_sb_uc@chip/cpu,
- N=0, T=1hr, method=persistent,
- trip=ereport.cpu.amd.dc_sb_trip@chip/cpu;
-
-event upset.cpu.amd.dc_sb@chip/cpu,
- engine=serd.cpu.amd.dc_sb@chip/cpu;
-
-event upset.cpu.amd.dc_sb_uc@chip/cpu,
- engine=serd.cpu.amd.dc_sb_uc@chip/cpu;
-
-prop upset.cpu.amd.dc_sb@chip/cpu (1)->
- ereport.cpu.amd.dc.data_ecc1@chip/cpu;
-
-prop upset.cpu.amd.dc_sb_uc@chip/cpu (1)->
- ereport.cpu.amd.dc.data_ecc1_uc@chip/cpu;
-
-prop error.cpu.amd.dcachedata_sb@chip/cpu (1)->
- ereport.cpu.amd.dc_sb_trip@chip/cpu;
+ N=DCACHEDATA_SB_COUNT, T=DCACHEDATA_SB_TIME;
+event fault.cpu.amd.dcachedata@chip/cpu, engine=serd.cpu.amd.dc_sb@chip/cpu;
prop fault.cpu.amd.dcachedata@chip/cpu (0)->
- ereport.cpu.amd.dc.data_ecc1@chip/cpu,
- ereport.cpu.amd.dc.data_ecc1_uc@chip/cpu;
+ ereport.cpu.amd.dc.data_ecc1@chip/cpu;
/* #DCD_MULTI#
* A multi-bit data array fault in an D cache can cause:
@@ -892,11 +560,10 @@ prop fault.cpu.amd.dcachedata@chip/cpu (0)->
event ereport.cpu.amd.dc.data_eccm@chip/cpu{within(5s)};
-prop error.cpu.amd.dcachedata_mb@chip/cpu (1)->
- ereport.cpu.amd.dc.data_eccm@chip/cpu;
-
-prop fault.cpu.amd.dcachedata@chip/cpu (0)->
- ereport.cpu.amd.dc.data_eccm@chip/cpu;
+prop fault.cpu.amd.dcachedata@chip/cpu
+ { setserdincrement(L2CACHETAG_SB_COUNT + 1) } (0)->
+ ereport.cpu.amd.dc.data_eccm@chip/cpu,
+ ereport.cpu.amd.dc.data_ecc1_uc@chip/cpu;
/* #DCT_PAR#
* A tag array parity fault in an D cache can cause:
@@ -904,12 +571,8 @@ prop fault.cpu.amd.dcachedata@chip/cpu (0)->
* - tag_par : reported by dc on this cpu
*/
-#define DCACHETAG_FIT 1000
-
event ereport.cpu.amd.dc.tag_par@chip/cpu{within(5s)};
-
-event fault.cpu.amd.dcachetag@chip/cpu, FITrate=DCACHETAG_FIT,
- FRU=chip, ASRU=chip/cpu;
+event fault.cpu.amd.dcachetag@chip/cpu;
prop fault.cpu.amd.dcachetag@chip/cpu (1)->
ereport.cpu.amd.dc.tag_par@chip/cpu;
@@ -920,12 +583,8 @@ prop fault.cpu.amd.dcachetag@chip/cpu (1)->
* - stag_par : reported by dc on this cpu
*/
-#define DCACHESTAG_FIT 1000
-
event ereport.cpu.amd.dc.stag_par@chip/cpu{within(5s)};
-
-event fault.cpu.amd.dcachestag@chip/cpu, FITrate=DCACHESTAG_FIT,
- FRU=chip, ASRU=chip/cpu;
+event fault.cpu.amd.dcachestag@chip/cpu;
prop fault.cpu.amd.dcachestag@chip/cpu (1)->
ereport.cpu.amd.dc.stag_par@chip/cpu;
@@ -936,12 +595,8 @@ prop fault.cpu.amd.dcachestag@chip/cpu (1)->
* - l1tlb_par : reported by dc on this cpu
*/
-#define L1DTLB_FIT 1000
-
event ereport.cpu.amd.dc.l1tlb_par@chip/cpu{within(5s)};
-
-event fault.cpu.amd.l1dtlb@chip/cpu, FITrate=L1DTLB_FIT,
- FRU=chip, ASRU=chip/cpu;
+event fault.cpu.amd.l1dtlb@chip/cpu;
prop fault.cpu.amd.l1dtlb@chip/cpu (1)->
ereport.cpu.amd.dc.l1tlb_par@chip/cpu;
@@ -952,12 +607,8 @@ prop fault.cpu.amd.l1dtlb@chip/cpu (1)->
* - l2tlb_par : reported by dc on this cpu
*/
-#define L2DTLB_FIT 1000
-
event ereport.cpu.amd.dc.l2tlb_par@chip/cpu{within(5s)};
-
-event fault.cpu.amd.l2dtlb@chip/cpu, FITrate=L2DTLB_FIT,
- FRU=chip, ASRU=chip/cpu;
+event fault.cpu.amd.l2dtlb@chip/cpu;
prop fault.cpu.amd.l2dtlb@chip/cpu (1)->
ereport.cpu.amd.dc.l2tlb_par@chip/cpu;
diff --git a/usr/src/cmd/fm/eversholt/files/i386/i86pc/gcpu.esc b/usr/src/cmd/fm/eversholt/files/i386/i86pc/gcpu.esc
index cc098771be..8ea5add988 100644
--- a/usr/src/cmd/fm/eversholt/files/i386/i86pc/gcpu.esc
+++ b/usr/src/cmd/fm/eversholt/files/i386/i86pc/gcpu.esc
@@ -20,7 +20,7 @@
*/
/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -38,10 +38,6 @@
#pragma dictionary "GMCA"
-fru motherboard/chip;
-
-asru motherboard/chip/cpu;
-
/*
* Ereports for Simple error codes.
*/
@@ -59,47 +55,19 @@ SMPL_EVENT(internal_unclassified);
/*
* Propogations for all but "external" and "unknown" simple errors.
- * If the error is uncorrected we produce a fault immediately, otherwise
- * we diagnose it to an upset and decalre a fault when the SERD engine
- * trips.
+ * If the error is uncorrected we produce a fault immediately by incrementing
+ * by N+1, otherwise we declare a fault when the SERD engine trips.
*/
-/* Simple fault event */
-event fault.cpu.generic-x86.internal@chip/cpu,
- ASRU=motherboard/chip/cpu, FRU=motherboard/chip,
- FITrate=1000;
+#define SMPL_N 3
-/* Produced when the correctable engine trips */
-event ereport.cpu.generic-x86.simple_trip@chip/cpu { within(1s) };
-
-/* Upset to diagnose corrected events to */
-event upset.cpu.generic-x86.simple@chip/cpu
+engine serd.cpu.generic-x86.simple@chip/cpu, N=SMPL_N, T=72h;
+event fault.cpu.generic-x86.internal@chip/cpu,
engine=serd.cpu.generic-x86.simple@chip/cpu;
-/* SERD engine for corrected simple errors */
-engine serd.cpu.generic-x86.simple@chip/cpu,
- N=3, T=72h, method=persistent,
- trip=ereport.cpu.generic-x86.simple_trip@chip/cpu;
-
-#define STATUS_UC \
- (payloadprop("error_uncorrected") + 0 == 1)
-
-/* Diagnose corrected events to upsets */
-prop upset.cpu.generic-x86.simple@chip/cpu
- { !STATUS_UC } (1)->
- ereport.cpu.generic-x86.microcode_rom_parity@chip/cpu,
- ereport.cpu.generic-x86.internal_timer@chip/cpu,
- ereport.cpu.generic-x86.unclassified@chip/cpu,
- ereport.cpu.generic-x86.internal_unclassified@chip/cpu,
- ereport.cpu.generic-x86.frc@chip/cpu;
-
-/* When the correctable engine trips, diagnose a fault */
-prop fault.cpu.generic-x86.internal@chip/cpu (0)->
- ereport.cpu.generic-x86.simple_trip@chip/cpu;
-
-/* Diagnose uncorrected events to faults */
prop fault.cpu.generic-x86.internal@chip/cpu
- { STATUS_UC } (0)->
+ { payloadprop("error_uncorrected") == 1 ?
+ setserdincrement(SMPL_N + 1) : 1 } (1)->
ereport.cpu.generic-x86.microcode_rom_parity@chip/cpu,
ereport.cpu.generic-x86.internal_timer@chip/cpu,
ereport.cpu.generic-x86.unclassified@chip/cpu,
@@ -163,7 +131,7 @@ CMPND_EVENT(bus_interconnect_memory);
CMPND_EVENT(bus_interconnect_io);
/*
- * Compound error propogations for all but bus_interconnect*.
+ * Compound error propogations
*
* We resist the temptation propogate, for example, a single dcache fault
* to all ereports mentioning dcache (l0dcache, l1dcache, l2dcache, dcache).
@@ -172,41 +140,30 @@ CMPND_EVENT(bus_interconnect_io);
*
* Corrected errors are SERDed and produce a fault when the engine fires;
* the same fault is diagnosed immediately for a corresponding uncorrected
- * error.
+ * error by incrementing the serd engine by n + 1.
*/
#define CMPND_FLT_PROP_1(erptleaf, fltleaf, n, t) \
- /* Declare the fault that we can diagnose here */ \
+ engine serd.cpu.generic-x86.fltleaf@chip/cpu, N=n, T=t; \
event fault.cpu.generic-x86.fltleaf@chip/cpu, \
- FITrate=1000, \
- FRU=motherboard/chip, \
- ASRU=motherboard/chip/cpu; \
- \
- /* Produced when the correctable engine trips */ \
- event ereport.cpu.generic-x86.fltleaf/**/_error@chip/cpu \
- { within(1s) }; \
- \
- /* Upset to diagnose corrected events to */ \
- event upset.cpu.generic-x86.fltleaf@chip/cpu, \
engine=serd.cpu.generic-x86.fltleaf@chip/cpu; \
\
- /* SERD engine for corrected events */ \
- engine serd.cpu.generic-x86.fltleaf@chip/cpu, \
- N=n, T=t, method=persistent, \
- trip=ereport.cpu.generic-x86.fltleaf/**/_error@chip/cpu; \
- \
- /* Diagnose corrected events to the corresponding upset */ \
- prop upset.cpu.generic-x86.fltleaf@chip/cpu (1)-> \
- ereport.cpu.generic-x86.erptleaf@chip/cpu; \
- \
- /* When the engine trips, diagnose a fault */ \
- prop fault.cpu.generic-x86.fltleaf@chip/cpu (0)-> \
- ereport.cpu.generic-x86.fltleaf/**/_error@chip/cpu; \
- \
- /* Produce immediate faults for uncorrected errors */ \
- prop fault.cpu.generic-x86.fltleaf@chip/cpu (0)-> \
+ prop fault.cpu.generic-x86.fltleaf@chip/cpu (0)-> \
+ ereport.cpu.generic-x86.erptleaf@chip/cpu; \
+ prop fault.cpu.generic-x86.fltleaf@chip/cpu \
+ { setserdincrement(n + 1) } (0)-> \
ereport.cpu.generic-x86.erptleaf/**/_uc@chip/cpu
+#define CMPND_FLT_PROP_2(erptleaf, fltleaf, n, t) \
+ engine serd.cpu.generic-x86.fltleaf@chip/cpu, N=n, T=t; \
+ event fault.cpu.generic-x86.fltleaf@chip/cpu, retire=0, \
+ response=0, engine=serd.cpu.generic-x86.fltleaf@chip/cpu; \
+ \
+ prop fault.cpu.generic-x86.fltleaf@chip/cpu (0)-> \
+ ereport.cpu.generic-x86.erptleaf@chip/cpu; \
+ prop fault.cpu.generic-x86.fltleaf@chip/cpu \
+ { setserdincrement(n + 1) } (0)-> \
+ ereport.cpu.generic-x86.erptleaf/**/_uc@chip/cpu
CMPND_FLT_PROP_1(l0cache, l0cache, 3, 72h);
CMPND_FLT_PROP_1(l1cache, l1cache, 3, 72h);
@@ -238,43 +195,6 @@ CMPND_FLT_PROP_1(l1icache, l1icache, 3, 72h);
CMPND_FLT_PROP_1(l2icache, l2icache, 3, 72h);
CMPND_FLT_PROP_1(icache, icache, 12, 72h);
-/*
- * Compound error propogations for bus_interconnect* - as above but
- * with no FRU.
- */
-
-#define CMPND_FLT_PROP_2(erptleaf, fltleaf, n, t) \
- /* Declare the fault that we can diagnose here */ \
- event fault.cpu.generic-x86.fltleaf@chip/cpu, \
- FITrate=1000, \
- ASRU=motherboard/chip/cpu; \
- \
- /* Produced when the correctable engine trips */ \
- event ereport.cpu.generic-x86.fltleaf/**/_error@chip/cpu \
- { within(1s) }; \
- \
- /* Upset to diagnose corrected events to */ \
- event upset.cpu.generic-x86.fltleaf@chip/cpu, \
- engine=serd.cpu.generic-x86.fltleaf@chip/cpu; \
- \
- /* SERD engine for corrected events */ \
- engine serd.cpu.generic-x86.fltleaf@chip/cpu, \
- N=n, T=t, method=persistent, \
- trip=ereport.cpu.generic-x86.fltleaf/**/_error@chip/cpu; \
- \
- /* Diagnose corrected events to the corresponding upset */ \
- prop upset.cpu.generic-x86.fltleaf@chip/cpu (1)-> \
- ereport.cpu.generic-x86.erptleaf@chip/cpu; \
- \
- /* When the engine trips, diagnose a fault */ \
- prop fault.cpu.generic-x86.fltleaf@chip/cpu (0)-> \
- ereport.cpu.generic-x86.fltleaf/**/_error@chip/cpu; \
- \
- /* Produce immediate faults for uncorrected errors */ \
- prop fault.cpu.generic-x86.fltleaf@chip/cpu (0)-> \
- ereport.cpu.generic-x86.erptleaf/**/_uc@chip/cpu
-
-
CMPND_FLT_PROP_2(bus_interconnect, bus_interconnect, 10, 72h);
CMPND_FLT_PROP_2(bus_interconnect_memory, bus_interconnect_memory, 10, 72h);
CMPND_FLT_PROP_2(bus_interconnect_io, bus_interconnect_io, 10, 72h);
diff --git a/usr/src/cmd/fm/eversholt/files/i386/i86pc/gcpu_amd.esc b/usr/src/cmd/fm/eversholt/files/i386/i86pc/gcpu_amd.esc
index f6c81d74f3..a01ccbb928 100644
--- a/usr/src/cmd/fm/eversholt/files/i386/i86pc/gcpu_amd.esc
+++ b/usr/src/cmd/fm/eversholt/files/i386/i86pc/gcpu_amd.esc
@@ -20,7 +20,7 @@
*/
/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -76,13 +76,8 @@
#define PAGE_SB_COUNT 3
#define PAGE_SB_TIME 24h
-fru chip;
-
#define CSPATH chip/memory-controller/dram-channel/chip-select
-asru chip/cpu;
-asru CSPATH;
-
/*
* ADDR_VALID is true if the ereport payload includes IA32_MCi_ADDR.
*/
@@ -103,7 +98,7 @@ event ereport.cpu.generic-x86.mem_ce@chip/cpu { within(1s) };
event ereport.cpu.generic-x86.mem_ue@chip/cpu { within(1s) };
/*
- * ========= Propogations for correctable page faults ============
+ * ========= Propogations for correctable memory faults ==========
* | |
* | Discard mem_ce with no resource in the ereport payload. |
* | Discard mem_ce with no address info - we can't fault the |
@@ -112,7 +107,7 @@ event ereport.cpu.generic-x86.mem_ue@chip/cpu { within(1s) };
* | For a mem_ce ereport detected by a given chip/cpu (as per |
* | the payload detector info) whose resource payload member |
* | includes a chip/memory-controller/dram-channel/chip-select |
- * | (CSPATH) for the same chip number, diagnose to an upset event |
+ * | (CSPATH) for the same chip number, diagnose to an fault event |
* | associated with a per-CSPATH SERD engine as long as we are |
* | below the page fault limit for this CSPATH (defined below); |
* | if we are over that limit then discard the event since we |
@@ -125,210 +120,64 @@ event ereport.cpu.generic-x86.mem_ue@chip/cpu { within(1s) };
* | the trip, and increment a per-CSPATH counter to count page |
* | faults on that chip-select from repeated correctable errors. |
* | |
- * | A mem_ue ereport produces an immediate page_ue fault. |
+ * | A dimm_ce fault is diagnosed when we have faulted an |
+ * | excessive number of page_ce faults on a chip-select - more |
+ * | than CE_DIMMSB_THRESH. |
* |===============================================================|
*/
-/* Counter for page faults diagnosed on a chip-select */
-engine stat.cepgflt@CSPATH;
-
#define CS_PGFLT_LIMIT_REACHED (count(stat.cepgflt@CSPATH) > CS_PAGEFLT_MAX)
+#define CS_DIMMSB_THRESH_REACHED \
+ (count(stat.cepgflt@CSPATH) >= CS_DIMMSB_THRESH)
-/* Page fault event for repeated correctable errors */
+engine stat.cepgflt@CSPATH;
+engine serd.memory.generic-x86.page_ce@CSPATH, N=PAGE_SB_COUNT, T=PAGE_SB_TIME;
event fault.memory.generic-x86.page_ce@CSPATH,
- FITrate=1000, /* meaningless */
- message=0, /* do not message individual pageflts */
- ASRU=CSPATH,
+ message=0, response=0, /* do not message individual pageflts */
count=stat.cepgflt@CSPATH, /* increment on pageflt diagnosis */
- action=confcall("rewrite-ASRU"); /* identify page in chip-select */
-
-/* Upset to diagnose correctable ereports to */
-event upset.memory.generic-x86.page_ce@CSPATH,
engine=serd.memory.generic-x86.page_ce@CSPATH;
+engine serd.memory.generic-x86.dimm_ce@CSPATH, N=PAGE_SB_COUNT, T=PAGE_SB_TIME;
+event fault.memory.generic-x86.dimm_ce@CSPATH,
+ engine=serd.memory.generic-x86.dimm_ce@CSPATH;
-/* Synthetic ereport generated when page_ce SERD engine trips */
-event ereport.memory.generic-x86.page_ce_trip@CSPATH { within(1s) };
-
-/* SERD engine for each chip-select */
-engine serd.memory.generic-x86.page_ce@CSPATH,
- N=PAGE_SB_COUNT, T=PAGE_SB_TIME,
- method=persistent,
- trip=ereport.memory.generic-x86.page_ce_trip@CSPATH;
+prop fault.memory.generic-x86.page_ce@CSPATH
+ { ADDR_VALID && CONTAINS_CS && !CS_PGFLT_LIMIT_REACHED && SET_ADDR } (1)->
+ ereport.cpu.generic-x86.mem_ce@chip/cpu;
-/* Upset to discard events to when we're over limit */
-event upset.memory.generic-x86.overpgfltlimit@CSPATH;
+prop fault.memory.generic-x86.dimm_ce@CSPATH
+ { ADDR_VALID && CONTAINS_CS && CS_DIMMSB_THRESH_REACHED } (1)->
+ ereport.cpu.generic-x86.mem_ce@chip/cpu;
-/*
- * Discard ereports with no resource or no address info
- */
event upset.memory.generic-x86.discard@chip/cpu;
prop upset.memory.generic-x86.discard@chip/cpu
{ !payloadprop_defined("resource") || !ADDR_VALID } (1)->
ereport.cpu.generic-x86.mem_ce@chip/cpu;
/*
- * For as long as we are below the page fault limit diagnose correctable ereport
- * observations as upsets to feed the SERD engine.
- */
-prop upset.memory.generic-x86.page_ce@CSPATH
- { ADDR_VALID && CONTAINS_CS && !CS_PGFLT_LIMIT_REACHED } (0)->
- ereport.cpu.generic-x86.mem_ce@chip/cpu;
-
-/*
- * Discard ereports if we are above the page fault limit on this chip-select,
- */
-prop upset.memory.generic-x86.overpgfltlimit@CSPATH
- { ADDR_VALID && CONTAINS_CS && CS_PGFLT_LIMIT_REACHED } (1)->
- ereport.cpu.generic-x86.mem_ce@chip/cpu;
-
-/* Diagnose a page fault when the pagefault SERD engine trips */
-prop fault.memory.generic-x86.page_ce@CSPATH (1)->
- ereport.memory.generic-x86.page_ce_trip@CSPATH;
-
-/* Include address info in the page fault diagnosed, for rewrite-ASRU */
-prop fault.memory.generic-x86.page_ce@CSPATH
- { ADDR_VALID && CONTAINS_CS && SET_ADDR } (0)->
- ereport.cpu.generic-x86.mem_ce@chip/cpu;
-
-/*
- * ========= Propogations for correctable DIMM faults ============
- * | |
- * | A dimm_ce fault is diagnosed when we have faulted an |
- * | excessive number of page_ce faults on a chip-select - more |
- * | than CE_DIMMSB_THRESH. |
- * | |
- * | A dimm_ue fault is diagnosed on the first uncorrectable |
- * | ereport from a chip-select. |
- * |===============================================================|
- */
-
-/* DIMM fault event for CE failures */
-event fault.memory.generic-x86.dimm_ce@CSPATH,
- ASRU=CSPATH,
- FITrate=1000, /* meaningless */
- action=confcall("rewrite-ASRU"); /* rewrite in "mem" FMRI scheme */
-
-#define CS_DIMMSB_THRESH_REACHED \
- (count(stat.cepgflt@CSPATH) == CS_DIMMSB_THRESH)
-
-/*
- * This upset is diagnosed in parallel with upset.memory.generic-x86.page_ce
- * on the CSPATH, and the associated SERD engine has the same parameters
- * as serd.memory.generic-x86.page_ce@CSPATH so they fire at the same time.
- * When this one fires we check whether we have reached the diagnosis
- * threshold for a dimm_ce.
- */
-event upset.memory.generic-x86.dimm_ce@CSPATH,
- engine=serd.memory.generic-x86.dimm_ce_limitchk@CSPATH;
-
-event ereport.memory.generic-x86.dimm_ce_limitchk@CSPATH { within(1s) };
-
-engine serd.memory.generic-x86.dimm_ce_limitchk@CSPATH,
- N=PAGE_SB_COUNT, T=PAGE_SB_TIME,
- method=persistent,
- trip=ereport.memory.generic-x86.dimm_ce_limitchk@CSPATH;
-
-prop upset.memory.generic-x86.dimm_ce@CSPATH
- { ADDR_VALID && CONTAINS_CS } (0)->
- ereport.cpu.generic-x86.mem_ce@chip/cpu;
-
-prop fault.memory.generic-x86.dimm_ce@CSPATH
- { CS_DIMMSB_THRESH_REACHED } (0)->
- ereport.memory.generic-x86.dimm_ce_limitchk@CSPATH;
-
-event upset.memory.generic-x86.discard2@CSPATH;
-prop upset.memory.generic-x86.discard2@CSPATH
- { !CS_DIMMSB_THRESH_REACHED } (0)->
- ereport.memory.generic-x86.dimm_ce_limitchk@CSPATH;
-
-/*
* ========= Propogations for uncorrectable page faults ==========
* | |
- * | A UE produces an immediate page fault. But we also want a |
- * | corresponding dimm fault and since we do not like multi-entry |
- * | suspect lists we arrange two distinct fault management |
- * | exercises by diagnosing a mem_ue to two upset events that |
- * | feed instant-trip SERD engines. Yuck. |
+ * | A UE produces an immediate page fault.
* |===============================================================|
*/
-/* Page fault event for uncorrectable errors */
event fault.memory.generic-x86.page_ue@CSPATH,
- FITrate=1000, /* meaningless */
- message=0, /* do not message individual pageflts */
- count=stat.cepgflt@CSPATH, /* increment on pageflt diagnosis */
- action=confcall("rewrite-ASRU"); /* identify page in chip-select */
+ message=0, response=0, /* do not message individual pageflts */
+ count=stat.cepgflt@CSPATH; /* increment on pageflt diagnosis */
+event fault.memory.generic-x86.dimm_ue@CSPATH;
-/* Upset for page fault */
-event upset.memory.generic-x86.page_ue@CSPATH,
- engine=serd.memory.generic-x86.page_ue@CSPATH;
-
-/* Synthetic erport generated when the page_ue SERD engine trips */
-event ereport.memory.generic-x86.page_ue_trip@CSPATH { within(1s) };
+prop fault.memory.generic-x86.page_ue@CSPATH
+ { ADDR_VALID && CONTAINS_CS && SET_ADDR } (1)->
+ ereport.cpu.generic-x86.mem_ue@chip/cpu;
-/* Instant-trip engine for page fault */
-engine serd.memory.generic-x86.page_ue@CSPATH,
- N=0, T=1h, /* trip on first upset */
- method=persistent,
- trip=ereport.memory.generic-x86.page_ue_trip@CSPATH;
+prop fault.memory.generic-x86.dimm_ue@CSPATH
+ { ADDR_VALID && CONTAINS_CS } (1)->
+ ereport.cpu.generic-x86.mem_ue@chip/cpu;
-/* Discard events with no address info */
event upset.memory.generic-x86.discard3@CSPATH;
prop upset.memory.generic-x86.discard3@CSPATH
{ !payloadprop_defined("resource") || !ADDR_VALID } (1)->
ereport.cpu.generic-x86.mem_ue@chip/cpu;
-/* Diagnose a page_ue upset on a mem_ue event */
-prop upset.memory.generic-x86.page_ue@CSPATH
- { ADDR_VALID && CONTAINS_CS } (0)->
- ereport.cpu.generic-x86.mem_ue@chip/cpu;
-
-/* On the immediate SERD trip diagnose a page fault */
-prop fault.memory.generic-x86.page_ue@CSPATH (1)->
- ereport.memory.generic-x86.page_ue_trip@CSPATH;
-
-/* Include address info in the page fault diagnosed, for rewrite-ASRU */
-prop fault.memory.generic-x86.page_ue@CSPATH
- { ADDR_VALID && CONTAINS_CS && SET_ADDR } (0)->
- ereport.cpu.generic-x86.mem_ue@chip/cpu;
-
-/*
- * ========= Propogations for uncorrectable dimm faults ==========
- * | |
- * | A UE produces an immediate dimm fault. As explained in the |
- * | page_ue block comment above we split the exercise in two in |
- * | order to produce independent page_ue and dimm_ue diagnoses. |
- * |===============================================================|
- */
-
-/* Dimm fault for an uncorrectable error */
-event fault.memory.generic-x86.dimm_ue@CSPATH,
- ASRU=CSPATH,
- FITrate=1000, /* meaningless */
- action=confcall("rewrite-ASRU"); /* rewrite in "mem" FMRI scheme */
-
-/* Upset for dimm fault */
-event upset.memory.generic-x86.dimm_ue@CSPATH,
- engine=serd.memory.generic-x86.dimm_ue@CSPATH;
-
-/* Sythetic ereport generated when the dimm_ue SERD engine trips */
-event ereport.memory.generic-x86.dimm_ue_trip@CSPATH { within(1s) };
-
-/* Instant-trip engine for dimm fault */
-engine serd.memory.generic-x86.dimm_ue@CSPATH,
- N=0, T=1h, /* trip on first upset */
- method=persistent,
- trip=ereport.memory.generic-x86.dimm_ue_trip@CSPATH;
-
-/* Diagnose a dimm_ue upset on a mem_ue event (in addition to page_ue upset) */
-prop upset.memory.generic-x86.dimm_ue@CSPATH
- { CONTAINS_CS } (0)->
- ereport.cpu.generic-x86.mem_ue@chip/cpu;
-
-/* On the immediate SERD trip diagnose a dimm fault */
-prop fault.memory.generic-x86.dimm_ue@CSPATH (1)->
- ereport.memory.generic-x86.dimm_ue_trip@CSPATH;
-
/*
* ========= Propogations for GART Table Walk Errors =============
* | |
diff --git a/usr/src/cmd/fm/eversholt/files/i386/i86pc/intel.esc b/usr/src/cmd/fm/eversholt/files/i386/i86pc/intel.esc
index 6f180e4905..20bd5556ce 100644
--- a/usr/src/cmd/fm/eversholt/files/i386/i86pc/intel.esc
+++ b/usr/src/cmd/fm/eversholt/files/i386/i86pc/intel.esc
@@ -32,12 +32,6 @@
* Eversholt rules for the intel CPU/Memory
*/
-/* CPU errors detected through MCA */
-
-fru motherboard/chip;
-
-asru motherboard/chip/cpu;
-
/*
* Ereports for Simple error codes.
*/
@@ -60,42 +54,11 @@ SMPL_EVENT(internal_unclassified, 1s);
* trips.
*/
-/* Simple fault event */
-event fault.cpu.intel.internal@chip/cpu,
- ASRU=motherboard/chip/cpu, FRU=motherboard/chip,
- FITrate=1000;
-
-/* Produced when the correctable engine trips */
-event ereport.cpu.intel.simple_trip@chip/cpu { within(1s) };
+engine serd.cpu.intel.simple@chip/cpu, N=3, T=72h;
+event fault.cpu.intel.internal@chip/cpu, engine=serd.cpu.intel.simple@chip/cpu;
-/* Upset to diagnose corrected events to */
-event upset.cpu.intel.simple@chip/cpu
- engine=serd.cpu.intel.simple@chip/cpu;
-
-/* SERD engine for corrected simple errors */
-engine serd.cpu.intel.simple@chip/cpu,
- N=3, T=72h, method=persistent,
- trip=ereport.cpu.intel.simple_trip@chip/cpu;
-
-#define STATUS_UC \
- (payloadprop("error_uncorrected") + 0 == 1)
-
-/* Diagnose corrected events to upsets */
-prop upset.cpu.intel.simple@chip/cpu
- { !STATUS_UC } (1)->
- ereport.cpu.intel.microcode_rom_parity@chip/cpu,
- ereport.cpu.intel.internal_timer@chip/cpu,
- ereport.cpu.intel.unclassified@chip/cpu,
- ereport.cpu.intel.internal_unclassified@chip/cpu,
- ereport.cpu.intel.frc@chip/cpu;
-
-/* When the correctable engine trips, diagnose a fault */
-prop fault.cpu.intel.internal@chip/cpu (0)->
- ereport.cpu.intel.simple_trip@chip/cpu;
-
-/* Diagnose uncorrected events to faults */
prop fault.cpu.intel.internal@chip/cpu
- { STATUS_UC } (0)->
+ { payloadprop("error_uncorrected") == 1 ? setserdincrement(4) : 1} (0)->
ereport.cpu.intel.microcode_rom_parity@chip/cpu,
ereport.cpu.intel.internal_timer@chip/cpu,
ereport.cpu.intel.unclassified@chip/cpu,
@@ -171,68 +134,30 @@ CMPND_EVENT(bus_interconnect_io, 1s);
* error.
*/
-#define CMPND_FLT_PROP_1(erptleaf, fltleaf, n, t) \
- /* Declare the fault that we can diagnose here */ \
- event fault.cpu.intel.fltleaf@chip/cpu, \
- FITrate=1000, \
- FRU=motherboard/chip, \
- ASRU=motherboard/chip/cpu; \
- \
- /* Produced when the correctable engine trips */ \
- event ereport.cpu.intel.fltleaf/**/_error@chip/cpu { within(1s) }; \
+#define CMPND_FLT_PROP_1(erptleaf, fltleaf, n, t) \
+ engine serd.cpu.intel.fltleaf@chip/cpu, N=n, T=t; \
+ event fault.cpu.intel.fltleaf@chip/cpu, \
+ engine=serd.cpu.intel.fltleaf@chip/cpu; \
\
- /* Upset to diagnose corrected events to */ \
- event upset.cpu.intel.fltleaf@chip/cpu, \
- engine=serd.cpu.intel.fltleaf@chip/cpu; \
- \
- /* SERD engine for corrected events */ \
- engine serd.cpu.intel.fltleaf@chip/cpu, \
- N=n, T=t, method=persistent, \
- trip=ereport.cpu.intel.fltleaf/**/_error@chip/cpu; \
- \
- /* Diagnose corrected events to the corresponding upset */ \
- prop upset.cpu.intel.fltleaf@chip/cpu (1)-> \
+ prop fault.cpu.intel.fltleaf@chip/cpu (0)-> \
ereport.cpu.intel.erptleaf@chip/cpu; \
\
- /* When the engine trip, diagnose a fault */ \
- prop fault.cpu.intel.fltleaf@chip/cpu (0)-> \
- ereport.cpu.intel.fltleaf/**/_error@chip/cpu; \
- \
- /* Produce immediate faults for uncorrected errors */ \
- prop fault.cpu.intel.fltleaf@chip/cpu (0)-> \
+ prop fault.cpu.intel.fltleaf@chip/cpu \
+ { setserdincrement(n + 1) } (0)-> \
ereport.cpu.intel.erptleaf/**/_uc@chip/cpu
-#define CMPND_FLT_PROP_2(erptleaf, fltleaf, n, t) \
- /* Declare the fault that we can diagnose here */ \
- event fault.cpu.intel.fltleaf@chip/cpu, \
- FITrate=1, \
- ASRU=motherboard/chip/cpu; \
- \
- /* Produced when the correctable engine trips */ \
- event ereport.cpu.intel.fltleaf/**/_error@chip/cpu { within(1s) }; \
+#define CMPND_FLT_PROP_2(erptleaf, fltleaf, n, t) \
+ engine serd.cpu.intel.fltleaf@chip/cpu, N=n, T=t; \
+ event fault.cpu.intel.fltleaf@chip/cpu, retire=0, response=0, \
+ engine=serd.cpu.intel.fltleaf@chip/cpu; \
\
- /* Upset to diagnose corrected events to */ \
- event upset.cpu.intel.fltleaf@chip/cpu, \
- engine=serd.cpu.intel.fltleaf@chip/cpu; \
- \
- /* SERD engine for corrected events */ \
- engine serd.cpu.intel.fltleaf@chip/cpu, \
- N=n, T=t, method=persistent, \
- trip=ereport.cpu.intel.fltleaf/**/_error@chip/cpu; \
- \
- /* Diagnose corrected events to the corresponding upset */ \
- prop upset.cpu.intel.fltleaf@chip/cpu (1)-> \
+ prop fault.cpu.intel.fltleaf@chip/cpu (0)-> \
ereport.cpu.intel.erptleaf@chip/cpu; \
\
- /* When the engine trip, diagnose a fault */ \
- prop fault.cpu.intel.fltleaf@chip/cpu (0)-> \
- ereport.cpu.intel.fltleaf/**/_error@chip/cpu; \
- \
- /* Produce immediate faults for uncorrected errors */ \
- prop fault.cpu.intel.fltleaf@chip/cpu (0)-> \
+ prop fault.cpu.intel.fltleaf@chip/cpu \
+ { setserdincrement(n + 1) } (0)-> \
ereport.cpu.intel.erptleaf/**/_uc@chip/cpu
-
CMPND_FLT_PROP_1(l0cache, l0cache, 3, 72h);
CMPND_FLT_PROP_1(l1cache, l1cache, 3, 72h);
CMPND_FLT_PROP_1(l2cache, l2cache, 3, 72h);
@@ -279,9 +204,7 @@ prop upset.discard@chip/cpu (0)->
/*
* SET_ADDR and SET_OFFSET are used to set a payload value in the fault that
* we diagnose for page faults, to record the physical address of the faulting
- * page. The "asru-" prefix is hooked in the "rewrite-ASRU" confcalls made on
- * diagnosis of associated faults when the libtopo mem scheme rewrites the
- * asru in "mem" scheme.
+ * page.
*/
#define SET_ADDR (!payloadprop_defined("physaddr") || \
setpayloadprop("asru-physaddr", payloadprop("physaddr")))
@@ -289,393 +212,204 @@ prop upset.discard@chip/cpu (0)->
#define SET_OFFSET (!payloadprop_defined("offset") || \
setpayloadprop("asru-offset", payloadprop("offset")))
-#define CE_PGFLTS \
- (count(stat.ce_pgflt@motherboard/memory-controller/dram-channel/dimm))
-#define UE_DIMM \
- (count(stat.ue_dimm@motherboard/memory-controller/dram-channel/dimm))
+engine stat.ce_pgflt@memory-controller/dram-channel/dimm;
-#define PAGE_FIT 1
-#define PAGE_CE_COUNT 2
-#define PAGE_CE_TIME 72h
-
-fru motherboard;
-asru motherboard;
-fru motherboard/memory-controller/dram-channel;
-asru motherboard/memory-controller/dram-channel;
-fru motherboard/memory-controller/dram-channel/dimm;
-asru motherboard/memory-controller/dram-channel/dimm;
-asru motherboard/memory-controller/dram-channel/dimm/rank;
-asru motherboard/chip;
-
-engine stat.ce_pgflt@motherboard/memory-controller/dram-channel/dimm;
-engine stat.ue_dimm@motherboard/memory-controller/dram-channel/dimm;
-
-event ereport.cpu.intel.nb.mem_ue@motherboard/memory-controller{within(12s)};
-event ereport.cpu.intel.nb.fbd.ma@motherboard/memory-controller{within(12s)};
-event fault.memory.intel.page_ue@
- motherboard/memory-controller/dram-channel/dimm/rank,
- FITrate=PAGE_FIT,
- FRU=motherboard/memory-controller/dram-channel/dimm,
- ASRU=motherboard/memory-controller/dram-channel/dimm/rank, message=0,
- action=confcall("rewrite-ASRU"); /* rewrite ASRU to identify page in rank */
-event ereport.memory.page_ue_trip@motherboard/memory-controller{within(12s)};
-engine serd.memory.intel.page_ue@motherboard/memory-controller,
- N=0, T=1h, method=persistent,
- trip=ereport.memory.page_ue_trip@motherboard/memory-controller;
-event upset.memory.intel.page_ue@motherboard/memory-controller,
- engine=serd.memory.intel.page_ue@motherboard/memory-controller;
-
-prop upset.memory.intel.page_ue@motherboard/memory-controller (0)->
- ereport.cpu.intel.bus_interconnect_memory_uc@chip/cpu,
- ereport.cpu.intel.bus_interconnect_uc@chip/cpu,
- ereport.cpu.intel.bus_interconnect_memory@chip/cpu,
- ereport.cpu.intel.bus_interconnect@chip/cpu,
- ereport.cpu.intel.external@chip/cpu;
-
-prop upset.memory.intel.page_ue@motherboard/memory-controller (1)->
- ereport.cpu.intel.nb.mem_ue@motherboard/memory-controller,
- ereport.cpu.intel.nb.fbd.ma@motherboard/memory-controller;
+event ereport.cpu.intel.nb.mem_ue@memory-controller{within(12s)};
+event ereport.cpu.intel.nb.fbd.ma@memory-controller{within(12s)};
+event fault.memory.intel.page_ue@memory-controller/dram-channel/dimm/rank,
+ message=0, response=0;
+event fault.memory.intel.dimm_ue@memory-controller/dram-channel/dimm/rank;
prop fault.memory.intel.page_ue@
- motherboard/memory-controller/dram-channel/dimm/rank[rank_num]
- { UE_DIMM > 0 && payloadprop_defined("rank") &&
- rank_num == payloadprop("rank") &&
+ memory-controller/dram-channel/dimm/rank[rank_num]
+ { payloadprop_defined("rank") && rank_num == payloadprop("rank") &&
(payloadprop_defined("physaddr") || payloadprop_defined("offset")) &&
SET_ADDR && SET_OFFSET } (1)->
- ereport.cpu.intel.nb.mem_ue@motherboard/memory-controller,
- ereport.cpu.intel.nb.fbd.ma@motherboard/memory-controller;
-
-prop fault.memory.intel.page_ue@
- motherboard/memory-controller/dram-channel/dimm/rank (1)->
- ereport.memory.page_ue_trip@motherboard/memory-controller;
+ ereport.cpu.intel.nb.mem_ue@memory-controller,
+ ereport.cpu.intel.nb.fbd.ma@memory-controller;
-event upset.memory.intel.discard@motherboard/memory-controller{within(1s)};
+prop fault.memory.intel.page_ue@memory-controller/dram-channel/dimm/rank (1)->
+ ereport.cpu.intel.nb.mem_ue@memory-controller,
+ ereport.cpu.intel.nb.fbd.ma@memory-controller;
-prop upset.memory.intel.discard@motherboard/memory-controller
- { !payloadprop_defined("rank") || (!payloadprop_defined("physaddr") &&
- !payloadprop_defined("offset")) } (1)->
- ereport.cpu.intel.nb.mem_ue@motherboard/memory-controller,
- ereport.cpu.intel.nb.fbd.ma@motherboard/memory-controller;
-
-prop upset.memory.intel.discard@motherboard/memory-controller (0)->
- ereport.memory.page_ue_trip@motherboard/memory-controller,
+prop fault.memory.intel.page_ue@memory-controller/dram-channel/dimm/rank (0)->
ereport.cpu.intel.bus_interconnect_memory_uc@chip/cpu,
ereport.cpu.intel.bus_interconnect_uc@chip/cpu,
ereport.cpu.intel.bus_interconnect_memory@chip/cpu,
ereport.cpu.intel.bus_interconnect@chip/cpu,
ereport.cpu.intel.external@chip/cpu;
-#define DIMM_UE_FIT 1000
-
-event fault.memory.intel.dimm_ue@
- motherboard/memory-controller/dram-channel/dimm/rank,
- FITrate=DIMM_UE_FIT, FRU=motherboard/memory-controller/dram-channel/dimm,
- ASRU=motherboard/memory-controller/dram-channel/dimm/rank,
- count=stat.dimm_flt@motherboard/memory-controller/dram-channel/dimm,
- action=confcall("rewrite-ASRU"); /* rewrite non-leaf ASRU in mem scheme */
-event ereport.memory.dimm_ue_trip@motherboard/memory-controller{within(12s)};
-engine serd.memory.intel.dimm_ue@motherboard/memory-controller,
- N=0, T=1h, method=persistent,
- trip=ereport.memory.dimm_ue_trip@motherboard/memory-controller;
-event upset.memory.intel.dimm_ue@motherboard/memory-controller,
- engine=serd.memory.intel.dimm_ue@motherboard/memory-controller;
-
-prop upset.memory.intel.dimm_ue@ motherboard/memory-controller (1)->
- ereport.cpu.intel.nb.mem_ue@motherboard/memory-controller,
- ereport.cpu.intel.nb.fbd.ma@motherboard/memory-controller;
-
prop fault.memory.intel.dimm_ue@
- motherboard/memory-controller/dram-channel<channel_num>/dimm/rank[rank_num]
+ memory-controller/dram-channel<channel_num>/dimm/rank[rank_num]
{ payloadprop_defined("rank") && rank_num == payloadprop("rank") } (1)->
- ereport.cpu.intel.nb.mem_ue@motherboard/memory-controller,
- ereport.cpu.intel.nb.fbd.ma@motherboard/memory-controller;
+ ereport.cpu.intel.nb.mem_ue@memory-controller,
+ ereport.cpu.intel.nb.fbd.ma@memory-controller;
-prop upset.memory.intel.dimm_ue@
- motherboard/memory-controller (0)->
- ereport.cpu.intel.bus_interconnect_memory_uc@chip/cpu,
- ereport.cpu.intel.bus_interconnect_uc@chip/cpu,
- ereport.cpu.intel.bus_interconnect_memory@chip/cpu,
- ereport.cpu.intel.bus_interconnect@chip/cpu,
- ereport.cpu.intel.external@chip/cpu;
+prop fault.memory.intel.dimm_ue@memory-controller/dram-channel/dimm/rank (1)->
+ ereport.cpu.intel.nb.mem_ue@memory-controller,
+ ereport.cpu.intel.nb.fbd.ma@memory-controller;
-prop fault.memory.intel.dimm_ue@
- motherboard/memory-controller/dram-channel/dimm/rank (0)->
+prop fault.memory.intel.dimm_ue@memory-controller/dram-channel/dimm/rank (0)->
ereport.cpu.intel.bus_interconnect_memory_uc@chip/cpu,
ereport.cpu.intel.bus_interconnect_uc@chip/cpu,
ereport.cpu.intel.bus_interconnect_memory@chip/cpu,
ereport.cpu.intel.bus_interconnect@chip/cpu,
ereport.cpu.intel.external@chip/cpu;
-prop fault.memory.intel.dimm_ue@
- motherboard/memory-controller/dram-channel/dimm/rank (1)->
- ereport.memory.dimm_ue_trip@motherboard/memory-controller;
-
-event upset.memory.intel.discard1@motherboard/memory-controller{within(1s)};
+event upset.memory.intel.discard@memory-controller{within(1s)};
-prop upset.memory.intel.discard1@motherboard/memory-controller
+prop upset.memory.intel.discard@memory-controller
{ !payloadprop_defined("rank") } (1)->
- ereport.cpu.intel.nb.mem_ue@motherboard/memory-controller,
- ereport.cpu.intel.nb.fbd.ma@motherboard/memory-controller;
+ ereport.cpu.intel.nb.mem_ue@memory-controller,
+ ereport.cpu.intel.nb.fbd.ma@memory-controller;
-prop upset.memory.intel.discard1@motherboard/memory-controller (0)->
- ereport.memory.dimm_ue_trip@motherboard/memory-controller,
+prop upset.memory.intel.discard@memory-controller (0)->
ereport.cpu.intel.bus_interconnect_memory_uc@chip/cpu,
ereport.cpu.intel.bus_interconnect_uc@chip/cpu,
ereport.cpu.intel.bus_interconnect_memory@chip/cpu,
ereport.cpu.intel.bus_interconnect@chip/cpu,
ereport.cpu.intel.external@chip/cpu;
-event ereport.memory.intel.page_trip@
- motherboard/memory-controller/dram-channel/dimm/rank{within(12s)};
-event ereport.cpu.intel.nb.mem_ce@
- motherboard/memory-controller/dram-channel/dimm/rank{within(12s)};
-
-engine serd.memory.intel.page_ce@
- motherboard/memory-controller/dram-channel/dimm/rank,
- N=PAGE_CE_COUNT, T=PAGE_CE_TIME, method=persistent,
- trip=ereport.memory.intel.page_trip@
- motherboard/memory-controller/dram-channel/dimm/rank;
-event upset.memory.intel.page_ce@
- motherboard/memory-controller/dram-channel/dimm/rank,
- engine=serd.memory.intel.page_ce@
- motherboard/memory-controller/dram-channel/dimm/rank;
-
-event fault.memory.intel.page_ce@
- motherboard/memory-controller/dram-channel/dimm/rank,
- FITrate=PAGE_FIT,
- FRU=motherboard/memory-controller/dram-channel/dimm,
- ASRU=motherboard/memory-controller/dram-channel/dimm/rank, message=0,
- count=stat.ce_pgflt@motherboard/memory-controller/dram-channel/dimm,
- action=confcall("rewrite-ASRU"); /* rewrite ASRU to identify page in rank */
-
-prop fault.memory.intel.page_ce@
- motherboard/memory-controller/dram-channel/dimm/rank (1)->
- ereport.memory.intel.page_trip@
- motherboard/memory-controller/dram-channel/dimm/rank;
-
-prop fault.memory.intel.page_ce@
- motherboard/memory-controller/dram-channel/dimm/rank
- { (payloadprop_defined("physaddr") || payloadprop_defined("offset")) &&
- SET_ADDR && SET_OFFSET } (0)->
- ereport.cpu.intel.nb.mem_ce@
- motherboard/memory-controller/dram-channel/dimm/rank;
-
-prop upset.memory.intel.page_ce@
- motherboard/memory-controller/dram-channel/dimm/rank
- { (payloadprop_defined("physaddr") || payloadprop_defined("offset")) &&
- SET_ADDR && SET_OFFSET } (1)->
- ereport.cpu.intel.nb.mem_ce@
- motherboard/memory-controller/dram-channel/dimm/rank;
-
-#define DIMM_CE_FIT 2000
+#define PAGE_CE_COUNT 2
+#define PAGE_CE_TIME 72h
#define DIMM_CE_COUNT 10
#define DIMM_CE_TIME 1week
-event fault.memory.intel.dimm_ce@
- motherboard/memory-controller/dram-channel/dimm/rank,
- FITrate=DIMM_CE_FIT, FRU=motherboard/memory-controller/dram-channel/dimm,
- ASRU=motherboard/memory-controller/dram-channel/dimm/rank,
- action=confcall("rewrite-ASRU"); /* rewrite non-leaf ASRU in mem scheme */
-event upset.memory.discard@motherboard/memory-controller/dram-channel/dimm/rank;
-
-event ereport.memory.intel.dimm_trip@
- motherboard/memory-controller/dram-channel/dimm/rank{within(1s)};
-#define DIMM_CE(label, dimm_size, n, t, fault_rate) \
- engine serd.memory.intel.dimm_ce.label/**/@ \
- motherboard/memory-controller/dram-channel/dimm/rank, \
- N=n, T=t, method=persistent, \
- trip=ereport.memory.intel.dimm_trip@ \
- motherboard/memory-controller/dram-channel/dimm/rank; \
- event upset.memory.intel.dimm_ce.label/**/@ \
- motherboard/memory-controller/dram-channel/dimm/rank, \
- engine=serd.memory.intel.dimm_ce.label/**/@ \
- motherboard/memory-controller/dram-channel/dimm/rank; \
- prop upset.memory.intel.dimm_ce.label/**/@ \
- motherboard/memory-controller/dram-channel/dimm/rank \
- {confprop_defined( \
- fru(motherboard/memory-controller/dram-channel/dimm), \
- "dimm-size") && \
- confprop(fru(motherboard/memory-controller/dram-channel/dimm), \
- "dimm-size") == dimm_size && CE_PGFLTS > fault_rate} (1)-> \
- ereport.cpu.intel.nb.mem_ce@ \
- motherboard/memory-controller/dram-channel/dimm/rank;
-
-DIMM_CE(eight_g, "8G", 8, 1week, 2000)
-DIMM_CE(four_g, "4G", 4, 1week, 1500)
-DIMM_CE(two_g, "2G", 4, 2week, 1000)
-DIMM_CE(one_g, "1G", 4, 4week, 500)
-DIMM_CE(half_g, "512M", 4, 8week, 250)
-DIMM_CE(quarter_g, "256M", 4, 16week, 125)
-
-engine serd.memory.intel.dimm_ce@
- motherboard/memory-controller/dram-channel/dimm/rank,
- N=DIMM_CE_COUNT, T=DIMM_CE_TIME, method=persistent,
- trip=ereport.memory.intel.dimm_trip@
- motherboard/memory-controller/dram-channel/dimm/rank;
-event upset.memory.intel.dimm_ce@
- motherboard/memory-controller/dram-channel/dimm/rank,
- engine=serd.memory.intel.dimm_ce@
- motherboard/memory-controller/dram-channel/dimm/rank;
-prop upset.memory.intel.dimm_ce@
- motherboard/memory-controller/dram-channel/dimm/rank
- {!confprop_defined(fru(motherboard/memory-controller/dram-channel/dimm),
- "dimm-size") && CE_PGFLTS > 512} (1)->
- ereport.cpu.intel.nb.mem_ce@
- motherboard/memory-controller/dram-channel/dimm/rank;
-
-prop fault.memory.intel.dimm_ce@
- motherboard/memory-controller/dram-channel/dimm/rank (1)->
- ereport.memory.intel.dimm_trip@
- motherboard/memory-controller/dram-channel/dimm/rank;
-
-prop upset.memory.discard@
- motherboard/memory-controller/dram-channel/dimm/rank (1)->
- ereport.memory.intel.dimm_trip@
- motherboard/memory-controller/dram-channel/dimm/rank;
-
-event ereport.cpu.intel.nb.fbd.alert@
- motherboard/memory-controller/dram-channel/dimm/rank{within(12s)};
-event fault.memory.intel.fbd.alert@
- motherboard/memory-controller/dram-channel/dimm/rank,
- FITrate=100, ASRU=motherboard/memory-controller/dram-channel/dimm/rank,
- FRU=motherboard/memory-controller/dram-channel/dimm;
-
-prop fault.memory.intel.fbd.alert@
- motherboard/memory-controller/dram-channel/dimm/rank (1)->
- ereport.cpu.intel.nb.fbd.alert@
- motherboard/memory-controller/dram-channel/dimm/rank;
-
-prop fault.memory.intel.fbd.alert@
- motherboard/memory-controller/dram-channel/dimm/rank (0)->
+event ereport.cpu.intel.nb.mem_ce@dimm/rank{within(12s)};
+
+engine serd.memory.intel.page_ce@dimm/rank, N=PAGE_CE_COUNT, T=PAGE_CE_TIME;
+event fault.memory.intel.page_ce@dimm/rank, message=0, response=0,
+ count=stat.ce_pgflt@dimm, engine=serd.memory.intel.page_ce@dimm/rank;
+prop fault.memory.intel.page_ce@dimm/rank
+ { (payloadprop_defined("physaddr") || payloadprop_defined("offset")) &&
+ SET_ADDR && SET_OFFSET } (0)->
+ ereport.cpu.intel.nb.mem_ce@dimm/rank;
+
+engine serd.memory.intel.dimm_ce@dimm/rank, N=DIMM_CE_COUNT, T=DIMM_CE_TIME;
+event fault.memory.intel.dimm_ce@dimm/rank,
+ engine=serd.memory.intel.dimm_ce@dimm/rank;
+event error.memory.intel.dimm_ce@dimm;
+prop fault.memory.intel.dimm_ce@dimm/rank (1)->
+ ereport.cpu.intel.nb.mem_ce@dimm/rank;
+prop fault.memory.intel.dimm_ce@dimm/rank
+ { !confprop_defined(dimm, "dimm-size") } (1)->
+ error.memory.intel.dimm_ce@dimm;
+prop error.memory.intel.dimm_ce@dimm
+ { !confprop_defined(dimm, "dimm-size") &&
+ count(stat.ce_pgflt@dimm) > 512 } (1)->
+ ereport.cpu.intel.nb.mem_ce@dimm/rank;
+
+#define DIMM_CE(dimm_size, n, t, fault_rate) \
+ prop fault.memory.intel.dimm_ce@dimm/rank { \
+ confprop(dimm, "dimm-size") == dimm_size && \
+ setserdn(n) & setserdt(t) } (1)-> \
+ error.memory.intel.dimm_ce@dimm; \
+ prop error.memory.intel.dimm_ce@dimm { \
+ confprop(dimm, "dimm-size") == dimm_size && \
+ count(stat.ce_pgflt@dimm) > fault_rate } (1)-> \
+ ereport.cpu.intel.nb.mem_ce@dimm/rank;
+
+DIMM_CE("8G", 8, 1week, 2000)
+DIMM_CE("4G", 4, 1week, 1500)
+DIMM_CE("2G", 4, 2week, 1000)
+DIMM_CE("1G", 4, 4week, 500)
+DIMM_CE("512M", 4, 8week, 250)
+DIMM_CE("256M", 4, 16week, 125)
+
+event ereport.cpu.intel.nb.fbd.alert@rank{within(12s)};
+event fault.memory.intel.fbd.alert@rank, retire=0;
+
+prop fault.memory.intel.fbd.alert@rank (1)->
+ ereport.cpu.intel.nb.fbd.alert@rank;
+
+prop fault.memory.intel.fbd.alert@rank (0)->
ereport.cpu.intel.bus_interconnect_memory_uc@chip/cpu,
ereport.cpu.intel.bus_interconnect_uc@chip/cpu,
ereport.cpu.intel.bus_interconnect_memory@chip/cpu,
ereport.cpu.intel.bus_interconnect@chip/cpu,
ereport.cpu.intel.external@chip/cpu;
-event ereport.cpu.intel.nb.fbd.crc@
- motherboard/memory-controller/dram-channel/dimm/rank{within(12s)};
-event fault.memory.intel.fbd.crc@
- motherboard/memory-controller/dram-channel/dimm/rank,
- FITrate=100, ASRU=motherboard/memory-controller/dram-channel/dimm/rank,
- FRU=motherboard/memory-controller/dram-channel/dimm;
+event ereport.cpu.intel.nb.fbd.crc@rank{within(12s)};
+event fault.memory.intel.fbd.crc@rank, retire=0;
-prop fault.memory.intel.fbd.crc@
- motherboard/memory-controller/dram-channel/dimm/rank (1)->
- ereport.cpu.intel.nb.fbd.crc@
- motherboard/memory-controller/dram-channel/dimm/rank;
+prop fault.memory.intel.fbd.crc@rank (1)->
+ ereport.cpu.intel.nb.fbd.crc@rank;
-prop fault.memory.intel.fbd.crc@
- motherboard/memory-controller/dram-channel/dimm/rank (0)->
+prop fault.memory.intel.fbd.crc@rank (0)->
ereport.cpu.intel.bus_interconnect_memory_uc@chip/cpu,
ereport.cpu.intel.bus_interconnect_uc@chip/cpu,
ereport.cpu.intel.bus_interconnect_memory@chip/cpu,
ereport.cpu.intel.bus_interconnect@chip/cpu,
ereport.cpu.intel.external@chip/cpu;
-event ereport.cpu.intel.nb.fbd.reset_timeout@motherboard/memory-controller
- {within(12s)};
-event fault.memory.intel.fbd.reset_timeout@motherboard/memory-controller,
- FITrate=1000, ASRU=motherboard/memory-controller/dram-channel/dimm,
- FRU=motherboard/memory-controller/dram-channel/dimm;
+event ereport.cpu.intel.nb.fbd.reset_timeout@memory-controller {within(12s)};
+event fault.memory.intel.fbd.reset_timeout@memory-controller, retire=0;
-prop fault.memory.intel.fbd.reset_timeout@motherboard/memory-controller (1)->
- ereport.cpu.intel.nb.fbd.reset_timeout@motherboard/memory-controller;
+prop fault.memory.intel.fbd.reset_timeout@memory-controller (1)->
+ ereport.cpu.intel.nb.fbd.reset_timeout@memory-controller;
-prop fault.memory.intel.fbd.reset_timeout@motherboard/memory-controller (0)->
+prop fault.memory.intel.fbd.reset_timeout@memory-controller (0)->
ereport.cpu.intel.bus_interconnect_memory_uc@chip/cpu,
ereport.cpu.intel.bus_interconnect_uc@chip/cpu,
ereport.cpu.intel.bus_interconnect_memory@chip/cpu,
ereport.cpu.intel.bus_interconnect@chip/cpu,
ereport.cpu.intel.external@chip/cpu;
-event ereport.cpu.intel.nb.fbd.ch@motherboard/memory-controller/dram-channel
- {within(12s)};
-event fault.memory.intel.fbd.ch@motherboard/memory-controller/dram-channel,
- FITrate=100, ASRU=motherboard/memory-controller/dram-channel/dimm,
- FRU=motherboard/memory-controller/dram-channel/dimm;
-event upset.cpu.intel.nb.fbd.ch@motherboard/memory-controller/dram-channel,
- engine=serd.cpu.intel.nb.fbd.ch@motherboard/memory-controller/dram-channel;
-event ereport.cpu.intel.nb.fbd_ch@motherboard/memory-controller/dram-channel
- {within(12s)};
-
-engine serd.cpu.intel.nb.fbd.ch@motherboard/memory-controller/dram-channel,
- N=2, T=1month, method=persistent,
- trip=ereport.cpu.intel.nb.fbd_ch@motherboard/memory-controller/dram-channel;
+event ereport.cpu.intel.nb.fbd.ch@dram-channel {within(12s)};
+engine serd.cpu.intel.nb.fbd.ch@dram-channel, N=2, T=1month;
+event fault.memory.intel.fbd.ch@dram-channel, retire=0,
+ engine=serd.cpu.intel.nb.fbd.ch@dram-channel;
-prop upset.cpu.intel.nb.fbd.ch@motherboard/memory-controller/dram-channel (1)->
- ereport.cpu.intel.nb.fbd.ch@motherboard/memory-controller/dram-channel;
+prop fault.memory.intel.fbd.ch@dram-channel (1)->
+ ereport.cpu.intel.nb.fbd.ch@dram-channel;
-prop upset.cpu.intel.nb.fbd.ch@motherboard/memory-controller/dram-channel (0)->
+prop fault.memory.intel.fbd.ch@dram-channel (0)->
ereport.cpu.intel.bus_interconnect_memory_uc@chip/cpu,
ereport.cpu.intel.bus_interconnect_uc@chip/cpu,
ereport.cpu.intel.bus_interconnect_memory@chip/cpu,
ereport.cpu.intel.bus_interconnect@chip/cpu,
ereport.cpu.intel.external@chip/cpu;
-prop fault.memory.intel.fbd.ch@
- motherboard/memory-controller/dram-channel (1)->
- ereport.cpu.intel.nb.fbd_ch@motherboard/memory-controller/dram-channel;
+event ereport.cpu.intel.nb.fbd.otf@dram-channel {within(12s)};
+engine serd.cpu.intel.nb.fbd_otf@dram-channel, N=2, T=1week;
+event fault.memory.intel.fbd.otf@dram-channel, retire=0, response=0,
+ engine=serd.cpu.intel.nb.fbd_otf@dram-channel;
+
+prop fault.memory.intel.fbd.otf@dram-channel (1)->
+ ereport.cpu.intel.nb.fbd.otf@dram-channel;
-event ereport.cpu.intel.nb.fbd.otf@motherboard/memory-controller/dram-channel
- {within(12s)};
event ereport.cpu.intel.nb.otf@motherboard {within(12s)};
-event fault.memory.intel.fbd.otf@motherboard/memory-controller/dram-channel,
- FITrate=100, ASRU=motherboard/memory-controller/dram-channel;
-event fault.cpu.intel.nb.otf@motherboard, FITrate=100, ASRU=motherboard;
-event upset.cpu.intel.nb.fbd_otf@motherboard/memory-controller/dram-channel,
- engine=serd.cpu.intel.nb.fbd_otf@motherboard/memory-controller/dram-channel;
-event ereport.cpu.intel.nb.fbd_otf@motherboard/memory-controller/dram-channel
- {within(12s)};
-
-engine serd.cpu.intel.nb.fbd_otf@motherboard/memory-controller/dram-channel,
- N=2, T=1week, method=persistent,
- trip=ereport.cpu.intel.nb.fbd_otf@
- motherboard/memory-controller/dram-channel;
-
-prop upset.cpu.intel.nb.fbd_otf@motherboard/memory-controller/dram-channel (1)->
- ereport.cpu.intel.nb.fbd.otf@motherboard/memory-controller/dram-channel;
-
-prop fault.memory.intel.fbd.otf@
- motherboard/memory-controller/dram-channel (1)->
- ereport.cpu.intel.nb.fbd_otf@motherboard/memory-controller/dram-channel;
-
-prop fault.cpu.intel.nb.otf@ motherboard (1)->
- ereport.cpu.intel.nb.otf@motherboard;
+event fault.cpu.intel.nb.otf@motherboard, retire=0, response=0;
-event ereport.cpu.intel.nb.unknown@motherboard/memory-controller {within(12s)};
-event ereport.cpu.intel.nb.unknown@motherboard/memory-controller/dram-channel
- {within(12s)};
-event ereport.cpu.intel.nb.spd@motherboard/memory-controller/dram-channel
- {within(12s)};
-event upset.discard@motherboard/memory-controller;
+prop fault.cpu.intel.nb.otf@motherboard (1)->
+ ereport.cpu.intel.nb.otf@motherboard;
-prop upset.discard@motherboard/memory-controller (0)->
- ereport.cpu.intel.nb.unknown@motherboard/memory-controller,
- ereport.cpu.intel.nb.unknown@motherboard/memory-controller/dram-channel,
- ereport.cpu.intel.nb.spd@motherboard/memory-controller/dram-channel;
+event ereport.cpu.intel.nb.unknown@memory-controller {within(12s)};
+event ereport.cpu.intel.nb.unknown@memory-controller/dram-channel {within(12s)};
+event ereport.cpu.intel.nb.spd@memory-controller/dram-channel {within(12s)};
+event upset.discard@memory-controller;
-event ereport.cpu.intel.nb.mem_ds@motherboard/memory-controller{within(30s)};
+prop upset.discard@memory-controller (0)->
+ ereport.cpu.intel.nb.unknown@memory-controller,
+ ereport.cpu.intel.nb.unknown@memory-controller/dram-channel,
+ ereport.cpu.intel.nb.spd@memory-controller/dram-channel;
-event fault.memory.intel.fbd.mem_ds@
- motherboard/memory-controller/dram-channel/dimm/rank,
- FITrate=DIMM_UE_FIT,
- ASRU=motherboard/memory-controller/dram-channel/dimm/rank,
- FRU=motherboard/memory-controller/dram-channel/dimm;
+event ereport.cpu.intel.nb.mem_ds@memory-controller{within(30s)};
+event fault.memory.intel.fbd.mem_ds@memory-controller/dram-channel/dimm/rank,
+ retire=0;
prop fault.memory.intel.fbd.mem_ds@
- motherboard/memory-controller/dram-channel/dimm/rank[rank_num]
+ memory-controller/dram-channel/dimm/rank[rank_num]
{ payloadprop_defined("rank") && rank_num == payloadprop("rank") } (1)->
- ereport.cpu.intel.nb.mem_ds@motherboard/memory-controller;
+ ereport.cpu.intel.nb.mem_ds@memory-controller;
-event ereport.cpu.intel.nb.fsb@motherboard/chip{within(12s)};
-event fault.cpu.intel.nb.fsb@motherboard/chip,
- FITrate=10000, ASRU=motherboard/chip, FRU=motherboard/chip;
+event ereport.cpu.intel.nb.fsb@chip{within(12s)};
+event fault.cpu.intel.nb.fsb@chip, retire=0;
-prop fault.cpu.intel.nb.fsb@motherboard/chip (1)->
- ereport.cpu.intel.nb.fsb@motherboard/chip;
+prop fault.cpu.intel.nb.fsb@chip (1)->
+ ereport.cpu.intel.nb.fsb@chip;
-prop fault.cpu.intel.nb.fsb@motherboard/chip (0)->
+prop fault.cpu.intel.nb.fsb@chip (0)->
ereport.cpu.intel.bus_interconnect_memory_uc@chip/cpu,
ereport.cpu.intel.bus_interconnect_uc@chip/cpu,
ereport.cpu.intel.bus_interconnect_memory@chip/cpu,
@@ -683,8 +417,7 @@ prop fault.cpu.intel.nb.fsb@motherboard/chip (0)->
ereport.cpu.intel.external@chip/cpu;
event ereport.cpu.intel.nb.ie@motherboard{within(12s)};
-event fault.cpu.intel.nb.ie@motherboard,
- FITrate=10000, ASRU=motherboard, FRU=motherboard;
+event fault.cpu.intel.nb.ie@motherboard, retire=0;
prop fault.cpu.intel.nb.ie@motherboard (1)->
ereport.cpu.intel.nb.ie@motherboard;
@@ -697,8 +430,7 @@ prop fault.cpu.intel.nb.ie@motherboard (0)->
ereport.cpu.intel.external@chip/cpu;
event ereport.cpu.intel.nb.dma@motherboard{within(12s)};
-event fault.cpu.intel.nb.dma@motherboard,
- FITrate=10000, ASRU=motherboard;
+event fault.cpu.intel.nb.dma@motherboard, retire=0, response=0;
prop fault.cpu.intel.nb.dma@motherboard (1)->
ereport.cpu.intel.nb.dma@motherboard;
@@ -711,29 +443,27 @@ prop fault.cpu.intel.nb.dma@motherboard (0)->
ereport.cpu.intel.external@chip/cpu;
event ereport.cpu.intel.nb.esi@motherboard{within(12s)};
-event ereport.cpu.intel.nb.pex@motherboard/hostbridge{within(12s)};
-event upset.cpu.intel.nb.pex@motherboard/hostbridge;
+event ereport.cpu.intel.nb.pex@hostbridge{within(12s)};
+event upset.cpu.intel.nb.pex@hostbridge;
-prop upset.cpu.intel.nb.pex@motherboard/hostbridge (1)->
+prop upset.cpu.intel.nb.pex@hostbridge (1)->
ereport.cpu.intel.nb.esi@motherboard,
- ereport.cpu.intel.nb.pex@motherboard/hostbridge;
+ ereport.cpu.intel.nb.pex@hostbridge;
-prop upset.cpu.intel.nb.pex@motherboard/hostbridge (0)->
+prop upset.cpu.intel.nb.pex@hostbridge (0)->
ereport.cpu.intel.bus_interconnect_memory_uc@chip/cpu,
ereport.cpu.intel.bus_interconnect_uc@chip/cpu,
ereport.cpu.intel.bus_interconnect_memory@chip/cpu,
ereport.cpu.intel.bus_interconnect@chip/cpu,
ereport.cpu.intel.external@chip/cpu;
-event ereport.cpu.intel.nb.unknown@
- motherboard/memory-controller/dram-channel/dimm/rank{within(12s)};
-event upset.discard@motherboard/memory-controller/dram-channel/dimm/rank;
+event ereport.cpu.intel.nb.unknown@rank{within(12s)};
+event upset.discard@rank;
-prop upset.discard@motherboard/memory-controller/dram-channel/dimm/rank (1)->
- ereport.cpu.intel.nb.unknown@
- motherboard/memory-controller/dram-channel/dimm/rank;
+prop upset.discard@rank (1)->
+ ereport.cpu.intel.nb.unknown@rank;
-prop upset.discard@motherboard/memory-controller/dram-channel/dimm/rank (0)->
+prop upset.discard@rank (0)->
ereport.cpu.intel.bus_interconnect_memory_uc@chip/cpu,
ereport.cpu.intel.bus_interconnect_uc@chip/cpu,
ereport.cpu.intel.bus_interconnect_memory@chip/cpu,
diff --git a/usr/src/cmd/fm/eversholt/files/sparc/SUNW,Sun-Fire-15000/SUNW,Sun-Fire-15000.esc b/usr/src/cmd/fm/eversholt/files/sparc/SUNW,Sun-Fire-15000/SUNW,Sun-Fire-15000.esc
index 99c9bc1931..1e7f06be8e 100644
--- a/usr/src/cmd/fm/eversholt/files/sparc/SUNW,Sun-Fire-15000/SUNW,Sun-Fire-15000.esc
+++ b/usr/src/cmd/fm/eversholt/files/sparc/SUNW,Sun-Fire-15000/SUNW,Sun-Fire-15000.esc
@@ -2,9 +2,8 @@
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License"). You may not use this file except in compliance
- * with the License.
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
@@ -20,7 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -35,7 +34,7 @@
fru cpu;
-event fault.io.datapath@cpu,
+event fault.io.datapath@cpu, retire=0,
FITrate=CPU_FIT, FRU=cpu;
event ereport.io.psy.ecc.pue@hostbridge{within(5s)};
diff --git a/usr/src/cmd/fm/eversholt/files/sparc/sun4/fire.esc b/usr/src/cmd/fm/eversholt/files/sparc/sun4/fire.esc
index 63fb5e5db0..7985960f3b 100644
--- a/usr/src/cmd/fm/eversholt/files/sparc/sun4/fire.esc
+++ b/usr/src/cmd/fm/eversholt/files/sparc/sun4/fire.esc
@@ -205,19 +205,19 @@ prop fault.io.fire.asic@hostbridge/pciexrc (0)->
* -------------
* Errors caused by bad SW or HV
***************/
-event fault.io.fire.sw-epkt@hostbridge/pciexrc,
+event fault.io.fire.sw-epkt@hostbridge/pciexrc, retire=0, response=0,
FITrate=SW_FIT;
-event fault.io.fire.fw-epkt@hostbridge/pciexrc,
+event fault.io.fire.fw-epkt@hostbridge/pciexrc, retire=0, response=0,
FITrate=HV_FIT;
-event fault.io.fire.sw-fw-mismatch@hostbridge/pciexrc,
+event fault.io.fire.sw-fw-mismatch@hostbridge/pciexrc, retire=0, response=0,
FITrate=SW_HV_MISMATCH_FIT;
-event fault.io.fire.hb.sw-config@hostbridge/pciexrc,
+event fault.io.fire.hb.sw-config@hostbridge/pciexrc, retire=0, response=0,
FITrate=SW_FIT;
-event fault.io.fire.dmc.sw-algorithm@hostbridge/pciexrc,
+event fault.io.fire.dmc.sw-algorithm@hostbridge/pciexrc, retire=0, response=0,
FITrate=SW_FIT;
-event fault.io.fire.dmc.sw-state@hostbridge/pciexrc,
+event fault.io.fire.dmc.sw-state@hostbridge/pciexrc, retire=0, response=0,
FITrate=SW_FIT;
-event fault.io.fire.pec.sw-algorithm@hostbridge/pciexrc,
+event fault.io.fire.pec.sw-algorithm@hostbridge/pciexrc, retire=0, response=0,
FITrate=SW_FIT;
event error.io.fire.jbc.driver@hostbridge/pciexrc;
diff --git a/usr/src/cmd/fm/eversholt/files/sparc/sun4u/oberon.esc b/usr/src/cmd/fm/eversholt/files/sparc/sun4u/oberon.esc
index 916499fe14..0a18f85a71 100644
--- a/usr/src/cmd/fm/eversholt/files/sparc/sun4u/oberon.esc
+++ b/usr/src/cmd/fm/eversholt/files/sparc/sun4u/oberon.esc
@@ -19,7 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -113,7 +113,7 @@ prop fault.io.oberon@hostbridge/pciexrc (0)->
*/
#define SW_FIT 5000 /* No real fit rate, SW */
-event fault.io.fire.hb.sw-config@hostbridge/pciexrc,
+event fault.io.fire.hb.sw-config@hostbridge/pciexrc, retire=0, response=0,
FITrate=SW_FIT;
prop fault.io.fire.hb.sw-config@hostbridge/pciexrc (0)->
diff --git a/usr/src/cmd/fm/eversholt/files/sparc/sun4u/psycho.esc b/usr/src/cmd/fm/eversholt/files/sparc/sun4u/psycho.esc
index 391555070b..da5ece375b 100644
--- a/usr/src/cmd/fm/eversholt/files/sparc/sun4u/psycho.esc
+++ b/usr/src/cmd/fm/eversholt/files/sparc/sun4u/psycho.esc
@@ -19,7 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -100,7 +100,7 @@ prop fault.io.hbus@hostbridge (0)->
fru cpu;
-event fault.io.datapath@cpu,
+event fault.io.datapath@cpu, retire=0,
FITrate=CPU_FIT, FRU=cpu;
event error.io.cpu.ecc.thresh@cpu;
diff --git a/usr/src/cmd/fm/eversholt/files/sparc/sun4u/schizo.esc b/usr/src/cmd/fm/eversholt/files/sparc/sun4u/schizo.esc
index 9c3cfe51bf..09957e8654 100644
--- a/usr/src/cmd/fm/eversholt/files/sparc/sun4u/schizo.esc
+++ b/usr/src/cmd/fm/eversholt/files/sparc/sun4u/schizo.esc
@@ -19,7 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -137,7 +137,7 @@ prop upset.io.schizo@hostbridge (0)->
fru cpu;
-event fault.io.datapath@cpu, FITrate=CPU_FIT, FRU=cpu;
+event fault.io.datapath@cpu, FITrate=CPU_FIT, FRU=cpu, retire=0;
event error.io.cpu.ecc.thresh@cpu;
event ereport.io.sch.saf.ssm-dis@hostbridge{within(5s)};
diff --git a/usr/src/cmd/fm/eversholt/files/sparc/sun4u/tomatillo.esc b/usr/src/cmd/fm/eversholt/files/sparc/sun4u/tomatillo.esc
index 5774227fa5..3e3a15fe44 100644
--- a/usr/src/cmd/fm/eversholt/files/sparc/sun4u/tomatillo.esc
+++ b/usr/src/cmd/fm/eversholt/files/sparc/sun4u/tomatillo.esc
@@ -19,7 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -148,7 +148,7 @@ prop error.io.tom.mmu.bva@hostbridge/pcibus (0)->
fru cpu;
-event fault.io.datapath@cpu, FITrate=CPU_FIT, FRU=cpu;
+event fault.io.datapath@cpu, FITrate=CPU_FIT, FRU=cpu, retire=0;
event error.io.tom.jbus.ibe@hostbridge;
diff --git a/usr/src/cmd/fm/eversholt/files/sparc/sun4u/xmits.esc b/usr/src/cmd/fm/eversholt/files/sparc/sun4u/xmits.esc
index 8dc27008f6..51217ef94d 100644
--- a/usr/src/cmd/fm/eversholt/files/sparc/sun4u/xmits.esc
+++ b/usr/src/cmd/fm/eversholt/files/sparc/sun4u/xmits.esc
@@ -19,7 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -161,7 +161,7 @@ prop upset.io.xmits@hostbridge (0)->
fru cpu;
-event fault.io.datapath@cpu, FITrate=CPU_FIT, FRU=cpu;
+event fault.io.datapath@cpu, FITrate=CPU_FIT, FRU=cpu, retire=0;
event error.io.cpu.ecc.thresh@cpu;
event ereport.io.xmits.saf.ssm-dis@hostbridge{within(5s)};
diff --git a/usr/src/cmd/fm/fmd/common/fmd_api.c b/usr/src/cmd/fm/fmd/common/fmd_api.c
index 809cccecb0..5237fa3c44 100644
--- a/usr/src/cmd/fm/fmd/common/fmd_api.c
+++ b/usr/src/cmd/fm/fmd/common/fmd_api.c
@@ -28,6 +28,7 @@
#include <sys/types.h>
#include <sys/fm/protocol.h>
+#include <fm/topo_hc.h>
#include <unistd.h>
#include <signal.h>
@@ -1201,6 +1202,10 @@ fmd_case_add_suspect(fmd_hdl_t *hdl, fmd_case_t *cp, nvlist_t *nvl)
fmd_module_t *mp = fmd_api_module_lock(hdl);
fmd_case_impl_t *cip = fmd_api_case_impl(mp, cp);
char *class;
+ topo_hdl_t *thp;
+ int err;
+ nvlist_t *rsrc = NULL, *asru = NULL, *fru = NULL;
+ char *loc = NULL, *serial = NULL;
if (cip->ci_state >= FMD_CASE_SOLVED) {
fmd_api_error(mp, EFMD_CASE_STATE, "cannot add suspect to "
@@ -1213,6 +1218,77 @@ fmd_case_add_suspect(fmd_hdl_t *hdl, fmd_case_t *cp, nvlist_t *nvl)
"%s: suspect event is missing a class\n", cip->ci_uuid);
}
+ thp = fmd_module_topo_hold(mp);
+ (void) nvlist_lookup_nvlist(nvl, FM_FAULT_RESOURCE, &rsrc);
+ (void) nvlist_lookup_nvlist(nvl, FM_FAULT_ASRU, &asru);
+ (void) nvlist_lookup_nvlist(nvl, FM_FAULT_FRU, &fru);
+ if (rsrc != NULL) {
+ if (strncmp(class, "defect", 6) == 0) {
+ if (asru == NULL && topo_fmri_getprop(thp, rsrc,
+ TOPO_PGROUP_IO, TOPO_IO_MODULE, rsrc,
+ &asru, &err) == 0) {
+ (void) nvlist_add_nvlist(nvl, FM_FAULT_ASRU,
+ asru);
+ nvlist_free(asru);
+ (void) nvlist_lookup_nvlist(nvl, FM_FAULT_ASRU,
+ &asru);
+ }
+ } else {
+ if (topo_fmri_asru(thp, rsrc, &asru, &err) == 0) {
+ (void) nvlist_remove(nvl, FM_FAULT_ASRU,
+ DATA_TYPE_NVLIST);
+ (void) nvlist_add_nvlist(nvl, FM_FAULT_ASRU,
+ asru);
+ nvlist_free(asru);
+ (void) nvlist_lookup_nvlist(nvl, FM_FAULT_ASRU,
+ &asru);
+ }
+ if (topo_fmri_fru(thp, rsrc, &fru, &err) == 0) {
+ (void) nvlist_remove(nvl, FM_FAULT_FRU,
+ DATA_TYPE_NVLIST);
+ (void) nvlist_add_nvlist(nvl, FM_FAULT_FRU,
+ fru);
+ nvlist_free(fru);
+ (void) nvlist_lookup_nvlist(nvl, FM_FAULT_FRU,
+ &fru);
+ }
+ }
+ }
+
+ /*
+ * Try to find the location label for this resource
+ */
+ if (fru != NULL)
+ (void) topo_fmri_label(thp, fru, &loc, &err);
+ else if (rsrc != NULL)
+ (void) topo_fmri_label(thp, rsrc, &loc, &err);
+ if (loc != NULL) {
+ (void) nvlist_remove(nvl, FM_FAULT_LOCATION, DATA_TYPE_STRING);
+ (void) nvlist_add_string(nvl, FM_FAULT_LOCATION, loc);
+ topo_hdl_strfree(thp, loc);
+ }
+
+ /*
+ * In some cases, serial information for the resource will not be
+ * available at enumeration but may instead be available by invoking
+ * a dynamic property method on the FRU. In order to ensure the serial
+ * number is persisted properly in the ASRU cache, we'll fetch the
+ * property, if it exists, and add it to the resource and fru fmris.
+ */
+ if (fru != NULL) {
+ (void) topo_fmri_serial(thp, fru, &serial, &err);
+ if (serial != NULL) {
+ if (rsrc != NULL)
+ (void) nvlist_add_string(rsrc, "serial",
+ serial);
+ (void) nvlist_add_string(fru, "serial", serial);
+ topo_hdl_strfree(thp, serial);
+ }
+ }
+
+ err = fmd_module_topo_rele(mp, thp);
+ ASSERT(err == 0);
+
fmd_case_insert_suspect(cp, nvl);
fmd_module_unlock(mp);
}
@@ -1704,44 +1780,13 @@ fmd_nvl_create_fault(fmd_hdl_t *hdl, const char *class,
uint8_t certainty, nvlist_t *asru, nvlist_t *fru, nvlist_t *rsrc)
{
fmd_module_t *mp;
- topo_hdl_t *thp;
nvlist_t *nvl;
- char *loc = NULL, *serial = NULL;
- int err;
mp = fmd_api_module_lock(hdl);
if (class == NULL || class[0] == '\0')
fmd_api_error(mp, EFMD_NVL_INVAL, "invalid fault class\n");
- thp = fmd_module_topo_hold(mp);
-
- /*
- * Try to find the location label for this resource
- */
- (void) topo_fmri_label(thp, fru, &loc, &err);
-
- /*
- * In some cases, serial information for the resource will not be
- * available at enumeration but may instead be available by invoking
- * a dynamic property method on the FRU. In order to ensure the serial
- * number is persisted properly in the ASRU cache, we'll fetch the
- * property, if it exists, and add it to the resource and fru fmris.
- */
- if (fru != NULL) {
- (void) topo_fmri_serial(thp, fru, &serial, &err);
- if (serial != NULL) {
- (void) nvlist_add_string(rsrc, "serial", serial);
- (void) nvlist_add_string(fru, "serial", serial);
- topo_hdl_strfree(thp, serial);
- }
- }
- nvl = fmd_protocol_fault(class, certainty, asru, fru, rsrc, loc);
-
- if (loc != NULL)
- topo_hdl_strfree(thp, loc);
-
- err = fmd_module_topo_rele(mp, thp);
- ASSERT(err == 0);
+ nvl = fmd_protocol_fault(class, certainty, asru, fru, rsrc, NULL);
fmd_module_unlock(mp);
diff --git a/usr/src/cmd/fm/fmd/common/fmd_asru.c b/usr/src/cmd/fm/fmd/common/fmd_asru.c
index da2b46cc97..ff3c6ba367 100644
--- a/usr/src/cmd/fm/fmd/common/fmd_asru.c
+++ b/usr/src/cmd/fm/fmd/common/fmd_asru.c
@@ -412,6 +412,10 @@ fmd_asru_hash_recreate(fmd_log_t *lp, fmd_event_t *ep, fmd_asru_hash_t *ahp)
fmd_case_t *cp;
int64_t *diag_time;
uint_t nelem;
+ topo_hdl_t *thp;
+ char *class;
+ nvlist_t *rsrc;
+ int err;
/*
* Extract the most recent values of 'faulty' from the event log.
@@ -448,6 +452,23 @@ fmd_asru_hash_recreate(fmd_log_t *lp, fmd_event_t *ep, fmd_asru_hash_t *ahp)
else
fmd_case_settime(cp, lp->log_stat.st_ctime, 0);
(void) nvlist_xdup(flt, &flt_copy, &fmd.d_nva);
+
+ /*
+ * For faults with a resource, re-evaluate the asru from the resource.
+ */
+ thp = fmd_fmri_topo_hold(TOPO_VERSION);
+ if (nvlist_lookup_string(flt_copy, FM_CLASS, &class) == 0 &&
+ strncmp(class, "fault", 5) == 0 &&
+ nvlist_lookup_nvlist(flt_copy, FM_FAULT_RESOURCE, &rsrc) == 0 &&
+ rsrc != NULL && topo_fmri_asru(thp, rsrc, &asru, &err) == 0) {
+ (void) nvlist_remove(flt_copy, FM_FAULT_ASRU, DATA_TYPE_NVLIST);
+ (void) nvlist_add_nvlist(flt_copy, FM_FAULT_ASRU, asru);
+ nvlist_free(asru);
+ }
+ fmd_fmri_topo_rele(thp);
+
+ (void) nvlist_xdup(flt_copy, &flt, &fmd.d_nva);
+
fmd_case_recreate_suspect(cp, flt_copy);
/*
@@ -475,6 +496,8 @@ fmd_asru_hash_recreate(fmd_log_t *lp, fmd_event_t *ep, fmd_asru_hash_t *ahp)
} else
u = FMD_B_TRUE; /* not present; set unusable */
+ nvlist_free(flt);
+
ap->asru_flags |= FMD_ASRU_RECREATED;
if (ps)
ap->asru_flags |= FMD_ASRU_PRESENT;
diff --git a/usr/src/cmd/fm/modules/common/cpumem-retire/cma_main.c b/usr/src/cmd/fm/modules/common/cpumem-retire/cma_main.c
index acac390d36..de8ebad2a7 100644
--- a/usr/src/cmd/fm/modules/common/cpumem-retire/cma_main.c
+++ b/usr/src/cmd/fm/modules/common/cpumem-retire/cma_main.c
@@ -257,6 +257,13 @@ nvl2subr(fmd_hdl_t *hdl, nvlist_t *nvl, nvlist_t **asrup)
char *scheme;
uint8_t version;
char *fltclass = "(unknown)";
+ boolean_t retire;
+
+ if (nvlist_lookup_boolean_value(nvl, FM_SUSPECT_RETIRE, &retire) == 0 &&
+ retire == 0) {
+ fmd_hdl_debug(hdl, "cma_recv: retire suppressed");
+ return (NULL);
+ }
if (nvlist_lookup_nvlist(nvl, FM_FAULT_ASRU, &asru) != 0 ||
nvlist_lookup_string(asru, FM_FMRI_SCHEME, &scheme) != 0 ||
diff --git a/usr/src/cmd/fm/modules/common/eversholt/config.c b/usr/src/cmd/fm/modules/common/eversholt/config.c
index 6e659c54ec..b1b924d76b 100644
--- a/usr/src/cmd/fm/modules/common/eversholt/config.c
+++ b/usr/src/cmd/fm/modules/common/eversholt/config.c
@@ -285,10 +285,6 @@ config_cook(struct cfgdata *cdata)
Usedprops = lut_add(Usedprops, (void *)ptr, (void *)ptr, NULL);
ptr = stable("resource");
Usedprops = lut_add(Usedprops, (void *)ptr, (void *)ptr, NULL);
- ptr = stable("ASRU");
- Usedprops = lut_add(Usedprops, (void *)ptr, (void *)ptr, NULL);
- ptr = stable("FRU");
- Usedprops = lut_add(Usedprops, (void *)ptr, (void *)ptr, NULL);
out(O_ALTFP|O_VERB3, "Raw config data follows:");
out(O_ALTFP|O_VERB3|O_NONL,
diff --git a/usr/src/cmd/fm/modules/common/eversholt/eft.c b/usr/src/cmd/fm/modules/common/eversholt/eft.c
index 3fe0bad895..a7a7273a26 100644
--- a/usr/src/cmd/fm/modules/common/eversholt/eft.c
+++ b/usr/src/cmd/fm/modules/common/eversholt/eft.c
@@ -57,7 +57,6 @@
fmd_hdl_t *Hdl; /* handle in global for platform.c */
int Debug = 1; /* turn on here and let fmd_hdl_debug() decide if really on */
-char *Autoclose; /* close cases automatically after solving */
hrtime_t Hesitate; /* hesitation time in ns */
char *Serd_Override; /* override for Serd engines */
int Verbose;
@@ -135,7 +134,6 @@ eft_close(fmd_hdl_t *hdl, fmd_case_t *fmcase)
* serd.io.device.nonfatal engine to 5 in 3 hours.
*/
static const fmd_prop_t eft_props[] = {
- { "autoclose", FMD_TYPE_STRING, NULL },
{ "estats", FMD_TYPE_BOOL, "false" },
{ "hesitate", FMD_TYPE_INT64, "10000000000" },
{ "serd_override", FMD_TYPE_STRING, NULL },
@@ -335,14 +333,12 @@ _fmd_init(fmd_hdl_t *hdl)
Verbose = fmd_prop_get_int32(hdl, "verbose");
Warn = fmd_prop_get_int32(hdl, "warn");
- Autoclose = fmd_prop_get_string(hdl, "autoclose");
Hesitate = fmd_prop_get_int64(hdl, "hesitate");
Serd_Override = fmd_prop_get_string(hdl, "serd_override");
Max_fme = fmd_prop_get_int32(hdl, "maxfme");
- out(O_DEBUG, "initialized, verbose %d warn %d autoclose %s "
- "maxfme %d", Verbose, Warn, Autoclose == NULL ? "(NULL)" :
- Autoclose, Max_fme);
+ out(O_DEBUG, "initialized, verbose %d warn %d maxfme %d",
+ Verbose, Warn, Max_fme);
fme_istat_load(hdl);
fme_serd_load(hdl);
@@ -357,7 +353,5 @@ _fmd_init(fmd_hdl_t *hdl)
void
_fmd_fini(fmd_hdl_t *hdl)
{
- fmd_prop_free_string(hdl, Autoclose);
- Autoclose = NULL;
call_finis();
}
diff --git a/usr/src/cmd/fm/modules/common/eversholt/eft.conf b/usr/src/cmd/fm/modules/common/eversholt/eft.conf
index e04d27812b..0b0ed73837 100644
--- a/usr/src/cmd/fm/modules/common/eversholt/eft.conf
+++ b/usr/src/cmd/fm/modules/common/eversholt/eft.conf
@@ -28,14 +28,6 @@
#
# The following configuration options are valid:
#
-# setprop autoclose [all|upsets]
-#
-# Turns on automatic closing of cases after they've
-# been solved. Useful if no agent is available to
-# act upon a published diagnosis. Setting autoclose
-# to "all" closes all cases automatcally, setting it
-# to "upsets" closes only those containing only upsets.
-#
# setprop estats true
#
# Enables "extended stats" visible via "fmstat -m eft".
@@ -64,4 +56,3 @@
# The value "0" (zero) specifies no limit.
#
dictionary SUNOS
-setprop autoclose upsets
diff --git a/usr/src/cmd/fm/modules/common/eversholt/eval.c b/usr/src/cmd/fm/modules/common/eversholt/eval.c
index d83b80485d..1e6e99d8eb 100644
--- a/usr/src/cmd/fm/modules/common/eversholt/eval.c
+++ b/usr/src/cmd/fm/modules/common/eversholt/eval.c
@@ -20,7 +20,7 @@
*/
/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*
* eval.c -- constraint evaluation module
@@ -499,6 +499,9 @@ eval_func(struct node *funcnp, struct lut *ex, struct node *events[],
ASSERTinfo(np->u.expr.left->t == T_QUOTE,
ptree_nodetype2str(np->u.expr.left->t));
+ if (arrowp->head->myevent->count == 0)
+ return (0);
+
outfl(O_ALTFP|O_VERB2|O_NONL, np->file, np->line,
"setpayloadprop: %s: %s=",
arrowp->tail->myevent->enode->u.event.ename->u.name.s,
@@ -550,6 +553,86 @@ eval_func(struct node *funcnp, struct lut *ex, struct node *events[],
valuep->t = UINT64;
valuep->v = 1;
return (1);
+ } else if (funcname == L_setserdn || funcname == L_setserdt ||
+ funcname == L_setserdsuffix || funcname == L_setserdincrement) {
+ struct evalue *serdvalp;
+ int alloced = 0;
+ char *str;
+ struct event *flt = arrowp->tail->myevent;
+
+ if (arrowp->head->myevent->count == 0)
+ return (0);
+
+ if (funcname == L_setserdn)
+ str = "n";
+ else if (funcname == L_setserdt)
+ str = "t";
+ else if (funcname == L_setserdsuffix)
+ str = "suffix";
+ else if (funcname == L_setserdincrement)
+ str = "increment";
+
+ /*
+ * allocate a struct evalue to hold the serd property's
+ * value, unless we've been here already, in which case we
+ * might calculate a different value, but we'll store it
+ * in the already-allocated struct evalue.
+ */
+ if ((serdvalp = (struct evalue *)lut_lookup(flt->serdprops,
+ (void *)str, NULL)) == NULL) {
+ serdvalp = MALLOC(sizeof (*serdvalp));
+ alloced = 1;
+ }
+
+ if (!eval_expr(np, ex, events, globals, croot, arrowp, try,
+ serdvalp)) {
+ outfl(O_ALTFP|O_VERB2|O_NONL, np->file, np->line,
+ "setserd%s: %s: ", str,
+ flt->enode->u.event.ename->u.name.s);
+ ptree_name_iter(O_ALTFP|O_VERB2|O_NONL, np);
+ out(O_ALTFP|O_VERB2, " (cannot eval)");
+ if (alloced)
+ FREE(serdvalp);
+ return (0);
+ } else if (serdvalp->t == UNDEFINED) {
+ outfl(O_ALTFP|O_VERB2|O_NONL, np->file, np->line,
+ "setserd%s: %s: ", str,
+ flt->enode->u.event.ename->u.name.s);
+ ptree_name_iter(O_ALTFP|O_VERB2|O_NONL, np);
+ out(O_ALTFP|O_VERB2, " (undefined)");
+ } else {
+ outfl(O_ALTFP|O_VERB2|O_NONL, np->file, np->line,
+ "setserd%s: %s: ", str,
+ flt->enode->u.event.ename->u.name.s);
+ ptree_name_iter(O_ALTFP|O_VERB2|O_NONL, np);
+ if ((funcname == L_setserdincrement ||
+ funcname == L_setserdn) && serdvalp->t == STRING) {
+ serdvalp->t = UINT64;
+ serdvalp->v = strtoull((char *)
+ (uintptr_t)serdvalp->v, NULL, 0);
+ }
+ if (funcname == L_setserdt && serdvalp->t == UINT64) {
+ int len = snprintf(NULL, 0, "%lldns",
+ serdvalp->v);
+ char *buf = MALLOC(len + 1);
+
+ (void) snprintf(buf, len + 1, "%lldns",
+ serdvalp->v);
+ serdvalp->t = STRING;
+ serdvalp->v = (uintptr_t)stable(buf);
+ FREE(buf);
+ }
+ if (serdvalp->t == UINT64)
+ out(O_ALTFP|O_VERB2, " (%llu)", serdvalp->v);
+ else
+ out(O_ALTFP|O_VERB2, " (\"%s\")",
+ (char *)(uintptr_t)serdvalp->v);
+ flt->serdprops = lut_add(flt->serdprops, (void *)str,
+ (void *)serdvalp, NULL);
+ }
+ valuep->t = UINT64;
+ valuep->v = 1;
+ return (1);
} else if (funcname == L_payloadprop_defined) {
outfl(O_ALTFP|O_VERB2|O_NONL, np->file, np->line,
"payloadprop_defined(\"%s\") ", np->u.quote.s);
@@ -945,6 +1028,11 @@ eval_dup(struct node *np, struct lut *ex, struct node *events[])
newnp->u.ull = np->u.ull;
return (newnp);
+ case T_TIMEVAL:
+ newnp = newnode(T_TIMEVAL, np->file, np->line);
+ newnp->u.ull = np->u.ull;
+ return (newnp);
+
default:
outfl(O_DIE, np->file, np->line,
"eval_dup: unexpected node type: %s",
@@ -1686,6 +1774,7 @@ eval_expr(struct node *np, struct lut *ex, struct node *events[],
globals, croot, arrowp, try, valuep));
case T_NUM:
+ case T_TIMEVAL:
valuep->t = UINT64;
valuep->v = np->u.ull;
return (1);
diff --git a/usr/src/cmd/fm/modules/common/eversholt/fme.c b/usr/src/cmd/fm/modules/common/eversholt/fme.c
index c20b002b8a..e0c5252f78 100644
--- a/usr/src/cmd/fm/modules/common/eversholt/fme.c
+++ b/usr/src/cmd/fm/modules/common/eversholt/fme.c
@@ -57,7 +57,6 @@
#include "esclex.h"
/* imported from eft.c... */
-extern char *Autoclose;
extern hrtime_t Hesitate;
extern char *Serd_Override;
extern nv_alloc_t Eft_nv_hdl;
@@ -975,10 +974,34 @@ serd_eval(struct fme *fmep, fmd_hdl_t *hdl, fmd_event_t *ffep,
char *serdname;
struct node *nid;
struct serd_entry *newentp;
+ int i, serdn = -1, serdincrement = 1;
+ char *serdsuffix = NULL, *serdt = NULL;
+ struct evalue *ep;
ASSERT(sp->t == N_UPSET);
ASSERT(ffep != NULL);
+ if ((ep = (struct evalue *)lut_lookup(sp->serdprops,
+ (void *)"n", (lut_cmp)strcmp)) != NULL) {
+ ASSERT(ep->t == UINT64);
+ serdn = (int)ep->v;
+ }
+ if ((ep = (struct evalue *)lut_lookup(sp->serdprops,
+ (void *)"t", (lut_cmp)strcmp)) != NULL) {
+ ASSERT(ep->t == STRING);
+ serdt = (char *)(uintptr_t)ep->v;
+ }
+ if ((ep = (struct evalue *)lut_lookup(sp->serdprops,
+ (void *)"suffix", (lut_cmp)strcmp)) != NULL) {
+ ASSERT(ep->t == STRING);
+ serdsuffix = (char *)(uintptr_t)ep->v;
+ }
+ if ((ep = (struct evalue *)lut_lookup(sp->serdprops,
+ (void *)"increment", (lut_cmp)strcmp)) != NULL) {
+ ASSERT(ep->t == UINT64);
+ serdincrement = (int)ep->v;
+ }
+
/*
* obtain instanced SERD engine from the upset sp. from this
* derive serdname, the string used to identify the SERD engine.
@@ -986,11 +1009,19 @@ serd_eval(struct fme *fmep, fmd_hdl_t *hdl, fmd_event_t *ffep,
serdinst = eventprop_lookup(sp, L_engine);
if (serdinst == NULL)
- return (0);
+ return (-1);
serdname = ipath2str(serdinst->u.stmt.np->u.event.ename->u.name.s,
ipath(serdinst->u.stmt.np->u.event.epname));
+ if (serdsuffix != NULL) {
+ int len = strlen(serdname) + strlen(serdsuffix) + 1;
+ char *ptr = MALLOC(len);
+ (void) snprintf(ptr, len, "%s%s", serdname, serdsuffix);
+ FREE(serdname);
+ serdname = ptr;
+ }
+
/* handle serd engine "id" property, if there is one */
if ((nid =
lut_lookup(serdinst->u.stmt.lutp, (void *)L_id, NULL)) != NULL) {
@@ -1024,6 +1055,14 @@ serd_eval(struct fme *fmep, fmd_hdl_t *hdl, fmd_event_t *ffep,
serdname = nserdname;
}
+ /*
+ * if the engine is empty, and we have an override for n/t then
+ * destroy and recreate it.
+ */
+ if ((serdn != -1 || serdt != NULL) && fmd_serd_exists(hdl, serdname) &&
+ fmd_serd_empty(hdl, serdname))
+ fmd_serd_destroy(hdl, serdname);
+
if (!fmd_serd_exists(hdl, serdname)) {
struct node *nN, *nT;
const char *s;
@@ -1110,6 +1149,17 @@ serd_eval(struct fme *fmep, fmd_hdl_t *hdl, fmd_event_t *ffep,
FREE(serd_name);
}
+ if (serdn != -1 && got_n_override == 0) {
+ nval = serdn;
+ out(O_ALTFP, "serd override %s_n %d", name, serdn);
+ got_n_override = 1;
+ }
+ if (serdt != NULL && got_t_override == 0) {
+ ptr = STRDUP(serdt);
+ out(O_ALTFP, "serd override %s_t %s", name, serdt);
+ got_t_override = 1;
+ }
+
if (!got_n_override) {
nN = lut_lookup(serdinst->u.stmt.lutp, (void *)L_N,
NULL);
@@ -1131,8 +1181,7 @@ serd_eval(struct fme *fmep, fmd_hdl_t *hdl, fmd_event_t *ffep,
ullp = (unsigned long long *)lut_lookup(Timesuffixlut,
(void *)suffix, NULL);
ptr[len] = '\0';
- tval = (unsigned long long)strtoul(ptr, NULL, 0) *
- (ullp ? *ullp : 1ll);
+ tval = strtoull(ptr, NULL, 0) * (ullp ? *ullp : 1ll);
FREE(ptr);
}
fmd_serd_create(hdl, serdname, nval, tval);
@@ -1154,25 +1203,31 @@ serd_eval(struct fme *fmep, fmd_hdl_t *hdl, fmd_event_t *ffep,
/*
* increment SERD engine. if engine fires, reset serd
- * engine and return trip_strcode
+ * engine and return trip_strcode if required.
*/
- if (fmd_serd_record(hdl, serdname, ffep)) {
- struct node *tripinst = lut_lookup(serdinst->u.stmt.lutp,
- (void *)L_trip, NULL);
-
- ASSERT(tripinst != NULL);
-
- *enamep = tripinst->u.event.ename->u.name.s;
- *ippp = ipath(tripinst->u.event.epname);
-
- fmd_case_add_serd(hdl, fmcase, serdname);
- fmd_serd_reset(hdl, serdname);
- out(O_ALTFP|O_NONL, "[engine fired: %s, sending: ", serdname);
- ipath_print(O_ALTFP|O_NONL, *enamep, *ippp);
- out(O_ALTFP, "]");
-
- FREE(serdname);
- return (1);
+ for (i = 0; i < serdincrement; i++) {
+ if (fmd_serd_record(hdl, serdname, ffep)) {
+ fmd_case_add_serd(hdl, fmcase, serdname);
+ fmd_serd_reset(hdl, serdname);
+
+ if (ippp) {
+ struct node *tripinst =
+ lut_lookup(serdinst->u.stmt.lutp,
+ (void *)L_trip, NULL);
+ ASSERT(tripinst != NULL);
+ *enamep = tripinst->u.event.ename->u.name.s;
+ *ippp = ipath(tripinst->u.event.epname);
+ out(O_ALTFP|O_NONL,
+ "[engine fired: %s, sending: ", serdname);
+ ipath_print(O_ALTFP|O_NONL, *enamep, *ippp);
+ out(O_ALTFP, "]");
+ } else {
+ out(O_ALTFP, "[engine fired: %s, no trip]",
+ serdname);
+ }
+ FREE(serdname);
+ return (1);
+ }
}
FREE(serdname);
@@ -1223,7 +1278,7 @@ upsets_eval(struct fme *fmep, fmd_event_t *ffep)
for (sp = fmep->suspects; sp; sp = sp->suspects)
if (sp->t == N_UPSET &&
serd_eval(fmep, fmep->hdl, ffep, fmep->fmcase, sp,
- &tripped[ntrip].ename, &tripped[ntrip].ipp))
+ &tripped[ntrip].ename, &tripped[ntrip].ipp) == 1)
ntrip++;
for (i = 0; i < ntrip; i++) {
@@ -1273,6 +1328,7 @@ upsets_eval(struct fme *fmep, fmd_event_t *ffep)
fmd_case_uuid(nfmep->hdl, nfmep->fmcase));
if (ffep) {
fmd_case_setprincipal(nfmep->hdl, nfmep->fmcase, ffep);
+ fmd_case_add_ereport(nfmep->hdl, nfmep->fmcase, ffep);
nfmep->e0r = ffep;
}
@@ -1292,9 +1348,9 @@ upsets_eval(struct fme *fmep, fmd_event_t *ffep)
serialize_observation(nfmep, eventstring, ipp);
nep->nvp = evnv_dupnvl(ep->nvp);
}
- if (ffep)
+ if (ep->ffep && ep->ffep != ffep)
fmd_case_add_ereport(nfmep->hdl, nfmep->fmcase,
- ffep);
+ ep->ffep);
stats_counter_bump(nfmep->Rcount);
}
@@ -1361,9 +1417,6 @@ retry_lone_ereport:
* and evaluate
*/
serialize_observation(nfmep, tripped[i].ename, tripped[i].ipp);
- if (ffep)
- fmd_case_add_ereport(nfmep->hdl, nfmep->fmcase, ffep);
- stats_counter_bump(nfmep->Rcount);
fme_eval(nfmep, ffep);
}
@@ -1576,8 +1629,10 @@ fme_receive_report(fmd_hdl_t *hdl, fmd_event_t *ffep,
if (ep->count == 1)
serialize_observation(fmep, eventstring, ipp);
- if (ffep)
+ if (ffep) {
fmd_case_add_ereport(hdl, fmep->fmcase, ffep);
+ ep->ffep = ffep;
+ }
stats_counter_bump(fmep->Rcount);
@@ -1698,6 +1753,7 @@ fme_receive_report(fmd_hdl_t *hdl, fmd_event_t *ffep,
fmd_case_add_ereport(hdl, fmep->fmcase, ffep);
fmd_case_setprincipal(hdl, fmep->fmcase, ffep);
fmep->e0r = ffep;
+ ep->ffep = ffep;
}
/* give the diagnosis algorithm a shot at the new FME state */
@@ -2004,6 +2060,8 @@ struct rsl {
nvlist_t *rsrc;
};
+static void publish_suspects(struct fme *fmep, struct rsl *srl);
+
/*
* rslfree -- free internal members of struct rsl not expected to be
* freed elsewhere.
@@ -2039,13 +2097,13 @@ rslcmp(const void *a, const void *b)
if (rv != 0)
return (rv);
- if (r1->asru == NULL && r2->asru == NULL)
+ if (r1->rsrc == NULL && r2->rsrc == NULL)
return (0);
- if (r1->asru == NULL)
+ if (r1->rsrc == NULL)
return (-1);
- if (r2->asru == NULL)
+ if (r2->rsrc == NULL)
return (1);
- return (evnv_cmpnvl(r1->asru, r2->asru, 0));
+ return (evnv_cmpnvl(r1->rsrc, r2->rsrc, 0));
}
/*
@@ -2122,7 +2180,7 @@ get_resources(struct event *sp, struct rsl *rsrcs, struct config *croot)
pathstr = ipath2str(NULL, sp->ipp);
/*
- * Allow for platform translations of the FMRIs
+ * Allow for platform translations of the FMRIs
*/
platform_units_translate(is_defect(sp->t), croot, &asru, &fru, &rsrc,
pathstr);
@@ -2141,51 +2199,41 @@ get_resources(struct event *sp, struct rsl *rsrcs, struct config *croot)
* defects resolve to the same ASRU (driver) we only want to publish
* that as a single suspect.
*/
-static void
-trim_suspects(struct fme *fmep, boolean_t no_upsets, struct rsl **begin,
- struct rsl **end)
+static int
+trim_suspects(struct fme *fmep, struct rsl *begin, struct rsl *begin2,
+ fmd_event_t *ffep, int *mess_zero_nonfaultp)
{
struct event *ep;
- struct rsl *rp;
- int rpcnt;
-
- /*
- * First save the suspects in the psuspects, then copy back
- * only the ones we wish to retain. This resets nsuspects to
- * zero.
- */
- rpcnt = fmep->nsuspects;
- save_suspects(fmep);
-
- /*
- * allocate an array of resource pointers for the suspects.
- * We may end up using less than the full allocation, but this
- * is a very short-lived array. publish_suspects() will free
- * this array when it's done using it.
- */
- rp = *begin = MALLOC(rpcnt * sizeof (struct rsl));
- bzero(rp, rpcnt * sizeof (struct rsl));
+ struct rsl *rp = begin;
+ struct rsl *rp2 = begin2;
+ int mess_zero_count = 0;
+ int serd_rval;
+ uint_t messval;
- /* first pass, remove any unwanted upsets and populate our array */
+ /* remove any unwanted upsets and populate our array */
for (ep = fmep->psuspects; ep; ep = ep->psuspects) {
- if (no_upsets && is_upset(ep->t))
+ if (is_upset(ep->t))
continue;
- get_resources(ep, rp, fmep->config);
- rp++;
- fmep->nsuspects++;
- if (!is_fault(ep->t))
- fmep->nonfault++;
+ serd_rval = serd_eval(fmep, fmep->hdl, ffep, fmep->fmcase, ep,
+ NULL, NULL);
+ if (serd_rval == 0)
+ continue;
+ if (node2uint(eventprop_lookup(ep, L_message),
+ &messval) == 0 && messval == 0) {
+ get_resources(ep, rp2, fmep->config);
+ rp2++;
+ mess_zero_count++;
+ if (!is_fault(ep->t))
+ (*mess_zero_nonfaultp)++;
+ } else {
+ get_resources(ep, rp, fmep->config);
+ rp++;
+ fmep->nsuspects++;
+ if (!is_fault(ep->t))
+ fmep->nonfault++;
+ }
}
-
- /* if all we had was unwanted upsets, we're done */
- if (fmep->nsuspects == 0)
- return;
-
- *end = rp - 1;
-
- /* sort the array */
- qsort(*begin, fmep->nsuspects, sizeof (struct rsl), rslcmp);
- rsluniq(*begin, *end, &fmep->nsuspects, &fmep->nonfault);
+ return (mess_zero_count);
}
/*
@@ -2194,22 +2242,41 @@ trim_suspects(struct fme *fmep, boolean_t no_upsets, struct rsl **begin,
static void
addpayloadprop(const char *lhs, struct evalue *rhs, nvlist_t *fault)
{
+ nvlist_t *rsrc, *hcs;
+
ASSERT(fault != NULL);
ASSERT(lhs != NULL);
ASSERT(rhs != NULL);
+ if (nvlist_lookup_nvlist(fault, FM_FAULT_RESOURCE, &rsrc) != 0)
+ out(O_DIE, "cannot add payloadprop \"%s\" to fault", lhs);
+
+ if (nvlist_lookup_nvlist(rsrc, FM_FMRI_HC_SPECIFIC, &hcs) != 0) {
+ out(O_ALTFP|O_VERB2, "addpayloadprop: create hc_specific");
+ if (nvlist_xalloc(&hcs, NV_UNIQUE_NAME, &Eft_nv_hdl) != 0)
+ out(O_DIE,
+ "cannot add payloadprop \"%s\" to fault", lhs);
+ if (nvlist_add_nvlist(rsrc, FM_FMRI_HC_SPECIFIC, hcs) != 0)
+ out(O_DIE,
+ "cannot add payloadprop \"%s\" to fault", lhs);
+ nvlist_free(hcs);
+ if (nvlist_lookup_nvlist(rsrc, FM_FMRI_HC_SPECIFIC, &hcs) != 0)
+ out(O_DIE,
+ "cannot add payloadprop \"%s\" to fault", lhs);
+ } else
+ out(O_ALTFP|O_VERB2, "addpayloadprop: reuse hc_specific");
+
if (rhs->t == UINT64) {
out(O_ALTFP|O_VERB2, "addpayloadprop: %s=%llu", lhs, rhs->v);
- if (nvlist_add_uint64(fault, lhs, rhs->v) != 0)
+ if (nvlist_add_uint64(hcs, lhs, rhs->v) != 0)
out(O_DIE,
"cannot add payloadprop \"%s\" to fault", lhs);
} else {
out(O_ALTFP|O_VERB2, "addpayloadprop: %s=\"%s\"",
lhs, (char *)(uintptr_t)rhs->v);
- if (nvlist_add_string(fault, lhs, (char *)(uintptr_t)rhs->v) !=
- 0)
+ if (nvlist_add_string(hcs, lhs, (char *)(uintptr_t)rhs->v) != 0)
out(O_DIE,
"cannot add payloadprop \"%s\" to fault", lhs);
}
@@ -2664,47 +2731,26 @@ serd_fini(void)
}
static void
-publish_suspects(struct fme *fmep)
+publish_suspects(struct fme *fmep, struct rsl *srl)
{
- struct rsl *srl = NULL;
- struct rsl *erl;
struct rsl *rp;
nvlist_t *fault;
uint8_t cert;
uint_t *frs;
uint_t fravg, frsum, fr;
uint_t messval;
+ uint_t retireval;
+ uint_t responseval;
struct node *snp;
int frcnt, fridx;
- boolean_t no_upsets = B_FALSE;
boolean_t allfaulty = B_TRUE;
-
- stats_counter_bump(fmep->diags);
+ struct rsl *erl = srl + fmep->nsuspects - 1;
/*
- * If we're auto-closing upsets, we don't want to include them
- * in any produced suspect lists or certainty accounting.
+ * sort the array
*/
- if (Autoclose != NULL)
- if (strcmp(Autoclose, "true") == 0 ||
- strcmp(Autoclose, "all") == 0 ||
- strcmp(Autoclose, "upsets") == 0)
- no_upsets = B_TRUE;
-
- trim_suspects(fmep, no_upsets, &srl, &erl);
-
- /*
- * If the resulting suspect list has no members, we're
- * done. Returning here will simply close the case.
- */
- if (fmep->nsuspects == 0) {
- out(O_ALTFP,
- "[FME%d, case %s (all suspects are upsets)]",
- fmep->id, fmd_case_uuid(fmep->hdl, fmep->fmcase));
- FREE(srl);
- restore_suspects(fmep);
- return;
- }
+ qsort(srl, fmep->nsuspects, sizeof (struct rsl), rslcmp);
+ rsluniq(srl, erl, &fmep->nsuspects, &fmep->nonfault);
/*
* If the suspect list is all faults, then for a given fault,
@@ -2798,15 +2844,47 @@ publish_suspects(struct fme *fmep)
out(O_DIE, "cannot add no-message to fault");
}
}
+
+ /* if "retire" property exists, add it to the fault */
+ if (node2uint(eventprop_lookup(rp->suspect, L_retire),
+ &retireval) == 0) {
+
+ out(O_ALTFP,
+ "[FME%d, %s adds retire=%d to suspect list]",
+ fmep->id,
+ rp->suspect->enode->u.event.ename->u.name.s,
+ retireval);
+ if (nvlist_add_boolean_value(fault,
+ FM_SUSPECT_RETIRE,
+ (retireval) ? B_TRUE : B_FALSE) != 0) {
+ out(O_DIE, "cannot add no-retire to fault");
+ }
+ }
+
+ /* if "response" property exists, add it to the fault */
+ if (node2uint(eventprop_lookup(rp->suspect, L_response),
+ &responseval) == 0) {
+
+ out(O_ALTFP,
+ "[FME%d, %s adds response=%d to suspect list]",
+ fmep->id,
+ rp->suspect->enode->u.event.ename->u.name.s,
+ responseval);
+ if (nvlist_add_boolean_value(fault,
+ FM_SUSPECT_RESPONSE,
+ (responseval) ? B_TRUE : B_FALSE) != 0) {
+ out(O_DIE, "cannot add no-response to fault");
+ }
+ }
+
/* add any payload properties */
lut_walk(rp->suspect->payloadprops,
(lut_cb)addpayloadprop, (void *)fault);
- fmd_case_add_suspect(fmep->hdl, fmep->fmcase, fault);
rslfree(rp);
/*
* If "action" property exists, evaluate it; this must be done
- * before the dupclose check below since some actions may
+ * before the allfaulty check below since some actions may
* modify the asru to be used in fmd_nvl_fmri_faulty. This
* needs to be restructured if any new actions are introduced
* that have effects that we do not want to be visible if
@@ -2825,13 +2903,15 @@ publish_suspects(struct fme *fmep)
NULL, 0, &evalue);
}
+ fmd_case_add_suspect(fmep->hdl, fmep->fmcase, fault);
+
/*
* check if the asru is already marked as "faulty".
*/
if (allfaulty) {
nvlist_t *asru;
- out(O_ALTFP|O_VERB, "FMD%d dup check ", fmep->id);
+ out(O_ALTFP|O_VERB, "FME%d dup check ", fmep->id);
itree_pevent_brief(O_ALTFP|O_VERB|O_NONL, rp->suspect);
out(O_ALTFP|O_VERB|O_NONL, " ");
if (nvlist_lookup_nvlist(fault,
@@ -2848,9 +2928,6 @@ publish_suspects(struct fme *fmep)
}
- /*
- * We are going to publish so take any pre-publication actions.
- */
if (!allfaulty) {
/*
* don't update the count stat if all asrus are already
@@ -2876,16 +2953,6 @@ publish_suspects(struct fme *fmep)
}
istat_save(); /* write out any istat changes */
}
-
- out(O_ALTFP, "[solving FME%d, case %s]", fmep->id,
- fmd_case_uuid(fmep->hdl, fmep->fmcase));
- fmd_case_solve(fmep->hdl, fmep->fmcase);
-
- /*
- * revert to the original suspect list
- */
- FREE(srl);
- restore_suspects(fmep);
}
static void
@@ -3140,6 +3207,11 @@ fme_eval(struct fme *fmep, fmd_event_t *ffep)
{
struct event *ep;
unsigned long long my_delay = TIMEVAL_EVENTUALLY;
+ struct rsl *srl = NULL;
+ struct rsl *srl2 = NULL;
+ int mess_zero_count;
+ int mess_zero_nonfault = 0;
+ int rpcnt;
save_suspects(fmep);
@@ -3169,7 +3241,89 @@ fme_eval(struct fme *fmep, fmd_event_t *ffep)
if (fmep->posted_suspects)
return;
- publish_suspects(fmep);
+ stats_counter_bump(fmep->diags);
+ rpcnt = fmep->nsuspects;
+ save_suspects(fmep);
+
+ /*
+ * create two lists, one for "message=1" faults and one for
+ * "message=0" faults. If we have a mixture we will generate
+ * two separate suspect lists.
+ */
+ srl = MALLOC(rpcnt * sizeof (struct rsl));
+ bzero(srl, rpcnt * sizeof (struct rsl));
+ srl2 = MALLOC(rpcnt * sizeof (struct rsl));
+ bzero(srl2, rpcnt * sizeof (struct rsl));
+ mess_zero_count = trim_suspects(fmep, srl, srl2, ffep,
+ &mess_zero_nonfault);
+
+ /*
+ * If the resulting suspect list has no members, we're
+ * done so simply close the case. Otherwise sort and publish.
+ */
+ if (fmep->nsuspects == 0 && mess_zero_count == 0) {
+ out(O_ALTFP,
+ "[FME%d, case %s (all suspects are upsets)]",
+ fmep->id, fmd_case_uuid(fmep->hdl, fmep->fmcase));
+ fmd_case_close(fmep->hdl, fmep->fmcase);
+ } else if (fmep->nsuspects != 0 && mess_zero_count == 0) {
+ publish_suspects(fmep, srl);
+ out(O_ALTFP, "[solving FME%d, case %s]", fmep->id,
+ fmd_case_uuid(fmep->hdl, fmep->fmcase));
+ fmd_case_solve(fmep->hdl, fmep->fmcase);
+ } else if (fmep->nsuspects == 0 && mess_zero_count != 0) {
+ fmep->nsuspects = mess_zero_count;
+ fmep->nonfault = mess_zero_nonfault;
+ publish_suspects(fmep, srl2);
+ out(O_ALTFP, "[solving FME%d, case %s]", fmep->id,
+ fmd_case_uuid(fmep->hdl, fmep->fmcase));
+ fmd_case_solve(fmep->hdl, fmep->fmcase);
+ } else {
+ struct event *obsp;
+ struct fme *nfmep;
+
+ publish_suspects(fmep, srl);
+ out(O_ALTFP, "[solving FME%d, case %s]", fmep->id,
+ fmd_case_uuid(fmep->hdl, fmep->fmcase));
+ fmd_case_solve(fmep->hdl, fmep->fmcase);
+
+ /*
+ * Got both message=0 and message=1 so create a
+ * duplicate case. Also need a temporary duplicate fme
+ * structure for use by publish_suspects().
+ */
+ nfmep = alloc_fme();
+ nfmep->id = Nextid++;
+ nfmep->hdl = fmep->hdl;
+ nfmep->nsuspects = mess_zero_count;
+ nfmep->nonfault = mess_zero_nonfault;
+ nfmep->fmcase = fmd_case_open(fmep->hdl, NULL);
+ out(O_ALTFP|O_STAMP,
+ "[creating parallel FME%d, case %s]", nfmep->id,
+ fmd_case_uuid(nfmep->hdl, nfmep->fmcase));
+ Open_fme_count++;
+ if (ffep) {
+ fmd_case_setprincipal(nfmep->hdl,
+ nfmep->fmcase, ffep);
+ fmd_case_add_ereport(nfmep->hdl,
+ nfmep->fmcase, ffep);
+ }
+ for (obsp = fmep->observations; obsp;
+ obsp = obsp->observations)
+ if (obsp->ffep && obsp->ffep != ffep)
+ fmd_case_add_ereport(nfmep->hdl,
+ nfmep->fmcase, obsp->ffep);
+
+ publish_suspects(nfmep, srl2);
+ out(O_ALTFP, "[solving FME%d, case %s]", nfmep->id,
+ fmd_case_uuid(nfmep->hdl, nfmep->fmcase));
+ fmd_case_solve(nfmep->hdl, nfmep->fmcase);
+ FREE(nfmep);
+ }
+ FREE(srl);
+ FREE(srl2);
+ restore_suspects(fmep);
+
fmep->posted_suspects = 1;
fmd_buf_write(fmep->hdl, fmep->fmcase,
WOBUF_POSTD,
@@ -3201,29 +3355,6 @@ fme_eval(struct fme *fmep, fmd_event_t *ffep)
break;
}
- if (fmep->posted_suspects == 1 && Autoclose != NULL) {
- int doclose = 0;
-
- if (strcmp(Autoclose, "true") == 0 ||
- strcmp(Autoclose, "all") == 0)
- doclose = 1;
-
- if (strcmp(Autoclose, "upsets") == 0) {
- doclose = 1;
- for (ep = fmep->suspects; ep; ep = ep->suspects) {
- if (ep->t != N_UPSET) {
- doclose = 0;
- break;
- }
- }
- }
-
- if (doclose) {
- out(O_ALTFP, "[closing FME%d, case %s (autoclose)]",
- fmep->id, fmd_case_uuid(fmep->hdl, fmep->fmcase));
- fmd_case_close(fmep->hdl, fmep->fmcase);
- }
- }
itree_free(fmep->eventtree);
fmep->eventtree = NULL;
structconfig_free(fmep->config);
@@ -3673,23 +3804,21 @@ requirements_test(struct fme *fmep, struct event *ep,
ap = itree_next_arrow(bp, ap)) {
ep2 = ap->arrowp->head->myevent;
platform_set_payloadnvp(ep2->nvp);
- if (checkconstraints(fmep, ap->arrowp) == 0) {
+ (void) checkconstraints(fmep, ap->arrowp);
+ if (ap->arrowp->forever_true) {
/*
- * if any arrow is invalidated by the
+ * if all arrows are invalidated by the
* constraints, then we should elide the
* whole bubble to be consistant with
* the tree creation time behaviour
*/
- bp->mark |= BUBBLE_ELIDED;
+ bp->mark |= BUBBLE_OK;
platform_set_payloadnvp(NULL);
break;
}
platform_set_payloadnvp(NULL);
}
}
- if (bp->mark & BUBBLE_ELIDED)
- continue;
- bp->mark |= BUBBLE_OK;
for (ap = itree_next_arrow(bp, NULL); ap;
ap = itree_next_arrow(bp, ap)) {
ep2 = ap->arrowp->head->myevent;
@@ -3722,6 +3851,10 @@ requirements_test(struct fme *fmep, struct event *ep,
else
deferred_events++;
}
+ if (!(bp->mark & BUBBLE_OK) && waiting_events == 0) {
+ bp->mark |= BUBBLE_ELIDED;
+ continue;
+ }
indent();
out(O_ALTFP|O_VERB, " Credible: %d Waiting %d",
credible_events + deferred_events, waiting_events);
diff --git a/usr/src/cmd/fm/modules/common/eversholt/iexpr.c b/usr/src/cmd/fm/modules/common/eversholt/iexpr.c
index 8d255d192f..3c16f54e1f 100644
--- a/usr/src/cmd/fm/modules/common/eversholt/iexpr.c
+++ b/usr/src/cmd/fm/modules/common/eversholt/iexpr.c
@@ -120,6 +120,7 @@ iexpr_hash(struct node *np)
return ((uintptr_t)np->u.quote.s);
case T_NUM:
+ case T_TIMEVAL:
return ((int)np->u.ull);
default:
@@ -208,6 +209,7 @@ iexpr_cmp(struct node *np1, struct node *np2)
return (np2->u.quote.s - np1->u.quote.s);
case T_NUM:
+ case T_TIMEVAL:
if (np2->u.ull > np1->u.ull)
return (1);
else if (np1->u.ull > np2->u.ull)
diff --git a/usr/src/cmd/fm/modules/common/eversholt/itree.c b/usr/src/cmd/fm/modules/common/eversholt/itree.c
index 500c144a86..582fc6d856 100644
--- a/usr/src/cmd/fm/modules/common/eversholt/itree.c
+++ b/usr/src/cmd/fm/modules/common/eversholt/itree.c
@@ -119,6 +119,7 @@ static void itree_free_constraints(struct arrow *ap);
*/
static struct {
int generation; /* generation number of arrow set */
+ int matched; /* number of matches */
struct node *arrownp; /* top-level parse tree for arrow */
int n; /* n value associated with arrow */
int k; /* k value associated with arrow */
@@ -461,6 +462,13 @@ payloadprops_destructor(void *left, void *right, void *arg)
FREE(right);
}
+/*ARGSUSED*/
+static void
+serdprops_destructor(void *left, void *right, void *arg)
+{
+ FREE(right);
+}
+
/*
* event_cmp -- used via lut_lookup/lut_add on instance tree lut
*/
@@ -574,6 +582,9 @@ hmatch_event(struct info *infop, struct node *eventnp, struct node *epname,
ASSERTeq(epname->t, T_NAME, ptree_nodetype2str);
+ if (epname->u.name.cp == NULL)
+ return;
+
/*
* we only get here when eventnp already has a completely
* instanced epname in it already. so we first recurse
@@ -1040,6 +1051,7 @@ vmatch(struct info *infop, struct node *np, struct node *lnp, struct node *anp)
struct wildcardinfo *wcp;
if (np == NULL) {
+ G.matched = 1;
if (lnp)
vmatch(infop, lnp, NULL, anp);
else if (anp)
@@ -1119,6 +1131,7 @@ vmatch(struct info *infop, struct node *np, struct node *lnp, struct node *anp)
np->u.event.epname = oldepname;
return;
}
+ G.matched = 0;
if (epmatches) {
/*
* just first part of names match - do wildcarding
@@ -1139,6 +1152,13 @@ vmatch(struct info *infop, struct node *np, struct node *lnp, struct node *anp)
anp, wcp);
wcp->oldepname = oldepname;
wcp->nptop = oldnptop;
+ if (G.matched == 0) {
+ /*
+ * This list entry is NULL. Move on to next item
+ * in the list.
+ */
+ vmatch(infop, NULL, lnp, anp);
+ }
return;
}
/*
@@ -1156,6 +1176,13 @@ vmatch(struct info *infop, struct node *np, struct node *lnp, struct node *anp)
wcproot = wcp->next;
FREE(wcp);
+ if (G.matched == 0) {
+ /*
+ * This list entry is NULL. Move on to next item in the
+ * list.
+ */
+ vmatch(infop, NULL, lnp, anp);
+ }
break;
}
case T_LIST:
@@ -1165,7 +1192,7 @@ vmatch(struct info *infop, struct node *np, struct node *lnp, struct node *anp)
case T_ARROW:
ASSERT(lnp == NULL && anp == NULL);
- vmatch(infop, np->u.arrow.rhs, NULL, np->u.arrow.lhs);
+ vmatch(infop, np->u.arrow.rhs, NULL, np->u.arrow.parent);
break;
default:
@@ -1176,6 +1203,16 @@ vmatch(struct info *infop, struct node *np, struct node *lnp, struct node *anp)
}
static void
+find_first_arrow(struct info *infop, struct node *anp)
+{
+ if (anp->u.arrow.lhs->t == T_ARROW) {
+ anp->u.arrow.lhs->u.arrow.parent = anp;
+ find_first_arrow(infop, anp->u.arrow.lhs);
+ } else
+ vmatch(infop, anp->u.arrow.lhs, NULL, anp);
+}
+
+static void
cp_reset(struct node *np)
{
if (np == NULL)
@@ -1231,7 +1268,8 @@ itree_create(struct config *croot)
Ninfo.ex = NULL;
generate_arrownp(anp);
- vmatch(&Ninfo, anp, NULL, NULL);
+ anp->u.arrow.parent = NULL;
+ find_first_arrow(&Ninfo, anp);
if (Ninfo.ex) {
lut_free(Ninfo.ex, iterinfo_destructor, NULL);
@@ -1522,6 +1560,10 @@ itree_destructor(void *left, void *right, void *arg)
if (ep->payloadprops)
lut_free(ep->payloadprops, payloadprops_destructor, NULL);
+ /* Free the serd properties */
+ if (ep->serdprops)
+ lut_free(ep->serdprops, serdprops_destructor, NULL);
+
/* Free my bubbles */
for (bub = ep->bubbles; bub != NULL; ) {
nextbub = bub->next;
@@ -1560,6 +1602,9 @@ itree_pruner(void *left, void *right, void *arg)
/* Free the payload properties */
lut_free(ep->payloadprops, payloadprops_destructor, NULL);
+ /* Free the serd properties */
+ lut_free(ep->serdprops, serdprops_destructor, NULL);
+
/* Free my bubbles */
for (bub = ep->bubbles; bub != NULL; ) {
nextbub = bub->next;
@@ -1572,6 +1617,7 @@ itree_pruner(void *left, void *right, void *arg)
nvlist_free(ep->nvp);
ep->props = NULL;
ep->payloadprops = NULL;
+ ep->serdprops = NULL;
ep->bubbles = NULL;
ep->nvp = NULL;
}
diff --git a/usr/src/cmd/fm/modules/common/eversholt/itree.h b/usr/src/cmd/fm/modules/common/eversholt/itree.h
index 946a076199..d214f1d9d6 100644
--- a/usr/src/cmd/fm/modules/common/eversholt/itree.h
+++ b/usr/src/cmd/fm/modules/common/eversholt/itree.h
@@ -19,7 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*
* itree.h -- public definitions for itree module
@@ -37,6 +37,7 @@ extern "C" {
/* the "fault" field in the event struct requires the definition of nvlist_t */
#include <sys/fm/protocol.h>
+#include <fm/fmd_api.h>
/* Numerical representation of propagation N value (A), short for All */
#define N_IS_ALL -1
@@ -77,11 +78,13 @@ struct event {
struct event *suspects;
struct event *psuspects;
struct event *observations; /* for lists like suspect list */
+ fmd_event_t *ffep;
nvlist_t *nvp; /* payload nvp for ereports */
struct node *enode; /* event node in parse tree */
const struct ipath *ipp; /* instanced version of event */
struct lut *props; /* instanced version of nvpairs */
struct lut *payloadprops; /* nvpairs for problem payload */
+ struct lut *serdprops; /* nvpairs for dynamic serd args */
int count; /* for reports, number seen */
enum nametype t:3; /* defined in tree.h */
int is_suspect:1; /* true if on suspect list */
diff --git a/usr/src/cmd/fm/modules/common/eversholt/platform.c b/usr/src/cmd/fm/modules/common/eversholt/platform.c
index 8b814e40c9..8dec2a25e9 100644
--- a/usr/src/cmd/fm/modules/common/eversholt/platform.c
+++ b/usr/src/cmd/fm/modules/common/eversholt/platform.c
@@ -733,117 +733,30 @@ cfgstrprop_lookup(struct config *croot, char *path, char *pname)
return (fmristr);
}
-static nvlist_t *
-rewrite_resource(char *pname, struct config *croot, char *path)
-{
- const char *fmristr;
- nvlist_t *fmri;
- int err;
-
- if ((fmristr = cfgstrprop_lookup(croot, path, pname)) == NULL)
- return (NULL);
-
- if (topo_fmri_str2nvl(Eft_topo_hdl, fmristr, &fmri, &err) < 0) {
- out(O_ALTFP, "Can not convert config info: %s",
- topo_strerror(err));
- return (NULL);
- }
-
- return (fmri);
-}
-
-static void
-defect_units(nvlist_t **ap, struct config *croot, char *path)
-{
- const char *modstr;
- nvlist_t *na;
- int err;
-
- /*
- * Defects aren't required to have ASRUs defined with
- * them in the eversholt fault tree, so usually we'll be
- * creating original FMRIs here. If the ASRU
- * is defined when we get here, we won't replace it.
- */
- if (*ap != NULL)
- return;
-
- /*
- * Find the driver for this resource and use that to get
- * a mod fmri for ASRU. There are no FRUs for defects.
- */
- if ((modstr = cfgstrprop_lookup(croot, path, TOPO_IO_MODULE)) == NULL)
- return;
-
- if (topo_fmri_str2nvl(Eft_topo_hdl, modstr, &na, &err) < 0) {
- out(O_ALTFP, "topo_fmri_str2nvl() of %s failed", modstr);
- return;
- }
-
- *ap = na;
-}
-
/*
- * platform_units_translate
- * This routines offers a chance for platform-specific rewrites of
- * the hc scheme FRU and ASRUs associated with a suspect fault.
+ * Get resource FMRI from libtopo
*/
/*ARGSUSED*/
void
platform_units_translate(int isdefect, struct config *croot,
nvlist_t **dfltasru, nvlist_t **dfltfru, nvlist_t **dfltrsrc, char *path)
{
- nvlist_t *asru, *rsrc, *fru;
-
- out(O_ALTFP, "platform_units_translate(%d, ....)", isdefect);
+ const char *fmristr;
+ nvlist_t *rsrc;
+ int err;
- /*
- * Get our FMRIs from libtopo
- */
- if ((rsrc = rewrite_resource(TOPO_PROP_RESOURCE, croot, path))
- == NULL) {
+ fmristr = cfgstrprop_lookup(croot, path, TOPO_PROP_RESOURCE);
+ if (fmristr == NULL) {
out(O_ALTFP, "Cannot rewrite resource for %s.", path);
- } else {
- nvlist_free(*dfltrsrc);
- *dfltrsrc = rsrc;
- }
-
- /*
- * If it is a defect we want to re-write the FRU as the pkg
- * scheme fmri of the package containing the buggy driver, and
- * the ASRU as the mod scheme fmri of the driver's kernel
- * module.
- */
- if (isdefect) {
- defect_units(dfltasru, croot, path);
return;
}
-
- /*
- * Find the TOPO_PROP_ASRU and TOPO_PROP_FRU properties
- * for this resource if *dfltasru and *dfltfru are set
- */
- if (*dfltasru != NULL) {
- if ((asru = rewrite_resource(TOPO_PROP_ASRU, croot, path))
- == NULL) {
- out(O_ALTFP, "Cannot rewrite %s for %s.",
- TOPO_PROP_ASRU, path);
- } else {
- nvlist_free(*dfltasru);
- *dfltasru = asru;
- }
- }
-
- if (*dfltfru != NULL) {
- if ((fru = rewrite_resource(TOPO_PROP_FRU, croot, path))
- == NULL) {
- out(O_ALTFP, "Cannot rewrite %s for %s.",
- TOPO_PROP_FRU, path);
- } else {
- nvlist_free(*dfltfru);
- *dfltfru = fru;
- }
+ if (topo_fmri_str2nvl(Eft_topo_hdl, fmristr, &rsrc, &err) < 0) {
+ out(O_ALTFP, "Can not convert config info: %s",
+ topo_strerror(err));
+ out(O_ALTFP, "Cannot rewrite resource for %s.", path);
+ return;
}
+ *dfltrsrc = rsrc;
}
/*
@@ -1421,106 +1334,7 @@ int
platform_confcall(struct node *np, struct lut **globals, struct config *croot,
struct arrow *arrowp, struct evalue *valuep)
{
- nvlist_t *rsrc, *hcs;
- nvpair_t *nvp;
-
- ASSERT(np != NULL);
-
- /* assume we're returning true */
- valuep->t = UINT64;
- valuep->v = 1;
-
- /*
- * We've detected a well-formed confcall() to rewrite
- * an ASRU in a fault. We get here via lines like this
- * in the eversholt rules:
- *
- * event fault.memory.page@dimm, FITrate=PAGE_FIT,
- * ASRU=dimm, message=0,
- * count=stat.page_fault@dimm,
- * action=confcall("rewrite-ASRU");
- *
- * So first rewrite the resource in the fault. Any payload data
- * following the FM_FMRI_HC_SPECIFIC member is used to expand the
- * resource nvlist. Next, use libtopo to compute the ASRU from
- * from the new resource.
- */
- if (np->t == T_QUOTE && np->u.quote.s == stable("rewrite-ASRU")) {
- int err;
- nvlist_t *asru;
-
- out(O_ALTFP|O_VERB, "platform_confcall: rewrite-ASRU");
-
- if (nvlist_lookup_nvlist(Action_nvl, FM_FAULT_RESOURCE, &rsrc)
- != 0) {
- outfl(O_ALTFP|O_VERB, np->file, np->line, "no resource "
- "in fault event");
- return (0);
- }
-
- if (topo_hdl_nvalloc(Eft_topo_hdl, &hcs, NV_UNIQUE_NAME) != 0) {
- outfl(O_ALTFP|O_VERB, np->file, np->line,
- "unable to allocate nvlist for resource rewrite");
- return (0);
- }
-
- /*
- * Loop until we run across asru-specific payload. All
- * payload members prefixed "asru-" will be added to the
- * hc-specific nvlist and removed from the original.
- */
- nvp = nvlist_next_nvpair(Action_nvl, NULL);
- while (nvp != NULL) {
- if (strncmp(nvpair_name(nvp), "asru-", 5) == 0) {
- if (nvlist_add_nvpair(hcs, nvp) != 0) {
- nvlist_free(hcs);
- outfl(O_ALTFP|O_VERB, np->file,
- np->line, "unable to rewrite "
- "resource - nvlist_add_nvpair for "
- "'%s' failed", nvpair_name(nvp));
- return (0);
- }
-
- (void) nvlist_remove(Action_nvl,
- nvpair_name(nvp), nvpair_type(nvp));
- nvp = nvlist_next_nvpair(Action_nvl, NULL);
- } else {
- nvp = nvlist_next_nvpair(Action_nvl, nvp);
- }
- }
-
- if (nvlist_add_nvlist(rsrc, FM_FMRI_HC_SPECIFIC, hcs) != 0) {
- nvlist_free(hcs);
- outfl(O_ALTFP|O_VERB, np->file, np->line, "unable to "
- "rewrite resource with HC specific data");
- return (0);
- }
- nvlist_free(hcs);
-
- if (topo_fmri_asru(Eft_topo_hdl, rsrc, &asru, &err) != 0) {
- outfl(O_ALTFP|O_VERB, np->file, np->line, "unable to "
- "rewrite asru: %s", topo_strerror(err));
- return (0);
- }
-
- if (nvlist_remove(Action_nvl, FM_FAULT_ASRU, DATA_TYPE_NVLIST)
- != 0) {
- nvlist_free(asru);
- outfl(O_ALTFP|O_VERB, np->file, np->line,
- "failed to remove old asru during rewrite");
- return (0);
- }
- if (nvlist_add_nvlist(Action_nvl, FM_FAULT_ASRU, asru) != 0) {
- nvlist_free(asru);
- outfl(O_ALTFP|O_VERB, np->file, np->line,
- "unable to add re-written asru");
- return (0);
- }
- nvlist_free(asru);
- } else {
- outfl(O_ALTFP|O_VERB, np->file, np->line, "unknown confcall");
- }
-
+ outfl(O_ALTFP|O_VERB, np->file, np->line, "unknown confcall");
return (0);
}
diff --git a/usr/src/cmd/fm/modules/common/io-retire/rio_main.c b/usr/src/cmd/fm/modules/common/io-retire/rio_main.c
index 7277eca7fd..072ed3e809 100644
--- a/usr/src/cmd/fm/modules/common/io-retire/rio_main.c
+++ b/usr/src/cmd/fm/modules/common/io-retire/rio_main.c
@@ -20,7 +20,7 @@
*/
/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -135,6 +135,7 @@ rio_recv(fmd_hdl_t *hdl, fmd_event_t *ep, nvlist_t *nvl, const char *class)
int rval;
int error;
char *snglfault = FM_FAULT_CLASS"."FM_ERROR_IO".";
+ boolean_t rtr;
/*
@@ -172,6 +173,12 @@ rio_recv(fmd_hdl_t *hdl, fmd_event_t *ep, nvlist_t *nvl, const char *class)
devpath[0] = '\0';
rval = 0;
for (f = 0; f < nfaults; f++) {
+ if (nvlist_lookup_boolean_value(faults[f], FM_SUSPECT_RETIRE,
+ &rtr) == 0 && !rtr) {
+ fmd_hdl_debug(hdl, "rio_recv: retire suppressed");
+ continue;
+ }
+
if (nvlist_lookup_nvlist(faults[f], FM_FAULT_ASRU,
&asru) != 0) {
fmd_hdl_debug(hdl, "rio_recv: no asru in fault");
diff --git a/usr/src/cmd/fm/schemes/cpu/cpu.c b/usr/src/cmd/fm/schemes/cpu/cpu.c
index 4c74803932..7f88913d0d 100644
--- a/usr/src/cmd/fm/schemes/cpu/cpu.c
+++ b/usr/src/cmd/fm/schemes/cpu/cpu.c
@@ -44,81 +44,23 @@ ssize_t
fmd_fmri_nvl2str(nvlist_t *nvl, char *buf, size_t buflen)
{
int err;
- uint8_t version, type;
- uint32_t cpuid, index, way;
- uint64_t serint;
- char *serstr = NULL;
+ ssize_t len;
+ topo_hdl_t *thp;
+ char *str;
- if (nvlist_lookup_uint8(nvl, FM_VERSION, &version) != 0)
+ if ((thp = fmd_fmri_topo_hold(TOPO_VERSION)) == NULL)
return (fmd_fmri_set_errno(EINVAL));
-
- if (version == CPU_SCHEME_VERSION0) {
- if (nvlist_lookup_uint32(nvl, FM_FMRI_CPU_ID, &cpuid) != 0 ||
- nvlist_lookup_uint64(nvl, FM_FMRI_CPU_SERIAL_ID, &serint)
- != 0)
- return (fmd_fmri_set_errno(EINVAL));
-
- return (snprintf(buf, buflen, "cpu:///%s=%u/%s=%llX",
- FM_FMRI_CPU_ID, cpuid, FM_FMRI_CPU_SERIAL_ID,
- (u_longlong_t)serint));
-
- } else if (version == CPU_SCHEME_VERSION1) {
- if (nvlist_lookup_uint32(nvl, FM_FMRI_CPU_ID, &cpuid) != 0)
- return (fmd_fmri_set_errno(EINVAL));
-
- /*
- * Serial number is an optional element
- */
- if ((err = nvlist_lookup_string(nvl, FM_FMRI_CPU_SERIAL_ID,
- &serstr)) != 0)
-
- if (err != ENOENT)
- return (fmd_fmri_set_errno(EINVAL));
-
- /*
- * Cache index, way and type are optional elements
- * But if we have one of them, we must have them all.
- */
- err = nvlist_lookup_uint32(nvl, FM_FMRI_CPU_CACHE_INDEX,
- &index);
- err |= nvlist_lookup_uint32(nvl, FM_FMRI_CPU_CACHE_WAY, &way);
- err |= nvlist_lookup_uint8(nvl, FM_FMRI_CPU_CACHE_TYPE, &type);
-
- /* Insure there were no errors accessing the nvl */
- if (err != 0 && err != ENOENT)
- return (fmd_fmri_set_errno(EINVAL));
-
- if (serstr == NULL) {
- /* If we have a serial string and no cache info */
- if (err == ENOENT)
- return (snprintf(buf, buflen, "cpu:///%s=%u",
- FM_FMRI_CPU_ID, cpuid));
- else {
- return (snprintf(buf, buflen,
- "cpu:///%s=%u/%s=%u/%s=%u/%s=%d",
- FM_FMRI_CPU_ID, cpuid,
- FM_FMRI_CPU_CACHE_INDEX, index,
- FM_FMRI_CPU_CACHE_WAY, way,
- FM_FMRI_CPU_CACHE_TYPE, type));
- }
- } else {
- if (err == ENOENT) {
- return (snprintf(buf, buflen,
- "cpu:///%s=%u/%s=%s",
- FM_FMRI_CPU_ID, cpuid,
- FM_FMRI_CPU_SERIAL_ID, serstr));
- } else {
- return (snprintf(buf, buflen,
- "cpu:///%s=%u/%s=%s/%s=%u/%s=%u/%s=%d",
- FM_FMRI_CPU_ID, cpuid,
- FM_FMRI_CPU_SERIAL_ID, serstr,
- FM_FMRI_CPU_CACHE_INDEX, index,
- FM_FMRI_CPU_CACHE_WAY, way,
- FM_FMRI_CPU_CACHE_TYPE, type));
- }
- }
- } else
+ if (topo_fmri_nvl2str(thp, nvl, &str, &err) != 0) {
+ fmd_fmri_topo_rele(thp);
return (fmd_fmri_set_errno(EINVAL));
+ }
+ if (buf != NULL)
+ len = snprintf(buf, buflen, "%s", str);
+ else
+ len = strlen(str);
+ topo_hdl_strfree(thp, str);
+ fmd_fmri_topo_rele(thp);
+ return (len);
}
/*
diff --git a/usr/src/cmd/fm/schemes/fmd/scheme.c b/usr/src/cmd/fm/schemes/fmd/scheme.c
index 5cc5854a16..e17d068266 100644
--- a/usr/src/cmd/fm/schemes/fmd/scheme.c
+++ b/usr/src/cmd/fm/schemes/fmd/scheme.c
@@ -2,9 +2,8 @@
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License"). You may not use this file except in compliance
- * with the License.
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
@@ -20,7 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -43,3 +42,17 @@ fmd_fmri_nvl2str(nvlist_t *nvl, char *buf, size_t buflen)
return (snprintf(buf, buflen,
"%s:///module/%s", FM_FMRI_SCHEME_FMD, name));
}
+
+/*ARGSUSED*/
+int
+fmd_fmri_present(nvlist_t *nvl)
+{
+ return (1);
+}
+
+/*ARGSUSED*/
+int
+fmd_fmri_unusable(nvlist_t *nvl)
+{
+ return (0);
+}
diff --git a/usr/src/cmd/fm/schemes/legacy-hc/scheme.c b/usr/src/cmd/fm/schemes/legacy-hc/scheme.c
index 7988534da2..92524ca51e 100644
--- a/usr/src/cmd/fm/schemes/legacy-hc/scheme.c
+++ b/usr/src/cmd/fm/schemes/legacy-hc/scheme.c
@@ -2,9 +2,8 @@
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License"). You may not use this file except in compliance
- * with the License.
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
@@ -20,7 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -46,3 +45,17 @@ fmd_fmri_nvl2str(nvlist_t *nvl, char *buf, size_t buflen)
return (size);
}
+
+/*ARGSUSED*/
+int
+fmd_fmri_present(nvlist_t *nvl)
+{
+ return (1);
+}
+
+/*ARGSUSED*/
+int
+fmd_fmri_unusable(nvlist_t *nvl)
+{
+ return (0);
+}
diff --git a/usr/src/cmd/fm/schemes/mod/amd64/Makefile b/usr/src/cmd/fm/schemes/mod/amd64/Makefile
index b12450b1d8..46d6bb8f0d 100644
--- a/usr/src/cmd/fm/schemes/mod/amd64/Makefile
+++ b/usr/src/cmd/fm/schemes/mod/amd64/Makefile
@@ -20,7 +20,7 @@
#
#
-# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2008 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
# ident "%Z%%M% %I% %E% SMI"
@@ -28,6 +28,12 @@
include ../../Makefile.com
include $(SRC)/Makefile.master.64
+
+LDLIBS += \
+ -L$(ROOTLIB)/fm/$(MACH64) -ltopo
+LDFLAGS += -R/usr/lib/fm/$(MACH64)
+
+
include ../../Makefile.targ
install: all $(ROOTPROG64)
diff --git a/usr/src/cmd/fm/schemes/mod/i386/Makefile b/usr/src/cmd/fm/schemes/mod/i386/Makefile
index b2953a27d9..9e893bfdfe 100644
--- a/usr/src/cmd/fm/schemes/mod/i386/Makefile
+++ b/usr/src/cmd/fm/schemes/mod/i386/Makefile
@@ -20,13 +20,18 @@
#
#
-# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2008 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
# ident "%Z%%M% %I% %E% SMI"
#
include ../../Makefile.com
+
+LDLIBS += \
+ -L$(ROOTLIB)/fm -ltopo
+LDFLAGS += -R/usr/lib/fm
+
include ../../Makefile.targ
install: all $(ROOTPROG)
diff --git a/usr/src/cmd/fm/schemes/mod/scheme.c b/usr/src/cmd/fm/schemes/mod/scheme.c
index 7284bb54a8..87f728b5f8 100644
--- a/usr/src/cmd/fm/schemes/mod/scheme.c
+++ b/usr/src/cmd/fm/schemes/mod/scheme.c
@@ -2,9 +2,8 @@
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License"). You may not use this file except in compliance
- * with the License.
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
@@ -20,144 +19,41 @@
* CDDL HEADER END
*/
/*
- * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#pragma ident "%Z%%M% %I% %E% SMI"
#include <fm/fmd_fmri.h>
-
-/*
- * buf_append -- Append str to buf (if it's non-NULL). Place prepend
- * in buf in front of str and append behind it (if they're non-NULL).
- * Continue to update size even if we run out of space to actually
- * stuff characters in the buffer.
- */
-static void
-buf_append(ssize_t *sz, char *buf, size_t buflen, char *str,
- char *prepend, char *append)
-{
- ssize_t left;
-
- if (str == NULL)
- return;
-
- if (buflen == 0 || (left = buflen - *sz) < 0)
- left = 0;
-
- if (buf != NULL && left != 0)
- buf += *sz;
-
- if (prepend == NULL && append == NULL)
- *sz += snprintf(buf, left, "%s", str);
- else if (append == NULL)
- *sz += snprintf(buf, left, "%s%s", prepend, str);
- else if (prepend == NULL)
- *sz += snprintf(buf, left, "%s%s", str, append);
- else
- *sz += snprintf(buf, left, "%s%s%s", prepend, str, append);
-}
-
-/*
- * Maximum 32 bit integer is 2147483647, which is 10 digits. A buffer
- * of 11 bytes can therefore contain the null-terminated ascii
- * representation of any integer module id.
- */
-#define MAXINTSTR 11
+#include <fm/libtopo.h>
+#include <strings.h>
ssize_t
fmd_fmri_nvl2str(nvlist_t *nvl, char *buf, size_t buflen)
{
- nvlist_t *anvl = NULL;
- uint8_t version;
- ssize_t size = 0;
- int32_t modid;
- char *achas = NULL;
- char *adom = NULL;
- char *aprod = NULL;
- char *asrvr = NULL;
- char *ahost = NULL;
- char *modname = NULL;
- char numbuf[MAXINTSTR];
- int more_auth = 0;
int err;
+ ssize_t len;
+ topo_hdl_t *thp;
+ char *str;
- if (nvlist_lookup_uint8(nvl, FM_VERSION, &version) != 0 ||
- version > FM_MOD_SCHEME_VERSION)
- return (fmd_fmri_set_errno(EINVAL));
-
- /* Get authority, if present */
- err = nvlist_lookup_nvlist(nvl, FM_FMRI_AUTHORITY, &anvl);
- if (err != 0 && err != ENOENT)
- return (fmd_fmri_set_errno(err));
-
- /*
- * For brevity, we only include the module name and id
- * present in the FMRI in our output string. The FMRI
- * also has data on the package containing the module.
- */
-
- /* There must be a module name */
- err = nvlist_lookup_string(nvl, FM_FMRI_MOD_NAME, &modname);
- if (err != 0 || modname == NULL)
+ if ((thp = fmd_fmri_topo_hold(TOPO_VERSION)) == NULL)
return (fmd_fmri_set_errno(EINVAL));
- /* There must be a module id */
- err = nvlist_lookup_int32(nvl, FM_FMRI_MOD_ID, &modid);
- if (err != 0)
+ if (topo_fmri_nvl2str(thp, nvl, &str, &err) != 0) {
+ fmd_fmri_topo_rele(thp);
return (fmd_fmri_set_errno(EINVAL));
-
- if (anvl != NULL) {
- (void) nvlist_lookup_string(anvl,
- FM_FMRI_AUTH_PRODUCT, &aprod);
- (void) nvlist_lookup_string(anvl,
- FM_FMRI_AUTH_CHASSIS, &achas);
- (void) nvlist_lookup_string(anvl,
- FM_FMRI_AUTH_DOMAIN, &adom);
- (void) nvlist_lookup_string(anvl,
- FM_FMRI_AUTH_SERVER, &asrvr);
- (void) nvlist_lookup_string(anvl,
- FM_FMRI_AUTH_HOST, &ahost);
- if (aprod != NULL)
- more_auth++;
- if (achas != NULL)
- more_auth++;
- if (adom != NULL)
- more_auth++;
- if (asrvr != NULL)
- more_auth++;
- if (ahost != NULL)
- more_auth++;
}
- /* mod:// */
- buf_append(&size, buf, buflen, FM_FMRI_SCHEME_MOD, NULL, "://");
-
- /* authority, if any */
- if (aprod != NULL)
- buf_append(&size, buf, buflen, aprod, FM_FMRI_AUTH_PRODUCT "=",
- --more_auth > 0 ? "," : NULL);
- if (achas != NULL)
- buf_append(&size, buf, buflen, achas, FM_FMRI_AUTH_CHASSIS "=",
- --more_auth > 0 ? "," : NULL);
- if (adom != NULL)
- buf_append(&size, buf, buflen, adom, FM_FMRI_AUTH_DOMAIN "=",
- --more_auth > 0 ? "," : NULL);
- if (asrvr != NULL)
- buf_append(&size, buf, buflen, asrvr, FM_FMRI_AUTH_SERVER "=",
- --more_auth > 0 ? "," : NULL);
- if (ahost != NULL)
- buf_append(&size, buf, buflen, ahost, FM_FMRI_AUTH_HOST "=",
- NULL);
-
- /* module parts */
- buf_append(&size, buf, buflen, modname, "/" FM_FMRI_MOD_NAME "=", "/");
+ if (buf != NULL)
+ len = snprintf(buf, buflen, "%s", str);
+ else
+ len = strlen(str);
- (void) snprintf(numbuf, MAXINTSTR, "%d", modid);
- buf_append(&size, buf, buflen, numbuf, FM_FMRI_MOD_ID "=", NULL);
+ topo_hdl_strfree(thp, str);
+ fmd_fmri_topo_rele(thp);
- return (size);
+ return (len);
}
/*
diff --git a/usr/src/cmd/fm/schemes/mod/sparc/Makefile b/usr/src/cmd/fm/schemes/mod/sparc/Makefile
index b2953a27d9..71a7f04c9c 100644
--- a/usr/src/cmd/fm/schemes/mod/sparc/Makefile
+++ b/usr/src/cmd/fm/schemes/mod/sparc/Makefile
@@ -20,13 +20,19 @@
#
#
-# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2008 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
# ident "%Z%%M% %I% %E% SMI"
#
include ../../Makefile.com
+
+
+LDLIBS += \
+ -L$(ROOTLIB)/fm -ltopo
+LDFLAGS += -R/usr/lib/fm
+
include ../../Makefile.targ
install: all $(ROOTPROG)
diff --git a/usr/src/cmd/fm/schemes/mod/sparcv9/Makefile b/usr/src/cmd/fm/schemes/mod/sparcv9/Makefile
index b12450b1d8..2b3df05680 100644
--- a/usr/src/cmd/fm/schemes/mod/sparcv9/Makefile
+++ b/usr/src/cmd/fm/schemes/mod/sparcv9/Makefile
@@ -20,7 +20,7 @@
#
#
-# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2008 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
# ident "%Z%%M% %I% %E% SMI"
@@ -28,6 +28,11 @@
include ../../Makefile.com
include $(SRC)/Makefile.master.64
+
+LDLIBS += \
+ -L$(ROOTLIB)/fm/$(MACH64) -ltopo
+LDFLAGS += -R/usr/lib/fm/$(MACH64)
+
include ../../Makefile.targ
install: all $(ROOTPROG64)
diff --git a/usr/src/cmd/fm/schemes/pkg/amd64/Makefile b/usr/src/cmd/fm/schemes/pkg/amd64/Makefile
index b12450b1d8..46d6bb8f0d 100644
--- a/usr/src/cmd/fm/schemes/pkg/amd64/Makefile
+++ b/usr/src/cmd/fm/schemes/pkg/amd64/Makefile
@@ -20,7 +20,7 @@
#
#
-# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2008 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
# ident "%Z%%M% %I% %E% SMI"
@@ -28,6 +28,12 @@
include ../../Makefile.com
include $(SRC)/Makefile.master.64
+
+LDLIBS += \
+ -L$(ROOTLIB)/fm/$(MACH64) -ltopo
+LDFLAGS += -R/usr/lib/fm/$(MACH64)
+
+
include ../../Makefile.targ
install: all $(ROOTPROG64)
diff --git a/usr/src/cmd/fm/schemes/pkg/i386/Makefile b/usr/src/cmd/fm/schemes/pkg/i386/Makefile
index b2953a27d9..9e893bfdfe 100644
--- a/usr/src/cmd/fm/schemes/pkg/i386/Makefile
+++ b/usr/src/cmd/fm/schemes/pkg/i386/Makefile
@@ -20,13 +20,18 @@
#
#
-# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2008 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
# ident "%Z%%M% %I% %E% SMI"
#
include ../../Makefile.com
+
+LDLIBS += \
+ -L$(ROOTLIB)/fm -ltopo
+LDFLAGS += -R/usr/lib/fm
+
include ../../Makefile.targ
install: all $(ROOTPROG)
diff --git a/usr/src/cmd/fm/schemes/pkg/scheme.c b/usr/src/cmd/fm/schemes/pkg/scheme.c
index 7196368f2c..87f728b5f8 100644
--- a/usr/src/cmd/fm/schemes/pkg/scheme.c
+++ b/usr/src/cmd/fm/schemes/pkg/scheme.c
@@ -2,9 +2,8 @@
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License"). You may not use this file except in compliance
- * with the License.
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
@@ -20,125 +19,41 @@
* CDDL HEADER END
*/
/*
- * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#pragma ident "%Z%%M% %I% %E% SMI"
#include <fm/fmd_fmri.h>
-
-/*
- * buf_append -- Append str to buf (if it's non-NULL). Place prepend
- * in buf in front of str and append behind it (if they're non-NULL).
- * Continue to update size even if we run out of space to actually
- * stuff characters in the buffer.
- */
-static void
-buf_append(ssize_t *sz, char *buf, size_t buflen, char *str,
- char *prepend, char *append)
-{
- ssize_t left;
-
- if (str == NULL)
- return;
-
- if (buflen == 0 || (left = buflen - *sz) < 0)
- left = 0;
-
- if (buf != NULL && left != 0)
- buf += *sz;
-
- if (prepend == NULL && append == NULL)
- *sz += snprintf(buf, left, "%s", str);
- else if (append == NULL)
- *sz += snprintf(buf, left, "%s%s", prepend, str);
- else if (prepend == NULL)
- *sz += snprintf(buf, left, "%s%s", str, append);
- else
- *sz += snprintf(buf, left, "%s%s%s", prepend, str, append);
-}
+#include <fm/libtopo.h>
+#include <strings.h>
ssize_t
fmd_fmri_nvl2str(nvlist_t *nvl, char *buf, size_t buflen)
{
- nvlist_t *anvl = NULL;
- uint8_t version;
- ssize_t size = 0;
- char *pkgname = NULL;
- char *achas = NULL;
- char *adom = NULL;
- char *aprod = NULL;
- char *asrvr = NULL;
- char *ahost = NULL;
- int more_auth = 0;
int err;
+ ssize_t len;
+ topo_hdl_t *thp;
+ char *str;
- if (nvlist_lookup_uint8(nvl, FM_VERSION, &version) != 0 ||
- version > FM_PKG_SCHEME_VERSION)
+ if ((thp = fmd_fmri_topo_hold(TOPO_VERSION)) == NULL)
return (fmd_fmri_set_errno(EINVAL));
- /* Get authority, if present */
- err = nvlist_lookup_nvlist(nvl, FM_FMRI_AUTHORITY, &anvl);
- if (err != 0 && err != ENOENT)
- return (fmd_fmri_set_errno(err));
-
- /*
- * For brevity, we only include the pkgname and any authority
- * info present in the FMRI in our output string. The FMRI
- * also has data on the package directory and version.
- */
- err = nvlist_lookup_string(nvl, FM_FMRI_PKG_INST, &pkgname);
- if (err != 0 || pkgname == NULL)
+ if (topo_fmri_nvl2str(thp, nvl, &str, &err) != 0) {
+ fmd_fmri_topo_rele(thp);
return (fmd_fmri_set_errno(EINVAL));
-
- if (anvl != NULL) {
- (void) nvlist_lookup_string(anvl,
- FM_FMRI_AUTH_PRODUCT, &aprod);
- (void) nvlist_lookup_string(anvl,
- FM_FMRI_AUTH_CHASSIS, &achas);
- (void) nvlist_lookup_string(anvl,
- FM_FMRI_AUTH_DOMAIN, &adom);
- (void) nvlist_lookup_string(anvl,
- FM_FMRI_AUTH_SERVER, &asrvr);
- (void) nvlist_lookup_string(anvl,
- FM_FMRI_AUTH_HOST, &ahost);
- if (aprod != NULL)
- more_auth++;
- if (achas != NULL)
- more_auth++;
- if (adom != NULL)
- more_auth++;
- if (asrvr != NULL)
- more_auth++;
- if (ahost != NULL)
- more_auth++;
}
- /* pkg:// */
- buf_append(&size, buf, buflen, FM_FMRI_SCHEME_PKG, NULL, "://");
-
- /* authority, if any */
- if (aprod != NULL)
- buf_append(&size, buf, buflen, aprod, FM_FMRI_AUTH_PRODUCT "=",
- --more_auth > 0 ? "," : NULL);
- if (achas != NULL)
- buf_append(&size, buf, buflen, achas, FM_FMRI_AUTH_CHASSIS "=",
- --more_auth > 0 ? "," : NULL);
- if (adom != NULL)
- buf_append(&size, buf, buflen, adom, FM_FMRI_AUTH_DOMAIN "=",
- --more_auth > 0 ? "," : NULL);
- if (asrvr != NULL)
- buf_append(&size, buf, buflen, asrvr, FM_FMRI_AUTH_SERVER "=",
- --more_auth > 0 ? "," : NULL);
- if (ahost != NULL)
- buf_append(&size, buf, buflen, ahost, FM_FMRI_AUTH_HOST "=",
- NULL);
+ if (buf != NULL)
+ len = snprintf(buf, buflen, "%s", str);
+ else
+ len = strlen(str);
- /* pkg-name part */
- buf_append(&size, buf, buflen, pkgname, "/", NULL);
+ topo_hdl_strfree(thp, str);
+ fmd_fmri_topo_rele(thp);
- return (size);
+ return (len);
}
/*
diff --git a/usr/src/cmd/fm/schemes/pkg/sparc/Makefile b/usr/src/cmd/fm/schemes/pkg/sparc/Makefile
index b2953a27d9..71a7f04c9c 100644
--- a/usr/src/cmd/fm/schemes/pkg/sparc/Makefile
+++ b/usr/src/cmd/fm/schemes/pkg/sparc/Makefile
@@ -20,13 +20,19 @@
#
#
-# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2008 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
# ident "%Z%%M% %I% %E% SMI"
#
include ../../Makefile.com
+
+
+LDLIBS += \
+ -L$(ROOTLIB)/fm -ltopo
+LDFLAGS += -R/usr/lib/fm
+
include ../../Makefile.targ
install: all $(ROOTPROG)
diff --git a/usr/src/cmd/fm/schemes/pkg/sparcv9/Makefile b/usr/src/cmd/fm/schemes/pkg/sparcv9/Makefile
index b12450b1d8..2b3df05680 100644
--- a/usr/src/cmd/fm/schemes/pkg/sparcv9/Makefile
+++ b/usr/src/cmd/fm/schemes/pkg/sparcv9/Makefile
@@ -20,7 +20,7 @@
#
#
-# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2008 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
# ident "%Z%%M% %I% %E% SMI"
@@ -28,6 +28,11 @@
include ../../Makefile.com
include $(SRC)/Makefile.master.64
+
+LDLIBS += \
+ -L$(ROOTLIB)/fm/$(MACH64) -ltopo
+LDFLAGS += -R/usr/lib/fm/$(MACH64)
+
include ../../Makefile.targ
install: all $(ROOTPROG64)
diff --git a/usr/src/lib/fm/topo/libtopo/Makefile.com b/usr/src/lib/fm/topo/libtopo/Makefile.com
index 295f33d885..e2e2a4e69a 100644
--- a/usr/src/lib/fm/topo/libtopo/Makefile.com
+++ b/usr/src/lib/fm/topo/libtopo/Makefile.com
@@ -32,6 +32,9 @@ BUILTINSRCS = \
cpu.c \
dev.c \
hc.c \
+ zfs.c \
+ fmd.c \
+ legacy_hc.c \
mem.c \
mod.c \
pkg.c
diff --git a/usr/src/lib/fm/topo/libtopo/amd64/Makefile b/usr/src/lib/fm/topo/libtopo/amd64/Makefile
index f81fcaa5f0..2506edb291 100644
--- a/usr/src/lib/fm/topo/libtopo/amd64/Makefile
+++ b/usr/src/lib/fm/topo/libtopo/amd64/Makefile
@@ -19,7 +19,7 @@
# CDDL HEADER END
#
#
-# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2008 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
# ident "%Z%%M% %I% %E% SMI"
@@ -28,4 +28,6 @@
include ../Makefile.com
include ../../../../Makefile.lib.64
+LDLIBS += -lzfs
+
install: all $(ROOTLIBS64) $(ROOTLINKS64) $(ROOTLINT64)
diff --git a/usr/src/lib/fm/topo/libtopo/common/fmd.c b/usr/src/lib/fm/topo/libtopo/common/fmd.c
new file mode 100644
index 0000000000..1b8898770e
--- /dev/null
+++ b/usr/src/lib/fm/topo/libtopo/common/fmd.c
@@ -0,0 +1,155 @@
+/*
+ *
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+
+/*
+ * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <ctype.h>
+#include <alloca.h>
+#include <limits.h>
+#include <fm/topo_mod.h>
+#include <sys/param.h>
+#include <sys/systeminfo.h>
+#include <sys/fm/protocol.h>
+#include <sys/stat.h>
+
+#include <topo_method.h>
+#include <topo_subr.h>
+#include <fmd.h>
+
+static int fmd_enum(topo_mod_t *, tnode_t *, const char *, topo_instance_t,
+ topo_instance_t, void *, void *);
+static void fmd_release(topo_mod_t *, tnode_t *);
+static int fmd_fmri_nvl2str(topo_mod_t *, tnode_t *, topo_version_t,
+ nvlist_t *, nvlist_t **);
+
+const topo_method_t fmd_methods[] = {
+ { TOPO_METH_NVL2STR, TOPO_METH_NVL2STR_DESC, TOPO_METH_NVL2STR_VERSION,
+ TOPO_STABILITY_INTERNAL, fmd_fmri_nvl2str },
+ { NULL }
+};
+
+static const topo_modops_t fmd_ops =
+ { fmd_enum, fmd_release };
+static const topo_modinfo_t fmd_info =
+ { FMD, FM_FMRI_SCHEME_FMD, FMD_VERSION, &fmd_ops };
+
+int
+fmd_init(topo_mod_t *mod, topo_version_t version)
+{
+ /*
+ * Turn on module debugging output
+ */
+ if (getenv("TOPOFMDDEBUG"))
+ topo_mod_setdebug(mod);
+
+ topo_mod_dprintf(mod, "initializing fmd builtin\n");
+
+ if (version != FMD_VERSION)
+ return (topo_mod_seterrno(mod, EMOD_VER_NEW));
+
+ if (topo_mod_register(mod, &fmd_info, TOPO_VERSION) != 0) {
+ topo_mod_dprintf(mod, "failed to register fmd: "
+ "%s\n", topo_mod_errmsg(mod));
+ return (-1); /* mod errno already set */
+ }
+
+ return (0);
+}
+
+void
+fmd_fini(topo_mod_t *mod)
+{
+ topo_mod_unregister(mod);
+}
+
+
+/*ARGSUSED*/
+int
+fmd_enum(topo_mod_t *mod, tnode_t *pnode, const char *name, topo_instance_t min,
+ topo_instance_t max, void *notused1, void *notused2)
+{
+ (void) topo_method_register(mod, pnode, fmd_methods);
+ return (0);
+}
+
+/*ARGSUSED*/
+static void
+fmd_release(topo_mod_t *mp, tnode_t *node)
+{
+ topo_method_unregister_all(mp, node);
+}
+
+static ssize_t
+fmri_nvl2str(nvlist_t *nvl, char *buf, size_t buflen)
+{
+ char *name;
+
+ if (nvlist_lookup_string(nvl, FM_FMRI_FMD_NAME, &name) != 0)
+ return (0);
+
+ return (snprintf(buf, buflen,
+ "%s:///module/%s", FM_FMRI_SCHEME_FMD, name));
+}
+
+/*ARGSUSED*/
+static int
+fmd_fmri_nvl2str(topo_mod_t *mod, tnode_t *node, topo_version_t version,
+ nvlist_t *nvl, nvlist_t **out)
+{
+ ssize_t len;
+ char *name = NULL;
+ nvlist_t *fmristr;
+
+ if (version > TOPO_METH_NVL2STR_VERSION)
+ return (topo_mod_seterrno(mod, EMOD_VER_NEW));
+
+ if ((len = fmri_nvl2str(nvl, NULL, 0)) == 0 ||
+ (name = topo_mod_alloc(mod, len + 1)) == NULL ||
+ fmri_nvl2str(nvl, name, len + 1) == 0) {
+ if (name != NULL)
+ topo_mod_free(mod, name, len + 1);
+ return (topo_mod_seterrno(mod, EMOD_FMRI_NVL));
+ }
+
+ if (topo_mod_nvalloc(mod, &fmristr, NV_UNIQUE_NAME) != 0) {
+ topo_mod_free(mod, name, len + 1);
+ return (topo_mod_seterrno(mod, EMOD_FMRI_NVL));
+ }
+ if (nvlist_add_string(fmristr, "fmri-string", name) != 0) {
+ topo_mod_free(mod, name, len + 1);
+ nvlist_free(fmristr);
+ return (topo_mod_seterrno(mod, EMOD_FMRI_NVL));
+ }
+ topo_mod_free(mod, name, len + 1);
+ *out = fmristr;
+
+ return (0);
+}
diff --git a/usr/src/lib/fm/topo/libtopo/common/fmd.h b/usr/src/lib/fm/topo/libtopo/common/fmd.h
new file mode 100644
index 0000000000..64d48b8d41
--- /dev/null
+++ b/usr/src/lib/fm/topo/libtopo/common/fmd.h
@@ -0,0 +1,46 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+
+/*
+ * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#ifndef _FMD_H
+#define _FMD_H
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define FMD_VERSION 1
+#define FMD "fmd"
+
+extern int fmd_init(topo_mod_t *, topo_version_t); /* see fmd.c */
+extern void fmd_fini(topo_mod_t *); /* see fmd.c */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _FMD_H */
diff --git a/usr/src/lib/fm/topo/libtopo/common/legacy_hc.c b/usr/src/lib/fm/topo/libtopo/common/legacy_hc.c
new file mode 100644
index 0000000000..f62cb767cb
--- /dev/null
+++ b/usr/src/lib/fm/topo/libtopo/common/legacy_hc.c
@@ -0,0 +1,216 @@
+/*
+ *
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+
+/*
+ * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <ctype.h>
+#include <alloca.h>
+#include <limits.h>
+#include <fm/topo_mod.h>
+#include <sys/param.h>
+#include <sys/systeminfo.h>
+#include <sys/fm/protocol.h>
+#include <sys/stat.h>
+
+#include <topo_method.h>
+#include <topo_subr.h>
+#include <legacy_hc.h>
+
+static int legacy_hc_enum(topo_mod_t *, tnode_t *, const char *,
+ topo_instance_t, topo_instance_t, void *, void *);
+static void legacy_hc_release(topo_mod_t *, tnode_t *);
+static int legacy_hc_fmri_nvl2str(topo_mod_t *, tnode_t *, topo_version_t,
+ nvlist_t *, nvlist_t **);
+
+const topo_method_t legacy_hc_methods[] = {
+ { TOPO_METH_NVL2STR, TOPO_METH_NVL2STR_DESC, TOPO_METH_NVL2STR_VERSION,
+ TOPO_STABILITY_INTERNAL, legacy_hc_fmri_nvl2str },
+ { NULL }
+};
+
+static const topo_modops_t legacy_hc_ops =
+ { legacy_hc_enum, legacy_hc_release };
+static const topo_modinfo_t legacy_hc_info =
+ { LEGACY_HC, FM_FMRI_SCHEME_LEGACY, LEGACY_HC_VERSION, &legacy_hc_ops };
+
+int
+legacy_hc_init(topo_mod_t *mod, topo_version_t version)
+{
+ /*
+ * Turn on module debugging output
+ */
+ if (getenv("TOPOLEGACY_HCDEBUG"))
+ topo_mod_setdebug(mod);
+
+ topo_mod_dprintf(mod, "initializing legacy_hc builtin\n");
+
+ if (version != LEGACY_HC_VERSION)
+ return (topo_mod_seterrno(mod, EMOD_VER_NEW));
+
+ if (topo_mod_register(mod, &legacy_hc_info, TOPO_VERSION) != 0) {
+ topo_mod_dprintf(mod, "failed to register legacy_hc: "
+ "%s\n", topo_mod_errmsg(mod));
+ return (-1); /* mod errno already set */
+ }
+
+ return (0);
+}
+
+void
+legacy_hc_fini(topo_mod_t *mod)
+{
+ topo_mod_unregister(mod);
+}
+
+
+/*ARGSUSED*/
+int
+legacy_hc_enum(topo_mod_t *mod, tnode_t *pnode, const char *name,
+ topo_instance_t min, topo_instance_t max, void *notused1, void *notused2)
+{
+ (void) topo_method_register(mod, pnode, legacy_hc_methods);
+ return (0);
+}
+
+/*ARGSUSED*/
+static void
+legacy_hc_release(topo_mod_t *mp, tnode_t *node)
+{
+ topo_method_unregister_all(mp, node);
+}
+
+/*
+ * Convert an input string to a URI escaped string and return the new string.
+ * RFC2396 Section 2.4 says that data must be escaped if it does not have a
+ * representation using an unreserved character, where an unreserved character
+ * is one that is either alphanumeric or one of the marks defined in S2.3.
+ */
+static size_t
+mem_fmri_uriescape(const char *s, const char *xmark, char *buf, size_t len)
+{
+ static const char rfc2396_mark[] = "-_.!~*'()";
+ static const char hex_digits[] = "0123456789ABCDEF";
+ static const char empty_str[] = "";
+
+ const char *p;
+ char c, *q;
+ size_t n = 0;
+
+ if (s == NULL)
+ s = empty_str;
+
+ if (xmark == NULL)
+ xmark = empty_str;
+
+ for (p = s; (c = *p) != '\0'; p++) {
+ if (isalnum(c) || strchr(rfc2396_mark, c) || strchr(xmark, c))
+ n++; /* represent c as itself */
+ else
+ n += 3; /* represent c as escape */
+ }
+
+ if (buf == NULL)
+ return (n);
+
+ for (p = s, q = buf; (c = *p) != '\0' && q < buf + len; p++) {
+ if (isalnum(c) || strchr(rfc2396_mark, c) || strchr(xmark, c)) {
+ *q++ = c;
+ } else {
+ *q++ = '%';
+ *q++ = hex_digits[((uchar_t)c & 0xf0) >> 4];
+ *q++ = hex_digits[(uchar_t)c & 0xf];
+ }
+ }
+
+ if (q == buf + len)
+ q--; /* len is too small: truncate output string */
+
+ *q = '\0';
+ return (n);
+}
+
+static ssize_t
+fmri_nvl2str(topo_mod_t *mod, nvlist_t *nvl, char *buf, size_t buflen)
+{
+ uint8_t version;
+ ssize_t size;
+ char *c;
+ char *escc;
+ int i;
+
+ if (nvlist_lookup_uint8(nvl, FM_VERSION, &version) != 0 ||
+ version > FM_LEGACY_SCHEME_VERSION ||
+ nvlist_lookup_string(nvl, FM_FMRI_LEGACY_HC, &c) != 0)
+ return (0);
+
+ i = mem_fmri_uriescape(c, ":,/", NULL, 0);
+ escc = topo_mod_alloc(mod, i + 1);
+ (void) mem_fmri_uriescape(c, ":,/", escc, i + 1);
+ size = snprintf(buf, buflen, "legacy-hc:///component=%s", escc);
+ topo_mod_free(mod, escc, i + 1);
+
+ return (size);
+}
+
+/*ARGSUSED*/
+static int
+legacy_hc_fmri_nvl2str(topo_mod_t *mod, tnode_t *node, topo_version_t version,
+ nvlist_t *nvl, nvlist_t **out)
+{
+ ssize_t len;
+ char *name = NULL;
+ nvlist_t *fmristr;
+
+ if (version > TOPO_METH_NVL2STR_VERSION)
+ return (topo_mod_seterrno(mod, EMOD_VER_NEW));
+
+ if ((len = fmri_nvl2str(mod, nvl, NULL, 0)) == 0 ||
+ (name = topo_mod_alloc(mod, len + 1)) == NULL ||
+ fmri_nvl2str(mod, nvl, name, len + 1) == 0) {
+ if (name != NULL)
+ topo_mod_free(mod, name, len + 1);
+ return (topo_mod_seterrno(mod, EMOD_FMRI_NVL));
+ }
+
+ if (topo_mod_nvalloc(mod, &fmristr, NV_UNIQUE_NAME) != 0) {
+ topo_mod_free(mod, name, len + 1);
+ return (topo_mod_seterrno(mod, EMOD_FMRI_NVL));
+ }
+ if (nvlist_add_string(fmristr, "fmri-string", name) != 0) {
+ topo_mod_free(mod, name, len + 1);
+ nvlist_free(fmristr);
+ return (topo_mod_seterrno(mod, EMOD_FMRI_NVL));
+ }
+ topo_mod_free(mod, name, len + 1);
+ *out = fmristr;
+
+ return (0);
+}
diff --git a/usr/src/lib/fm/topo/libtopo/common/legacy_hc.h b/usr/src/lib/fm/topo/libtopo/common/legacy_hc.h
new file mode 100644
index 0000000000..4425fad98d
--- /dev/null
+++ b/usr/src/lib/fm/topo/libtopo/common/legacy_hc.h
@@ -0,0 +1,46 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+
+/*
+ * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#ifndef _LEGACY_HC_H
+#define _LEGACY_HC_H
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define LEGACY_HC_VERSION 1
+#define LEGACY_HC "legacy-hc"
+
+extern int legacy_hc_init(topo_mod_t *, topo_version_t);
+extern void legacy_hc_fini(topo_mod_t *);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _LEGACY_HC_H */
diff --git a/usr/src/lib/fm/topo/libtopo/common/mod.c b/usr/src/lib/fm/topo/libtopo/common/mod.c
index efa986cb1b..4961739949 100644
--- a/usr/src/lib/fm/topo/libtopo/common/mod.c
+++ b/usr/src/lib/fm/topo/libtopo/common/mod.c
@@ -20,7 +20,7 @@
*/
/*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -266,11 +266,12 @@ fmri_nvl2str(nvlist_t *nvl, char *buf, size_t buflen)
ssize_t size = 0;
int32_t modid;
char *achas = NULL;
+ char *adom = NULL;
char *aprod = NULL;
char *asrvr = NULL;
+ char *ahost = NULL;
char *modname = NULL;
char numbuf[MAXINTSTR];
- int more_auth = 0;
int err;
if (nvlist_lookup_uint8(nvl, FM_VERSION, &version) != 0 ||
@@ -304,13 +305,11 @@ fmri_nvl2str(nvlist_t *nvl, char *buf, size_t buflen)
(void) nvlist_lookup_string(anvl,
FM_FMRI_AUTH_CHASSIS, &achas);
(void) nvlist_lookup_string(anvl,
+ FM_FMRI_AUTH_DOMAIN, &adom);
+ (void) nvlist_lookup_string(anvl,
FM_FMRI_AUTH_SERVER, &asrvr);
- if (aprod != NULL)
- more_auth++;
- if (achas != NULL)
- more_auth++;
- if (asrvr != NULL)
- more_auth++;
+ (void) nvlist_lookup_string(anvl,
+ FM_FMRI_AUTH_HOST, &ahost);
}
/* mod:// */
@@ -323,9 +322,15 @@ fmri_nvl2str(nvlist_t *nvl, char *buf, size_t buflen)
if (achas != NULL)
topo_fmristr_build(&size, buf, buflen, achas,
":" FM_FMRI_AUTH_CHASSIS "=", NULL);
+ if (adom != NULL)
+ topo_fmristr_build(&size, buf, buflen, adom,
+ ":" FM_FMRI_AUTH_DOMAIN "=", NULL);
if (asrvr != NULL)
topo_fmristr_build(&size, buf, buflen, asrvr,
":" FM_FMRI_AUTH_SERVER "=", NULL);
+ if (ahost != NULL)
+ topo_fmristr_build(&size, buf, buflen, ahost,
+ ":" FM_FMRI_AUTH_HOST "=", NULL);
/* module parts */
topo_fmristr_build(&size, buf, buflen, modname,
diff --git a/usr/src/lib/fm/topo/libtopo/common/pkg.c b/usr/src/lib/fm/topo/libtopo/common/pkg.c
index 81aa321cae..e952907f59 100644
--- a/usr/src/lib/fm/topo/libtopo/common/pkg.c
+++ b/usr/src/lib/fm/topo/libtopo/common/pkg.c
@@ -20,7 +20,7 @@
*/
/*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -45,6 +45,7 @@
#include <gelf.h>
#include <topo_method.h>
+#include <topo_subr.h>
#include <pkg.h>
#define BUFLEN (2 * PATH_MAX)
@@ -54,10 +55,14 @@ static int pkg_enum(topo_mod_t *, tnode_t *, const char *, topo_instance_t,
static void pkg_release(topo_mod_t *, tnode_t *);
static int pkg_fmri_create_meth(topo_mod_t *, tnode_t *, topo_version_t,
nvlist_t *, nvlist_t **);
+static int pkg_fmri_nvl2str(topo_mod_t *, tnode_t *, topo_version_t,
+ nvlist_t *, nvlist_t **);
static const topo_method_t pkg_methods[] = {
{ TOPO_METH_FMRI, TOPO_METH_FMRI_DESC, TOPO_METH_FMRI_VERSION,
TOPO_STABILITY_INTERNAL, pkg_fmri_create_meth },
+ { TOPO_METH_NVL2STR, TOPO_METH_NVL2STR_DESC, TOPO_METH_NVL2STR_VERSION,
+ TOPO_STABILITY_INTERNAL, pkg_fmri_nvl2str },
{ NULL }
};
@@ -238,3 +243,107 @@ pkg_fmri_create_meth(topo_mod_t *mp, tnode_t *node, topo_version_t version,
return (-1);
return (0);
}
+
+static ssize_t
+fmri_nvl2str(nvlist_t *nvl, char *buf, size_t buflen)
+{
+ nvlist_t *anvl = NULL;
+ uint8_t version;
+ ssize_t size = 0;
+ char *pkgname = NULL;
+ char *achas = NULL;
+ char *adom = NULL;
+ char *aprod = NULL;
+ char *asrvr = NULL;
+ char *ahost = NULL;
+ int err;
+
+ if (nvlist_lookup_uint8(nvl, FM_VERSION, &version) != 0 ||
+ version > FM_PKG_SCHEME_VERSION)
+ return (-1);
+
+ /* Get authority, if present */
+ err = nvlist_lookup_nvlist(nvl, FM_FMRI_AUTHORITY, &anvl);
+ if (err != 0 && err != ENOENT)
+ return (-1);
+
+ /*
+ * For brevity, we only include the pkgname and any authority
+ * info present in the FMRI in our output string. The FMRI
+ * also has data on the package directory and version.
+ */
+ err = nvlist_lookup_string(nvl, FM_FMRI_PKG_INST, &pkgname);
+ if (err != 0 || pkgname == NULL)
+ return (-1);
+
+ if (anvl != NULL) {
+ (void) nvlist_lookup_string(anvl,
+ FM_FMRI_AUTH_PRODUCT, &aprod);
+ (void) nvlist_lookup_string(anvl,
+ FM_FMRI_AUTH_CHASSIS, &achas);
+ (void) nvlist_lookup_string(anvl,
+ FM_FMRI_AUTH_DOMAIN, &adom);
+ (void) nvlist_lookup_string(anvl,
+ FM_FMRI_AUTH_SERVER, &asrvr);
+ (void) nvlist_lookup_string(anvl,
+ FM_FMRI_AUTH_HOST, &ahost);
+ }
+
+ /* pkg:// */
+ topo_fmristr_build(&size, buf, buflen, FM_FMRI_SCHEME_PKG, NULL, "://");
+
+ /* authority, if any */
+ if (aprod != NULL)
+ topo_fmristr_build(&size, buf, buflen, aprod,
+ FM_FMRI_AUTH_PRODUCT "=", NULL);
+ if (achas != NULL)
+ topo_fmristr_build(&size, buf, buflen, achas,
+ FM_FMRI_AUTH_CHASSIS "=", NULL);
+ if (adom != NULL)
+ topo_fmristr_build(&size, buf, buflen, adom,
+ FM_FMRI_AUTH_DOMAIN "=", NULL);
+ if (asrvr != NULL)
+ topo_fmristr_build(&size, buf, buflen, asrvr,
+ FM_FMRI_AUTH_SERVER "=", NULL);
+ if (ahost != NULL)
+ topo_fmristr_build(&size, buf, buflen, ahost,
+ FM_FMRI_AUTH_HOST "=", NULL);
+
+ /* pkg-name part */
+ topo_fmristr_build(&size, buf, buflen, pkgname, "/", NULL);
+
+ return (size);
+}
+
+/*ARGSUSED*/
+static int
+pkg_fmri_nvl2str(topo_mod_t *mod, tnode_t *node, topo_version_t version,
+ nvlist_t *nvl, nvlist_t **out)
+{
+ ssize_t len;
+ char *name = NULL;
+ nvlist_t *fmristr;
+
+ if (version > TOPO_METH_NVL2STR_VERSION)
+ return (topo_mod_seterrno(mod, EMOD_VER_NEW));
+
+ if ((len = fmri_nvl2str(nvl, NULL, 0)) == 0 ||
+ (name = topo_mod_alloc(mod, len + 1)) == NULL ||
+ fmri_nvl2str(nvl, name, len + 1) == 0) {
+ if (name != NULL)
+ topo_mod_free(mod, name, len + 1);
+ return (topo_mod_seterrno(mod, EMOD_FMRI_NVL));
+ }
+
+ if (topo_mod_nvalloc(mod, &fmristr, NV_UNIQUE_NAME) != 0)
+ return (topo_mod_seterrno(mod, EMOD_FMRI_NVL));
+ if (nvlist_add_string(fmristr, "fmri-string", name) != 0) {
+ topo_mod_free(mod, name, len + 1);
+ nvlist_free(fmristr);
+ return (topo_mod_seterrno(mod, EMOD_FMRI_NVL));
+ }
+ topo_mod_free(mod, name, len + 1);
+ *out = fmristr;
+
+ return (0);
+}
diff --git a/usr/src/lib/fm/topo/libtopo/common/zfs.c b/usr/src/lib/fm/topo/libtopo/common/zfs.c
new file mode 100644
index 0000000000..b7bcda4974
--- /dev/null
+++ b/usr/src/lib/fm/topo/libtopo/common/zfs.c
@@ -0,0 +1,203 @@
+/*
+ *
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+
+/*
+ * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <ctype.h>
+#include <alloca.h>
+#include <limits.h>
+#include <fm/topo_mod.h>
+#include <sys/param.h>
+#include <sys/systeminfo.h>
+#include <sys/fm/protocol.h>
+#include <sys/stat.h>
+
+#include <topo_method.h>
+#include <topo_subr.h>
+#include <libzfs.h>
+#include <zfs.h>
+
+static int zfs_enum(topo_mod_t *, tnode_t *, const char *, topo_instance_t,
+ topo_instance_t, void *, void *);
+static void zfs_release(topo_mod_t *, tnode_t *);
+static int zfs_fmri_nvl2str(topo_mod_t *, tnode_t *, topo_version_t,
+ nvlist_t *, nvlist_t **);
+
+const topo_method_t zfs_methods[] = {
+ { TOPO_METH_NVL2STR, TOPO_METH_NVL2STR_DESC, TOPO_METH_NVL2STR_VERSION,
+ TOPO_STABILITY_INTERNAL, zfs_fmri_nvl2str },
+ { NULL }
+};
+
+static const topo_modops_t zfs_ops =
+ { zfs_enum, zfs_release };
+static const topo_modinfo_t zfs_info =
+ { ZFS, FM_FMRI_SCHEME_ZFS, ZFS_VERSION, &zfs_ops };
+
+int
+zfs_init(topo_mod_t *mod, topo_version_t version)
+{
+ /*
+ * Turn on module debugging output
+ */
+ if (getenv("TOPOZFSDEBUG"))
+ topo_mod_setdebug(mod);
+
+ topo_mod_dprintf(mod, "initializing zfs builtin\n");
+
+ if (version != ZFS_VERSION)
+ return (topo_mod_seterrno(mod, EMOD_VER_NEW));
+
+ if (topo_mod_register(mod, &zfs_info, TOPO_VERSION) != 0) {
+ topo_mod_dprintf(mod, "failed to register zfs: "
+ "%s\n", topo_mod_errmsg(mod));
+ return (-1); /* mod errno already set */
+ }
+
+ return (0);
+}
+
+void
+zfs_fini(topo_mod_t *mod)
+{
+ topo_mod_unregister(mod);
+}
+
+
+/*ARGSUSED*/
+int
+zfs_enum(topo_mod_t *mod, tnode_t *pnode, const char *name, topo_instance_t min,
+ topo_instance_t max, void *notused1, void *notused2)
+{
+ (void) topo_method_register(mod, pnode, zfs_methods);
+ return (0);
+}
+
+/*ARGSUSED*/
+static void
+zfs_release(topo_mod_t *mp, tnode_t *node)
+{
+ topo_method_unregister_all(mp, node);
+}
+
+typedef struct cbdata {
+ uint64_t cb_guid;
+ zpool_handle_t *cb_pool;
+} cbdata_t;
+
+libzfs_handle_t *g_zfs;
+
+static int
+find_pool(zpool_handle_t *zhp, void *data)
+{
+ cbdata_t *cbp = data;
+
+ if (zpool_get_prop_int(zhp, ZPOOL_PROP_GUID, NULL) == cbp->cb_guid) {
+ cbp->cb_pool = zhp;
+ return (1);
+ }
+
+ zpool_close(zhp);
+
+ return (0);
+}
+
+static ssize_t
+fmri_nvl2str(nvlist_t *nvl, char *buf, size_t buflen)
+{
+ uint64_t pool_guid, vdev_guid;
+ cbdata_t cb;
+ ssize_t len;
+ const char *name;
+ char guidbuf[64];
+
+ (void) nvlist_lookup_uint64(nvl, FM_FMRI_ZFS_POOL, &pool_guid);
+
+ /*
+ * Attempt to convert the pool guid to a name.
+ */
+ cb.cb_guid = pool_guid;
+ cb.cb_pool = NULL;
+
+ if (zpool_iter(g_zfs, find_pool, &cb) == 1) {
+ name = zpool_get_name(cb.cb_pool);
+ } else {
+ (void) snprintf(guidbuf, sizeof (guidbuf), "%llx", pool_guid);
+ name = guidbuf;
+ }
+
+ if (nvlist_lookup_uint64(nvl, FM_FMRI_ZFS_VDEV, &vdev_guid) == 0)
+ len = snprintf(buf, buflen, "%s://pool=%s/vdev=%llx",
+ FM_FMRI_SCHEME_ZFS, name, vdev_guid);
+ else
+ len = snprintf(buf, buflen, "%s://pool=%s",
+ FM_FMRI_SCHEME_ZFS, name);
+
+ if (cb.cb_pool)
+ zpool_close(cb.cb_pool);
+
+ return (len);
+}
+
+/*ARGSUSED*/
+static int
+zfs_fmri_nvl2str(topo_mod_t *mod, tnode_t *node, topo_version_t version,
+ nvlist_t *nvl, nvlist_t **out)
+{
+ ssize_t len;
+ char *name = NULL;
+ nvlist_t *fmristr;
+
+ if (version > TOPO_METH_NVL2STR_VERSION)
+ return (topo_mod_seterrno(mod, EMOD_VER_NEW));
+
+ if ((len = fmri_nvl2str(nvl, NULL, 0)) == 0 ||
+ (name = topo_mod_alloc(mod, len + 1)) == NULL ||
+ fmri_nvl2str(nvl, name, len + 1) == 0) {
+ if (name != NULL)
+ topo_mod_free(mod, name, len + 1);
+ return (topo_mod_seterrno(mod, EMOD_FMRI_NVL));
+ }
+
+ if (topo_mod_nvalloc(mod, &fmristr, NV_UNIQUE_NAME) != 0) {
+ topo_mod_free(mod, name, len + 1);
+ return (topo_mod_seterrno(mod, EMOD_FMRI_NVL));
+ }
+ if (nvlist_add_string(fmristr, "fmri-string", name) != 0) {
+ topo_mod_free(mod, name, len + 1);
+ nvlist_free(fmristr);
+ return (topo_mod_seterrno(mod, EMOD_FMRI_NVL));
+ }
+ topo_mod_free(mod, name, len + 1);
+ *out = fmristr;
+
+ return (0);
+}
diff --git a/usr/src/lib/fm/topo/libtopo/common/zfs.h b/usr/src/lib/fm/topo/libtopo/common/zfs.h
new file mode 100644
index 0000000000..c3adcc3537
--- /dev/null
+++ b/usr/src/lib/fm/topo/libtopo/common/zfs.h
@@ -0,0 +1,46 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+
+/*
+ * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#ifndef _ZFS_H
+#define _ZFS_H
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define ZFS_VERSION 1
+#define ZFS "zfs"
+
+extern int zfs_init(topo_mod_t *, topo_version_t); /* see zfs.c */
+extern void zfs_fini(topo_mod_t *); /* see zfs.c */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _ZFS_H */
diff --git a/usr/src/lib/fm/topo/libtopo/i386/Makefile b/usr/src/lib/fm/topo/libtopo/i386/Makefile
index a333224278..cd8a4643d9 100644
--- a/usr/src/lib/fm/topo/libtopo/i386/Makefile
+++ b/usr/src/lib/fm/topo/libtopo/i386/Makefile
@@ -19,7 +19,7 @@
# CDDL HEADER END
#
#
-# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2008 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
# ident "%Z%%M% %I% %E% SMI"
@@ -27,4 +27,6 @@
include ../Makefile.com
+LDLIBS += -lzfs
+
install: all $(ROOTLIBS) $(ROOTLINKS) $(ROOTLINT)
diff --git a/usr/src/lib/fm/topo/libtopo/sparc/Makefile b/usr/src/lib/fm/topo/libtopo/sparc/Makefile
index ddd13b2c7d..976e50cd5f 100644
--- a/usr/src/lib/fm/topo/libtopo/sparc/Makefile
+++ b/usr/src/lib/fm/topo/libtopo/sparc/Makefile
@@ -30,4 +30,6 @@ include ../Makefile.com
CPPFLAGS += -I $(ROOT)/usr/platform/sun4v/include
LDLIBS += -L$(ROOTLIBDIR)
+LDLIBS += -lzfs
+
install: all $(ROOTLIBS) $(ROOTLINKS) $(ROOTLINT)
diff --git a/usr/src/lib/fm/topo/libtopo/sparcv9/Makefile b/usr/src/lib/fm/topo/libtopo/sparcv9/Makefile
index 0db0f4bdc2..9a45e99e29 100644
--- a/usr/src/lib/fm/topo/libtopo/sparcv9/Makefile
+++ b/usr/src/lib/fm/topo/libtopo/sparcv9/Makefile
@@ -31,4 +31,6 @@ include ../../../../Makefile.lib.64
CPPFLAGS += -I $(ROOT)/usr/platform/sun4v/include
LDLIBS += -L$(ROOTLIBDIR64)
+LDLIBS += -lzfs
+
install: all $(ROOTLIBS64) $(ROOTLINKS64) $(ROOTLINT64)
diff --git a/usr/src/lib/fm/topo/modules/i86pc/chip/chip_amd.c b/usr/src/lib/fm/topo/modules/i86pc/chip/chip_amd.c
index 789398cfac..69a8804082 100644
--- a/usr/src/lib/fm/topo/modules/i86pc/chip/chip_amd.c
+++ b/usr/src/lib/fm/topo/modules/i86pc/chip/chip_amd.c
@@ -484,6 +484,8 @@ amd_cs_create(topo_mod_t *mod, tnode_t *pnode, const char *name, nvlist_t *mc,
(void) topo_node_asru_set(csnode, fmri, 0, &err);
+ (void) topo_node_fru_set(csnode, fmri, 0, &err);
+
(void) topo_pgroup_create(csnode, &cs_pgroup, &err);
for (nvp = nvlist_next_nvpair(csarr[i], NULL); nvp != NULL;
@@ -503,6 +505,7 @@ amd_dramchan_create(topo_mod_t *mod, tnode_t *pnode, const char *name,
nvlist_t *fmri;
char *socket;
int i, nchan;
+ nvlist_t *pfmri = NULL;
int err, nerr = 0;
/*
@@ -521,6 +524,8 @@ amd_dramchan_create(topo_mod_t *mod, tnode_t *pnode, const char *name,
if (topo_node_range_create(mod, pnode, name, 0, nchan - 1) < 0)
return (-1);
+ (void) topo_node_fru(pnode, &pfmri, NULL, &err);
+
for (i = 0; i < nchan; i++) {
if (mkrsrc(mod, pnode, name, i, auth, &fmri) != 0) {
whinge(mod, &nerr, "amd_dramchan_create: mkrsrc "
@@ -536,6 +541,10 @@ amd_dramchan_create(topo_mod_t *mod, tnode_t *pnode, const char *name,
continue;
}
+ (void) topo_node_asru_set(chnode, fmri, 0, &err);
+ if (pfmri)
+ (void) topo_node_fru_set(chnode, pfmri, 0, &err);
+
nvlist_free(fmri);
(void) topo_pgroup_create(chnode, &chan_pgroup, &err);
@@ -543,6 +552,8 @@ amd_dramchan_create(topo_mod_t *mod, tnode_t *pnode, const char *name,
(void) topo_prop_set_string(chnode, PGNAME(CHAN), "channel",
TOPO_PROP_IMMUTABLE, i == 0 ? "A" : "B", &err);
}
+ if (pfmri)
+ nvlist_free(pfmri);
return (nerr == 0 ? 0 : -1);
}
diff --git a/usr/src/uts/common/sys/fm/protocol.h b/usr/src/uts/common/sys/fm/protocol.h
index c10e65c8be..963474a5a2 100644
--- a/usr/src/uts/common/sys/fm/protocol.h
+++ b/usr/src/uts/common/sys/fm/protocol.h
@@ -81,6 +81,8 @@ extern "C" {
#define FM_SUSPECT_FAULT_SZ "fault-list-sz"
#define FM_SUSPECT_FAULT_STATUS "fault-status"
#define FM_SUSPECT_MESSAGE "message"
+#define FM_SUSPECT_RETIRE "retire"
+#define FM_SUSPECT_RESPONSE "response"
#define FM_SUSPECT_VERS0 0
#define FM_SUSPECT_VERSION FM_SUSPECT_VERS0