Message ID | 48FE3B16.5050402@linux.vnet.ibm.com (mailing list archive) |
---|---|
State | Superseded, archived |
Delegated to: | Benjamin Herrenschmidt |
Headers | show |
> - if (ret & VM_FAULT_MAJOR) > + if (ret & VM_FAULT_MAJOR) { > current->maj_flt++; > - else > + preempt_disable(); > + get_lppaca()->page_ins++; > + preempt_enable(); > + } else That isn't going to work very well on 32-bit or non-pseries platforms :-) We need either something like a ppc_md. callback or at least a test for firmware feature... (which probably still needs an ifdef to build on 32 bit). Cheers, Ben.
diff -puN arch/powerpc/mm/fault.c~powerpc_vrm_mm_pressure arch/powerpc/mm/fault.c --- linux-2.6/arch/powerpc/mm/fault.c~powerpc_vrm_mm_pressure 2008-10-20 17:13:25.000000000 -0500 +++ linux-2.6-bjking1/arch/powerpc/mm/fault.c 2008-10-21 14:52:24.000000000 -0500 @@ -318,9 +318,12 @@ good_area: goto do_sigbus; BUG(); } - if (ret & VM_FAULT_MAJOR) + if (ret & VM_FAULT_MAJOR) { current->maj_flt++; - else + preempt_disable(); + get_lppaca()->page_ins++; + preempt_enable(); + } else current->min_flt++; up_read(&mm->mmap_sem); return 0; diff -puN arch/powerpc/include/asm/lppaca.h~powerpc_vrm_mm_pressure arch/powerpc/include/asm/lppaca.h --- linux-2.6/arch/powerpc/include/asm/lppaca.h~powerpc_vrm_mm_pressure 2008-10-20 17:13:25.000000000 -0500 +++ linux-2.6-bjking1/arch/powerpc/include/asm/lppaca.h 2008-10-21 13:46:45.000000000 -0500 @@ -133,7 +133,8 @@ struct lppaca { //============================================================================= // CACHE_LINE_4-5 0x0180 - 0x027F Contains PMC interrupt data //============================================================================= - u8 pmc_save_area[256]; // PMC interrupt Area x00-xFF + u32 page_ins; // CMO Hint - # page ins by OS x00-x04 + u8 pmc_save_area[252]; // PMC interrupt Area x04-xFF } __attribute__((__aligned__(0x400))); extern struct lppaca lppaca[]; diff -puN arch/powerpc/kernel/paca.c~powerpc_vrm_mm_pressure arch/powerpc/kernel/paca.c --- linux-2.6/arch/powerpc/kernel/paca.c~powerpc_vrm_mm_pressure 2008-10-20 17:13:25.000000000 -0500 +++ linux-2.6-bjking1/arch/powerpc/kernel/paca.c 2008-10-20 17:13:25.000000000 -0500 @@ -37,6 +37,7 @@ struct lppaca lppaca[] = { .end_of_quantum = 0xfffffffffffffffful, .slb_count = 64, .vmxregs_in_use = 0, + .page_ins = 0, }, };
A new field has been added to the VPA as a method for the client OS to communicate to firmware the number of page ins it is performing when running collaborative memory overcommit. The hypervisor will use this information to better determine if a partition is experiencing memory pressure and needs more memory allocated to it. Signed-off-by: Brian King <brking@linux.vnet.ibm.com> --- arch/powerpc/include/asm/lppaca.h | 3 ++- arch/powerpc/kernel/paca.c | 1 + arch/powerpc/mm/fault.c | 7 +++++-- 3 files changed, 8 insertions(+), 3 deletions(-)