Hi Andi, On Tue, Dec 8, 2009 at 11:16 PM, Andi Kleen <andi@xxxxxxxxxxxxxx> wrote: > > Process based injection is much easier to handle for test programs, > who can first bring a page into a specific state and then test. > So add a new MADV_SOFT_OFFLINE to soft offline a page, similar > to the existing hard offline injector. I see that this made its way into 2.6.33. Could you write a short piece on it for the madvise.2 man page? Thanks, Michael > Signed-off-by: Andi Kleen <ak@xxxxxxxxxxxxxxx> > > --- > include/asm-generic/mman-common.h | 1 + > mm/madvise.c | 15 ++++++++++++--- > 2 files changed, 13 insertions(+), 3 deletions(-) > > Index: linux/include/asm-generic/mman-common.h > =================================================================== > --- linux.orig/include/asm-generic/mman-common.h > +++ linux/include/asm-generic/mman-common.h > @@ -35,6 +35,7 @@ > #define MADV_DONTFORK 10 /* don't inherit across fork */ > #define MADV_DOFORK 11 /* do inherit across fork */ > #define MADV_HWPOISON 100 /* poison a page for testing */ > +#define MADV_SOFT_OFFLINE 101 /* soft offline page for testing */ > > #define MADV_MERGEABLE 12 /* KSM may merge identical pages */ > #define MADV_UNMERGEABLE 13 /* KSM may not merge identical pages */ > Index: linux/mm/madvise.c > =================================================================== > --- linux.orig/mm/madvise.c > +++ linux/mm/madvise.c > @@ -9,6 +9,7 @@ > #include <linux/pagemap.h> > #include <linux/syscalls.h> > #include <linux/mempolicy.h> > +#include <linux/page-isolation.h> > #include <linux/hugetlb.h> > #include <linux/sched.h> > #include <linux/ksm.h> > @@ -222,7 +223,7 @@ static long madvise_remove(struct vm_are > /* > * Error injection support for memory error handling. > */ > -static int madvise_hwpoison(unsigned long start, unsigned long end) > +static int madvise_hwpoison(int bhv, unsigned long start, unsigned long end) > { > int ret = 0; > > @@ -233,6 +234,14 @@ static int madvise_hwpoison(unsigned lon > int ret = get_user_pages_fast(start, 1, 0, &p); > if (ret != 1) > return ret; > + if (bhv == MADV_SOFT_OFFLINE) { > + printk(KERN_INFO "Soft offlining page %lx at %lx\n", > + page_to_pfn(p), start); > + ret = soft_offline_page(p, MF_COUNT_INCREASED); > + if (ret) > + break; > + continue; > + } > printk(KERN_INFO "Injecting memory failure for page %lx at %lx\n", > page_to_pfn(p), start); > /* Ignore return value for now */ > @@ -333,8 +342,8 @@ SYSCALL_DEFINE3(madvise, unsigned long, > size_t len; > > #ifdef CONFIG_MEMORY_FAILURE > - if (behavior == MADV_HWPOISON) > - return madvise_hwpoison(start, start+len_in); > + if (behavior == MADV_HWPOISON || behavior == MADV_SOFT_OFFLINE) > + return madvise_hwpoison(behavior, start, start+len_in); > #endif > if (!madvise_behavior_valid(behavior)) > return error; > > -- > To unsubscribe, send a message with 'unsubscribe linux-mm' in > the body to majordomo@xxxxxxxxxx For more info on Linux MM, > see: http://www.linux-mm.org/ . > Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a> > -- Michael Kerrisk Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/ Author of "The Linux Programming Interface", http://blog.man7.org/ -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxxx For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href