alpha/4973: puc on alpha XP1000

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

alpha/4973: puc on alpha XP1000

Takashi-4
>Number:         4973
>Category:       alpha
>Synopsis:       puc on alpha XP1000
>Confidential:   yes
>Severity:       serious
>Priority:       medium
>Responsible:    bugs
>State:          open
>Quarter:        
>Keywords:      
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Mon Jan 16 00:20:02 GMT 2006
>Closed-Date:
>Last-Modified:
>Originator:     KUDO Takashi
>Release:        3.8
>Organization:
net
>Environment:
        System      : OpenBSD 3.8
        Architecture: OpenBSD.alpha
        Machine     : alpha
>Description:
On GENERIC 3.8 kernel applied pr#4947 patch,
I got many many "stray 6600 irq 24" when trying to use puc device.
Ultimately, a interrupt from puc will be disabled and the puc device
will not be usable.

[ using 471288 bytes of bsd ELF symbol table ]
consinit: not using prom console
Copyright (c) 1982, 1986, 1989, 1991, 1993
        The Regents of the University of California.  All rights reserved.
Copyright (c) 1995-2005 OpenBSD. All rights reserved.  http://www.OpenBSD.org

OpenBSD 3.8 (ALPHAHACKS) #0: Mon Jan 16 02:56:40 JST 2006
    [hidden email]:/work/src38/sys/arch/alpha/compile/ALPHAHACKS
