On Thu, 22 Nov 2012, Kapetanakis Giannis wrote:
> Doing Per-Olov's advice on
> http://marc.info/?l=openbsd-misc&m=133771632704741&w=2
> and applying the following, fixes the problem.
>
> Should I stick with this or is there another reason it has not been
> included in current so far?

Yes - it is a work around for broken/incomplete emulation or incorrect 
interrupt routing. Always doing this would result in a performance hit on all 
systems. As shown in your dmesg, both em(4) devices are using the same IRQ:

em0 at pci0 dev 3 function 0 "Intel PRO/1000MT (82540EM)" rev 0x03: irq 11, 
address 52:54:00:25:e7:a8
em1 at pci0 dev 4 function 0 "Intel PRO/1000MT (82540EM)" rev 0x03: irq 11, 
address 52:54:00:8a:63:d6

With intr_shared_edge=0, we stop processing the interrupt chain once a device 
reports that it had work to do. If there are other devices that need to be 
serviced we expect the interrupt pin to still be asserted and a second 
interrupt to trigger. With intr_shared_edge=1 we always process the entire 
interrupt chain. In your case either the interrupt pin is not being asserted 
correctly or the first device is always reporting that it had work to do, 
even when it did not.

Do you see any difference if you use OpenBSD/amd64 instead? The interrupt 
handling will be the same, but you may get more useful interrupt allocation.

