On Sat, Dec 15, 2018 at 01:36:37PM -0500, George Koehler wrote:
> >Synopsis: macppc can't modify pages in swap
> >Category: powerpc
> >Environment:
> System : OpenBSD 6.4
> Details : OpenBSD 6.4-current (GENERIC) #312: Fri Dec 14 09:54:07
> MST 2018
>
> [email protected]:/usr/src/sys/arch/macppc/compile/GENERIC
>
> Architecture: OpenBSD.macppc
> Machine : macppc
> >Description:
> My PowerBook5,4 suffers from corrupt memory after it begins to
> use swap. This causes random crashes or infinite loops in programs
> like fvwm, g++, tmux, top, xterm. This problem only happens in
> OpenBSD/macppc, not when the same machine is running Mac OS X, and
> also not in a virtual machine running OpenBSD/amd64.
> My test program can write pages but can't modify them, as if
> OpenBSD is ignoring writes to pages after they got swapped out and in.
>
> >How-To-Repeat:
> The attached program check64.c reliably reproduces the
> problem. The program allocates 1G of memory because my PowerBook has
> 1G of RAM, so the program must use swap.
> The program writes deterministic random numbers to memory,
> then reads and checks these numbers. The seed 1 sequence has no
> errors. The seed 2 sequence has 234632192 errors, and all the errors
> match the seed 1 sequence. The seed 3 and seed 4 sequences have
> more errors, and keep the 234632192 seed 1 matches.
This is a nasty bug indeed. Some developers already spent time on this
in the past, but they did not find the cause of the problem.
-Otto
>
> $ cc -O2 -o check64 check64.c
> $ ulimit -d $(ulimit -dH)
> $ ./check64
> w................................................................
> r................................................................
> correct: 268435456, errors: 0
> w................................................................
> rnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm........
> first error: address 0xbf08c000, have 0x77eef724, expect 0xa25febaf
> correct: 33803264, errors: 234632192, seed 1: 234632192
> w................................................................
> rnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm....
> first error: address 0xbf08c000, have 0x77eef724, expect 0xf217f5cf
> correct: 17140736, errors: 251294720, seed 1: 234632192
> w................................................................
> rnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
> first error: address 0xbf08c000, have 0x77eef724, expect 0xeeab3b77
> correct: 0, errors: 268435456, seed 1: 234632192
> w..^C
>
> >Fix:
> Don't know.
> The second attachment is the output of `eeprom -p` as root.
>
>
> dmesg:
> OpenBSD 6.4-current (GENERIC) #312: Fri Dec 14 09:54:07 MST 2018
> [email protected]:/usr/src/sys/arch/macppc/compile/GENERIC
> real mem = 1073741824 (1024MB)
> avail mem = 1027256320 (979MB)
> mpath0 at root
> scsibus0 at mpath0: 256 targets
> mainbus0 at root: model PowerBook5,4
> cpu0 at mainbus0: 7447A (Revision 0x101): 1333 MHz: 512KB L2 cache
> mem0 at mainbus0
> spdmem0 at mem0: 1GB DDR SDRAM non-parity PC2700CL2.5
> memc0 at mainbus0: uni-n rev 0xd2
> "hw-clock" at memc0 not configured
> kiic0 at memc0 offset 0xf8001000
> iic0 at kiic0
> adt0 at iic0 addr 0xae: adt7460 rev 0x62
> mpcpcibr0 at mainbus0 pci: uni-north
> pci0 at mpcpcibr0 bus 0
> pchb0 at pci0 dev 11 function 0 "Apple UniNorth AGP" rev 0x00
> agp at pchb0 not configured
> radeondrm0 at pci0 dev 16 function 0 "ATI Radeon Mobility M10" rev 0x00
> drm0 at radeondrm0
> radeondrm0: irq 48
> mpcpcibr1 at mainbus0 pci: uni-north
> pci1 at mpcpcibr1 bus 0
> macobio0 at pci1 dev 23 function 0 "Apple Intrepid" rev 0x00
> openpic0 at macobio0 offset 0x40000: version 0x4614 feature 3f0302 LE
> macgpio0 at macobio0 offset 0x50
> "modem-reset" at macgpio0 offset 0x1d not configured
> "modem-power" at macgpio0 offset 0x1c not configured
> macgpio1 at macgpio0 offset 0x9: irq 47
> "programmer-switch" at macgpio0 offset 0x11 not configured
> dfs0 at macgpio0 offset 0x6b: speeds: 1333, 666 MHz
> "gpio4" at macgpio0 offset 0x1e not configured
> "gpio5" at macgpio0 offset 0x6f not configured
> "gpio6" at macgpio0 offset 0x70 not configured
> "extint-gpio4" at macgpio0 offset 0x5c not configured
> "gpio11" at macgpio0 offset 0x75 not configured
> "extint-gpio15" at macgpio0 offset 0x67 not configured
> "escc-legacy" at macobio0 offset 0x12000 not configured
> zs0 at macobio0 offset 0x13000: irq 22,23
> zstty0 at zs0 channel 0
> zstty1 at zs0 channel 1
> aoa0 at macobio0 offset 0x10000: irq 30,1,2
> "timer" at macobio0 offset 0x15000 not configured
> adb0 at macobio0 offset 0x16000: irq 25, via-pmu, 3 targets
> apm0 at adb0: battery flags 0x5, 98% charged
> piic0 at adb0
> iic1 at piic0
> akbd0 at adb0 addr 2: PowerBook G4 keyboard (Inverted T)
> wskbd0 at akbd0: console keyboard
> ams0 at adb0 addr 3: EMP trackpad <tpad> 4-button, 400 dpi
> wsmouse0 at ams0 mux 0
> abtn0 at adb0 addr 7: brightness/volume/eject buttons
> "battery" at macobio0 offset 0x0 not configured
> "backlight" at macobio0 offset 0xf300 not configured
> kiic1 at macobio0 offset 0x18000
> iic2 at kiic1
> wdc0 at macobio0 offset 0x20000 irq 24: DMA
> atapiscsi0 at wdc0 channel 0 drive 0
> scsibus1 at atapiscsi0: 2 targets
> cd0 at scsibus1 targ 0 lun 0: <MATSHITA, CD-RW CW-8123, CA0T> ATAPI 5/cdrom
> removable
> cd0(wdc0:0:0): using BIOS timings, DMA mode 2
> audio0 at aoa0
> bwi0 at pci1 dev 18 function 0 "Broadcom BCM4306" rev 0x03: irq 52, address
> 00:0d:93:eb:35:ef
> cbb0 at pci1 dev 19 function 0 "TI PCI1510 CardBus" rev 0x00: irq 53
> ohci0 at pci1 dev 26 function 0 "Apple Intrepid USB" rev 0x00: irq 29,
> version 1.0, legacy support
> ohci1 at pci1 dev 27 function 0 "NEC USB" rev 0x43: irq 63, version 1.0
> ohci2 at pci1 dev 27 function 1 "NEC USB" rev 0x43: irq 63, version 1.0
> ehci0 at pci1 dev 27 function 2 "NEC USB" rev 0x04: irq 63
> usb0 at ehci0: USB revision 2.0
> uhub0 at usb0 configuration 1 interface 0 "NEC EHCI root hub" rev 2.00/1.00
> addr 1
> cardslot0 at cbb0 slot 0 flags 0
> cardbus0 at cardslot0: bus 1 device 0 cacheline 0x8, lattimer 0x20
> pcmcia0 at cardslot0
> usb1 at ohci0: USB revision 1.0
> uhub1 at usb1 configuration 1 interface 0 "Apple OHCI root hub" rev 1.00/1.00
> addr 1
> usb2 at ohci1: USB revision 1.0
> uhub2 at usb2 configuration 1 interface 0 "NEC OHCI root hub" rev 1.00/1.00
> addr 1
> usb3 at ohci2: USB revision 1.0
> uhub3 at usb3 configuration 1 interface 0 "NEC OHCI root hub" rev 1.00/1.00
> addr 1
> mpcpcibr2 at mainbus0 pci: uni-north
> pci2 at mpcpcibr2 bus 0
> kauaiata0 at pci2 dev 13 function 0 "Apple Intrepid ATA" rev 0x00
> wdc1 at kauaiata0 irq 39: DMA
> wd0 at wdc1 channel 0 drive 0: <FUJITSU MHT2060AT>
> wd0: 16-sector PIO, LBA48, 57231MB, 117210240 sectors
> wd0(wdc1:0:0): using PIO mode 4, DMA mode 2, Ultra-DMA mode 5
> "Apple UniNorth Firewire" rev 0x81 at pci2 dev 14 function 0 not configured
> gem0 at pci2 dev 15 function 0 "Apple Uni-N2 GMAC" rev 0x80: irq 41, address
> 00:0d:93:2d:f3:fa
> eephy0 at gem0 phy 0: 88E1111 Gigabit PHY, rev. 1
> uhidev0 at uhub1 port 1 configuration 1 interface 0 "Apple Computer
> HID-proxy" rev 2.00/15.86 addr 2
> uhidev0: iclass 3/1
> ukbd0 at uhidev0: 8 variable keys, 6 key codes
> wskbd1 at ukbd0 mux 1
> uhidev1 at uhub1 port 1 configuration 1 interface 1 "Apple Computer
> HID-proxy" rev 2.00/15.86 addr 2
> uhidev1: iclass 3/1
> ums0 at uhidev1: 5 buttons
> wsmouse1 at ums0 mux 0
> uhidev2 at uhub2 port 1 configuration 1 interface 0 "CHESEN USB Keyboard" rev
> 1.10/1.10 addr 2
> uhidev2: iclass 3/1
> ukbd1 at uhidev2: 8 variable keys, 6 key codes, country code 33
> wskbd2 at ukbd1 mux 1
> uhidev3 at uhub2 port 1 configuration 1 interface 1 "CHESEN USB Keyboard" rev
> 1.10/1.10 addr 2
> uhidev3: iclass 3/0, 3 report ids
> uhid0 at uhidev3 reportid 2: input=1, output=0, feature=0
> uhid1 at uhidev3 reportid 3: input=3, output=0, feature=0
> uhidev4 at uhub3 port 1 configuration 1 interface 0 "Logitech USB-PS/2
> Optical Mouse" rev 2.00/11.10 addr 2
> uhidev4: iclass 3/1
> ums1 at uhidev4: 3 buttons, Z dir
> wsmouse2 at ums1 mux 0
> vscsi0 at root
> scsibus2 at vscsi0: 256 targets
> softraid0 at root
> scsibus3 at softraid0: 256 targets
> bootpath: /pci@f4000000/ata-6@d/disk@0:/bsd
> root on wd0a (49f4879e4d2301f2.a) swap on wd0b dump on wd0b
> initializing kernel modesetting (RV350 0x1002:0x4E50 0x1002:0x4E50).
> error: [drm:pid0:radeon_get_bios] *ERROR* Unable to locate a BIOS ROM
> error: [drm:pid0:radeon_agp_init] *ERROR* Unable to acquire AGP: 22
> radeondrm0: 1280x854, 32bpp
> wsdisplay0 at radeondrm0 mux 1: console (std, vt100 emulation), using wskbd0
> wskbd1: connecting to wsdisplay0
> wskbd2: connecting to wsdisplay0
> wsdisplay0: screen 1-5 added (std, vt100 emulation)
>
> usbdevs:
> Controller /dev/usb0:
> addr 01: 1033:0000 NEC, EHCI root hub
> high speed, self powered, config 1, rev 1.00
> driver: uhub0
> Controller /dev/usb1:
> addr 01: 106b:0000 Apple, OHCI root hub
> full speed, self powered, config 1, rev 1.00
> driver: uhub1
> addr 02: 05ac:1000 Apple Computer, HID-proxy
> full speed, self powered, config 1, rev 15.86
> driver: uhidev0
> driver: uhidev1
> Controller /dev/usb2:
> addr 01: 1033:0000 NEC, OHCI root hub
> full speed, self powered, config 1, rev 1.00
> driver: uhub2
> addr 02: 0a81:0101 CHESEN, USB Keyboard
> low speed, power 100 mA, config 1, rev 1.10
> driver: uhidev2
> driver: uhidev3
> Controller /dev/usb3:
> addr 01: 1033:0000 NEC, OHCI root hub
> full speed, self powered, config 1, rev 1.00
> driver: uhub3
> addr 02: 046d:c00e Logitech, USB-PS/2 Optical Mouse
> low speed, power 98 mA, config 1, rev 11.10
> driver: uhidev4
>
> pcidump:
> Domain /dev/pci0:
> 0:11:0: Apple UniNorth AGP
> 0x0000: Vendor ID: 106b Product ID: 0034
> 0x0004: Command: 0016 Status: 02b0
> 0x0008: Class: 06 Subclass: 00 Interface: 00 Revision: 00
> 0x000c: BIST: 00 Header Type: 00 Latency Timer: 10 Cache Line Size: 08
> 0x0010: BAR empty (00000000)
> 0x0014: BAR empty (00000000)
> 0x0018: BAR empty (00000000)
> 0x001c: BAR empty (00000000)
> 0x0020: BAR empty (00000000)
> 0x0024: BAR empty (00000000)
> 0x0028: Cardbus CIS: 00000000
> 0x002c: Subsystem Vendor ID: 0000 Product ID: 0000
> 0x0030: Expansion ROM Base Address: 00000000
> 0x0038: 00000000
> 0x003c: Interrupt Pin: 00 Line: 00 Min Gnt: 00 Max Lat: 00
> 0x0080: Capability 0x02: AGP
> 0x0000: 0034106b 02b00016 06000000 00001008
> 0x0010: 00000000 00000000 00000000 00000000
> 0x0020: 00000000 00000000 00000000 00000000
> 0x0030: 00000000 00000080 00000000 00000000
> 0x0040: 00000840 00000000 08000002 00000000
> 0x0050: 001000c0 00000000 00000000 00000000
> 0x0060: 00000000 00000000 00000000 00000000
> 0x0070: 00000000 00000000 00000000 00000000
> 0x0080: 00100002 07000217 00000000 00000000
> 0x0090: 00000000 00000000 00000001 00000400
> 0x00a0: 00000000 00000000 00000000 00000000
> 0x00b0: 00000000 00000000 00000000 00000000
> 0x00c0: 00000000 00000000 00000000 00000000
> 0x00d0: 00000000 00000000 00000000 00000000
> 0x00e0: 00000000 00000000 00000000 00000000
> 0x00f0: 00000000 00000000 00000000 00000000
> 0:16:0: ATI Radeon Mobility M10
> 0x0000: Vendor ID: 1002 Product ID: 4e50
> 0x0004: Command: 0007 Status: 02b0
> 0x0008: Class: 03 Subclass: 00 Interface: 00 Revision: 00
> 0x000c: BIST: 00 Header Type: 00 Latency Timer: ff Cache Line Size: 08
> 0x0010: BAR mem prefetchable 32bit addr: 0xb8000000/0x08000000
> 0x0014: BAR io addr: 0x00000400/0x0100
> 0x0018: BAR mem 32bit addr: 0xb0000000/0x00010000
> 0x001c: BAR empty (00000000)
> 0x0020: BAR empty (00000000)
> 0x0024: BAR empty (00000000)
> 0x0028: Cardbus CIS: 00000000
> 0x002c: Subsystem Vendor ID: 1002 Product ID: 4e50
> 0x0030: Expansion ROM Base Address: b0020001
> 0x0038: 00000000
> 0x003c: Interrupt Pin: 01 Line: ff Min Gnt: 08 Max Lat: 00
> 0x0058: Capability 0x02: AGP
> 0x0050: Capability 0x01: Power Management
> State: D0
> 0x0000: 4e501002 02b00007 03000000 0000ff08
> 0x0010: b8000008 00000401 b0000000 00000000
> 0x0020: 00000000 00000000 00000000 4e501002
> 0x0030: b0020001 00000058 00000000 000801ff
> 0x0040: 00000000 00000000 00000000 4e501002
> 0x0050: 06020001 00000000 00205002 4f000217
> 0x0060: 00000200 00000000 00000000 00000000
> 0x0070: 00000000 00000000 00000000 00000000
> 0x0080: 00000005 00000000 00000000 00000000
> 0x0090: 00000000 00000000 00000000 00000000
> 0x00a0: 00000000 00000000 00000000 00000000
> 0x00b0: 00000000 00000000 00000000 00000000
> 0x00c0: 00000000 00000000 00000000 00000000
> 0x00d0: 00000000 00000000 00000000 00000000
> 0x00e0: 00000000 00000000 00000000 00000000
> 0x00f0: 00000000 00000000 00000000 00000000
> Domain /dev/pci1:
> 0:18:0: Broadcom BCM4306
> 0x0000: Vendor ID: 14e4 Product ID: 4320
> 0x0004: Command: 0006 Status: 0010
> 0x0008: Class: 02 Subclass: 80 Interface: 00 Revision: 03
> 0x000c: BIST: 00 Header Type: 00 Latency Timer: 10 Cache Line Size: 00
> 0x0010: BAR mem 32bit addr: 0xa0006000/0x00002000
> 0x0014: BAR empty (00000000)
> 0x0018: BAR empty (00000000)
> 0x001c: BAR empty (00000000)
> 0x0020: BAR empty (00000000)
> 0x0024: BAR empty (00000000)
> 0x0028: Cardbus CIS: 00000000
> 0x002c: Subsystem Vendor ID: 106b Product ID: 004e
> 0x0030: Expansion ROM Base Address: 00000000
> 0x0038: 00000000
> 0x003c: Interrupt Pin: 01 Line: 00 Min Gnt: 00 Max Lat: 00
> 0x0040: Capability 0x01: Power Management
> State: D0
> 0x0000: 432014e4 00100006 02800003 00001000
> 0x0010: a0006000 00000000 00000000 00000000
> 0x0020: 00000000 00000000 00000000 004e106b
> 0x0030: 00000000 00000040 00000000 00000100
> 0x0040: ffc20001 00004000 00000000 00000000
> 0x0050: 00000000 00000000 00000000 00000000
> 0x0060: 00000000 00000000 00000000 00000000
> 0x0070: 00000000 00000000 00000000 00000000
> 0x0080: 18001000 00000000 00000000 00000000
> 0x0090: 00000000 00000200 00000000 00000000
> 0x00a0: 00000000 00000000 00000000 00000000
> 0x00b0: 000000bf 00000080 000000c0 00000000
> 0x00c0: 00000000 00000000 00000000 00000000
> 0x00d0: 00000000 00000000 00000000 00000000
> 0x00e0: 00000000 00000000 00000000 00000000
> 0x00f0: 00000000 00000000 00000000 00000000
> 0:19:0: TI PCI1510 CardBus
> 0x0000: Vendor ID: 104c Product ID: ac56
> 0x0004: Command: 0007 Status: 0210
> 0x0008: Class: 06 Subclass: 07 Interface: 00 Revision: 00
> 0x000c: BIST: 00 Header Type: 02 Latency Timer: 10 Cache Line Size: 08
> 0x0010: Cardbus Control Registers Base Address: a0004000
> 0x0018: Primary Bus: 0 Cardbus Bus: 1 Subordinate Bus: 1
> Cardbus Latency Timer: 20
> 0x001c: Memory Base 0: fffff000
> 0x0020: Memory Limit 0: 00000000
> 0x0024: Memory Base 1: fffff000
> 0x0028: Memory Limit 1: 00000000
> 0x002c: I/O Base 0: fffffffc
> 0x0030: I/O Limit 0: 00000000
> 0x0034: I/O Base 1: fffffffc
> 0x0038: I/O Limit 1: 00000000
> 0x003c: Interrupt Pin: 01 Line: ff Bridge Control: 04c0
> 0x0040: Subsystem Vendor ID: 0000 Product ID: 0000
> 0x0044: 16-bit Legacy Mode Base Address: 00000001
> 0x00a0: Capability 0x01: Power Management
> State: D0
> 0x0000: ac56104c 02100007 06070000 00021008
> 0x0010: a0004000 020000a0 20010100 fffff000
> 0x0020: 00000000 fffff000 00000000 fffffffc
> 0x0030: 00000000 fffffffc 00000000 04c001ff
> 0x0040: 00000000 00000001 00000000 00000000
> 0x0050: 00000000 00000000 00000000 00000000
> 0x0060: 00000000 00000000 00000000 00000000
> 0x0070: 00000000 00000000 00000000 00000000
> 0x0080: 08649060 00000000 00000000 00001002
> 0x0090: 606600c0 00000000 00008000 00000000
> 0x00a0: fe120001 00c00000 00000006 00000001
> 0x00b0: 00000000 00000000 00000000 00000000
> 0x00c0: 00000000 00000000 00000000 00000000
> 0x00d0: 00000000 00000000 00000000 00000000
> 0x00e0: 00000000 00000000 00000000 00000000
> 0x00f0: 00000000 00000000 00000000 00000000
> 0:23:0: Apple Intrepid
> 0x0000: Vendor ID: 106b Product ID: 003e
> 0x0004: Command: 0006 Status: 0200
> 0x0008: Class: ff Subclass: 00 Interface: 00 Revision: 00
> 0x000c: BIST: 00 Header Type: 00 Latency Timer: 10 Cache Line Size: 08
> 0x0010: BAR mem 32bit addr: 0x80000000/0x00080000
> 0x0014: BAR empty (00000000)
> 0x0018: BAR empty (00000000)
> 0x001c: BAR empty (00000000)
> 0x0020: BAR empty (00000000)
> 0x0024: BAR empty (00000000)
> 0x0028: Cardbus CIS: 00000000
> 0x002c: Subsystem Vendor ID: 0000 Product ID: 0000
> 0x0030: Expansion ROM Base Address: 00000000
> 0x0038: 00000000
> 0x003c: Interrupt Pin: 00 Line: 00 Min Gnt: 00 Max Lat: 00
> 0x0000: 003e106b 02000006 ff000000 00001008
> 0x0010: 80000000 00000000 00000000 00000000
> 0x0020: 00000000 00000000 00000000 00000000
> 0x0030: 00000000 00000000 00000000 00000000
> 0x0040: 00000000 00000000 00000000 00000000
> 0x0050: 00000000 00000000 00000000 00000000
> 0x0060: 00000000 00000000 00000000 00000000
> 0x0070: 00000000 00000000 00000000 00000000
> 0x0080: 00000000 00000000 00000000 00000000
> 0x0090: 00000000 00000000 00000000 00000000
> 0x00a0: 00000000 00000000 00000000 00000000
> 0x00b0: 00000000 00000000 00000000 00000000
> 0x00c0: 00000000 00000000 00000000 00000000
> 0x00d0: 00000000 00000000 00000000 00000000
> 0x00e0: 00000000 00000000 00000000 00000000
> 0x00f0: 00000000 00000000 00000000 00000000
> 0:26:0: Apple Intrepid USB
> 0x0000: Vendor ID: 106b Product ID: 003f
> 0x0004: Command: 0006 Status: 0200
> 0x0008: Class: 0c Subclass: 03 Interface: 10 Revision: 00
> 0x000c: BIST: 00 Header Type: 00 Latency Timer: 10 Cache Line Size: 08
> 0x0010: BAR mem 32bit addr: 0xa0003000/0x00001000
> 0x0014: BAR empty (00000000)
> 0x0018: BAR empty (00000000)
> 0x001c: BAR empty (00000000)
> 0x0020: BAR empty (00000000)
> 0x0024: BAR empty (00000000)
> 0x0028: Cardbus CIS: 00000000
> 0x002c: Subsystem Vendor ID: 0000 Product ID: 0000
> 0x0030: Expansion ROM Base Address: 00000000
> 0x0038: 00000000
> 0x003c: Interrupt Pin: 01 Line: 00 Min Gnt: 03 Max Lat: 56
> 0x0000: 003f106b 02000006 0c031000 00001008
> 0x0010: a0003000 00000000 00000000 00000000
> 0x0020: 00000000 00000000 00000000 00000000
> 0x0030: 00000000 00000000 00000000 56030100
> 0x0040: 00000000 00000000 00000000 00000000
> 0x0050: 00000000 00000000 00000000 00000000
> 0x0060: 00000000 00000007 00000000 00000000
> 0x0070: 00000000 00000000 00000000 00000000
> 0x0080: 00000000 00000000 00000000 00000000
> 0x0090: 00000000 00000000 00000000 00000000
> 0x00a0: 00000000 00000000 00000000 00000000
> 0x00b0: 00000000 00000000 00000000 00000000
> 0x00c0: 00000000 00000000 00000000 00000000
> 0x00d0: 00000000 00000000 00000000 00000000
> 0x00e0: 00000000 00000000 00000000 00000000
> 0x00f0: 00000000 00000000 00000000 00000000
> 0:27:0: NEC USB
> 0x0000: Vendor ID: 1033 Product ID: 0035
> 0x0004: Command: 0006 Status: 0210
> 0x0008: Class: 0c Subclass: 03 Interface: 10 Revision: 43
> 0x000c: BIST: 00 Header Type: 80 Latency Timer: 10 Cache Line Size: 08
> 0x0010: BAR mem 32bit addr: 0xa0002000/0x00001000
> 0x0014: BAR empty (00000000)
> 0x0018: BAR empty (00000000)
> 0x001c: BAR empty (00000000)
> 0x0020: BAR empty (00000000)
> 0x0024: BAR empty (00000000)
> 0x0028: Cardbus CIS: 00000000
> 0x002c: Subsystem Vendor ID: 1033 Product ID: 0035
> 0x0030: Expansion ROM Base Address: 00000000
> 0x0038: 00000000
> 0x003c: Interrupt Pin: 01 Line: 00 Min Gnt: 01 Max Lat: 2a
> 0x0040: Capability 0x01: Power Management
> State: D0
> 0x0000: 00351033 02100006 0c031043 00801008
> 0x0010: a0002000 00000000 00000000 00000000
> 0x0020: 00000000 00000000 00000000 00351033
> 0x0030: 00000000 00000040 00000000 2a010100
> 0x0040: fe020001 00000000 00000000 00000000
> 0x0050: 00000000 00000000 00000000 00000000
> 0x0060: 00000000 00000000 00000000 00000000
> 0x0070: 00000000 00000000 00000000 00000000
> 0x0080: 00000000 00000000 00000000 00000000
> 0x0090: 00000000 00000000 00000000 00000000
> 0x00a0: 00000000 00000000 00000000 00000000
> 0x00b0: 00000000 00000000 00000000 00000000
> 0x00c0: 00000000 00000000 00000000 00000000
> 0x00d0: 00000000 00000000 00000000 00000000
> 0x00e0: 6cb03305 00000000 00000000 00000000
> 0x00f0: 00000000 00000000 00000000 00000000
> 0:27:1: NEC USB
> 0x0000: Vendor ID: 1033 Product ID: 0035
> 0x0004: Command: 0006 Status: 0210
> 0x0008: Class: 0c Subclass: 03 Interface: 10 Revision: 43
> 0x000c: BIST: 00 Header Type: 00 Latency Timer: 10 Cache Line Size: 08
> 0x0010: BAR mem 32bit addr: 0xa0001000/0x00001000
> 0x0014: BAR empty (00000000)
> 0x0018: BAR empty (00000000)
> 0x001c: BAR empty (00000000)
> 0x0020: BAR empty (00000000)
> 0x0024: BAR empty (00000000)
> 0x0028: Cardbus CIS: 00000000
> 0x002c: Subsystem Vendor ID: 1033 Product ID: 0035
> 0x0030: Expansion ROM Base Address: 00000000
> 0x0038: 00000000
> 0x003c: Interrupt Pin: 02 Line: 00 Min Gnt: 01 Max Lat: 2a
> 0x0040: Capability 0x01: Power Management
> State: D0
> 0x0000: 00351033 02100006 0c031043 00001008
> 0x0010: a0001000 00000000 00000000 00000000
> 0x0020: 00000000 00000000 00000000 00351033
> 0x0030: 00000000 00000040 00000000 2a010200
> 0x0040: fe020001 00000000 00000000 00000000
> 0x0050: 00000000 00000000 00000000 00000000
> 0x0060: 00000000 00000000 00000000 00000000
> 0x0070: 00000000 00000000 00000000 00000000
> 0x0080: 00000000 00000000 00000000 00000000
> 0x0090: 00000000 00000000 00000000 00000000
> 0x00a0: 00000000 00000000 00000000 00000000
> 0x00b0: 00000000 00000000 00000000 00000000
> 0x00c0: 00000000 00000000 00000000 00000000
> 0x00d0: 00000000 00000000 00000000 00000000
> 0x00e0: 00000000 00000000 00000000 00000000
> 0x00f0: 00000000 00000000 00000000 00000000
> 0:27:2: NEC USB
> 0x0000: Vendor ID: 1033 Product ID: 00e0
> 0x0004: Command: 0006 Status: 0210
> 0x0008: Class: 0c Subclass: 03 Interface: 20 Revision: 04
> 0x000c: BIST: 00 Header Type: 00 Latency Timer: 10 Cache Line Size: 08
> 0x0010: BAR mem 32bit addr: 0xa0000000/0x00000100
> 0x0014: BAR empty (00000000)
> 0x0018: BAR empty (00000000)
> 0x001c: BAR empty (00000000)
> 0x0020: BAR empty (00000000)
> 0x0024: BAR empty (00000000)
> 0x0028: Cardbus CIS: 00000000
> 0x002c: Subsystem Vendor ID: 1033 Product ID: 00e0
> 0x0030: Expansion ROM Base Address: 00000000
> 0x0038: 00000000
> 0x003c: Interrupt Pin: 03 Line: 00 Min Gnt: 10 Max Lat: 22
> 0x0040: Capability 0x01: Power Management
> State: D0
> 0x0000: 00e01033 02100006 0c032004 00001008
> 0x0010: a0000000 00000000 00000000 00000000
> 0x0020: 00000000 00000000 00000000 00e01033
> 0x0030: 00000000 00000040 00000000 22100300
> 0x0040: fe020001 00000000 00000000 00000000
> 0x0050: 00000000 00000000 00000000 00000000
> 0x0060: 003f2020 00000000 00000000 00000000
> 0x0070: 00000000 00000000 00000000 00000000
> 0x0080: 00000000 00000000 00000000 00000000
> 0x0090: 00000000 00000000 00000000 00000000
> 0x00a0: 00000000 00000000 00000000 00000000
> 0x00b0: 00000000 00000000 00000000 00000000
> 0x00c0: 00000000 00000000 00000000 00000000
> 0x00d0: 00000000 00000000 00000000 00000000
> 0x00e0: 6cb03305 00000000 00000001 c0080000
> 0x00f0: 00000000 00000000 00000000 00000000
> Domain /dev/pci2:
> 0:13:0: Apple Intrepid ATA
> 0x0000: Vendor ID: 106b Product ID: 003b
> 0x0004: Command: 0006 Status: 8200
> 0x0008: Class: ff Subclass: 00 Interface: 00 Revision: 00
> 0x000c: BIST: 00 Header Type: 00 Latency Timer: 20 Cache Line Size: 08
> 0x0010: BAR mem 32bit addr: 0xf5004000/0x00004000
> 0x0014: BAR empty (00000000)
> 0x0018: BAR empty (00000000)
> 0x001c: BAR empty (00000000)
> 0x0020: BAR empty (00000000)
> 0x0024: BAR empty (00000000)
> 0x0028: Cardbus CIS: 00000000
> 0x002c: Subsystem Vendor ID: 0000 Product ID: 0000
> 0x0030: Expansion ROM Base Address: 00000000
> 0x0038: 00000000
> 0x003c: Interrupt Pin: 00 Line: 00 Min Gnt: 00 Max Lat: 00
> 0x0000: 003b106b 82000006 ff000000 00002008
> 0x0010: f5004000 00000000 00000000 00000000
> 0x0020: 00000000 00000000 00000000 00000000
> 0x0030: 00000000 00000000 00000000 00000000
> 0x0040: 00000000 00000000 00000000 00000000
> 0x0050: 00000000 00000000 00000000 00000000
> 0x0060: 00000000 00000000 00000000 00000000
> 0x0070: 00000000 00000000 00000000 00000000
> 0x0080: 00000000 00000000 00000000 00000000
> 0x0090: 00000000 00000000 00000000 00000000
> 0x00a0: 00000000 00000000 00000000 00000000
> 0x00b0: 00000000 00000000 00000000 00000000
> 0x00c0: 00000000 00000000 00000000 00000000
> 0x00d0: 00000000 00000000 00000000 00000000
> 0x00e0: 00000000 00000000 00000000 00000000
> 0x00f0: 00000000 00000000 00000000 00000000
> 0:14:0: Apple UniNorth Firewire
> 0x0000: Vendor ID: 106b Product ID: 0031
> 0x0004: Command: 0006 Status: 0290
> 0x0008: Class: 0c Subclass: 00 Interface: 10 Revision: 81
> 0x000c: BIST: 00 Header Type: 00 Latency Timer: 40 Cache Line Size: 08
> 0x0010: BAR mem 32bit addr: 0xf5000000/0x00001000
> 0x0014: BAR empty (00000000)
> 0x0018: BAR empty (00000000)
> 0x001c: BAR empty (00000000)
> 0x0020: BAR empty (00000000)
> 0x0024: BAR empty (00000000)
> 0x0028: Cardbus CIS: 00000000
> 0x002c: Subsystem Vendor ID: 106b Product ID: 5811
> 0x0030: Expansion ROM Base Address: 00000000
> 0x0038: 00000000
> 0x003c: Interrupt Pin: 01 Line: 00 Min Gnt: 0c Max Lat: 18
> 0x0044: Capability 0x01: Power Management
> State: D0
> 0x0000: 0031106b 02900006 0c001081 00004008
> 0x0010: f5000000 00000000 00000000 00000000
> 0x0020: 00000000 00000000 00000000 5811106b
> 0x0030: 00000000 00000044 00000000 180c0100
> 0x0040: 00000000 7e020001 00000000 00000000
> 0x0050: 00000000 00000000 00000000 00000000
> 0x0060: 00000000 00000000 00000000 00000000
> 0x0070: 00000000 00000000 00000000 00000000
> 0x0080: 000d93ff fe2df3fa 00000000 00000000
> 0x0090: 00000000 00000000 00000000 00000000
> 0x00a0: 00000000 00000000 00000000 00000000
> 0x00b0: 00000000 00000000 00000000 00000000
> 0x00c0: 00000000 00000000 00000000 00000000
> 0x00d0: 00000000 00000000 00000000 00000000
> 0x00e0: 00000000 00000000 00000000 00000000
> 0x00f0: 00000000 00000000 00000000 00000000
> 0:15:0: Apple Uni-N2 GMAC
> 0x0000: Vendor ID: 106b Product ID: 0032
> 0x0004: Command: 0006 Status: 84a0
> 0x0008: Class: 02 Subclass: 00 Interface: 00 Revision: 80
> 0x000c: BIST: 00 Header Type: 00 Latency Timer: 20 Cache Line Size: 20
> 0x0010: BAR mem 32bit addr: 0xf5200000/0x00200000
> 0x0014: BAR empty (00000000)
> 0x0018: BAR empty (00000000)
> 0x001c: BAR empty (00000000)
> 0x0020: BAR empty (00000000)
> 0x0024: BAR empty (00000000)
> 0x0028: Cardbus CIS: 00000000
> 0x002c: Subsystem Vendor ID: 0000 Product ID: 0000
> 0x0030: Expansion ROM Base Address: f5100000
> 0x0038: 00000000
> 0x003c: Interrupt Pin: 01 Line: ff Min Gnt: 40 Max Lat: 40
> 0x0000: 0032106b 84a00006 02000080 00002020
> 0x0010: f5200000 00000000 00000000 00000000
> 0x0020: 00000000 00000000 00000000 00000000
> 0x0030: f5100000 00000000 00000000 404001ff
> 0x0040: 00000000 00000000 00000000 00000000
> 0x0050: 00000000 00000000 00000000 00000000
> 0x0060: 00000000 00000000 00000000 00000000
> 0x0070: 00000000 00000000 00000000 00000000
> 0x0080: 00000000 00000000 00000000 00000000
> 0x0090: 00000000 00000000 00000000 00000000
> 0x00a0: 00000000 00000000 00000000 00000000
> 0x00b0: 00000000 00000000 00000000 00000000
> 0x00c0: 00000000 00000000 00000000 00000000
> 0x00d0: 00000000 00000000 00000000 00000000
> 0x00e0: 00000000 00000000 00000000 00000000
> 0x00f0: 00000000 00000000 00000000 00000000
>
> acpidump:
> /*
> * Written in 2018 by George Koehler. Public domain.
> */
> #include <sys/mman.h>
> #include <stdint.h>
> #include <stdio.h>
>
> /*
> * Allocate 1G of memory, because my machine has 1G of RAM,
> * so my machine must swap.
> */
> #define SIZE ((size_t)1024 * 1024 * 1024)
>
> /*
> * This is sfc32, a deterministic random number generator adapted from
> * public-domain code written by Chris Doty-Humphrey in PractRand 0.94
> * (http://pracrand.sourceforge.net/).
> */
> struct rng {
> uint32_t a;
> uint32_t b;
> uint32_t c;
> uint32_t counter;
> };
>
> static uint32_t
> raw32(struct rng *r)
> {
> uint32_t tmp = r->a + r->b + r->counter++;
> r->a = r->b ^ (r->b >> 9);
> r->b = r->c + (r->c << 3);
> r->c = ((r->c << 21) | (r->c >> (32-21))) + tmp;
> return tmp;
> }
>
> static void
> seed(struct rng *r, uint64_t s)
> {
> int i;
> r->a = 0;
> r->b = (s >> 0);
> r->c = (s >> 32);
> r->counter = 1;
> for (i = 0; i < 12; i++)
> raw32(r);
> }
>
> /*
> * Tests RAM or swap by writing deterministic random numbers, then
> * reading and checking the numbers.
> */
> int
> main(void)
> {
> const int COLUMNS = 64;
> const int BYTES = SIZE / COLUMNS;
> const int WORDS = BYTES / sizeof(uint32_t);
> struct rng one, r;
> uint64_t my_seed;
> uint32_t e, expect, *first_error, h, have, o, *p, *ram[COLUMNS];
> size_t errors, log2, total_correct, total_errors, total_one;
> int col, i;
>
> /* Don't buffer stdout. */
> setvbuf(stdout, NULL, _IONBF, 0);
>
> /* Allocate memory in COLUMNS. */
> for (col = 0; col < COLUMNS; col++) {
> ram[col] = mmap(NULL, BYTES, PROT_READ|PROT_WRITE,
> MAP_PRIVATE|MAP_ANON, -1, 0);
> if (ram[col] == MAP_FAILED) {
> printf("Can't mmap %zu bytes in column %d.\n",
> (size_t)SIZE, col);
> return 1;
> }
> }
>
> for (my_seed = 1;; my_seed++) {
> /* Write random numbers to ram. */
> seed(&r, my_seed);
> putchar('w');
> for (col = 0; col < COLUMNS; col++) {
> p = ram[col];
> for (i = 0; i < WORDS; i++) {
> *p = raw32(&r);
> p++;
> }
> putchar('.');
> }
> putchar('\n');
>
> /* Check values in ram. */
> first_error = NULL;
> total_correct = total_errors = total_one = 0;
> seed(&r, my_seed);
> seed(&one, 1);
> putchar('r');
> for (col = 0; col < COLUMNS; col++) {
> errors = 0;
> p = ram[col];
> for (i = 0; i < WORDS; i++) {
> h = *p; /* in ram */
> e = raw32(&r); /* expected */
> o = raw32(&one); /* seed 1 */
> if (h == e) {
> total_correct++;
> } else {
> total_errors++;
> errors++;
> if (!first_error) {
> first_error = p;
> have = h;
> expect = e;
> }
> }
> if (h == o)
> total_one++;
> p++;
> }
> /* Show log2(errors) in this column. */
> for (log2 = 0; errors != 0; errors >>= 1)
> log2++;
> if (log2 == 0)
> putchar('.');
> else if (log2 < 10)
> putchar('0' + log2);
> else
> putchar('a' - 10 + log2);
> }
> putchar('\n');
> if (first_error) {
> printf("first error: address %p, "
> "have %#lx, expect %#lx\n", first_error,
> (unsigned long)have, (unsigned long)expect);
> }
> printf("correct: %zu, errors: %zu, seed 1: %zu\n",
> total_correct, total_errors, total_one);
> }
> }