1
0
mirror of https://git.FreeBSD.org/src.git synced 2024-12-17 10:26:15 +00:00

AMD-vi: Mixed format IVHD block should replace fixed format IVHD block

This fixes double IVHD_SETUP_INTR calls on the same IOMMU device.

Sponsored by:	The FreeBSD Foundation
MFC with:	74ada297e8
Reported by:	Oleg Ginzburg <olevole@olevole.ru>
Reviewed by:	grehan
Approved by:	philip (mentor)
Differential Revision:	https://reviews.freebsd.org/D29521
This commit is contained in:
Ka Ho Ng 2021-04-01 09:15:19 +08:00
parent 5a18515b31
commit 03efa462b2

View File

@ -312,14 +312,22 @@ ivhd_dev_parse(ACPI_IVRS_HARDWARE1 *ivhd, struct amdvi_softc *softc)
static bool
ivhd_is_newer(ACPI_IVRS_HEADER *old, ACPI_IVRS_HEADER *new)
{
/*
* Newer IVRS header type take precedence.
*/
if ((old->DeviceId == new->DeviceId) &&
(old->Type == IVRS_TYPE_HARDWARE_LEGACY) &&
((new->Type == IVRS_TYPE_HARDWARE_EFR) ||
(new->Type == IVRS_TYPE_HARDWARE_MIXED))) {
return (true);
if (old->DeviceId == new->DeviceId) {
/*
* Newer IVRS header type take precedence.
*/
if (old->Type == IVRS_TYPE_HARDWARE_LEGACY &&
((new->Type == IVRS_TYPE_HARDWARE_EFR) ||
(new->Type == IVRS_TYPE_HARDWARE_MIXED)))
return (true);
/*
* Mixed format IVHD header type take precedence
* over fixed format IVHD header types.
*/
if (old->Type == IVRS_TYPE_HARDWARE_EFR &&
new->Type == IVRS_TYPE_HARDWARE_MIXED)
return (true);
}
return (false);