> Index: machdep.c
> ===================================================================
> RCS file: /cvs/src/sys/arch/i386/i386/machdep.c,v
> retrieving revision 1.517
> diff -u -r1.517 machdep.c
> --- machdep.c   10 Nov 2012 09:45:05 -0000      1.517
> +++ machdep.c   22 Nov 2012 10:24:16 -0000
> @@ -3893,7 +3893,7 @@
>    * True if the system has any non-level interrupts which are shared
>    * on the same pin.
>    */
> -int    intr_shared_edge;
> +int    intr_shared_edge=1;
>
>   /*
>    * Software interrupt registration
>
> On 21/11/12 14:23, Kapetanakis Giannis wrote:
> > Hi,
> >
> > It seems I come up on this
> > http://marc.info/?l=openbsd-misc&m=133651882630852&w=2
> >
> > I've running latest -current i386 on KVM with mpbios disabled.
> >
> > Today I've enabled a new em(4) interface. Immediately when I enable
> > the second interface and set an IP I get
> > em1: watchdog timeout -- resetting
> > em0: watchdog timeout -- resetting
> >
> > if I do ifconfig em1 down
> > then the timeout stops and I have network on em0.
> >
> > regards,
> >
> > Giann
> >
> > OpenBSD 5.2-current (GENERIC) #87: Sat Nov 17 13:27:31 MST 2012
> > [email protected]:/usr/src/sys/arch/i386/compile/GENERIC
> > cpu0: Intel Pentium II ("GenuineIntel" 686-class) 2.93 GHz
> > cpu0:
> > FPU,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,PGE,CMOV,MMX,FXSR,SSE,SSE2,SSE3,POPCN
> >T,PERF real mem  = 1073266688 (1023MB)
> > avail mem = 1044770816 (996MB)
> > mainbus0 at root
> > bios0 at mainbus0: AT/286+ BIOS, date 06/23/99, BIOS32 rev. 0 @
> > 0xff046, SMBIOS rev. 2.4 @ 0x3ffffec0 (10 entries)
> > bios0: vendor Seabios version "0.5.1" date 01/01/2007
> > bios0: Red Hat KVM
> > acpi0 at bios0: rev 0
> > acpi0: sleep states S5
> > acpi0: tables DSDT FACP SSDT APIC
> > acpi0: wakeup devices
> > acpitimer0 at acpi0: 3579545 Hz, 24 bits
> > acpimadt0 at acpi0 addr 0xfee00000: PC-AT compat
> > acpiprt0 at acpi0: bus 0 (PCI0)
> > acpicpu0 at acpi0
> > mpbios at bios0 function 0x0 not configured
> > bios0: ROM list: 0xc0000/0x8c00 0xc9000/0x800 0xc9800/0x800
> > 0xca000/0x2200
> > cpu0 at mainbus0: (uniprocessor)
> > pci0 at mainbus0 bus 0: configuration mode 1 (bios)
> > pchb0 at pci0 dev 0 function 0 "Intel 82441FX" rev 0x02
> > pcib0 at pci0 dev 1 function 0 "Intel 82371SB ISA" rev 0x00
> > pciide0 at pci0 dev 1 function 1 "Intel 82371SB IDE" rev 0x00: DMA,
> > channel 0 wired to compatibility, channel 1 wired to compatibility
> > wd0 at pciide0 channel 0 drive 0: <QEMU HARDDISK>
> > wd0: 16-sector PIO, LBA48, 12288MB, 25165824 sectors
> > wd0(pciide0:0:0): using PIO mode 0, DMA mode 2
> > atapiscsi0 at pciide0 channel 1 drive 0
> > scsibus0 at atapiscsi0: 2 targets
> > cd0 at scsibus0 targ 0 lun 0: <QEMU, QEMU DVD-ROM, 0.12> ATAPI 5/cdrom
> > removable
> > cd0(pciide0:1:0): using PIO mode 0
> > uhci0 at pci0 dev 1 function 2 "Intel 82371SB USB" rev 0x01: irq 11
> > piixpm0 at pci0 dev 1 function 3 "Intel 82371AB Power" rev 0x03: irq 10
> > iic0 at piixpm0
> > iic0: addr 0x19 3e=00 48=00 4a=00 4e=00 fc=00 fe=00 words 00=0000
> > 01=0000 02=0000 03=0000 04=0000 05=0000 06=0000 07=0000
> > iic0: addr 0x1b 3e=00 48=00 4a=00 4e=00 fc=00 fe=00 words 00=0000
> > 01=0000 02=0000 03=0000 04=0000 05=0000 06=0000 07=0000
> > iic0: addr 0x1c 0f=00 3e=00 48=00 4a=00 4e=00 fc=00 fe=00 words
> > 00=0000 01=0000 02=0000 03=0000 04=0000 05=0000 06=0000 07=0000
> > iic0: addr 0x1d 0f=00 3e=00 48=00 4a=00 4e=00 fc=00 fe=00 words
> > 00=0000 01=0000 02=0000 03=0000 04=0000 05=0000 06=0000 07=0000
> > iic0: addr 0x1e 3e=00 48=00 4a=00 4e=00 fc=00 fe=00 words 00=0000
> > 01=0000 02=0000 03=0000 04=0000 05=0000 06=0000 07=0000
> > iic0: addr 0x1f 3e=00 48=00 4a=00 4e=00 fc=00 fe=00 words 00=0000
> > 01=0000 02=0000 03=0000 04=0000 05=0000 06=0000 07=0000
> > iic0: addr 0x29 00=d0 01=d0 02=d0 03=d0 04=d0 05=d0 06=d0 07=d0 08=d0
> > words 00=0000 01=0000 02=0000 03=0000 04=0000 05=0000 06=0000 07=0000
> > iic0: addr 0x2b 00=d0 01=d0 02=d0 03=d0 04=d0 05=d0 06=d0 07=d0 08=d0
> > words 00=0000 01=0000 02=0000 03=0000 04=0000 05=0000 06=0000 07=0000
> > iic0: addr 0x4c 00=d0 01=d0 02=d0 03=d0 04=d0 05=d0 06=d0 07=d0 08=d0
> > words 00=0000 01=0000 02=0000 03=0000 04=0000 05=0000 06=0000 07=0000
> > iic0: addr 0x4e 00=d0 01=d0 02=d0 03=d0 04=d0 05=d0 06=d0 07=d0 08=d0
> > words 00=0000 01=0000 02=0000 03=0000 04=0000 05=0000 06=0000 07=0000
> > vga1 at pci0 dev 2 function 0 "Cirrus Logic CL-GD5446" rev 0x00
> > wsdisplay0 at vga1 mux 1: console (80x25, vt100 emulation)
> > wsdisplay0: screen 1-5 added (80x25, vt100 emulation)
> > em0 at pci0 dev 3 function 0 "Intel PRO/1000MT (82540EM)" rev 0x03:
> > irq 11, address 52:54:00:25:e7:a8
> > em1 at pci0 dev 4 function 0 "Intel PRO/1000MT (82540EM)" rev 0x03:
> > irq 11, address 52:54:00:8a:63:d6
> > virtio0 at pci0 dev 5 function 0 "Qumranet Virtio Memory" rev 0x00:
> > Virtio Memory Balloon Device
> > virtio0: no matching child driver; not configured
> > isa0 at pcib0
> > isadma0 at isa0
> > com0 at isa0 port 0x3f8/8 irq 4: ns16550a, 16 byte fifo
> > com0: probed fifo depth: 0 bytes
> > 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
> > pms0 at pckbc0 (aux slot)
> > pckbc0: using irq 12 for aux slot
> > wsmouse0 at pms0 mux 0
> > pcppi0 at isa0 port 0x61
> > spkr0 at pcppi0
> > npx0 at isa0 port 0xf0/16: reported by CPUID; using exception 16
> > fdc0 at isa0 port 0x3f0/6 irq 6 drq 2
> > fd0 at fdc0 drive 0: density unknown
> > fd1 at fdc0 drive 1: density unknown
> > usb0 at uhci0: USB revision 1.0
> > uhub0 at usb0 "Intel UHCI root hub" rev 1.00/1.00 addr 1
> > nvram: invalid checksum
> > vscsi0 at root
> > scsibus1 at vscsi0: 256 targets
> > softraid0 at root
> > scsibus2 at softraid0: 256 targets
> > root on wd0a (5c65debded0b6054.a) swap on wd0b dump on wd0b
> > clock: unknown CMOS layout
> > em1: watchdog timeout -- resetting
> > em0: watchdog timeout -- resetting
> > em0: watchdog timeout -- resetting
> > em0: watchdog timeout -- resetting
> > em0: watchdog timeout -- resetting
> > em0: watchdog timeout -- resetting
> > em0: watchdog timeout -- resetting
> > em0: watchdog timeout -- resetting
> > em0: watchdog timeout -- resetting



-- 

    "Reason is not automatic. Those who deny it cannot be conquered by it.
     Do not count on them. Leave them alone." -- Ayn Rand

Reply via email to