From: Tilman Schmidt <tilman@imap.cc>
To: Jarek Poplawski <jarkao2@gmail.com>
Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>,
linux-kernel@vger.kernel.org, netdev@vger.kernel.org,
Alan Cox <alan@linux.intel.com>, Michael Buesch <mb@bu3sch.de>,
isdn4linux <isdn4linux@listserv.isdn4linux.de>
Subject: capi.c calls receive_buf with interrupts disabled (was: N_PPP_SYNC ldisc BUG: sleeping function called from invalid context)
Date: Thu, 01 Oct 2009 01:15:56 +0200 [thread overview]
Message-ID: <4AC3E6AC.3000107@imap.cc> (raw)
In-Reply-To: <4AC3C9B8.9080003@gmail.com>
[-- Attachment #1: Type: text/plain, Size: 2709 bytes --]
Jarek Poplawski schrieb:
> Tilman Schmidt wrote, On 09/30/2009 08:55 PM:
[...]
>> - ppp_sync_receive() was called, as the LD's receive_buf method,
>> via handle_recv_skb() [drivers/isdn/capi/capi.c line 504, inlined]
>> from handle_minor_recv() [drivers/isdn/capi/capi.c line 519]
>>
>> - handle_minor_recv() was called from capi_recv_message()
>> [drivers/isdn/capi/capi.c line 656]
>>
>> - capi_recv_message() was called, as the CAPI application's
>> recv_message method, from recv_handler()
>> [drivers/isdn/capi/kcapi.c line 268]
>>
>> - recv_handler() is never called directly. It's only scheduled
>> via the work queue ap->recv_work from capi_ctr_handle_message()
>> [drivers/isdn/capi/kcapi.c line 349]
>>
>> Even if we don't trust the backtraces, there's not much room for
>> another activation path. So for all I know, the expectation of the
>> tty logic should have been met. The call was indeed processed from
>> a work queue.
>>
>> Why then does mutex_lock() complain?
>
> Hmm... capi_recv_message() calls handle_minor_recv() under
> spin_lock_irqsave(), doesn't it?
Well spotted. Indeed it does. That explains it, of course.
The spinlock in question was added by:
commit 053b47ff249b9e0a634dae807f81465205e7c228
Author: Michael Buesch <mb@bu3sch.de>
Date: Mon Feb 12 00:53:26 2007 -0800
[PATCH] Workaround CAPI subsystem locking issue
I think the following patch should go into the kernel, until the ISDN/CAPI
guys create the real fix for this issue.
The issue is a concurrency issue with some internal CAPI data structure
which can crash the kernel.
On my FritzCard DSL with the AVM driver it crashes about once a day without
this workaround patch. With this workaround patch it's rock-stable (at
least on UP, but I don't see why this shouldn't work on SMP as well. But
maybe I'm missing something.)
This workaround is kind of a sledgehammer which inserts a global lock to
wrap around all the critical sections. Of course, this is a scalability
issue, if you have many ISDN/CAPI cards. But it prevents a crash. So I
vote for this fix to get merged, until people come up with a better
solution. Better have a stable kernel that's less scalable, than a
crashing and useless kernel.
So let's cc the author of that patch, and also the good people on the
isdn4linux developer mailing list ...
Any ideas for a fix?
Thanks,
Tilman
--
Tilman Schmidt E-Mail: tilman@imap.cc
Bonn, Germany
Diese Nachricht besteht zu 100% aus wiederverwerteten Bits.
Ungeöffnet mindestens haltbar bis: (siehe Rückseite)
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 254 bytes --]
prev parent reply other threads:[~2009-09-30 23:16 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-09-30 14:50 N_PPP_SYNC ldisc BUG: sleeping function called from invalid context Tilman Schmidt
2009-09-30 16:47 ` Alan Cox
2009-09-30 18:55 ` Tilman Schmidt
2009-09-30 20:28 ` Jarek Poplawski
2009-09-30 22:00 ` Tilman Schmidt
2009-09-30 21:12 ` Jarek Poplawski
2009-09-30 23:15 ` Tilman Schmidt [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4AC3E6AC.3000107@imap.cc \
--to=tilman@imap.cc \
--cc=alan@linux.intel.com \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=isdn4linux@listserv.isdn4linux.de \
--cc=jarkao2@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mb@bu3sch.de \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.