[S390] allnoconfig build error.
authorMartin Schwidefsky <schwidefsky@de.ibm.com>
Thu, 17 Apr 2008 05:45:58 +0000 (07:45 +0200)
committerHeiko Carstens <heiko.carstens@de.ibm.com>
Thu, 17 Apr 2008 05:46:56 +0000 (07:46 +0200)
Fix the following link error with allnoconfig:

vmem.c:(.text+0x175c): undefined reference to `smp_ptlb_all'
vmem.c:(.text+0x1b24): undefined reference to `smp_ptlb_all'
fork.c:(.text+0x4190): undefined reference to `smp_ptlb_all'
: undefined reference to `smp_ptlb_all'
: undefined reference to `smp_ptlb_all'
mm/built-in.o:: more undefined references to `smp_ptlb_all' follow
make[1]: *** [.tmp_vmlinux1] Error 1
make: *** [sub-make] Error 2

Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
include/asm-s390/tlbflush.h

index 35fb4f9..de72347 100644 (file)
@@ -13,6 +13,7 @@ static inline void __tlb_flush_local(void)
        asm volatile("ptlb" : : : "memory");
 }
 
+#ifdef CONFIG_SMP
 /*
  * Flush all tlb entries on all cpus.
  */
@@ -39,6 +40,25 @@ static inline void __tlb_flush_global(void)
                : : "d" (reg2), "d" (reg3), "d" (reg4), "m" (dummy) : "cc" );
 }
 
+static inline void __tlb_flush_full(struct mm_struct *mm)
+{
+       cpumask_t local_cpumask;
+
+       preempt_disable();
+       /*
+        * If the process only ran on the local cpu, do a local flush.
+        */
+       local_cpumask = cpumask_of_cpu(smp_processor_id());
+       if (cpus_equal(mm->cpu_vm_mask, local_cpumask))
+               __tlb_flush_local();
+       else
+               __tlb_flush_global();
+       preempt_enable();
+}
+#else
+#define __tlb_flush_full(mm)   __tlb_flush_local()
+#endif
+
 /*
  * Flush all tlb entries of a page table on all cpus.
  */
@@ -51,8 +71,6 @@ static inline void __tlb_flush_idte(unsigned long asce)
 
 static inline void __tlb_flush_mm(struct mm_struct * mm)
 {
-       cpumask_t local_cpumask;
-
        if (unlikely(cpus_empty(mm->cpu_vm_mask)))
                return;
        /*
@@ -69,16 +87,7 @@ static inline void __tlb_flush_mm(struct mm_struct * mm)
                                 mm->context.asce_bits);
                return;
        }
-       preempt_disable();
-       /*
-        * If the process only ran on the local cpu, do a local flush.
-        */
-       local_cpumask = cpumask_of_cpu(smp_processor_id());
-       if (cpus_equal(mm->cpu_vm_mask, local_cpumask))
-               __tlb_flush_local();
-       else
-               __tlb_flush_global();
-       preempt_enable();
+       __tlb_flush_full(mm);
 }
 
 static inline void __tlb_flush_mm_cond(struct mm_struct * mm)