Deleted Added
full compact
pmap.c (305531) pmap.c (305540)
1/*-
2 * Copyright (c) 1991 Regents of the University of California.
3 * All rights reserved.
4 * Copyright (c) 1994 John S. Dyson
5 * All rights reserved.
6 * Copyright (c) 1994 David Greenman
7 * All rights reserved.
8 * Copyright (c) 2003 Peter Wemm

--- 70 unchanged lines hidden (view full) ---

79 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
80 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
81 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
82 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
83 * SUCH DAMAGE.
84 */
85
86#include <sys/cdefs.h>
1/*-
2 * Copyright (c) 1991 Regents of the University of California.
3 * All rights reserved.
4 * Copyright (c) 1994 John S. Dyson
5 * All rights reserved.
6 * Copyright (c) 1994 David Greenman
7 * All rights reserved.
8 * Copyright (c) 2003 Peter Wemm

--- 70 unchanged lines hidden (view full) ---

79 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
80 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
81 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
82 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
83 * SUCH DAMAGE.
84 */
85
86#include <sys/cdefs.h>
87__FBSDID("$FreeBSD: stable/11/sys/arm64/arm64/pmap.c 305531 2016-09-07 12:33:04Z andrew $");
87__FBSDID("$FreeBSD: stable/11/sys/arm64/arm64/pmap.c 305540 2016-09-07 15:37:39Z andrew $");
88
89/*
90 * Manages physical address maps.
91 *
92 * Since the information managed by this module is
93 * also stored by the logical address mapping module,
94 * this module may throw away valid virtual-to-physical
95 * mappings at almost any time. However, invalidations

--- 755 unchanged lines hidden (view full) ---

851 /*
852 * Initialize the pool of pv list locks.
853 */
854 for (i = 0; i < NPV_LIST_LOCKS; i++)
855 rw_init(&pv_list_locks[i], "pmap pv list");
856}
857
858/*
88
89/*
90 * Manages physical address maps.
91 *
92 * Since the information managed by this module is
93 * also stored by the logical address mapping module,
94 * this module may throw away valid virtual-to-physical
95 * mappings at almost any time. However, invalidations

--- 755 unchanged lines hidden (view full) ---

851 /*
852 * Initialize the pool of pv list locks.
853 */
854 for (i = 0; i < NPV_LIST_LOCKS; i++)
855 rw_init(&pv_list_locks[i], "pmap pv list");
856}
857
858/*
859 * Normal, non-SMP, invalidation functions.
860 * We inline these within pmap.c for speed.
859 * Invalidate a single TLB entry.
861 */
862PMAP_INLINE void
863pmap_invalidate_page(pmap_t pmap, vm_offset_t va)
864{
865
866 sched_pin();
867 __asm __volatile(
860 */
861PMAP_INLINE void
862pmap_invalidate_page(pmap_t pmap, vm_offset_t va)
863{
864
865 sched_pin();
866 __asm __volatile(
868 "dsb sy \n"
867 "dsb ishst \n"
869 "tlbi vaae1is, %0 \n"
868 "tlbi vaae1is, %0 \n"
870 "dsb sy \n"
869 "dsb ish \n"
871 "isb \n"
872 : : "r"(va >> PAGE_SHIFT));
873 sched_unpin();
874}
875
876PMAP_INLINE void
877pmap_invalidate_range(pmap_t pmap, vm_offset_t sva, vm_offset_t eva)
878{
879 vm_offset_t addr;
880
881 sched_pin();
870 "isb \n"
871 : : "r"(va >> PAGE_SHIFT));
872 sched_unpin();
873}
874
875PMAP_INLINE void
876pmap_invalidate_range(pmap_t pmap, vm_offset_t sva, vm_offset_t eva)
877{
878 vm_offset_t addr;
879
880 sched_pin();
882 __asm __volatile("dsb sy");
881 dsb(ishst);
883 for (addr = sva; addr < eva; addr += PAGE_SIZE) {
884 __asm __volatile(
885 "tlbi vaae1is, %0" : : "r"(addr >> PAGE_SHIFT));
886 }
887 __asm __volatile(
882 for (addr = sva; addr < eva; addr += PAGE_SIZE) {
883 __asm __volatile(
884 "tlbi vaae1is, %0" : : "r"(addr >> PAGE_SHIFT));
885 }
886 __asm __volatile(
888 "dsb sy \n"
887 "dsb ish \n"
889 "isb \n");
890 sched_unpin();
891}
892
893PMAP_INLINE void
894pmap_invalidate_all(pmap_t pmap)
895{
896
897 sched_pin();
898 __asm __volatile(
888 "isb \n");
889 sched_unpin();
890}
891
892PMAP_INLINE void
893pmap_invalidate_all(pmap_t pmap)
894{
895
896 sched_pin();
897 __asm __volatile(
899 "dsb sy \n"
898 "dsb ishst \n"
900 "tlbi vmalle1is \n"
899 "tlbi vmalle1is \n"
901 "dsb sy \n"
900 "dsb ish \n"
902 "isb \n");
903 sched_unpin();
904}
905
906/*
907 * Routine: pmap_extract
908 * Function:
909 * Extract the physical page address associated

--- 2681 unchanged lines hidden ---
901 "isb \n");
902 sched_unpin();
903}
904
905/*
906 * Routine: pmap_extract
907 * Function:
908 * Extract the physical page address associated

--- 2681 unchanged lines hidden ---