summaryrefslogtreecommitdiffstats
path: root/sys/sparc64/include/cache.h
diff options
context:
space:
mode:
authormarius <marius@FreeBSD.org>2011-07-02 11:14:54 +0000
committermarius <marius@FreeBSD.org>2011-07-02 11:14:54 +0000
commit100c1f73e93d031e02336e7d110c489326d2bc56 (patch)
tree507ef2da7eed7ae7dd4734f80eb1110001daa7f7 /sys/sparc64/include/cache.h
parent094335c36e9ab0e8bdde50a8f1ea4c878504e92e (diff)
downloadFreeBSD-src-100c1f73e93d031e02336e7d110c489326d2bc56.zip
FreeBSD-src-100c1f73e93d031e02336e7d110c489326d2bc56.tar.gz
- For Cheetah- and Zeus-class CPUs don't flush all unlocked entries from
the TLBs in order to get rid of the user mappings but instead traverse them an flush only the latter like we also do for the Spitfire-class. Also flushing the unlocked kernel entries can cause instant faults which when called from within cpu_switch() are handled with the scheduler lock held which in turn can cause timeouts on the acquisition of the lock by other CPUs. This was easily seen with a 16-core V890 but occasionally also happened with 2-way machines. While at it, move the SPARC64-V support code entirely to zeus.c. This causes a little bit of duplication but is less confusing than partially using Cheetah-class bits for these. - For SPARC64-V ensure that 4-Mbyte page entries are stored in the 1024- entry, 2-way set associative TLB. - In {d,i}tlb_get_data_sun4u() turn off the interrupts in order to ensure that ASI_{D,I}TLB_DATA_ACCESS_REG actually are read twice back-to-back. Tested by: Peter Jeremy (16-core US-IV), Michael Moll (2-way SPARC64-V)
Diffstat (limited to 'sys/sparc64/include/cache.h')
-rw-r--r--sys/sparc64/include/cache.h9
1 files changed, 5 insertions, 4 deletions
diff --git a/sys/sparc64/include/cache.h b/sys/sparc64/include/cache.h
index 3852da4..3d0ac4f 100644
--- a/sys/sparc64/include/cache.h
+++ b/sys/sparc64/include/cache.h
@@ -110,15 +110,16 @@ cache_flush_t spitfire_cache_flush;
dcache_page_inval_t spitfire_dcache_page_inval;
icache_page_inval_t spitfire_icache_page_inval;
+cache_enable_t zeus_cache_enable;
+cache_flush_t zeus_cache_flush;
+dcache_page_inval_t zeus_dcache_page_inval;
+icache_page_inval_t zeus_icache_page_inval;
+
extern cache_enable_t *cache_enable;
extern cache_flush_t *cache_flush;
extern dcache_page_inval_t *dcache_page_inval;
extern icache_page_inval_t *icache_page_inval;
-cache_flush_t zeus_cache_flush;
-dcache_page_inval_t zeus_dcache_page_inval;
-icache_page_inval_t zeus_icache_page_inval;
-
#endif /* KERNEL */
#endif /* !LOCORE */
OpenPOWER on IntegriCloud