2001-07-30 15:55:59

by Chris Mason

[permalink] [raw]
Subject: BUG at smp.c:481, 2.4.8-pre2



Ok, During boot on 2.4.8-pre2 I'm getting this oops just as it starts to
probe my aic7890 card. Andrea is cc'd because I'm guessing it is due to
one of his patches ;-)

2 PIII cpus, 128MB ram on the box.

The oops is at line 481 on smp.c, call trace:

smp_call_function (BUG() is here, spin_unlock_bh())
ahc_reset_channel
flush_tlb_all
ahc_reset_channel
remap_area_pages
__ioremap
ahc_pci_map_registers
ahc_find_pci_device
pci_bios_set_master

-chris


2001-07-30 19:12:56

by Linus Torvalds

[permalink] [raw]
Subject: Re: BUG at smp.c:481, 2.4.8-pre2

In article <296370000.996508500@tiny> you write:
>
>Ok, During boot on 2.4.8-pre2 I'm getting this oops just as it starts to
>probe my aic7890 card. Andrea is cc'd because I'm guessing it is due to
>one of his patches ;-)

It's a sanity check, which I removed (because it's worse to panic in a
2.4.x kernel than it is to have the sanity problem). But the sanity
check does show that there is some problem in ahc_pci_map_registers():
it calls "ioremap()" with interrupts disabled, which is rather broken.

I don't know that driver well enough to understand why the heck it would
keep interrupts disabled over apparently a _long_ stretch of time during
probing. The irq disable code seems to be somewhere else..

Justin?

Linus

2001-07-30 19:29:24

by Justin T. Gibbs

[permalink] [raw]
Subject: Re: BUG at smp.c:481, 2.4.8-pre2

>In article <296370000.996508500@tiny> you write:
>>
>>Ok, During boot on 2.4.8-pre2 I'm getting this oops just as it starts to
>>probe my aic7890 card. Andrea is cc'd because I'm guessing it is due to
>>one of his patches ;-)
>
>It's a sanity check, which I removed (because it's worse to panic in a
>2.4.x kernel than it is to have the sanity problem). But the sanity
>check does show that there is some problem in ahc_pci_map_registers():
>it calls "ioremap()" with interrupts disabled, which is rather broken.
>
>I don't know that driver well enough to understand why the heck it would
>keep interrupts disabled over apparently a _long_ stretch of time during
>probing. The irq disable code seems to be somewhere else..
>
>Justin?

At least in 6.2.0, interrupts are not disabled at all during the probe.
In fact the driver doesn't explicitly disable interrupts ever other
than by way of taking a spinlock. No spinlocks are held during this
portion of the probe. Instead, we disable the interrupt line on the card,
and don't enable it until the probe is complete. I haven't yet checked in
6.1.13, but this hasn't changed in a long time. I'd be surprised if the
behavior is any different. Perhaps interrupts are disabled higher in
the food chain?

--
Justin

2001-07-31 01:16:24

by Keith Owens

[permalink] [raw]
Subject: Re: BUG at smp.c:481, 2.4.8-pre2

On Mon, 30 Jul 2001 10:33:08 -0700,
Linus Torvalds <[email protected]> wrote:
>In article <296370000.996508500@tiny> you write:
>>
>>Ok, During boot on 2.4.8-pre2 I'm getting this oops just as it starts to
>>probe my aic7890 card. Andrea is cc'd because I'm guessing it is due to
>>one of his patches ;-)
>
>It's a sanity check, which I removed (because it's worse to panic in a
>2.4.x kernel than it is to have the sanity problem). But the sanity
>check does show that there is some problem in ahc_pci_map_registers():
>it calls "ioremap()" with interrupts disabled, which is rather broken.

FYI, same problem with aic7xxx on 2.4.8-pre2. Sorry, Linus, it is using a
kernel debugger ;)

SCSI subsystem driver Revision: 1.00
scsi0 : AdvanSys SCSI 3.3G: PCI Ultra: IO 0x2000-0x200F, IRQ 0x13
Vendor: ARCHIVE Model: Python 25601-XXX Rev: 2.75
Type: Sequential-Access ANSI SCSI revision: 02
kernel BUG at smp.c:501!

