ARM64: add support aarch64 mode to kmem_info_fill() 12/112212/3
authorVyacheslav Cherkashin <v.cherkashin@samsung.com>
Fri, 27 Jan 2017 17:11:00 +0000 (20:11 +0300)
committerVyacheslav Cherkashin <v.cherkashin@samsung.com>
Tue, 31 Jan 2017 07:21:27 +0000 (10:21 +0300)
Change-Id: I521c3099861cf9fcd0b4b738dda06cceba421ef4
Signed-off-by: Vyacheslav Cherkashin <v.cherkashin@samsung.com>
parser/usm_msg.c

index ce4193a..71009ac 100644 (file)
@@ -45,34 +45,43 @@ struct kmem_info {
        unsigned long end;
 };
 
-static void kmem_info_fill(struct kmem_info *info, struct mm_struct *mm)
+#if defined(CONFIG_ARM64) || defined(CONFIG_X86_32)
+static void kmem_info_fill_common(struct kmem_info *info, struct task_struct *task)
 {
-#if defined(CONFIG_ARM)
-       info->name = "[vectors]";
-       info->start = CONFIG_VECTORS_BASE;
-       info->end = CONFIG_VECTORS_BASE + PAGE_SIZE;
-#elif defined(CONFIG_ARM64)
-       /* FIXME: for aarch64 mode */
-       info->name = "[vectors]";
-       info->start = AARCH32_VECTORS_BASE;
-       info->end = AARCH32_VECTORS_BASE + PAGE_SIZE;
-#elif defined(CONFIG_X86_32)
        unsigned long vdso;
        struct vm_area_struct *vma_vdso;
 
-       vdso = (unsigned long)mm->context.vdso;
-       vma_vdso = find_vma_intersection(mm, vdso, vdso + 1);
+       vdso = (unsigned long)task->mm->context.vdso;
+       vma_vdso = find_vma_intersection(task->mm, vdso, vdso + 1);
        if (vma_vdso) {
                info->name = "[vdso]";
                info->start = vma_vdso->vm_start;
                info->end = vma_vdso->vm_end;
        } else {
-               printk(USM_PREFIX "Cannot get VDSO mapping\n");
-
+               pr_err(USM_PREFIX "Cannot get VDSO mapping\n");
                info->name = NULL;
                info->start = 0;
                info->end = 0;
        }
+}
+#endif /* defined(CONFIG_ARM64) || defined(CONFIG_X86_32) */
+
+static void kmem_info_fill(struct kmem_info *info, struct task_struct *task)
+{
+#if defined(CONFIG_ARM)
+       info->name = "[vectors]";
+       info->start = CONFIG_VECTORS_BASE;
+       info->end = CONFIG_VECTORS_BASE + PAGE_SIZE;
+#elif defined(CONFIG_ARM64)
+       if (test_ti_thread_flag(task_thread_info(task), TIF_32BIT)) {
+               info->name = "[vectors]";
+               info->start = AARCH32_VECTORS_BASE;
+               info->end = AARCH32_VECTORS_BASE + PAGE_SIZE;
+       } else {
+               kmem_info_fill_common(info, task);
+       }
+#elif defined(CONFIG_X86_32)
+       kmem_info_fill_common(info, task);
 #endif /* CONFIG_arch */
 }
 
@@ -165,7 +174,7 @@ static int pack_lib_obj(void *data, size_t size, struct vm_area_struct *vma)
        return ret + sizeof(*obj);
 }
 
-static int pack_shared_kmem(void *data, size_t size, struct mm_struct *mm)
+static int pack_shared_kmem(void *data, size_t size, struct task_struct *task)
 {
        struct lib_obj *obj = (struct lib_obj *)data;
        struct kmem_info info;
@@ -174,7 +183,7 @@ static int pack_shared_kmem(void *data, size_t size, struct mm_struct *mm)
        if (size < sizeof(*obj))
                return -ENOMEM;
 
-       kmem_info_fill(&info, mm);
+       kmem_info_fill(&info, task);
 
        if (info.name == NULL)
                return 0;
@@ -192,7 +201,7 @@ static int pack_shared_kmem(void *data, size_t size, struct mm_struct *mm)
        return obj_size;
 }
 
-static int pack_libs(void *data, size_t size, struct mm_struct *mm)
+static int pack_libs(void *data, size_t size, struct task_struct *task)
 {
        int ret;
        struct vm_area_struct *vma;
@@ -208,7 +217,7 @@ static int pack_libs(void *data, size_t size, struct mm_struct *mm)
        size -= sizeof(*lib_cnt);
 
        /* packing libraries */
-       for (vma = mm->mmap; vma; vma = vma->vm_next) {
+       for (vma = task->mm->mmap; vma; vma = vma->vm_next) {
                if (check_vma(vma)) {
                        ret = pack_lib_obj(data, size, vma);
                        if (ret < 0)
@@ -221,7 +230,7 @@ static int pack_libs(void *data, size_t size, struct mm_struct *mm)
        }
 
        /* packing shared kernel memory */
-       ret = pack_shared_kmem(data, size, mm);
+       ret = pack_shared_kmem(data, size, task);
        if (ret < 0)
                return ret;
 
@@ -317,7 +326,7 @@ static int pack_proc_info(void *data, size_t size, struct task_struct *task,
        data += ret;
        size -= ret;
 
-       ret = pack_libs(data, size, task->mm);
+       ret = pack_libs(data, size, task);
        if (ret < 0)
                return ret;