Author: hselasky
Date: Wed Sep 19 08:12:41 2018
New Revision: 338792
URL: https://svnweb.freebsd.org/changeset/base/338792

Log:
  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+free...@gmail.com>
  PR:                   231264
  Sponsored by:         Mellanox Technologies

Modified:
  stable/10/lib/libusb/libusb10.h
  stable/10/lib/libusb/libusb10_io.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/lib/libusb/libusb10.h
==============================================================================
--- stable/10/lib/libusb/libusb10.h     Wed Sep 19 08:11:44 2018        
(r338791)
+++ stable/10/lib/libusb/libusb10.h     Wed Sep 19 08:12:41 2018        
(r338792)
@@ -39,22 +39,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 */
 

Modified: stable/10/lib/libusb/libusb10_io.c
==============================================================================
--- stable/10/lib/libusb/libusb10_io.c  Wed Sep 19 08:11:44 2018        
(r338791)
+++ stable/10/lib/libusb/libusb10_io.c  Wed Sep 19 08:12:41 2018        
(r338792)
@@ -487,13 +487,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");
 
@@ -583,7 +596,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,
@@ -601,7 +615,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,
_______________________________________________
svn-src-stable-10@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-stable-10
To unsubscribe, send any mail to "svn-src-stable-10-unsubscr...@freebsd.org"

Reply via email to