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

Commit 2066aadd authored by Paul Gortmaker's avatar Paul Gortmaker
Browse files

sparc: delete __cpuinit/__CPUINIT usage from all users

The __cpuinit type of throwaway sections might have made sense
some time ago when RAM was more constrained, but now the savings
do not offset the cost and complications.  For example, the fix in
commit 5e427ec2 ("x86: Fix bit corruption at CPU resume time")
is a good example of the nasty type of bugs that can be created
with improper use of the various __init prefixes.

After a discussion on LKML[1] it was decided that cpuinit should go
the way of devinit and be phased out.  Once all the users are gone,
we can then finally remove the macros themselves from linux/init.h.

Note that some harmless section mismatch warnings may result, since
notify_cpu_starting() and cpu_up() are arch independent (kernel/cpu.c)
are flagged as __cpuinit  -- so if we remove the __cpuinit from
arch specific callers, we will also get section mismatch warnings.
As an intermediate step, we intend to turn the linux/init.h cpuinit
content into no-ops as early as possible, since that will get rid
of these warnings.  In any case, they are temporary and harmless.

This removes all the arch/sparc uses of the __cpuinit macros from
C files and removes __CPUINIT from assembly files.  Note that even
though arch/sparc/kernel/trampoline_64.S has instances of ".previous"
in it, they are all paired off against explicit ".section" directives,
and not implicitly paired with __CPUINIT (unlike mips and arm were).

[1] https://lkml.org/lkml/2013/5/20/589



Cc: "David S. Miller" <davem@davemloft.net>
Cc: sparclinux@vger.kernel.org
Signed-off-by: default avatarPaul Gortmaker <paul.gortmaker@windriver.com>
parent 8bd26e3a
Loading
Loading
Loading
Loading
+4 −7
Original line number Diff line number Diff line
@@ -528,10 +528,8 @@ static void dr_cpu_mark(struct ds_data *resp, int cpu, int ncpus,
	}
}

static int __cpuinit dr_cpu_configure(struct ds_info *dp,
				      struct ds_cap_state *cp,
				      u64 req_num,
				      cpumask_t *mask)
static int dr_cpu_configure(struct ds_info *dp, struct ds_cap_state *cp,
			    u64 req_num, cpumask_t *mask)
{
	struct ds_data *resp;
	int resp_len, ncpus, cpu;
@@ -627,9 +625,8 @@ static int dr_cpu_unconfigure(struct ds_info *dp,
	return 0;
}

static void __cpuinit dr_cpu_data(struct ds_info *dp,
				  struct ds_cap_state *cp,
				  void *buf, int len)
static void dr_cpu_data(struct ds_info *dp, struct ds_cap_state *cp, void *buf,
			int len)
{
	struct ds_data *data = buf;
	struct dr_cpu_tag *tag = (struct dr_cpu_tag *) (data + 1);
+1 −1
Original line number Diff line number Diff line
@@ -250,7 +250,7 @@ extern struct ino_bucket *ivector_table;
extern unsigned long ivector_table_pa;

extern void init_irqwork_curcpu(void);
extern void __cpuinit sun4v_register_mondo_queues(int this_cpu);
extern void sun4v_register_mondo_queues(int this_cpu);

#endif /* CONFIG_SPARC32 */
#endif /* _ENTRY_H */
+0 −1
Original line number Diff line number Diff line
@@ -16,7 +16,6 @@
#include <asm/asi.h>
#include <asm/pil.h>

	__CPUINIT
	.align		8
	.globl		hv_cpu_startup, hv_cpu_startup_end

+3 −2
Original line number Diff line number Diff line
@@ -835,7 +835,8 @@ void notrace init_irqwork_curcpu(void)
 * Therefore you cannot make any OBP calls, not even prom_printf,
 * from these two routines.
 */
static void __cpuinit notrace register_one_mondo(unsigned long paddr, unsigned long type, unsigned long qmask)
static void notrace register_one_mondo(unsigned long paddr, unsigned long type,
				       unsigned long qmask)
{
	unsigned long num_entries = (qmask + 1) / 64;
	unsigned long status;
@@ -848,7 +849,7 @@ static void __cpuinit notrace register_one_mondo(unsigned long paddr, unsigned l
	}
}

void __cpuinit notrace sun4v_register_mondo_queues(int this_cpu)
void notrace sun4v_register_mondo_queues(int this_cpu)
{
	struct trap_per_cpu *tb = &trap_block[this_cpu];

+5 −5
Original line number Diff line number Diff line
@@ -54,7 +54,7 @@ extern ctxd_t *srmmu_ctx_table_phys;
static int smp_processors_ready;
extern volatile unsigned long cpu_callin_map[NR_CPUS];
extern cpumask_t smp_commenced_mask;
void __cpuinit leon_configure_cache_smp(void);
void leon_configure_cache_smp(void);
static void leon_ipi_init(void);

/* IRQ number of LEON IPIs */
@@ -69,12 +69,12 @@ static inline unsigned long do_swap(volatile unsigned long *ptr,
	return val;
}

void __cpuinit leon_cpu_pre_starting(void *arg)
void leon_cpu_pre_starting(void *arg)
{
	leon_configure_cache_smp();
}

void __cpuinit leon_cpu_pre_online(void *arg)
void leon_cpu_pre_online(void *arg)
{
	int cpuid = hard_smp_processor_id();

@@ -106,7 +106,7 @@ void __cpuinit leon_cpu_pre_online(void *arg)

extern struct linux_prom_registers smp_penguin_ctable;

void __cpuinit leon_configure_cache_smp(void)
void leon_configure_cache_smp(void)
{
	unsigned long cfg = sparc_leon3_get_dcachecfg();
	int me = smp_processor_id();
@@ -186,7 +186,7 @@ void __init leon_boot_cpus(void)

}

int __cpuinit leon_boot_one_cpu(int i, struct task_struct *idle)
int leon_boot_one_cpu(int i, struct task_struct *idle)
{
	int timeout;

Loading