diff options
Diffstat (limited to 'usr/src')
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 |