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

Commit a084b667 authored by David S. Miller's avatar David S. Miller
Browse files

sparc: Add missing SW perf fault events.

parent e7bef6b0
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@
#include <linux/signal.h>
#include <linux/mm.h>
#include <linux/smp.h>
#include <linux/perf_event.h>
#include <linux/interrupt.h>
#include <linux/module.h>
#include <linux/kdebug.h>
@@ -203,6 +204,8 @@ asmlinkage void do_sparc_fault(struct pt_regs *regs, int text_fault, int write,
        if (in_atomic() || !mm)
                goto no_context;

	perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, 0, regs, address);

	down_read(&mm->mmap_sem);

	/*
@@ -249,10 +252,15 @@ good_area:
			goto do_sigbus;
		BUG();
	}
	if (fault & VM_FAULT_MAJOR)
	if (fault & VM_FAULT_MAJOR) {
		current->maj_flt++;
	else
		perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MAJ, 1, 0,
			      regs, address);
	} else {
		current->min_flt++;
		perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MIN, 1, 0,
			      regs, address);
	}
	up_read(&mm->mmap_sem);
	return;

+10 −3
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@
#include <linux/mm.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/perf_event.h>
#include <linux/interrupt.h>
#include <linux/kprobes.h>
#include <linux/kdebug.h>
@@ -296,6 +297,8 @@ asmlinkage void __kprobes do_sparc64_fault(struct pt_regs *regs)
	if (in_atomic() || !mm)
		goto intr_or_no_mm;

	perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, 0, regs, address);

	if (!down_read_trylock(&mm->mmap_sem)) {
		if ((regs->tstate & TSTATE_PRIV) &&
		    !search_exception_tables(regs->tpc)) {
@@ -400,11 +403,15 @@ good_area:
			goto do_sigbus;
		BUG();
	}
	if (fault & VM_FAULT_MAJOR)
	if (fault & VM_FAULT_MAJOR) {
		current->maj_flt++;
	else
		perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MAJ, 1, 0,
			      regs, address);
	} else {
		current->min_flt++;

		perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MIN, 1, 0,
			      regs, address);
	}
	up_read(&mm->mmap_sem);

	mm_rss = get_mm_rss(mm);