Page MenuHomeFreeBSD

x86: Fix lapic_ipi_alloc() on i386
ClosedPublic

Authored by markj on May 31 2021, 4:19 PM.

Details

Summary

The loop which checks to see if "dynamic" IDT entries are allocated
needs to compare with the trampoline address of the reserved ISR.
Otherwise it will never succeed.

Diff Detail

Repository
rG FreeBSD src repository
Lint
Automatic diff as part of commit; lint not applicable.
Unit
Automatic diff as part of commit; unit tests not applicable.

Event Timeline

But doesn't this mean that IDTVEC(rsdv) do not work and effectively unexpected interrupt would cause double fault?

In D30576#686743, @kib wrote:

But doesn't this mean that IDTVEC(rsdv) do not work and effectively unexpected interrupt would cause double fault?

I could be missing something, but I think not. setidt() shifts the entry point address by setidt_disp before updating the IDT. The problem here is that when reading entries out of the IDT, we have to shift back before comparing with IDTVEC(foo).

This revision is now accepted and ready to land.May 31 2021, 10:16 PM
This revision was automatically updated to reflect the committed changes.