greybus: explicitly mark cookies as opaque
authorAlex Elder <elder@linaro.org>
Wed, 19 Nov 2014 18:27:13 +0000 (12:27 -0600)
committerGreg Kroah-Hartman <greg@kroah.com>
Wed, 19 Nov 2014 18:41:12 +0000 (10:41 -0800)
Use simple macros to mark the conversion of an URB pointer into an
opaque cookie value (and vice-versa).  We scramble some bits, but
the main point is to make it explicit where we're returning and
using opaque values.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>
drivers/staging/greybus/es1-ap-usb.c

index 3404dc5..658506d 100644 (file)
 #include "svc_msg.h"
 #include "kernel_ver.h"
 
+/*
+ * Macros for making pointers explicitly opaque, such that the result
+ * isn't valid but also can't be mistaken for an ERR_PTR() value.
+ */
+#define conceal_urb(urb)       ((void *)((uintptr_t)(urb) ^ 0xbad))
+#define reveal_urb(cookie)     ((void *)((uintptr_t)(cookie) ^ 0xbad))
+
 /* Memory sizes for the buffers sent to/from the ES1 controller */
 #define ES1_SVC_MSG_SIZE       (sizeof(struct svc_msg) + SZ_64K)
 #define ES1_GBUF_MSG_SIZE      PAGE_SIZE
@@ -241,12 +248,12 @@ static void *buffer_send(struct greybus_host_device *hd, u16 dest_cport_id,
                return ERR_PTR(retval);
        }
 
-       return urb;
+       return conceal_urb(urb);
 }
 
 static void buffer_cancel(void *cookie)
 {
-       struct urb *urb = cookie;
+       struct urb *urb = reveal_urb(cookie);
 
        /*
         * We really should be defensive and track all outstanding