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

Commit 07ccd0c1 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: Use dedicated functions for app_setting bit manipulation"

parents 791b1c78 e746c583
Loading
Loading
Loading
Loading
+5 −6
Original line number Diff line number Diff line
@@ -14,6 +14,8 @@
#define __ASM_APP_API_H

#include <linux/types.h>
#include <linux/sched.h>
#include <linux/fs.h>

#define APP_SETTING_BIT		30
#define MAX_ENTRIES		10
@@ -31,12 +33,9 @@ static inline void clear_app_setting_bit(uint32_t bit) {}
#endif

#ifdef CONFIG_MSM_APP_SETTINGS
extern void get_lib_names(char *names[], unsigned int *cnt);
#else
static inline void get_lib_names(char *names[], unsigned int *cnt)
{
	*cnt = 0;
}
extern void switch_app_setting_bit(struct task_struct *prev,
				   struct task_struct *next);
extern void apply_app_setting_bit(struct file *file);
#endif

#endif
+35 −15
Original line number Diff line number Diff line
@@ -31,21 +31,6 @@ static struct kparam_string kps = {
static int set_name(const char *str, struct kernel_param *kp);
module_param_call(lib_name, set_name, param_get_string, &kps, S_IWUSR);

void get_lib_names(char *names[], unsigned int *cnt)
{
	int i;

	/*
	 * set_name is expected to be called before we
	 * access lib_names and count variable here for
	 * specific processes.
	 */
	*cnt = count;
	for (i = 0; i < count; i++)
		names[i] = lib_names[i];
}
EXPORT_SYMBOL(get_lib_names);

static int set_name(const char *str, struct kernel_param *kp)
{
	int len = strlen(str);
@@ -88,6 +73,41 @@ static int set_name(const char *str, struct kernel_param *kp)
	return 0;
}

void switch_app_setting_bit(struct task_struct *prev, struct task_struct *next)
{
	if (prev->mm && unlikely(prev->mm->app_setting))
		clear_app_setting_bit(APP_SETTING_BIT);

	if (next->mm && unlikely(next->mm->app_setting))
		set_app_setting_bit(APP_SETTING_BIT);
}
EXPORT_SYMBOL(switch_app_setting_bit);

void apply_app_setting_bit(struct file *file)
{
	bool found = false;
	int i;

	if (file && file->f_path.dentry) {
		const char *name = file->f_path.dentry->d_name.name;

		for (i = 0; i < count; i++) {
			if (unlikely(!strcmp(name, lib_names[i]))) {
				found = true;
				break;
			}
		}
		if (found) {
			preempt_disable();
			set_app_setting_bit(APP_SETTING_BIT);
			/* This will take care of child processes as well */
			current->mm->app_setting = 1;
			preempt_enable();
		}
	}
}
EXPORT_SYMBOL(apply_app_setting_bit);

static int __init app_setting_init(void)
{
	mutex_init(&mutex);
+1 −5
Original line number Diff line number Diff line
@@ -5043,11 +5043,7 @@ prepare_task_switch(struct rq *rq, struct task_struct *prev,
	prepare_arch_switch(next);

#ifdef CONFIG_MSM_APP_SETTINGS
	if (prev->mm && unlikely(prev->mm->app_setting))
		clear_app_setting_bit(APP_SETTING_BIT);

	if (next->mm && unlikely(next->mm->app_setting))
		set_app_setting_bit(APP_SETTING_BIT);
	switch_app_setting_bit(prev, next);
#endif
}

+1 −22
Original line number Diff line number Diff line
@@ -1281,28 +1281,7 @@ unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
	*populate = 0;

#ifdef CONFIG_MSM_APP_SETTINGS
	if (file && file->f_path.dentry) {
		const char *name = file->f_path.dentry->d_name.name;
		char *libs[10] = {0};
		unsigned int count;
		bool found = false;
		int i;

		get_lib_names(libs, &count);
		for (i = 0; i < count; i++) {
			if (unlikely(!strcmp(name, libs[i]))) {
				found = true;
				break;
			}
		}
		if (found) {
			preempt_disable();
			set_app_setting_bit(APP_SETTING_BIT);
			/* This will take care of child processes as well */
			current->mm->app_setting = 1;
			preempt_enable();
		}
	}
	apply_app_setting_bit(file);
#endif

	/*