From 7da5ab08ef297d490149b7ed5cf5a0706ee069cd Mon Sep 17 00:00:00 2001 From: Cliff Wickman Date: Thu, 16 Sep 2010 11:44:02 -0500 Subject: [PATCH] --- yaml --- r: 212063 b: refs/heads/master c: 3ee48b6af49cf534ca2f481ecc484b156a41451d h: refs/heads/master i: 212061: 263b9b3d9548352f62bc1d944beedda1861e7ecd 212059: 2a7d90df161795978d324a8356264dc7971d5385 212055: 7322e17090c54407188b5da10486e3ab232c9d83 212047: 06df4fa69d968cbb69101ff7ebc7d513078f1090 212031: ec08ebc390eb06b9702d876c5caaa04396feed1d v: v3 --- [refs] | 2 +- trunk/arch/x86/include/asm/io.h | 1 + trunk/arch/x86/kernel/crash_dump_64.c | 1 + trunk/mm/vmalloc.c | 9 +++++++++ 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 215ff2b72398..7a9c2406b7d9 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 37a2f9f30a360fb03522d15c85c78265ccd80287 +refs/heads/master: 3ee48b6af49cf534ca2f481ecc484b156a41451d diff --git a/trunk/arch/x86/include/asm/io.h b/trunk/arch/x86/include/asm/io.h index 30a3e9776123..6a45ec41ec26 100644 --- a/trunk/arch/x86/include/asm/io.h +++ b/trunk/arch/x86/include/asm/io.h @@ -206,6 +206,7 @@ static inline void __iomem *ioremap(resource_size_t offset, unsigned long size) extern void iounmap(volatile void __iomem *addr); +extern void set_iounmap_nonlazy(void); #ifdef __KERNEL__ diff --git a/trunk/arch/x86/kernel/crash_dump_64.c b/trunk/arch/x86/kernel/crash_dump_64.c index bf43188ca654..994828899e09 100644 --- a/trunk/arch/x86/kernel/crash_dump_64.c +++ b/trunk/arch/x86/kernel/crash_dump_64.c @@ -46,6 +46,7 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf, } else memcpy(buf, vaddr + offset, csize); + set_iounmap_nonlazy(); iounmap(vaddr); return csize; } diff --git a/trunk/mm/vmalloc.c b/trunk/mm/vmalloc.c index 6b8889da69a6..d8087f0db507 100644 --- a/trunk/mm/vmalloc.c +++ b/trunk/mm/vmalloc.c @@ -516,6 +516,15 @@ static atomic_t vmap_lazy_nr = ATOMIC_INIT(0); /* for per-CPU blocks */ static void purge_fragmented_blocks_allcpus(void); +/* + * called before a call to iounmap() if the caller wants vm_area_struct's + * immediately freed. + */ +void set_iounmap_nonlazy(void) +{ + atomic_set(&vmap_lazy_nr, lazy_max_pages()+1); +} + /* * Purges all lazily-freed vmap areas. *