Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9cf6ae20 authored by Wei Wang's avatar Wei Wang Committed by Pranav Vashi
Browse files

Revert "sched/core: fix userspace affining threads incorrectly"



This reverts commit d43b69c4.

Bug:133481659
Test: build
Change-Id: I615023c611c4de1eb334e4374af7306991f4216b
Signed-off-by: default avatarWei Wang <wvw@google.com>
Signed-off-by: default avatarPranav Vashi <neobuddy89@gmail.com>
parent 83ad6586
Loading
Loading
Loading
Loading
+0 −1
Original line number Original line Diff line number Diff line
@@ -1978,7 +1978,6 @@ static inline void set_task_cpu(struct task_struct *p, unsigned int cpu)
# define vcpu_is_preempted(cpu)	false
# define vcpu_is_preempted(cpu)	false
#endif
#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_setaffinity(pid_t pid, const struct cpumask *new_mask);
extern long sched_getaffinity(pid_t pid, struct cpumask *mask);
extern long sched_getaffinity(pid_t pid, struct cpumask *mask);


+0 −5
Original line number Original line Diff line number Diff line
@@ -135,9 +135,4 @@ extern int sched_little_cluster_coloc_fmin_khz_handler(struct ctl_table *table,
					size_t *lenp, loff_t *ppos);
					size_t *lenp, loff_t *ppos);
#endif
#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 */
#endif /* _LINUX_SCHED_SYSCTL_H */
+1 −1
Original line number Original line Diff line number Diff line
@@ -334,7 +334,7 @@ COMPAT_SYSCALL_DEFINE3(sched_setaffinity, compat_pid_t, pid,
	if (retval)
	if (retval)
		goto out;
		goto out;


	retval = msm_sched_setaffinity(pid, new_mask);
	retval = sched_setaffinity(pid, new_mask);
out:
out:
	free_cpumask_var(new_mask);
	free_cpumask_var(new_mask);
	return retval;
	return retval;
+1 −66
Original line number Original line Diff line number Diff line
@@ -5057,71 +5057,6 @@ long sched_setaffinity(pid_t pid, const struct cpumask *in_mask)
	return retval;
	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,
static int get_user_cpu_mask(unsigned long __user *user_mask_ptr, unsigned len,
			     struct cpumask *new_mask)
			     struct cpumask *new_mask)
{
{
@@ -5152,7 +5087,7 @@ SYSCALL_DEFINE3(sched_setaffinity, pid_t, pid, unsigned int, len,


	retval = get_user_cpu_mask(user_mask_ptr, len, new_mask);
	retval = get_user_cpu_mask(user_mask_ptr, len, new_mask);
	if (retval == 0)
	if (retval == 0)
		retval = msm_sched_setaffinity(pid, new_mask);
		retval = sched_setaffinity(pid, new_mask);
	free_cpumask_var(new_mask);
	free_cpumask_var(new_mask);
	return retval;
	return retval;
}
}
+0 −26
Original line number Original line Diff line number Diff line
@@ -146,7 +146,6 @@ static int ten_thousand = 10000;
#ifdef CONFIG_PERF_EVENTS
#ifdef CONFIG_PERF_EVENTS
static int six_hundred_forty_kb = 640 * 1024;
static int six_hundred_forty_kb = 640 * 1024;
#endif
#endif
static int two_hundred_fifty_five = 255;


/* this is needed for the proc_doulongvec_minmax of vm_dirty_bytes */
/* this is needed for the proc_doulongvec_minmax of vm_dirty_bytes */
static unsigned long dirty_bytes_min = 2 * PAGE_SIZE;
static unsigned long dirty_bytes_min = 2 * PAGE_SIZE;
@@ -657,31 +656,6 @@ static struct ctl_table kern_table[] = {
		.extra1		= &one,
		.extra1		= &one,
	},
	},
#endif
#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
#ifdef CONFIG_PROVE_LOCKING
	{
	{
		.procname	= "prove_locking",
		.procname	= "prove_locking",