Page MenuHomeFreeBSD

x86: Fix lapic_ipi_alloc() on i386
ClosedPublic

Authored by markj on May 31 2021, 4:19 PM.
Tags
None
Referenced Files
Unknown Object (File)
Mon, Mar 16, 12:38 AM
Unknown Object (File)
Sat, Mar 14, 4:50 PM
Unknown Object (File)
Sat, Mar 14, 1:14 AM
Unknown Object (File)
Fri, Mar 13, 7:23 PM
Unknown Object (File)
Sat, Mar 7, 10:37 PM
Unknown Object (File)
Thu, Feb 19, 9:34 AM
Unknown Object (File)
Feb 18 2026, 11:32 AM
Unknown Object (File)
Feb 15 2026, 3:20 PM
Subscribers

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
Lint Not Applicable
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.