[POWERPC] Split xics_teardown_cpu()
This splits off the kexec path bits of the xics_teardown_cpu() routine into its own xics_kexec_teardown_cpu() routine. With the previous combined routine the CPPR for a cpu that is being removed may have its CPPR reset in the plpar_eoi() call (which explicitly sets the CPPR to a non-zero value). Splitting of the kexec bits of the code prevents this from happening in the cpu remove path. Once again, this does not cause the cpu remove from the kernel to fail, but it does cause cpu dlpar operations to not be able to return the cpu to the hypervisor. Signed-off-by: Nathan Fontenot <nfont@austin.ibm.com> Signed-off-by: Paul Mackerras <paulus@samba.org>
Este cometimento está contido em:

cometido por
Paul Mackerras

ascendente
a52572ddcd
cometimento
c3e8506c54
@@ -775,11 +775,9 @@ void xics_request_IPIs(void)
|
||||
}
|
||||
#endif /* CONFIG_SMP */
|
||||
|
||||
void xics_teardown_cpu(int secondary)
|
||||
void xics_teardown_cpu()
|
||||
{
|
||||
int cpu = smp_processor_id();
|
||||
unsigned int ipi;
|
||||
struct irq_desc *desc;
|
||||
|
||||
xics_set_cpu_priority(0);
|
||||
|
||||
@@ -790,9 +788,17 @@ void xics_teardown_cpu(int secondary)
|
||||
lpar_qirr_info(cpu, 0xff);
|
||||
else
|
||||
direct_qirr_info(cpu, 0xff);
|
||||
}
|
||||
|
||||
void xics_kexec_teardown_cpu(int secondary)
|
||||
{
|
||||
unsigned int ipi;
|
||||
struct irq_desc *desc;
|
||||
|
||||
xics_teardown_cpu();
|
||||
|
||||
/*
|
||||
* we need to EOI the IPI if we got here from kexec down IPI
|
||||
* we need to EOI the IPI
|
||||
*
|
||||
* probably need to check all the other interrupts too
|
||||
* should we be flagging idle loop instead?
|
||||
|
Criar uma nova questão referindo esta
Bloquear um utilizador