Commit abe95e13 authored by Linus Torvalds's avatar Linus Torvalds

Merge http://lia64.bkbits.net/to-base-2.6

into ppc970.osdl.org:/home/torvalds/v2.6/linux
parents 0a72d6c4 961bb779
...@@ -63,6 +63,7 @@ check_pgt_cache (void) ...@@ -63,6 +63,7 @@ check_pgt_cache (void)
low = pgt_cache_water[0]; low = pgt_cache_water[0];
high = pgt_cache_water[1]; high = pgt_cache_water[1];
preempt_disable();
if (pgtable_cache_size > (u64) high) { if (pgtable_cache_size > (u64) high) {
do { do {
if (pgd_quicklist) if (pgd_quicklist)
...@@ -71,6 +72,7 @@ check_pgt_cache (void) ...@@ -71,6 +72,7 @@ check_pgt_cache (void)
free_page((unsigned long)pmd_alloc_one_fast(0, 0)); free_page((unsigned long)pmd_alloc_one_fast(0, 0));
} while (pgtable_cache_size > (u64) low); } while (pgtable_cache_size > (u64) low);
} }
preempt_enable();
} }
void void
......
...@@ -37,14 +37,20 @@ ...@@ -37,14 +37,20 @@
static inline pgd_t* static inline pgd_t*
pgd_alloc_one_fast (struct mm_struct *mm) pgd_alloc_one_fast (struct mm_struct *mm)
{ {
unsigned long *ret = pgd_quicklist; unsigned long *ret = NULL;
preempt_disable();
ret = pgd_quicklist;
if (likely(ret != NULL)) { if (likely(ret != NULL)) {
pgd_quicklist = (unsigned long *)(*ret); pgd_quicklist = (unsigned long *)(*ret);
ret[0] = 0; ret[0] = 0;
--pgtable_cache_size; --pgtable_cache_size;
} else } else
ret = NULL; ret = NULL;
preempt_enable();
return (pgd_t *) ret; return (pgd_t *) ret;
} }
...@@ -65,9 +71,11 @@ pgd_alloc (struct mm_struct *mm) ...@@ -65,9 +71,11 @@ pgd_alloc (struct mm_struct *mm)
static inline void static inline void
pgd_free (pgd_t *pgd) pgd_free (pgd_t *pgd)
{ {
preempt_disable();
*(unsigned long *)pgd = (unsigned long) pgd_quicklist; *(unsigned long *)pgd = (unsigned long) pgd_quicklist;
pgd_quicklist = (unsigned long *) pgd; pgd_quicklist = (unsigned long *) pgd;
++pgtable_cache_size; ++pgtable_cache_size;
preempt_enable();
} }
static inline void static inline void
...@@ -80,13 +88,19 @@ pgd_populate (struct mm_struct *mm, pgd_t *pgd_entry, pmd_t *pmd) ...@@ -80,13 +88,19 @@ pgd_populate (struct mm_struct *mm, pgd_t *pgd_entry, pmd_t *pmd)
static inline pmd_t* static inline pmd_t*
pmd_alloc_one_fast (struct mm_struct *mm, unsigned long addr) pmd_alloc_one_fast (struct mm_struct *mm, unsigned long addr)
{ {
unsigned long *ret = (unsigned long *)pmd_quicklist; unsigned long *ret = NULL;
preempt_disable();
ret = (unsigned long *)pmd_quicklist;
if (likely(ret != NULL)) { if (likely(ret != NULL)) {
pmd_quicklist = (unsigned long *)(*ret); pmd_quicklist = (unsigned long *)(*ret);
ret[0] = 0; ret[0] = 0;
--pgtable_cache_size; --pgtable_cache_size;
} }
preempt_enable();
return (pmd_t *)ret; return (pmd_t *)ret;
} }
...@@ -103,9 +117,11 @@ pmd_alloc_one (struct mm_struct *mm, unsigned long addr) ...@@ -103,9 +117,11 @@ pmd_alloc_one (struct mm_struct *mm, unsigned long addr)
static inline void static inline void
pmd_free (pmd_t *pmd) pmd_free (pmd_t *pmd)
{ {
preempt_disable();
*(unsigned long *)pmd = (unsigned long) pmd_quicklist; *(unsigned long *)pmd = (unsigned long) pmd_quicklist;
pmd_quicklist = (unsigned long *) pmd; pmd_quicklist = (unsigned long *) pmd;
++pgtable_cache_size; ++pgtable_cache_size;
preempt_enable();
} }
#define __pmd_free_tlb(tlb, pmd) pmd_free(pmd) #define __pmd_free_tlb(tlb, pmd) pmd_free(pmd)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment