/* SPDX-License-Identifier: GPL-2.0 */ #ifndef _ASM_IA64_TLB_H #define _ASM_IA64_TLB_H /* * Based on <asm-generic/tlb.h>. * * Copyright (C) 2002-2003 Hewlett-Packard Co * David Mosberger-Tang <davidm@hpl.hp.com> */ /* * Removing a translation from a page table (including TLB-shootdown) is a four-step * procedure: * * (1) Flush (virtual) caches --- ensures virtual memory is coherent with kernel memory * (this is a no-op on ia64). * (2) Clear the relevant portions of the page-table * (3) Flush the TLBs --- ensures that stale content is gone from CPU TLBs * (4) Release the pages that were freed up in step (2). * * Note that the ordering of these steps is crucial to avoid races on MP machines. * * The Linux kernel defines several platform-specific hooks for TLB-shootdown. When * unmapping a portion of the virtual address space, these hooks are called according to * the following template: * * tlb <- tlb_gather_mmu(mm, start, end); // start unmap for address space MM * { * for each vma that needs a shootdown do { * tlb_start_vma(tlb, vma); * for each page-table-entry PTE that needs to be removed do { * tlb_remove_tlb_entry(tlb, pte, address); * if (pte refers to a normal page) { * tlb_remove_page(tlb, page); * } * } * tlb_end_vma(tlb, vma); * } * } * tlb_finish_mmu(tlb, start, end); // finish unmap for address space MM */ #include <linux/mm.h> #include <linux/pagemap.h> #include <linux/swap.h> #include <asm/pgalloc.h> #include <asm/processor.h> #include <asm/tlbflush.h> #include <asm-generic/tlb.h> #endif /* _ASM_IA64_TLB_H */ |