Hi. Me and Roman are curious about zero comments on this.
We'll try to improve the diff if it is not ok. Just let us know. Anyone? :) On Wed, Oct 3, 2012 at 4:06 PM, Alexey Suslikov <alexey.susli...@gmail.com> wrote: > Hi. > > Is there any progress/comments on this? > > On Fri, Sep 28, 2012 at 11:29 PM, Alexey Suslikov > <alexey.susli...@gmail.com> wrote: >> Hi. >> >> With input from tedu@, guenther@ and others, below are: >> 1) test case; >> 2) backtrace for test case; >> 3) locking diff; >> 4) dmesg (amd64 GENERIC.MP built from 2012-09-28 CVS). >> >> Diff introduces no changes to srandomdev(): correct me if I'm wrong, >> but no mutex can be used since sysctl can sleep. >> >> Rebuild and reinstall in src/lib/librthread and src/lib/libc after applying >> the diff. >> >> Expect test case (and Kannel port of course) not crashing after rebuild >> and reinstall. >> >> Cheers, >> Alexey >> >> 1) test case. >> >> #include <pthread.h> >> #include <stdio.h> >> #include <stdlib.h> >> #include <assert.h> >> #include <unistd.h> >> >> #define NUM_THREADS 1800 >> >> void *TaskCode(void *argument) >> { >> struct timeval tv; >> >> gettimeofday(&tv, 0); >> srandom((getpid() << 16) ^ getuid() ^ tv.tv_sec ^ tv.tv_usec); >> >> return NULL; >> } >> >> int main(void) >> { >> pthread_t threads[NUM_THREADS]; >> int thread_args[NUM_THREADS]; >> int rc, i; >> >> /* create all threads */ >> for (i=0; i<NUM_THREADS; ++i) { >> thread_args[i] = i; >> rc = pthread_create(&threads[i], NULL, TaskCode, (void *) >> &thread_args[i]); >> assert(0 == rc); >> } >> >> /* wait for all threads to complete */ >> for (i=0; i<NUM_THREADS; ++i) { >> rc = pthread_join(threads[i], NULL); >> assert(0 == rc); >> } >> >> printf("Test srandom success\n"); >> exit(EXIT_SUCCESS); >> } >> >> 2) backtrace for test case. >> >> Program received signal SIGSEGV, Segmentation fault. >> [Switching to thread 1030380] >> 0x000019d34d618f8e in random () at /usr/src/lib/libc/stdlib/random.c:387 >> 387 *fptr += *rptr; >> >> (gdb) bt >> #0 0x000019d34d618f8e in random () at /usr/src/lib/libc/stdlib/random.c:387 >> #1 0x000019d34d619169 in srandom (x=Variable "x" is not available. >> ) at /usr/src/lib/libc/stdlib/random.c:216 >> #2 0x000019d140000fe1 in TaskCode (argument=0x7f7ffffea004) at >> test_srandom.c:14 >> #3 0x000019d34999d11e in _rthread_start (v=Variable "v" is not available. >> ) at /usr/src/lib/librthread/rthread.c:122 >> #4 0x000019d34d5f0f9b in __tfork_thread () at >> /usr/src/lib/libc/arch/amd64/sys/tfork_thread.S:75 >> Cannot access memory at address 0x19d344efb000 >> >> 3) locking diff. >> >> Index: lib/libc/include/thread_private.h >> =================================================================== >> RCS file: /cvs/src/lib/libc/include/thread_private.h,v >> retrieving revision 1.25 >> diff -u -p -r1.25 thread_private.h >> --- lib/libc/include/thread_private.h 16 Oct 2011 06:29:56 -0000 1.25 >> +++ lib/libc/include/thread_private.h 27 Sep 2012 10:48:45 -0000 >> @@ -172,4 +172,16 @@ void _thread_arc4_unlock(void); >> _thread_arc4_unlock();\ >> } while (0) >> >> +void _thread_random_lock(void); >> +void _thread_random_unlock(void); >> + >> +#define _RANDOM_LOCK() do { \ >> + if (__isthreaded) \ >> + _thread_random_lock(); \ >> + } while (0) >> +#define _RANDOM_UNLOCK() do { \ >> + if (__isthreaded) \ >> + _thread_random_unlock();\ >> + } while (0) >> + >> #endif /* _THREAD_PRIVATE_H_ */ >> Index: lib/libc/stdlib/random.c >> =================================================================== >> RCS file: /cvs/src/lib/libc/stdlib/random.c,v >> retrieving revision 1.17 >> diff -u -p -r1.17 random.c >> --- lib/libc/stdlib/random.c 1 Jun 2012 01:01:57 -0000 1.17 >> +++ lib/libc/stdlib/random.c 27 Sep 2012 10:48:45 -0000 >> @@ -35,6 +35,10 @@ >> #include <stdio.h> >> #include <stdlib.h> >> #include <unistd.h> >> +#include "thread_private.h" >> + >> +static void srandom_unlocked(unsigned int); >> +static long random_unlocked(void); >> >> /* >> * random.c: >> @@ -186,8 +190,8 @@ static int rand_sep = SEP_3; >> * introduced by the L.C.R.N.G. Note that the initialization of randtbl[] >> * for default usage relies on values produced by this routine. >> */ >> -void >> -srandom(unsigned int x) >> +static void >> +srandom_unlocked(unsigned int x) >> { >> int i; >> int32_t test; >> @@ -213,10 +217,18 @@ srandom(unsigned int x) >> fptr = &state[rand_sep]; >> rptr = &state[0]; >> for (i = 0; i < 10 * rand_deg; i++) >> - (void)random(); >> + (void)random_unlocked(); >> } >> } >> >> +void >> +srandom(unsigned int x) >> +{ >> + _RANDOM_LOCK(); >> + srandom_unlocked(x); >> + _RANDOM_UNLOCK(); >> +} >> + >> /* >> * srandomdev: >> * >> @@ -273,12 +285,15 @@ initstate(u_int seed, char *arg_state, s >> { >> char *ostate = (char *)(&state[-1]); >> >> + _RANDOM_LOCK(); >> if (rand_type == TYPE_0) >> state[-1] = rand_type; >> else >> state[-1] = MAX_TYPES * (rptr - state) + rand_type; >> - if (n < BREAK_0) >> + if (n < BREAK_0) { >> + _RANDOM_UNLOCK(); >> return(NULL); >> + } >> if (n < BREAK_1) { >> rand_type = TYPE_0; >> rand_deg = DEG_0; >> @@ -302,11 +317,12 @@ initstate(u_int seed, char *arg_state, s >> } >> state = &(((int32_t *)arg_state)[1]); /* first location */ >> end_ptr = &state[rand_deg]; /* must set end_ptr before srandom */ >> - srandom(seed); >> + srandom_unlocked(seed); >> if (rand_type == TYPE_0) >> state[-1] = rand_type; >> else >> state[-1] = MAX_TYPES*(rptr - state) + rand_type; >> + _RANDOM_UNLOCK(); >> return(ostate); >> } >> >> @@ -333,6 +349,7 @@ setstate(char *arg_state) >> int32_t rear = new_state[0] / MAX_TYPES; >> char *ostate = (char *)(&state[-1]); >> >> + _RANDOM_LOCK(); >> if (rand_type == TYPE_0) >> state[-1] = rand_type; >> else >> @@ -348,6 +365,7 @@ setstate(char *arg_state) >> rand_sep = seps[type]; >> break; >> default: >> + _RANDOM_UNLOCK(); >> return(NULL); >> } >> state = &new_state[1]; >> @@ -356,6 +374,7 @@ setstate(char *arg_state) >> fptr = &state[(rear + rand_sep) % rand_deg]; >> } >> end_ptr = &state[rand_deg]; /* set end_ptr too */ >> + _RANDOM_UNLOCK(); >> return(ostate); >> } >> >> @@ -376,8 +395,8 @@ setstate(char *arg_state) >> * >> * Returns a 31-bit random number. >> */ >> -long >> -random(void) >> +static long >> +random_unlocked(void) >> { >> int32_t i; >> >> @@ -393,4 +412,15 @@ random(void) >> rptr = state; >> } >> return((long)i); >> +} >> + >> +long >> +random(void) >> +{ >> + long r; >> + >> + _RANDOM_LOCK(); >> + r = random_unlocked(); >> + _RANDOM_UNLOCK(); >> + return (r); >> } >> Index: lib/libc/thread/unithread_malloc_lock.c >> =================================================================== >> RCS file: /cvs/src/lib/libc/thread/unithread_malloc_lock.c,v >> retrieving revision 1.8 >> diff -u -p -r1.8 unithread_malloc_lock.c >> --- lib/libc/thread/unithread_malloc_lock.c 13 Jun 2008 21:18:43 -0000 >> 1.8 >> +++ lib/libc/thread/unithread_malloc_lock.c 27 Sep 2012 10:48:46 -0000 >> @@ -21,6 +21,12 @@ WEAK_PROTOTYPE(_thread_arc4_unlock); >> WEAK_ALIAS(_thread_arc4_lock); >> WEAK_ALIAS(_thread_arc4_unlock); >> >> +WEAK_PROTOTYPE(_thread_random_lock); >> +WEAK_PROTOTYPE(_thread_random_unlock); >> + >> +WEAK_ALIAS(_thread_random_lock); >> +WEAK_ALIAS(_thread_random_unlock); >> + >> void >> WEAK_NAME(_thread_malloc_lock)(void) >> { >> @@ -53,6 +59,18 @@ WEAK_NAME(_thread_arc4_lock)(void) >> >> void >> WEAK_NAME(_thread_arc4_unlock)(void) >> +{ >> + return; >> +} >> + >> +void >> +WEAK_NAME(_thread_random_lock)(void) >> +{ >> + return; >> +} >> + >> +void >> +WEAK_NAME(_thread_random_unlock)(void) >> { >> return; >> } >> Index: lib/librthread/rthread.c >> =================================================================== >> RCS file: /cvs/src/lib/librthread/rthread.c,v >> retrieving revision 1.66 >> diff -u -p -r1.66 rthread.c >> --- lib/librthread/rthread.c 22 Aug 2012 23:43:32 -0000 1.66 >> +++ lib/librthread/rthread.c 27 Sep 2012 10:48:46 -0000 >> @@ -674,6 +674,8 @@ static void *__libc_overrides[] __used = >> &__errno, >> &_thread_arc4_lock, >> &_thread_arc4_unlock, >> + &_thread_random_lock, >> + &_thread_random_unlock, >> &_thread_atexit_lock, >> &_thread_atexit_unlock, >> &_thread_malloc_lock, >> Index: lib/librthread/rthread_fork.c >> =================================================================== >> RCS file: /cvs/src/lib/librthread/rthread_fork.c,v >> retrieving revision 1.6 >> diff -u -p -r1.6 rthread_fork.c >> --- lib/librthread/rthread_fork.c 22 Aug 2012 23:43:32 -0000 1.6 >> +++ lib/librthread/rthread_fork.c 27 Sep 2012 10:48:46 -0000 >> @@ -91,6 +91,7 @@ _dofork(int is_vfork) >> _thread_atexit_lock(); >> _thread_malloc_lock(); >> _thread_arc4_lock(); >> + _thread_random_lock(); >> >> #if defined(__ELF__) >> if (_DYNAMIC) >> @@ -107,6 +108,7 @@ _dofork(int is_vfork) >> _thread_arc4_unlock(); >> _thread_malloc_unlock(); >> _thread_atexit_unlock(); >> + _thread_random_unlock(); >> >> #if defined(__ELF__) >> if (_DYNAMIC) >> Index: lib/librthread/rthread_libc.c >> =================================================================== >> RCS file: /cvs/src/lib/librthread/rthread_libc.c,v >> retrieving revision 1.10 >> diff -u -p -r1.10 rthread_libc.c >> --- lib/librthread/rthread_libc.c 17 Apr 2012 15:10:11 -0000 1.10 >> +++ lib/librthread/rthread_libc.c 27 Sep 2012 10:48:46 -0000 >> @@ -200,3 +200,19 @@ _thread_arc4_unlock(void) >> _spinunlock(&arc4_lock); >> } >> >> +/* >> + * random lock >> + */ >> +static _spinlock_lock_t random_lock = _SPINLOCK_UNLOCKED; >> + >> +void >> +_thread_random_lock(void) >> +{ >> + _spinlock(&random_lock); >> +} >> + >> +void >> +_thread_random_unlock(void) >> +{ >> + _spinunlock(&random_lock); >> +} >> >> 4) dmesg. >> >> OpenBSD 5.2-current (GENERIC.MP) #0: Fri Sep 28 20:27:53 EEST 2012 >> ***@***:/usr/src/sys/arch/amd64/compile/GENERIC.MP >> real mem = 8580038656 (8182MB) >> avail mem = 8329166848 (7943MB) >> mainbus0 at root >> bios0 at mainbus0: SMBIOS rev. 2.6 @ 0x9f000 (68 entries) >> bios0: vendor American Megatrends Inc. version "1.1" date 05/27/2010 >> bios0: Supermicro X8SIL >> acpi0 at bios0: rev 2 >> acpi0: sleep states S0 S1 S4 S5 >> acpi0: tables DSDT FACP APIC MCFG OEMB HPET GSCI SSDT EINJ BERT ERST HEST >> acpi0: wakeup devices P0P1(S4) P0P3(S4) P0P4(S4) P0P5(S4) P0P6(S4) >> BR1E(S4) PS2K(S4) PS2M(S4) USB0(S4) USB1(S4) USB2(S4) USB3(S4) >> USB4(S4) USB5(S4) USB6(S4) GBE_(S4) BR20(S4) BR21(S4) BR22(S4) >> BR23(S4) BR24(S4) BR25(S4) BR26(S4) BR27(S4) EUSB(S4) USBE(S4) >> SLPB(S4) >> acpitimer0 at acpi0: 3579545 Hz, 24 bits >> acpimadt0 at acpi0 addr 0xfee00000: PC-AT compat >> cpu0 at mainbus0: apid 0 (boot processor) >> cpu0: Intel(R) Xeon(R) CPU X3440 @ 2.53GHz, 2533.66 MHz >> cpu0: >> FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE,SSE3,DTES64,MWAIT,DS-CPL,VMX,SMX,EST,TM2,SSSE3,CX16,xTPR,PDCM,SSE4.1,SSE4.2,POPCNT,NXE,LONG,LAHF >> cpu0: 256KB 64b/line 8-way L2 cache >> cpu0: apic clock running at 133MHz >> cpu1 at mainbus0: apid 2 (application processor) >> cpu1: Intel(R) Xeon(R) CPU X3440 @ 2.53GHz, 2533.33 MHz >> cpu1: >> FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE,SSE3,DTES64,MWAIT,DS-CPL,VMX,SMX,EST,TM2,SSSE3,CX16,xTPR,PDCM,SSE4.1,SSE4.2,POPCNT,NXE,LONG,LAHF >> cpu1: 256KB 64b/line 8-way L2 cache >> cpu2 at mainbus0: apid 4 (application processor) >> cpu2: Intel(R) Xeon(R) CPU X3440 @ 2.53GHz, 2533.33 MHz >> cpu2: >> FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE,SSE3,DTES64,MWAIT,DS-CPL,VMX,SMX,EST,TM2,SSSE3,CX16,xTPR,PDCM,SSE4.1,SSE4.2,POPCNT,NXE,LONG,LAHF >> cpu2: 256KB 64b/line 8-way L2 cache >> cpu3 at mainbus0: apid 6 (application processor) >> cpu3: Intel(R) Xeon(R) CPU X3440 @ 2.53GHz, 2533.33 MHz >> cpu3: >> FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE,SSE3,DTES64,MWAIT,DS-CPL,VMX,SMX,EST,TM2,SSSE3,CX16,xTPR,PDCM,SSE4.1,SSE4.2,POPCNT,NXE,LONG,LAHF >> cpu3: 256KB 64b/line 8-way L2 cache >> cpu4 at mainbus0: apid 1 (application processor) >> cpu4: Intel(R) Xeon(R) CPU X3440 @ 2.53GHz, 2533.33 MHz >> cpu4: >> FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE,SSE3,DTES64,MWAIT,DS-CPL,VMX,SMX,EST,TM2,SSSE3,CX16,xTPR,PDCM,SSE4.1,SSE4.2,POPCNT,NXE,LONG,LAHF >> cpu4: 256KB 64b/line 8-way L2 cache >> cpu5 at mainbus0: apid 3 (application processor) >> cpu5: Intel(R) Xeon(R) CPU X3440 @ 2.53GHz, 2533.33 MHz >> cpu5: >> FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE,SSE3,DTES64,MWAIT,DS-CPL,VMX,SMX,EST,TM2,SSSE3,CX16,xTPR,PDCM,SSE4.1,SSE4.2,POPCNT,NXE,LONG,LAHF >> cpu5: 256KB 64b/line 8-way L2 cache >> cpu6 at mainbus0: apid 5 (application processor) >> cpu6: Intel(R) Xeon(R) CPU X3440 @ 2.53GHz, 2533.33 MHz >> cpu6: >> FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE,SSE3,DTES64,MWAIT,DS-CPL,VMX,SMX,EST,TM2,SSSE3,CX16,xTPR,PDCM,SSE4.1,SSE4.2,POPCNT,NXE,LONG,LAHF >> cpu6: 256KB 64b/line 8-way L2 cache >> cpu7 at mainbus0: apid 7 (application processor) >> cpu7: Intel(R) Xeon(R) CPU X3440 @ 2.53GHz, 2533.33 MHz >> cpu7: >> FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE,SSE3,DTES64,MWAIT,DS-CPL,VMX,SMX,EST,TM2,SSSE3,CX16,xTPR,PDCM,SSE4.1,SSE4.2,POPCNT,NXE,LONG,LAHF >> cpu7: 256KB 64b/line 8-way L2 cache >> ioapic0 at mainbus0: apid 8 pa 0xfec00000, version 20, 24 pins >> ioapic0: misconfigured as apic 1, remapped to apid 8 >> acpimcfg0 at acpi0 addr 0xe0000000, bus 0-255 >> acpihpet0 at acpi0: 14318179 Hz >> acpiprt0 at acpi0: bus 0 (PCI0) >> acpiprt1 at acpi0: bus -1 (P0P1) >> acpiprt2 at acpi0: bus 1 (P0P3) >> acpiprt3 at acpi0: bus 2 (P0P5) >> acpiprt4 at acpi0: bus -1 (P0P6) >> acpiprt5 at acpi0: bus 6 (BR1E) >> acpiprt6 at acpi0: bus 3 (BR20) >> acpiprt7 at acpi0: bus 4 (BR24) >> acpiprt8 at acpi0: bus 5 (BR25) >> acpicpu0 at acpi0: C3, C2, C1, PSS >> acpicpu1 at acpi0: C3, C2, C1, PSS >> acpicpu2 at acpi0: C3, C2, C1, PSS >> acpicpu3 at acpi0: C3, C2, C1, PSS >> acpicpu4 at acpi0: C3, C2, C1, PSS >> acpicpu5 at acpi0: C3, C2, C1, PSS >> acpicpu6 at acpi0: C3, C2, C1, PSS >> acpicpu7 at acpi0: C3, C2, C1, PSS >> acpibtn0 at acpi0: SLPB >> acpibtn1 at acpi0: PWRB >> ipmi at mainbus0 not configured >> cpu0: Enhanced SpeedStep 2533 MHz: speeds: 2534, 2533, 2400, 2267, >> 2133, 2000, 1867, 1733, 1600, 1467, 1333, 1200 MHz >> pci0 at mainbus0 bus 0 >> pchb0 at pci0 dev 0 function 0 "Intel Core DMI" rev 0x11 >> ppb0 at pci0 dev 3 function 0 "Intel Core PCIE" rev 0x11: msi >> pci1 at ppb0 bus 1 >> ppb1 at pci0 dev 5 function 0 "Intel Core PCIE" rev 0x11: msi >> pci2 at ppb1 bus 2 >> "Intel Core Management" rev 0x11 at pci0 dev 8 function 0 not configured >> "Intel Core Scratch" rev 0x11 at pci0 dev 8 function 1 not configured >> "Intel Core Control" rev 0x11 at pci0 dev 8 function 2 not configured >> "Intel Core Misc" rev 0x11 at pci0 dev 8 function 3 not configured >> "Intel Core QPI Link" rev 0x11 at pci0 dev 16 function 0 not configured >> "Intel Core QPI Routing" rev 0x11 at pci0 dev 16 function 1 not configured >> ehci0 at pci0 dev 26 function 0 "Intel 3400 USB" rev 0x05: apic 8 int 21 >> usb0 at ehci0: USB revision 2.0 >> uhub0 at usb0 "Intel EHCI root hub" rev 2.00/1.00 addr 1 >> ppb2 at pci0 dev 28 function 0 "Intel 3400 PCIE" rev 0x05: msi >> pci3 at ppb2 bus 3 >> ppb3 at pci0 dev 28 function 4 "Intel 3400 PCIE" rev 0x05: msi >> pci4 at ppb3 bus 4 >> em0 at pci4 dev 0 function 0 "Intel PRO/1000 MT (82574L)" rev 0x00: >> msi, address 00:25:90:34:c5:aa >> ppb4 at pci0 dev 28 function 5 "Intel 3400 PCIE" rev 0x05: msi >> pci5 at ppb4 bus 5 >> em1 at pci5 dev 0 function 0 "Intel PRO/1000 MT (82574L)" rev 0x00: >> msi, address 00:25:90:34:c5:ab >> ehci1 at pci0 dev 29 function 0 "Intel 3400 USB" rev 0x05: apic 8 int 23 >> usb1 at ehci1: USB revision 2.0 >> uhub1 at usb1 "Intel EHCI root hub" rev 2.00/1.00 addr 1 >> ppb5 at pci0 dev 30 function 0 "Intel 82801BA Hub-to-PCI" rev 0xa5 >> pci6 at ppb5 bus 6 >> vga1 at pci6 dev 3 function 0 "Matrox MGA G200eW" rev 0x0a >> wsdisplay0 at vga1 mux 1: console (80x25, vt100 emulation) >> wsdisplay0: screen 1-5 added (80x25, vt100 emulation) >> pcib0 at pci0 dev 31 function 0 "Intel 3420 LPC" rev 0x05 >> ahci0 at pci0 dev 31 function 2 "Intel 3400 AHCI" rev 0x05: msi, AHCI 1.3 >> scsibus0 at ahci0: 32 targets >> sd0 at scsibus0 targ 0 lun 0: <ATA, Hitachi HUA72201, JP4O> SCSI3 >> 0/direct fixed naa.5000cca375e4aaec >> sd0: 953869MB, 512 bytes/sector, 1953525168 sectors >> sd1 at scsibus0 targ 1 lun 0: <ATA, Hitachi HUA72201, JP4O> SCSI3 >> 0/direct fixed naa.5000cca39adc8be4 >> sd1: 953869MB, 512 bytes/sector, 1953525168 sectors >> ichiic0 at pci0 dev 31 function 3 "Intel 3400 SMBus" rev 0x05: apic 8 int 18 >> iic0 at ichiic0 >> sdtemp0 at iic0 addr 0x18: se97 >> sdtemp1 at iic0 addr 0x1a: se97 >> "eeprom" at iic0 addr 0x50 not configured >> "eeprom" at iic0 addr 0x52 not configured >> isa0 at pcib0 >> isadma0 at isa0 >> com0 at isa0 port 0x3f8/8 irq 4: ns16550a, 16 byte fifo >> com1 at isa0 port 0x2f8/8 irq 3: ns16550a, 16 byte fifo >> pckbc0 at isa0 port 0x60/5 >> pckbd0 at pckbc0 (kbd slot) >> pckbc0: using irq 1 for kbd slot >> wskbd0 at pckbd0: console keyboard, using wsdisplay0 >> pcppi0 at isa0 port 0x61 >> spkr0 at pcppi0 >> wbsio0 at isa0 port 0x2e/2: W83627DHG rev 0x25 >> lm1 at wbsio0 port 0xa10/8: W83627DHG >> mtrr: Pentium Pro MTRR support >> uhub2 at uhub0 port 1 "Intel Rate Matching Hub" rev 2.00/0.00 addr 2 >> uhidev0 at uhub2 port 2 configuration 1 interface 0 "Winbond >> Electronics Corp Hermon USB hidmouse Device" rev 1.10/0.01 addr 3 >> uhidev0: iclass 3/1 >> ums0 at uhidev0: 3 buttons, Z dir >> wsmouse0 at ums0 mux 0 >> uhidev1 at uhub2 port 2 configuration 1 interface 1 "Winbond >> Electronics Corp Hermon USB hidmouse Device" rev 1.10/0.01 addr 3 >> uhidev1: iclass 3/1 >> ukbd0 at uhidev1: 8 variable keys, 6 key codes >> wskbd1 at ukbd0 mux 1 >> wskbd1: connecting to wsdisplay0 >> uhub3 at uhub1 port 1 "Intel Rate Matching Hub" rev 2.00/0.00 addr 2 >> vscsi0 at root >> scsibus1 at vscsi0: 256 targets >> softraid0 at root >> scsibus2 at softraid0: 256 targets >> sd2 at scsibus2 targ 1 lun 0: <OPENBSD, SR RAID 1, 005> SCSI2 0/direct fixed >> sd2: 953764MB, 512 bytes/sector, 1953310705 sectors >> root on sd2a (e7035b2342e8b32b.a) swap on sd2b dump on sd2b