profile: setup_profiling_timer() is moslty not implemented
The setup_profiling_timer() is mostly un-implemented by many architectures. In many places it isn't guarded by CONFIG_PROFILE which is needed for it to be used. Make it a weak symbol in kernel/profile.c and remove the 'return -EINVAL' implementations from the kenrel. There are a couple of architectures which do return 0 from the setup_profiling_timer() function but they don't seem to do anything else with it. To keep the /proc compatibility for now, leave these for a future update or removal. On ARM, this fixes the following sparse warning: arch/arm/kernel/smp.c:793:5: warning: symbol 'setup_profiling_timer' was not declared. Should it be static? Link: https://lkml.kernel.org/r/20220721195509.418205-1-ben-linux@fluff.org Signed-off-by: Ben Dooks <ben-linux@fluff.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
45ee6d1e93
commit
787dbea11a
@ -497,12 +497,6 @@ smp_cpus_done(unsigned int max_cpus)
|
|||||||
((bogosum + 2500) / (5000/HZ)) % 100);
|
((bogosum + 2500) / (5000/HZ)) % 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
|
||||||
setup_profiling_timer(unsigned int multiplier)
|
|
||||||
{
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
send_ipi_message(const struct cpumask *to_whom, enum ipi_message_type operation)
|
send_ipi_message(const struct cpumask *to_whom, enum ipi_message_type operation)
|
||||||
{
|
{
|
||||||
|
@ -232,14 +232,6 @@ int __cpu_up(unsigned int cpu, struct task_struct *idle)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* not supported here
|
|
||||||
*/
|
|
||||||
int setup_profiling_timer(unsigned int multiplier)
|
|
||||||
{
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/* Inter Processor Interrupt Handling */
|
/* Inter Processor Interrupt Handling */
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -787,14 +787,6 @@ void panic_smp_self_stop(void)
|
|||||||
cpu_relax();
|
cpu_relax();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* not supported here
|
|
||||||
*/
|
|
||||||
int setup_profiling_timer(unsigned int multiplier)
|
|
||||||
{
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef CONFIG_CPU_FREQ
|
#ifdef CONFIG_CPU_FREQ
|
||||||
|
|
||||||
static DEFINE_PER_CPU(unsigned long, l_p_j_ref);
|
static DEFINE_PER_CPU(unsigned long, l_p_j_ref);
|
||||||
|
@ -1078,14 +1078,6 @@ bool smp_crash_stop_failed(void)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
|
||||||
* not supported here
|
|
||||||
*/
|
|
||||||
int setup_profiling_timer(unsigned int multiplier)
|
|
||||||
{
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool have_cpu_die(void)
|
static bool have_cpu_die(void)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_HOTPLUG_CPU
|
#ifdef CONFIG_HOTPLUG_CPU
|
||||||
|
@ -243,11 +243,6 @@ void __init smp_cpus_done(unsigned int max_cpus)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
int setup_profiling_timer(unsigned int multiplier)
|
|
||||||
{
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
void csky_start_secondary(void)
|
void csky_start_secondary(void)
|
||||||
{
|
{
|
||||||
struct mm_struct *mm = &init_mm;
|
struct mm_struct *mm = &init_mm;
|
||||||
|
@ -240,11 +240,6 @@ void arch_send_call_function_ipi_mask(const struct cpumask *mask)
|
|||||||
send_ipi(mask, IPI_CALL_FUNC);
|
send_ipi(mask, IPI_CALL_FUNC);
|
||||||
}
|
}
|
||||||
|
|
||||||
int setup_profiling_timer(unsigned int multiplier)
|
|
||||||
{
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
void smp_start_cpus(void)
|
void smp_start_cpus(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
@ -333,9 +333,3 @@ smp_send_stop (void)
|
|||||||
{
|
{
|
||||||
send_IPI_allbutself(IPI_CPU_STOP);
|
send_IPI_allbutself(IPI_CPU_STOP);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
|
||||||
setup_profiling_timer (unsigned int multiplier)
|
|
||||||
{
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
@ -197,12 +197,6 @@ void smp_send_stop(void)
|
|||||||
smp_call_function(stop_this_cpu, NULL, 0);
|
smp_call_function(stop_this_cpu, NULL, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* not supported, yet */
|
|
||||||
int setup_profiling_timer(unsigned int multiplier)
|
|
||||||
{
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
void __init set_smp_cross_call(void (*fn)(const struct cpumask *, unsigned int))
|
void __init set_smp_cross_call(void (*fn)(const struct cpumask *, unsigned int))
|
||||||
{
|
{
|
||||||
smp_cross_call = fn;
|
smp_cross_call = fn;
|
||||||
|
@ -513,10 +513,3 @@ void __cpu_die(unsigned int cpu)
|
|||||||
|
|
||||||
pdc_cpu_rendezvous_unlock();
|
pdc_cpu_rendezvous_unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_PROC_FS
|
|
||||||
int setup_profiling_timer(unsigned int multiplier)
|
|
||||||
{
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
@ -1674,13 +1674,6 @@ void start_secondary(void *unused)
|
|||||||
BUG();
|
BUG();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_PROFILING
|
|
||||||
int setup_profiling_timer(unsigned int multiplier)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void __init fixup_topology(void)
|
static void __init fixup_topology(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
@ -64,12 +64,6 @@ bool arch_match_cpu_phys_id(int cpu, u64 phys_id)
|
|||||||
return phys_id == cpuid_to_hartid_map(cpu);
|
return phys_id == cpuid_to_hartid_map(cpu);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Unsupported */
|
|
||||||
int setup_profiling_timer(unsigned int multiplier)
|
|
||||||
{
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ipi_stop(void)
|
static void ipi_stop(void)
|
||||||
{
|
{
|
||||||
set_cpu_online(smp_processor_id(), false);
|
set_cpu_online(smp_processor_id(), false);
|
||||||
|
@ -174,11 +174,6 @@ void smp_call_function_interrupt(void)
|
|||||||
irq_exit();
|
irq_exit();
|
||||||
}
|
}
|
||||||
|
|
||||||
int setup_profiling_timer(unsigned int multiplier)
|
|
||||||
{
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
void __init smp_prepare_cpus(unsigned int max_cpus)
|
void __init smp_prepare_cpus(unsigned int max_cpus)
|
||||||
{
|
{
|
||||||
int i, cpuid, extra;
|
int i, cpuid, extra;
|
||||||
|
@ -1186,12 +1186,6 @@ void __irq_entry smp_penguin_jailcell(int irq, struct pt_regs *regs)
|
|||||||
preempt_enable();
|
preempt_enable();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* /proc/profile writes can call this, don't __init it please. */
|
|
||||||
int setup_profiling_timer(unsigned int multiplier)
|
|
||||||
{
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
void __init smp_prepare_cpus(unsigned int max_cpus)
|
void __init smp_prepare_cpus(unsigned int max_cpus)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -98,8 +98,6 @@ static inline bool apic_from_smp_config(void)
|
|||||||
#include <asm/paravirt.h>
|
#include <asm/paravirt.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern int setup_profiling_timer(unsigned int);
|
|
||||||
|
|
||||||
static inline void native_apic_mem_write(u32 reg, u32 v)
|
static inline void native_apic_mem_write(u32 reg, u32 v)
|
||||||
{
|
{
|
||||||
volatile u32 *addr = (volatile u32 *)(APIC_BASE + reg);
|
volatile u32 *addr = (volatile u32 *)(APIC_BASE + reg);
|
||||||
|
@ -1115,11 +1115,6 @@ DEFINE_IDTENTRY_SYSVEC(sysvec_apic_timer_interrupt)
|
|||||||
set_irq_regs(old_regs);
|
set_irq_regs(old_regs);
|
||||||
}
|
}
|
||||||
|
|
||||||
int setup_profiling_timer(unsigned int multiplier)
|
|
||||||
{
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Local APIC start and shutdown
|
* Local APIC start and shutdown
|
||||||
*/
|
*/
|
||||||
|
@ -425,6 +425,12 @@ read_profile(struct file *file, char __user *buf, size_t count, loff_t *ppos)
|
|||||||
return read;
|
return read;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* default is to not implement this call */
|
||||||
|
int __weak setup_profiling_timer(unsigned mult)
|
||||||
|
{
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Writing to /proc/profile resets the counters
|
* Writing to /proc/profile resets the counters
|
||||||
*
|
*
|
||||||
@ -435,8 +441,6 @@ static ssize_t write_profile(struct file *file, const char __user *buf,
|
|||||||
size_t count, loff_t *ppos)
|
size_t count, loff_t *ppos)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
extern int setup_profiling_timer(unsigned int multiplier);
|
|
||||||
|
|
||||||
if (count == sizeof(int)) {
|
if (count == sizeof(int)) {
|
||||||
unsigned int multiplier;
|
unsigned int multiplier;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user