powerpc: Cleanup vpa code
register_vpa() doesn't actually do a VPA register call it just uses the flags you pass it, so rename it to vpa_call() to be clearer. We can then define register_vpa() and unregister_vpa() which are both simple wrappers around vpa_call(). (we'll need unregister_vpa() for kexec soon) We can then cleanup vpa_init(), and because vpa_init() is only called from platforms/pseries we remove the definition in asm-ppc64/smp.h. Signed-off-by: Michael Ellerman <michael@ellerman.id.au>
This commit is contained in:
parent
c87ef1171d
commit
40765d2b8b
3 changed files with 19 additions and 18 deletions
|
@ -261,22 +261,18 @@ int find_udbg_vterm(void)
|
||||||
void vpa_init(int cpu)
|
void vpa_init(int cpu)
|
||||||
{
|
{
|
||||||
int hwcpu = get_hard_smp_processor_id(cpu);
|
int hwcpu = get_hard_smp_processor_id(cpu);
|
||||||
unsigned long vpa = (unsigned long)&(paca[cpu].lppaca);
|
unsigned long vpa = __pa(&paca[cpu].lppaca);
|
||||||
long ret;
|
long ret;
|
||||||
unsigned long flags;
|
|
||||||
|
|
||||||
/* Register the Virtual Processor Area (VPA) */
|
|
||||||
flags = 1UL << (63 - 18);
|
|
||||||
|
|
||||||
if (cpu_has_feature(CPU_FTR_ALTIVEC))
|
if (cpu_has_feature(CPU_FTR_ALTIVEC))
|
||||||
paca[cpu].lppaca.vmxregs_in_use = 1;
|
paca[cpu].lppaca.vmxregs_in_use = 1;
|
||||||
|
|
||||||
ret = register_vpa(flags, hwcpu, __pa(vpa));
|
ret = register_vpa(hwcpu, vpa);
|
||||||
|
|
||||||
if (ret)
|
if (ret)
|
||||||
printk(KERN_ERR "WARNING: vpa_init: VPA registration for "
|
printk(KERN_ERR "WARNING: vpa_init: VPA registration for "
|
||||||
"cpu %d (hw %d) of area %lx returns %ld\n",
|
"cpu %d (hw %d) of area %lx returns %ld\n",
|
||||||
cpu, hwcpu, __pa(vpa), ret);
|
cpu, hwcpu, vpa, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
long pSeries_lpar_hpte_insert(unsigned long hpte_group,
|
long pSeries_lpar_hpte_insert(unsigned long hpte_group,
|
||||||
|
|
|
@ -21,13 +21,26 @@ static inline long cede_processor(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline long register_vpa(unsigned long flags, unsigned long proc,
|
static inline long vpa_call(unsigned long flags, unsigned long cpu,
|
||||||
unsigned long vpa)
|
unsigned long vpa)
|
||||||
{
|
{
|
||||||
return plpar_hcall_norets(H_REGISTER_VPA, flags, proc, vpa);
|
/* flags are in bits 16-18 (counting from most significant bit) */
|
||||||
|
flags = flags << (63 - 18);
|
||||||
|
|
||||||
|
return plpar_hcall_norets(H_REGISTER_VPA, flags, cpu, vpa);
|
||||||
}
|
}
|
||||||
|
|
||||||
void vpa_init(int cpu);
|
static inline long unregister_vpa(unsigned long cpu, unsigned long vpa)
|
||||||
|
{
|
||||||
|
return vpa_call(0x5, cpu, vpa);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline long register_vpa(unsigned long cpu, unsigned long vpa)
|
||||||
|
{
|
||||||
|
return vpa_call(0x1, cpu, vpa);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern void vpa_init(int cpu);
|
||||||
|
|
||||||
static inline long plpar_pte_remove(unsigned long flags, unsigned long ptex,
|
static inline long plpar_pte_remove(unsigned long flags, unsigned long ptex,
|
||||||
unsigned long avpn, unsigned long *old_pteh_ret,
|
unsigned long avpn, unsigned long *old_pteh_ret,
|
||||||
|
|
|
@ -85,14 +85,6 @@ extern void smp_generic_take_timebase(void);
|
||||||
|
|
||||||
extern struct smp_ops_t *smp_ops;
|
extern struct smp_ops_t *smp_ops;
|
||||||
|
|
||||||
#ifdef CONFIG_PPC_PSERIES
|
|
||||||
void vpa_init(int cpu);
|
|
||||||
#else
|
|
||||||
static inline void vpa_init(int cpu)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
#endif /* CONFIG_PPC_PSERIES */
|
|
||||||
|
|
||||||
#endif /* __ASSEMBLY__ */
|
#endif /* __ASSEMBLY__ */
|
||||||
|
|
||||||
#endif /* !(_PPC64_SMP_H) */
|
#endif /* !(_PPC64_SMP_H) */
|
||||||
|
|
Loading…
Add table
Reference in a new issue