linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* 2.5.69+bk: "sleeping function called from illegal context" on card release while shutting down
@ 2003-05-13 13:57 Alex Riesen
  2003-05-13 14:58 ` Felipe Alfaro Solana
  0 siblings, 1 reply; 9+ messages in thread
From: Alex Riesen @ 2003-05-13 13:57 UTC (permalink / raw)
  To: David Hinds; +Cc: linux-kernel

Hi!

Just tried to eject the card while the system was shutting down.

-alex

$ lsmod
Module                  Size  Used by
pcnet_cs               16100  1
8390                    8384  1 pcnet_cs
crc32                   3744  1 8390
ds                     11616  3 pcnet_cs
yenta_socket           14240  2
pcmcia_core            53888  3 pcnet_cs,ds,yenta_socket
soundcore               6560  0

$ lspci |grep CardBus
00:11.0 CardBus bridge: Texas Instruments PCI1131 (rev 01)
00:11.1 CardBus bridge: Texas Instruments PCI1131 (rev 01)

$ grep PCMCIA .config
# Bus options (PCI, PCMCIA, EISA, MCA, ISA)
# PCMCIA/CardBus support
CONFIG_PCMCIA=m
CONFIG_PCMCIA_PROBE=y
# CONFIG_PARPORT_PC_PCMCIA is not set
# PCMCIA SCSI adapter support
# CONFIG_PCMCIA_AHA152X is not set
# CONFIG_PCMCIA_FDOMAIN is not set
# CONFIG_PCMCIA_NINJA_SCSI is not set
# CONFIG_PCMCIA_QLOGIC is not set
# PCMCIA network device support
CONFIG_NET_PCMCIA=y
CONFIG_PCMCIA_3C589=m
CONFIG_PCMCIA_3C574=m
CONFIG_PCMCIA_FMVJ18X=m
CONFIG_PCMCIA_PCNET=m
CONFIG_PCMCIA_NMCLAN=m
CONFIG_PCMCIA_SMC91C92=m
CONFIG_PCMCIA_XIRC2PS=m
# CONFIG_PCMCIA_AXNET is not set
# PCMCIA character devices


Hw. address read/write mismap 0
Hw. address read/write mismap 1
Hw. address read/write mismap 2
Hw. address read/write mismap 3
Hw. address read/write mismap 4
Hw. address read/write mismap 5
Debug: sleeping function called from illegal context at include/asm/semaphore.h:119
Call Trace:
 [<c0118bc8>] __might_sleep+0x58/0x70
 [<c6a31eb6>] +0x82/0x58c [pcmcia_core]
 [<c6a2d193>] undo_irq+0x23/0x90 [pcmcia_core]
 [<c6a31eb6>] +0x82/0x58c [pcmcia_core]
 [<c6a302f8>] pcmcia_release_irq+0xb8/0xe0 [pcmcia_core]
 [<c6a25e00>] pcnet_release+0x0/0x80 [pcnet_cs]
 [<c6a312d5>] CardServices+0x155/0x260 [pcmcia_core]
 [<c6a312c9>] CardServices+0x149/0x260 [pcmcia_core]
 [<c6a25e56>] pcnet_release+0x56/0x80 [pcnet_cs]
 [<c01224a4>] run_timer_softirq+0xc4/0x1a0
 [<c010a8b3>] handle_IRQ_event+0x33/0xf0
 [<c011e889>] do_softirq+0xa9/0xb0
 [<c010abb5>] do_IRQ+0x125/0x150
 [<c01093a8>] common_interrupt+0x18/0x20
 [<c01a3dba>] strnlen_user+0x1a/0x40
 [<c016fd42>] create_elf_tables+0x2d2/0x360
 [<c01706cd>] load_elf_binary+0x4cd/0xba0
 [<c0134379>] buffered_rmqueue+0xc9/0x160
 [<c0170200>] load_elf_binary+0x0/0xba0
 [<c015639b>] search_binary_handler+0xcb/0x2d0
 [<c01566f9>] do_execve+0x159/0x1a0
 [<c0157d28>] getname+0x78/0xc0
 [<c0107a46>] sys_execve+0x36/0x70
 [<c0109187>] syscall_call+0x7/0xb


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: 2.5.69+bk: "sleeping function called from illegal context" on card release while shutting down
  2003-05-13 13:57 2.5.69+bk: "sleeping function called from illegal context" on card release while shutting down Alex Riesen
@ 2003-05-13 14:58 ` Felipe Alfaro Solana
  2003-05-13 15:31   ` Paul Fulghum
  0 siblings, 1 reply; 9+ messages in thread
From: Felipe Alfaro Solana @ 2003-05-13 14:58 UTC (permalink / raw)
  To: alexander.riesen; +Cc: David Hinds, LKML

On Tue, 2003-05-13 at 15:57, Alex Riesen wrote:
> Just tried to eject the card while the system was shutting down.
> 
> Debug: sleeping function called from illegal context at include/asm/semaphore.h:119
> Call Trace:
>  [<c0118bc8>] __might_sleep+0x58/0x70
>  [<c6a31eb6>] +0x82/0x58c [pcmcia_core]
>  [<c6a2d193>] undo_irq+0x23/0x90 [pcmcia_core]
>  [<c6a31eb6>] +0x82/0x58c [pcmcia_core]
>  [<c6a302f8>] pcmcia_release_irq+0xb8/0xe0 [pcmcia_core]
>  [<c6a25e00>] pcnet_release+0x0/0x80 [pcnet_cs]
>  [<c6a312d5>] CardServices+0x155/0x260 [pcmcia_core]
>  [<c6a312c9>] CardServices+0x149/0x260 [pcmcia_core]
>  [<c6a25e56>] pcnet_release+0x56/0x80 [pcnet_cs]
>  [<c01224a4>] run_timer_softirq+0xc4/0x1a0
>  [<c010a8b3>] handle_IRQ_event+0x33/0xf0
>  [<c011e889>] do_softirq+0xa9/0xb0
>  [<c010abb5>] do_IRQ+0x125/0x150
>  [<c01093a8>] common_interrupt+0x18/0x20
>  [<c01a3dba>] strnlen_user+0x1a/0x40
>  [<c016fd42>] create_elf_tables+0x2d2/0x360
>  [<c01706cd>] load_elf_binary+0x4cd/0xba0
>  [<c0134379>] buffered_rmqueue+0xc9/0x160
>  [<c0170200>] load_elf_binary+0x0/0xba0
>  [<c015639b>] search_binary_handler+0xcb/0x2d0
>  [<c01566f9>] do_execve+0x159/0x1a0
>  [<c0157d28>] getname+0x78/0xc0
>  [<c0107a46>] sys_execve+0x36/0x70
>  [<c0109187>] syscall_call+0x7/0xb

Don't know if this is fixed by latest Russell patches, but vanilla and
-bk snapshots do *not* contain the latest PCMCIA/CardBus code. Is it
possible for you to try 2.5.69-mm4?

Thanks!



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: 2.5.69+bk: "sleeping function called from illegal context" on card release while shutting down
  2003-05-13 14:58 ` Felipe Alfaro Solana
