Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 5636
b: refs/heads/master
c: 6d22d85
h: refs/heads/master
v: v3
  • Loading branch information
Paul Mackerras authored and Linus Torvalds committed Aug 4, 2005
1 parent 47f5194 commit a862892
Show file tree
Hide file tree
Showing 7 changed files with 25 additions and 24 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 48f1f5328267f52a34e61b8b0e6fc55a23c1348a
refs/heads/master: 6d22d85a852b72398a81b8e476977b28b4400f7c
6 changes: 3 additions & 3 deletions trunk/arch/ppc64/kernel/machine_kexec.c
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ void kexec_copy_flush(struct kimage *image)
void kexec_smp_down(void *arg)
{
if (ppc_md.cpu_irq_down)
ppc_md.cpu_irq_down();
ppc_md.cpu_irq_down(1);

local_irq_disable();
kexec_smp_wait();
Expand Down Expand Up @@ -232,7 +232,7 @@ static void kexec_prepare_cpus(void)

/* after we tell the others to go down */
if (ppc_md.cpu_irq_down)
ppc_md.cpu_irq_down();
ppc_md.cpu_irq_down(0);

put_cpu();

Expand All @@ -255,7 +255,7 @@ static void kexec_prepare_cpus(void)
*/
smp_release_cpus();
if (ppc_md.cpu_irq_down)
ppc_md.cpu_irq_down();
ppc_md.cpu_irq_down(0);
local_irq_disable();
}

Expand Down
4 changes: 2 additions & 2 deletions trunk/arch/ppc64/kernel/mpic.c
Original file line number Diff line number Diff line change
Expand Up @@ -794,10 +794,10 @@ void mpic_setup_this_cpu(void)

/*
* XXX: someone who knows mpic should check this.
* do we need to eoi the ipi here (see xics comments)?
* do we need to eoi the ipi including for kexec cpu here (see xics comments)?
* or can we reset the mpic in the new kernel?
*/
void mpic_teardown_this_cpu(void)
void mpic_teardown_this_cpu(int secondary)
{
struct mpic *mpic = mpic_primary;
unsigned long flags;
Expand Down
2 changes: 1 addition & 1 deletion trunk/arch/ppc64/kernel/mpic.h
Original file line number Diff line number Diff line change
Expand Up @@ -256,7 +256,7 @@ extern unsigned int mpic_irq_get_priority(unsigned int irq);
extern void mpic_setup_this_cpu(void);

/* Clean up for kexec (or cpu offline or ...) */
extern void mpic_teardown_this_cpu(void);
extern void mpic_teardown_this_cpu(int secondary);

/* Request IPIs on primary mpic */
extern void mpic_request_ipis(void);
Expand Down
31 changes: 16 additions & 15 deletions trunk/arch/ppc64/kernel/xics.c
Original file line number Diff line number Diff line change
Expand Up @@ -647,29 +647,30 @@ static void xics_set_affinity(unsigned int virq, cpumask_t cpumask)
}
}

void xics_teardown_cpu(void)
void xics_teardown_cpu(int secondary)
{
int cpu = smp_processor_id();
int status;

ops->cppr_info(cpu, 0x00);
iosync();

/*
* we need to EOI the IPI if we got here from kexec down IPI
*
* xics doesn't care if we duplicate an EOI as long as we
* don't EOI and raise priority.
*
* probably need to check all the other interrupts too
* should we be flagging idle loop instead?
* or creating some task to be scheduled?
* Some machines need to have at least one cpu in the GIQ,
* so leave the master cpu in the group.
*/
ops->xirr_info_set(cpu, XICS_IPI);

status = rtas_set_indicator(GLOBAL_INTERRUPT_QUEUE,
(1UL << interrupt_server_size) - 1 - default_distrib_server, 0);
WARN_ON(status != 0);
if (secondary) {
/*
* we need to EOI the IPI if we got here from kexec down IPI
*
* probably need to check all the other interrupts too
* should we be flagging idle loop instead?
* or creating some task to be scheduled?
*/
ops->xirr_info_set(cpu, XICS_IPI);
rtas_set_indicator(GLOBAL_INTERRUPT_QUEUE,
(1UL << interrupt_server_size) - 1 -
default_distrib_server, 0);
}
}

#ifdef CONFIG_HOTPLUG_CPU
Expand Down
2 changes: 1 addition & 1 deletion trunk/include/asm-ppc64/machdep.h
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ struct machdep_calls {

void (*init_IRQ)(void);
int (*get_irq)(struct pt_regs *);
void (*cpu_irq_down)(void);
void (*cpu_irq_down)(int secondary);

/* PCI stuff */
void (*pcibios_fixup)(void);
Expand Down
2 changes: 1 addition & 1 deletion trunk/include/asm-ppc64/xics.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
void xics_init_IRQ(void);
int xics_get_irq(struct pt_regs *);
void xics_setup_cpu(void);
void xics_teardown_cpu(void);
void xics_teardown_cpu(int secondary);
void xics_cause_IPI(int cpu);
void xics_request_IPIs(void);
void xics_migrate_irqs_away(void);
Expand Down

0 comments on commit a862892

Please sign in to comment.