NUT + USB UPS = проблема?

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

NUT + USB UPS = проблема?

BSW-2
     День добрый, господа.

Есть некая машинка, вот выдежка из dmesg:
/bsd: ohci0 at pci0 dev 3 function 0 "SiS 5597/5598 USB" rev 0x0f: apic
2 int 20 (irq 5), version 1.0, legacy support
/bsd: ohci1 at pci0 dev 3 function 1 "SiS 5597/5598 USB" rev 0x0f: apic
2 int 21 (irq 6), version 1.0, legacy support
/bsd: ohci2 at pci0 dev 3 function 2 "SiS 5597/5598 USB" rev 0x0f: apic
2 int 22 (irq 9), version 1.0, legacy support

$ uname -sr
OpenBSD 4.6

$ pkg_info | grep nut
nut-2.4.1           UPS monitoring program supporting many brands

Есть бесперебойник SVEN Pro+ 625, работает по USB с драйвером
megatec_usb. Драйвер хронически падает:
$ sudo /usr/local/bin/megatec_usb -a SVEN -DDDDD
Network UPS Tools - Megatec protocol driver 1.6 (2.4.1)
Serial-over-USB transport layer 0.10
debug level is '5'
Checking device (FFFF/0000) (/dev/usb1//dev/ugen0)
- VendorID: ffff
- ProductID: 0000
- Manufacturer:
- Product: 068A
- Serial Number: unknown
- Bus: /dev/usb1
Trying to match device
Device matches
DTR=1, RTS=0
Starting UPS detection process...
..
Asking for UPS status [Q1]...
set_data_krauler: index [03]
- Unable to fetch string 3
set_data_krauler: connection failure
ser_send_pace: Device detached? (error -5: No error)
==================================================
= device has been disconnected, try to reconnect =
==================================================
Checking device (FFFF/0000) (/dev/usb1//dev/ugen0)
- VendorID: ffff
- ProductID: 0000
- Manufacturer:
- Product: 068A
- Serial Number: unknown
- Bus: /dev/usb1
Trying to match device
Device matches
Successfully reconnected
..
Asking for UPS status [Q1]...
set_data_krauler: index [03]
- Unable to fetch string 3
set_data_krauler: connection failure
ser_send_pace: Device detached? (error -5: tried to close device fd 4:
Bad file descriptor)
==================================================
= device has been disconnected, try to reconnect =
==================================================
megatec_usb in free(): error: chunk is already free
Abort trap

Отвалиться может через несколько секунд или несколько часов. Причем
первый реконнект обычно бывает успешным.

Если у кого-нибудь есть аналогичное железо, прошу подтвердить или
опровергнуть наличие проблемы.

Для себя проблему решил так: в файле drivers/libusb.c в функции
libusb_open() изъял фрагмент

#ifndef __linux__ /* SUN_LIBUSB (confirmed to work on Solaris and
FreeBSD) */
         /* Causes a double free corruption in linux if device is
detached! */
       libusb_close(*udevp);
#endif

Т.е. виноват лишний вызов libusb_close(). Пока полет нормальный.

PS: помимо прочего есть сильное подозрение на кривизну сочетания oBSD и
"SiS 5597/5598 USB", есть проблемы с rum.