Date: Wed, 27 Nov 2019 20:33:50 +0000 (UTC) From: Alan Cox <alc@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r355145 - head/sys/arm64/arm64 Message-ID: <201911272033.xARKXowX014908@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: alc Date: Wed Nov 27 20:33:49 2019 New Revision: 355145 URL: https://svnweb.freebsd.org/changeset/base/355145 Log: There is no reason why we need to pin the underlying thread to its current processor in pmap_invalidate_{all,page,range}(). These functions are using an instruction that broadcasts the TLB invalidation to every processor, so even if a thread migrates in the middle of one of these functions every processor will still perform the required TLB invalidations. Reviewed by: andrew, markj MFC after: 10 days Differential Revision: https://reviews.freebsd.org/D22502 Modified: head/sys/arm64/arm64/pmap.c Modified: head/sys/arm64/arm64/pmap.c ============================================================================== --- head/sys/arm64/arm64/pmap.c Wed Nov 27 20:32:53 2019 (r355144) +++ head/sys/arm64/arm64/pmap.c Wed Nov 27 20:33:49 2019 (r355145) @@ -1043,7 +1043,6 @@ pmap_invalidate_page(pmap_t pmap, vm_offset_t va) { uint64_t r; - sched_pin(); dsb(ishst); if (pmap == kernel_pmap) { r = atop(va); @@ -1054,11 +1053,10 @@ pmap_invalidate_page(pmap_t pmap, vm_offset_t va) } dsb(ish); isb(); - sched_unpin(); } static __inline void -pmap_invalidate_range_nopin(pmap_t pmap, vm_offset_t sva, vm_offset_t eva) +pmap_invalidate_range(pmap_t pmap, vm_offset_t sva, vm_offset_t eva) { uint64_t end, r, start; @@ -1080,20 +1078,10 @@ pmap_invalidate_range_nopin(pmap_t pmap, vm_offset_t s } static __inline void -pmap_invalidate_range(pmap_t pmap, vm_offset_t sva, vm_offset_t eva) -{ - - sched_pin(); - pmap_invalidate_range_nopin(pmap, sva, eva); - sched_unpin(); -} - -static __inline void pmap_invalidate_all(pmap_t pmap) { uint64_t r; - sched_pin(); dsb(ishst); if (pmap == kernel_pmap) { __asm __volatile("tlbi vmalle1is"); @@ -1103,7 +1091,6 @@ pmap_invalidate_all(pmap_t pmap) } dsb(ish); isb(); - sched_unpin(); } /* @@ -3114,7 +3101,7 @@ pmap_update_entry(pmap_t pmap, pd_entry_t *pte, pd_ent * lookup the physical address. */ pmap_clear_bits(pte, ATTR_DESCR_VALID); - pmap_invalidate_range_nopin(pmap, va, va + size); + pmap_invalidate_range(pmap, va, va + size); /* Create the new mapping */ pmap_store(pte, newpte);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201911272033.xARKXowX014908>