Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -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[];
+1 −0
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ struct lppaca lppaca[] = {
		.end_of_quantum = 0xfffffffffffffffful,
		.slb_count = 64,
		.vmxregs_in_use = 0,
		.page_ins = 0,
	},
};

+10 −2
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@
#include <linux/kprobes.h>
#include <linux/kdebug.h>

#include <asm/firmware.h>
#include <asm/page.h>
#include <asm/pgtable.h>
#include <asm/mmu.h>
@@ -318,9 +319,16 @@ int __kprobes do_page_fault(struct pt_regs *regs, unsigned long address,
			goto do_sigbus;
		BUG();
	}
	if (ret & VM_FAULT_MAJOR)
	if (ret & VM_FAULT_MAJOR) {
		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++;
	up_read(&mm->mmap_sem);
	return 0;