COMPAQ Professional Workstation XP1000, 666MHz
8192 byte page size, 1 processor.
total memory = 1073741824 (1048576K)
(2179072 reserved for PROM, 1071562752 used by OpenBSD)
avail memory = 933339136 (911464K)
using 13080 buffers containing 107151360 bytes (104640K) of memory
mainbus0 (root)
cpu0 at mainbus0: ID 0 (primary), 21264A-9 (unknown minor type 9)
cpu0: Architecture extensions: 307<PAT,MVI,CIX,FIX,BWX>
tsc0 at mainbus0: 21272 Chipset, Cchip rev 0
tsc0: 4 Dchips, 1 memory bus of 32 bytes
tsc0: arrays present: 1024MB, 0MB, 0MB, 0MB, Dchip 0 rev 1
tsp0 at tsc0
pci0 at tsp0 bus 0
sio0 at pci0 dev 7 function 0 "Contaq Microsystems CY82C693U ISA" rev 0x00
pciide0 at pci0 dev 7 function 1 "Contaq Microsystems CY82C693U ISA" rev 0x00: DMA, channel 0 wired to compatibility
atapiscsi0 at pciide0 channel 0 drive 0
scsibus0 at atapiscsi0: 2 targets
cd0 at scsibus0 targ 0 lun 0: <TOSHIBA, CD-ROM XM-6702B, 1005> SCSI0 5/cdrom removable
cd0(pciide0:0:0): using PIO mode 4, DMA mode 2
pciide1 at pci0 dev 7 function 2 "Contaq Microsystems CY82C693U ISA" rev 0x00: no DMA, channel 0 wired to compatibility
pciide1: channel 0 disabled (no drives)
ohci0 at pci0 dev 7 function 3 "Contaq Microsystems CY82C693U ISA" rev 0x00: isa irq 10, version 1.0, legacy support
usb0 at ohci0: USB revision 1.0
uhub0 at usb0
uhub0: Contaq Microsys OHCI root hub, rev 1.00/1.00, addr 1
uhub0: 2 ports with 2 removable, self powered
xl0 at pci0 dev 11 function 0 "3Com 3c905 100Base-TX" rev 0x00: dec 6600 irq 40, address 00:10:4b:75:14:9d
nsphy0 at xl0 phy 24: DP83840 10/100 PHY, rev. 1
vga0 at pci0 dev 12 function 0 "Texas Instruments 3DLabs Permedia 2" rev 0x01
wsdisplay0 at vga0 mux 1: console (80x25, vt100 emulation)
wsdisplay0: screen 1-5 added (80x25, vt100 emulation)
pciide2 at pci0 dev 13 function 0 "Promise PDC20268" rev 0x02: DMA, channel 0 configured to native-PCI, channel 1 configured to native-PCI
pciide2: using dec 6600 irq 32 for native-PCI interrupt
wd0 at pciide2 channel 0 drive 0: <HDS722516VLAT20>
wd0: 16-sector PIO, LBA48, 157066MB, 321672960 sectors
wd0(pciide2:0:0): using PIO mode 4, Ultra-DMA mode 5
wd1 at pciide2 channel 1 drive 1: <HDS722516VLAT20>
wd1: 16-sector PIO, LBA48, 157066MB, 321672960 sectors
wd1(pciide2:1:1): using PIO mode 4, Ultra-DMA mode 5
isa0 at sio0
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
pms0 at pckbc0 (aux slot)
pckbc0: using irq 12 for aux slot
wsmouse0 at pms0 mux 0
pcppi0 at isa0 port 0x61
midi0 at pcppi0: <PC speaker>
spkr0 at pcppi0
isabeep0 at pcppi0
lpt0 at isa0 port 0x3bc/4 irq 7
fdc0 at isa0 port 0x3f0/6 irq 6 drq 2
fd0 at fdc0 drive 0: 1.44MB 80 cyl, 2 head, 18 sec
mcclock0 at isa0 port 0x70/2: mc146818 or compatible
tsp1 at tsc0
pci1 at tsp1 bus 0
de0 at pci1 dev 3 function 0 "DEC 21142/3" rev 0x41: dec 6600 irq 45
de0: DEC  pass 4.1 address 08:00:2b:86:9a:5e
isp0 at pci1 dev 6 function 0 "QLogic ISP1020" rev 0x06: dec 6600 irq 47
scsibus1 at isp0: 16 targets
sd0 at scsibus1 targ 0 lun 0: <IBM, IC35L018UWD210-0, S5CS> SCSI3 0/direct fixed
sd0: 17501MB, 20765 cyl, 6 head, 287 sec, 512 bytes/sec, 35843670 sec total
sd1 at scsibus1 targ 1 lun 0: <DEC, RZ2CC-KA (C) DEC, 5520> SCSI2 0/direct fixed
sd1: 4091MB, 3708 cyl, 20 head, 113 sec, 512 bytes/sec, 8380080 sec total
ppb0 at pci1 dev 8 function 0 "DEC 21152 PCI-PCI" rev 0x03
pci2 at ppb0 bus 2
puc0 at pci2 dev 10 function 0 "Avlab LP-PCI 4 Serial" rev 0x00: com, com, com, com
com2 at puc0 port 0 dec 6600 irq 24: ns16550a, 16 byte fifo
com3 at puc0 port 1 dec 6600 irq 24: ns16550a, 16 byte fifo
com4 at puc0 port 2 dec 6600 irq 24: ns16550a, 16 byte fifo
com5 at puc0 port 3 dec 6600 irq 24: ns16550a, 16 byte fifo
stray isa irq 3
stray isa irq 4
root on sd0a swap on sd0b
rootdev=0x800 rrootdev=0x800 rawdev=0x802

>How-To-Repeat:
On GENERIC 3.8 kernel applied pr#4947 and XP1000(tsunami platform?,
no problem with PWS600au), try to use puc device.
       
>Fix:
This workaround is stolen from netbsd.
See http://mail-index.netbsd.org/port-alpha/2005/03/28/0006.html

I believe alpha's com driver or isa subsystem has something bug.

Index: sys/arch/alpha/dev/shared_intr.c
===================================================================
RCS file: /pub/cvs/openbsd/src/sys/arch/alpha/dev/shared_intr.c,v
retrieving revision 1.1.1.3
diff -u -r1.1.1.3 shared_intr.c
--- sys/arch/alpha/dev/shared_intr.c 6 Jan 2006 08:51:47 -0000 1.1.1.3
+++ sys/arch/alpha/dev/shared_intr.c 15 Jan 2006 17:00:40 -0000
@@ -244,6 +244,19 @@
 }
 
 void
