Merge by hand from Linus' tree.
authorPaul Mackerras <paulus@samba.org>
Thu, 29 Sep 2005 03:13:36 +0000 (13:13 +1000)
committerPaul Mackerras <paulus@samba.org>
Thu, 29 Sep 2005 03:13:36 +0000 (13:13 +1000)
Signed-off-by: Paul Mackerras <paulus@samba.org>
1  2 
arch/ppc/kernel/perfmon.c
arch/ppc64/mm/hash_native.c
arch/ppc64/mm/tlb.c
include/asm-ppc64/tlbflush.h

Simple merge
index 874cf96938fff05112539ed4afcc21640a75e595,bfd385b7713c7c53063226cb01e48260f7896f30..174d14576c2816658bb3db98a465432ec532074a
@@@ -348,8 -349,13 +348,7 @@@ static void native_flush_hash_range(uns
  
        j = 0;
        for (i = 0; i < number; i++) {
 -              if (batch->addr[i] < KERNELBASE)
 -                      vsid = get_vsid(context, batch->addr[i]);
 -              else
 -                      vsid = get_kernel_vsid(batch->addr[i]);
 -
 -              va = (vsid << 28) | (batch->addr[i] & 0x0fffffff);
 -              batch->vaddr[j] = va;
 +              va = batch->vaddr[j];
-               large = pte_huge(batch->pte[i]);
                if (large)
                        vpn = va >> HPAGE_SHIFT;
                else
index 31afd95bf870c89f4a595b958e64f24d2f9b042d,21fbffb23a43df153b114f36bba67f5f27ab4b52..09ab81a10f4f05100030d88a03760b9ed5b9b9bf
@@@ -141,19 -143,19 +141,21 @@@ void hpte_update(struct mm_struct *mm, 
         * up scanning and resetting referenced bits then our batch context
         * will change mid stream.
         */
-       if (unlikely(i != 0 && mm != batch->mm)) {
 -      if (i != 0 && (context != batch->context ||
 -                     batch->large != pte_huge(pte))) {
++      if (i != 0 && (mm != batch->mm || batch->large != pte_huge(pte))) {
                flush_tlb_pending();
                i = 0;
        }
-       if (i == 0)
 -
+       if (i == 0) {
 -              batch->context = context;
                batch->mm = mm;
+               batch->large = pte_huge(pte);
+       }
 +      if (addr < KERNELBASE) {
 +              vsid = get_vsid(mm->context.id, addr);
 +              WARN_ON(vsid == 0);
 +      } else
 +              vsid = get_kernel_vsid(addr);
 +      batch->vaddr[i] = (vsid << 28 ) | (addr & 0x0fffffff);
        batch->pte[i] = __pte(pte);
 -      batch->addr[i] = addr;
        batch->index = ++i;
        if (i >= PPC64_TLB_BATCH_NR)
                flush_tlb_pending();
index 800bc0010cfbbec5ba9e2af12cef591a9ca59418,74271d7c1d161f9577f9ddb6d3be88ebc351a7bc..626f505c6ee3f46dc82190bdb5e82cdc886e3272
  struct mm_struct;
  struct ppc64_tlb_batch {
        unsigned long index;
 -      unsigned long context;
        struct mm_struct *mm;
        pte_t pte[PPC64_TLB_BATCH_NR];
 -      unsigned long addr[PPC64_TLB_BATCH_NR];
        unsigned long vaddr[PPC64_TLB_BATCH_NR];
+       unsigned int large;
  };
  DECLARE_PER_CPU(struct ppc64_tlb_batch, ppc64_tlb_batch);