powerpc/vdso: Rename syscall_map_32/64 to simplify vdso_setup_syscall_map()
authorChristophe Leroy <christophe.leroy@csgroup.eu>
Sun, 27 Sep 2020 09:16:20 +0000 (09:16 +0000)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 3 Dec 2020 14:01:15 +0000 (01:01 +1100)
Today vdso_data structure has:
- syscall_map_32[] and syscall_map_64[] on PPC64
- syscall_map_32[] on PPC32

On PPC32, syscall_map_32[] is populated using sys_call_table[].

On PPC64, syscall_map_64[] is populated using sys_call_table[]
and syscal_map_32[] is populated using compat_sys_call_table[].

To simplify vdso_setup_syscall_map(),
- On PPC32 rename syscall_map_32[] into syscall_map[],
- On PPC64 rename syscall_map_64[] into syscall_map[],
- On PPC64 rename syscall_map_32[] into compat_syscall_map[].

That way, syscall_map[] gets populated using sys_call_table[] and
compat_syscall_map[] gets population using compat_sys_call_table[].

Also define an empty compat_syscall_map[] on PPC32 to avoid ifdefs.

Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/472734be0d9991eee320a06824219a5b2663736b.1601197618.git.christophe.leroy@csgroup.eu
arch/powerpc/include/asm/vdso_datapage.h
arch/powerpc/kernel/asm-offsets.c
arch/powerpc/kernel/vdso.c

index c4d320504d2645e971183c38bcdde885b6cbd916..3d996db05acd9a74df15125f5fee91f870dfbf11 100644 (file)
@@ -79,8 +79,8 @@ struct vdso_arch_data {
        __u32 icache_block_size;                /* L1 i-cache block size     */
        __u32 dcache_log_block_size;            /* L1 d-cache log block size */
        __u32 icache_log_block_size;            /* L1 i-cache log block size */
-       __u32 syscall_map_64[SYSCALL_MAP_SIZE]; /* map of syscalls  */
-       __u32 syscall_map_32[SYSCALL_MAP_SIZE]; /* map of syscalls */
+       __u32 syscall_map[SYSCALL_MAP_SIZE];    /* Map of syscalls  */
+       __u32 compat_syscall_map[SYSCALL_MAP_SIZE];     /* Map of compat syscalls */
 
        struct vdso_data data[CS_BASES];
 };
@@ -92,7 +92,8 @@ struct vdso_arch_data {
  */
 struct vdso_arch_data {
        __u64 tb_ticks_per_sec;         /* Timebase tics / sec          0x38 */
-       __u32 syscall_map_32[SYSCALL_MAP_SIZE]; /* map of syscalls */
+       __u32 syscall_map[SYSCALL_MAP_SIZE]; /* Map of syscalls */
+       __u32 compat_syscall_map[0];    /* No compat syscalls on PPC32 */
        struct vdso_data data[CS_BASES];
 };
 
index 81d68494d02683b9dd9167062804164aad0dbfd4..d4331d451c71969e838ddd75f62c33659508a059 100644 (file)
@@ -402,13 +402,15 @@ int main(void)
        /* datapage offsets for use by vdso */
        OFFSET(VDSO_DATA_OFFSET, vdso_arch_data, data);
        OFFSET(CFG_TB_TICKS_PER_SEC, vdso_arch_data, tb_ticks_per_sec);
-       OFFSET(CFG_SYSCALL_MAP32, vdso_arch_data, syscall_map_32);
 #ifdef CONFIG_PPC64
        OFFSET(CFG_ICACHE_BLOCKSZ, vdso_arch_data, icache_block_size);
        OFFSET(CFG_DCACHE_BLOCKSZ, vdso_arch_data, dcache_block_size);
        OFFSET(CFG_ICACHE_LOGBLOCKSZ, vdso_arch_data, icache_log_block_size);
        OFFSET(CFG_DCACHE_LOGBLOCKSZ, vdso_arch_data, dcache_log_block_size);
-       OFFSET(CFG_SYSCALL_MAP64, vdso_arch_data, syscall_map_64);
+       OFFSET(CFG_SYSCALL_MAP64, vdso_arch_data, syscall_map);
+       OFFSET(CFG_SYSCALL_MAP32, vdso_arch_data, compat_syscall_map);
+#else
+       OFFSET(CFG_SYSCALL_MAP32, vdso_arch_data, syscall_map);
 #endif
 
 #ifdef CONFIG_BUG
index b0332c60910473813cd11621e3e4679123fe7b5f..6d106fcafb9e4a84f7d9ca3b64a9af4f64f87e39 100644 (file)
@@ -643,19 +643,11 @@ static void __init vdso_setup_syscall_map(void)
        unsigned int i;
 
        for (i = 0; i < NR_syscalls; i++) {
-#ifdef CONFIG_PPC64
                if (sys_call_table[i] != (unsigned long)&sys_ni_syscall)
-                       vdso_data->syscall_map_64[i >> 5] |=
-                               0x80000000UL >> (i & 0x1f);
+                       vdso_data->syscall_map[i >> 5] |= 0x80000000UL >> (i & 0x1f);
                if (IS_ENABLED(CONFIG_COMPAT) &&
                    compat_sys_call_table[i] != (unsigned long)&sys_ni_syscall)
-                       vdso_data->syscall_map_32[i >> 5] |=
-                               0x80000000UL >> (i & 0x1f);
-#else /* CONFIG_PPC64 */
-               if (sys_call_table[i] != (unsigned long)&sys_ni_syscall)
-                       vdso_data->syscall_map_32[i >> 5] |=
-                               0x80000000UL >> (i & 0x1f);
-#endif /* CONFIG_PPC64 */
+                       vdso_data->compat_syscall_map[i >> 5] |= 0x80000000UL >> (i & 0x1f);
        }
 }