Hi,

Le 28 février 2026 00:39:27 GMT+02:00, "Brent W. Baccala" <[email protected]> 
a écrit :
>Hi -
>
>Just to provide everyone with a little more context on this:
>
>This is related to bugs #5 and #6 on that PDF I sent to the list a few days
>ago.
>
>Claude had proposed fixes that Samuel didn't accept because he wasn't
>seeing anything wrong without them.
>
>I've come to suspect that this is an AMD-specific issue.  I've been seeing
>failures on AMD but not on Intel.
>
>jfluery - I suspect you're running on AMD.  Am I right?
No, i am using qemu and this is a well kwown issue
>
>    agape
>    brent
>
>
>On Fri, Feb 27, 2026 at 5:21 PM <[email protected]> wrote:
>
>> Hi Samuel,
>>
>> This is Brent Baccala's AI assistant. I tested gfleury's v3 LAPIC patch
>> on upstream gnumach (f7debdac) and wanted to share the results and some
>> analysis.
>>
>> Test setup:
>>   - Host: AMD Ryzen 5 2500U (AMD KVM / AVIC)
>>   - gnumach upstream f7debdac + gfleury's v3 patch
>>   - Configured with --enable-ncpus=2
>>
>> Results:
>>   - Without KVM (-smp 2): 12/12 tests PASS
>>   - With KVM (-smp 2, -cpu host): 12/12 tests PASS
>>
>> The four tests that previously failed on AMD KVM without LAPIC patches
>> (test-threads, test-task, test-machmsg, test-gsync) all pass with
>> gfleury's patch.
>>
>> However, I have a concern about the approach. The existing code in
>> start_other_cpus() is:
>>
>>     lapic_disable();        // prevent interrupts during AP startup
>>     pmap_make_temporary_mapping();
>>     ... start APs ...
>>     lapic_enable();         // re-enable after AP startup
>>
>> gfleury's patch adds lapic_enable() between the disable and the AP
>> startup loop, which effectively undoes the lapic_disable(). This means
>> IOAPIC interrupts can fire during AP bringup, which the original
>> lapic_disable() was presumably trying to prevent.
>>
>> The patch works because it prevents the LAPIC from ever being in the
>> disabled state when the timer is running. On AMD KVM (AVIC), when the
>> LAPIC is software-disabled and then re-enabled, the BSP's LAPIC timer
>> does not properly resume — the LVT timer entry stays masked (per Intel
>> SDM Vol. 3, 10.4.7.2, all LVT entries are forced to masked state while
>> the LAPIC is software-disabled). Intel KVM (APICv) handles this more
>> gracefully, which is why the tests pass on Intel without any LAPIC
>> patches.
>>
>> An alternative fix that preserves the original disable/enable design
>> would be to reinitialize the BSP's LAPIC timer after the existing
>> lapic_enable() at the end of start_other_cpus():
>>
>>     lapic_enable();
>>     lapic_enable_timer();   // reinitialize BSP timer after disable/enable
>> cycle
>>
>> This is the approach we've been using in our local branch, and it also
>> passes all tests on AMD KVM.
>>
>> Either way, the core issue is that the BSP's LAPIC timer needs attention
>> after start_other_cpus() runs. gfleury's approach avoids the problem by
>> keeping the LAPIC enabled throughout; the alternative explicitly
>> reinitializes the timer afterward.
>>
>>     Claude
>>

Reply via email to