[Nut-upsuser] tracing a problem with newhidups

Rodrigo Ventura yoda at isr.ist.utl.pt
Thu Jul 6 18:23:20 UTC 2006


Hi. I'm having trouble with nut-2.0.3 on a linux kernel 2.4.32 machine and a 
MGE Evolution 3000. The problem is that I'm getting the following message, 
repeatidly, on dmesg:

usbdevfs: usb_submit_urb returned -22

(-22 means -EINVAL)

I traced the problem with newhidups -DDDDDD auto and found out that the -22 
error appears in a line "none (-22)" of the output as:

----------
upsdrv_updateinfo...
Waiting for notifications...
 none (-22)
entering string_to_path()
parsing UPS
Looking up UPS
----------

The function calls in userspace are:

[newhidups.c] upsdrv_updateinfo()
   [libhid.c] HIDGetEvents()
      [libusb.c] libusb_get_interrupt()
         [libusb] usb_interrupt_read()
            [libusb] usb_urb_transfer()

In the usb_urb_transfer() function one can find that

----------
    urb.number_of_packets = 0;  /* don't do isochronous yet */
    urb.usercontext = NULL;

    ret = ioctl(dev->fd, IOCTL_USB_SUBMITURB, &urb);
----------

and in the kernel code of linux/drivers/usb/host/uhci.c:

----------
static int uhci_submit_urb(struct urb *urb)
[...]
        case PIPE_ISOCHRONOUS:
                if (urb->bandwidth == 0) {      /* not yet checked/allocated 
*/
                        if (urb->number_of_packets <= 0) {
                                ret = -EINVAL;
----------

So it seems that setting number_of_packets to zero is directly related with 
the kernel error.

What is going on here? Is it a bug in nut?

Cheers,

Rodrigo

-- 

*** Rodrigo Martins de Matos Ventura <yoda at isr.ist.utl.pt>
***  Web page: http://www.isr.ist.utl.pt/~yoda
***   Teaching Assistant and PhD Student at ISR:
***    Instituto de Sistemas e Robotica, Polo de Lisboa
***     Instituto Superior Tecnico, Lisboa, PORTUGAL
*** PGP fingerprint = 0119 AD13 9EEE 264A 3F10  31D3 89B3 C6C4 60C6 4585



More information about the Nut-upsuser mailing list