Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 968b822c authored by Alan Stern's avatar Alan Stern Committed by Greg Kroah-Hartman
Browse files

USB: Remove the SAW_IRQ hcd flag



The HCD_FLAG_SAW_IRQ flag was introduced in order to catch IRQ routing
errors: If an URB was unlinked and the host controller hadn't gotten
any IRQs, it seemed likely that the IRQs were directed to the wrong
vector.

This warning hasn't come up in many years, as far as I know; interrupt
routing now seems to be well under control.  Therefore there's no
reason to keep the flag around any more.  This patch (as1495) finally
removes it.

Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 2c1ce2b3
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -271,7 +271,6 @@ static void c67x00_hcd_irq(struct c67x00_sie *sie, u16 int_status, u16 msg)
	if (int_status & SOFEOP_FLG(sie->sie_num)) {
		c67x00_ll_usb_clear_status(sie, SOF_EOP_IRQ_FLG);
		c67x00_sched_kick(c67x00);
		set_bit(HCD_FLAG_SAW_IRQ, &hcd->flags);
	}
}

+0 −4
Original line number Diff line number Diff line
@@ -453,10 +453,6 @@ static int resume_common(struct device *dev, int event)

	pci_set_master(pci_dev);

	clear_bit(HCD_FLAG_SAW_IRQ, &hcd->flags);
	if (hcd->shared_hcd)
		clear_bit(HCD_FLAG_SAW_IRQ, &hcd->shared_hcd->flags);

	if (hcd->driver->pci_resume && !HCD_DEAD(hcd)) {
		if (event != PM_EVENT_AUTO_RESUME)
			wait_for_companions(pci_dev, hcd);
+3 −21
Original line number Diff line number Diff line
@@ -1168,20 +1168,6 @@ int usb_hcd_check_unlink_urb(struct usb_hcd *hcd, struct urb *urb,
	if (urb->unlinked)
		return -EBUSY;
	urb->unlinked = status;

	/* IRQ setup can easily be broken so that USB controllers
	 * never get completion IRQs ... maybe even the ones we need to
	 * finish unlinking the initial failed usb_set_address()
	 * or device descriptor fetch.
	 */
	if (!HCD_SAW_IRQ(hcd) && !is_root_hub(urb->dev)) {
		dev_warn(hcd->self.controller, "Unlink after no-IRQ?  "
			"Controller is probably using the wrong IRQ.\n");
		set_bit(HCD_FLAG_SAW_IRQ, &hcd->flags);
		if (hcd->shared_hcd)
			set_bit(HCD_FLAG_SAW_IRQ, &hcd->shared_hcd->flags);
	}

	return 0;
}
EXPORT_SYMBOL_GPL(usb_hcd_check_unlink_urb);
@@ -2148,16 +2134,12 @@ irqreturn_t usb_hcd_irq (int irq, void *__hcd)
	 */
	local_irq_save(flags);

	if (unlikely(HCD_DEAD(hcd) || !HCD_HW_ACCESSIBLE(hcd))) {
	if (unlikely(HCD_DEAD(hcd) || !HCD_HW_ACCESSIBLE(hcd)))
		rc = IRQ_NONE;
	} else if (hcd->driver->irq(hcd) == IRQ_NONE) {
	else if (hcd->driver->irq(hcd) == IRQ_NONE)
		rc = IRQ_NONE;
	} else {
		set_bit(HCD_FLAG_SAW_IRQ, &hcd->flags);
		if (hcd->shared_hcd)
			set_bit(HCD_FLAG_SAW_IRQ, &hcd->shared_hcd->flags);
	else
		rc = IRQ_HANDLED;
	}

	local_irq_restore(flags);
	return rc;
+0 −1
Original line number Diff line number Diff line
@@ -776,7 +776,6 @@ static int hwahc_probe(struct usb_interface *usb_iface,
		goto error_alloc;
	}
	usb_hcd->wireless = 1;
	set_bit(HCD_FLAG_SAW_IRQ, &usb_hcd->flags);
	wusbhc = usb_hcd_to_wusbhc(usb_hcd);
	hwahc = container_of(wusbhc, struct hwahc, wusbhc);
	hwahc_init(hwahc);
+1 −11
Original line number Diff line number Diff line
@@ -2389,17 +2389,7 @@ hw_died:

irqreturn_t xhci_msi_irq(int irq, struct usb_hcd *hcd)
{
	irqreturn_t ret;
	struct xhci_hcd *xhci;

	xhci = hcd_to_xhci(hcd);
	set_bit(HCD_FLAG_SAW_IRQ, &hcd->flags);
	if (xhci->shared_hcd)
		set_bit(HCD_FLAG_SAW_IRQ, &xhci->shared_hcd->flags);

	ret = xhci_irq(hcd);

	return ret;
	return xhci_irq(hcd);
}

/****		Endpoint Ring Operations	****/
Loading