From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S267642AbUHELLz (ORCPT ); Thu, 5 Aug 2004 07:11:55 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S267640AbUHELLz (ORCPT ); Thu, 5 Aug 2004 07:11:55 -0400 Received: from the.earth.li ([193.201.200.66]:29898 "EHLO the.earth.li") by vger.kernel.org with ESMTP id S267642AbUHELKI (ORCPT ); Thu, 5 Aug 2004 07:10:08 -0400 Date: Thu, 5 Aug 2004 12:10:06 +0100 From: Jonathan McDowell To: Thomas Sailer Cc: linux-usb-devel@lists.sourceforge.net, linux-kernel@vger.kernel.org Subject: Re: "bad: scheduling while atomic!" with uss720 driver. Message-ID: <20040805111006.GT12179@earth.li> References: <20040804213434.GN12179@earth.li> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20040804213434.GN12179@earth.li> User-Agent: Mutt/1.3.28i Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Aug 04, 2004 at 10:34:34PM +0100, Jonathan McDowell wrote: > I'm seeing the above error, with the following traceback, when my > machine loads the uss720 driver (for a Belkin F5U002). > > usb 1-2.4: new full speed USB device using address 3 > uss720: probe: vendor id 0x1293, device id 0x2 > uss720: set inteface result 0 > uss720: (C) 1999 by Thomas Sailer, > uss720: reg: da 0c 23 00 00 00 01 > uss720: epaddr 131 interval 1 > bad: scheduling while atomic! > [] schedule+0x499/0x4a0 > [] uhci_submit_control+0x22c/0x270 [uhci_hcd] > [] wait_for_completion+0x78/0xd0 > [] default_wake_function+0x0/0x10 > [] hcd_submit_urb+0x111/0x1a0 [usbcore] > [] default_wake_function+0x0/0x10 > [] usb_start_wait_urb+0x81/0xc0 [usbcore] > [] register_proc_table+0xaf/0x110 > [] timeout_kill+0x0/0x80 [usbcore] > [] usb_internal_control_msg+0x62/0x80 [usbcore] > [] usb_control_msg+0x8f/0xb0 [usbcore] > [] set_1284_register+0x6f/0xb0 [uss720] > [] parport_uss720_restore_state+0x1b/0x50 [uss720] > [] parport_claim+0x10e/0x210 [parport] This seems to be where the problem lies; near the start of the function is: /* Preempt any current device */ write_lock_irqsave (&port->cad_lock, flags); I've no idea how to fix this sort of thing though; presumably uss720 needs to call down into the USB layer in order to restore its state ready to be claimed? > [] parport_open+0x98/0xf0 [parport] > [] parport_claim_or_block+0xf/0x60 [parport] > [] parport_device_id+0x42/0x1a0 [parport] > [] parport_daisy_init+0x83/0x1d0 [parport] > [] call_console_drivers+0x7f/0x100 > [] parport_announce_port+0xf/0xd0 [parport] > [] uss720_probe+0x16d/0x1a0 [uss720] > [] usb_probe_interface+0x4c/0x60 [usbcore] > [] bus_match+0x32/0x60 > [] driver_attach+0x59/0x90 > [] kobject_register+0x22/0x60 > [] bus_add_driver+0x8c/0xb0 > [] driver_register+0x28/0x30 > [] usb_register+0x3a/0xa0 [usbcore] > [] uss720_init+0x11/0x36 [uss720] > [] sys_init_module+0xe8/0x1f0 > [] syscall_call+0x7/0xb J. -- If at first you don't succeed, create an "NT" version.