[Nut-upsuser] lost USB comms under FreeBSD

Charles Lepple clepple at gmail.com
Wed Aug 22 12:07:10 UTC 2007


[was: Re: [Nut-upsuser] FreeBSD rc.d scripts or shutdown howto?]

On 8/22/07, Daniel O'Connor <doconnor at gsoft.com.au> wrote:
> On Wed, 22 Aug 2007, Bryan wrote:
> > The trouble I'm now having is that UPS communication just stops for
> > no apparent reason. Data goes stale and I get the broadcasts about
> > the UPS being unavailable. upsc tells of a similar fate. *sigh*
>
> Yes, AFAIK this is because you're using a USB UPS. I've never been able
> to reliably talk to one on FreeBSD.

NUT drivers poll the UPS every so often, which works fine on systems
where a single libusb call results in a single USB transaction. In
FreeBSD (and probably other BSD systems as well), interrupt transfers
are scheduled periodically, even if the calling program is not
requesting interrupt transfers at the same rate.

What I saw with tripplite_usb (where the USB descriptor for the device
tells the OS to poll 10-100 times a second) is that the driver does
not poll frequently enough, and an interrupt transfer buffer fills up
in the OS. Due to the way that libusb and the kernel USB stack
interact, this could cause the symptoms you are seeing.

I don't know of a good way to debug this. It seems like a problem in
the kernel, but it's hard to isolate it with a driver as complex as
usbhid-ups.

-- 
- Charles Lepple



More information about the Nut-upsuser mailing list