e1000e failure triggered by "PCI: Remove MRRS modification from MPS setting code"
Commit ed2888e906b567 (merged 3.1-rc6) causes a reproducible failure with my e1000e card here. Starting a kvm guest (which mostly consists of shoving display updates over X over ssh, as far as the network is concerned) locks up the card hard.
The failure is easily reproducible, will gladly test patches.
Signature · 1 line
error compiling committee.c: too many arguments to function
Quoted 6 lines · Avi Kivity
Commit
ed2888e906b567(merged 3.1-rc6) causes a reproducible failure with my e1000e card here. Starting a kvm guest (which mostly consists of shoving display updates over X over ssh, as far as the network is concerned) locks up the card hard.The failure is easily reproducible, will gladly test patches.
Does the problem occur with the adapter assigned to the kvm guest or the host? I assume that you are running with the default behavior and not with the boot arg "pci=pcie_bus_perf". Can you get the dmesg output (specifically the lines that have "Dev MPS") and lspci -vvv on the host? Is this an e1000e 4port adapter?
Thanks,
Jon
Quoted 9 lines
--
error compilingcommittee.c: too many arguments to function--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 10 lines · Jon Mason
Quoted 6 lines · Avi Kivity
Commit
ed2888e906b567(merged 3.1-rc6) causes a reproducible failure with my e1000e card here. Starting a kvm guest (which mostly consists of shoving display updates over X over ssh, as far as the network is concerned) locks up the card hard.The failure is easily reproducible, will gladly test patches.
Does the problem occur with the adapter assigned to the kvm guest or the host?
The host. It's not even using vhost-net or tap or bridge. In fact the failure happens before the guest has set up neworking itself (in grub, while clearing the screen); all of the networking load is due to tunnelling X over ssh.
Quoted 2 lines
I assume that you are running with the default behavior and not with the boot arg "pci=pcie_bus_perf".
Correct.
Quoted 2 lines
Can you get the dmesg
output (specifically the lines that have "Dev MPS")
(this is with the patch reverted)
Sep 27 20:42:48 violet-regb kernel: pci 0000:02:02.0: PCI bridge to [bus 04-04] Sep 27 20:42:48 violet-regb kernel: pci 0000:01:00.3: PCI bridge to [bus 05-05] Sep 27 20:42:48 violet-regb kernel: pci 0000:00:03.0: PCI bridge to [bus 06-06] Sep 27 20:42:48 violet-regb kernel: pci 0000:00:1c.0: PCI bridge to [bus 07-07] Sep 27 20:42:48 violet-regb kernel: pci 0000:00:1e.0: PCI bridge to [bus 08-08] (subtractive decode) Sep 27 20:42:48 violet-regb kernel: pci 0000:00:02.0: Dev MPS 128 MPSS 256 MRRS 128 Sep 27 20:42:48 violet-regb kernel: pci 0000:00:02.0: Dev MPS 256 MPSS 256 MRRS 128 Sep 27 20:42:48 violet-regb kernel: pci 0000:01:00.0: Dev MPS 128 MPSS 256 MRRS 4096 Sep 27 20:42:48 violet-regb kernel: pci 0000:01:00.0: Dev MPS 256 MPSS 256 MRRS 128 Sep 27 20:42:48 violet-regb kernel: pci 0000:02:00.0: Dev MPS 128 MPSS 256 MRRS 2048 Sep 27 20:42:48 violet-regb kernel: pci 0000:02:00.0: Dev MPS 256 MPSS 256 MRRS 128 Sep 27 20:42:48 violet-regb kernel: pci 0000:02:02.0: Dev MPS 128 MPSS 256 MRRS 2048 Sep 27 20:42:48 violet-regb kernel: pci 0000:02:02.0: Dev MPS 256 MPSS 256 MRRS 128 Sep 27 20:42:48 violet-regb kernel: pci 0000:04:00.0: Dev MPS 128 MPSS 256 MRRS 512 Sep 27 20:42:48 violet-regb kernel: pci 0000:04:00.0: Dev MPS 256 MPSS 256 MRRS 128 Sep 27 20:42:48 violet-regb kernel: pci 0000:04:00.1: Dev MPS 128 MPSS 256 MRRS 512 Sep 27 20:42:48 violet-regb kernel: pci 0000:04:00.1: Dev MPS 256 MPSS 256 MRRS 128 Sep 27 20:42:48 violet-regb kernel: pci 0000:01:00.3: Dev MPS 256 MPSS 256 MRRS 256 Sep 27 20:42:48 violet-regb kernel: pci 0000:01:00.3: Dev MPS 256 MPSS 256 MRRS 256 Sep 27 20:42:48 violet-regb kernel: pci 0000:00:03.0: Dev MPS 128 MPSS 256 MRRS 128 Sep 27 20:42:48 violet-regb kernel: pci 0000:00:03.0: Dev MPS 256 MPSS 256 MRRS 128 Sep 27 20:42:48 violet-regb kernel: pci 0000:00:1c.0: Dev MPS 128 MPSS 128 MRRS 128 Sep 27 20:42:48 violet-regb kernel: pci 0000:00:1c.0: Dev MPS 128 MPSS 128 MRRS 128 Sep 27 20:42:48 violet-regb kernel: pci0000:00: Requesting ACPI _OSC control (0x1d) Sep 27 20:42:48 violet-regb kernel: pci0000:00: ACPI _OSC request failed (AE_NOT_FOUND), returned control mask: 0x1d Sep 27 20:42:48 violet-regb kernel: ACPI _OSC control for PCIe not granted, disabling ASPM Sep 27 20:42:48 violet-regb kernel: ACPI: PCI Interrupt Link [LNKA] (IRQs 3 4 5 6 *7 10 11 14 15) Sep 27 20:42:48 violet-regb kernel: ACPI: PCI Interrupt Link [LNKB] (IRQs 3 4 *5 6 7 10 11 14 15) Sep 27 20:42:48 violet-regb kernel: ACPI: PCI Interrupt Link [LNKC] (IRQs 3 4 5 6 7 *10 11 14 15) Sep 27 20:42:48 violet-regb kernel: ACPI: PCI Interrupt Link [LNKD] (IRQs 3 4 5 6 7 10 *11 14 15) Sep 27 20:42:48 violet-regb kernel: ACPI: PCI Interrupt Link [LNKE] (IRQs 3 4 5 6 7 10 11 14 15) *0, disabled. Sep 27 20:42:48 violet-regb kernel: ACPI: PCI Interrupt Link [LNKF] (IRQs 4 5 6 7 10 11 14 15) *0, disabled. Sep 27 20:42:48 violet-regb kernel: ACPI: PCI Interrupt Link [LNKG] (IRQs 3 4 5 6 7 10 11 14 15) *0, disabled.
Quoted 2 lines
and lspci -vvv on
the host?
# lspci -vvv
00:00.0 Host bridge: Intel Corporation 5000V Chipset Memory Controller Hub (rev 92)
Subsystem: Tyan Computer Device 5372
Control: I/O- Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 32 bytes
Interrupt: pin A routed to IRQ 0
Capabilities: [50] Power Management version 2
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA
PME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [58] MSI: Enable- Count=1/2 Maskable- 64bit-
Address: fee00000 Data: 0000
Capabilities: [6c] Express (v1) Root Port (Slot-), MSI 00
DevCap: MaxPayload 256 bytes, PhantFunc 0, Latency L0s
unlimited, L1 unlimited
ExtTag- RBE- FLReset-
DevCtl: Report errors: Correctable- Non-Fatal- Fatal-
Unsupported-
RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop+
MaxPayload 128 bytes, MaxReadReq 128 bytes
DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr-
TransPend-
LnkCap: Port #0, Speed 2.5GT/s, Width x4, ASPM L0s, Latency
L0 unlimited, L1 unlimited
ClockPM- Surprise+ LLActRep+ BwNot-
LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- Retrain- CommClk+
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 2.5GT/s, Width x4, TrErr- Train- SlotClk+
DLActive+ BWMgmt- ABWMgmt-
RootCtl: ErrCorrectable- ErrNon-Fatal- ErrFatal- PMEIntEna-
CRSVisible-
RootCap: CRSVisible-
RootSta: PME ReqID 0000, PMEStatus- PMEPending-
Capabilities: [100 v1] Advanced Error Reporting
UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt-
RxOF- MalfTLP- ECRC- UnsupReq- ACSViol+
UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt-
RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UESvrt: DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt-
RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol+
CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
AERCap: First Error Pointer: 15, GenCap- CGenEn- ChkCap- ChkEn-00:02.0 PCI bridge: Intel Corporation 5000 Series Chipset PCI Express x8 Port 2-3 (rev 92) (prog-if 00 [Normal decode])
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 32 bytes
Bus: primary=00, secondary=01, subordinate=05, sec-latency=0
I/O behind bridge: 00002000-00002fff
Memory behind bridge: df100000-df2fffff
Prefetchable memory behind bridge: 00000000d0000000-00000000d00fffff
Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- <SERR- <PERR-
BridgeCtl: Parity- SERR- NoISA+ VGA- MAbort- >Reset- FastB2B-
PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
Capabilities: [50] Power Management version 2
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mAPME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [58] MSI: Enable- Count=1/2 Maskable- 64bit-
Address: fee00000 Data: 0000
Capabilities: [6c] Express (v1) Root Port (Slot-), MSI 00
DevCap: MaxPayload 256 bytes, PhantFunc 0, Latency L0s
unlimited, L1 unlimited
ExtTag- RBE- FLReset-
DevCtl: Report errors: Correctable- Non-Fatal- Fatal-
Unsupported-
RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop+
MaxPayload 256 bytes, MaxReadReq 128 bytes
DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr-
TransPend-
LnkCap: Port #2, Speed 2.5GT/s, Width x8, ASPM L0s, Latency
L0 unlimited, L1 unlimited
ClockPM- Surprise+ LLActRep+ BwNot-
LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- Retrain- CommClk+
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 2.5GT/s, Width x8, TrErr- Train- SlotClk+
DLActive+ BWMgmt- ABWMgmt-
RootCtl: ErrCorrectable+ ErrNon-Fatal- ErrFatal- PMEIntEna-
CRSVisible-
RootCap: CRSVisible-
RootSta: PME ReqID 0000, PMEStatus- PMEPending-
Capabilities: [100 v1] Advanced Error Reporting
UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt-
RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UEMsk: DLP- SDES+ TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt-
RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UESvrt: DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt-
RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
AERCap: First Error Pointer: 00, GenCap- CGenEn- ChkCap- ChkEn-
Kernel driver in use: pcieport
00:03.0 PCI bridge: Intel Corporation 5000 Series Chipset PCI Express x4 Port 3 (rev 92) (prog-if 00 [Normal decode])
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 32 bytes
Bus: primary=00, secondary=06, subordinate=06, sec-latency=0
I/O behind bridge: 0000f000-00000fff
Memory behind bridge: fff00000-000fffff
Prefetchable memory behind bridge: 00000000fff00000-00000000000fffff
Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- <SERR- <PERR-
BridgeCtl: Parity- SERR- NoISA+ VGA- MAbort- >Reset- FastB2B-
PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
Capabilities: [50] Power Management version 2
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mAPME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [58] MSI: Enable- Count=1/2 Maskable- 64bit-
Address: fee00000 Data: 0000
Capabilities: [6c] Express (v1) Root Port (Slot-), MSI 00
DevCap: MaxPayload 256 bytes, PhantFunc 0, Latency L0s
unlimited, L1 unlimited
ExtTag- RBE- FLReset-
DevCtl: Report errors: Correctable- Non-Fatal- Fatal-
Unsupported-
RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop+ MaxPayload 256 bytes, MaxReadReq 128 bytes
DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr-
TransPend-
LnkCap: Port #3, Speed 2.5GT/s, Width x4, ASPM L0s, Latency
L0 unlimited, L1 unlimited
ClockPM- Surprise+ LLActRep+ BwNot-
LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- Retrain- CommClk+
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 2.5GT/s, Width x0, TrErr- Train- SlotClk+
DLActive- BWMgmt- ABWMgmt-
RootCtl: ErrCorrectable+ ErrNon-Fatal- ErrFatal- PMEIntEna-
CRSVisible-
RootCap: CRSVisible-
RootSta: PME ReqID 0000, PMEStatus- PMEPending-
Capabilities: [100 v1] Advanced Error Reporting
UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt-
RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UEMsk: DLP- SDES+ TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt-
RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UESvrt: DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt-
RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
AERCap: First Error Pointer: 00, GenCap- CGenEn- ChkCap- ChkEn-
Kernel driver in use: pcieport
00:08.0 System peripheral: Intel Corporation 5000 Series Chipset DMA Engine (rev 92)
Subsystem: Intel Corporation Device 8086
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0
Interrupt: pin A routed to IRQ 0
Region 0: Memory at fe700000 (64-bit, non-prefetchable) [size=1K]
Capabilities: [50] Power Management version 2
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mAPME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [58] MSI: Enable- Count=1/1 Maskable- 64bit-
Address: fee00000 Data: 0000
Capabilities: [6c] Express (v1) Root Complex Integrated Endpoint,
MSI 00
DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s
<64ns, L1 <1us
ExtTag- RBE- FLReset-
DevCtl: Report errors: Correctable- Non-Fatal- Fatal+
Unsupported-
RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop-
MaxPayload 128 bytes, MaxReadReq 128 bytes
DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr-
TransPend-
LnkCap: Port #0, Speed unknown, Width x0, ASPM unknown,
Latency L0 <64ns, L1 <1us
ClockPM- Surprise- LLActRep- BwNot-
LnkCtl: ASPM Disabled; Disabled- Retrain- CommClk-
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed unknown, Width x0, TrErr- Train- SlotClk-
DLActive- BWMgmt- ABWMgmt-
00:10.0 Host bridge: Intel Corporation 5000 Series Chipset FSB Registers (rev 92)
Subsystem: Intel Corporation Device 8086
Control: I/O- Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
00:10.1 Host bridge: Intel Corporation 5000 Series Chipset FSB Registers (rev 92)
Subsystem: Intel Corporation Device 8086
Control: I/O- Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
00:10.2 Host bridge: Intel Corporation 5000 Series Chipset FSB Registers (rev 92)
Subsystem: Intel Corporation Device 8086
Control: I/O- Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
00:11.0 Host bridge: Intel Corporation 5000 Series Chipset Reserved Registers (rev 92)
Subsystem: Intel Corporation Device 8086
Control: I/O- Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
00:13.0 Host bridge: Intel Corporation 5000 Series Chipset Reserved Registers (rev 92)
Subsystem: Intel Corporation Device 8086
Control: I/O- Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
00:15.0 Host bridge: Intel Corporation 5000 Series Chipset FBD Registers (rev 92)
Subsystem: Intel Corporation Device 8086
Control: I/O- Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
00:16.0 Host bridge: Intel Corporation 5000 Series Chipset FBD Registers (rev 92)
Subsystem: Intel Corporation Device 8086
Control: I/O- Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
00:1c.0 PCI bridge: Intel Corporation 631xESB/632xESB/3100 Chipset PCI Express Root Port 1 (rev 09) (prog-if 00 [Normal decode])
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx+
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 32 bytes
Bus: primary=00, secondary=07, subordinate=07, sec-latency=0
I/O behind bridge: 00004000-00004fff
Memory behind bridge: d0100000-d02fffff
Prefetchable memory behind bridge: 00000000d0300000-00000000d04fffff
Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- <SERR- <PERR-
BridgeCtl: Parity- SERR- NoISA+ VGA- MAbort- >Reset- FastB2B-
PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
Capabilities: [40] Express (v1) Root Port (Slot+), MSI 00
DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s
unlimited, L1 unlimited
ExtTag+ RBE- FLReset-
DevCtl: Report errors: Correctable- Non-Fatal- Fatal-
Unsupported-
RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop- MaxPayload 128 bytes, MaxReadReq 128 bytes
DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr+
TransPend-
LnkCap: Port #1, Speed 2.5GT/s, Width x4, ASPM L0s L1,
Latency L0 <256ns, L1 <4us
ClockPM- Surprise- LLActRep- BwNot-
LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- Retrain- CommClk+
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 2.5GT/s, Width x0, TrErr- Train- SlotClk+
DLActive- BWMgmt- ABWMgmt-
SltCap: AttnBtn- PwrCtrl- MRL- AttnInd- PwrInd- HotPlug+
Surprise+
Slot #0, PowerLimit 0.000W; Interlock- NoCompl-
SltCtl: Enable: AttnBtn+ PwrFlt- MRL- PresDet+ CmdCplt-
HPIrq- LinkChg-
Control: AttnInd Off, PwrInd Off, Power- Interlock-
SltSta: Status: AttnBtn- PowerFlt- MRL- CmdCplt- PresDet-
Interlock-
Changed: MRL- PresDet- LinkState-
RootCtl: ErrCorrectable- ErrNon-Fatal- ErrFatal- PMEIntEna-
CRSVisible-
RootCap: CRSVisible-
RootSta: PME ReqID 0000, PMEStatus- PMEPending-
Capabilities: [80] MSI: Enable+ Count=1/1 Maskable- 64bit-
Address: fee0300c Data: 4151
Capabilities: [90] Subsystem: Tyan Computer Device 5372
Capabilities: [a0] Power Management version 2
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mAPME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [100 v1] Virtual Channel
Caps: LPEVC=0 RefClk=100ns PATEntryBits=1
Arb: Fixed+ WRR32- WRR64- WRR128-
Ctrl: ArbSelect=Fixed
Status: InProgress-
VC0: Caps: PATOffset=00 MaxTimeSlots=1 RejSnoopTrans-
Arb: Fixed+ WRR32- WRR64- WRR128- TWRR128- WRR256-
Ctrl: Enable+ ID=0 ArbSelect=Fixed TC/VC=ff
Status: NegoPending- InProgress-
VC1: Caps: PATOffset=00 MaxTimeSlots=1 RejSnoopTrans-
Arb: Fixed+ WRR32- WRR64- WRR128- TWRR128- WRR256-
Ctrl: Enable- ID=0 ArbSelect=Fixed TC/VC=00
Status: NegoPending- InProgress-
Capabilities: [180 v1] Root Complex Link
Desc: PortNumber=01 ComponentID=02 EltType=Config
Link0: Desc: TargetPort=00 TargetComponent=02 AssocRCRB-
LinkType=MemMapped LinkValid+
Addr: 00000000fed1c001
Kernel driver in use: pcieport
00:1d.0 USB Controller: Intel Corporation 631xESB/632xESB/3100 Chipset UHCI USB Controller #1 (rev 09) (prog-if 00 [UHCI])
Subsystem: Tyan Computer Device 5372
Control: I/O+ Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0
Interrupt: pin A routed to IRQ 17
Region 4: I/O ports at 1800 [size=32]
Kernel driver in use: uhci_hcd
00:1d.1 USB Controller: Intel Corporation 631xESB/632xESB/3100 Chipset UHCI USB Controller #2 (rev 09) (prog-if 00 [UHCI])
Subsystem: Tyan Computer Device 5372
Control: I/O+ Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0
Interrupt: pin B routed to IRQ 19
Region 4: I/O ports at 1820 [size=32]
Kernel driver in use: uhci_hcd
00:1d.2 USB Controller: Intel Corporation 631xESB/632xESB/3100 Chipset UHCI USB Controller #3 (rev 09) (prog-if 00 [UHCI])
Subsystem: Tyan Computer Device 5372
Control: I/O+ Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0
Interrupt: pin C routed to IRQ 18
Region 4: I/O ports at 1840 [size=32]
Kernel driver in use: uhci_hcd
00:1d.3 USB Controller: Intel Corporation 631xESB/632xESB/3100 Chipset UHCI USB Controller #4 (rev 09) (prog-if 00 [UHCI])
Subsystem: Tyan Computer Device 5372
Control: I/O+ Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0
Interrupt: pin D routed to IRQ 16
Region 4: I/O ports at 1860 [size=32]
Kernel driver in use: uhci_hcd
00:1d.7 USB Controller: Intel Corporation 631xESB/632xESB/3100 Chipset EHCI USB2 Controller (rev 09) (prog-if 20 [EHCI])
Subsystem: Intel Corporation 631xESB/632xESB/3100 Chipset EHCI USB2
Controller
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0
Interrupt: pin A routed to IRQ 17
Region 0: Memory at df500000 (32-bit, non-prefetchable) [size=1K]
Capabilities: [50] Power Management version 2
Flags: PMEClk- DSI- D1- D2- AuxCurrent=375mAPME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [58] Debug port: BAR=1 offset=00a0
Kernel driver in use: ehci_hcd
00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev d9) (prog-if 01 [Subtractive decode])
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0
Bus: primary=00, secondary=08, subordinate=08, sec-latency=32
I/O behind bridge: 00003000-00003fff
Memory behind bridge: df000000-df0fffff
Prefetchable memory behind bridge: 00000000de000000-00000000deffffff
Secondary status: 66MHz- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort+ <SERR- <PERR-
BridgeCtl: Parity- SERR- NoISA+ VGA+ MAbort- >Reset- FastB2B-
PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
Capabilities: [50] Subsystem: Tyan Computer Device 5372
00:1f.0 ISA bridge: Intel Corporation 631xESB/632xESB/3100 Chipset LPC Interface Controller (rev 09)
Subsystem: Tyan Computer Device 5372
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0
00:1f.2 IDE interface: Intel Corporation 631xESB/632xESB/3100 Chipset SATA IDE Controller (rev 09) (prog-if 80 [Master])
Subsystem: Tyan Computer Device 5372
Control: I/O+ Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz+ UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0
Interrupt: pin B routed to IRQ 19
Region 0: I/O ports at 01f0 [size=8]
Region 1: I/O ports at 03f4 [size=1]
Region 2: I/O ports at 0170 [size=8]
Region 3: I/O ports at 0374 [size=1]
Region 4: I/O ports at 18b0 [size=16]
Capabilities: [70] Power Management version 2
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot+,D3cold-)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
Kernel driver in use: ata_piix
Kernel modules: ata_generic, pata_acpi
00:1f.3 SMBus: Intel Corporation 631xESB/632xESB/3100 Chipset SMBus Controller (rev 09)
Subsystem: Tyan Computer Device 5372
Control: I/O+ Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Interrupt: pin C routed to IRQ 18
Region 4: I/O ports at 1100 [size=32]
Kernel driver in use: i801_smbus
Kernel modules: i2c-i801
01:00.0 PCI bridge: Intel Corporation 6311ESB/6321ESB PCI Express Upstream Port (rev 01) (prog-if 00 [Normal decode])
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 32 bytes
Bus: primary=01, secondary=02, subordinate=04, sec-latency=0
I/O behind bridge: 00002000-00002fff
Memory behind bridge: df200000-df2fffff
Prefetchable memory behind bridge: 00000000d0000000-00000000d00fffff
Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- <SERR- <PERR-
BridgeCtl: Parity- SERR- NoISA+ VGA- MAbort- >Reset- FastB2B-
PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
Capabilities: [44] Express (v1) Upstream Port, MSI 00
DevCap: MaxPayload 256 bytes, PhantFunc 0, Latency L0s
<64ns, L1 <1us
ExtTag- AttnBtn- AttnInd- PwrInd- RBE-
FLReset-SlotPowerLimit 0.000W
DevCtl: Report errors: Correctable- Non-Fatal- Fatal-
Unsupported-
RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop-
MaxPayload 256 bytes, MaxReadReq 128 bytes
DevSta: CorrErr- UncorrErr+ FatalErr- UnsuppReq+ AuxPwr-
TransPend-
LnkCap: Port #0, Speed 2.5GT/s, Width x8, ASPM L0s, Latency
L0 unlimited, L1 unlimited
ClockPM- Surprise- LLActRep- BwNot-
LnkCtl: ASPM Disabled; Disabled- Retrain- CommClk-
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 2.5GT/s, Width x8, TrErr- Train- SlotClk+
DLActive- BWMgmt- ABWMgmt-
Capabilities: [70] Power Management version 2
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mAPME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [80] Subsystem: Tyan Computer Device 5372
Capabilities: [100 v1] Advanced Error Reporting
UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt-
RxOF- MalfTLP- ECRC- UnsupReq+ ACSViol-
UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt-
RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UESvrt: DLP+ SDES- TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt-
RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
AERCap: First Error Pointer: 14, GenCap- CGenEn- ChkCap- ChkEn-
Kernel driver in use: pcieport
01:00.3 PCI bridge: Intel Corporation 6311ESB/6321ESB PCI Express to PCI-X Bridge (rev 01) (prog-if 00 [Normal decode])
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 64 bytes
Bus: primary=01, secondary=05, subordinate=05, sec-latency=64
I/O behind bridge: 0000f000-00000fff
Memory behind bridge: fff00000-000fffff
Prefetchable memory behind bridge: 00000000fff00000-00000000000fffff
Secondary status: 66MHz+ FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort+ <SERR- <PERR-
BridgeCtl: Parity- SERR- NoISA+ VGA- MAbort- >Reset- FastB2B-
PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
Capabilities: [44] Express (v1) PCI/PCI-X Bridge, MSI 00
DevCap: MaxPayload 256 bytes, PhantFunc 0, Latency L0s
<64ns, L1 <1us
ExtTag- AttnBtn- AttnInd- PwrInd- RBE- FLReset-
DevCtl: Report errors: Correctable- Non-Fatal- Fatal+
Unsupported-
RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop- BrConfRtry- MaxPayload 256 bytes, MaxReadReq 256 bytes
DevSta: CorrErr- UncorrErr+ FatalErr- UnsuppReq+ AuxPwr-
TransPend-
LnkCap: Port #0, Speed 2.5GT/s, Width x8, ASPM L0s, Latency
L0 unlimited, L1 unlimited
ClockPM- Surprise- LLActRep- BwNot-
LnkCtl: ASPM Disabled; Disabled- Retrain- CommClk-
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 2.5GT/s, Width x8, TrErr- Train- SlotClk-
DLActive- BWMgmt- ABWMgmt-
Capabilities: [6c] Power Management version 2
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mAPME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [80] Subsystem: Tyan Computer Device 5372
Capabilities: [d8] PCI-X bridge device
Secondary Status: 64bit+ 133MHz+ SCD- USC- SCO- SRD- Freq=133MHz
Status: Dev=00:00.3 64bit- 133MHz- SCD- USC- SCO- SRD-
Upstream: Capacity=65535 CommitmentLimit=65535
Downstream: Capacity=65535 CommitmentLimit=65535
Capabilities: [100 v1] Advanced Error Reporting
UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt-
RxOF- MalfTLP- ECRC- UnsupReq+ ACSViol-
UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt-
RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UESvrt: DLP+ SDES- TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt-
RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
AERCap: First Error Pointer: 14, GenCap- CGenEn- ChkCap- ChkEn-
02:00.0 PCI bridge: Intel Corporation 6311ESB/6321ESB PCI Express Downstream Port E1 (rev 01) (prog-if 00 [Normal decode])
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 32 bytes
Bus: primary=02, secondary=03, subordinate=03, sec-latency=0
I/O behind bridge: 0000f000-00000fff
Memory behind bridge: fff00000-000fffff
Prefetchable memory behind bridge: 00000000fff00000-00000000000fffff
Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- <SERR- <PERR-
BridgeCtl: Parity- SERR- NoISA+ VGA- MAbort- >Reset- FastB2B-
PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
Capabilities: [44] Express (v1) Downstream Port (Slot-), MSI 00
DevCap: MaxPayload 256 bytes, PhantFunc 0, Latency L0s
<64ns, L1 <1us
ExtTag- RBE- FLReset-
DevCtl: Report errors: Correctable- Non-Fatal- Fatal-
Unsupported-
RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop- MaxPayload 256 bytes, MaxReadReq 128 bytes
DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr-
TransPend-
LnkCap: Port #0, Speed 2.5GT/s, Width x8, ASPM L0s, Latency
L0 <512ns, L1 unlimited
ClockPM- Surprise- LLActRep- BwNot-
LnkCtl: ASPM Disabled; Disabled- Retrain- CommClk+
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 2.5GT/s, Width x0, TrErr- Train- SlotClk+
DLActive- BWMgmt- ABWMgmt-
Capabilities: [60] MSI: Enable- Count=1/1 Maskable- 64bit+
Address: 0000000000000000 Data: 0000
Capabilities: [70] Power Management version 2
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mAPME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [80] Subsystem: Tyan Computer Device 5372
Capabilities: [100 v1] Advanced Error Reporting
UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt-
RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt-
RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UESvrt: DLP+ SDES- TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt-
RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
AERCap: First Error Pointer: 00, GenCap- CGenEn- ChkCap- ChkEn-
Kernel driver in use: pcieport
02:02.0 PCI bridge: Intel Corporation 6311ESB/6321ESB PCI Express Downstream Port E3 (rev 01) (prog-if 00 [Normal decode])
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 32 bytes
Bus: primary=02, secondary=04, subordinate=04, sec-latency=0
I/O behind bridge: 00002000-00002fff
Memory behind bridge: df200000-df2fffff
Prefetchable memory behind bridge: 00000000d0000000-00000000d00fffff
Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- <SERR- <PERR-
BridgeCtl: Parity- SERR- NoISA+ VGA- MAbort- >Reset- FastB2B-
PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
Capabilities: [44] Express (v1) Downstream Port (Slot-), MSI 00
DevCap: MaxPayload 256 bytes, PhantFunc 0, Latency L0s
<64ns, L1 <1us
ExtTag- RBE- FLReset-
DevCtl: Report errors: Correctable- Non-Fatal- Fatal-
Unsupported-
RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop-
MaxPayload 256 bytes, MaxReadReq 128 bytes
DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr-
TransPend-
LnkCap: Port #0, Speed 2.5GT/s, Width x4, ASPM L0s, Latency
L0 unlimited, L1 unlimited
ClockPM- Surprise- LLActRep- BwNot-
LnkCtl: ASPM Disabled; Disabled- Retrain- CommClk-
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 2.5GT/s, Width x4, TrErr- Train- SlotClk+
DLActive- BWMgmt- ABWMgmt-
Capabilities: [60] MSI: Enable- Count=1/1 Maskable- 64bit+
Address: 0000000000000000 Data: 0000
Capabilities: [70] Power Management version 2
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mAPME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [80] Subsystem: Tyan Computer Device 5372
Capabilities: [100 v1] Advanced Error Reporting
UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt-
RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt-
RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UESvrt: DLP+ SDES- TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt-
RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
AERCap: First Error Pointer: 00, GenCap- CGenEn- ChkCap- ChkEn-
Kernel driver in use: pcieport
04:00.0 Ethernet controller: Intel Corporation 80003ES2LAN Gigabit Ethernet Controller (Copper) (rev 01)
Subsystem: Tyan Computer Device 5300
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx+
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 32 bytes
Interrupt: pin A routed to IRQ 65
Region 0: Memory at df220000 (32-bit, non-prefetchable) [size=128K]
Region 1: Memory at df200000 (32-bit, non-prefetchable) [size=128K]
Region 2: I/O ports at 2000 [size=32]
[virtual] Expansion ROM at d0000000 [disabled] [size=64K]
Capabilities: [c8] Power Management version 2
Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mAPME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=1 PME-
Capabilities: [d0] MSI: Enable+ Count=1/1 Maskable- 64bit+
Address: 00000000fee0100c Data: 4179
Capabilities: [e0] Express (v1) Endpoint, MSI 00
DevCap: MaxPayload 256 bytes, PhantFunc 0, Latency L0s
<512ns, L1 <64us
ExtTag- AttnBtn- AttnInd- PwrInd- RBE- FLReset-
DevCtl: Report errors: Correctable+ Non-Fatal+ Fatal+
Unsupported+
RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop+
MaxPayload 256 bytes, MaxReadReq 128 bytes
DevSta: CorrErr- UncorrErr+ FatalErr- UnsuppReq+ AuxPwr+
TransPend-
LnkCap: Port #0, Speed 2.5GT/s, Width x4, ASPM L0s L1,
Latency L0 <128ns, L1 <64us
ClockPM- Surprise- LLActRep- BwNot-
LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- Retrain- CommClk-
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 2.5GT/s, Width x4, TrErr- Train- SlotClk+
DLActive- BWMgmt- ABWMgmt-
Capabilities: [100 v1] Advanced Error Reporting
UESta: DLP- SDES- TLP- FCP- CmpltTO+ CmpltAbrt- UnxCmplt-
RxOF- MalfTLP- ECRC- UnsupReq+ ACSViol-
UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt-
RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UESvrt: DLP+ SDES- TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt-
RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
CESta: RxErr+ BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
AERCap: First Error Pointer: 14, GenCap- CGenEn- ChkCap- ChkEn-
Capabilities: [140 v1] Device Serial Number 00-e0-81-ff-ff-44-3f-4e
Kernel driver in use: e1000e
Kernel modules: e1000e
04:00.1 Ethernet controller: Intel Corporation 80003ES2LAN Gigabit Ethernet Controller (Copper) (rev 01)
Subsystem: Tyan Computer Device 5300
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx+
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 32 bytes
Interrupt: pin B routed to IRQ 66
Region 0: Memory at df260000 (32-bit, non-prefetchable) [size=128K]
Region 1: Memory at df240000 (32-bit, non-prefetchable) [size=128K]
Region 2: I/O ports at 2020 [size=32]
[virtual] Expansion ROM at d0010000 [disabled] [size=64K]
Capabilities: [c8] Power Management version 2
Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mAPME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=1 PME-
Capabilities: [d0] MSI: Enable+ Count=1/1 Maskable- 64bit+
Address: 00000000fee0200c Data: 4189
Capabilities: [e0] Express (v1) Endpoint, MSI 00
DevCap: MaxPayload 256 bytes, PhantFunc 0, Latency L0s
<512ns, L1 <64us
ExtTag- AttnBtn- AttnInd- PwrInd- RBE- FLReset-
DevCtl: Report errors: Correctable+ Non-Fatal+ Fatal+
Unsupported+
RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop+
MaxPayload 256 bytes, MaxReadReq 128 bytes
DevSta: CorrErr- UncorrErr+ FatalErr- UnsuppReq+ AuxPwr+
TransPend-
LnkCap: Port #0, Speed 2.5GT/s, Width x4, ASPM L0s L1,
Latency L0 <128ns, L1 <64us
ClockPM- Surprise- LLActRep- BwNot-
LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- Retrain- CommClk-
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 2.5GT/s, Width x4, TrErr- Train- SlotClk+
DLActive- BWMgmt- ABWMgmt-
Capabilities: [100 v1] Advanced Error Reporting
UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt-
RxOF- MalfTLP- ECRC- UnsupReq+ ACSViol-
UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt-
RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UESvrt: DLP+ SDES- TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt-
RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
CESta: RxErr+ BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
AERCap: First Error Pointer: 14, GenCap- CGenEn- ChkCap- ChkEn-
Capabilities: [140 v1] Device Serial Number 00-e0-81-ff-ff-44-3f-4e
Kernel driver in use: e1000e
Kernel modules: e1000e
08:01.0 VGA compatible controller: XGI Technology Inc. (eXtreme Graphics Innovation) Z7/Z9 (XG20 core) (prog-if 00 [VGA controller])
Subsystem: XGI Technology Inc. (eXtreme Graphics Innovation) Z7/Z9
(XG20 core)
Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz+ UDF- FastB2B- ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
BIST result: 00
Region 0: Memory at de000000 (32-bit, prefetchable) [size=16M]
Region 1: Memory at df000000 (32-bit, non-prefetchable) [size=256K]
Region 2: I/O ports at 3000 [size=128]
Expansion ROM at <unassigned> [disabled]
Capabilities: [40] Power Management version 2
Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mAPME(D0-,D1-,D2-,D3hot-,D3cold-)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
08:02.0 Ethernet controller: Intel Corporation 82557/8/9/0/1 Ethernet Pro 100 (rev 10)
Subsystem: Intel Corporation EtherExpress PRO/100 S Server Adapter
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV+ VGASnoop- ParErr-
Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 66 (2000ns min, 14000ns max), Cache Line Size: 32 bytes
Interrupt: pin A routed to IRQ 10
Region 0: Memory at df060000 (32-bit, non-prefetchable) [size=4K]
Region 1: I/O ports at 3080 [size=64]
Region 2: Memory at df040000 (32-bit, non-prefetchable) [size=128K]
Capabilities: [dc] Power Management version 2
Flags: PMEClk- DSI+ D1+ D2+ AuxCurrent=0mA PME(D0+,D1+,D2+,D3hot+,D3cold+)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=2 PME-
Quoted 1 line
Is this an e1000e 4port adapter?
Dual port.
Signature · 2 lines
I have a truly marvellous patch that fixes the bug which this signature is too narrow to contain.
Quoted 24 lines · Avi Kivity
Quoted 10 lines · Jon Mason
Quoted 8 lines · Avi Kivity
Commit
ed2888e906b567(merged 3.1-rc6) causes a reproducible failure with my
e1000e card here. Starting a kvm guest (which mostly consists of shoving
display updates over X over ssh, as far as the network is concerned) locks
up the card hard.Quoted 4 lines
Quoted 1 line
The failure is easily reproducible, will gladly test patches.
Does the problem occur with the adapter assigned to the kvm guest or the host?
The host. It's not even using vhost-net or tap or bridge. In fact the failure happens before the guest has set up neworking itself (in grub, while clearing the screen); all of the networking load is due to tunnelling X over ssh.
Quoted 2 lines
I assume that you are running with the default behavior and not with the boot arg "pci=pcie_bus_perf".
Quoted 6 lines
Correct.
Quoted 2 lines
Can you get the dmesg
output (specifically the lines that have "Dev MPS")(this is with the patch reverted)
Booting with "pci=pcie_bus_perf" should provide you with the same behavior as before (e.g., with the patch reverted). This should enable you work around this issue until I can get it resolved. On the positive side, your system should be 10% faster than it was in 3.0 (due to the PCI bus payloads being 2x larger).
If you can provide the same output with the patch not reverted, it would be very beneficial. Based on your description, the lockup only occurs with traffic. You can gather this before any traffic goes out (perhaps booting without networking enabled).
Quoted 66 lines
Sep 27 20:42:48 violet-regb kernel: pci 0000:02:02.0: PCI bridge to [bus 04-04] Sep 27 20:42:48 violet-regb kernel: pci 0000:01:00.3: PCI bridge to [bus 05-05] Sep 27 20:42:48 violet-regb kernel: pci 0000:00:03.0: PCI bridge to [bus 06-06] Sep 27 20:42:48 violet-regb kernel: pci 0000:00:1c.0: PCI bridge to [bus 07-07] Sep 27 20:42:48 violet-regb kernel: pci 0000:00:1e.0: PCI bridge to [bus 08-08] (subtractive decode) Sep 27 20:42:48 violet-regb kernel: pci 0000:00:02.0: Dev MPS 128 MPSS 256 MRRS 128 Sep 27 20:42:48 violet-regb kernel: pci 0000:00:02.0: Dev MPS 256 MPSS 256 MRRS 128 Sep 27 20:42:48 violet-regb kernel: pci 0000:01:00.0: Dev MPS 128 MPSS 256 MRRS 4096 Sep 27 20:42:48 violet-regb kernel: pci 0000:01:00.0: Dev MPS 256 MPSS 256 MRRS 128 Sep 27 20:42:48 violet-regb kernel: pci 0000:02:00.0: Dev MPS 128 MPSS 256 MRRS 2048 Sep 27 20:42:48 violet-regb kernel: pci 0000:02:00.0: Dev MPS 256 MPSS 256 MRRS 128 Sep 27 20:42:48 violet-regb kernel: pci 0000:02:02.0: Dev MPS 128 MPSS 256 MRRS 2048 Sep 27 20:42:48 violet-regb kernel: pci 0000:02:02.0: Dev MPS 256 MPSS 256 MRRS 128 Sep 27 20:42:48 violet-regb kernel: pci 0000:04:00.0: Dev MPS 128 MPSS 256 MRRS 512 Sep 27 20:42:48 violet-regb kernel: pci 0000:04:00.0: Dev MPS 256 MPSS 256 MRRS 128 Sep 27 20:42:48 violet-regb kernel: pci 0000:04:00.1: Dev MPS 128 MPSS 256 MRRS 512 Sep 27 20:42:48 violet-regb kernel: pci 0000:04:00.1: Dev MPS 256 MPSS 256 MRRS 128 Sep 27 20:42:48 violet-regb kernel: pci 0000:01:00.3: Dev MPS 256 MPSS 256 MRRS 256 Sep 27 20:42:48 violet-regb kernel: pci 0000:01:00.3: Dev MPS 256 MPSS 256 MRRS 256 Sep 27 20:42:48 violet-regb kernel: pci 0000:00:03.0: Dev MPS 128 MPSS 256 MRRS 128 Sep 27 20:42:48 violet-regb kernel: pci 0000:00:03.0: Dev MPS 256 MPSS 256 MRRS 128 Sep 27 20:42:48 violet-regb kernel: pci 0000:00:1c.0: Dev MPS 128 MPSS 128 MRRS 128 Sep 27 20:42:48 violet-regb kernel: pci 0000:00:1c.0: Dev MPS 128 MPSS 128 MRRS 128 Sep 27 20:42:48 violet-regb kernel: pci0000:00: Requesting ACPI _OSC control (0x1d) Sep 27 20:42:48 violet-regb kernel: pci0000:00: ACPI _OSC request failed (AE_NOT_FOUND), returned control mask: 0x1d Sep 27 20:42:48 violet-regb kernel: ACPI _OSC control for PCIe not granted, disabling ASPM Sep 27 20:42:48 violet-regb kernel: ACPI: PCI Interrupt Link [LNKA] (IRQs 3 4 5 6 *7 10 11 14 15) Sep 27 20:42:48 violet-regb kernel: ACPI: PCI Interrupt Link [LNKB] (IRQs 3 4 *5 6 7 10 11 14 15) Sep 27 20:42:48 violet-regb kernel: ACPI: PCI Interrupt Link [LNKC] (IRQs 3 4 5 6 7 *10 11 14 15) Sep 27 20:42:48 violet-regb kernel: ACPI: PCI Interrupt Link [LNKD] (IRQs 3 4 5 6 7 10 *11 14 15) Sep 27 20:42:48 violet-regb kernel: ACPI: PCI Interrupt Link [LNKE] (IRQs 3 4 5 6 7 10 11 14 15) *0, disabled. Sep 27 20:42:48 violet-regb kernel: ACPI: PCI Interrupt Link [LNKF] (IRQs 4 5 6 7 10 11 14 15) *0, disabled. Sep 27 20:42:48 violet-regb kernel: ACPI: PCI Interrupt Link [LNKG] (IRQs 3
Quoted 5 lines
4 5 6 7 10 11 14 15) *0, disabled.
Quoted 2 lines
and lspci -vvv on
the host?
lspci -vt might also help by making the bus hierarchy known.
Quoted 773 lines
# lspci -vvv 00:00.0 Host bridge: Intel Corporation 5000V Chipset Memory Controller Hub (rev 92) Subsystem: Tyan Computer Device 5372 Control: I/O- Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx- Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx- Latency: 0, Cache Line Size: 32 bytes Interrupt: pin A routed to IRQ 0 Capabilities: [50] Power Management version 2 Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0+,D1-,D2-,D3hot+,D3cold+) Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME- Capabilities: [58] MSI: Enable- Count=1/2 Maskable- 64bit- Address: fee00000 Data: 0000 Capabilities: [6c] Express (v1) Root Port (Slot-), MSI 00 DevCap: MaxPayload 256 bytes, PhantFunc 0, Latency L0s unlimited, L1 unlimited ExtTag- RBE- FLReset- DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported- RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop+ MaxPayload 128 bytes, MaxReadReq 128 bytes DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr- TransPend- LnkCap: Port #0, Speed 2.5GT/s, Width x4, ASPM L0s, Latency L0 unlimited, L1 unlimited ClockPM- Surprise+ LLActRep+ BwNot- LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- Retrain- CommClk+ ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt- LnkSta: Speed 2.5GT/s, Width x4, TrErr- Train- SlotClk+ DLActive+ BWMgmt- ABWMgmt- RootCtl: ErrCorrectable- ErrNon-Fatal- ErrFatal- PMEIntEna- CRSVisible- RootCap: CRSVisible- RootSta: PME ReqID 0000, PMEStatus- PMEPending- Capabilities: [100 v1] Advanced Error Reporting UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol+ UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol- UESvrt: DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol+ CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr- CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr- AERCap: First Error Pointer: 15, GenCap- CGenEn- ChkCap- ChkEn-00:02.0 PCI bridge: Intel Corporation 5000 Series Chipset PCI Express x8 Port 2-3 (rev 92) (prog-if 00 [Normal decode])
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 32 bytes
Bus: primary=00, secondary=01, subordinate=05, sec-latency=0 I/O behind bridge: 00002000-00002fff
Memory behind bridge: df100000-df2fffff
Prefetchable memory behind bridge: 00000000d0000000-00000000d00fffff Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- <SERR- <PERR-
BridgeCtl: Parity- SERR- NoISA+ VGA- MAbort- >Reset- FastB2B- PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
Capabilities: [50] Power Management version 2
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mAPME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [58] MSI: Enable- Count=1/2 Maskable- 64bit-
Address:fee00000Data: 0000
Capabilities: [6c] Express (v1) Root Port (Slot-), MSI 00
DevCap: MaxPayload 256 bytes, PhantFunc 0, Latency L0s unlimited, L1 unlimited
ExtTag- RBE- FLReset-
DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported- RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop+ MaxPayload 256 bytes, MaxReadReq 128 bytes
DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr- TransPend-
LnkCap: Port #2, Speed 2.5GT/s, Width x8, ASPM L0s, Latency L0 unlimited, L1 unlimited
ClockPM- Surprise+ LLActRep+ BwNot-
LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- Retrain- CommClk+ ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 2.5GT/s, Width x8, TrErr- Train- SlotClk+ DLActive+ BWMgmt- ABWMgmt-
RootCtl: ErrCorrectable+ ErrNon-Fatal- ErrFatal- PMEIntEna- CRSVisible-
RootCap: CRSVisible-
RootSta: PME ReqID 0000, PMEStatus- PMEPending-
Capabilities: [100 v1] Advanced Error Reporting
UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UEMsk: DLP- SDES+ TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UESvrt: DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
AERCap: First Error Pointer: 00, GenCap- CGenEn- ChkCap- ChkEn- Kernel driver in use: pcieport00:03.0 PCI bridge: Intel Corporation 5000 Series Chipset PCI Express x4 Port 3 (rev 92) (prog-if 00 [Normal decode])
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 32 bytes
Bus: primary=00, secondary=06, subordinate=06, sec-latency=0 I/O behind bridge: 0000f000-00000fff
Memory behind bridge: fff00000-000fffff
Prefetchable memory behind bridge: 00000000fff00000-00000000000fffff Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- <SERR- <PERR-
BridgeCtl: Parity- SERR- NoISA+ VGA- MAbort- >Reset- FastB2B- PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
Capabilities: [50] Power Management version 2
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mAPME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [58] MSI: Enable- Count=1/2 Maskable- 64bit-
Address:fee00000Data: 0000
Capabilities: [6c] Express (v1) Root Port (Slot-), MSI 00
DevCap: MaxPayload 256 bytes, PhantFunc 0, Latency L0s unlimited, L1 unlimited
ExtTag- RBE- FLReset-
DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported- RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop+ MaxPayload 256 bytes, MaxReadReq 128 bytes
DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr- TransPend-
LnkCap: Port #3, Speed 2.5GT/s, Width x4, ASPM L0s, Latency L0 unlimited, L1 unlimited
ClockPM- Surprise+ LLActRep+ BwNot-
LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- Retrain- CommClk+ ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 2.5GT/s, Width x0, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
RootCtl: ErrCorrectable+ ErrNon-Fatal- ErrFatal- PMEIntEna- CRSVisible-
RootCap: CRSVisible-
RootSta: PME ReqID 0000, PMEStatus- PMEPending-
Capabilities: [100 v1] Advanced Error Reporting
UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UEMsk: DLP- SDES+ TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UESvrt: DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
AERCap: First Error Pointer: 00, GenCap- CGenEn- ChkCap- ChkEn- Kernel driver in use: pcieport00:08.0 System peripheral: Intel Corporation 5000 Series Chipset DMA Engine (rev 92)
Subsystem: Intel Corporation Device 8086
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0
Interrupt: pin A routed to IRQ 0
Region 0: Memory atfe700000(64-bit, non-prefetchable) [size=1K]
Capabilities: [50] Power Management version 2
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mAPME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [58] MSI: Enable- Count=1/1 Maskable- 64bit-
Address:fee00000Data: 0000
Capabilities: [6c] Express (v1) Root Complex Integrated Endpoint, MSI 00
DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s <64ns, L1 <1us
ExtTag- RBE- FLReset-
DevCtl: Report errors: Correctable- Non-Fatal- Fatal+ Unsupported- RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop- MaxPayload 128 bytes, MaxReadReq 128 bytes
DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr- TransPend-
LnkCap: Port #0, Speed unknown, Width x0, ASPM unknown, Latency L0 <64ns, L1 <1us
ClockPM- Surprise- LLActRep- BwNot-
LnkCtl: ASPM Disabled; Disabled- Retrain- CommClk- ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed unknown, Width x0, TrErr- Train- SlotClk- DLActive- BWMgmt- ABWMgmt-00:10.0 Host bridge: Intel Corporation 5000 Series Chipset FSB Registers (rev 92)
Subsystem: Intel Corporation Device 8086
Control: I/O- Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-00:10.1 Host bridge: Intel Corporation 5000 Series Chipset FSB Registers (rev 92)
Subsystem: Intel Corporation Device 8086
Control: I/O- Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-00:10.2 Host bridge: Intel Corporation 5000 Series Chipset FSB Registers (rev 92)
Subsystem: Intel Corporation Device 8086
Control: I/O- Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-00:11.0 Host bridge: Intel Corporation 5000 Series Chipset Reserved Registers (rev 92)
Subsystem: Intel Corporation Device 8086
Control: I/O- Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-00:13.0 Host bridge: Intel Corporation 5000 Series Chipset Reserved Registers (rev 92)
Subsystem: Intel Corporation Device 8086
Control: I/O- Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-00:15.0 Host bridge: Intel Corporation 5000 Series Chipset FBD Registers (rev 92)
Subsystem: Intel Corporation Device 8086
Control: I/O- Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-00:16.0 Host bridge: Intel Corporation 5000 Series Chipset FBD Registers (rev 92)
Subsystem: Intel Corporation Device 8086
Control: I/O- Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-00:1c.0 PCI bridge: Intel Corporation 631xESB/632xESB/3100 Chipset PCI Express Root Port 1 (rev 09) (prog-if 00 [Normal decode])
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 32 bytes
Bus: primary=00, secondary=07, subordinate=07, sec-latency=0 I/O behind bridge: 00004000-00004fff
Memory behind bridge: d0100000-d02fffff
Prefetchable memory behind bridge: 00000000d0300000-00000000d04fffff Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- <SERR- <PERR-
BridgeCtl: Parity- SERR- NoISA+ VGA- MAbort- >Reset- FastB2B- PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
Capabilities: [40] Express (v1) Root Port (Slot+), MSI 00
DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s unlimited, L1 unlimited
ExtTag+ RBE- FLReset-
DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported- RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop- MaxPayload 128 bytes, MaxReadReq 128 bytes
DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr+ TransPend-
LnkCap: Port #1, Speed 2.5GT/s, Width x4, ASPM L0s L1, Latency L0 <256ns, L1 <4us
ClockPM- Surprise- LLActRep- BwNot-
LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- Retrain- CommClk+ ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 2.5GT/s, Width x0, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
SltCap: AttnBtn- PwrCtrl- MRL- AttnInd- PwrInd- HotPlug+ Surprise+ Slot #0, PowerLimit 0.000W; Interlock- NoCompl-
SltCtl: Enable: AttnBtn+ PwrFlt- MRL- PresDet+ CmdCplt- HPIrq- LinkChg-
Control: AttnInd Off, PwrInd Off, Power- Interlock-
SltSta: Status: AttnBtn- PowerFlt- MRL- CmdCplt- PresDet- Interlock-
Changed: MRL- PresDet- LinkState-
RootCtl: ErrCorrectable- ErrNon-Fatal- ErrFatal- PMEIntEna- CRSVisible-
RootCap: CRSVisible-
RootSta: PME ReqID 0000, PMEStatus- PMEPending-
Capabilities: [80] MSI: Enable+ Count=1/1 Maskable- 64bit-
Address:fee0300cData: 4151
Capabilities: [90] Subsystem: Tyan Computer Device 5372
Capabilities: [a0] Power Management version 2
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mAPME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [100 v1] Virtual Channel
Caps: LPEVC=0 RefClk=100ns PATEntryBits=1
Arb: Fixed+ WRR32- WRR64- WRR128-
Ctrl: ArbSelect=Fixed
Status: InProgress-
VC0: Caps: PATOffset=00 MaxTimeSlots=1 RejSnoopTrans-
Arb: Fixed+ WRR32- WRR64- WRR128- TWRR128- WRR256-
Ctrl: Enable+ ID=0 ArbSelect=Fixed TC/VC=ff
Status: NegoPending- InProgress-
VC1: Caps: PATOffset=00 MaxTimeSlots=1 RejSnoopTrans-
Arb: Fixed+ WRR32- WRR64- WRR128- TWRR128- WRR256-
Ctrl: Enable- ID=0 ArbSelect=Fixed TC/VC=00
Status: NegoPending- InProgress-
Capabilities: [180 v1] Root Complex Link
Desc: PortNumber=01 ComponentID=02 EltType=Config
Link0: Desc: TargetPort=00 TargetComponent=02 AssocRCRB- LinkType=MemMapped LinkValid+
Addr: 00000000fed1c001
Kernel driver in use: pcieport00:1d.0 USB Controller: Intel Corporation 631xESB/632xESB/3100 Chipset UHCI USB Controller #1 (rev 09) (prog-if 00 [UHCI])
Subsystem: Tyan Computer Device 5372
Control: I/O+ Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0
Interrupt: pin A routed to IRQ 17
Region 4: I/O ports at 1800 [size=32]
Kernel driver in use:uhci_hcd00:1d.1 USB Controller: Intel Corporation 631xESB/632xESB/3100 Chipset UHCI USB Controller #2 (rev 09) (prog-if 00 [UHCI])
Subsystem: Tyan Computer Device 5372
Control: I/O+ Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0
Interrupt: pin B routed to IRQ 19
Region 4: I/O ports at 1820 [size=32]
Kernel driver in use:uhci_hcd00:1d.2 USB Controller: Intel Corporation 631xESB/632xESB/3100 Chipset UHCI USB Controller #3 (rev 09) (prog-if 00 [UHCI])
Subsystem: Tyan Computer Device 5372
Control: I/O+ Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0
Interrupt: pin C routed to IRQ 18
Region 4: I/O ports at 1840 [size=32]
Kernel driver in use:uhci_hcd00:1d.3 USB Controller: Intel Corporation 631xESB/632xESB/3100 Chipset UHCI USB Controller #4 (rev 09) (prog-if 00 [UHCI])
Subsystem: Tyan Computer Device 5372
Control: I/O+ Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0
Interrupt: pin D routed to IRQ 16
Region 4: I/O ports at 1860 [size=32]
Kernel driver in use:uhci_hcd00:1d.7 USB Controller: Intel Corporation 631xESB/632xESB/3100 Chipset EHCI USB2 Controller (rev 09) (prog-if 20 [EHCI])
Subsystem: Intel Corporation 631xESB/632xESB/3100 Chipset EHCI USB2 Controller
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0
Interrupt: pin A routed to IRQ 17
Region 0: Memory atdf500000(32-bit, non-prefetchable) [size=1K]
Capabilities: [50] Power Management version 2
Flags: PMEClk- DSI- D1- D2- AuxCurrent=375mAPME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [58] Debug port: BAR=1 offset=00a0
Kernel driver in use:ehci_hcd00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev d9) (prog-if 01 [Subtractive decode])
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0
Bus: primary=00, secondary=08, subordinate=08, sec-latency=32 I/O behind bridge: 00003000-00003fff
Memory behind bridge: df000000-df0fffff
Prefetchable memory behind bridge: 00000000de000000-00000000deffffff Secondary status: 66MHz- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort+ <SERR- <PERR-
BridgeCtl: Parity- SERR- NoISA+ VGA+ MAbort- >Reset- FastB2B- PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
Capabilities: [50] Subsystem: Tyan Computer Device 537200:1f.0 ISA bridge: Intel Corporation 631xESB/632xESB/3100 Chipset LPC Interface Controller (rev 09)
Subsystem: Tyan Computer Device 5372
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 000:1f.2 IDE interface: Intel Corporation 631xESB/632xESB/3100 Chipset SATA IDE Controller (rev 09) (prog-if 80 [Master])
Subsystem: Tyan Computer Device 5372
Control: I/O+ Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz+ UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0
Interrupt: pin B routed to IRQ 19
Region 0: I/O ports at 01f0 [size=8]
Region 1: I/O ports at 03f4 [size=1]
Region 2: I/O ports at 0170 [size=8]
Region 3: I/O ports at 0374 [size=1]
Region 4: I/O ports at 18b0 [size=16]
Capabilities: [70] Power Management version 2
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mAPME(D0-,D1-,D2-,D3hot+,D3cold-)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME- Kernel driver in use:ata_piix
Kernel modules:ata_generic,pata_acpi00:1f.3 SMBus: Intel Corporation 631xESB/632xESB/3100 Chipset SMBus Controller (rev 09)
Subsystem: Tyan Computer Device 5372
Control: I/O+ Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Interrupt: pin C routed to IRQ 18
Region 4: I/O ports at 1100 [size=32]
Kernel driver in use:i801_smbus
Kernel modules: i2c-i80101:00.0 PCI bridge: Intel Corporation 6311ESB/6321ESB PCI Express Upstream Port (rev 01) (prog-if 00 [Normal decode])
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 32 bytes
Bus: primary=01, secondary=02, subordinate=04, sec-latency=0 I/O behind bridge: 00002000-00002fff
Memory behind bridge: df200000-df2fffff
Prefetchable memory behind bridge: 00000000d0000000-00000000d00fffff Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- <SERR- <PERR-
BridgeCtl: Parity- SERR- NoISA+ VGA- MAbort- >Reset- FastB2B- PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
Capabilities: [44] Express (v1) Upstream Port, MSI 00
DevCap: MaxPayload 256 bytes, PhantFunc 0, Latency L0s <64ns, L1 <1us
ExtTag- AttnBtn- AttnInd- PwrInd- RBE- FLReset-SlotPowerLimit 0.000W
DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported- RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop- MaxPayload 256 bytes, MaxReadReq 128 bytes
DevSta: CorrErr- UncorrErr+ FatalErr- UnsuppReq+ AuxPwr- TransPend-
LnkCap: Port #0, Speed 2.5GT/s, Width x8, ASPM L0s, Latency L0 unlimited, L1 unlimited
ClockPM- Surprise- LLActRep- BwNot-
LnkCtl: ASPM Disabled; Disabled- Retrain- CommClk- ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 2.5GT/s, Width x8, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
Capabilities: [70] Power Management version 2
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mAPME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [80] Subsystem: Tyan Computer Device 5372
Capabilities: [100 v1] Advanced Error Reporting
UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq+ ACSViol-
UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UESvrt: DLP+ SDES- TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
AERCap: First Error Pointer: 14, GenCap- CGenEn- ChkCap- ChkEn- Kernel driver in use: pcieport01:00.3 PCI bridge: Intel Corporation 6311ESB/6321ESB PCI Express to PCI-X Bridge (rev 01) (prog-if 00 [Normal decode])
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 64 bytes
Bus: primary=01, secondary=05, subordinate=05, sec-latency=64 I/O behind bridge: 0000f000-00000fff
Memory behind bridge: fff00000-000fffff
Prefetchable memory behind bridge: 00000000fff00000-00000000000fffff Secondary status: 66MHz+ FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort+ <SERR- <PERR-
BridgeCtl: Parity- SERR- NoISA+ VGA- MAbort- >Reset- FastB2B- PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
Capabilities: [44] Express (v1) PCI/PCI-X Bridge, MSI 00
DevCap: MaxPayload 256 bytes, PhantFunc 0, Latency L0s <64ns, L1 <1us
ExtTag- AttnBtn- AttnInd- PwrInd- RBE- FLReset-
DevCtl: Report errors: Correctable- Non-Fatal- Fatal+ Unsupported- RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop- BrConfRtry- MaxPayload 256 bytes, MaxReadReq 256 bytes
DevSta: CorrErr- UncorrErr+ FatalErr- UnsuppReq+ AuxPwr- TransPend-
LnkCap: Port #0, Speed 2.5GT/s, Width x8, ASPM L0s, Latency L0 unlimited, L1 unlimited
ClockPM- Surprise- LLActRep- BwNot-
LnkCtl: ASPM Disabled; Disabled- Retrain- CommClk- ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 2.5GT/s, Width x8, TrErr- Train- SlotClk- DLActive- BWMgmt- ABWMgmt-
Capabilities: [6c] Power Management version 2
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mAPME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [80] Subsystem: Tyan Computer Device 5372
Capabilities: [d8] PCI-X bridge device
Secondary Status: 64bit+ 133MHz+ SCD- USC- SCO- SRD- Freq=133MHz
Status: Dev=00:00.3 64bit- 133MHz- SCD- USC- SCO- SRD-
Upstream: Capacity=65535 CommitmentLimit=65535
Downstream: Capacity=65535 CommitmentLimit=65535
Capabilities: [100 v1] Advanced Error Reporting
UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq+ ACSViol-
UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UESvrt: DLP+ SDES- TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
AERCap: First Error Pointer: 14, GenCap- CGenEn- ChkCap- ChkEn-02:00.0 PCI bridge: Intel Corporation 6311ESB/6321ESB PCI Express Downstream Port E1 (rev 01) (prog-if 00 [Normal decode])
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 32 bytes
Bus: primary=02, secondary=03, subordinate=03, sec-latency=0 I/O behind bridge: 0000f000-00000fff
Memory behind bridge: fff00000-000fffff
Prefetchable memory behind bridge: 00000000fff00000-00000000000fffff Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- <SERR- <PERR-
BridgeCtl: Parity- SERR- NoISA+ VGA- MAbort- >Reset- FastB2B- PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
Capabilities: [44] Express (v1) Downstream Port (Slot-), MSI 00
DevCap: MaxPayload 256 bytes, PhantFunc 0, Latency L0s <64ns, L1 <1us
ExtTag- RBE- FLReset-
DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported- RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop- MaxPayload 256 bytes, MaxReadReq 128 bytes
DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr- TransPend-
LnkCap: Port #0, Speed 2.5GT/s, Width x8, ASPM L0s, Latency L0 <512ns, L1 unlimited
ClockPM- Surprise- LLActRep- BwNot-
LnkCtl: ASPM Disabled; Disabled- Retrain- CommClk+ ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 2.5GT/s, Width x0, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
Capabilities: [60] MSI: Enable- Count=1/1 Maskable- 64bit+
Address: 0000000000000000 Data: 0000
Capabilities: [70] Power Management version 2
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mAPME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [80] Subsystem: Tyan Computer Device 5372
Capabilities: [100 v1] Advanced Error Reporting
UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UESvrt: DLP+ SDES- TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
AERCap: First Error Pointer: 00, GenCap- CGenEn- ChkCap- ChkEn- Kernel driver in use: pcieport02:02.0 PCI bridge: Intel Corporation 6311ESB/6321ESB PCI Express Downstream Port E3 (rev 01) (prog-if 00 [Normal decode])
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 32 bytes
Bus: primary=02, secondary=04, subordinate=04, sec-latency=0 I/O behind bridge: 00002000-00002fff
Memory behind bridge: df200000-df2fffff
Prefetchable memory behind bridge: 00000000d0000000-00000000d00fffff Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- <SERR- <PERR-
BridgeCtl: Parity- SERR- NoISA+ VGA- MAbort- >Reset- FastB2B- PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
Capabilities: [44] Express (v1) Downstream Port (Slot-), MSI 00
DevCap: MaxPayload 256 bytes, PhantFunc 0, Latency L0s <64ns, L1 <1us
ExtTag- RBE- FLReset-
DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported- RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop- MaxPayload 256 bytes, MaxReadReq 128 bytes
DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr- TransPend-
LnkCap: Port #0, Speed 2.5GT/s, Width x4, ASPM L0s, Latency L0 unlimited, L1 unlimited
ClockPM- Surprise- LLActRep- BwNot-
LnkCtl: ASPM Disabled; Disabled- Retrain- CommClk- ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 2.5GT/s, Width x4, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
Capabilities: [60] MSI: Enable- Count=1/1 Maskable- 64bit+
Address: 0000000000000000 Data: 0000
Capabilities: [70] Power Management version 2
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mAPME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [80] Subsystem: Tyan Computer Device 5372
Capabilities: [100 v1] Advanced Error Reporting
UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UESvrt: DLP+ SDES- TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
AERCap: First Error Pointer: 00, GenCap- CGenEn- ChkCap- ChkEn- Kernel driver in use: pcieport04:00.0 Ethernet controller: Intel Corporation 80003ES2LAN Gigabit Ethernet Controller (Copper) (rev 01)
Subsystem: Tyan Computer Device 5300
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 32 bytes
Interrupt: pin A routed to IRQ 65
Region 0: Memory atdf220000(32-bit, non-prefetchable) [size=128K] Region 1: Memory atdf200000(32-bit, non-prefetchable) [size=128K] Region 2: I/O ports at 2000 [size=32]
[virtual] Expansion ROM atd0000000[disabled] [size=64K]
Capabilities: [c8] Power Management version 2
Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mAPME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=1 PME-
Capabilities: [d0] MSI: Enable+ Count=1/1 Maskable- 64bit+
Address:00000000fee0100cData: 4179
Capabilities: [e0] Express (v1) Endpoint, MSI 00
DevCap: MaxPayload 256 bytes, PhantFunc 0, Latency L0s <512ns, L1 <64us
ExtTag- AttnBtn- AttnInd- PwrInd- RBE- FLReset-
DevCtl: Report errors: Correctable+ Non-Fatal+ Fatal+ Unsupported+ RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop+ MaxPayload 256 bytes, MaxReadReq 128 bytes
DevSta: CorrErr- UncorrErr+ FatalErr- UnsuppReq+ AuxPwr+ TransPend-
LnkCap: Port #0, Speed 2.5GT/s, Width x4, ASPM L0s L1, Latency L0 <128ns, L1 <64us
ClockPM- Surprise- LLActRep- BwNot-
LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- Retrain- CommClk- ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 2.5GT/s, Width x4, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
Capabilities: [100 v1] Advanced Error Reporting
UESta: DLP- SDES- TLP- FCP- CmpltTO+ CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq+ ACSViol-
UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UESvrt: DLP+ SDES- TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
CESta: RxErr+ BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
AERCap: First Error Pointer: 14, GenCap- CGenEn- ChkCap- ChkEn-
Capabilities: [140 v1] Device Serial Number 00-e0-81-ff-ff-44-3f-4e Kernel driver in use: e1000e
Kernel modules: e1000e04:00.1 Ethernet controller: Intel Corporation 80003ES2LAN Gigabit Ethernet Controller (Copper) (rev 01)
Subsystem: Tyan Computer Device 5300
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 32 bytes
Interrupt: pin B routed to IRQ 66
Region 0: Memory atdf260000(32-bit, non-prefetchable) [size=128K] Region 1: Memory atdf240000(32-bit, non-prefetchable) [size=128K] Region 2: I/O ports at 2020 [size=32]
[virtual] Expansion ROM atd0010000[disabled] [size=64K]
Capabilities: [c8] Power Management version 2
Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mAPME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=1 PME-
Capabilities: [d0] MSI: Enable+ Count=1/1 Maskable- 64bit+
Address:00000000fee0200cData: 4189
Capabilities: [e0] Express (v1) Endpoint, MSI 00
DevCap: MaxPayload 256 bytes, PhantFunc 0, Latency L0s <512ns, L1 <64us
ExtTag- AttnBtn- AttnInd- PwrInd- RBE- FLReset-
DevCtl: Report errors: Correctable+ Non-Fatal+ Fatal+ Unsupported+ RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop+ MaxPayload 256 bytes, MaxReadReq 128 bytes
DevSta: CorrErr- UncorrErr+ FatalErr- UnsuppReq+ AuxPwr+ TransPend-
LnkCap: Port #0, Speed 2.5GT/s, Width x4, ASPM L0s L1, Latency L0 <128ns, L1 <64us
ClockPM- Surprise- LLActRep- BwNot-
LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- Retrain- CommClk- ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 2.5GT/s, Width x4, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
Capabilities: [100 v1] Advanced Error Reporting
UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq+ ACSViol-
UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UESvrt: DLP+ SDES- TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
CESta: RxErr+ BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
AERCap: First Error Pointer: 14, GenCap- CGenEn- ChkCap- ChkEn-
Capabilities: [140 v1] Device Serial Number 00-e0-81-ff-ff-44-3f-4e Kernel driver in use: e1000e
Kernel modules: e1000e08:01.0 VGA compatible controller: XGI Technology Inc. (eXtreme Graphics Innovation) Z7/Z9 (XG20 core) (prog-if 00 [VGA controller])
Subsystem: XGI Technology Inc. (eXtreme Graphics Innovation) Z7/Z9 (XG20 core)
Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz+ UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
BIST result: 00
Region 0: Memory atde000000(32-bit, prefetchable) [size=16M] Region 1: Memory atdf000000(32-bit, non-prefetchable) [size=256K] Region 2: I/O ports at 3000 [size=128]
Expansion ROM at <unassigned> [disabled]
Capabilities: [40] Power Management version 2
Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mAPME(D0-,D1-,D2-,D3hot-,D3cold-)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-08:02.0 Ethernet controller: Intel Corporation 82557/8/9/0/1 Ethernet Pro 100 (rev 10)
Subsystem: Intel Corporation EtherExpress PRO/100 S Server Adapter
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV+ VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 66 (2000ns min, 14000ns max), Cache Line Size: 32 bytes
Interrupt: pin A routed to IRQ 10
Region 0: Memory atdf060000(32-bit, non-prefetchable) [size=4K] Region 1: I/O ports at 3080 [size=64]
Region 2: Memory atdf040000(32-bit, non-prefetchable) [size=128K]
Capabilities: [dc] Power Management version 2
Flags: PMEClk- DSI+ D1+ D2+ AuxCurrent=0mAPME(D0+,D1+,D2+,D3hot+,D3cold+)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=2 PME-
Quoted 3 lines
Quoted 1 line
Is this an e1000e 4port adapter?
Dual port.
Thanks for your help,
Jon
Quoted 6 lines
--
I have a truly marvellous patch that fixes the bug which this signature is too narrow to contain.
Quoted 6 lines
Booting with "pci=pcie_bus_perf" should provide you with the same behavior as before (e.g., with the patch reverted). This should enable you work around this issue until I can get it resolved. On the positive side, your system should be 10% faster than it was in 3.0 (due to the PCI bus payloads being 2x larger).
Ugh, that's assuming your fixes for the "perf" mode are in, which I thought wasn't the case yet ... without them, "perf" does very wrong things..
Quoted 4 lines
If you can provide the same output with the patch not reverted, it would be very beneficial. Based on your description, the lockup only occurs with traffic. You can gather this before any traffic goes out (perhaps booting without networking enabled).
Right, the output he provided has the MRRS clearly changing in addition to the MPS.
Ideally, we'd need the output with current upstream vs. with before your very first patch went in and compare that.
Also, Avi, can you send these outputs like patches ? IE without wrapping them ? That would be handy :-)
Cheers,
Ben.
Quoted 10 lines · Benjamin Herrenschmidt
Quoted 6 lines
Booting with "pci=pcie_bus_perf" should provide you with the same behavior as before (e.g., with the patch reverted). This should enable you work around this issue until I can get it resolved. On the positive side, your system should be 10% faster than it was in 3.0 (due to the PCI bus payloads being 2x larger).
Ugh, that's assuming your fixes for the "perf" mode are in, which I thought wasn't the case yet ... without them, "perf" does very wrong things..
Yes, but this was "working" before. The patch he wants reverted was the one that makes MPS "Safe" the default. So, changing it to "perf" would give it the same behavior as before.
Quoted 19 lines
Quoted 4 lines
If you can provide the same output with the patch not reverted, it would be very beneficial. Based on your description, the lockup only occurs with traffic. You can gather this before any traffic goes out (perhaps booting without networking enabled).
Right, the output he provided has the MRRS clearly changing in addition to the MPS.
Ideally, we'd need the output with current upstream vs. with before your very first patch went in and compare that.
Also, Avi, can you send these outputs like patches ? IE without wrapping them ? That would be handy :-)
Cheers,
Ben.
Workaround for Intel MPS errata
In reply to Avi KivityHey Avi,
Can you try this patch? It should resolve the issue you are seeing.
Thanks,
Jon
PCI: Workaround for Intel MPS errata
Intel 5000 and 5100 series memory controllers have a known issue if read completion coalescing is enabled (the default setting) and the PCI-E Maximum Payload Size is set to 256B. To work around this issue, disable read completion coalescing if the MPS is 256B.
http://www.intel.com/content/dam/doc/specification-update/5000-chipset-memory-controller-hub-specification-update.pdf
http://www.intel.com/content/dam/doc/specification-update/5100-memory-controller-hub-chipset-specification-update.pdf
drivers/pci/probe.c +77 -1
@@ -1361,6 +1361,80 @@ static int pcie_find_smpss(struct pci_dev *dev, void *data)return 0 ; } +static void pcie_errata_check (int mps) +{ +struct pci_dev *dev =NULL ; +static bool done = false; + +if (done) +return ; + +/* Intel 5000 and 5100 Memory controllers have an errata with read +* completion coalescing (which is enabled by default) and MPS of 256B. +*/ +/* 5000X Chipset Memory Controller Hub */ + dev =pci_get_device (PCI_VENDOR_ID_INTEL ,0x25C0 ,NULL ); +if (dev) + goto fixup; + +/* 5000Z Chipset Memory Controller Hub */ + dev =pci_get_device (PCI_VENDOR_ID_INTEL ,0x25D0 ,NULL ); +if (dev) + goto fixup; + +/* 5000V Chipset Memory Controller Hub */ + dev =pci_get_device (PCI_VENDOR_ID_INTEL ,0x25D4 ,NULL ); +if (dev) + goto fixup; + +/* 5000P Chipset Memory Controller Hub */ + dev =pci_get_device (PCI_VENDOR_ID_INTEL ,0x25D8 ,NULL ); +if (dev) + goto fixup; + +/* 5100 Chipset Memory Controller Hub */ + dev =pci_get_device (PCI_VENDOR_ID_INTEL ,0x65C0 ,NULL ); +if (dev) + goto fixup; + +/* No Intel 5000 or 5100 Memory controller in the system, no need to +* check again +*/ +if (!dev) { + done = true; +return ; + } + +fixup: +/* Disable read completion coalescing to allow an MPS of 256 */ +if (mps ==256 ) { +int err; +u16 rcc; + +/* Intel errata specifies bits to change but does not say what +* they are. Keeping them magical until such time as the +* registers and values can be explained. +*/ + err =pci_read_config_word (dev,0x48 , &rcc); +if (err) { +dev_err (&dev->dev,"Error attempting to read the read " +"completion coalescing register.\n" ); +return ; + } + + rcc &= ~(1 <<10 ); + + err =pci_write_config_word (dev,0x48 , rcc); +if (err) { +dev_err (&dev->dev,"Error attempting to read the read " +"completion coalescing register.\n" ); +return ; + } + + done = true; + } +} +static void pcie_write_mps (struct pci_dev *dev,int mps) {int rc;
@@ -1384,6 +1458,8 @@ static void pcie_write_mps(struct pci_dev *dev, int mps) mps =min (mps,pcie_get_mps (dev->bus->self)); } +pcie_errata_check (mps); + rc =pcie_set_mps (dev, mps);if (rc)dev_err (&dev->dev,"Failed attempting to set the MPS\n" );
@@ -1445,7 +1521,7 @@ static int pcie_bus_configure_set(struct pci_dev *dev, void *data)return 0 ; } -/* pcie_bus_configure_mps requires that pci_walk_bus work in a top-down, +/* pcie_bus_configure_settings requires that pci_walk_bus work in a top-down, * parents then children fashion. If this changes, then this code will not * work as designed. */
Re: Workaround for Intel MPS errata
Quoted 6 lines · Jon Mason
Hey Avi,
Can you try this patch? It should resolve the issue you are seeing.Thanks,
Jon
Quoted 6 lines
PCI: Workaround for Intel MPS errata
Intel 5000 and 5100 series memory controllers have a known issue if read completion coalescing is enabled (the default setting) and the PCI-E Maximum Payload Size is set to 256B. To work around this issue, disable read completion coalescing if the MPS is 256B.
Hey Jon, glad I could help out by pointing this erratum out on IRC today. The patch looks mostly fine, with one nit, see below.
Quoted 11 lines
+ /* Disable read completion coalescing to allow an MPS of 256 */
+ if (mps == 256) {
+ int err;
+ u16 rcc;drivers/pci/probe.c +7
-0+ + /* Intel errata specifies bits to change but does not say what + * they are. Keeping them magical until such time as the + * registers and values can be explained. + */ + err = pci_read_config_word(dev, 0x48, &rcc); + if (err) {
drivers/pci/probe.c static int pcie_find_smpss(struct pci_dev *dev, void *data) · line 1429
Quoted 10 lines
drivers/pci/probe.c +10
-0+ dev_err(&dev->dev, "Error attempting to read the read " + "completion coalescing register.\n"); + return; + } + + rcc &= ~(1 << 10); + + err = pci_write_config_word(dev, 0x48, rcc); + if (err) { + dev_err(&dev->dev, "Error attempting to read the read "
this should be "to write the read "
Quoted 3 lines
+ "completion coalescing register.\n");
+ return;
+ }
do you have to do anything to change the bit back to 1 if something sets the mps back to 128?
Re: Workaround for Intel MPS errata
Quoted 9 lines · Jesse Brandeburg
Quoted 8 lines · Jon Mason
Hey Avi,
Can you try this patch? It should resolve the issue you are seeing.Thanks,
JonPCI: Workaround for Intel MPS errata
Quoted 7 lines
Quoted 4 lines
Intel 5000 and 5100 series memory controllers have a known issue if read completion coalescing is enabled (the default setting) and the PCI-E Maximum Payload Size is set to 256B. To work around this issue, disable read completion coalescing if the MPS is 256B.
Hey Jon, glad I could help out by pointing this erratum out on IRC today. The patch looks mostly fine, with one nit, see below.
Sorry, I thought I gave you and Ben props in the commit log. That will be corrected in the version I push (assuming it fixes the issue).
You really saved my rear :)
Quoted 15 lines
Quoted 15 lines
+ /* Disable read completion coalescing to allow an MPS of 256 */
+ if (mps == 256) {
+ int err;
+ u16 rcc;
+
+ /* Intel errata specifies bits to change but does not say what
+ * they are. Keeping them magical until such time as the
+ * registers and values can be explained.
+ */
+ err =pci_read_config_word(dev, 0x48, &rcc);
+ if (err) {
+ dev_err(&dev->dev, "Error attempting to read the read "
+ "completion coalescing register.\n");
+ return;
+ }
Quoted 8 lines
drivers/pci/probe.c static int pcie_find_smpss(struct pci_dev *dev, void *data) · line 1429
Quoted 6 lines
drivers/pci/probe.c +6
-0+ + rcc &= ~(1 << 10); + + err = pci_write_config_word(dev, 0x48, rcc); + if (err) { + dev_err(&dev->dev, "Error attempting to read the read "this should be "to write the read "
Good catch.
Quoted 7 lines
Quoted 4 lines
+ "completion coalescing register.\n");
+ return;
+ }do you have to do anything to change the bit back to 1 if something sets the mps back to 128?
The only time this would really be called is at boot time. Its possible that someone could hotplug an adapter with 256, then remove it (and thereby reduce the performance). The problem is that nothing is called to reset the MPS when a device is hotplug removed, and it seems like overkill to add a callback only for this. However, it should be documented in the code that the hole exists.
Thanks,
Jon
Quoted 5 lines
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Bjorn Helgaas
maintainerRe: Workaround for Intel MPS errata
In reply to Jon MasonQuoted 6 lines · Jon Mason
Hey Avi,
Can you try this patch? It should resolve the issue you are seeing.Thanks,
Jon
Quoted 6 lines
PCI: Workaround for Intel MPS errata
Intel 5000 and 5100 series memory controllers have a known issue if read completion coalescing is enabled (the default setting) and the PCI-E Maximum Payload Size is set to 256B. To work around this issue, disable read completion coalescing if the MPS is 256B.
I'd much rather see this done as an early quirk so it doesn't clutter probe.c.
I don't know how you decide whether
- no coalescing with MPS=256, or
- coalescing with MPS=128
is better. I suspect that having a quirk that doesn't change the setting, but merely limits MPS to 128 if the BIOS enabled coalescing, would be simplest and would stay in the best-tested chipset configuration.
If you do end up changing the coalescing setting, I think you should check the current setting, then log something in dmesg if you change it. If the quirk limits the max MPS, I think dmesg should reflect that, too.
I think you're missing a pci_dev_put().
Even if we work out these issues and Avi reports that it fixes his hang, I'm still concerned about MPS configuration being enabled by default in 3.1. It feels like we happened to trip over a few issues and fix them, but I'm worried that with wider testing, we'll find more.
I'd feel more comfortable if everything were disabled in 3.1 (it'd be OK to have a command-line flag to enable it), then turned on by default early in the 3.2 merge window.
Bjorn
Quoted 108 lines
drivers/pci/probe.c +77
-2@@ -1361,6 +1361,80 @@ static int pcie_find_smpss(struct pci_dev *dev, void *data) return 0; } +static void pcie_errata_check (int mps) +{ + struct pci_dev *dev = NULL; + static bool done = false; + + if (done) + return; + + /* Intel 5000 and 5100 Memory controllers have an errata with read + * completion coalescing (which is enabled by default) and MPS of 256B. + */ + /* 5000X Chipset Memory Controller Hub */ + dev = pci_get_device(PCI_VENDOR_ID_INTEL, 0x25C0, NULL); + if (dev) + goto fixup; + + /* 5000Z Chipset Memory Controller Hub */ + dev = pci_get_device(PCI_VENDOR_ID_INTEL, 0x25D0, NULL); + if (dev) + goto fixup; + + /* 5000V Chipset Memory Controller Hub */ + dev = pci_get_device(PCI_VENDOR_ID_INTEL, 0x25D4, NULL); + if (dev) + goto fixup; + + /* 5000P Chipset Memory Controller Hub */ + dev = pci_get_device(PCI_VENDOR_ID_INTEL, 0x25D8, NULL); + if (dev) + goto fixup; + + /* 5100 Chipset Memory Controller Hub */ + dev = pci_get_device(PCI_VENDOR_ID_INTEL, 0x65C0, NULL); + if (dev) + goto fixup; + + /* No Intel 5000 or 5100 Memory controller in the system, no need to + * check again + */ + if (!dev) { + done = true; + return; + } + +fixup: + /* Disable read completion coalescing to allow an MPS of 256 */ + if (mps == 256) { + int err; + u16 rcc; + + /* Intel errata specifies bits to change but does not say what + * they are. Keeping them magical until such time as the + * registers and values can be explained. + */ + err = pci_read_config_word(dev, 0x48, &rcc); + if (err) { + dev_err(&dev->dev, "Error attempting to read the read " + "completion coalescing register.\n"); + return; + } + + rcc &= ~(1 << 10); + + err = pci_write_config_word(dev, 0x48, rcc); + if (err) { + dev_err(&dev->dev, "Error attempting to read the read " + "completion coalescing register.\n"); + return; + } + + done = true; + } +} + static void pcie_write_mps(struct pci_dev *dev, int mps) { int rc;@@ -1384,6 +1458,8 @@ static void pcie_write_mps(struct pci_dev *dev, int mps) mps = min(mps, pcie_get_mps(dev->bus->self)); } + pcie_errata_check(mps); + rc = pcie_set_mps(dev, mps); if (rc) dev_err(&dev->dev, "Failed attempting to set the MPS\n");@@ -1445,7 +1521,7 @@ static int pcie_bus_configure_set(struct pci_dev *dev, void *data) return 0; } -/* pcie_bus_configure_mps requires that pci_walk_bus work in a top-down, +/* pcie_bus_configure_settings requires that pci_walk_bus work in a top-down, * parents then children fashion. If this changes, then this code will not * work as designed. */ --To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: Workaround for Intel MPS errata
Quoted 16 lines · Bjorn Helgaas
Quoted 6 lines · Jon Mason
Hey Avi,
Can you try this patch? It should resolve the issue you are seeing.Thanks,
JonQuoted 6 lines
PCI: Workaround for Intel MPS errata
Intel 5000 and 5100 series memory controllers have a known issue if read completion coalescing is enabled (the default setting) and the PCI-E Maximum Payload Size is set to 256B. To work around this issue, disable read completion coalescing if the MPS is 256B.
I'd much rather see this done as an early quirk so it doesn't clutter
probe.c.
Quoted 7 lines
I don't know how you decide whether
- no coalescing with MPS=256, or
- coalescing with MPS=128
is better. I suspect that having a quirk that doesn't change the setting, but merely limits MPS to 128 if the BIOS enabled coalescing, would be simplest and would stay in the best-tested chipset configuration.
This is what I was debating yesterday. Is it better to disable coalescing and get better throughput (which could be a net negative if the MPS isn't 256) or never allow it to be greater than 128? There is no way of knowing at quirk time if the disable is necessary or not, only when setting the MPS is it known (which is why I did it this way). I could, as you suggest, simply read the bit and see if it is enabled by the BIOS (which I'd bet it is every single time), and then limit the MPS to 128 as a quirk. This would be fairly simple to do. However, the errata from Intel says Windows 2008 always disables the coalescing and sets the MPS to 256B. With this known, Linux's I/O performance would be less than Windows on these systems. While it might not matter to some of us, I imagine the distros will care. I'll defer to your judgement in this matter.
Quoted 4 lines
If you do end up changing the coalescing setting, I think you should check the current setting, then log something in dmesg if you change it. If the quirk limits the max MPS, I think dmesg should reflect that, too.
Good point, this should be made more obvious to the user.
Quoted 1 line
I think you're missing a
pci_dev_put().
Good catch.
Quoted 9 lines
Even if we work out these issues and Avi reports that it fixes his hang, I'm still concerned about MPS configuration being enabled by default in 3.1. It feels like we happened to trip over a few issues and fix them, but I'm worried that with wider testing, we'll find more.
I'd feel more comfortable if everything were disabled in 3.1 (it'd be OK to have a command-line flag to enable it), then turned on by default early in the 3.2 merge window.
Okay, I'll create a patch to do this as well.
Quoted 112 lines
Bjorn
Quoted 108 lines
drivers/pci/probe.c +77
-2@@ -1361,6 +1361,80 @@ static int pcie_find_smpss(struct pci_dev *dev, void *data) return 0; } +static void pcie_errata_check (int mps) +{ + struct pci_dev *dev = NULL; + static bool done = false; + + if (done) + return; + + /* Intel 5000 and 5100 Memory controllers have an errata with read + * completion coalescing (which is enabled by default) and MPS of 256B. + */ + /* 5000X Chipset Memory Controller Hub */ + dev = pci_get_device(PCI_VENDOR_ID_INTEL, 0x25C0, NULL); + if (dev) + goto fixup; + + /* 5000Z Chipset Memory Controller Hub */ + dev = pci_get_device(PCI_VENDOR_ID_INTEL, 0x25D0, NULL); + if (dev) + goto fixup; + + /* 5000V Chipset Memory Controller Hub */ + dev = pci_get_device(PCI_VENDOR_ID_INTEL, 0x25D4, NULL); + if (dev) + goto fixup; + + /* 5000P Chipset Memory Controller Hub */ + dev = pci_get_device(PCI_VENDOR_ID_INTEL, 0x25D8, NULL); + if (dev) + goto fixup; + + /* 5100 Chipset Memory Controller Hub */ + dev = pci_get_device(PCI_VENDOR_ID_INTEL, 0x65C0, NULL); + if (dev) + goto fixup; + + /* No Intel 5000 or 5100 Memory controller in the system, no need to + * check again + */ + if (!dev) { + done = true; + return; + } + +fixup: + /* Disable read completion coalescing to allow an MPS of 256 */ + if (mps == 256) { + int err; + u16 rcc; + + /* Intel errata specifies bits to change but does not say what + * they are. Keeping them magical until such time as the + * registers and values can be explained. + */ + err = pci_read_config_word(dev, 0x48, &rcc); + if (err) { + dev_err(&dev->dev, "Error attempting to read the read " + "completion coalescing register.\n"); + return; + } + + rcc &= ~(1 << 10); + + err = pci_write_config_word(dev, 0x48, rcc); + if (err) { + dev_err(&dev->dev, "Error attempting to read the read " + "completion coalescing register.\n"); + return; + } + + done = true; + } +} + static void pcie_write_mps(struct pci_dev *dev, int mps) { int rc;@@ -1384,6 +1458,8 @@ static void pcie_write_mps(struct pci_dev *dev, int mps) mps = min(mps, pcie_get_mps(dev->bus->self)); } + pcie_errata_check(mps); + rc = pcie_set_mps(dev, mps); if (rc) dev_err(&dev->dev, "Failed attempting to set the MPS\n");@@ -1445,7 +1521,7 @@ static int pcie_bus_configure_set(struct pci_dev *dev, void *data) return 0; } -/* pcie_bus_configure_mps requires that pci_walk_bus work in a top-down, +/* pcie_bus_configure_settings requires that pci_walk_bus work in a top-down, * parents then children fashion. If this changes, then this code will not * work as designed. */ --To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Bjorn Helgaas
maintainerRe: Workaround for Intel MPS errata
Quoted 26 lines · Jon Mason
Quoted 16 lines · Bjorn Helgaas
Quoted 6 lines · Jon Mason
Hey Avi,
Can you try this patch? It should resolve the issue you are seeing.Thanks,
JonQuoted 6 lines
PCI: Workaround for Intel MPS errata
Intel 5000 and 5100 series memory controllers have a known issue if read completion coalescing is enabled (the default setting) and the PCI-E Maximum Payload Size is set to 256B. To work around this issue, disable read completion coalescing if the MPS is 256B.
I'd much rather see this done as an early quirk so it doesn't clutter
probe.c.Quoted 7 lines
I don't know how you decide whether
- no coalescing with MPS=256, or
- coalescing with MPS=128
is better. I suspect that having a quirk that doesn't change the setting, but merely limits MPS to 128 if the BIOS enabled coalescing, would be simplest and would stay in the best-tested chipset configuration.
Quoted 11 lines
This is what I was debating yesterday. Is it better to disable coalescing and get better throughput (which could be a net negative if the MPS isn't 256) or never allow it to be greater than 128? There is no way of knowing at quirk time if the disable is necessary or not, only when setting the MPS is it known (which is why I did it this way). I could, as you suggest, simply read the bit and see if it is enabled by the BIOS (which I'd bet it is every single time), and then limit the MPS to 128 as a quirk. This would be fairly simple to do. However, the errata from Intel says Windows 2008 always disables the coalescing and sets the MPS to 256B. With this known, Linux's I/O performance would be less than Windows on these systems. ...
Presumably coalescing improves performance, too, and I don't have the evidence that says "no coalescing with MPS=256" performs better than "coalescing with MPS=128."
But the fact that Windows 2008 disables coalescing is worth a lot (if this is in a public erratum, a URL would be good). Given that, I'd probably go with "no coalescing and MPS=256" just as you did.
Maybe the quirk could be moved out of the generic code by making pcie_set_mps() a weak function, so x86 could supply a version that disables coalescing if MPS=256?
No news from Avi? Were you able to reproduce the problem and verify that the quirk fixes it? I wish the kernel.org bugzilla were back. Since it's not, maybe we should include the LKML URL
(https://lkml.org/lkml/2011/9/27/274) in the changelog.
Bjorn
Re: Workaround for Intel MPS errata
Quoted 39 lines · Bjorn Helgaas
Quoted 26 lines · Jon Mason
Quoted 16 lines · Bjorn Helgaas
Quoted 6 lines · Jon Mason
Hey Avi,
Can you try this patch? It should resolve the issue you are seeing.Thanks,
JonQuoted 6 lines
PCI: Workaround for Intel MPS errata
Intel 5000 and 5100 series memory controllers have a known issue if read completion coalescing is enabled (the default setting) and the PCI-E Maximum Payload Size is set to 256B. To work around this issue, disable read completion coalescing if the MPS is 256B.
I'd much rather see this done as an early quirk so it doesn't clutter
probe.c.Quoted 7 lines
I don't know how you decide whether
- no coalescing with MPS=256, or
- coalescing with MPS=128
is better. I suspect that having a quirk that doesn't change the setting, but merely limits MPS to 128 if the BIOS enabled coalescing, would be simplest and would stay in the best-tested chipset configuration.Quoted 11 lines
This is what I was debating yesterday. Is it better to disable coalescing and get better throughput (which could be a net negative if the MPS isn't 256) or never allow it to be greater than 128? There is no way of knowing at quirk time if the disable is necessary or not, only when setting the MPS is it known (which is why I did it this way). I could, as you suggest, simply read the bit and see if it is enabled by the BIOS (which I'd bet it is every single time), and then limit the MPS to 128 as a quirk. This would be fairly simple to do. However, the errata from Intel says Windows 2008 always disables the coalescing and sets the MPS to 256B. With this known, Linux's I/O performance would be less than Windows on these systems. ...
Quoted 6 lines
Presumably coalescing improves performance, too, and I don't have the evidence that says "no coalescing with MPS=256" performs better than "coalescing with MPS=128."
But the fact that Windows 2008 disables coalescing is worth a lot (if this is in a public erratum, a URL would be good). Given that, I'd
The URLs were in the top of the patch, but perhaps they weren't obvious.
http://www.intel.com/content/dam/doc/specification-update/5000-chipset-memory-controller-hub-specification-update.pdf
http://www.intel.com/content/dam/doc/specification-update/5100-memory-controller-hub-chipset-specification-update.pdf
Search for "MPS", as they are several pages into the errata chapter.
Quoted 5 lines
probably go with "no coalescing and MPS=256" just as you did.
Maybe the quirk could be moved out of the generic code by making
pcie_set_mps()a weak function, so x86 could supply a version that disables coalescing if MPS=256?
Not sure what you mean here. Are you saying to make the function defined differently on each arch?
Quoted 1 line
No news from Avi? Were you able to reproduce the problem and verify
None so far. I believe he is in .il, so we might not hear back until Sunday.
Quoted 1 line
that the quirk fixes it? I wish the kernel.org bugzilla were back.
I just found a system to try it on! It has an Intel Corporation 5000X Chipset Memory Controller Hub, which should have the erratum.
Quoted 2 lines
Since it's not, maybe we should include the LKML URL
(https://lkml.org/lkml/2011/9/27/274) in the changelog.
Will do.
Quoted 3 lines
Bjorn
Bjorn Helgaas
maintainerRe: Workaround for Intel MPS errata
Quoted 45 lines · Jon Mason
Quoted 43 lines · Bjorn Helgaas
Quoted 26 lines · Jon Mason
Quoted 16 lines · Bjorn Helgaas
Quoted 6 lines · Jon Mason
Hey Avi,
Can you try this patch? It should resolve the issue you are seeing.Thanks,
JonQuoted 6 lines
PCI: Workaround for Intel MPS errata
Intel 5000 and 5100 series memory controllers have a known issue if read completion coalescing is enabled (the default setting) and the PCI-E Maximum Payload Size is set to 256B. To work around this issue, disable read completion coalescing if the MPS is 256B.
I'd much rather see this done as an early quirk so it doesn't clutter
probe.c.Quoted 7 lines
I don't know how you decide whether
- no coalescing with MPS=256, or
- coalescing with MPS=128
is better. I suspect that having a quirk that doesn't change the setting, but merely limits MPS to 128 if the BIOS enabled coalescing, would be simplest and would stay in the best-tested chipset configuration.Quoted 11 lines
This is what I was debating yesterday. Is it better to disable coalescing and get better throughput (which could be a net negative if the MPS isn't 256) or never allow it to be greater than 128? There is no way of knowing at quirk time if the disable is necessary or not, only when setting the MPS is it known (which is why I did it this way). I could, as you suggest, simply read the bit and see if it is enabled by the BIOS (which I'd bet it is every single time), and then limit the MPS to 128 as a quirk. This would be fairly simple to do. However, the errata from Intel says Windows 2008 always disables the coalescing and sets the MPS to 256B. With this known, Linux's I/O performance would be less than Windows on these systems. ...
Presumably coalescing improves performance, too, and I don't have the evidence that says "no coalescing with MPS=256" performs better than "coalescing with MPS=128."
Quoted 5 lines
Quoted 2 lines
But the fact that Windows 2008 disables coalescing is worth a lot (if this is in a public erratum, a URL would be good). Given that, I'd
The URLs were in the top of the patch, but perhaps they weren't obvious. ... Search for "MPS", as they are several pages into the errata chapter.
I saw the errata, but searching for "Windows" failed. But now I see the "Microsoft Server 2008" reference in the 5100 errata. The wording is interesting, though... it says:
Microsoft Server 2008* forces the maximum payload size to 256 B in the PEXDEVCTRL register; therefore, the workaround with coalescing disabled must be used for Microsoft Server 2008*.
I would read that as saying "Windows Server 2008 always sets MPS to 256 but doesn't do anything with the coalescing setting. Therefore, if you want to run Server 2008 on your system, make sure the BIOS leaves coalescing disabled."
Quoted 6 lines
Quoted 3 lines
Maybe the quirk could be moved out of the generic code by making
pcie_set_mps()a weak function, so x86 could supply a version that disables coalescing if MPS=256?Not sure what you mean here. Are you saying to make the function defined differently on each arch?
You can define the generic pcie_set_mps() with the __weak attribute in drivers/pci/probe.c. Then if you put a normal (non-weak) pcie_set_mps() definition in the arch code, it will be used instead of the weak definition. If the arch doesn't supply a definition, the generic weak version will be used.
Bjorn
Re: Workaround for Intel MPS errata
In reply to Jon MasonQuoted 26 lines
Hey Avi,
Can you try this patch? It should resolve the issue you are seeing.Thanks,
JonPCI: Workaround for Intel MPS errata
Intel 5000 and 5100 series memory controllers have a known issue if
read
completion coalescing is enabled (the default setting) and the PCI-E Maximum Payload Size is set to 256B. To work around this issue,
disable
read completion coalescing if the MPS is 256B.http://www.intel.com/content/dam/doc/specification-update/5000-chipset-memory-controller-hub-specification-update.pdf
http://www.intel.com/content/dam/doc/specification-update/5100-memory-controller-hub-chipset-specification-update.pdfReported-by Avi Kivity <[email protected]>Signed-off-by Jon Mason <[email protected]>drivers/pci/probe.c +0
-0
drivers/pci/probe.c static int pcie_find_smpss(struct pci_dev *dev, · line 1366
Quoted 6 lines
drivers/pci/probe.c +2
-0@@ -1361,6 +1361,80 @@ static int pcie_find_smpss(struct pci_dev *dev, void *data)return 0 ; } +static void pcie_errata_check (int mps) +{
While this whole function is about Intel 5x00 devices the name of it is very generic (and in a very generic file). Maybe this can be changed, e.g. "fixup:" renamed to "fixup_intel_5x00:". Also I wonder if that shouldn't be a nop when CONFIG_PCI_QUIRKS is not set.
Eike
Re: Workaround for Intel MPS errata
Quoted 30 lines · Rolf Eike Beer
Quoted 30 lines
Hey Avi,
Can you try this patch? It should resolve the issue you are seeing.Thanks,
JonPCI: Workaround for Intel MPS errata
Intel 5000 and 5100 series memory controllers have a known issue if read
completion coalescing is enabled (the default setting) and the PCI-E Maximum Payload Size is set to 256B. To work around this issue, disable
read completion coalescing if the MPS is 256B.http://www.intel.com/content/dam/doc/specification-update/5000-chipset-memory-controller-hub-specification-update.pdf
http://www.intel.com/content/dam/doc/specification-update/5100-memory-controller-hub-chipset-specification-update.pdfReported-by Avi Kivity <[email protected]>Signed-off-by Jon Mason <[email protected]>drivers/pci/probe.c +0
-0@@ -1361,6 +1361,80 @@ static int pcie_find_smpss(struct pci_dev *dev, void *data) return 0; }
Quoted 5 lines
drivers/pci/probe.c static int pcie_find_smpss(struct pci_dev *dev, void *data) · line 1365
Quoted 2 lines
drivers/pci/probe.c +2
-0+static void pcie_errata_check (int mps) +{While this whole function is about Intel 5x00 devices the name of it is very generic (and in a very generic file). Maybe this can be changed, e.g.
I made it generic in naming because I'm betting there are other chips out there that don't play nice with others.
Quoted 2 lines
"fixup:" renamed to "
fixup_intel_5x00:". Also I wonder if that shouldn't be a nop whenCONFIG_PCI_QUIRKSis not set.
It probably should be a no-op for non-x86 too, as I doubt many other arches use Intel memory controllers (maybe IA64).
Thanks,
Jon
Quoted 3 lines
Eike
Re: Workaround for Intel MPS errata
In reply to Jon MasonQuoted 2 lines · Jon Mason
Hey Avi,
Can you try this patch? It should resolve the issue you are seeing.
It doesn't; the fixup: label is not reached (though I do have an 0x25d4 device).
Signature · 1 line
error compiling committee.c: too many arguments to function
Re: Workaround for Intel MPS errata
Quoted 10 lines · Avi Kivity
Quoted 2 lines · Jon Mason
Hey Avi,
Can you try this patch? It should resolve the issue you are seeing.It doesn't; the fixup: label is not reached (though I do have an
0x25d4device).Signature · 1 line
error compiling committee.c: too many arguments to function
I found a system with a 5000X Memory controller (which should have the same errata). It doesn't have the faulty bit (perhaps better BIOS). I was able to findout why the code in the previous patch wasn't working, but wasn't able to cause the crash by setting the bit from the errata. The reworked version of the previous patch found below should resolve the issue. Please test it if you can.
Thanks,
Jon
---
PCI: Workaround for Intel MPS errata
Intel 5000 and 5100 series memory controllers have a known issue if read completion coalescing is enabled (the default setting) and the PCI-E Maximum Payload Size is set to 256B. To work around this issue, disable read completion coalescing if the MPS is 256B.
It is worth noting that there is no function to undo the disable of read completion coalescing, and the performance benefit of read completion coalescing will be lost if the MPS is set from 256B to 128B. It is only possible to have this issue via hotplug removing the only 256B MPS device in the system (thus making all of the other devices in the system have a performance degradation without the benefit of any 256B transfers). Therefore, this trade off is acceptable.
http://www.intel.com/content/dam/doc/specification-update/5000-chipset-memory-controller-hub-specification-update.pdf
http://www.intel.com/content/dam/doc/specification-update/5100-memory-controller-hub-chipset-specification-update.pdf
Thanks to Jesse Brandeburg and Ben Hutchings for providing insight into the problem.
drivers/pci/probe.c +89 -3
@@ -1361,6 +1361,90 @@ static int pcie_find_smpss(struct pci_dev *dev, void *data)return 0 ; } +static void pcie_errata_check (int mps) +{ +static bool done = false; +struct pci_bus *bus; +u16 val; + +if (done) +return ; + +/* pci_get_device cannot be used for these, as there are no pci_dev's +* created for the memory controllers. We'll have to get nasty here and +* check PCI config space ourselves. +*/ + bus =pci_find_bus (0 ,0 ); +if (!bus) +return ; + +/* Intel 5000 and 5100 Memory controllers have an errata with read +* completion coalescing (which is enabled by default) and MPS of 256B. +*/ +pci_bus_read_config_word (bus,0 ,PCI_VENDOR_ID , &val); +if (val !=PCI_VENDOR_ID_INTEL ) { + done = true; +return ; + } + +pci_bus_read_config_word (bus,0 ,PCI_DEVICE_ID , &val); +switch (val) { +case 0x25C0 :/* 5000X Chipset Memory Controller Hub */ +case 0x25D0 :/* 5000Z Chipset Memory Controller Hub */ +case 0x25D4 :/* 5000V Chipset Memory Controller Hub */ +case 0x25D8 :/* 5000P Chipset Memory Controller Hub */ +case 0x65C0 :/* 5100 Chipset Memory Controller Hub */ +break ; +default : + done = true; +return ; + } + +/* Disable read completion coalescing to allow an MPS of 256. +* +* It is worth noting that there is no function to undo the disable of +* read completion coalescing, and the performance benefit of read +* completion coalescing will be lost if the MPS is set from 256B to +* 128B. It is only possible to have this issue via hotplug removing +* the only 256B MPS device in the system (thus making all of the other +* devices in the system have a performance degradation without the +* benefit of any 256B transfers). Therefore, this trade off is +* acceptable. +*/ +if (mps ==256 ) { +int err; + +/* Intel errata specifies bits to change but does not say what +* they are. Keeping them magical until such time as the +* registers and values can be explained. +*/ + err =pci_bus_read_config_word (bus,0 ,0x48 , &val); +if (err) { +dev_err (&bus->dev,"Error attempting to read the read " +"completion coalescing register.\n" ); +return ; + } + +if (!(val & (1 <<10 ))) { + done = true; +return ; + } + + val |= (1 <<10 ); + err =pci_bus_write_config_word (bus,0 ,0x48 , val); +if (err) { +dev_err (&bus->dev,"Error attempting to write the read " +"completion coalescing register.\n" ); +return ; + } + +dev_info (&bus->dev,"Read completion coalescing disabled due " +"to hardware errata relating to 256B MPS.\n" ); + + done = true; + } +} +static void pcie_write_mps (struct pci_dev *dev,int mps) {int rc;
@@ -1384,6 +1468,8 @@ static void pcie_write_mps(struct pci_dev *dev, int mps) mps =min (mps,pcie_get_mps (dev->bus->self)); } +pcie_errata_check (mps); + rc =pcie_set_mps (dev, mps);if (rc)dev_err (&dev->dev,"Failed attempting to set the MPS\n" );
@@ -1433,19 +1519,19 @@ static int pcie_bus_configure_set(struct pci_dev *dev, void *data)if (!pci_is_pcie (dev))return 0 ; -dev_dbg (&dev->dev,"Dev MPS %d MPSS %d MRRS %d\n" , +dev_info (&dev->dev,"Dev MPS %d MPSS %d MRRS %d\n" ,pcie_get_mps (dev),128 <<dev->pcie_mpss,pcie_get_readrq (dev));pcie_write_mps (dev, mps);pcie_write_mrrs (dev); -dev_dbg (&dev->dev,"Dev MPS %d MPSS %d MRRS %d\n" , +dev_info (&dev->dev,"Dev MPS %d MPSS %d MRRS %d\n" ,pcie_get_mps (dev),128 <<dev->pcie_mpss,pcie_get_readrq (dev));return 0 ; } -/* pcie_bus_configure_mps requires that pci_walk_bus work in a top-down, +/* pcie_bus_configure_settings requires that pci_walk_bus work in a top-down, * parents then children fashion. If this changes, then this code will not * work as designed. */
Re: Workaround for Intel MPS errata
Quoted 12 lines · Jon Mason
Quoted 10 lines · Avi Kivity
Quoted 2 lines · Jon Mason
Hey Avi,
Can you try this patch? It should resolve the issue you are seeing.It doesn't; the fixup: label is not reached (though I do have an
0x25d4device).--
error compilingcommittee.c: too many arguments to function
Quoted 6 lines
I found a system with a 5000X Memory controller (which should have the same errata). It doesn't have the faulty bit (perhaps better BIOS). I was able to findout why the code in the previous patch wasn't working, but wasn't able to cause the crash by setting the bit from the errata. The reworked version of the previous patch found below should resolve the issue. Please test it if you can.
Will be happy to test, but patch appears to be against a different tree?
$ git apply -C2 .git/rebase-apply/patch
.git/rebase-apply/patch:75: trailing whitespace, shock horror.
*
Context reduced to (2/2) to apply fragment at 1362
Context reduced to (2/2) to apply fragment at 1475
error: patch failed: drivers/pci/probe.c:1433
error: drivers/pci/probe.c: patch does not applySignature · 1 line
error compiling committee.c: too many arguments to function
Re: Workaround for Intel MPS errata
Quoted 22 lines · Avi Kivity
Quoted 12 lines · Jon Mason
Quoted 8 lines · Avi Kivity
Quoted 2 lines · Jon Mason
Hey Avi,
Can you try this patch? It should resolve the issue you are seeing.It doesn't; the fixup: label is not reached (though I do have an
0x25d4device).-- > error compiling
committee.c: too many arguments tofunction
Quoted 1 line
Quoted 6 lines
I found a system with a 5000X Memory controller (which should have the same errata). It doesn't have the faulty bit (perhaps better BIOS). I was able to findout why the code in the previous patch wasn't working, but wasn't able to cause the crash by setting the bit from the errata. The reworked version of the previous patch found below should resolve the issue. Please test it if you can.
Will be happy to test, but patch appears to be against a different tree?
Quoted 7 lines
$ git apply -C2 .git/rebase-apply/patch
.git/rebase-apply/patch:75: trailing whitespace, shock horror.
*
Context reduced to (2/2) to apply fragment at 1362
Context reduced to (2/2) to apply fragment at 1475
error: patch failed: drivers/pci/probe.c:1433
error: drivers/pci/probe.c: patch does not applySorry, I had the patch on top of the 3 patches I just sent to Linus. I've rebased it and inserted it below.
Thanks,
Jon
PCI: Workaround for Intel MPS errata
Intel 5000 and 5100 series memory controllers have a known issue if read completion coalescing is enabled (the default setting) and the PCI-E Maximum Payload Size is set to 256B. To work around this issue, disable read completion coalescing if the MPS is 256B.
It is worth noting that there is no function to undo the disable of read completion coalescing, and the performance benefit of read completion coalescing will be lost if the MPS is set from 256B to 128B. It is only possible to have this issue via hotplug removing the only 256B MPS device in the system (thus making all of the other devices in the system have a performance degradation without the benefit of any 256B transfers). Therefore, this trade off is acceptable.
http://www.intel.com/content/dam/doc/specification-update/5000-chipset-memory-controller-hub-specification-update.pdf
http://www.intel.com/content/dam/doc/specification-update/5100-memory-controller-hub-chipset-specification-update.pdf
Thanks to Jesse Brandeburg and Ben Hutchings for providing insight into the problem.
drivers/pci/probe.c +87 -1
@@ -1361,6 +1361,90 @@ static int pcie_find_smpss(struct pci_dev *dev, void *data)return 0 ; } +static void pcie_errata_check (int mps) +{ +static bool done = false; +struct pci_bus *bus; +u16 val; + +if (done) +return ; + +/* pci_get_device cannot be used for these, as there are no pci_dev's +* created for the memory controllers. We'll have to get nasty here and +* check PCI config space ourselves. +*/ + bus =pci_find_bus (0 ,0 ); +if (!bus) +return ; + +/* Intel 5000 and 5100 Memory controllers have an errata with read +* completion coalescing (which is enabled by default) and MPS of 256B. +*/ +pci_bus_read_config_word (bus,0 ,PCI_VENDOR_ID , &val); +if (val !=PCI_VENDOR_ID_INTEL ) { + done = true; +return ; + } + +pci_bus_read_config_word (bus,0 ,PCI_DEVICE_ID , &val); +switch (val) { +case 0x25C0 :/* 5000X Chipset Memory Controller Hub */ +case 0x25D0 :/* 5000Z Chipset Memory Controller Hub */ +case 0x25D4 :/* 5000V Chipset Memory Controller Hub */ +case 0x25D8 :/* 5000P Chipset Memory Controller Hub */ +case 0x65C0 :/* 5100 Chipset Memory Controller Hub */ +break ; +default : + done = true; +return ; + } + +/* Disable read completion coalescing to allow an MPS of 256. +* +* It is worth noting that there is no function to undo the disable of +* read completion coalescing, and the performance benefit of read +* completion coalescing will be lost if the MPS is set from 256B to +* 128B. It is only possible to have this issue via hotplug removing +* the only 256B MPS device in the system (thus making all of the other +* devices in the system have a performance degradation without the +* benefit of any 256B transfers). Therefore, this trade off is +* acceptable. +*/ +if (mps ==256 ) { +int err; + +/* Intel errata specifies bits to change but does not say what +* they are. Keeping them magical until such time as the +* registers and values can be explained. +*/ + err =pci_bus_read_config_word (bus,0 ,0x48 , &val); +if (err) { +dev_err (&bus->dev,"Error attempting to read the read " +"completion coalescing register.\n" ); +return ; + } + +if (!(val & (1 <<10 ))) { + done = true; +return ; + } + + val |= (1 <<10 ); + err =pci_bus_write_config_word (bus,0 ,0x48 , val); +if (err) { +dev_err (&bus->dev,"Error attempting to write the read " +"completion coalescing register.\n" ); +return ; + } + +dev_info (&bus->dev,"Read completion coalescing disabled due " +"to hardware errata relating to 256B MPS.\n" ); + + done = true; + } +} +static void pcie_write_mps (struct pci_dev *dev,int mps) {int rc, dev_mpss;
@@ -1390,6 +1474,8 @@ static void pcie_write_mps(struct pci_dev *dev, int mps) dev->pcie_mpss =ffs (mps) -8 ; } +pcie_errata_check (mps); + rc =pcie_set_mps (dev, mps);if (rc)dev_err (&dev->dev,"Failed attempting to set the MPS\n" );
@@ -1452,7 +1538,7 @@ static int pcie_bus_configure_set(struct pci_dev *dev, void *data)return 0 ; } -/* pcie_bus_configure_mps requires that pci_walk_bus work in a top-down, +/* pcie_bus_configure_settings requires that pci_walk_bus work in a top-down, * parents then children fashion. If this changes, then this code will not * work as designed. */
Re: Workaround for Intel MPS errata
Quoted 24 lines · Jon Mason
PCI: Workaround for Intel MPS errata
Intel 5000 and 5100 series memory controllers have a known issue if read completion coalescing is enabled (the default setting) and the PCI-E Maximum Payload Size is set to 256B. To work around this issue, disable read completion coalescing if the MPS is 256B.
It is worth noting that there is no function to undo the disable of read completion coalescing, and the performance benefit of read completion coalescing will be lost if the MPS is set from 256B to 128B. It is only possible to have this issue via hotplug removing the only 256B MPS device in the system (thus making all of the other devices in the system have a performance degradation without the benefit of any 256B transfers). Therefore, this trade off is acceptable.
http://www.intel.com/content/dam/doc/specification-update/5000-chipset-memory-controller-hub-specification-update.pdf
http://www.intel.com/content/dam/doc/specification-update/5100-memory-controller-hub-chipset-specification-update.pdfThanks to Jesse Brandeburg and Ben Hutchings for providing insight into the problem.
Reported-by Avi Kivity<[email protected]>Signed-off-by Jon Mason<[email protected]>
drivers/pci/probe.c static int pcie_find_smpss(struct pci_dev *dev, void *data) · line 1388
Quoted 5 lines
drivers/pci/probe.c +5
-0+ +if (!(val& (1 <<10 ))) { + done = true; +return ; + }
Here, you bail out if bit 10 is clear. So if we're here, it's set.
Review
Quoted 2 lines
(quoted diff) +2
-0+ + val |= (1<< 10);
Now it's even more set?
Quoted 15 lines
drivers/pci/probe.c +14
-0+ err =pci_bus_write_config_word (bus,0 ,0x48 , val); +if (err) { +dev_err (&bus->dev,"Error attempting to write the read " +"completion coalescing register.\n" ); +return ; + } + +dev_info (&bus->dev,"Read completion coalescing disabled due " +"to hardware errata relating to 256B MPS.\n" ); + + done = true; + } +} +
Signature · 1 line
error compiling committee.c: too many arguments to function
Re: Workaround for Intel MPS errata
Quoted 41 lines · Avi Kivity
Quoted 34 lines · Jon Mason
PCI: Workaround for Intel MPS errata
Intel 5000 and 5100 series memory controllers have a known issue
if read
completion coalescing is enabled (the default setting) and the
PCI-E
Maximum Payload Size is set to 256B. To work around this issue,
disable
read completion coalescing if the MPS is 256B.It is worth noting that there is no function to undo the disable
of read
completion coalescing, and the performance benefit of read
completion
coalescing will be lost if the MPS is set from 256B to 128B. It
is only
possible to have this issue via hotplug removing the only 256B MPS device in the system (thus making all of the other devices in
the system
have a performance degradation without the benefit of any 256B transfers). Therefore, this trade off is acceptable.Thanks to Jesse Brandeburg and Ben Hutchings for providing
insight into
the problem.Reported-by Avi Kivity<[email protected]>Signed-off-by Jon Mason<[email protected]>drivers/pci/probe.c static int pcie_find_smpss(struct pci_dev *dev, void *data) · line 1388
Quoted 5 lines
drivers/pci/probe.c +5
-0+ +if (!(val& (1 <<10 ))) { + done = true; +return ; + }
Quoted 7 lines
Here, you bail out if bit 10 is clear. So if we're here, it's set.
Review
Quoted 2 lines
(quoted diff) +2
-0+ + val |= (1<< 10);Now it's even more set?
Even with this line changed to clear bit 10, I still get a hard lockup. Do we need to clear this bit on the other 5000 devices? I notice they have similar values in word 0x48, with bits 10 set in them.
What does "Device 7-2,0" refer to in the workaround description? Seems to me we need to apply the workaround to the PCIe ports as well.
Signature · 1 line
error compiling committee.c: too many arguments to function
Re: Workaround for Intel MPS errata
Quoted 44 lines · Avi Kivity
Quoted 43 lines · Avi Kivity
Quoted 30 lines · Jon Mason
PCI: Workaround for Intel MPS errata
Intel 5000 and 5100 series memory controllers have a known issue if read
completion coalescing is enabled (the default setting) and the PCI-E Maximum Payload Size is set to 256B. To work around this issue, disable
read completion coalescing if the MPS is 256B.It is worth noting that there is no function to undo the disable of read
completion coalescing, and the performance benefit of read completion coalescing will be lost if the MPS is set from 256B to 128B. It is only
possible to have this issue via hotplug removing the only 256B MPS device in the system (thus making all of the other devices in the system
have a performance degradation without the benefit of any 256B transfers). Therefore, this trade off is acceptable.Thanks to Jesse Brandeburg and Ben Hutchings for providing insight into
the problem.Quoted 8 lines
Reported-by Avi Kivity<[email protected]>Signed-off-by Jon Mason<[email protected]>+
+ if (!(val& (1<< 10))) {
+ done = true;
+ return;
+ }Here, you bail out if bit 10 is clear. So if we're here, it's set.
Quoted 7 lines
Quoted 5 lines
Quoted 2 lines
+
+ val |= (1<< 10);Now it's even more set?
Even with this line changed to clear bit 10, I still get a hard lockup. Do
That stinks, thanks for finding that issue and fixing it.
Quoted 5 lines
we need to clear this bit on the other 5000 devices? I notice they have similar values in word
0x48, with bits 10 set in them.What does "Device 7-2,0" refer to in the workaround description? Seems to me we need to apply the workaround to the PCIe ports as well.
I have no idea what that means, but it would make sense. I'll modify the patch to do this as well. Thanks for being so much help :)
Quoted 9 lines
--
error compilingcommittee.c: too many arguments to function--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: Workaround for Intel MPS errata
In reply to Avi KivityQuoted 50 lines · Avi Kivity
Quoted 41 lines · Avi Kivity
Quoted 30 lines · Jon Mason
PCI: Workaround for Intel MPS errata
Intel 5000 and 5100 series memory controllers have a known issue if read
completion coalescing is enabled (the default setting) and the PCI-E Maximum Payload Size is set to 256B. To work around this issue, disable
read completion coalescing if the MPS is 256B.It is worth noting that there is no function to undo the disable of read
completion coalescing, and the performance benefit of read completion coalescing will be lost if the MPS is set from 256B to 128B. It is only
possible to have this issue via hotplug removing the only 256B MPS device in the system (thus making all of the other devices in the system
have a performance degradation without the benefit of any 256B transfers). Therefore, this trade off is acceptable.Thanks to Jesse Brandeburg and Ben Hutchings for providing insight into
the problem.Quoted 8 lines
Reported-by Avi Kivity<[email protected]>Signed-off-by Jon Mason<[email protected]>+
+ if (!(val& (1<< 10))) {
+ done = true;
+ return;
+ }Quoted 7 lines
Here, you bail out if bit 10 is clear. So if we're here, it's set.
Quoted 2 lines
+
+ val |= (1<< 10);Now it's even more set?
Quoted 6 lines
Even with this line changed to clear bit 10, I still get a hard lockup. Do we need to clear this bit on the other 5000 devices? I notice they have similar values in word
0x48, with bits 10 set in them.What does "Device 7-2,0" refer to in the workaround description? Seems to me we need to apply the workaround to the PCIe ports as well.
I believe you are correct. On my system (which I still can't get to fail by enabling the RCC bit), I have
00:00.0 Host bridge: Intel Corporation 5000X Chipset Memory Controller Hub (rev 12)
00:02.0 PCI bridge: Intel Corporation 5000 Series Chipset PCI Express x4 Port 2 (rev 12)
00:03.0 PCI bridge: Intel Corporation 5000 Series Chipset PCI Express x4 Port 3 (rev 12)
00:04.0 PCI bridge: Intel Corporation 5000 Series Chipset PCI Express x8 Port 4-5 (rev 12)
00:05.0 PCI bridge: Intel Corporation 5000 Series Chipset PCI Express x4 Port 5 (rev 12)
00:06.0 PCI bridge: Intel Corporation 5000 Series Chipset PCI Express x8 Port 6-7 (rev 12)
00:07.0 PCI bridge: Intel Corporation 5000 Series Chipset PCI Express x4 Port 7 (rev 12)
Those PCI devices numbers match perfectly to the ones from the erratum. Patch to disable the bit on those devices coming shortly.
Thanks,
Jon
Quoted 9 lines
--
error compilingcommittee.c: too many arguments to function--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: Workaround for Intel MPS errata
In reply to Avi KivityHey Avi,
I believe this will fix the issue (assuming the errata is the issue in the first place). You'll need to apply the patch on top of Linus' latest code and re-enable the MPS tuning (as it is now off by default). This can be done by adding "pci=pcie_bus_safe" to your boot args.
After thinking about it some more, a PCI quark is the correct way of doing things. We must always disable read completion coalescing due to the possibility of hotplugging a device with a MPS of 256B. Also, I believe everyone will think this is much cleaner.
Let me know how it goes and thanks again for testing this for me.
Thanks,
Jon
commit ada901c643c7d0978a762fbadc2a6526e4ddf860
Author: Jon Mason <[email protected]> Date: Thu Sep 29 16:56:37 2011 -0500
PCI: Workaround for Intel MPS errata
Intel 5000 and 5100 series memory controllers have a known issue if read completion coalescing is enabled and the PCI-E Maximum Payload Size is set to 256B. To work around this issue, disable read completion coalescing in the memory controller and root complexes. Unfortunately, it must always be disabled, even if no 256B MPS devices are precent, due to the possiblity of one being hotplugged.
Links to erratas:
http://www.intel.com/content/dam/doc/specification-update/5000-chipset-memory-controller-hub-specification-update.pdf
http://www.intel.com/content/dam/doc/specification-update/5100-memory-controller-hub-chipset-specification-update.pdf
Thanks to Jesse Brandeburg and Ben Hutchings for providing insight into the problem.
drivers/pci/probe.c +1 -1
@@ -1452,7 +1452,7 @@ static int pcie_bus_configure_set(struct pci_dev *dev, void *data)return 0 ; } -/* pcie_bus_configure_mps requires that pci_walk_bus work in a top-down, +/* pcie_bus_configure_settings requires that pci_walk_bus work in a top-down, * parents then children fashion. If this changes, then this code will not * work as designed. */
drivers/pci/quirks.c +69 -0
75 lines not on this page · raw message
Re: Workaround for Intel MPS errata
Quoted 11 lines · Jon Mason
Hey Avi,
I believe this will fix the issue (assuming the errata is the issue in the first place). You'll need to apply the patch on top of Linus' latest code and re-enable the MPS tuning (as it is now off by default). This can be done by adding "pci=pcie_bus_safe" to your boot args.After thinking about it some more, a PCI quark is the correct way of doing things. We must always disable read completion coalescing due to the possibility of hotplugging a device with a MPS of 256B. Also, I believe everyone will think this is much cleaner.
Agree.
Quoted 1 line
Let me know how it goes and thanks again for testing this for me.
Works perfectly now. Thanks.
Signature · 1 line
error compiling committee.c: too many arguments to function