ia64/xen-unstable

view xen/include/asm-ia64/tlbflush.h @ 11808:0c18c6009448

[IA64] TLB tracking

Add tlb insert tracking to flush finer grained virtual address
range when a page is unmapped from a domain.
This functionality is enabled with a compile time option,
xen_ia64_tlb_track(default is y) and xen_ia64_tlb_track_cnt(default is n).

This patch forcuses on grant table mapping.
When page is unmapped, full vTLB flush is necessary.
By tracking tlb insert on grant mapped page, full vTLB flush
can be avoided.
Especially when vbd backend does only DMA, so dom0 doesn't insert tlb entry
on the grant mapped page. In such case any vTLB flush isn't needed.

Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
author awilliam@xenbuild.aw
date Sat Oct 14 17:42:00 2006 -0600 (2006-10-14)
parents 86e5d8458c08
children fd79ca20d91a
line source
1 #ifndef __FLUSHTLB_H__
2 #define __FLUSHTLB_H__
4 #include <xen/sched.h>
6 /* TLB flushes can be either local (current vcpu only) or domain wide (on
7 all vcpus).
8 TLB flushes can be either all-flush or range only.
10 vTLB flushing means flushing VCPU virtual TLB + machine TLB + machine VHPT.
11 */
13 /* Local all flush of vTLB. */
14 void vcpu_flush_vtlb_all(struct vcpu *v);
16 /* Local range flush of machine TLB only (not full VCPU virtual TLB!!!) */
17 void vcpu_flush_tlb_vhpt_range (u64 vadr, u64 log_range);
19 /* Global all flush of vTLB */
20 void domain_flush_vtlb_all (void);
22 /* Global range-flush of vTLB. */
23 void domain_flush_vtlb_range (struct domain *d, u64 vadr, u64 addr_range);
25 #ifdef CONFIG_XEN_IA64_TLB_TRACK
26 struct tlb_track_entry;
27 void __domain_flush_vtlb_track_entry(struct domain* d,
28 const struct tlb_track_entry* entry);
29 /* Global entry-flush of vTLB */
30 void domain_flush_vtlb_track_entry(struct domain* d,
31 const struct tlb_track_entry* entry);
32 #endif
34 /* Flush vhpt and mTLB on every dirty cpus. */
35 void domain_flush_tlb_vhpt(struct domain *d);
37 /* Flush v-tlb on cpus set in mask for current domain. */
38 void flush_tlb_mask(cpumask_t mask);
40 /* Flush local machine TLB. */
41 void local_flush_tlb_all (void);
43 #define tlbflush_current_time() 0
44 #define tlbflush_filter(x,y) ((void)0)
46 #endif