On x86_64:

drivers/usb/gadget/rndis.c: In function `gen_ndis_set_resp':
drivers/usb/gadget/rndis.c:758: warning: cast from pointer to integer of different size
drivers/usb/gadget/rndis.c:761: warning: cast from pointer to integer of different size

It's not clear what this driver is trying to do there.  It is taking some
kernel address, adding 28 to it and is then examining particular bits within
the resulting address!

I think what it's actually trying to do is to dereference the pointer rather
than index off it...



---

 25-akpm/drivers/usb/gadget/rndis.c |   18 +++++++++++-------
 1 files changed, 11 insertions(+), 7 deletions(-)

diff -puN drivers/usb/gadget/rndis.c~rndis-fix drivers/usb/gadget/rndis.c
--- 25/drivers/usb/gadget/rndis.c~rndis-fix	2004-04-09 23:28:42.580200072 -0700
+++ 25-akpm/drivers/usb/gadget/rndis.c	2004-04-09 23:31:48.615918344 -0700
@@ -746,19 +746,23 @@ static int gen_ndis_set_resp (u8 configN
 	rndis_set_cmplt_type		*resp;
 	int 				i, retval = -ENOTSUPP;
 	struct rndis_config_parameter	*param;
-	
-	if (!r) return -ENOMEM;
+	u8 *cp;
+
+	if (!r)
+		return -ENOMEM;
 	resp = (rndis_set_cmplt_type *) r->buf;
-	
-	if (!resp) return -ENOMEM;
-	
+	if (!resp)
+		return -ENOMEM;
+
+	cp = (u8 *)resp;
+
 	switch (OID) {
 	case OID_GEN_CURRENT_PACKET_FILTER:
 		DEBUG("%s: OID_GEN_CURRENT_PACKET_FILTER\n", __FUNCTION__);
-		currentFilter2devFlags ((u32) ((u8 *) resp + 28), 
+		currentFilter2devFlags(cp[28],
 					rndis_per_dev_params [configNr].dev);
 		retval = 0;
-		if ((u32) ((u8 *) resp + 28))
+		if (cp[28])
 		    rndis_per_dev_params [configNr].state = RNDIS_INITIALIZED;
 		else
 		    rndis_per_dev_params [configNr].state = RNDIS_UNINITIALIZED;

_