aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Petter Selasky <hselasky@FreeBSD.org>2018-09-19 08:13:58 +0000
committerHans Petter Selasky <hselasky@FreeBSD.org>2018-09-19 08:13:58 +0000
commitc9a141c2ded0a245b15ddb408cf20a9e09e262b8 (patch)
treea31a19444552dd2f81e6e7c17d133066d4625110
parent0db596fa74b5a90b453e8dbfc0f0e3ac962f1ec4 (diff)
MFC r338679:
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 Sponsored by: Mellanox Technologies
Notes
svn path=/stable/9/; revision=338793
-rw-r--r--lib/libusb/libusb10.h34
-rw-r--r--lib/libusb/libusb10_io.c21
2 files changed, 36 insertions, 19 deletions
diff --git a/lib/libusb/libusb10.h b/lib/libusb/libusb10.h
index d2e2aaf1175f..fa5c6b625a44 100644
--- a/lib/libusb/libusb10.h
+++ b/lib/libusb/libusb10.h
@@ -37,22 +37,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 */
diff --git a/lib/libusb/libusb10_io.c b/lib/libusb/libusb10_io.c
index 76188c87179c..421682c990e8 100644
--- a/lib/libusb/libusb10_io.c
+++ b/lib/libusb/libusb10_io.c
@@ -482,13 +482,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");
@@ -578,7 +591,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,
@@ -596,7 +610,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,