[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

PCMCIA and interrupts?



Hello.

I recently installed Slink on a 5-year old laptop that had remained
unused for some time. This was never a top-of-the-line model, and the
hardware at this point might not be the most trustworthy. 
Nevertheless, the installation went smoothly. I compiled a custom
kernel (2.0.36), and that went smoothly as well. Everything 
seems fine, judging both by the machine's behaviour and by what gets
written to the log files.

Problems arose only when I decided to install the Pcmcia Card Manager
Packages, so that I could use my fax-modem card to connect to the
net. (I had done the install from floppies, and then by way of a PLIP
connection to my desktop machine, using a CD mounted there as the
archive). Then I entered a little private hell.

I installed the pcmcia-cs package and the pcmcia-modules package from
Slink. But the pcmcia-modules package is designed to work with the
stock 2.0.36 kernel, and since I had compiled a custom-kernel, it
didn't work. I read the FAQ in /usr/doc/, got the pcmcia-source
package, and recompiled the modules from source. Everything seemed to
go smoothly---I could install the modules and start the cardmanager
with no complaints about unresolved symbols. Insertion and removal of
cards was detected (double beep), and the card was successfully
recognized as a serial modem.

But when I try to actually use the modules---disaster. Trying to make
the modem dial (PPP or Minicom), or trying to use setserial to
configure /dev/ttyS1, produces a segmentation fault and a
kernel-oops. Here's a typical entry from syslog:

------------------------------------------------------------
Jul 16 19:45:11 lapdog cardmgr[107]: executing: './serial start ttyS1'
Jul 16 19:45:15 lapdog /usr/sbin/cron[134]: (CRON) STARTUP (fork ok) 
Jul 16 19:47:16 lapdog kernel: Unable to handle kernel NULL pointer dereference at virtual address c0000000 
Jul 16 19:47:16 lapdog kernel: current->tss.cr3 = 00101000, %cr3 = 00101000 
Jul 16 19:47:16 lapdog kernel: *pde = 00102067 
Jul 16 19:47:16 lapdog kernel: *pte = 00000000 
Jul 16 19:47:16 lapdog kernel: Oops: 0000 
Jul 16 19:47:16 lapdog kernel: CPU:    0 
Jul 16 19:47:16 lapdog kernel: EIP:    0010:[<00000000>] 
Jul 16 19:47:16 lapdog kernel: EFLAGS: 00010206 
Jul 16 19:47:16 lapdog kernel: eax: 00000000   ebx: 00000004   ecx: 00000064   edx: 00000009 
Jul 16 19:47:16 lapdog kernel: esi: 001bd6e0   edi: 00000001   ebp: 0019d5b0   esp: 0019d598 
Jul 16 19:47:16 lapdog kernel: ds: 0018   es: 0018   fs: 002b   gs: 0018   ss: 0018 
Jul 16 19:47:16 lapdog kernel: Process swapper (pid: 0, process nr: 0, stackpage=0019b678) 
Jul 16 19:47:16 lapdog kernel: Stack: 00113688 00000001 ffffffff 00000001 00000001 0019d5cc 001bd5d0 00119afb  
Jul 16 19:47:16 lapdog kernel:        0019d5cc 0019d654 00000000 00009000 0010ab0b 00005c85 00000013 0019de2c  
Jul 16 19:47:16 lapdog kerneld: error: exit: Identifier removed
Jul 16 19:47:16 lapdog kernel:        0019d654 00000000 00009000 00000000 00a90018 00190018 0000002b ffff0018  
Jul 16 19:47:16 lapdog kernel: Call Trace: [timer_bh+248/864] [do_bottom_half+59/112] [handle_bottom_half+11/24] [sys_idle+108/128] [system_call+85/124] [init+0/624] [save_cur+152/272]  
Jul 16 19:47:16 lapdog kernel:        [start_kernel+429/448] [it_real_fn+0/80]  
Jul 16 19:47:16 lapdog kernel: Code: <1>Unable to handle kernel NULL pointer dereference at virtual address c0000000 
Jul 16 19:47:16 lapdog kernel: current->tss.cr3 = 00101000, %cr3 = 00101000 
Jul 16 19:47:16 lapdog kernel: *pde = 00102067 
Jul 16 19:47:16 lapdog kernel: *pte = 00000000 
Jul 16 19:47:16 lapdog kernel: Oops: 0000 
Jul 16 19:47:16 lapdog kernel: CPU:    0 
Jul 16 19:47:16 lapdog kernel: EIP:    0010:[die_if_kernel+652/736] 
Jul 16 19:47:16 lapdog kernel: EFLAGS: 00010202 
Jul 16 19:47:16 lapdog kernel: eax: 00000010   ebx: 00000100   ecx: 00000000   edx: 00367c0c 
Jul 16 19:47:16 lapdog kernel: esi: 00000000   edi: 0019e000   ebp: 0019d55c   esp: 0019d500 
Jul 16 19:47:16 lapdog kernel: ds: 0018   es: 0018   fs: 0010   gs: 0018   ss: 0018 
Jul 16 19:47:16 lapdog kernel: Process swapper (pid: 0, process nr: 0, stackpage=0019b678) 
Jul 16 19:47:16 lapdog kernel: Stack: 0018002b 00000000 00000000 0019d55c 0019de2c 01400000 01800000 01000000  
Jul 16 19:47:16 lapdog kernel:        00190018 0011260e 0018e798 0019d55c 00190000 00112310 001bd6e0 00000001  
Jul 16 19:47:16 lapdog kernel:        0019d5b0 00000002 0019ddc8 0000001c 0010acdc 0019d55c 00190000 00000004  
Jul 16 19:47:16 lapdog kernel: Call Trace: [save_cur+171/272] [<01400000>] [<01800000>] [serial:register_serial_R3425f38c+-56452/324] [do_page_fault+766/800] [do_page_fault+0/800] [error_code+64/72]  
Jul 16 19:47:16 lapdog kernel:        [timer_bh+248/864] [do_bottom_half+59/112] [handle_bottom_half+11/24] [sys_idle+108/128] [system_call+85/124] [init+0/624] [save_cur+152/272] [start_kernel+429/448]  
Jul 16 19:47:16 lapdog kernel:        [it_real_fn+0/80]  
Jul 16 19:47:16 lapdog kernel: Code: 64 8a 04 0e 0f a1 88 c2 81 e2 ff 00 00 00 89 54 24 10 52 68  
Jul 16 19:47:16 lapdog kernel: Aiee, killing interrupt handler 
Jul 16 19:47:16 lapdog kernel: kfree of non-kmalloced memory: 0019d6c0, next= 00000000, order=0 
Jul 16 19:47:16 lapdog kernel: kfree of non-kmalloced memory: 0019d6b0, next= 00000000, order=0 
Jul 16 19:47:16 lapdog kernel: kfree of non-kmalloced memory: 0019dbc4, next= 00000000, order=0 
Jul 16 19:47:16 lapdog kernel: idle task may not sleep 
Jul 16 19:47:16 lapdog last message repeated 4 times

----------------------------------------------------------------------

What is common to all these events is:

   kernel: Aiee, killing interrupt handler

which made me think that the source of the problem was an IRQ-conflict
(a common source of problems according to the PCMCIA-HOWTO).  I tried
over a couple of days and in different ways to assign different IRQ's
to /dev/ttyS1 but with no effect so far (by which I mean that even if
setserial reveals that a different IRQ has been assigned, the problem
persists). If I don't intervene, ttyS1 is assigned IRQ 3; I can't tell
for sure if that IRQ is assigned to any other device.

I've always found the business of understanding and managing IRQ
assignments completely obscure. I know about /proc/interrupts, but
that's really not much use as a source of information about *all* the
IRQ's assigned in a given system.

If anyone has any advice or pointers to offer, I'd be very grateful
indeed. 

Jim


Reply to: