The action of registering a new hub can itself happen in only two
ways: either a new USB hub has been created (in which case we are
already inside a call to usb_hotplug()), or a new root hub has been
created.
In the former case, we do not need to issue a further call to
usb_hotplug(), since the hub's ports will all be marked as changed and
so will be handled after the return from register_usb_hub() anyway.
Calling usb_hotplug() within register_usb_hub() leads to a confusing
order of events, such as:
- root hub port 1 detects a change
- root hub port 2 detects a change
- usb_hotplug() is called
- root hub port 1 finds a USB hub
- usb_hotplug() is called
- this inner call to usb_hotplug() handles root hub port 2
Fix by calling usb_hotplug() only from usb_step() and from
register_usb_bus(). This avoids recursive calls to usb_hotplug() and
ensures that devices are enumerated in the order of detection.
Tested-by: Robin Smidsrød <robin@smidsrod.no>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
tags/v1.20.1
|
|
||
| 1779 |
|
1779 |
|
| 1780 |
|
1780 |
|
| 1781 |
|
1781 |
|
| 1782 |
|
|
|
| 1783 |
|
|
|
| 1784 |
|
|
|
| 1785 |
|
1782 |
|
| 1786 |
|
1783 |
|
| 1787 |
|
1784 |
|
|
|
||
| 1915 |
|
1912 |
|
| 1916 |
|
1913 |
|
| 1917 |
|
1914 |
|
|
1915 |
|
|
|
1916 |
|
|
|
1917 |
|
|
| 1918 |
|
1918 |
|
| 1919 |
|
1919 |
|
| 1920 |
|
1920 |
|