@ 2003-05-13 15:31   ` Paul Fulghum
  2003-05-13 16:08     ` Russell King
                       ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Paul Fulghum @ 2003-05-13 15:31 UTC (permalink / raw)
  To: Felipe Alfaro Solana; +Cc: alexander.riesen, LKML

On Tue, 2003-05-13 at 09:58, Felipe Alfaro Solana wrote:
> On Tue, 2003-05-13 at 15:57, Alex Riesen wrote:
> > Just tried to eject the card while the system was shutting down.

> Don't know if this is fixed by latest Russell patches, but vanilla and
> -bk snapshots do *not* contain the latest PCMCIA/CardBus code. Is it
> possible for you to try 2.5.69-mm4?

Russell's patches do not address this.

Individual PCMCIA drivers need to be updated to call
thier release function directly when processing a
CARD_RELEASE message instead of from a timer procedure.

Similar to this patch for synclink_cs.c:

diff -u -4 -r4.9 synclink_cs.c
--- synclink_cs.c	2003/05/08 19:26:53	4.9
+++ synclink_cs.c	2003/05/13 15:29:15
@@ -814,9 +814,9 @@
     case CS_EVENT_CARD_REMOVAL:
 	    link->state &= ~DEV_PRESENT;
 	    if (link->state & DEV_CONFIG) {
 		    ((MGSLPC_INFO *)link->priv)->stop = 1;
-		    mod_timer(&link->release, jiffies + HZ/20);
+		    mgslpc_release((u_long)link);
 	    }
 	    break;
     case CS_EVENT_CARD_INSERTION:
 	    link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;

