From: Seung-Woo Kim Date: Mon, 25 Jan 2021 06:40:42 +0000 (+0900) Subject: amlogic: mm: Add aml_task_stack() in amlogic vmap X-Git-Tag: submit/tizen/20210204.012538~16 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e4fd24aeabed64cd82033a53f0ef130a07f2932d;p=platform%2Fkernel%2Flinux-amlogic.git amlogic: mm: Add aml_task_stack() in amlogic vmap In kerne, there are several places to get stack page address of task and when using AMLOGIC_VMAP, task_stack_page() does not return page address. Add aml_task_stack() to get task stack page for amlogic vmap. Change-Id: I64cd827f98bec74357227dcc3ed546807b5406e3 Signed-off-by: Seung-Woo Kim --- diff --git a/drivers/amlogic/memory_ext/vmap_stack.c b/drivers/amlogic/memory_ext/vmap_stack.c index 387fb805b496..7a9898361a9b 100644 --- a/drivers/amlogic/memory_ext/vmap_stack.c +++ b/drivers/amlogic/memory_ext/vmap_stack.c @@ -753,6 +753,22 @@ static void check_and_map_stack_shadow(unsigned long addr) } #endif +void *aml_task_stack(struct task_struct *tsk) +{ + unsigned long stack = (unsigned long)tsk->stack; + unsigned long addr; + struct page *page; + + if (unlikely(!is_vmap_addr(stack))) { + /* stack get from kmalloc, currently no method to get page */ + return NULL; + } + + addr = stack + STACK_TOP_PAGE_OFF; + page = vmalloc_to_page((const void *)addr); + return page ? page_address(page) : NULL; +} + void *aml_stack_alloc(int node, struct task_struct *tsk) { unsigned long bitmap_no, raw_start; diff --git a/include/linux/amlogic/vmap_stack.h b/include/linux/amlogic/vmap_stack.h index 9b1f86897ea8..419e908abe19 100644 --- a/include/linux/amlogic/vmap_stack.h +++ b/include/linux/amlogic/vmap_stack.h @@ -76,6 +76,7 @@ extern void __setup_vmap_stack(unsigned long off); extern void update_vmap_stack(int diff); extern int get_vmap_stack_size(void); extern int is_vmap_addr(unsigned long addr); +extern void *aml_task_stack(struct task_struct *tsk); extern void aml_stack_free(struct task_struct *tsk); extern void *aml_stack_alloc(int node, struct task_struct *tsk); extern void aml_account_task_stack(struct task_struct *tsk, int account);