1 /* SPDX-License-Identifier: GPL-2.0 */ 1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 2 /* 3 * dtlb_prot.S: DTLB protection trap strategy. 3 * dtlb_prot.S: DTLB protection trap strategy. 4 * This is included directly into 4 * This is included directly into the trap table. 5 * 5 * 6 * Copyright (C) 1996,1998 David S. Miller (da 6 * Copyright (C) 1996,1998 David S. Miller (davem@redhat.com) 7 * Copyright (C) 1997,1998 Jakub Jelinek (jj 7 * Copyright (C) 1997,1998 Jakub Jelinek (jj@ultra.linux.cz) 8 */ 8 */ 9 9 10 /* Ways we can get here: 10 /* Ways we can get here: 11 * 11 * 12 * [TL == 0] 1) User stores to readonly pages. 12 * [TL == 0] 1) User stores to readonly pages. 13 * [TL == 0] 2) Nucleus stores to user readonl 13 * [TL == 0] 2) Nucleus stores to user readonly pages. 14 * [TL > 0] 3) Nucleus stores to user readonl 14 * [TL > 0] 3) Nucleus stores to user readonly stack frame. 15 */ 15 */ 16 16 17 /* PROT ** ICACHE line 1: User DTLB protection 17 /* PROT ** ICACHE line 1: User DTLB protection trap */ 18 mov TLB_SFSR, %g1 18 mov TLB_SFSR, %g1 19 stxa %g0, [%g1] ASI_DMMU 19 stxa %g0, [%g1] ASI_DMMU ! Clear FaultValid bit 20 membar #Sync 20 membar #Sync ! Synchronize stores 21 rdpr %pstate, %g5 21 rdpr %pstate, %g5 ! Move into alt-globals 22 wrpr %g5, PSTATE_AG|PSTATE_ 22 wrpr %g5, PSTATE_AG|PSTATE_MG, %pstate 23 rdpr %tl, %g1 23 rdpr %tl, %g1 ! Need a winfixup? 24 cmp %g1, 1 24 cmp %g1, 1 ! Trap level >1? 25 mov TLB_TAG_ACCESS, %g4 25 mov TLB_TAG_ACCESS, %g4 ! For reload of vaddr 26 26 27 /* PROT ** ICACHE line 2: More real fault proc 27 /* PROT ** ICACHE line 2: More real fault processing */ 28 ldxa [%g4] ASI_DMMU, %g5 28 ldxa [%g4] ASI_DMMU, %g5 ! Put tagaccess in %g5 29 srlx %g5, PAGE_SHIFT, %g5 29 srlx %g5, PAGE_SHIFT, %g5 30 sllx %g5, PAGE_SHIFT, %g5 30 sllx %g5, PAGE_SHIFT, %g5 ! Clear context ID bits 31 bgu,pn %xcc, winfix_trampolin 31 bgu,pn %xcc, winfix_trampoline ! Yes, perform winfixup 32 mov FAULT_CODE_DTLB | FAUL 32 mov FAULT_CODE_DTLB | FAULT_CODE_WRITE, %g4 33 ba,pt %xcc, sparc64_realfaul 33 ba,pt %xcc, sparc64_realfault_common ! Nope, normal fault 34 nop 34 nop 35 nop 35 nop 36 36 37 /* PROT ** ICACHE line 3: Unused... */ 37 /* PROT ** ICACHE line 3: Unused... */ 38 nop 38 nop 39 nop 39 nop 40 nop 40 nop 41 nop 41 nop 42 nop 42 nop 43 nop 43 nop 44 nop 44 nop 45 nop 45 nop 46 46 47 /* PROT ** ICACHE line 4: Unused... */ 47 /* PROT ** ICACHE line 4: Unused... */ 48 nop 48 nop 49 nop 49 nop 50 nop 50 nop 51 nop 51 nop 52 nop 52 nop 53 nop 53 nop 54 nop 54 nop 55 nop 55 nop
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.