mirror of
https://github.com/linux-msm/laptops-kernel.git
synced 2026-08-13 14:19:53 -07:00
arch: powerpc: Stop building and using oprofile
The "oprofile" user-space tools don't use the kernel OPROFILE support any more, and haven't in a long time. User-space has been converted to the perf interfaces. This commits stops building oprofile for powerpc and removes any reference to it from directories in arch/powerpc/ apart from arch/powerpc/oprofile, which will be removed in the next commit (this is broken into two commits as the size of the commit became very big, ~5k lines). Note that the member "oprofile_cpu_type" in "struct cpu_spec" isn't removed as it was also used by other parts of the code. Suggested-by: Christoph Hellwig <hch@infradead.org> Suggested-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> Acked-by: Robert Richter <rric@kernel.org> Acked-by: William Cohen <wcohen@redhat.com> Acked-by: Al Viro <viro@zeniv.linux.org.uk> Acked-by: Thomas Gleixner <tglx@linutronix.de>
This commit is contained in:
@@ -226,7 +226,6 @@ config PPC
|
||||
select HAVE_MOD_ARCH_SPECIFIC
|
||||
select HAVE_NMI if PERF_EVENTS || (PPC64 && PPC_BOOK3S)
|
||||
select HAVE_HARDLOCKUP_DETECTOR_ARCH if (PPC64 && PPC_BOOK3S)
|
||||
select HAVE_OPROFILE
|
||||
select HAVE_OPTPROBES if PPC64
|
||||
select HAVE_PERF_EVENTS
|
||||
select HAVE_PERF_EVENTS_NMI if PPC64
|
||||
|
||||
@@ -276,8 +276,6 @@ head-$(CONFIG_PPC_OF_BOOT_TRAMPOLINE) += arch/powerpc/kernel/prom_init.o
|
||||
# See arch/powerpc/Kbuild for content of core part of the kernel
|
||||
core-y += arch/powerpc/
|
||||
|
||||
drivers-$(CONFIG_OPROFILE) += arch/powerpc/oprofile/
|
||||
|
||||
# Default to zImage, override when needed
|
||||
all: zImage
|
||||
|
||||
|
||||
@@ -8,7 +8,6 @@ CONFIG_EXPERT=y
|
||||
CONFIG_KALLSYMS_ALL=y
|
||||
# CONFIG_SLUB_CPU_PARTIAL is not set
|
||||
CONFIG_PROFILING=y
|
||||
CONFIG_OPROFILE=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
|
||||
@@ -6,7 +6,6 @@ CONFIG_LOG_BUF_SHIFT=14
|
||||
CONFIG_EXPERT=y
|
||||
CONFIG_KALLSYMS_ALL=y
|
||||
CONFIG_PROFILING=y
|
||||
CONFIG_OPROFILE=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
|
||||
@@ -17,7 +17,6 @@ CONFIG_KALLSYMS_ALL=y
|
||||
CONFIG_BPF_SYSCALL=y
|
||||
CONFIG_EMBEDDED=y
|
||||
CONFIG_PROFILING=y
|
||||
CONFIG_OPROFILE=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
|
||||
@@ -7,7 +7,6 @@ CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_EXPERT=y
|
||||
CONFIG_KALLSYMS_ALL=y
|
||||
CONFIG_PROFILING=y
|
||||
CONFIG_OPROFILE=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
|
||||
@@ -14,7 +14,6 @@ CONFIG_CPUSETS=y
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
# CONFIG_COMPAT_BRK is not set
|
||||
CONFIG_PROFILING=y
|
||||
CONFIG_OPROFILE=m
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_PARTITION_ADVANCED=y
|
||||
|
||||
@@ -12,7 +12,6 @@ CONFIG_CGROUPS=y
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
# CONFIG_COMPAT_BRK is not set
|
||||
CONFIG_PROFILING=y
|
||||
CONFIG_OPROFILE=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_MODVERSIONS=y
|
||||
|
||||
@@ -9,7 +9,6 @@ CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
# CONFIG_COMPAT_BRK is not set
|
||||
CONFIG_PROFILING=y
|
||||
CONFIG_OPROFILE=m
|
||||
CONFIG_KPROBES=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
|
||||
@@ -7,7 +7,6 @@ CONFIG_NO_HZ=y
|
||||
CONFIG_HIGH_RES_TIMERS=y
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_PROFILING=y
|
||||
CONFIG_OPROFILE=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
|
||||
@@ -10,7 +10,6 @@ CONFIG_LOG_BUF_SHIFT=14
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
# CONFIG_COMPAT_BRK is not set
|
||||
CONFIG_PROFILING=y
|
||||
CONFIG_OPROFILE=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_MODULE_FORCE_UNLOAD=y
|
||||
|
||||
@@ -30,7 +30,6 @@ CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_BPF_SYSCALL=y
|
||||
# CONFIG_COMPAT_BRK is not set
|
||||
CONFIG_PROFILING=y
|
||||
CONFIG_OPROFILE=m
|
||||
CONFIG_KPROBES=y
|
||||
CONFIG_JUMP_LABEL=y
|
||||
CONFIG_MODULES=y
|
||||
|
||||
@@ -62,7 +62,6 @@ CONFIG_VIRTUALIZATION=y
|
||||
CONFIG_KVM_BOOK3S_64=m
|
||||
CONFIG_KVM_BOOK3S_64_HV=m
|
||||
CONFIG_VHOST_NET=m
|
||||
CONFIG_OPROFILE=m
|
||||
CONFIG_KPROBES=y
|
||||
CONFIG_JUMP_LABEL=y
|
||||
CONFIG_MODULES=y
|
||||
|
||||
@@ -14,7 +14,6 @@ CONFIG_CPUSETS=y
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
# CONFIG_COMPAT_BRK is not set
|
||||
CONFIG_PROFILING=y
|
||||
CONFIG_OPROFILE=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_MODVERSIONS=y
|
||||
|
||||
@@ -19,7 +19,6 @@ CONFIG_USER_NS=y
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
# CONFIG_COMPAT_BRK is not set
|
||||
CONFIG_PROFILING=y
|
||||
CONFIG_OPROFILE=m
|
||||
CONFIG_KPROBES=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
|
||||
@@ -13,7 +13,6 @@ CONFIG_EMBEDDED=y
|
||||
# CONFIG_COMPAT_BRK is not set
|
||||
CONFIG_SLAB=y
|
||||
CONFIG_PROFILING=y
|
||||
CONFIG_OPROFILE=m
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
# CONFIG_PPC_POWERNV is not set
|
||||
|
||||
@@ -29,7 +29,6 @@ CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_BPF_SYSCALL=y
|
||||
# CONFIG_COMPAT_BRK is not set
|
||||
CONFIG_PROFILING=y
|
||||
CONFIG_OPROFILE=m
|
||||
CONFIG_KPROBES=y
|
||||
CONFIG_JUMP_LABEL=y
|
||||
CONFIG_MODULES=y
|
||||
|
||||
@@ -17,16 +17,6 @@ struct cpu_spec;
|
||||
typedef void (*cpu_setup_t)(unsigned long offset, struct cpu_spec* spec);
|
||||
typedef void (*cpu_restore_t)(void);
|
||||
|
||||
enum powerpc_oprofile_type {
|
||||
PPC_OPROFILE_INVALID = 0,
|
||||
PPC_OPROFILE_RS64 = 1,
|
||||
PPC_OPROFILE_POWER4 = 2,
|
||||
PPC_OPROFILE_G4 = 3,
|
||||
PPC_OPROFILE_FSL_EMB = 4,
|
||||
PPC_OPROFILE_CELL = 5,
|
||||
PPC_OPROFILE_PA6T = 6,
|
||||
};
|
||||
|
||||
enum powerpc_pmc_type {
|
||||
PPC_PMC_DEFAULT = 0,
|
||||
PPC_PMC_IBM = 1,
|
||||
@@ -83,16 +73,6 @@ struct cpu_spec {
|
||||
/* Used by oprofile userspace to select the right counters */
|
||||
char *oprofile_cpu_type;
|
||||
|
||||
/* Processor specific oprofile operations */
|
||||
enum powerpc_oprofile_type oprofile_type;
|
||||
|
||||
/* Bit locations inside the mmcra change */
|
||||
unsigned long oprofile_mmcra_sihv;
|
||||
unsigned long oprofile_mmcra_sipr;
|
||||
|
||||
/* Bits to clear during an oprofile exception */
|
||||
unsigned long oprofile_mmcra_clear;
|
||||
|
||||
/* Name of processor class, for the ELF AT_PLATFORM entry */
|
||||
char *platform;
|
||||
|
||||
|
||||
@@ -1,135 +0,0 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/*
|
||||
* Copyright (C) 2004 Anton Blanchard <anton@au.ibm.com>, IBM
|
||||
*
|
||||
* Based on alpha version.
|
||||
*/
|
||||
|
||||
#ifndef _ASM_POWERPC_OPROFILE_IMPL_H
|
||||
#define _ASM_POWERPC_OPROFILE_IMPL_H
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#define OP_MAX_COUNTER 8
|
||||
|
||||
/* Per-counter configuration as set via oprofilefs. */
|
||||
struct op_counter_config {
|
||||
unsigned long enabled;
|
||||
unsigned long event;
|
||||
unsigned long count;
|
||||
/* Classic doesn't support per-counter user/kernel selection */
|
||||
unsigned long kernel;
|
||||
unsigned long user;
|
||||
unsigned long unit_mask;
|
||||
};
|
||||
|
||||
/* System-wide configuration as set via oprofilefs. */
|
||||
struct op_system_config {
|
||||
#ifdef CONFIG_PPC64
|
||||
unsigned long mmcr0;
|
||||
unsigned long mmcr1;
|
||||
unsigned long mmcra;
|
||||
#ifdef CONFIG_OPROFILE_CELL
|
||||
/* Register for oprofile user tool to check cell kernel profiling
|
||||
* support.
|
||||
*/
|
||||
unsigned long cell_support;
|
||||
#endif
|
||||
#endif
|
||||
unsigned long enable_kernel;
|
||||
unsigned long enable_user;
|
||||
};
|
||||
|
||||
/* Per-arch configuration */
|
||||
struct op_powerpc_model {
|
||||
int (*reg_setup) (struct op_counter_config *,
|
||||
struct op_system_config *,
|
||||
int num_counters);
|
||||
int (*cpu_setup) (struct op_counter_config *);
|
||||
int (*start) (struct op_counter_config *);
|
||||
int (*global_start) (struct op_counter_config *);
|
||||
void (*stop) (void);
|
||||
void (*global_stop) (void);
|
||||
int (*sync_start)(void);
|
||||
int (*sync_stop)(void);
|
||||
void (*handle_interrupt) (struct pt_regs *,
|
||||
struct op_counter_config *);
|
||||
int num_counters;
|
||||
};
|
||||
|
||||
extern struct op_powerpc_model op_model_fsl_emb;
|
||||
extern struct op_powerpc_model op_model_power4;
|
||||
extern struct op_powerpc_model op_model_7450;
|
||||
extern struct op_powerpc_model op_model_cell;
|
||||
extern struct op_powerpc_model op_model_pa6t;
|
||||
|
||||
|
||||
/* All the classic PPC parts use these */
|
||||
static inline unsigned int classic_ctr_read(unsigned int i)
|
||||
{
|
||||
switch(i) {
|
||||
case 0:
|
||||
return mfspr(SPRN_PMC1);
|
||||
case 1:
|
||||
return mfspr(SPRN_PMC2);
|
||||
case 2:
|
||||
return mfspr(SPRN_PMC3);
|
||||
case 3:
|
||||
return mfspr(SPRN_PMC4);
|
||||
case 4:
|
||||
return mfspr(SPRN_PMC5);
|
||||
case 5:
|
||||
return mfspr(SPRN_PMC6);
|
||||
|
||||
/* No PPC32 chip has more than 6 so far */
|
||||
#ifdef CONFIG_PPC64
|
||||
case 6:
|
||||
return mfspr(SPRN_PMC7);
|
||||
case 7:
|
||||
return mfspr(SPRN_PMC8);
|
||||
#endif
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static inline void classic_ctr_write(unsigned int i, unsigned int val)
|
||||
{
|
||||
switch(i) {
|
||||
case 0:
|
||||
mtspr(SPRN_PMC1, val);
|
||||
break;
|
||||
case 1:
|
||||
mtspr(SPRN_PMC2, val);
|
||||
break;
|
||||
case 2:
|
||||
mtspr(SPRN_PMC3, val);
|
||||
break;
|
||||
case 3:
|
||||
mtspr(SPRN_PMC4, val);
|
||||
break;
|
||||
case 4:
|
||||
mtspr(SPRN_PMC5, val);
|
||||
break;
|
||||
case 5:
|
||||
mtspr(SPRN_PMC6, val);
|
||||
break;
|
||||
|
||||
/* No PPC32 chip has more than 6, yet */
|
||||
#ifdef CONFIG_PPC64
|
||||
case 6:
|
||||
mtspr(SPRN_PMC7, val);
|
||||
break;
|
||||
case 7:
|
||||
mtspr(SPRN_PMC8, val);
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
extern void op_powerpc_backtrace(struct pt_regs * const regs, unsigned int depth);
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* _ASM_POWERPC_OPROFILE_IMPL_H */
|
||||
@@ -201,20 +201,6 @@ int spu_64k_pages_available(void);
|
||||
struct mm_struct;
|
||||
extern void spu_flush_all_slbs(struct mm_struct *mm);
|
||||
|
||||
/* This interface allows a profiler (e.g., OProfile) to store a ref
|
||||
* to spu context information that it creates. This caching technique
|
||||
* avoids the need to recreate this information after a save/restore operation.
|
||||
*
|
||||
* Assumes the caller has already incremented the ref count to
|
||||
* profile_info; then spu_context_destroy must call kref_put
|
||||
* on prof_info_kref.
|
||||
*/
|
||||
void spu_set_profile_private_kref(struct spu_context *ctx,
|
||||
struct kref *prof_info_kref,
|
||||
void ( * prof_info_release) (struct kref *kref));
|
||||
|
||||
void *spu_get_profile_private_kref(struct spu_context *ctx);
|
||||
|
||||
/* system callbacks from the SPU */
|
||||
struct spu_syscall_block {
|
||||
u64 nr_ret;
|
||||
@@ -266,25 +252,6 @@ void spu_remove_dev_attr(struct device_attribute *attr);
|
||||
int spu_add_dev_attr_group(struct attribute_group *attrs);
|
||||
void spu_remove_dev_attr_group(struct attribute_group *attrs);
|
||||
|
||||
/*
|
||||
* Notifier blocks:
|
||||
*
|
||||
* oprofile can get notified when a context switch is performed
|
||||
* on an spe. The notifer function that gets called is passed
|
||||
* a pointer to the SPU structure as well as the object-id that
|
||||
* identifies the binary running on that SPU now.
|
||||
*
|
||||
* For a context save, the object-id that is passed is zero,
|
||||
* identifying that the kernel will run from that moment on.
|
||||
*
|
||||
* For a context restore, the object-id is the value written
|
||||
* to object-id spufs file from user space and the notifer
|
||||
* function can assume that spu->ctx is valid.
|
||||
*/
|
||||
struct notifier_block;
|
||||
int spu_switch_event_register(struct notifier_block * n);
|
||||
int spu_switch_event_unregister(struct notifier_block * n);
|
||||
|
||||
extern void notify_spus_active(void);
|
||||
extern void do_notify_spus_active(void);
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user