> Date: Wed, 24 Jun 2015 16:11:08 +0200 > From: Martin Pieuchot <m...@openbsd.org> > > Use only one "ipi" counter just like other archs do. > > ok?
Problem is that the event counters aren't really MP safe. By keeping them per-CPU you circumvent any problems with that. > Index: dev/openpic.c > =================================================================== > RCS file: /cvs/src/sys/arch/macppc/dev/openpic.c,v > retrieving revision 1.81 > diff -u -p -r1.81 openpic.c > --- dev/openpic.c 24 Jun 2015 11:58:06 -0000 1.81 > +++ dev/openpic.c 24 Jun 2015 13:47:34 -0000 > @@ -130,11 +130,9 @@ void openpic_ipi_ddb(void); > #define IPI_VECTOR_NOP 64 > #define IPI_VECTOR_DDB 65 > > -static struct evcount ipi_ddb[PPC_MAXPROCS]; > -static struct evcount ipi_nop[PPC_MAXPROCS]; > +static struct evcount ipi_count; > > -static int ipi_nopirq = IPI_VECTOR_NOP; > -static int ipi_ddbirq = IPI_VECTOR_DDB; > +static int ipi_irq = IPI_VECTOR_NOP; > > intr_send_ipi_t openpic_send_ipi; > #endif /* MULTIPROCESSOR */ > @@ -288,11 +286,7 @@ openpic_attach(struct device *parent, st > x |= 15 << OPENPIC_PRIORITY_SHIFT; > openpic_write(OPENPIC_IPI_VECTOR(1), x); > > - /* XXX - ncpus */ > - evcount_attach(&ipi_nop[0], "ipi_nop0", &ipi_nopirq); > - evcount_attach(&ipi_nop[1], "ipi_nop1", &ipi_nopirq); > - evcount_attach(&ipi_ddb[0], "ipi_ddb0", &ipi_ddbirq); > - evcount_attach(&ipi_ddb[1], "ipi_ddb1", &ipi_ddbirq); > + evcount_attach(&ipi_count, "ipi", &ipi_irq); > #endif > > /* clear all pending interrunts */ > @@ -638,16 +632,11 @@ openpic_ext_intr(void) > return; > } > #ifdef MULTIPROCESSOR > - if (irq == IPI_VECTOR_NOP) { > - ipi_nop[ci->ci_cpuid].ec_count++; > + if (irq == IPI_VECTOR_NOP || irq == IPI_VECTOR_DDB) { > + ipi_count.ec_count++; > openpic_eoi(ci->ci_cpuid); > - irq = openpic_read_irq(ci->ci_cpuid); > - continue; > - } > - if (irq == IPI_VECTOR_DDB) { > - ipi_ddb[ci->ci_cpuid].ec_count++; > - openpic_eoi(ci->ci_cpuid); > - openpic_ipi_ddb(); > + if (irq == IPI_VECTOR_DDB) > + openpic_ipi_ddb(); > irq = openpic_read_irq(ci->ci_cpuid); > continue; > } > @@ -758,7 +747,6 @@ openpic_send_ipi(struct cpu_info *ci, in > void > openpic_ipi_ddb(void) > { > - DPRINTF("ipi_ddb() called\n"); > #ifdef DDB > Debugger(); > #endif > >