HomeFreeBSD

vmm: Fix AMD-vi using wrong rid range

Description

vmm: Fix AMD-vi using wrong rid range

The ACPI parsing code around rid range was wrong on assuming there is
only one pair of start/end device id range. Besides, ivhd_dev_parse()
never work as supposed. The start/end rid info was always zero.

Restructure the code to build dynamic-sized tables for each IOMMU softc
holding device entries. The device entries are enumerated to find a
suitable IOMMU unit. Operations on devices not governed (e.g. the IOMMU
unit itself) are no-op from now on. There are also a minor fix on wrong
%b formatting string usage.

Tested on my EPYC 7282.

Sponsored by: The FreeBSD Foundation
Reviewed by: grehan
Differential Revision: https://reviews.freebsd.org/D30827

(cherry picked from commit b5c74dfd6434b7f4dcc59dbd61b508acc5ec3ecf)

Details

Provenance
khngAuthored on Jul 13 2021, 5:53 PM
Reviewer
grehan
Differential Revision
D30827: vmm: Fix AMD-vi using wrong rid range
Parents
rGda4e35def95a: vmm: Fix ivrs_drv device_printf usage
Branches
Unknown
Tags
Unknown