All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Frank Schäfer" <fschaefer.oss@googlemail.com>
To: linux-kernel@vger.kernel.org
Subject: Re: kernel panic on device removal when using a workqueue and delayed_work
Date: Mon, 31 Oct 2011 11:26:58 +0100	[thread overview]
Message-ID: <4EAE77F2.80102@googlemail.com> (raw)
In-Reply-To: <20111031031136.GA18057@zhy>

Am 31.10.2011 04:11, schrieb Yong Zhang:
> On Sun, Oct 30, 2011 at 08:19:10PM +0100, Frank Sch�fer wrote:
>> Hi,
>>
>> with the following simple kernel module, I have a good chance to get
>> a kernel panic when I unplug the device:
>>
>>
>> #include<linux/workqueue.h>
>> #include<linux/usb.h>
>> #include<linux/module.h>
>>
>> MODULE_AUTHOR("Nobody");
>> MODULE_DESCRIPTION("example driver for causing kernel panic");
>> MODULE_LICENSE("GPL");
>>
>> static struct delayed_work poll_work;
>>
>> static void poll(struct work_struct *work)
>> {
>>      schedule_delayed_work(&poll_work,
>>                    msecs_to_jiffies(100));
>> }
>>
>> static int test_probe(struct usb_interface *intf,
>>                const struct usb_device_id *id)
>> {
>>      INIT_DELAYED_WORK(&poll_work, poll);
>>      schedule_delayed_work(&poll_work,
>>                    msecs_to_jiffies(100));
>>      return 0;
>> }
>>
>> static void test_disconnect(struct usb_interface *intf)
>> {
>>      cancel_delayed_work_sync(&poll_work);
>> }
...
>> static const struct usb_device_id device_table[] = {
>>      {USB_DEVICE(0x1234, 0x5678)},
>>      {}
>> };
>>
>> MODULE_DEVICE_TABLE(usb, device_table);
>>
>> static struct usb_driver test_driver = {
>>      .name       = "test",
>>      .id_table   = device_table,
>>      .probe      = test_probe,
>>      .disconnect = test_disconnect,
>> };
>>
>> static int __init test_mod_init(void)
>> {
>>      return usb_register(&test_driver);
>> }
>>
>> static void __exit test_mod_exit(void)
>> {
>>      usb_deregister(&test_driver);
>> }
>>
>> module_init(test_mod_init);
>> module_exit(test_mod_exit);
>>
>>
>>
>>
>> A picture of the backtrace (the machine immediately turns off
>> without saving a backtrace) can be found at
>>
>> http://imageshack.us/photo/my-images/823/img075gv.jpg
>>
>> Kernel version is 3.1.0.
>>
>>
>> This is the first time I'm using a workqueue, so there is a good
>> chance that I missed something...
> You should cancel the work you have armed before exit.
> See cancel_delayed_work().
That's what I'm doing (see above).
Did you read the code ? ;-)

Regards,
Frank Schaefer
>> Or is this a kernel bug ?
> I don't think so.
>
> Thanks,
> Yong


  reply	other threads:[~2011-10-31 10:26 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-10-30 19:19 kernel panic on device removal when using a workqueue and delayed_work Frank Schäfer
2011-10-31  3:11 ` Yong Zhang
2011-10-31 10:26   ` Frank Schäfer [this message]
2011-10-31 10:29     ` Oliver Neukum
2011-11-02 20:02       ` Frank Schäfer
2011-11-02  6:31     ` Yong Zhang
2011-11-05 13:32       ` Frank Schäfer

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=4EAE77F2.80102@googlemail.com \
    --to=fschaefer.oss@googlemail.com \
    --cc=linux-kernel@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.