Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 3 Sep 2021 19:06:01 GMT
From:      Ka Ho Ng <khng@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Subject:   git: 172cf62e0899 - stable/12 - AMD-vi: Mixed format IVHD block should replace fixed format IVHD block
Message-ID:  <202109031906.183J616W050649@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch stable/12 has been updated by khng:

URL: https://cgit.FreeBSD.org/src/commit/?id=172cf62e089945e17d6c0c812039bb362c5d602f

commit 172cf62e089945e17d6c0c812039bb362c5d602f
Author:     Ka Ho Ng <khng@FreeBSD.org>
AuthorDate: 2021-04-01 01:15:19 +0000
Commit:     Ka Ho Ng <khng@FreeBSD.org>
CommitDate: 2021-09-03 18:46:40 +0000

    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:       74ada297e897
    Reported by:    Oleg Ginzburg <olevole@olevole.ru>
    Reviewed by:    grehan
    Approved by:    philip (mentor)
    Differential Revision:  https://reviews.freebsd.org/D29521
    
    (cherry picked from commit 03efa462b2ab3ae8166598363e9e83d4e5cf0398)
---
 sys/amd64/vmm/amd/ivrs_drv.c | 24 ++++++++++++++++--------
 1 file changed, 16 insertions(+), 8 deletions(-)

diff --git a/sys/amd64/vmm/amd/ivrs_drv.c b/sys/amd64/vmm/amd/ivrs_drv.c
index 90b4a874c345..f1ba3e92277b 100644
--- a/sys/amd64/vmm/amd/ivrs_drv.c
+++ b/sys/amd64/vmm/amd/ivrs_drv.c
@@ -313,14 +313,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);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202109031906.183J616W050649>