[S390] rework smp code
[deliverable/linux.git] / arch / s390 / kernel / vdso.c
index d73630b4fe1dbe87f9d492dd5f1e465749a5a0dc..e704a9965f902ce808648da176a99d60505ce927 100644 (file)
@@ -88,19 +88,12 @@ static void vdso_init_data(struct vdso_data *vd)
 }
 
 #ifdef CONFIG_64BIT
-/*
- * Setup per cpu vdso data page.
- */
-static void vdso_init_per_cpu_data(int cpu, struct vdso_per_cpu_data *vpcd)
-{
-}
-
 /*
  * Allocate/free per cpu vdso data.
  */
 #define SEGMENT_ORDER  2
 
-int vdso_alloc_per_cpu(int cpu, struct _lowcore *lowcore)
+int vdso_alloc_per_cpu(struct _lowcore *lowcore)
 {
        unsigned long segment_table, page_table, page_frame;
        u32 *psal, *aste;
@@ -139,7 +132,6 @@ int vdso_alloc_per_cpu(int cpu, struct _lowcore *lowcore)
        aste[4] = (u32)(addr_t) psal;
        lowcore->vdso_per_cpu_data = page_frame;
 
-       vdso_init_per_cpu_data(cpu, (struct vdso_per_cpu_data *) page_frame);
        return 0;
 
 out:
@@ -149,7 +141,7 @@ out:
        return -ENOMEM;
 }
 
-void vdso_free_per_cpu(int cpu, struct _lowcore *lowcore)
+void vdso_free_per_cpu(struct _lowcore *lowcore)
 {
        unsigned long segment_table, page_table, page_frame;
        u32 *psal, *aste;
@@ -168,19 +160,15 @@ void vdso_free_per_cpu(int cpu, struct _lowcore *lowcore)
        free_pages(segment_table, SEGMENT_ORDER);
 }
 
-static void __vdso_init_cr5(void *dummy)
+static void vdso_init_cr5(void)
 {
        unsigned long cr5;
 
+       if (user_mode == HOME_SPACE_MODE || !vdso_enabled)
+               return;
        cr5 = offsetof(struct _lowcore, paste);
        __ctl_load(cr5, 5, 5);
 }
-
-static void vdso_init_cr5(void)
-{
-       if (user_mode != HOME_SPACE_MODE && vdso_enabled)
-               on_each_cpu(__vdso_init_cr5, NULL, 1);
-}
 #endif /* CONFIG_64BIT */
 
 /*
@@ -322,10 +310,8 @@ static int __init vdso_init(void)
        }
        vdso64_pagelist[vdso64_pages - 1] = virt_to_page(vdso_data);
        vdso64_pagelist[vdso64_pages] = NULL;
-#ifndef CONFIG_SMP
-       if (vdso_alloc_per_cpu(0, &S390_lowcore))
+       if (vdso_alloc_per_cpu(&S390_lowcore))
                BUG();
-#endif
        vdso_init_cr5();
 #endif /* CONFIG_64BIT */
 
@@ -335,7 +321,7 @@ static int __init vdso_init(void)
 
        return 0;
 }
-arch_initcall(vdso_init);
+early_initcall(vdso_init);
 
 int in_gate_area_no_mm(unsigned long addr)
 {
This page took 0.02727 seconds and 5 git commands to generate.