Improve LibUSB debugging by simultaneously allowing both function

and transfer prints. Make sure the debug level comes from the
correct USB context.

Found by:		Ludovic Rousseau <ludovic.rousseau+freebsd@gmail.com>
PR:			231264
MFC after:		1 week
Approved by:		re (kib)
Sponsored by:		Mellanox Technologies
This commit is contained in:
Hans Petter Selasky 2018-09-14 13:41:37 +00:00
parent 0204d85a62
commit 5b21ba5c5d
2 changed files with 36 additions and 19 deletions

View File

@ -41,22 +41,24 @@
#define HOTPLUG_LOCK(ctx) pthread_mutex_lock(&(ctx)->hotplug_lock)
#define HOTPLUG_UNLOCK(ctx) pthread_mutex_unlock(&(ctx)->hotplug_lock)
#define DPRINTF(ctx, dbg, format, args...) do { \
if ((ctx)->debug == dbg) { \
switch (dbg) { \
case LIBUSB_DEBUG_FUNCTION: \
printf("LIBUSB_FUNCTION: " \
format "\n", ## args); \
break; \
case LIBUSB_DEBUG_TRANSFER: \
printf("LIBUSB_TRANSFER: " \
format "\n", ## args); \
break; \
default: \
break; \
} \
} \
} while(0)
#define DPRINTF(ctx, dbg, format, ...) do { \
switch (dbg) { \
case LIBUSB_DEBUG_FUNCTION: \
if ((ctx)->debug & LIBUSB_DEBUG_FUNCTION) { \
printf("LIBUSB_FUNCTION: " \
format "\n", ## __VA_ARGS__); \
} \
break; \
case LIBUSB_DEBUG_TRANSFER: \
if ((ctx)->debug & LIBUSB_DEBUG_TRANSFER) { \
printf("LIBUSB_TRANSFER: " \
format "\n", ## __VA_ARGS__); \
} \
break; \
default: \
break; \
} \
} while (0)
/* internal structures */

View File

@ -489,13 +489,26 @@ libusb_control_transfer(libusb_device_handle *devh,
return (actlen);
}
static libusb_context *
libusb10_get_context_by_device_handle(libusb_device_handle *devh)
{
libusb_context *ctx;
if (devh != NULL)
ctx = libusb_get_device(devh)->ctx;
else
ctx = NULL;
return (GET_CONTEXT(ctx));
}
static void
libusb10_do_transfer_cb(struct libusb_transfer *transfer)
{
libusb_context *ctx;
int *pdone;
ctx = GET_CONTEXT(NULL);
ctx = libusb10_get_context_by_device_handle(transfer->dev_handle);
DPRINTF(ctx, LIBUSB_DEBUG_TRANSFER, "sync I/O done");
@ -585,7 +598,8 @@ libusb_bulk_transfer(libusb_device_handle *devh,
libusb_context *ctx;
int ret;
ctx = GET_CONTEXT(NULL);
ctx = libusb10_get_context_by_device_handle(devh);
DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_bulk_transfer enter");
ret = libusb10_do_transfer(devh, endpoint, data, length, transferred,
@ -603,7 +617,8 @@ libusb_interrupt_transfer(libusb_device_handle *devh,
libusb_context *ctx;
int ret;
ctx = GET_CONTEXT(NULL);
ctx = libusb10_get_context_by_device_handle(devh);
DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_interrupt_transfer enter");
ret = libusb10_do_transfer(devh, endpoint, data, length, transferred,