Commit 409001948d9f221c94a61c3ee96de112755fc04d
Committed by
Paul Mackerras
1 parent
1ef8014deb
Exists in
master
and in
7 other branches
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: Brian King <brking@linux.vnet.ibm.com> Signed-off-by: Paul Mackerras <paulus@samba.org>
Showing 3 changed files with 13 additions and 3 deletions Side-by-side Diff
arch/powerpc/include/asm/lppaca.h
... | ... | @@ -133,7 +133,8 @@ |
133 | 133 | //============================================================================= |
134 | 134 | // CACHE_LINE_4-5 0x0180 - 0x027F Contains PMC interrupt data |
135 | 135 | //============================================================================= |
136 | - u8 pmc_save_area[256]; // PMC interrupt Area x00-xFF | |
136 | + u32 page_ins; // CMO Hint - # page ins by OS x00-x04 | |
137 | + u8 pmc_save_area[252]; // PMC interrupt Area x04-xFF | |
137 | 138 | } __attribute__((__aligned__(0x400))); |
138 | 139 | |
139 | 140 | extern struct lppaca lppaca[]; |
arch/powerpc/kernel/paca.c
arch/powerpc/mm/fault.c
... | ... | @@ -30,6 +30,7 @@ |
30 | 30 | #include <linux/kprobes.h> |
31 | 31 | #include <linux/kdebug.h> |
32 | 32 | |
33 | +#include <asm/firmware.h> | |
33 | 34 | #include <asm/page.h> |
34 | 35 | #include <asm/pgtable.h> |
35 | 36 | #include <asm/mmu.h> |
36 | 37 | |
... | ... | @@ -318,9 +319,16 @@ |
318 | 319 | goto do_sigbus; |
319 | 320 | BUG(); |
320 | 321 | } |
321 | - if (ret & VM_FAULT_MAJOR) | |
322 | + if (ret & VM_FAULT_MAJOR) { | |
322 | 323 | current->maj_flt++; |
323 | - else | |
324 | +#ifdef CONFIG_PPC_SMLPAR | |
325 | + if (firmware_has_feature(FW_FEATURE_CMO)) { | |
326 | + preempt_disable(); | |
327 | + get_lppaca()->page_ins++; | |
328 | + preempt_enable(); | |
329 | + } | |
330 | +#endif | |
331 | + } else | |
324 | 332 | current->min_flt++; |
325 | 333 | up_read(&mm->mmap_sem); |
326 | 334 | return 0; |