Page MenuHomeFreeBSD

Don't simulate PBA access if the PBA is in a separate BAR.
ClosedPublic

Authored by jhb on Jun 5 2019, 4:10 PM.
Tags
None
Referenced Files
F81687347: D20523.diff
Fri, Apr 19, 11:03 PM
Unknown Object (File)
Wed, Apr 10, 4:10 AM
Unknown Object (File)
Sun, Mar 24, 3:15 PM
Unknown Object (File)
Feb 24 2024, 7:22 AM
Unknown Object (File)
Feb 9 2024, 8:02 PM
Unknown Object (File)
Jan 28 2024, 11:15 AM
Unknown Object (File)
Jan 17 2024, 7:39 AM
Unknown Object (File)
Dec 20 2023, 4:13 AM

Details

Summary

bhyve has to virtualize the MSI-X table to trap reads and writes to
that table and map those to virtual interrupts that it maps real host
interrupts on to. For the pending-bit-array (PBA), bhyve passes
accesses from the guest directly to the hardware.

bhyve's virtualization of the MSI-X table is done by intercepting all
reads and writes to the BAR holding the MSI-X table. However, if the
PBA is stored in the same BAR as the MSI-X table, accesses to the PBA
portion of this BAR have to be forwarded to the real BAR.

However, in the case that the PBA was stored in a separate BAR and
it's offset in that separate BAR overlapped with the portion of the
MSI-X table BAR that the table used, the handlers for the table BAR
would incorrectly think that some accesses were PBA reads and writes.
This caused a crash in bhyve when it indirected a NULL pointer. Fix
this case by never trying to handle PBA access if the PBA lives in a
separate BAR.

Reported by: gallatin

Test Plan
  • drew is going to test this. :)

Diff Detail

Repository
rS FreeBSD src repository - subversion
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

This revision is now accepted and ready to land.Jun 5 2019, 4:46 PM

Just wanted to chime in that this, in combination with https://reviews.freebsd.org/D20525, allows me to pass through an add-in USB XHCI controller to a guest OS. Before this patch, bhyve would segv.

This revision was automatically updated to reflect the committed changes.