+alpha_shared_intr_reset_strays(intr, num)
+ struct alpha_shared_intr *intr;
+ unsigned int num;
+{
+
+ /*
+ * Don't bother blocking interrupts; this doesn't have to be
+ * precise, but it does need to be fast.
+ */
+ intr[num].intr_nstrays = 0;
+}
+
+void
 alpha_shared_intr_stray(intr, num, basename)
  struct alpha_shared_intr *intr;
  unsigned int num;
Index: sys/arch/alpha/include/intr.h
===================================================================
RCS file: /pub/cvs/openbsd/src/sys/arch/alpha/include/intr.h,v
retrieving revision 1.1.1.4
diff -u -r1.1.1.4 intr.h
--- sys/arch/alpha/include/intr.h 6 Jan 2006 08:51:48 -0000 1.1.1.4
+++ sys/arch/alpha/include/intr.h 15 Jan 2006 16:15:50 -0000
@@ -242,6 +242,8 @@
     unsigned int, int);
 void alpha_shared_intr_set_maxstrays(struct alpha_shared_intr *,
     unsigned int, int);
+void alpha_shared_intr_reset_strays(struct alpha_shared_intr *,
+    unsigned int);
 void alpha_shared_intr_stray(struct alpha_shared_intr *, unsigned int,
     const char *);
 void alpha_shared_intr_set_private(struct alpha_shared_intr *,
Index: sys/arch/alpha/pci/pci_1000.c
===================================================================
RCS file: /pub/cvs/openbsd/src/sys/arch/alpha/pci/pci_1000.c,v
retrieving revision 1.1.1.2
diff -u -r1.1.1.2 pci_1000.c
--- sys/arch/alpha/pci/pci_1000.c 6 Jul 2004 20:47:33 -0000 1.1.1.2
+++ sys/arch/alpha/pci/pci_1000.c 15 Jan 2006 22:28:40 -0000
@@ -271,7 +271,8 @@
     "dec_1000 irq");
  if (ALPHA_SHARED_INTR_DISABLE(dec_1000_pci_intr, irq))
  dec_1000_disable_intr(irq);
- }
+ } else
+ alpha_shared_intr_reset_strays(dec_1000_pci_intr, irq);
  return;
  }
 #if NSIO > 0 || NPCEB > 0
Index: sys/arch/alpha/pci/pci_1000a.c
===================================================================
RCS file: /pub/cvs/openbsd/src/sys/arch/alpha/pci/pci_1000a.c,v
retrieving revision 1.1.1.2
diff -u -r1.1.1.2 pci_1000a.c
--- sys/arch/alpha/pci/pci_1000a.c 6 Jul 2004 20:47:33 -0000 1.1.1.2
+++ sys/arch/alpha/pci/pci_1000a.c 15 Jan 2006 22:29:12 -0000
@@ -292,7 +292,8 @@
     "dec_1000a irq");
  if (ALPHA_SHARED_INTR_DISABLE(dec_1000a_pci_intr, irq))
  dec_1000a_disable_intr(irq);
- }
+ } else
+ alpha_shared_intr_reset_strays(dec_1000a_pci_intr, irq);
  return;
  }
 #if NSIO > 0 || NPCEB > 0
Index: sys/arch/alpha/pci/pci_550.c
===================================================================
RCS file: /pub/cvs/openbsd/src/sys/arch/alpha/pci/pci_550.c,v
retrieving revision 1.1.1.3
diff -u -r1.1.1.3 pci_550.c
--- sys/arch/alpha/pci/pci_550.c 6 Jan 2006 08:51:51 -0000 1.1.1.3
+++ sys/arch/alpha/pci/pci_550.c 15 Jan 2006 22:31:16 -0000
@@ -414,7 +414,8 @@
     "dec 550 irq");
  if (ALPHA_SHARED_INTR_DISABLE(dec_550_pci_intr, irq))
  dec_550_intr_disable(irq);
- }
+ } else
+ alpha_shared_intr_reset_strays(dec_550_pci_intr, irq);
  return;
  }
 #if NSIO
