diff options
Diffstat (limited to 'arch/powerpc/mm/subpage-prot.c')
| -rw-r--r-- | arch/powerpc/mm/subpage-prot.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/arch/powerpc/mm/subpage-prot.c b/arch/powerpc/mm/subpage-prot.c index 4cafc0c33d0a..a040b81e93bd 100644 --- a/arch/powerpc/mm/subpage-prot.c +++ b/arch/powerpc/mm/subpage-prot.c | |||
| @@ -24,9 +24,9 @@ | |||
| 24 | * Also makes sure that the subpage_prot_table structure is | 24 | * Also makes sure that the subpage_prot_table structure is |
| 25 | * reinitialized for the next user. | 25 | * reinitialized for the next user. |
| 26 | */ | 26 | */ |
| 27 | void subpage_prot_free(pgd_t *pgd) | 27 | void subpage_prot_free(struct mm_struct *mm) |
| 28 | { | 28 | { |
| 29 | struct subpage_prot_table *spt = pgd_subpage_prot(pgd); | 29 | struct subpage_prot_table *spt = &mm->context.spt; |
| 30 | unsigned long i, j, addr; | 30 | unsigned long i, j, addr; |
| 31 | u32 **p; | 31 | u32 **p; |
| 32 | 32 | ||
| @@ -51,6 +51,13 @@ void subpage_prot_free(pgd_t *pgd) | |||
| 51 | spt->maxaddr = 0; | 51 | spt->maxaddr = 0; |
| 52 | } | 52 | } |
| 53 | 53 | ||
| 54 | void subpage_prot_init_new_context(struct mm_struct *mm) | ||
| 55 | { | ||
| 56 | struct subpage_prot_table *spt = &mm->context.spt; | ||
| 57 | |||
| 58 | memset(spt, 0, sizeof(*spt)); | ||
| 59 | } | ||
| 60 | |||
| 54 | static void hpte_flush_range(struct mm_struct *mm, unsigned long addr, | 61 | static void hpte_flush_range(struct mm_struct *mm, unsigned long addr, |
| 55 | int npages) | 62 | int npages) |
| 56 | { | 63 | { |
| @@ -87,7 +94,7 @@ static void hpte_flush_range(struct mm_struct *mm, unsigned long addr, | |||
| 87 | static void subpage_prot_clear(unsigned long addr, unsigned long len) | 94 | static void subpage_prot_clear(unsigned long addr, unsigned long len) |
| 88 | { | 95 | { |
| 89 | struct mm_struct *mm = current->mm; | 96 | struct mm_struct *mm = current->mm; |
| 90 | struct subpage_prot_table *spt = pgd_subpage_prot(mm->pgd); | 97 | struct subpage_prot_table *spt = &mm->context.spt; |
| 91 | u32 **spm, *spp; | 98 | u32 **spm, *spp; |
| 92 | int i, nw; | 99 | int i, nw; |
| 93 | unsigned long next, limit; | 100 | unsigned long next, limit; |
| @@ -136,7 +143,7 @@ static void subpage_prot_clear(unsigned long addr, unsigned long len) | |||
| 136 | long sys_subpage_prot(unsigned long addr, unsigned long len, u32 __user *map) | 143 | long sys_subpage_prot(unsigned long addr, unsigned long len, u32 __user *map) |
| 137 | { | 144 | { |
| 138 | struct mm_struct *mm = current->mm; | 145 | struct mm_struct *mm = current->mm; |
| 139 | struct subpage_prot_table *spt = pgd_subpage_prot(mm->pgd); | 146 | struct subpage_prot_table *spt = &mm->context.spt; |
| 140 | u32 **spm, *spp; | 147 | u32 **spm, *spp; |
| 141 | int i, nw; | 148 | int i, nw; |
| 142 | unsigned long next, limit; | 149 | unsigned long next, limit; |
