I have been bitten by a possible bug in hc_crisv10.c, which is in the linux
kernel distribution that comes with the Axis Devboard 83+.  It's based on
the 2.6.11 kernel. (note that it's build under the cris compiler).

The ksymoops output is pasted below.

I am seeking some guidance as to where I should go from here (please don't
say "go to USB hell" as I am already there).  

I've spoken to Axis, and they say that perhaps a patch has been posted for
the linux usb driver, but I cannot locate one.  Also, since the driver may
be modified by Axis, applying a fix might break something else.  I am
somewhat on my own, as Axis may not be able to look at this for some time.

Reading the debug output did not give me much of a clue as to what happened,
other than it appears that an interrupt was not properly handled.

Note that the Axis eth1 port is driven via the usb driver and that this
error occurs when the commandline: "ifconfig eth1 hw ether 00408c63abc6" is
issued to set the MAC address.  This kernel crash can be easily reproduced.

Thanks to all for your suggestions and guidance.

Mark Richards
SolarWave
Boston



ksymoops-cris oops_file.txt
ksymoops 2.4.11 on i686 2.6.10-1.741_FC3.  Options used
     -v os/linux/vmlinux (specified)
     -K (specified)
     -L (specified)
     -O (specified)
     -m os/linux/System.map (specified)
     -t cris -a cris

/usr/bin/nm: os/linux/vmlinux: Invalid bfd target Error (pclose_local):
read_nm_symbols pclose failed 0x100 Warning (read_vmlinux): no kernel
symbols in vmlinux, is os/linux/vmlinux a valid vmlinux file?
<1>Unable to handle kernel NULL pointer dereference at virtual address
00000000
         IRP: c00cb428 SRP: c001ef20 DCCR: 00000400 USP: 9ffffe38 MOF:
000000fc
r0: c03c84a0  r1: 00000000   r2: c0175f84  r3: 0000001f
                                                        r4: 00000224  r5:
b00002
                                r8: c0175f30  r9: b0002000  r10: 0000001f
r11: c Warning (Oops_set_regs): garbage 'r11: c' at end of register line
ignored 0319380
       r12: c0175f84 r13: c0150028 oR10: 0000001f
                                  Stack from 9ffffe38:
                                                             000c81e0
000c81e0 3
564a3c8 31687465 00000000 00000000 00000000 40000001
                                                            fe116e8c
000854bc 00
000005 0008559e 00000005 00083a48 35567388 9ffffeb4
                                                           00000005 000852ea
357
0a838 3565ac3e 00000000 00000000 00000000 00000000
                                                   Call Trace:
                                                               Stack from
c0175d
          c0005bfa c0175eb4 c00042fa c0175de4 c000591e c0319380 000000fc
c0175eb
         c015cd40 00000000 0000100b c0175eb4 c0175df0 c00059da 00000000
c0175e94
        c00050fc 00002000 b0000207 00000224 00000000 c1996000 0000100b
00000000 Call Trace: [<c0005bfa>] [<c00042fa>] [<c000591e>] [<c00059da>]
[<c00050fc>] [<c
001ef20>] [<c00096b0>]
                              [<c000571e>] [<c001ef20>] [<c00cb428>]
[<c001ef20>
                                                             [<c00041f0>]
Warning (Oops_read): Code line not seen, dumping what data is available


>>PC;  c00cb428 <etrax_usb_hc_interrupt_top_half+32/ce>   <=====

>>IRP; c00cb428 <etrax_usb_hc_interrupt_top_half+32/ce>
>>SRP; c001ef20 <handle_IRQ_event+2c/56> IRP; c00cb428 
>><etrax_usb_hc_interrupt_top_half+32/ce>
>>SRP; c001ef20 <handle_IRQ_event+2c/56> r0; c03c84a0 
>><_end+18cfc0/1dc4b20> r2; c0175f84 <init_thread_union+1f84/2000> r8; 
>>c0175f30 <init_thread_union+1f30/2000> r12; c0175f84 
>><init_thread_union+1f84/2000> r13; c0150028 <__func__.4+ee60/1aaf1>

Trace; c0005bfa <raw_printk+0/7e>
Trace; c00042fa <show_stack+0/a6>
Trace; c000591e <show_registers+e2/15c>
Trace; c00059da <die_if_kernel+32/42>
Trace; c00050fc <do_page_fault+1ec/2ac>


3 warnings and 1 error issued.  Results may not be reliable.
Decoding
objdump-cris: oops.code: no symbols

oops.code:     file format binary

Disassembly of section .data:

Disassembly of os/linux/vmlinux
PC = 0xc00cb428
Ooops in function c00cb3f6 t etrax_usb_hc_interrupt_top_half

os/linux/vmlinux:     file format elf32-cris

Disassembly of section .text:

c00cb3f6 <etrax_usb_hc_interrupt_top_half>:
etrax_usb_hc_interrupt_top_half():
/home/dev/axis-r2/devboard-R2_00/os/linux-2.6/drivers/usb/host/hc_crisv10.c:
3273



static irqreturn_t etrax_usb_hc_interrupt_top_half(int irq, void *vhc,
struct pt_regs *regs) {
c00cb3f6:       fce1 7ebe               push $srp
c00cb3fa:       fce1 ee8f               push $r8
c00cb3fe:       6e86                    move.d $sp,$r8
c00cb400:       a0e2                    subq 32,$sp
c00cb402:       fe7b                    movem $r7,[$sp]
c00cb404:       6b76                    move.d $r11,$r7
/home/dev/axis-r2/devboard-R2_00/os/linux-2.6/drivers/usb/host/hc_crisv10.c:
3286
        usb_interrupt_registers_t *reg;
        unsigned long flags;
        __u32 irq_mask;
        __u8 status;
        __u32 epid_attn;
        __u16 port_status_1;
        __u16 port_status_2;
        __u32 fm_number;

        DBFENTER;

        /* Read critical registers into local variables, do kmalloc
afterwards. */
        local_irq_save(flags);
c00cb406:       7d56                    move $ccr,$r13
c00cb408:       f025                    di
/home/dev/axis-r2/devboard-R2_00/os/linux-2.6/drivers/usb/host/hc_crisv10.c:
3288

        irq_mask = *R_USB_IRQ_MASK_READ;
c00cb40a:       6f9e 0402 00b0          move.d b0000204
<dram_start-0xffffdfc>,$r9
c00cb410:       599a                    move.w [$r9],$r9
c00cb412:       5964                    movu.w $r9,$r6
/home/dev/axis-r2/devboard-R2_00/os/linux-2.6/drivers/usb/host/hc_crisv10.c:
3292
        /* Reading R_USB_STATUS clears the ctl_status interrupt. Note that
R_USB_STATUS
           must be read before R_USB_EPID_ATTN since reading the latter
clears the
           ourun and perror fields of R_USB_STATUS. */
        status = *R_USB_STATUS;
c00cb414:       6f5e 0202 00b0          move.d b0000202
<dram_start-0xffffdfe>,$r5
c00cb41a:       455a                    move.b [$r5],$r5
/home/dev/axis-r2/devboard-R2_00/os/linux-2.6/drivers/usb/host/hc_crisv10.c:
3295

        /* Reading R_USB_EPID_ATTN clears the iso_eof, bulk_eot and
epid_attn interrupts. */
        epid_attn = *R_USB_EPID_ATTN;
c00cb41c:       6f4e 2402 00b0          move.d b0000224
<dram_start-0xffffddc>,$r4
c00cb422:       644a                    move.d [$r4],$r4
/home/dev/axis-r2/devboard-R2_00/os/linux-2.6/drivers/usb/host/hc_crisv10.c:
3299

        /* Reading R_USB_RH_PORT_STATUS_1 and R_USB_RH_PORT_STATUS_2 clears
the
           port_status interrupt. */
        port_status_1 = *R_USB_RH_PORT_STATUS_1;
c00cb424:       6f3e 1802 00b0          move.d b0000218
<dram_start-0xffffde8>,$r3
Disassembly of section .exit.text:
Disassembly of section .init.text:
#### OOPS ####
c00cb428:       00b0                    blt c00cb42a
<etrax_usb_hc_interrupt_top_half+0x34>
c00cb42a:       533a                    move.w [$r3],$r3
c00cb42c:       6f2e 1a02 00b0          move.d b000021a
<dram_start-0xffffde6>,$r2
c00cb432:       522a                    move.w [$r2],$r2
c00cb434:       6f1e 0c02 00b0          move.d b000020c
<dram_start-0xffffdf4>,$r1
[EMAIL PROTECTED] devboard-R2_00]#





-------------------------------------------------------
This SF.Net email is sponsored by: NEC IT Guy Games.  How far can you shotput
a projector? How fast can you ride your desk chair down the office luge track?
If you want to score the big prize, get to know the little guy.  
Play to win an NEC 61" plasma display: http://www.necitguy.com/?r=20
_______________________________________________
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to