Entering kdb (current=0xc1232000, pid 1) on processor 1 Oops: invalid operand
due to oops @ 0xc010eaba
eax = 0x00000019 ebx = 0x00000020 ecx = 0x00000001 edx = 0x00000001
esi = 0xc037fc28 edi = 0xc1233d5c esp = 0xc1233d44 eip = 0xc010eaba
ebp = 0xc1233d70 xss = 0x00000018 xcs = 0x00000010 eflags = 0x00010082
xds = 0x00000018 xes = 0x00000018 origeax = 0xffffffff &regs = 0xc1233d10
[1]kdb> bt
EBP EIP Function(args)
0xc1233d70 0xc010eaba smp_call_function+0xc6 (0xc010e8e8, 0x0, 0x1, 0x1)
kernel .text 0xc0100000 0xc010e9f4 0xc010eaec
0xc1233d8c 0xc010e94c flush_tlb_all+0x14
kernel .text 0xc0100000 0xc010e938 0xc010e998
0xc1233dcc 0xc0110b73 remap_area_pages+0x1e3 (0xc8c00000, 0xf4100000, 0x1000, 0x10)
kernel .text 0xc0100000 0xc0110990 0xc0110b80
0xc1233df8 0xc0110c4d __ioremap+0xcd (0xf4100000, 0x100, 0x10)
kernel .text 0xc0100000 0xc0110b80 0xc0110c74
0xc1233e28 0xc01cd9f4 ahc_pci_map_registers+0xbc (0xc7f71a00)
kernel .text 0xc0100000 0xc01cd938 0xc01cdb64
0xc1233e70 0xc01d9752 ahc_pci_config+0x42 (0xc7f71a00, 0xc032a2fc, 0xc7f9b000)
kernel .text 0xc0100000 0xc01d9710 0xc01d9bec
0xc1233ef4 0xc01cd8c8 ahc_linux_pci_dev_probe+0xe8 (0xc7f9b000, 0xc032879c)
kernel .text 0xc0100000 0xc01cd7e0 0xc01cd908
0xc1233f14 0xc01e85ae pci_announce_device+0x3e (0xc03287e0, 0xc7f9b000, 0x202)
kernel .text 0xc0100000 0xc01e8570 0xc01e85d4
0xc1233f30 0xc01e8617 pci_register_driver+0x43 (0xc03287e0)
kernel .text 0xc0100000 0xc01e85d4 0xc01e8634
0xc1233f40 0xc01cd916 ahc_linux_pci_probe+0xe (0xc0328700)
kernel .text 0xc0100000 0xc01cd908 0xc01cd938
0xc1233f58 0xc01ca64c ahc_linux_detect+0x1c (0xc0328700)
kernel .text 0xc0100000 0xc01ca630 0xc01ca694
0xc1233fa0 0xc01b833f scsi_register_host+0x5b (0xc0328700)
kernel .text 0xc0100000 0xc01b82e4 0xc01b85d8
0xc1233fb0 0xc01b8d4d scsi_register_module+0x29
kernel .text 0xc0100000 0xc01b8d24 0xc01b8d7c
0xc1233fc0 0xc0347079 AdvWaitEEPCmd+0x69
kernel .text.init 0xc0332000 0xc0347010 0xc03470a0
0xc1233fcc 0xc03329e9 do_initcalls+0xd
kernel .text.init 0xc0332000 0xc03329dc 0xc0332a00
0xc1233fd4 0xc0332a2e do_basic_setup+0x2e (0x10f00)
kernel .text.init 0xc0332000 0xc0332a00 0xc0332a40
0xc1233fec 0xc01050ae init+0x32
kernel .text 0xc0100000 0xc010507c 0xc0105230
0xc01055c7 kernel_thread+0x23
kernel .text 0xc0100000 0xc01055a4 0xc01055dc
[1]kdb>