Showing error 530

User: Jiri Slaby
Error type: Calling function from invalid context
Error type description: Some function is called at inappropriate place like sleep inside critical sections or interrupt handlers
File location: drivers/usb/gadget/printer.c
Line in file: 753
Project: Linux Kernel
Project version: 2.6.28
Tools: Stanse (1.2)
Entered: 2011-11-07 22:19:02 UTC


Source:

 723                spin_lock_irqsave(&dev->lock, flags);
 724        }
 725
 726        while (likely(!list_empty(&dev->tx_reqs)) && len) {
 727
 728                if (len > USB_BUFSIZE)
 729                        size = USB_BUFSIZE;
 730                else
 731                        size = len;
 732
 733                req = container_of(dev->tx_reqs.next, struct usb_request,
 734                                list);
 735                list_del_init(&req->list);
 736
 737                req->complete = tx_complete;
 738                req->length = size;
 739
 740                /* Check if we need to send a zero length packet. */
 741                if (len > size)
 742                        /* They will be more TX requests so no yet. */
 743                        req->zero = 0;
 744                else
 745                        /* If the data amount is not a multple of the
 746                         * maxpacket size then send a zero length packet.
 747                         */
 748                        req->zero = ((len % dev->in_ep->maxpacket) == 0);
 749
 750                /* Don't leave irqs off while doing memory copies */
 751                spin_unlock_irqrestore(&dev->lock, flags);
 752
 753                if (copy_from_user(req->buf, buf, size)) {
 754                        list_add(&req->list, &dev->tx_reqs);
 755                        spin_unlock(&dev->lock_printer_io);
 756                        return bytes_copied;
 757                }
 758
 759                bytes_copied += size;
 760                len -= size;
 761                buf += size;
 762
 763                spin_lock_irqsave(&dev->lock, flags);
Show full sources