git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
This commit was manufactured by cvs2svn to create tag
[linux-2.6.git]
/
arch
/
ppc
/
mm
/
pgtable.c
diff --git
a/arch/ppc/mm/pgtable.c
b/arch/ppc/mm/pgtable.c
index
b1b93fc
..
04c1481
100644
(file)
--- a/
arch/ppc/mm/pgtable.c
+++ b/
arch/ppc/mm/pgtable.c
@@
-86,9
+86,14
@@
pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address)
extern int mem_init_done;
extern void *early_get_page(void);
extern int mem_init_done;
extern void *early_get_page(void);
- if (mem_init_done)
+ if (mem_init_done)
{
pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT);
pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT);
- else
+ if (pte) {
+ struct page *ptepage = virt_to_page(pte);
+ ptepage->mapping = (void *) mm;
+ ptepage->index = address & PMD_MASK;
+ }
+ } else
pte = (pte_t *)early_get_page();
if (pte)
clear_page(pte);
pte = (pte_t *)early_get_page();
if (pte)
clear_page(pte);
@@
-97,7
+102,7
@@
pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address)
struct page *pte_alloc_one(struct mm_struct *mm, unsigned long address)
{
struct page *pte_alloc_one(struct mm_struct *mm, unsigned long address)
{
- struct page *pte;
+ struct page *pte
page
;
#ifdef CONFIG_HIGHPTE
int flags = GFP_KERNEL | __GFP_HIGHMEM | __GFP_REPEAT;
#ifdef CONFIG_HIGHPTE
int flags = GFP_KERNEL | __GFP_HIGHMEM | __GFP_REPEAT;
@@
-105,10
+110,13
@@
struct page *pte_alloc_one(struct mm_struct *mm, unsigned long address)
int flags = GFP_KERNEL | __GFP_REPEAT;
#endif
int flags = GFP_KERNEL | __GFP_REPEAT;
#endif
- pte = alloc_pages(flags, 0);
- if (pte)
- clear_highpage(pte);
- return pte;
+ ptepage = alloc_pages(flags, 0);
+ if (ptepage) {
+ ptepage->mapping = (void *) mm;
+ ptepage->index = address & PMD_MASK;
+ clear_highpage(ptepage);
+ }
+ return ptepage;
}
void pte_free_kernel(pte_t *pte)
}
void pte_free_kernel(pte_t *pte)
@@
-116,15
+124,17
@@
void pte_free_kernel(pte_t *pte)
#ifdef CONFIG_SMP
hash_page_sync();
#endif
#ifdef CONFIG_SMP
hash_page_sync();
#endif
+ virt_to_page(pte)->mapping = NULL;
free_page((unsigned long)pte);
}
free_page((unsigned long)pte);
}
-void pte_free(struct page *pte)
+void pte_free(struct page *pte
page
)
{
#ifdef CONFIG_SMP
hash_page_sync();
#endif
{
#ifdef CONFIG_SMP
hash_page_sync();
#endif
- __free_page(pte);
+ ptepage->mapping = NULL;
+ __free_page(ptepage);
}
#ifndef CONFIG_44x
}
#ifndef CONFIG_44x