The timer link->release is initialized with the release
function (in this case mgslpc_release, but called something
else in your driver). Now it is called directly.

-- 
Paul Fulghum, paulkf@microgate.com
Microgate Corporation, http://www.microgate.com



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: 2.5.69+bk: "sleeping function called from illegal context" on card release while shutting down
  2003-05-13 15:31   ` Paul Fulghum
@ 2003-05-13 16:08     ` Russell King
  2003-05-13 17:21     ` Alex Riesen
  2003-05-13 21:52     ` Felipe Alfaro Solana
  2 siblings, 0 replies; 9+ messages in thread
From: Russell King @ 2003-05-13 16:08 UTC (permalink / raw)
  To: Paul Fulghum; +Cc: Felipe Alfaro Solana, alexander.riesen, LKML

On Tue, May 13, 2003 at 10:31:01AM -0500, Paul Fulghum wrote:
> Russell's patches do not address this.

In part they do - the patch gives us a guaranteed process context for
the pcmcia event stuff.  The process context is provided in the right
place (core pcmcia code).

Things left in this area are:

- Remove workqueues from socket drivers.
- I'd like to see struct pcmcia_driver expand to include more
  functions (card removal, insertion, etc) rather than having
  an event handler.
- Remove the card removal event timers from pcmcia drivers.

-- 
Russell King (rmk@arm.linux.org.uk)                The developer of ARM Linux
             http://www.arm.linux.org.uk/personal/aboutme.html


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: 2.5.69+bk: "sleeping function called from illegal context" on card release while shutting down
  2003-05-13 15:31   ` Paul Fulghum
  2003-05-13 16:08     ` Russell King
@ 2003-05-13 17:21     ` Alex Riesen
  2003-05-13 17:28       ` Paul Fulghum
  2003-05-13 17:33       ` Alex Riesen
  2003-05-13 21:52     ` Felipe Alfaro Solana
  2 siblings, 2 replies; 9+ messages in thread
From: Alex Riesen @ 2003-05-13 17:21 UTC (permalink / raw)
  To: Paul Fulghum; +Cc: Felipe Alfaro Solana, LKML, Russell King

Paul Fulghum, Tue, May 13, 2003 17:31:01 +0200:
> > > Just tried to eject the card while the system was shutting down.
> > Don't know if this is fixed by latest Russell patches, but vanilla and
> > -bk snapshots do *not* contain the latest PCMCIA/CardBus code. Is it
> > possible for you to try 2.5.69-mm4?
> 
> Russell's patches do not address this.

still i'm going to give them a spin a bit later.

> Individual PCMCIA drivers need to be updated to call
> thier release function directly when processing a
> CARD_RELEASE message instead of from a timer procedure.
> 
> Similar to this patch for synclink_cs.c:
...
> -		    mod_timer(&link->release, jiffies + HZ/20);
> +		    mgslpc_release((u_long)link);

Tried that. This time the trace looks different:

