arm64: Remove the get_thread_info() function
authorCatalin Marinas <catalin.marinas@arm.com>
Thu, 18 Feb 2016 15:50:04 +0000 (15:50 +0000)
committerAlex Shi <alex.shi@linaro.org>
Wed, 11 May 2016 14:19:24 +0000 (22:19 +0800)
This function was introduced by previous commits implementing UAO.
However, it can be replaced with task_thread_info() in
uao_thread_switch() or get_fs() in do_page_fault() (the latter being
called only on the current context, so no need for using the saved
pt_regs).

Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
(cherry picked from commit e950631e84e7e38892ffbeee5e1816b270026b0e)
Signed-off-by: Alex Shi <alex.shi@linaro.org>
arch/arm64/include/asm/thread_info.h
arch/arm64/kernel/process.c
arch/arm64/mm/fault.c

index eba8db6838af6202af7dbc9678d06f43fc8e8a4a..abd64bd1f6d9f0160a3122555cf23be1a30f87eb 100644 (file)
@@ -85,12 +85,6 @@ static inline struct thread_info *current_thread_info(void)
        return (struct thread_info *)sp_el0;
 }
 
-/* Access struct thread_info of another thread */
-static inline struct thread_info *get_thread_info(unsigned long thread_stack)
-{
-       return (struct thread_info *)(thread_stack & ~(THREAD_SIZE - 1));
-}
-
 #define thread_saved_pc(tsk)   \
        ((unsigned long)(tsk->thread.cpu_context.pc))
 #define thread_saved_sp(tsk)   \
index c1ca4ea065d41d5157ae0c8ab31b017534a117af..80624829db613961b7a088ce18d8591361b448c7 100644 (file)
@@ -315,15 +315,12 @@ static void tls_thread_switch(struct task_struct *next)
 /* Restore the UAO state depending on next's addr_limit */
 static void uao_thread_switch(struct task_struct *next)
 {
-       unsigned long next_sp = next->thread.cpu_context.sp;
-
-       if (IS_ENABLED(CONFIG_ARM64_UAO) &&
-           get_thread_info(next_sp)->addr_limit == KERNEL_DS)
-               asm(ALTERNATIVE("nop", SET_PSTATE_UAO(1), ARM64_HAS_UAO,
-                               CONFIG_ARM64_UAO));
-       else
-               asm(ALTERNATIVE("nop", SET_PSTATE_UAO(0), ARM64_HAS_UAO,
-                               CONFIG_ARM64_UAO));
+       if (IS_ENABLED(CONFIG_ARM64_UAO)) {
+               if (task_thread_info(next)->addr_limit == KERNEL_DS)
+                       asm(ALTERNATIVE("nop", SET_PSTATE_UAO(1), ARM64_HAS_UAO));
+               else
+                       asm(ALTERNATIVE("nop", SET_PSTATE_UAO(0), ARM64_HAS_UAO));
+       }
 }
 
 /*
index d0762a729d01ff62c9f73ee9fb3fcca35bf01ed4..a8eafeceb08a5ac5cb7b16965896dfcd4ca4b933 100644 (file)
@@ -234,7 +234,7 @@ static int __kprobes do_page_fault(unsigned long addr, unsigned int esr,
        }
 
        if (permission_fault(esr) && (addr < USER_DS)) {
-               if (get_thread_info(regs->sp)->addr_limit == KERNEL_DS)
+               if (get_fs() == KERNEL_DS)
                        panic("Accessing user space memory with fs=KERNEL_DS");
 
                if (!search_exception_tables(regs->pc))