Hello, Could someone please push this patch to the branches 5 and master? Or do I need a ticket for the 5 branch first?
Cheers, Jan > -----Original Message----- > From: Sommer, Jan > Sent: Friday, July 3, 2020 2:32 PM > To: devel@rtems.org > Cc: Sommer, Jan > Subject: [PATCH v1 1/1] bsps/pc386: Fix IPI for non-consecutive APICIDs > > - properly use the cpu <-> apic maps for IPIs > --- > bsps/i386/pc386/start/smp-imps.c | 16 ++++++++++------ > 1 file changed, 10 insertions(+), 6 deletions(-) > > diff --git a/bsps/i386/pc386/start/smp-imps.c b/bsps/i386/pc386/start/smp- > imps.c > index 0985b8f08f..763ac0afc7 100644 > --- a/bsps/i386/pc386/start/smp-imps.c > +++ b/bsps/i386/pc386/start/smp-imps.c > @@ -226,9 +226,11 @@ get_checksum(unsigned start, int length) > int > send_ipi(unsigned int dst, unsigned int v) > { > - int to, send_status; > + int to, send_status, apicid; > > - IMPS_LAPIC_WRITE(LAPIC_ICR+0x10, (dst << 24)); > + apicid = imps_cpu_apic_map[dst]; > + > + IMPS_LAPIC_WRITE(LAPIC_ICR+0x10, (apicid << 24)); > IMPS_LAPIC_WRITE(LAPIC_ICR, v); > > /* Wait for send to finish */ > @@ -251,9 +253,11 @@ static int > boot_cpu(imps_processor *proc) > { > int apicid = proc->apic_id, success = 1; > + int cpuid; > unsigned bootaddr; > unsigned bios_reset_vector = PHYS_TO_VIRTUAL(BIOS_RESET_VECTOR); > > + cpuid = imps_apic_cpu_map[apicid]; > /* > * Copy boot code for secondary CPUs here. Find it in between > * "patch_code_start" and "patch_code_end" symbols. The other CPUs > @@ -276,7 +280,7 @@ boot_cpu(imps_processor *proc) > /* Pass start function, stack region and gdtdescr to AP > * see startAP.S for location */ > reset[1] = (uint32_t)secondary_cpu_initialize; > - reset[2] = (uint32_t)_Per_CPU_Get_by_index(apicid)- > >interrupt_stack_high; > + reset[2] = (uint32_t)_Per_CPU_Get_by_index(cpuid)- > >interrupt_stack_high; > memcpy( > (char*) &reset[3], > &gdtdesc, > @@ -295,13 +299,13 @@ boot_cpu(imps_processor *proc) > > /* assert INIT IPI */ > send_ipi( > - apicid, > + cpuid, > LAPIC_ICR_TM_LEVEL | LAPIC_ICR_LEVELASSERT | LAPIC_ICR_DM_INIT > ); > UDELAY(10000); > > /* de-assert INIT IPI */ > - send_ipi(apicid, LAPIC_ICR_TM_LEVEL | LAPIC_ICR_DM_INIT); > + send_ipi(cpuid, LAPIC_ICR_TM_LEVEL | LAPIC_ICR_DM_INIT); > > UDELAY(10000); > > @@ -312,7 +316,7 @@ boot_cpu(imps_processor *proc) > if (proc->apic_ver >= APIC_VER_NEW) { > int i; > for (i = 1; i <= 2; i++) { > - send_ipi(apicid, LAPIC_ICR_DM_SIPI | ((bootaddr >> 12) & 0xFF)); > + send_ipi(cpuid, LAPIC_ICR_DM_SIPI | ((bootaddr >> 12) & 0xFF)); > UDELAY(1000); > } > } > -- > 2.17.1 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel