|
@@ -24,9 +24,9 @@
|
|
* Also makes sure that the subpage_prot_table structure is
|
|
* Also makes sure that the subpage_prot_table structure is
|
|
* reinitialized for the next user.
|
|
* reinitialized for the next user.
|
|
*/
|
|
*/
|
|
-void subpage_prot_free(pgd_t *pgd)
|
|
|
|
|
|
+void subpage_prot_free(struct mm_struct *mm)
|
|
{
|
|
{
|
|
- struct subpage_prot_table *spt = pgd_subpage_prot(pgd);
|
|
|
|
|
|
+ struct subpage_prot_table *spt = &mm->context.spt;
|
|
unsigned long i, j, addr;
|
|
unsigned long i, j, addr;
|
|
u32 **p;
|
|
u32 **p;
|
|
|
|
|
|
@@ -51,6 +51,13 @@ void subpage_prot_free(pgd_t *pgd)
|
|
spt->maxaddr = 0;
|
|
spt->maxaddr = 0;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+void subpage_prot_init_new_context(struct mm_struct *mm)
|
|
|
|
+{
|
|
|
|
+ struct subpage_prot_table *spt = &mm->context.spt;
|
|
|
|
+
|
|
|
|
+ memset(spt, 0, sizeof(*spt));
|
|
|
|
+}
|
|
|
|
+
|
|
static void hpte_flush_range(struct mm_struct *mm, unsigned long addr,
|
|
static void hpte_flush_range(struct mm_struct *mm, unsigned long addr,
|
|
int npages)
|
|
int npages)
|
|
{
|
|
{
|
|
@@ -87,7 +94,7 @@ static void hpte_flush_range(struct mm_struct *mm, unsigned long addr,
|
|
static void subpage_prot_clear(unsigned long addr, unsigned long len)
|
|
static void subpage_prot_clear(unsigned long addr, unsigned long len)
|
|
{
|
|
{
|
|
struct mm_struct *mm = current->mm;
|
|
struct mm_struct *mm = current->mm;
|
|
- struct subpage_prot_table *spt = pgd_subpage_prot(mm->pgd);
|
|
|
|
|
|
+ struct subpage_prot_table *spt = &mm->context.spt;
|
|
u32 **spm, *spp;
|
|
u32 **spm, *spp;
|
|
int i, nw;
|
|
int i, nw;
|
|
unsigned long next, limit;
|
|
unsigned long next, limit;
|
|
@@ -136,7 +143,7 @@ static void subpage_prot_clear(unsigned long addr, unsigned long len)
|
|
long sys_subpage_prot(unsigned long addr, unsigned long len, u32 __user *map)
|
|
long sys_subpage_prot(unsigned long addr, unsigned long len, u32 __user *map)
|
|
{
|
|
{
|
|
struct mm_struct *mm = current->mm;
|
|
struct mm_struct *mm = current->mm;
|
|
- struct subpage_prot_table *spt = pgd_subpage_prot(mm->pgd);
|
|
|
|
|
|
+ struct subpage_prot_table *spt = &mm->context.spt;
|
|
u32 **spm, *spp;
|
|
u32 **spm, *spp;
|
|
int i, nw;
|
|
int i, nw;
|
|
unsigned long next, limit;
|
|
unsigned long next, limit;
|