diff options
author | jhb <jhb@FreeBSD.org> | 2006-05-01 21:36:47 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2006-05-01 21:36:47 +0000 |
commit | ca8d347695197fe6855a628e0325e9ab16820d5f (patch) | |
tree | 3a0d26aaaeb23a38ebdd2566fd5bdbc8c7bde43f /sys/i386/include/smp.h | |
parent | 4db7dec298d4cc5de09e6704e4b98919f21bacaf (diff) | |
download | FreeBSD-src-ca8d347695197fe6855a628e0325e9ab16820d5f.zip FreeBSD-src-ca8d347695197fe6855a628e0325e9ab16820d5f.tar.gz |
Add a new 'pmap_invalidate_cache()' to flush the CPU caches via the
wbinvd() instruction. This includes a new IPI so that all CPU caches on
all CPUs are flushed for the SMP case.
MFC after: 1 month
Diffstat (limited to 'sys/i386/include/smp.h')
-rw-r--r-- | sys/i386/include/smp.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/sys/i386/include/smp.h b/sys/i386/include/smp.h index bd67a33..6451a5c 100644 --- a/sys/i386/include/smp.h +++ b/sys/i386/include/smp.h @@ -39,6 +39,7 @@ extern struct mtx smp_tlb_mtx; extern u_long *ipi_invltlb_counts[MAXCPU]; extern u_long *ipi_invlrng_counts[MAXCPU]; extern u_long *ipi_invlpg_counts[MAXCPU]; +extern u_long *ipi_invlcache_counts[MAXCPU]; extern u_long *ipi_rendezvous_counts[MAXCPU]; extern u_long *ipi_lazypmap_counts[MAXCPU]; #endif @@ -48,6 +49,7 @@ inthand_t IDTVEC(invltlb), /* TLB shootdowns - global */ IDTVEC(invlpg), /* TLB shootdowns - 1 page */ IDTVEC(invlrng), /* TLB shootdowns - page range */ + IDTVEC(invlcache), /* Write back and invalidate cache */ IDTVEC(ipi_intr_bitmap_handler), /* Bitmap based IPIs */ IDTVEC(cpustop), /* CPU stops & waits to be restarted */ IDTVEC(rendezvous), /* handle CPU rendezvous */ @@ -65,6 +67,7 @@ void ipi_bitmap_handler(struct trapframe frame); u_int mp_bootaddress(u_int); int mp_grab_cpu_hlt(void); void mp_topology(void); +void smp_cache_flush(void); void smp_invlpg(vm_offset_t addr); void smp_masked_invlpg(u_int mask, vm_offset_t addr); void smp_invlpg_range(vm_offset_t startva, vm_offset_t endva); |