rx_submit (struct eth_dev *dev, struct usb_request *req, int gfp_flags) 
rx_submit (struct eth_dev *dev, struct usb_request *req, unsigned gfp_flags) 
rx_submit (struct eth_dev *dev, struct usb_request *req, int gfp_flags){	struct sk_buff		*skb;	int			retval = -ENOMEM;	size_t			size;	/* Padding up to RX_EXTRA handles minor disagreements with host.	 * Normally we use the USB "terminate on short read" convention;	 * so allow up to (N*maxpacket), since that memory is normally	 * already allocated.  Some hardware doesn't deal well with short	 * reads (e.g. DMA must be N*maxpacket), so for now don't trim a	 * byte off the end (to force hardware errors on overflow).	 *	 * RNDIS uses internal framing, and explicitly allows senders to	 * pad to end-of-packet.  That's potentially nice for speed,	 * but means receivers can't recover synch on their own.	 */	size = (sizeof (struct ethhdr) + dev->net->mtu + RX_EXTRA);	size += dev->out_ep->maxpacket - 1;	if (rndis_active(dev))		size += sizeof (struct rndis_packet_msg_type);	size -= size % dev->out_ep->maxpacket;	if ((skb = alloc_skb (size + NET_IP_ALIGN, gfp_flags)) == 0) {		DEBUG (dev, "no rx skb\n");		goto enomem;	}		/* Some platforms perform better when IP packets are aligned,	 * but on at least one, checksumming fails otherwise.  Note:	 * RNDIS headers involve variable numbers of LE32 values.	 */	skb_reserve(skb, NET_IP_ALIGN);	req->buf = skb->data;	req->length = size;	req->complete = rx_complete;	req->context = skb;	retval = usb_ep_queue (dev->out_ep, req, gfp_flags);	if (retval == -ENOMEM)enomem:		defer_kevent (dev, WORK_RX_MEMORY);	if (retval) {		DEBUG (dev, "rx submit --> %d\n", retval);		dev_kfree_skb_any (skb);		spin_lock (&dev->lock);		list_add (&req->list, &dev->rx_reqs);		spin_unlock (&dev->lock);	}	return retval;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/5db539e49fc7471e23bf3c94ca304f008cb7b7f3/ether.c/clean/drivers/usb/gadget/ether.c