diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index e708abf0c55d..d7e325c0883f 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -229,4 +229,4 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_read_done); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_preset); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alloc_uid); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_free_user); - +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_cpuset_fork); diff --git a/include/trace/hooks/cgroup.h b/include/trace/hooks/cgroup.h index b8510d6d7e58..51cc0340912c 100644 --- a/include/trace/hooks/cgroup.h +++ b/include/trace/hooks/cgroup.h @@ -24,6 +24,10 @@ DECLARE_RESTRICTED_HOOK(android_rvh_cgroup_force_kthread_migration, struct cgroup_taskset; struct cgroup_subsys; +DECLARE_RESTRICTED_HOOK(android_rvh_cpuset_fork, + TP_PROTO(struct task_struct *p, bool *inherit_cpus), + TP_ARGS(p, inherit_cpus), 1); + DECLARE_RESTRICTED_HOOK(android_rvh_cpu_cgroup_attach, TP_PROTO(struct cgroup_taskset *tset), TP_ARGS(tset), 1); diff --git a/kernel/cgroup/cpuset.c b/kernel/cgroup/cpuset.c index b7f5ad665149..a29cfcc92fb2 100644 --- a/kernel/cgroup/cpuset.c +++ b/kernel/cgroup/cpuset.c @@ -67,6 +67,8 @@ #include #include +#include + DEFINE_STATIC_KEY_FALSE(cpusets_pre_enable_key); DEFINE_STATIC_KEY_FALSE(cpusets_enabled_key); @@ -3315,18 +3317,18 @@ static void cpuset_cancel_fork(struct task_struct *task, struct css_set *cset) static void cpuset_fork(struct task_struct *task) { struct cpuset *cs; - bool same_cs; + bool same_cs, inherit_cpus = false; rcu_read_lock(); cs = task_cs(task); same_cs = (cs == task_cs(current)); rcu_read_unlock(); - if (same_cs) { if (cs == &top_cpuset) return; - - set_cpus_allowed_ptr(task, current->cpus_ptr); + trace_android_rvh_cpuset_fork(task, &inherit_cpus); + if (!inherit_cpus) + set_cpus_allowed_ptr(task, current->cpus_ptr); task->mems_allowed = current->mems_allowed; return; }