Index: sys/powerpc/pseries/xics.c =================================================================== --- sys/powerpc/pseries/xics.c (revision 338943) +++ sys/powerpc/pseries/xics.c (working copy) @@ -77,6 +77,7 @@ static void xicp_mask(device_t, u_int); static void xicp_unmask(device_t, u_int); + #ifdef POWERNV void xicp_smp_cpu_startup(void); #endif @@ -248,6 +249,7 @@ if (sc->xics_emu) { opal_call(OPAL_INT_SET_CPPR, 0xff); + powerpc_sync(); for (i = 0; i < mp_ncpus; i++) { opal_call(OPAL_INT_SET_MFRR, pcpu_find(i)->pc_hwref, 0xff); @@ -385,8 +387,10 @@ if (regs) bus_write_1(regs, 4, 0xff); #ifdef POWERNV - else if (sc->xics_emu) + else if (sc->xics_emu) { opal_call(OPAL_INT_SET_CPPR, 0xff); + powerpc_sync(); + } #endif else phyp_hcall(H_CPPR, (uint64_t)0xff); @@ -471,11 +475,12 @@ if (irq == MAX_XICP_IRQS) /* Remap IPI interrupt to internal value */ irq = XICP_IPI; - xirr = irq | (XICP_PRIORITY << 24); + xirr = irq | (0xff << 24); #ifdef POWERNV if (mfmsr() & PSL_HV) { sc = device_get_softc(dev); + powerpc_sync(); if (sc->xics_emu) opal_call(OPAL_INT_EOI, xirr); else @@ -570,8 +575,10 @@ if (mfmsr() & PSL_HV) { sc = device_get_softc(root_pic); - if (sc->xics_emu) + if (sc->xics_emu) { opal_call(OPAL_INT_SET_CPPR, 0xff); + powerpc_sync(); + } } } #endif