Debug: sleeping function called from illegal context at include/asm/semaphore.h:119
Call Trace:
 [<c0118bc8>] __might_sleep+0x58/0x70
 [<c6a31eb6>] +0x82/0x58c [pcmcia_core]
 [<c6a2d193>] undo_irq+0x23/0x90 [pcmcia_core]
 [<c6a31eb6>] +0x82/0x58c [pcmcia_core]
 [<c6a302f8>] pcmcia_release_irq+0xb8/0xe0 [pcmcia_core]
 [<c6a25e00>] pcnet_release+0x0/0x80 [pcnet_cs]
 [<c6a312d5>] CardServices+0x155/0x260 [pcmcia_core]
 [<c6a312c9>] CardServices+0x149/0x260 [pcmcia_core]
 [<c6a25e56>] pcnet_release+0x56/0x80 [pcnet_cs]
 [<c01224a4>] run_timer_softirq+0xc4/0x1a0
 [<c010a8b3>] handle_IRQ_event+0x33/0xf0
 [<c011e889>] do_softirq+0xa9/0xb0
 [<c010abb5>] do_IRQ+0x125/0x150
 [<c01093a8>] common_interrupt+0x18/0x20
 [<c013cfb6>] zap_pte_range+0xd6/0x1d0
 [<c013d0f3>] zap_pmd_range+0x43/0x70
 [<c013d153>] unmap_page_range+0x33/0x60
 [<c013d271>] unmap_vmas+0xf1/0x260
 [<c01412d5>] exit_mmap+0x65/0x180
 [<c0119196>] mmput+0x56/0xb0
 [<c01556ce>] exec_mmap+0xce/0x150
 [<c01557e8>] flush_old_exec+0x18/0x830
 [<c01555ea>] kernel_read+0x3a/0x50
 [<c0170483>] load_elf_binary+0x283/0xba0
 [<c01316fd>] generic_file_aio_read+0x3d/0x50
 [<c0134379>] buffered_rmqueue+0xc9/0x160
 [<c0170200>] load_elf_binary+0x0/0xba0
 [<c015639b>] search_binary_handler+0xcb/0x2d0
 [<c01566f9>] do_execve+0x159/0x1a0
 [<c0157d28>] getname+0x78/0xc0
 [<c0107a46>] sys_execve+0x36/0x70
 [<c0109187>] syscall_call+0x7/0xb

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: 2.5.69+bk: "sleeping function called from illegal context" on card release while shutting down
  2003-05-13 17:21     ` Alex Riesen
@ 2003-05-13 17:28       ` Paul Fulghum
  2003-05-13 17:33       ` Alex Riesen
  1 sibling, 0 replies; 9+ messages in thread
From: Paul Fulghum @ 2003-05-13 17:28 UTC (permalink / raw)
  To: alexander.riesen; +Cc: LKML

On Tue, 2003-05-13 at 12:21, Alex Riesen wrote:
> Paul Fulghum, Tue, May 13, 2003 17:31:01 +0200:
> > Similar to this patch for synclink_cs.c:
> ...
> > -		    mod_timer(&link->release, jiffies + HZ/20);
> > +		    mgslpc_release((u_long)link);
> 
> Tried that. This time the trace looks different:
> 
> Debug: sleeping function called from illegal context at include/asm/semaphore.h:119
> Call Trace:
>  [<c0118bc8>] __might_sleep+0x58/0x70
>  [<c6a31eb6>] +0x82/0x58c [pcmcia_core]
>  [<c6a2d193>] undo_irq+0x23/0x90 [pcmcia_core]
>  [<c6a31eb6>] +0x82/0x58c [pcmcia_core]
>  [<c6a302f8>] pcmcia_release_irq+0xb8/0xe0 [pcmcia_core]
>  [<c6a25e00>] pcnet_release+0x0/0x80 [pcnet_cs]
>  [<c6a312d5>] CardServices+0x155/0x260 [pcmcia_core]
>  [<c6a312c9>] CardServices+0x149/0x260 [pcmcia_core]
>  [<c6a25e56>] pcnet_release+0x56/0x80 [pcnet_cs]
>  [<c01224a4>] run_timer_softirq+0xc4/0x1a0
>  [<c010a8b3>] handle_IRQ_event+0x33/0xf0
>  [<c011e889>] do_softirq+0xa9/0xb0
>  [<c010abb5>] do_IRQ+0x125/0x150
>  [<c01093a8>] common_interrupt+0x18/0x20

Hmmm... the pcnet_release() function is still being called
from a timer context.

Looking at pcnet_cs.c I see that in function pcnet_close()
that the release function is being being run from
a timer. Try changing that instance to calling pcnet_release()
directly as you did in the CS_EVENT handler.

-- 
Paul Fulghum, paulkf@microgate.com
Microgate Corporation, http://www.microgate.com



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: 2.5.69+bk: "sleeping function called from illegal context" on card release while shutting down
  2003-05-13 17:21     ` Alex Riesen
  2003-05-13 17:28       ` Paul Fulghum
@ 2003-05-13 17:33       ` Alex Riesen
  1 sibling, 0 replies; 9+ messages in thread
From: Alex Riesen @ 2003-05-13 17:33 UTC (permalink / raw)
  To: Paul Fulghum; +Cc: Felipe Alfaro Solana, LKML, Russell King

Alex Riesen, Tue, May 13, 2003 19:21:14 +0200:
> Paul Fulghum, Tue, May 13, 2003 17:31:01 +0200:
> > Individual PCMCIA drivers need to be updated to call
> > thier release function directly when processing a
> > CARD_RELEASE message instead of from a timer procedure.
> > 
> > Similar to this patch for synclink_cs.c:
> ...
> > -		    mod_timer(&link->release, jiffies + HZ/20);
> > +		    mgslpc_release((u_long)link);
> 
> Tried that. This time the trace looks different:
> 

