Commit 40900194 authored by Brian King's avatar Brian King Committed by Paul Mackerras

powerpc: Update page-in counter for CMM

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: default avatarBrian King <brking@linux.vnet.ibm.com>
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
parent 1ef8014d
...@@ -133,7 +133,8 @@ struct lppaca { ...@@ -133,7 +133,8 @@ struct lppaca {
//============================================================================= //=============================================================================
// CACHE_LINE_4-5 0x0180 - 0x027F Contains PMC interrupt data // 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))); } __attribute__((__aligned__(0x400)));
extern struct lppaca lppaca[]; extern struct lppaca lppaca[];
......
...@@ -37,6 +37,7 @@ struct lppaca lppaca[] = { ...@@ -37,6 +37,7 @@ struct lppaca lppaca[] = {
.end_of_quantum = 0xfffffffffffffffful, .end_of_quantum = 0xfffffffffffffffful,
.slb_count = 64, .slb_count = 64,
.vmxregs_in_use = 0, .vmxregs_in_use = 0,
.page_ins = 0,
}, },
}; };
......
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#include <linux/kprobes.h> #include <linux/kprobes.h>
#include <linux/kdebug.h> #include <linux/kdebug.h>
#include <asm/firmware.h>
#include <asm/page.h> #include <asm/page.h>
#include <asm/pgtable.h> #include <asm/pgtable.h>
#include <asm/mmu.h> #include <asm/mmu.h>
...@@ -318,9 +319,16 @@ int __kprobes do_page_fault(struct pt_regs *regs, unsigned long address, ...@@ -318,9 +319,16 @@ int __kprobes do_page_fault(struct pt_regs *regs, unsigned long address,
goto do_sigbus; goto do_sigbus;
BUG(); BUG();
} }
if (ret & VM_FAULT_MAJOR) if (ret & VM_FAULT_MAJOR) {
current->maj_flt++; current->maj_flt++;
else #ifdef CONFIG_PPC_SMLPAR
if (firmware_has_feature(FW_FEATURE_CMO)) {
preempt_disable();
get_lppaca()->page_ins++;
preempt_enable();
}
#endif
} else
current->min_flt++; current->min_flt++;
up_read(&mm->mmap_sem); up_read(&mm->mmap_sem);
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment