diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2020-12-14 17:34:12 -0800 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2020-12-14 17:34:12 -0800 | 
| commit | 8a8ca83ec3cf7ffc69020c189e3d368b1d4ba98a (patch) | |
| tree | 62b54c44b652cb894f0e9d4847b753259c5de4a8 /arch/powerpc | |
| parent | e857b6fcc5af0fbe042bec7e56a1533fe78ef594 (diff) | |
| parent | c2208046bba6842dc232a600dc5cafc2fca41078 (diff) | |
| download | linux-8a8ca83ec3cf7ffc69020c189e3d368b1d4ba98a.tar.bz2 | |
Merge tag 'perf-core-2020-12-14' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull perf updates from Thomas Gleixner:
 "Core:
   - Better handling of page table leaves on archictectures which have
     architectures have non-pagetable aligned huge/large pages. For such
     architectures a leaf can actually be part of a larger entry.
   - Prevent a deadlock vs exec_update_mutex
  Architectures:
   - The related updates for page size calculation of leaf entries
   - The usual churn to support new CPUs
   - Small fixes and improvements all over the place"
* tag 'perf-core-2020-12-14' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (24 commits)
  perf/x86/intel: Add Tremont Topdown support
  uprobes/x86: Fix fall-through warnings for Clang
  perf/x86: Fix fall-through warnings for Clang
  kprobes/x86: Fix fall-through warnings for Clang
  perf/x86/intel/lbr: Fix the return type of get_lbr_cycles()
  perf/x86/intel: Fix rtm_abort_event encoding on Ice Lake
  x86/kprobes: Restore BTF if the single-stepping is cancelled
  perf: Break deadlock involving exec_update_mutex
  sparc64/mm: Implement pXX_leaf_size() support
  powerpc/8xx: Implement pXX_leaf_size() support
  arm64/mm: Implement pXX_leaf_size() support
  perf/core: Fix arch_perf_get_page_size()
  mm: Introduce pXX_leaf_size()
  mm/gup: Provide gup_get_pte() more generic
  perf/x86/intel: Add event constraint for CYCLE_ACTIVITY.STALLS_MEM_ANY
  perf/x86/intel/uncore: Add Rocket Lake support
  perf/x86/msr: Add Rocket Lake CPU support
  perf/x86/cstate: Add Rocket Lake CPU support
  perf/x86/intel: Add Rocket Lake CPU support
  perf,mm: Handle non-page-table-aligned hugetlbfs
  ...
Diffstat (limited to 'arch/powerpc')
| -rw-r--r-- | arch/powerpc/include/asm/nohash/32/pte-8xx.h | 23 | ||||
| -rw-r--r-- | arch/powerpc/perf/core-book3s.c | 6 | 
2 files changed, 27 insertions, 2 deletions
| diff --git a/arch/powerpc/include/asm/nohash/32/pte-8xx.h b/arch/powerpc/include/asm/nohash/32/pte-8xx.h index 1581204467e1..fcc48d590d88 100644 --- a/arch/powerpc/include/asm/nohash/32/pte-8xx.h +++ b/arch/powerpc/include/asm/nohash/32/pte-8xx.h @@ -135,6 +135,29 @@ static inline pte_t pte_mkhuge(pte_t pte)  }  #define pte_mkhuge pte_mkhuge + +static inline unsigned long pgd_leaf_size(pgd_t pgd) +{ +	if (pgd_val(pgd) & _PMD_PAGE_8M) +		return SZ_8M; +	return SZ_4M; +} + +#define pgd_leaf_size pgd_leaf_size + +static inline unsigned long pte_leaf_size(pte_t pte) +{ +	pte_basic_t val = pte_val(pte); + +	if (val & _PAGE_HUGE) +		return SZ_512K; +	if (val & _PAGE_SPS) +		return SZ_16K; +	return SZ_4K; +} + +#define pte_leaf_size pte_leaf_size +  #endif  #endif /* __KERNEL__ */ diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c index 08643cba1494..6586f7e71cfb 100644 --- a/arch/powerpc/perf/core-book3s.c +++ b/arch/powerpc/perf/core-book3s.c @@ -2074,6 +2074,9 @@ static struct pmu power_pmu = {  	.sched_task	= power_pmu_sched_task,  }; +#define PERF_SAMPLE_ADDR_TYPE  (PERF_SAMPLE_ADDR |		\ +				PERF_SAMPLE_PHYS_ADDR |		\ +				PERF_SAMPLE_DATA_PAGE_SIZE)  /*   * A counter has overflowed; update its count and record   * things if requested.  Note that interrupts are hard-disabled @@ -2129,8 +2132,7 @@ static void record_and_restart(struct perf_event *event, unsigned long val,  		perf_sample_data_init(&data, ~0ULL, event->hw.last_period); -		if (event->attr.sample_type & -		    (PERF_SAMPLE_ADDR | PERF_SAMPLE_PHYS_ADDR)) +		if (event->attr.sample_type & PERF_SAMPLE_ADDR_TYPE)  			perf_get_data_addr(event, regs, &data.addr);  		if (event->attr.sample_type & PERF_SAMPLE_BRANCH_STACK) { |