Now that debug pagealloc uses a separate function it is better
to change standard change_page_attr back to init_mm semaphore locking like 64bit.
Various things are simpler when sleeping is allowed.
Signed-off-by: Andi Kleen <ak@suse.de>
---
arch/x86/mm/pageattr_32.c | 14 +++++---------
1 file changed, 5 insertions(+), 9 deletions(-)
Index: linux/arch/x86/mm/pageattr_32.c
===================================================================
--- linux.orig/arch/x86/mm/pageattr_32.c
+++ linux/arch/x86/mm/pageattr_32.c
@@ -14,10 +14,9 @@
#include <asm/pgalloc.h>
#include <asm/sections.h>
-static DEFINE_SPINLOCK(cpa_lock);
+/* Protected by init_mm.mmap_sem */
static struct list_head df_list = LIST_HEAD_INIT(df_list);
-
pte_t *lookup_address(unsigned long address, int *level)
{
pgd_t *pgd = pgd_offset_k(address);
@@ -46,9 +45,7 @@ static struct page *split_large_page(uns
struct page *base;
pte_t *pbase;
- spin_unlock_irq(&cpa_lock);
base = alloc_pages(GFP_KERNEL, 0);
- spin_lock_irq(&cpa_lock);
if (!base)
return NULL;
@@ -224,15 +221,14 @@ int change_page_attr(struct page *page,
{
int err = 0;
int i;
- unsigned long flags;
- spin_lock_irqsave(&cpa_lock, flags);
+ down_write(&init_mm.mmap_sem);
for (i = 0; i < numpages; i++, page++) {
err = __change_page_attr(page, prot);
if (err)
break;
}
- spin_unlock_irqrestore(&cpa_lock, flags);
+ up_write(&init_mm.mmap_sem);
return err;
}
@@ -243,9 +239,9 @@ void global_flush_tlb(void)
BUG_ON(irqs_disabled());
- spin_lock_irq(&cpa_lock);
+ down_write(&init_mm.mmap_sem);
list_replace_init(&df_list, &l);
- spin_unlock_irq(&cpa_lock);
+ up_write(&init_mm.mmap_sem);
flush_map(&l);
list_for_each_entry_safe(pg, next, &l, lru) {
list_del(&pg->lru);
--
| holzheu | [RFC/PATCH] Documentation of kernel messages |
| Rafael J. Wysocki | [Bug #11865] WOL for E100 Doesn't Work Anymore |
| Lai Jiangshan | [PATCH 1/7] mm: introduce simple_malloc()/simple_free() |
| Ingo Molnar | [git pull] scheduler updates |
git: | |
| Tomash Brechko | Re: GIT vs Other: Need argument |
| freku045 | [PATCH 4/25] git-cherry: Print the usage message if we get an unknown option. |
| Adam Piątyszek | [PATCH] git-send-email.perl: check for lines longer than 998 characters |
| Elijah Newren | Trying to use git-filter-branch to compress history by removing large, obsolete bi... |
| GVG GVG | ssh_exchange_identification: Connection closed by remote host |
| Richard Stallman | Re: Real men don't attack straw men |
| Richard Stallman | Real men don't attack straw men |
| Julien TOUCHE | setting up ssh tunnel/vpn |
| Jim Winstead Jr. | Re: Root Disk/Book Disk Compatibility |
| Robert Blum | Re:help again and again |
| Drew Eckhardt | bootsector.S @X patch |
| Qi Xia | Re: inode limit ? |
| Kernel Panic when schedule is called | 8 minutes ago | Linux kernel |
| mmap write protection fail over coldfire 5475 | 1 hour ago | Linux kernel |
| VPN's on NetBSD | 18 hours ago | NetBSD |
| Why does uClinux 2.6.18 bootup block SuperIO UART IRQs that BIOS configured | 19 hours ago | Linux kernel |
| USB statistics | 21 hours ago | Linux kernel |
| Block Sub System query | 1 day ago | Linux kernel |
| kernel module to intercept socket creation | 1 day ago | Linux kernel |
| Image size changing during each build | 1 day ago | Linux kernel |
| Soft lock bug | 1 day ago | Linux kernel |
| sysctl - dynamic registration problem | 1 day ago | Linux kernel |
