--- zzzz-none-000/linux-2.6.32.61/drivers/usb/gadget/rndis.c 2013-06-10 09:43:48.000000000 +0000 +++ ar10-7272-687/linux-2.6.32.61/drivers/usb/gadget/rndis.c 2011-07-20 07:23:51.000000000 +0000 @@ -983,7 +983,10 @@ r = list_entry (act, rndis_resp_t, list); if (r && r->buf == buf) { list_del (&r->list); - kfree (r); + #if defined(__IFX_USB_GADGET__) + gadget_free_buffer(r->buf); + #endif + kfree(r); } } } @@ -1014,10 +1017,20 @@ rndis_resp_t *r; /* NOTE: this gets copied into ether.c USB_BUFSIZ bytes ... */ - r = kmalloc (sizeof (rndis_resp_t) + length, GFP_ATOMIC); - if (!r) return NULL; - - r->buf = (u8 *) (r + 1); + #ifdef __IFX_USB_GADGET__ + r = kmalloc (sizeof (rndis_resp_t), GFP_ATOMIC); + if (!r) return NULL; + r->buf = (u8 *) gadget_alloc_buffer(length); + if (!r->buf) + { + kfree(r); + return NULL; + } + #else + r = kmalloc (sizeof (rndis_resp_t) + length, GFP_ATOMIC); + if (!r) return NULL; + r->buf = (u8 *) (r + 1); + #endif r->length = length; r->send = 0;