diff --git a/libcutils/sched_policy.c b/libcutils/sched_policy.c index 46bd5ac19..e89998a9c 100644 --- a/libcutils/sched_policy.c +++ b/libcutils/sched_policy.c @@ -61,6 +61,7 @@ static int bg_cgroup_fd = -1; static int fg_cgroup_fd = -1; // File descriptors open to /dev/cpuset/../tasks, setup by initialize, or -1 on error +static int system_bg_cpuset_fd = -1; static int bg_cpuset_fd = -1; static int fg_cpuset_fd = -1; static int bg_schedboost_fd = -1; @@ -128,6 +129,11 @@ static void __initialize(void) { fg_cpuset_fd = open(filename, O_WRONLY | O_CLOEXEC); filename = "/dev/cpuset/background/tasks"; bg_cpuset_fd = open(filename, O_WRONLY | O_CLOEXEC); + filename = "/dev/cpuset/system-background/tasks"; + system_bg_cpuset_fd = open(filename, O_WRONLY | O_CLOEXEC); + if (system_bg_cpuset_fd < 0) { + SLOGE("initialize of system-bg failed: %s\n", strerror(errno)); + } #ifdef USE_SCHEDBOOST filename = "/sys/fs/cgroup/stune/foreground/tasks"; fg_schedboost_fd = open(filename, O_WRONLY | O_CLOEXEC); @@ -271,6 +277,9 @@ int set_cpuset_policy(int tid, SchedPolicy policy) fd = fg_cpuset_fd; boost_fd = fg_schedboost_fd; break; + case SP_SYSTEM: + fd = system_bg_cpuset_fd; + break; default: boost_fd = fd = -1; break; diff --git a/rootdir/init.rc b/rootdir/init.rc index b8df64789..92d34d9d0 100644 --- a/rootdir/init.rc +++ b/rootdir/init.rc @@ -174,6 +174,9 @@ on init chown system system /dev/cpuset/foreground/boost/tasks chown system system /dev/cpuset/background/tasks chown system system /dev/cpuset/system-background/tasks + + # set system-background to 0775 so SurfaceFlinger can touch it + chmod 0775 /dev/cpuset/system-background chmod 0664 /dev/cpuset/foreground/tasks chmod 0664 /dev/cpuset/foreground/boost/tasks chmod 0664 /dev/cpuset/background/tasks @@ -652,7 +655,6 @@ service surfaceflinger /system/bin/surfaceflinger user system group graphics drmrpc onrestart restart zygote - writepid /sys/fs/cgroup/stune/foreground/tasks /dev/cpuset/system-background/tasks service drm /system/bin/drmserver class main