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; _