From c95b5eb4dbc2e17e1bc0e5e48148bce1a11b82c5 Mon Sep 17 00:00:00 2001 From: Ingo Molnar Date: Wed, 6 Feb 2008 22:39:45 +0100 Subject: [PATCH] --- yaml --- r: 83711 b: refs/heads/master c: 58d5d0d8dd52cbca988af24b5692a20b00285543 h: refs/heads/master i: 83709: 871a152bded19e591f650b3c373bdd008f6f0cd6 83707: ccea871a91e25f17bcab1d01efcdd7ea95744e29 83703: 9531333d12a60f755791cc9c812e256f9ed6c254 83695: ad00025c807ae5c89b895774fa2d3f2ce6d77a2d 83679: 6326adaf9e9a1c741b7c1db5ffc9aa97d7b4f6c4 83647: 4f6502c3b6a0d72caedff1358af84d1747570e8d 83583: 255167bed4992f028cbd8ec78312ddcd7fa3b417 83455: f3ddd4272cb8a8f272480b586747afcd74a93611 v: v3 --- [refs] | 2 +- trunk/arch/x86/mm/fault.c | 5 +++-- trunk/include/asm-x86/pgalloc_64.h | 10 ++++++---- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/[refs] b/[refs] index b60e26ad7929..47aa31c6bae1 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: a09771bef9a375091f8ae706d992e20970e5d1e7 +refs/heads/master: 58d5d0d8dd52cbca988af24b5692a20b00285543 diff --git a/trunk/arch/x86/mm/fault.c b/trunk/arch/x86/mm/fault.c index d8ed4006b3d2..621afb6343dc 100644 --- a/trunk/arch/x86/mm/fault.c +++ b/trunk/arch/x86/mm/fault.c @@ -958,11 +958,12 @@ void vmalloc_sync_all(void) for (address = start; address <= VMALLOC_END; address += PGDIR_SIZE) { if (!test_bit(pgd_index(address), insync)) { const pgd_t *pgd_ref = pgd_offset_k(address); + unsigned long flags; struct page *page; if (pgd_none(*pgd_ref)) continue; - spin_lock(&pgd_lock); + spin_lock_irqsave(&pgd_lock, flags); list_for_each_entry(page, &pgd_list, lru) { pgd_t *pgd; pgd = (pgd_t *)page_address(page) + pgd_index(address); @@ -971,7 +972,7 @@ void vmalloc_sync_all(void) else BUG_ON(pgd_page_vaddr(*pgd) != pgd_page_vaddr(*pgd_ref)); } - spin_unlock(&pgd_lock); + spin_unlock_irqrestore(&pgd_lock, flags); set_bit(pgd_index(address), insync); } if (address == start) diff --git a/trunk/include/asm-x86/pgalloc_64.h b/trunk/include/asm-x86/pgalloc_64.h index 315314ce4bfb..4f6220db22b1 100644 --- a/trunk/include/asm-x86/pgalloc_64.h +++ b/trunk/include/asm-x86/pgalloc_64.h @@ -42,19 +42,21 @@ static inline void pud_free(struct mm_struct *mm, pud_t *pud) static inline void pgd_list_add(pgd_t *pgd) { struct page *page = virt_to_page(pgd); + unsigned long flags; - spin_lock(&pgd_lock); + spin_lock_irqsave(&pgd_lock, flags); list_add(&page->lru, &pgd_list); - spin_unlock(&pgd_lock); + spin_unlock_irqrestore(&pgd_lock, flags); } static inline void pgd_list_del(pgd_t *pgd) { struct page *page = virt_to_page(pgd); + unsigned long flags; - spin_lock(&pgd_lock); + spin_lock_irqsave(&pgd_lock, flags); list_del(&page->lru); - spin_unlock(&pgd_lock); + spin_unlock_irqrestore(&pgd_lock, flags); } static inline pgd_t *pgd_alloc(struct mm_struct *mm)