int			mem_flags 
unsigned		mem_flags 
itd_urb_transaction (	struct ehci_iso_stream	*stream,	struct ehci_hcd		*ehci,	struct urb		*urb,	int			mem_flags){	struct ehci_itd		*itd;	dma_addr_t		itd_dma;	int			i;	unsigned		num_itds;	struct ehci_iso_sched	*sched;	unsigned long		flags;	sched = iso_sched_alloc (urb->number_of_packets, mem_flags);	if (unlikely (sched == NULL))		return -ENOMEM;	itd_sched_init (sched, stream, urb);	if (urb->interval < 8)		num_itds = 1 + (sched->span + 7) / 8;	else		num_itds = urb->number_of_packets;	/* allocate/init ITDs */	spin_lock_irqsave (&ehci->lock, flags);	for (i = 0; i < num_itds; i++) {		/* free_list.next might be cache-hot ... but maybe		 * the HC caches it too. avoid that issue for now.		 */		/* prefer previously-allocated itds */		if (likely (!list_empty(&stream->free_list))) {			itd = list_entry (stream->free_list.prev,					 struct ehci_itd, itd_list);			list_del (&itd->itd_list);			itd_dma = itd->itd_dma;		} else			itd = NULL;		if (!itd) {			spin_unlock_irqrestore (&ehci->lock, flags);			itd = dma_pool_alloc (ehci->itd_pool, mem_flags,					&itd_dma);			spin_lock_irqsave (&ehci->lock, flags);		}		if (unlikely (NULL == itd)) {			iso_sched_free (stream, sched);			spin_unlock_irqrestore (&ehci->lock, flags);			return -ENOMEM;		}		memset (itd, 0, sizeof *itd);		itd->itd_dma = itd_dma;		list_add (&itd->itd_list, &sched->td_list);	}	spin_unlock_irqrestore (&ehci->lock, flags);	/* temporarily store schedule info in hcpriv */	urb->hcpriv = sched;	urb->error_count = 0;	return 0;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/5db539e49fc7471e23bf3c94ca304f008cb7b7f3/ehci-sched.c/clean/drivers/usb/host/ehci-sched.c