init: failed to set sys.usb.controller
With GKI we find in certain situations the timing of the drivers loading is delayed as compared to a monolithic kernel. This introduces a race where during second stage init, the attributes inside /sys/class/udc/ might not be set by the time SetUsbController() is called. To address this, we also call SetUsbController() until the property sys.usb.controller is set at the bottom of the event loop. Signed-off-by: Mark Salyzyn <salyzyn@google.com> Bug: 151950334 Test: make sure user space fastbootd comes up reliably for a GKI kernel Change-Id: Iececd8ffa3e6641554d215d622d8dab72d85d34d
This commit is contained in:
parent
7937f29be8
commit
6fca594fc2
1 changed files with 6 additions and 2 deletions
|
|
@ -509,7 +509,9 @@ static Result<void> queue_property_triggers_action(const BuiltinArguments& args)
|
|||
// Set the UDC controller for the ConfigFS USB Gadgets.
|
||||
// Read the UDC controller in use from "/sys/class/udc".
|
||||
// In case of multiple UDC controllers select the first one.
|
||||
static void set_usb_controller() {
|
||||
static void SetUsbController() {
|
||||
static auto controller_set = false;
|
||||
if (controller_set) return;
|
||||
std::unique_ptr<DIR, decltype(&closedir)>dir(opendir("/sys/class/udc"), closedir);
|
||||
if (!dir) return;
|
||||
|
||||
|
|
@ -518,6 +520,7 @@ static void set_usb_controller() {
|
|||
if (dp->d_name[0] == '.') continue;
|
||||
|
||||
SetProperty("sys.usb.controller", dp->d_name);
|
||||
controller_set = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -772,7 +775,7 @@ int SecondStageMain(int argc, char** argv) {
|
|||
fs_mgr_vendor_overlay_mount_all();
|
||||
export_oem_lock_status();
|
||||
MountHandler mount_handler(&epoll);
|
||||
set_usb_controller();
|
||||
SetUsbController();
|
||||
|
||||
const BuiltinFunctionMap& function_map = GetBuiltinFunctionMap();
|
||||
Action::set_function_map(&function_map);
|
||||
|
|
@ -879,6 +882,7 @@ int SecondStageMain(int argc, char** argv) {
|
|||
}
|
||||
if (!IsShuttingDown()) {
|
||||
HandleControlMessages();
|
||||
SetUsbController();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue