Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 175747
b: refs/heads/master
c: e85a471
h: refs/heads/master
i:
  175745: 5ee1edf
  175743: 225c6a1
v: v3
  • Loading branch information
Alexander Graf authored and Benjamin Herrenschmidt committed Nov 5, 2009
1 parent dc940ca commit 4ef03e5
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 4 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 4ab79aa801b6b4f2e2fb508d6107cdd9320d682d
refs/heads/master: e85a47106abb928e048d89d7fa48f982fcb018aa
2 changes: 2 additions & 0 deletions trunk/arch/powerpc/include/asm/mmu_context.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ extern void switch_slb(struct task_struct *tsk, struct mm_struct *mm);
extern void set_context(unsigned long id, pgd_t *pgd);

#ifdef CONFIG_PPC_BOOK3S_64
extern int __init_new_context(void);
extern void __destroy_context(int context_id);
static inline void mmu_context_init(void) { }
#else
extern void mmu_context_init(void);
Expand Down
24 changes: 21 additions & 3 deletions trunk/arch/powerpc/mm/mmu_context_hash64.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
#include <linux/mm.h>
#include <linux/spinlock.h>
#include <linux/idr.h>
#include <linux/module.h>

#include <asm/mmu_context.h>

Expand All @@ -32,7 +33,7 @@ static DEFINE_IDR(mmu_context_idr);
#define NO_CONTEXT 0
#define MAX_CONTEXT ((1UL << 19) - 1)

int init_new_context(struct task_struct *tsk, struct mm_struct *mm)
int __init_new_context(void)
{
int index;
int err;
Expand All @@ -57,6 +58,18 @@ int init_new_context(struct task_struct *tsk, struct mm_struct *mm)
return -ENOMEM;
}

return index;
}
EXPORT_SYMBOL_GPL(__init_new_context);

int init_new_context(struct task_struct *tsk, struct mm_struct *mm)
{
int index;

index = __init_new_context();
if (index < 0)
return index;

/* The old code would re-promote on fork, we don't do that
* when using slices as it could cause problem promoting slices
* that have been forced down to 4K
Expand All @@ -68,11 +81,16 @@ int init_new_context(struct task_struct *tsk, struct mm_struct *mm)
return 0;
}

void destroy_context(struct mm_struct *mm)
void __destroy_context(int context_id)
{
spin_lock(&mmu_context_lock);
idr_remove(&mmu_context_idr, mm->context.id);
idr_remove(&mmu_context_idr, context_id);
spin_unlock(&mmu_context_lock);
}
EXPORT_SYMBOL_GPL(__destroy_context);

void destroy_context(struct mm_struct *mm)
{
__destroy_context(mm->context.id);
mm->context.id = NO_CONTEXT;
}

0 comments on commit 4ef03e5

Please sign in to comment.