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

Commit 6789e4b7 authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman
Browse files

Revert "usb: core: hcd: Add support for deferring roothub registration"



This reverts commit 20c9fdde which is
commit 58877b0824da15698bd85a0a9dbfa8c354e6ecb7 upstream.

It has been reported to be causing problems in Arch and Fedora bug
reports.

Reported-by: default avatarHans de Goede <hdegoede@redhat.com>
Link: https://bbs.archlinux.org/viewtopic.php?pid=2000956#p2000956
Link: https://bugzilla.redhat.com/show_bug.cgi?id=2019542
Link: https://bugzilla.redhat.com/show_bug.cgi?id=2019576
Link: https://lore.kernel.org/r/42bcbea6-5eb8-16c7-336a-2cb72e71bc36@redhat.com


Cc: Mathias Nyman <mathias.nyman@linux.intel.com>
Cc: Chris Chiu <chris.chiu@canonical.com>
Cc: Alan Stern <stern@rowland.harvard.edu>
Cc: Kishon Vijay Abraham I <kishon@ti.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 04984949
Loading
Loading
Loading
Loading
+6 −23
Original line number Diff line number Diff line
@@ -2636,7 +2636,6 @@ int usb_add_hcd(struct usb_hcd *hcd,
{
	int retval;
	struct usb_device *rhdev;
	struct usb_hcd *shared_hcd;

	if (!hcd->skip_phy_initialization && usb_hcd_is_primary_hcd(hcd)) {
		hcd->phy_roothub = usb_phy_roothub_alloc(hcd->self.sysdev);
@@ -2793,26 +2792,13 @@ int usb_add_hcd(struct usb_hcd *hcd,
		goto err_hcd_driver_start;
	}

	/* starting here, usbcore will pay attention to the shared HCD roothub */
	shared_hcd = hcd->shared_hcd;
	if (!usb_hcd_is_primary_hcd(hcd) && shared_hcd && HCD_DEFER_RH_REGISTER(shared_hcd)) {
		retval = register_root_hub(shared_hcd);
		if (retval != 0)
			goto err_register_root_hub;

		if (shared_hcd->uses_new_polling && HCD_POLL_RH(shared_hcd))
			usb_hcd_poll_rh_status(shared_hcd);
	}

	/* starting here, usbcore will pay attention to this root hub */
	if (!HCD_DEFER_RH_REGISTER(hcd)) {
	retval = register_root_hub(hcd);
	if (retval != 0)
		goto err_register_root_hub;

	if (hcd->uses_new_polling && HCD_POLL_RH(hcd))
		usb_hcd_poll_rh_status(hcd);
	}

	return retval;

@@ -2855,7 +2841,6 @@ EXPORT_SYMBOL_GPL(usb_add_hcd);
void usb_remove_hcd(struct usb_hcd *hcd)
{
	struct usb_device *rhdev = hcd->self.root_hub;
	bool rh_registered;

	dev_info(hcd->self.controller, "remove, state %x\n", hcd->state);

@@ -2866,7 +2851,6 @@ void usb_remove_hcd(struct usb_hcd *hcd)

	dev_dbg(hcd->self.controller, "roothub graceful disconnect\n");
	spin_lock_irq (&hcd_root_hub_lock);
	rh_registered = hcd->rh_registered;
	hcd->rh_registered = 0;
	spin_unlock_irq (&hcd_root_hub_lock);

@@ -2876,7 +2860,6 @@ void usb_remove_hcd(struct usb_hcd *hcd)
	cancel_work_sync(&hcd->died_work);

	mutex_lock(&usb_bus_idr_lock);
	if (rh_registered)
	usb_disconnect(&rhdev);		/* Sets rhdev to NULL */
	mutex_unlock(&usb_bus_idr_lock);

+0 −2
Original line number Diff line number Diff line
@@ -124,7 +124,6 @@ struct usb_hcd {
#define HCD_FLAG_RH_RUNNING		5	/* root hub is running? */
#define HCD_FLAG_DEAD			6	/* controller has died? */
#define HCD_FLAG_INTF_AUTHORIZED	7	/* authorize interfaces? */
#define HCD_FLAG_DEFER_RH_REGISTER	8	/* Defer roothub registration */

	/* The flags can be tested using these macros; they are likely to
	 * be slightly faster than test_bit().
@@ -135,7 +134,6 @@ struct usb_hcd {
#define HCD_WAKEUP_PENDING(hcd)	((hcd)->flags & (1U << HCD_FLAG_WAKEUP_PENDING))
#define HCD_RH_RUNNING(hcd)	((hcd)->flags & (1U << HCD_FLAG_RH_RUNNING))
#define HCD_DEAD(hcd)		((hcd)->flags & (1U << HCD_FLAG_DEAD))
#define HCD_DEFER_RH_REGISTER(hcd) ((hcd)->flags & (1U << HCD_FLAG_DEFER_RH_REGISTER))

	/*
	 * Specifies if interfaces are authorized by default