} 
} 
) __releases(sl811->lock) __acquires(sl811->lock){	unsigned		i;	if (usb_pipecontrol(urb->pipe))		ep->nextpid = USB_PID_SETUP;	spin_lock(&urb->lock);	if (urb->status == -EINPROGRESS)		urb->status = status;	spin_unlock(&urb->lock);	spin_unlock(&sl811->lock);	usb_hcd_giveback_urb(sl811_to_hcd(sl811), urb, regs);	spin_lock(&sl811->lock);	/* leave active endpoints in the schedule */	if (!list_empty(&ep->hep->urb_list))		return;	/* async deschedule? */	if (!list_empty(&ep->schedule)) {		list_del_init(&ep->schedule);		if (ep == sl811->next_async)			sl811->next_async = NULL;		return;	}	/* periodic deschedule */	DBG("deschedule qh%d/%p branch %d\n", ep->period, ep, ep->branch);	for (i = ep->branch; i < PERIODIC_SIZE; i += ep->period) {		struct sl811h_ep	*temp;		struct sl811h_ep	**prev = &sl811->periodic[i];		while (*prev && ((temp = *prev) != ep))			prev = &temp->next;		if (*prev)			*prev = ep->next;		sl811->load[i] -= ep->load;	}		ep->branch = PERIODIC_SIZE;	sl811->periodic_count--;	sl811_to_hcd(sl811)->self.bandwidth_allocated		-= ep->load / ep->period;	if (ep == sl811->next_periodic)		sl811->next_periodic = ep->next;	/* we might turn SOFs back on again for the async schedule */	if (sl811->periodic_count == 0)		sofirq_off(sl811);}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/1e9a47b62f7daf5a94fdd74a94dd4e076f44909a/sl811-hcd.c/buggy/drivers/usb/host/sl811-hcd.c