Re: kernel crash after adding ethernet driver

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

 



On 5/2/07, Meher <mail2meher@xxxxxxxxx> wrote:
HI Pradeep,

On 5/1/07, pradeep singh <2500.pradeep@xxxxxxxxx> wrote:
> On 5/1/07, Meher <mail2meher@xxxxxxxxx> wrote:
> > Hi,
> >      I am working on a MIPS32 based system with Linux 2.6.10 on it
> > (yep.. it is old :( ). I am working on migrating to the new version. I
> > have a written an ethernet driver for a custom ethenet chip and I am
> > able to send and receive packets through the interface. When I set
> > kernel to Auto IP config I can also see that kernel gets an IP address
> > assigned. But after some time kernel crashes giving a message  ".BUG:
> > sleeping function called from invalid context events/0(4) at
> > arch/mips/math-emu/dsemul.c". This problem does not appear when I am
>
> Can you please recheck if you are not holding any spinlocks.Also check
> if you are not doing a memory allocation with spinlock held or in
> interrupt context.May be you are doing something like printk which may
> sleep IMO.Rechcek any methods you are calling which may sleep.
>

The only spin locks I am holding are the spin_lock_irqsave and
spin_unlock_irqrestore when I enter and leave the ISR. Also the only
memory allocation call I am making in my driver in interrupt context
is the dev_alloc_skb() which I believe can be called from interrupt
context(as it internally uses GFP_ATOMIC flag).

Can you post the code?
That will be great to figure out the problem in a better way i guess.

I am using printk's
but as per my understanding they should be safe.

Yes, they are safe. Sorry for the misunderstanding.

Thanks
~psr
Until I call
netif_rx(skb) in my interrupt handler I am making sure I am not making
any kernel calls.. any pointers on how to know which call is making
this crash if I am missing something...


> HTH
> Thanks
>
> ~psr
> > not using the ethernet driver (disable ethernet interface). I looked
> > at the RX/TX path and I am using Old API interface in the ethernet
> > driver. I am not calling any functions that can sleep.
> > Can anyone sugest me how to debug the problem? Please let me know if
> > you need more information.
> >
> > This is the kernel log:
> >
> > Booting...
> >
> > Launching kernel decompressor.
> >
> > Starting GZIP Uncompression Algorithm.
> >
> > Kernel decompressor was successful ... launching kernel.
> >
> >
> >
> > LINUX started...
> >
> > Entering start_kernel
> > Linux version 2.6.10_dev-malta-mips2_fp_len (meher@xxxxxxxxxxxxx) (gcc
> > version 3.4.3 ) #271 Mon Apr 30 16:13:53 CDT 2007
> > CPU revision is: 00018448
> > Determined physical RAM map:
> >  memory: 14001000 @ 00000000 (reserved)
> >  memory: 0001f000 @ 14001000 (ROM data)
> >  memory: 00243000 @ 14020000 (reserved)
> >  memory: 01d9d000 @ 14263000 (usable)
> > Built 1 zonelists
> > Kernel command line: console=ttyS0,9600n81 root=/dev/mtdblock0
> > rootfstype=jffs2 rw
> > Primary instruction cache 16kB, physically tagged, 4-way, linesize 16 bytes.
> > Primary data cache 8kB, 4-way, linesize 16 bytes.
> > Synthesized TLB refill handler (20 instructions).
> > Synthesized TLB load handler fastpath (32 instructions).
> > Synthesized TLB store handler fastpath (32 instructions).
> > Synthesized TLB modify handler fastpath (31 instructions).
> > PID hash table entries: 256 (order: 8, 4096 bytes)
> > CPU frequency 187.50 MHz
> > Using 93.750 MHz high precision timer.
> > Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)
> > Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)
> > Freeing Bootloader reserved memory [0x0001f000 @ 0x14001000]
> > Memory: 30080k/32768k available (1662k kernel code, 2644k reserved,
> > 438k data, 112k init)
> > Mount-cache hash table entries: 512 (order: 0, 4096 bytes)
> > Checking for 'wait' instruction...  available.
> > spawn_desched_task(00000000)
> > desched cpu_callback 3/00000000
> > ksoftirqd started up.
> > softirq RT prio: 24.
> > desched cpu_callback 2/00000000
> > desched thread 0 started up.
> > NET: Registered protocol family 16
> > Can't analyze prologue code at 941bd670
> > EFS: 1.0a - http://aeschi.ch.eu.org/efs/
> > JFFS2 version 2.2. (C) 2001-2003 Red Hat, Inc.
> > Generic RTC Driver v1.07
> > Serial: 8250/16550 driver $Revision: 1.90 $ 5 ports, IRQ sharing disabled
> > ttyS0 at MMIO 0x0 (irq = 15) is a 16550A
> > io scheduler noop registered
> > loop: loaded (max 8 devices)
> > Currently in Ceswitch_Probe
> > Platform device register completed
> > Driver register completed
> > Alloc Netdev completed
> > In ceswitch_dev_init
> > Out ceswitch_dev_init
> > In eswitch_dev_get_net_stats
> > CESWITCH:Installed ceswitch
> > elevator: using noop as default io scheduler
> > avalanche flash device: 0x1000000 at 0x10000000.
> > Primary flash device: Found 1 x16 devices at 0x0 in 16-bit bank
> >  Amd/Fujitsu Extended Query Table at 0x0040
> > Primary flash device: CFI does not contain boot bank location. Assuming top.
> > number of CFI chips: 1
> > cfi_cmdset_0002: Disabling erase-suspend-program due to code brokenness.
> > Looking for mtd device :mtd0:
> > flash_base and flash_end for mtd0 are: 90120000,90320000
> > Found a mtd0 image (0x120000), with size (0x200000).
> > Creating 1 MTD partitions on "Primary flash device":
> > 0x00120000-0x00320000 : "mtd0"
> > Looking for mtd device :mtd1:
> > flash_base and flash_end for mtd1 are: 90020000,90120000
> > Found a mtd1 image (0x20000), with size (0x100000).
> > Creating 1 MTD partitions on "Primary flash device":
> > 0x00020000-0x00120000 : "mtd1"
> > Looking for mtd device :mtd2:
> > flash_base and flash_end for mtd2 are: 90000000,90020000
> > Found a mtd2 image (0x0), with size (0x20000).
> > Creating 1 MTD partitions on "Primary flash device":
> > 0x00000000-0x00020000 : "mtd2"
> > Number of partitions detected: 3
> > mice: PS/2 mouse device common for all mice
> > NET: Registered protocol family 2
> > IP: routing cache hash table of 512 buckets, 4Kbytes
> > TCP: Hash tables configured (established 2048 bind 4096)
> > ********* In eswitch_open ***********
> > Calling initPhyReset
> > initPhyReset::Bringing DSP Out of Reset
> > initPhyReset::Bringing ESWITCH Out of Reset
> > initPhyReset::Reset the PHY
> > DSP CLock PLL Value is 0x427e
> > phyGetState[0]: link = 0, speed = 0, duplex = 0
> > phyGetState[1]: link = 0, speed = 0, duplex = 0
> > GIG PHYs detected, PHYID = 0x143bcb1
> > phyConfigurePort[0]: 0x00000100
> > Phy[0]: 0x00000100
> > phyConfigurePort[1]: 0x00000100
> > Phy[1]: 0x00000100
> > cesw0: Successfully installed IRQ: 41
> > eswitch_open::Checking for PhyStatechange for port : 0
> > phyState hasn't changed checking again for 1 th time
> > LINKCHANGE: PHY[0]: Link= 0000 --> 0001
> > LINKCHANGE: PHY[0]: Speed= 0000 --> 0020
> > LINKCHANGE: PHY[0]: Duplex= 0000 --> 0001
> > PHY[0] changed calling pswitchPortCfgChange(0)
> > phyGetState[0]: link = 1, speed = 32, duplex = 1
> > pswitch: MAC[0].speed = 100
> > pswitch: MAC[0].duplex = H
> >
> > Kalyan::eswitch_open::Checking for PhyStatechange for port : 1
> > phyState hasn't changed checking again for 1 th time
> > Kalyan:: In eswitch_dev_get_net_stats
> > Kalyan:: In eswitch_dev_get_net_stats
> > Sending DHCP requests .In eswitch_dev_tx now.. calling pswitchSend
> > In pswitchSend..
> >
> > pswitchSend::It is broadcast packet: 255
> >
> > In pswitchSend..
> > pswitchSend:: dest = 0xffffffffffff
> >
> > pswitchSend::It is broadcast packet: 255
> >
> >  OK
> > IP-Config: Got DHCP answer from 0.0.0.0, my address is 10.XX.X.XXX
> > IP-Config: Complete:
> >       device=cesw0, addr=10.13.8.116, mask=255.255.255.240, gw=10.XX.X.XXX,
> >      host=10.XX.X.XXX, domain=cisco.com, nis-domain=(none),
> >      bootserver=0.0.0.0, rootserver=0.0.0.0, rootpath=
> > VFS: Mounted root (jffs2 filesystem).
> > Freeing unused kernel memory: 112k freed
> > Running /bin/sh
> > Algorithmics/MIPS FPU Emulator v1.5
> >
> >
> >
> > BusyBox v1.00 (2007.02.05-19:57+0000) Built-in shell (ash)
> >
> > Enter 'help' for a list of built-in commands.
> >
> >
> > # ping
> >
> > BusyBox v1.00 (2007.02.05-19:57+0000) multi-call binary
> >
> >
> >
> > Usage: ping [OPTION]... host
> >
> >
> >
> > # BUG: sleeping function called from invalid context events/0(4) at
> > arch/mips/math-emu/dsemul.c
> >
> > :140
> > in_atomic():1 [00000001], irqs_disabled():1
> > Call Trace:
> >  [<94043314>] __might_sleep+0x104/0x11c
> >  [<94043008>] do_dsemulret+0x58/0x160
> >  [<94043970>] task_rq_lock+0x38/0x54
> >  [<9402db70>] do_ade+0x20/0x380
> >  [<94027760>] handle_adel_int+0x38/0x58
> >  [<9407c980>] drain_array_locked+0x78/0xd4
> >  [<9407c808>] free_block+0x8c/0x18c
> >  [<94246000>] ip_auto_config+0xa54/0x1184
> >  [<9407c980>] drain_array_locked+0x78/0xd4
> >  [<94246000>] ip_auto_config+0xa54/0x1184
> >  [<9407dc10>] cache_reap+0xb4/0x320
> >  [<941170d8>] flush_to_ldisc+0x0/0x1a0
> >  [<941bc358>] schedule+0x58/0x158
> >  [<9407db5c>] cache_reap+0x0/0x320
> >  [<94060120>] worker_thread+0x254/0x384
> >  [<941bba24>] __schedule+0x14c/0x980
> >  [<940447e4>] default_wake_function+0x0/0x28
> >  [<9405fecc>] worker_thread+0x0/0x384
> >  [<9405fecc>] worker_thread+0x0/0x384
> >  [<940668fc>] kthread+0x124/0x168
> >  [<94028afc>] kernel_thread_helper+0x10/0x18
> >  [<94028aec>] kernel_thread_helper+0x0/0x18
> >
> >
> > Unhandled kernel unaligned access in
> > arch/mips/kernel/unaligned.c::emulate_load_store_insn, line 475
> >
> > [#1]:
> > Cpu 0
> > $ 0   : 00000000 1000fc00 9466d400 94266000
> > $ 4   : b43a0ba0 942d4320 ffffffff 00000001
> > $ 8   : 00000002 942fa1a4 00000000 942492b0
> > $12   : 00000000 fffffffb ffffffff 0000000a
> > $16   : 942d4320 942bda60 942bda6c 00000000
> > $20   : 00000001 ffd80000 80000000 94250000
> > $24   : 00000000 9400de18
> > $28   : 94016000 94017e70 00200200 9407c980
> > Hi    : 00000010
> > Lo    : 00000004
> > epc   : 9407c808 free_block+0x8c/0x18c     Not tainted
> > ra    : 9407c980 drain_array_locked+0x78/0xd4
> > Status: 1000fc02    KERNEL EXL
> > Cause : 30800010
> > BadVA : 00000003
> > PrId  : 00018448
> > Modules linked in:
> > Process events/0 (pid: 4, threadinfo=94016000, task=9401c8e0)
> > Stack : 941efa5c 00000000 942ebbe0 942ebbe0 942bda7c 94246000 942d4310 00000001
> >         942d4320 942bdad0 942bd97c 94250000 00200200 00100100 94250000 9407c980
> >         1000fc00 94004f28 94246000 942ebbe0 942bd97c 942bda60 00000001 9407dc10
> >         941170d8 94004f10 94004f18 94004f20 94017ee8 941bc358 94253e24 94253e28
> >         1000fc01 00000000 9407db5c 94004f10 94004f18 94004f20 94004f28 94060120
> >         ...
> > Call Trace:
> >  [<94246000>] ip_auto_config+0xa54/0x1184
> >  [<9407c980>] drain_array_locked+0x78/0xd4
> >  [<94246000>] ip_auto_config+0xa54/0x1184
> >  [<9407dc10>] cache_reap+0xb4/0x320
> >  [<941170d8>] flush_to_ldisc+0x0/0x1a0
> >  [<941bc358>] schedule+0x58/0x158
> >  [<9407db5c>] cache_reap+0x0/0x320
> >  [<94060120>] worker_thread+0x254/0x384
> >  [<941bba24>] __schedule+0x14c/0x980
> >  [<940447e4>] default_wake_function+0x0/0x28
> >  [<9405fecc>] worker_thread+0x0/0x384
> >  [<9405fecc>] worker_thread+0x0/0x384
> >  [<940668fc>] kthread+0x124/0x168
> >  [<94028afc>] kernel_thread_helper+0x10/0x18
> >  [<94028aec>] kernel_thread_helper+0x0/0x18
> >
> >
> >
> >
> > Code: 00431021  00551021  8c46001c <8cc30004> 8cc20000  ac620000
> > ac430004  3c020010  34420100
> > note: events/0[4] exited with preempt_count 1
> > BUG: scheduling while atomic: events/0/0x00000001/4
> > caller is do_exit+0xbc8/0xf4c
> > Call Trace:
> >  [<9404d208>] do_exit+0xbc8/0xf4c
> >  [<941bbfcc>] __schedule+0x6f4/0x980
> >  [<941bbfc4>] __schedule+0x6ec/0x980
> >  [<9404d208>] do_exit+0xbc8/0xf4c
> >  [<9402ce78>] __die_if_kernel+0x0/0x90
> >  [<9402ceec>] __die_if_kernel+0x74/0x90
> >  [<9402ced0>] __die_if_kernel+0x58/0x90
> >  [<940621dc>] search_exception_tables+0x4c/0x5c
> >  [<940311f4>] fixup_exception+0x24/0x60
> >  [<9407c808>] free_block+0x8c/0x18c
> >  [<9402dea8>] do_ade+0x358/0x380
> >  [<9402de7c>] do_ade+0x32c/0x380
> >  [<94027760>] handle_adel_int+0x38/0x58
> >  [<9407c980>] drain_array_locked+0x78/0xd4
> >  [<9407c808>] free_block+0x8c/0x18c
> >  [<94246000>] ip_auto_config+0xa54/0x1184
> >  [<9407c980>] drain_array_locked+0x78/0xd4
> >  [<94246000>] ip_auto_config+0xa54/0x1184
> >  [<9407dc10>] cache_reap+0xb4/0x320
> >  [<941170d8>] flush_to_ldisc+0x0/0x1a0
> >  [<941bc358>] schedule+0x58/0x158
> >  [<9407db5c>] cache_reap+0x0/0x320
> >  [<94060120>] worker_thread+0x254/0x384
> >  [<941bba24>] __schedule+0x14c/0x980
> >  [<940447e4>] default_wake_function+0x0/0x28
> >  [<9405fecc>] worker_thread+0x0/0x384
> >  [<9405fecc>] worker_thread+0x0/0x384
> >  [<940668fc>] kthread+0x124/0x168
> >  [<94028afc>] kernel_thread_helper+0x10/0x18
> >  [<94028aec>] kernel_thread_helper+0x0/0x18
> >
> >
> > --
> > Regards,
> > Meher
> >
> > --
> > To unsubscribe from this list: send an email with
> > "unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx
> > Please read the FAQ at http://kernelnewbies.org/FAQ
> >
> >
>
>
> --
> play the game
>


--
Regards,
Meher



--
play the game

--
To unsubscribe from this list: send an email with
"unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx
Please read the FAQ at http://kernelnewbies.org/FAQ


[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux