greybus: explicitly mark cookies as opaque

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>
diff --git a/drivers/staging/greybus/es1-ap-usb.c b/drivers/staging/greybus/es1-ap-usb.c
index 3404dc5..658506d 100644
--- a/drivers/staging/greybus/es1-ap-usb.c
+++ b/drivers/staging/greybus/es1-ap-usb.c
@@ -16,6 +16,13 @@
 #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 @@
 		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