ueventd: move subsystem logic from code to ueventd.rc
Test: Boot bullhead
Test: Boot sailfish, observe no boot time regression
Test: init unit tests
Change-Id: I690137b584fcc2b9cd2dd932a2678f75a56d6737
diff --git a/init/devices.cpp b/init/devices.cpp
index 52f018b..4d63448 100644
--- a/init/devices.cpp
+++ b/init/devices.cpp
@@ -679,7 +679,6 @@
static void handle_generic_device_event(struct uevent *uevent)
{
- const char *base;
const char *name;
char devpath[DEVPATH_LEN] = {0};
@@ -735,39 +734,13 @@
/* ignore other USB events */
return;
}
- } else if (!strncmp(uevent->subsystem, "graphics", 8)) {
- base = "/dev/graphics/";
- make_dir(base, 0755);
- } else if (!strncmp(uevent->subsystem, "drm", 3)) {
- base = "/dev/dri/";
- make_dir(base, 0755);
- } else if (!strncmp(uevent->subsystem, "oncrpc", 6)) {
- base = "/dev/oncrpc/";
- make_dir(base, 0755);
- } else if (!strncmp(uevent->subsystem, "adsp", 4)) {
- base = "/dev/adsp/";
- make_dir(base, 0755);
- } else if (!strncmp(uevent->subsystem, "msm_camera", 10)) {
- base = "/dev/msm_camera/";
- make_dir(base, 0755);
- } else if(!strncmp(uevent->subsystem, "input", 5)) {
- base = "/dev/input/";
- make_dir(base, 0755);
- } else if(!strncmp(uevent->subsystem, "mtd", 3)) {
- base = "/dev/mtd/";
- make_dir(base, 0755);
- } else if(!strncmp(uevent->subsystem, "sound", 5)) {
- base = "/dev/snd/";
- make_dir(base, 0755);
- } else
- base = "/dev/";
- auto links = get_character_device_symlinks(uevent);
+ } else {
+ snprintf(devpath, sizeof(devpath), "/dev/%s", name);
+ }
- if (!devpath[0])
- snprintf(devpath, sizeof(devpath), "%s%s", base, name);
+ auto links = get_character_device_symlinks(uevent);
- handle_device(uevent->action, devpath, uevent->path, 0,
- uevent->major, uevent->minor, links);
+ handle_device(uevent->action, devpath, uevent->path, 0, uevent->major, uevent->minor, links);
}
static void handle_device_event(struct uevent *uevent)
diff --git a/rootdir/ueventd.rc b/rootdir/ueventd.rc
index 579ee32..1609ef2 100644
--- a/rootdir/ueventd.rc
+++ b/rootdir/ueventd.rc
@@ -1,5 +1,37 @@
subsystem adf
- devname uevent_devname
+ devname uevent_devname
+
+subsystem graphics
+ devname uevent_devpath
+ dirname /dev/graphics
+
+subsystem drm
+ devname uevent_devpath
+ dirname /dev/dri
+
+subsystem oncrpc
+ devname uevent_devpath
+ dirname /dev/oncrpc
+
+subsystem adsp
+ devname uevent_devpath
+ dirname /dev/adsp
+
+subsystem msm_camera
+ devname uevent_devpath
+ dirname /dev/msm_camera
+
+subsystem input
+ devname uevent_devpath
+ dirname /dev/input
+
+subsystem mtd
+ devname uevent_devpath
+ dirname /dev/mtd
+
+subsystem sound
+ devname uevent_devpath
+ dirname /dev/snd
# ueventd can only set permissions on device nodes and their associated
# sysfs attributes, not on arbitrary paths.