Revert "sched/core: fix userspace affining threads incorrectly"
This reverts commit d43b69c4ad.
Bug:133481659
Test: build
Change-Id: I615023c611c4de1eb334e4374af7306991f4216b
Signed-off-by: Wei Wang <wvw@google.com>
This commit is contained in:
@@ -1968,7 +1968,6 @@ static inline void set_task_cpu(struct task_struct *p, unsigned int cpu)
|
||||
# define vcpu_is_preempted(cpu) false
|
||||
#endif
|
||||
|
||||
extern long msm_sched_setaffinity(pid_t pid, struct cpumask *new_mask);
|
||||
extern long sched_setaffinity(pid_t pid, const struct cpumask *new_mask);
|
||||
extern long sched_getaffinity(pid_t pid, struct cpumask *mask);
|
||||
|
||||
|
||||
@@ -134,9 +134,4 @@ extern int sched_little_cluster_coloc_fmin_khz_handler(struct ctl_table *table,
|
||||
size_t *lenp, loff_t *ppos);
|
||||
#endif
|
||||
|
||||
#define LIB_PATH_LENGTH 512
|
||||
extern char sched_lib_name[LIB_PATH_LENGTH];
|
||||
extern unsigned int sched_lib_mask_check;
|
||||
extern unsigned int sched_lib_mask_force;
|
||||
|
||||
#endif /* _LINUX_SCHED_SYSCTL_H */
|
||||
|
||||
@@ -334,7 +334,7 @@ COMPAT_SYSCALL_DEFINE3(sched_setaffinity, compat_pid_t, pid,
|
||||
if (retval)
|
||||
goto out;
|
||||
|
||||
retval = msm_sched_setaffinity(pid, new_mask);
|
||||
retval = sched_setaffinity(pid, new_mask);
|
||||
out:
|
||||
free_cpumask_var(new_mask);
|
||||
return retval;
|
||||
|
||||
@@ -4935,71 +4935,6 @@ out_put_task:
|
||||
return retval;
|
||||
}
|
||||
|
||||
char sched_lib_name[LIB_PATH_LENGTH];
|
||||
unsigned int sched_lib_mask_check;
|
||||
unsigned int sched_lib_mask_force;
|
||||
static inline bool is_sched_lib_based_app(pid_t pid)
|
||||
{
|
||||
const char *name = NULL;
|
||||
struct vm_area_struct *vma;
|
||||
char path_buf[LIB_PATH_LENGTH];
|
||||
bool found = false;
|
||||
struct task_struct *p;
|
||||
|
||||
if (strnlen(sched_lib_name, LIB_PATH_LENGTH) == 0)
|
||||
return false;
|
||||
|
||||
rcu_read_lock();
|
||||
|
||||
p = find_process_by_pid(pid);
|
||||
if (!p) {
|
||||
rcu_read_unlock();
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Prevent p going away */
|
||||
get_task_struct(p);
|
||||
rcu_read_unlock();
|
||||
|
||||
if (!p->mm)
|
||||
goto put_task_struct;
|
||||
|
||||
down_read(&p->mm->mmap_sem);
|
||||
for (vma = p->mm->mmap; vma ; vma = vma->vm_next) {
|
||||
if (vma->vm_file && vma->vm_flags & VM_EXEC) {
|
||||
name = d_path(&vma->vm_file->f_path,
|
||||
path_buf, LIB_PATH_LENGTH);
|
||||
if (IS_ERR(name))
|
||||
goto release_sem;
|
||||
|
||||
if (strnstr(name, sched_lib_name,
|
||||
strnlen(name, LIB_PATH_LENGTH))) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
release_sem:
|
||||
up_read(&p->mm->mmap_sem);
|
||||
put_task_struct:
|
||||
put_task_struct(p);
|
||||
return found;
|
||||
}
|
||||
|
||||
long msm_sched_setaffinity(pid_t pid, struct cpumask *new_mask)
|
||||
{
|
||||
if (sched_lib_mask_check != 0 && sched_lib_mask_force != 0 &&
|
||||
(cpumask_bits(new_mask)[0] == sched_lib_mask_check) &&
|
||||
is_sched_lib_based_app(pid)) {
|
||||
|
||||
cpumask_t forced_mask = { {sched_lib_mask_force} };
|
||||
|
||||
cpumask_copy(new_mask, &forced_mask);
|
||||
}
|
||||
return sched_setaffinity(pid, new_mask);
|
||||
}
|
||||
|
||||
static int get_user_cpu_mask(unsigned long __user *user_mask_ptr, unsigned len,
|
||||
struct cpumask *new_mask)
|
||||
{
|
||||
@@ -5030,7 +4965,7 @@ SYSCALL_DEFINE3(sched_setaffinity, pid_t, pid, unsigned int, len,
|
||||
|
||||
retval = get_user_cpu_mask(user_mask_ptr, len, new_mask);
|
||||
if (retval == 0)
|
||||
retval = msm_sched_setaffinity(pid, new_mask);
|
||||
retval = sched_setaffinity(pid, new_mask);
|
||||
free_cpumask_var(new_mask);
|
||||
return retval;
|
||||
}
|
||||
|
||||
@@ -149,7 +149,6 @@ static int ten_thousand = 10000;
|
||||
#ifdef CONFIG_PERF_EVENTS
|
||||
static int six_hundred_forty_kb = 640 * 1024;
|
||||
#endif
|
||||
static int two_hundred_fifty_five = 255;
|
||||
|
||||
/* this is needed for the proc_doulongvec_minmax of vm_dirty_bytes */
|
||||
static unsigned long dirty_bytes_min = 2 * PAGE_SIZE;
|
||||
@@ -651,31 +650,6 @@ static struct ctl_table kern_table[] = {
|
||||
.extra1 = &one,
|
||||
},
|
||||
#endif
|
||||
{
|
||||
.procname = "sched_lib_name",
|
||||
.data = sched_lib_name,
|
||||
.maxlen = LIB_PATH_LENGTH,
|
||||
.mode = 0644,
|
||||
.proc_handler = proc_dostring,
|
||||
},
|
||||
{
|
||||
.procname = "sched_lib_mask_check",
|
||||
.data = &sched_lib_mask_check,
|
||||
.maxlen = sizeof(unsigned int),
|
||||
.mode = 0644,
|
||||
.proc_handler = proc_douintvec_minmax,
|
||||
.extra1 = &zero,
|
||||
.extra2 = &two_hundred_fifty_five,
|
||||
},
|
||||
{
|
||||
.procname = "sched_lib_mask_force",
|
||||
.data = &sched_lib_mask_force,
|
||||
.maxlen = sizeof(unsigned int),
|
||||
.mode = 0644,
|
||||
.proc_handler = proc_douintvec_minmax,
|
||||
.extra1 = &zero,
|
||||
.extra2 = &two_hundred_fifty_five,
|
||||
},
|
||||
#ifdef CONFIG_PROVE_LOCKING
|
||||
{
|
||||
.procname = "prove_locking",
|
||||
|
||||
Reference in New Issue
Block a user