/* note:  always a synchronous unlink */ if ((unsigned long) urb == hcd->rh_timer.data) { del_timer_sync (&hcd->rh_timer); hcd->rh_timer.data = 0;  local_irq_save (flags); urb->hcpriv = NULL; usb_hcd_giveback_urb (hcd, urb, NULL); local_irq_restore (flags);  } else if (usb_pipeendpoint(urb->pipe) == 0) { 
static int usb_rh_urb_dequeue (struct usb_hcd *hcd, struct urb *urb){	unsigned long	flags;	/* note:  always a synchronous unlink */	if ((unsigned long) urb == hcd->rh_timer.data) {		del_timer_sync (&hcd->rh_timer);		hcd->rh_timer.data = 0;		local_irq_save (flags);		urb->hcpriv = NULL;		usb_hcd_giveback_urb (hcd, urb, NULL);		local_irq_restore (flags);	} else if (usb_pipeendpoint(urb->pipe) == 0) {		spin_lock_irq(&urb->lock);	/* from usb_kill_urb */		++urb->reject;		spin_unlock_irq(&urb->lock);		wait_event(usb_kill_urb_queue,				atomic_read(&urb->use_count) == 0);		spin_lock_irq(&urb->lock);		--urb->reject;		spin_unlock_irq(&urb->lock);	} else		return -EINVAL;	return 0;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/d5926ae7a827bdd06b588ffbc56fd4525cd9214a/hcd.c/buggy/drivers/usb/core/hcd.c