Index: sys/arch/alpha/pci/pci_6600.c
===================================================================
RCS file: /pub/cvs/openbsd/src/sys/arch/alpha/pci/pci_6600.c,v
retrieving revision 1.1.1.2
diff -u -r1.1.1.2 pci_6600.c
--- sys/arch/alpha/pci/pci_6600.c 6 Jul 2004 20:47:34 -0000 1.1.1.2
+++ sys/arch/alpha/pci/pci_6600.c 15 Jan 2006 16:12:45 -0000
@@ -295,7 +295,8 @@
     irqtype);
  if (ALPHA_SHARED_INTR_DISABLE(dec_6600_pci_intr, irq))
  dec_6600_intr_disable(irq);
- }
+ } else
+ alpha_shared_intr_reset_strays(dec_6600_pci_intr, irq);
  return;
  }
 #if NSIO
Index: sys/arch/alpha/pci/pci_eb164.c
===================================================================
RCS file: /pub/cvs/openbsd/src/sys/arch/alpha/pci/pci_eb164.c,v
retrieving revision 1.1.1.2
diff -u -r1.1.1.2 pci_eb164.c
--- sys/arch/alpha/pci/pci_eb164.c 6 Jul 2004 20:47:34 -0000 1.1.1.2
+++ sys/arch/alpha/pci/pci_eb164.c 15 Jan 2006 22:35:08 -0000
@@ -366,7 +366,8 @@
     "eb164 irq");
  if (ALPHA_SHARED_INTR_DISABLE(eb164_pci_intr, irq))
  eb164_intr_disable(irq);
- }
+ } else
+ alpha_shared_intr_reset_strays(eb164_pci_intr, irq);
  return;
  }
 #if NSIO
Index: sys/arch/alpha/pci/pci_eb64plus.c
===================================================================
RCS file: /pub/cvs/openbsd/src/sys/arch/alpha/pci/pci_eb64plus.c,v
retrieving revision 1.1.1.2
diff -u -r1.1.1.2 pci_eb64plus.c
--- sys/arch/alpha/pci/pci_eb64plus.c 6 Jul 2004 20:47:34 -0000 1.1.1.2
+++ sys/arch/alpha/pci/pci_eb64plus.c 15 Jan 2006 22:34:01 -0000
@@ -261,7 +261,8 @@
  "eb64+ irq");
  if (ALPHA_SHARED_INTR_DISABLE(eb64plus_pci_intr, irq))
  eb64plus_intr_disable(irq);
- }
+ } else
+ alpha_shared_intr_reset_strays(eb64plus_pci_intr, irq);
  return;
  }
 #if NSIO
Index: sys/arch/alpha/pci/pci_kn20aa.c
===================================================================
RCS file: /pub/cvs/openbsd/src/sys/arch/alpha/pci/pci_kn20aa.c,v
retrieving revision 1.1.1.2
diff -u -r1.1.1.2 pci_kn20aa.c
--- sys/arch/alpha/pci/pci_kn20aa.c 6 Jul 2004 20:47:34 -0000 1.1.1.2
+++ sys/arch/alpha/pci/pci_kn20aa.c 15 Jan 2006 22:35:59 -0000
@@ -257,7 +257,8 @@
  if (kn20aa_pci_intr[irq].intr_nstrays ==
     kn20aa_pci_intr[irq].intr_maxstrays)
  kn20aa_disable_intr(irq);
- }
+ } else
+ alpha_shared_intr_reset_strays(kn20aa_pci_intr, irq);
  return;
  }
 #if NSIO
Index: sys/arch/alpha/pci/sio_pic.c
===================================================================
RCS file: /pub/cvs/openbsd/src/sys/arch/alpha/pci/sio_pic.c,v
retrieving revision 1.1.1.2
diff -u -r1.1.1.2 sio_pic.c
--- sys/arch/alpha/pci/sio_pic.c 6 Jul 2004 20:47:35 -0000 1.1.1.2
+++ sys/arch/alpha/pci/sio_pic.c 15 Jan 2006 22:36:47 -0000
@@ -533,6 +533,8 @@
 
  if (!alpha_shared_intr_dispatch(sio_intr, irq))
  alpha_shared_intr_stray(sio_intr, irq, "isa irq");
+ else
+ alpha_shared_intr_reset_strays(sio_intr, irq);
 
  /*
  * Some versions of the machines which use the SIO


>Release-Note:
>Audit-Trail:
>Unformatted: