From d0612f906d565c2cd416d095405677d11384ec36 Mon Sep 17 00:00:00 2001 From: amtz <1207020+amtz@users.noreply.github.com> Date: Mon, 2 Aug 2021 12:55:40 +0200 Subject: [PATCH] Limit udev device scan to subsystem 'input' This change makes the call to 'udev_enumerate_scan_devices' much faster. In particular, for some bluetooth devices, this function may implicitly read its battery's virtual file 'uevent', e.g. /sys/devices/*/usb1/1-1/*/bluetooth/hci0/*/power_supply/hid-*-battery/uevent Reading this file may (for unknown reasons) block up to 10 seconds. Since udev_enumerate_scan_devices is called 4 times (for keyboard, mouse, touchpad, and joypad) during startup this may cause a considerable delay. Limiting the scan to subsystem 'input' yields the same devices but makes the scan faster and does not read 'uevent' of the input controller's power_supply. --- input/drivers/udev_input.c | 1 + input/drivers_joypad/udev_joypad.c | 1 + 2 files changed, 2 insertions(+) diff --git a/input/drivers/udev_input.c b/input/drivers/udev_input.c index 979425f69c..36409fc6bf 100644 --- a/input/drivers/udev_input.c +++ b/input/drivers/udev_input.c @@ -1234,6 +1234,7 @@ static bool open_devices(udev_input_t *udev, return false; udev_enumerate_add_match_property(enumerate, type_str, "1"); + udev_enumerate_add_match_subsystem(enumerate, "input"); udev_enumerate_scan_devices(enumerate); devs = udev_enumerate_get_list_entry(enumerate); diff --git a/input/drivers_joypad/udev_joypad.c b/input/drivers_joypad/udev_joypad.c index 4b985f1953..bac970fb5d 100644 --- a/input/drivers_joypad/udev_joypad.c +++ b/input/drivers_joypad/udev_joypad.c @@ -574,6 +574,7 @@ static void *udev_joypad_init(void *data) goto error; udev_enumerate_add_match_property(enumerate, "ID_INPUT_JOYSTICK", "1"); + udev_enumerate_add_match_subsystem(enumerate, "input"); udev_enumerate_scan_devices(enumerate); devs = udev_enumerate_get_list_entry(enumerate);