Loading arch/arm64/include/asm/app_api.h +5 −6 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 arch/arm64/kernel/app_setting.c +35 −15 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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); Loading kernel/sched/core.c +1 −5 Original line number Diff line number Diff line Loading @@ -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 } Loading mm/mmap.c +1 −22 Original line number Diff line number Diff line Loading @@ -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 /* Loading Loading
arch/arm64/include/asm/app_api.h +5 −6 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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
arch/arm64/kernel/app_setting.c +35 −15 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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); Loading
kernel/sched/core.c +1 −5 Original line number Diff line number Diff line Loading @@ -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 } Loading
mm/mmap.c +1 −22 Original line number Diff line number Diff line Loading @@ -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 /* Loading