Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | /* $Id: dtlb_prot.S,v 1.22 2001/04/11 23:40:32 davem Exp $ |
| 2 | * dtlb_prot.S: DTLB protection trap strategy. |
| 3 | * This is included directly into the trap table. |
| 4 | * |
| 5 | * Copyright (C) 1996,1998 David S. Miller (davem@redhat.com) |
| 6 | * Copyright (C) 1997,1998 Jakub Jelinek (jj@ultra.linux.cz) |
| 7 | */ |
| 8 | |
| 9 | /* Ways we can get here: |
| 10 | * |
| 11 | * [TL == 0] 1) User stores to readonly pages. |
| 12 | * [TL == 0] 2) Nucleus stores to user readonly pages. |
| 13 | * [TL > 0] 3) Nucleus stores to user readonly stack frame. |
| 14 | */ |
| 15 | |
| 16 | /* PROT ** ICACHE line 1: User DTLB protection trap */ |
| 17 | stxa %g0, [%g1] ASI_DMMU ! Clear SFSR FaultValid bit |
| 18 | membar #Sync ! Synchronize ASI stores |
| 19 | rdpr %pstate, %g5 ! Move into alternate globals |
| 20 | wrpr %g5, PSTATE_AG|PSTATE_MG, %pstate |
| 21 | rdpr %tl, %g1 ! Need to do a winfixup? |
| 22 | cmp %g1, 1 ! Trap level >1? |
| 23 | mov TLB_TAG_ACCESS, %g4 ! Prepare reload of vaddr |
| 24 | nop |
| 25 | |
| 26 | /* PROT ** ICACHE line 2: More real fault processing */ |
| 27 | bgu,pn %xcc, winfix_trampoline ! Yes, perform winfixup |
| 28 | ldxa [%g4] ASI_DMMU, %g5 ! Put tagaccess in %g5 |
| 29 | ba,pt %xcc, sparc64_realfault_common ! Nope, normal fault |
| 30 | mov FAULT_CODE_DTLB | FAULT_CODE_WRITE, %g4 |
| 31 | nop |
| 32 | nop |
| 33 | nop |
| 34 | nop |
| 35 | |
| 36 | /* PROT ** ICACHE line 3: Unused... */ |
| 37 | nop |
| 38 | nop |
| 39 | nop |
| 40 | nop |
| 41 | nop |
| 42 | nop |
| 43 | nop |
| 44 | nop |
| 45 | |
| 46 | /* PROT ** ICACHE line 4: Unused... */ |
| 47 | nop |
| 48 | nop |
| 49 | nop |
| 50 | nop |
| 51 | nop |
| 52 | nop |
| 53 | nop |
| 54 | nop |