struct mm_struct *mm = tlb->mm; unsigned long freed = tlb->freed; int rss = get_mm_counter(mm, rss);  if (rss < freed) freed = rss; add_mm_counter(mm, rss, -freed);  if (freed) { flush_tlb_mm(mm); tlb->flushes++; } else { tlb->avoided_flushes++; }
if (tlb->need_flush) flush_tlb_mm(tlb->mm);
tlb_finish_mmu(struct mmu_gather *tlb, unsigned long start, unsigned long end){        struct mm_struct *mm = tlb->mm;        unsigned long freed = tlb->freed;        int rss = get_mm_counter(mm, rss);        if (rss < freed)                freed = rss;        add_mm_counter(mm, rss, -freed);        if (freed) {                flush_tlb_mm(mm);                tlb->flushes++;        } else {                tlb->avoided_flushes++;        }        /* keep the page table cache within bounds */        check_pgt_cache();        put_cpu_var(mmu_gathers);}