Date: Fri, 17 Jun 2011 04:26:03 +0000 (UTC) From: Marcel Moolenaar <marcel@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r223170 - in head/sys/ia64: ia64 include Message-ID: <201106170426.p5H4Q3MK059214@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: marcel Date: Fri Jun 17 04:26:03 2011 New Revision: 223170 URL: http://svn.freebsd.org/changeset/base/223170 Log: Properly serialize the global shootdown with the instruction stream of the local processor. Also explicitly invalidate the ALAT. This is done on the other CPUs in the coherence domain by virtue of the ptc.ga instruction, but does not apply to the local CPU. Modified: head/sys/ia64/ia64/pmap.c head/sys/ia64/include/ia64_cpu.h Modified: head/sys/ia64/ia64/pmap.c ============================================================================== --- head/sys/ia64/ia64/pmap.c Thu Jun 16 23:40:10 2011 (r223169) +++ head/sys/ia64/ia64/pmap.c Fri Jun 17 04:26:03 2011 (r223170) @@ -559,10 +559,14 @@ pmap_invalidate_page(vm_offset_t va) } while (sem != tag); ia64_ptc_ga(va, PAGE_SHIFT << 2); + ia64_mf(); + ia64_srlz_i(); /* PTC.G leave exclusive */ atomic_store_rel_long(&pmap_ptc_g_sem, 0); + ia64_invala(); + intr_restore(is); critical_exit(); } Modified: head/sys/ia64/include/ia64_cpu.h ============================================================================== --- head/sys/ia64/include/ia64_cpu.h Thu Jun 16 23:40:10 2011 (r223169) +++ head/sys/ia64/include/ia64_cpu.h Fri Jun 17 04:26:03 2011 (r223170) @@ -266,7 +266,7 @@ ia64_ptc_e(uint64_t v) static __inline void ia64_ptc_g(uint64_t va, uint64_t log2size) { - __asm __volatile("ptc.g %0,%1;; srlz.i;;" :: "r"(va), "r"(log2size)); + __asm __volatile("ptc.g %0,%1;;" :: "r"(va), "r"(log2size)); } /* @@ -275,7 +275,7 @@ ia64_ptc_g(uint64_t va, uint64_t log2siz static __inline void ia64_ptc_ga(uint64_t va, uint64_t log2size) { - __asm __volatile("ptc.ga %0,%1;; srlz.i;;" :: "r"(va), "r"(log2size)); + __asm __volatile("ptc.ga %0,%1;;" :: "r"(va), "r"(log2size)); } /* @@ -288,6 +288,15 @@ ia64_ptc_l(uint64_t va, uint64_t log2siz } /* + * Invalidate the ALAT on the local processor. + */ +static __inline void +ia64_invala(void) +{ + __asm __volatile("invala;;"); +} + +/* * Unordered memory load. */
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201106170426.p5H4Q3MK059214>