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)
Thu, Oct 24, 12:35 PM
Unknown Object (File)
Thu, Oct 24, 12:35 PM
Unknown Object (File)
Thu, Oct 24, 12:35 PM
Unknown Object (File)
Thu, Oct 24, 12:20 PM
Unknown Object (File)
Wed, Oct 16, 10:10 PM
Unknown Object (File)
Oct 2 2024, 1:36 AM
Unknown Object (File)
Sep 27 2024, 3:34 PM
Unknown Object (File)
Sep 26 2024, 1:03 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.