I was probably too fast with the conclusions. It seemed I didn't update
modules (though I and bash history distinctly remember doing that).

I cannot reproduce the trace anymore. The patch was:

--- pcnet_cs.c	2003-04-30 06:17:05.000000000 +0200
+++ pcnet_cs.c	2003-05-13 19:31:12.000000000 +0200
@@ -848,7 +848,7 @@ static int pcnet_event(event_t event, in
 	link->state &= ~DEV_PRESENT;
 	if (link->state & DEV_CONFIG) {
 	    netif_device_detach(&info->dev);
-	    mod_timer(&link->release, jiffies + HZ/20);
+	    pcnet_release((u_long)link);
 	}
 	break;
     case CS_EVENT_CARD_INSERTION:

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: 2.5.69+bk: "sleeping function called from illegal context" on card release while shutting down
  2003-05-13 15:31   ` Paul Fulghum
  2003-05-13 16:08     ` Russell King
  2003-05-13 17:21     ` Alex Riesen
@ 2003-05-13 21:52     ` Felipe Alfaro Solana
  2 siblings, 0 replies; 9+ messages in thread
From: Felipe Alfaro Solana @ 2003-05-13 21:52 UTC (permalink / raw)
  To: Paul Fulghum; +Cc: alexander.riesen, LKML

On Tue, 2003-05-13 at 17:31, Paul Fulghum wrote:
> > Don't know if this is fixed by latest Russell patches, but vanilla and
> > -bk snapshots do *not* contain the latest PCMCIA/CardBus code. Is it
> > possible for you to try 2.5.69-mm4?
> 
> Russell's patches do not address this.

I knew I were no expert on this... ;-)

> Individual PCMCIA drivers need to be updated to call
> thier release function directly when processing a
> CARD_RELEASE message instead of from a timer procedure.

Aha! I got you! Thanks.


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: 2.5.69+bk: "sleeping function called from illegal context" on card release while shutting down
@ 2003-05-13 18:46 Alex Riesen
  0 siblings, 0 replies; 9+ messages in thread
From: Alex Riesen @ 2003-05-13 18:46 UTC (permalink / raw)
  To: Paul Fulghum
  Cc: linux-kernel, Russell King, Felipe Alfaro Solana, David Hinds

Thanks Paul,

your last suggestion (pcnet_close) helped. The previous patch was not
enough, of course.
I tried hard to reproduce it, and almost broke the card.
No "wrong sleepers" seen anymore.

Someone still has to remove the timer. It is not used anymore, in this
file, at least.

-alex

--- a/drivers/net/pcmcia/pcnet_cs.c	2003-05-13 20:34:12.000000000 +0200
+++ b/drivers/net/pcmcia/pcnet_cs.c	2003-05-13 20:34:08.000000000 +0200
@@ -848,7 +848,7 @@ static int pcnet_event(event_t event, in
 	link->state &= ~DEV_PRESENT;
 	if (link->state & DEV_CONFIG) {
 	    netif_device_detach(&info->dev);
-	    mod_timer(&link->release, jiffies + HZ/20);
+	    pcnet_release(link);
 	}
 	break;
     case CS_EVENT_CARD_INSERTION:
@@ -1054,7 +1054,7 @@ static int pcnet_close(struct net_device
     netif_stop_queue(dev);
     del_timer(&info->watchdog);
     if (link->state & DEV_STALE_CONFIG)
-	mod_timer(&link->release, jiffies + HZ/20);
+	pcnet_release((u_long)link);
 
     return 0;
 } /* pcnet_close */


^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2003-05-13 21:39 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-05-13 13:57 2.5.69+bk: "sleeping function called from illegal context" on card release while shutting down Alex Riesen
2003-05-13 14:58 ` Felipe Alfaro Solana
2003-05-13 15:31   ` Paul Fulghum
2003-05-13 16:08     ` Russell King
2003-05-13 17:21     ` Alex Riesen
2003-05-13 17:28       ` Paul Fulghum
2003-05-13 17:33       ` Alex Riesen
2003-05-13 21:52     ` Felipe Alfaro Solana
2003-05-13 18:46 Alex Riesen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).