Am Montag, 15. Januar 2007 09:10 schrieb Guenther Sohler:

> Unfortunately it does not work yet. It hangs as soon the driver internally 
> sees the first data arriving via USB cable.
> 
> Could anybody have a look at the code to see if there are basic mistakes ?

static void openradio_read_bulk_callback(struct urb *urb, struct pt_regs *regs)
{
        struct usb_openradio *dev;
        dev = (struct usb_openradio *)urb->context;
        printk(KERN_ERR "callback\n");
        dev->callbacks++;
        if(!dev->running) goto end;
        printk(KERN_ERR "read_bulk_callback\n");

        /* sync/async unlink faults aren't errors */
        if (urb->status && 
            !(urb->status == -ENOENT || 
              urb->status == -ECONNRESET ||
              urb->status == -ESHUTDOWN)) {
                dbg("%s - nonzero write bulk status received: %d",
                    __FUNCTION__, urb->status);
        }

        printk(KERN_ERR "openradio_read_bulk_callback_1\n");
        // nur wenn nicht schon up !

        // as long as data wanted
        down_interruptible(&dev->sem_wantdata);

You cannot use semaphores in interrupt context. Please read the kernel
documentation about spinlocks and locking in general.

        Regards
                Oliver

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to