All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] x86/quirks: Fix logic to apply quirk once
@ 2021-12-18  6:13 ` Lucas De Marchi
  0 siblings, 0 replies; 8+ messages in thread
From: Lucas De Marchi @ 2021-12-18  6:13 UTC (permalink / raw)
  To: x86
  Cc: Dave Hansen, Ingo Molnar, Thomas Gleixner, Bjorn Helgaas,
	linux-pci, intel-gfx, Ville Syrjälä,
	Matt Roper

When using QFLAG_APPLY_ONCE we make sure the quirk is applied only once.
This is useful when it's enough one device to trigger a certain
condition or when the resource in each that applies is global to the
system rather than local to the device.

However we call the quirk handler based on vendor, class, and device,
allowing the specific handler to do additional filtering. In that case
check_dev_quirk() may incorrectly mark the quirk as applied when it's
not. This is particularly bad for intel_graphics_quirks() that uses
PCI_ANY_ID and then compares with a long list of devices. This hasn't
been problematic so far because those devices are integrated GPUs and
there can only be one in the system.  However as Intel starts to
release discrete cards, this condition is no longer true and we fail to
reserve the stolen memory (for the integrated gpu) depending on the bus
topology: if the traversal finds the discrete card first, for which
there is no system stolen memory, we will fail to reserve it for the
integrated card.

This fixes the stolen memory reservation for an Alderlake-P system with
one additional DG2. In this system we have:

	- 00:01.0 Bridge
	  `- 03:00.0 DG2
	- Alderklake-P's integrated graphics

Since we do a depth-first traversal, when we call the handler because of
DG2 we were marking it as already being applied and never reserving the
stolen memory for Alderlake-P.

Here we change the quirk fucntions to return bool in case it applied a
quirk so we only flag it as applied when that really happened. This only
makes a difference for quirks using QFLAG_APPLY_ONCE, so all the others
simply returns true in order to avoid unnecessary complication.

Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
 arch/x86/kernel/early-quirks.c | 75 ++++++++++++++++++++++------------
 1 file changed, 49 insertions(+), 26 deletions(-)

diff --git a/arch/x86/kernel/early-quirks.c b/arch/x86/kernel/early-quirks.c
index 391a4e2b8604..5d235fe2a07a 100644
--- a/arch/x86/kernel/early-quirks.c
+++ b/arch/x86/kernel/early-quirks.c
@@ -28,7 +28,7 @@
 #include <asm/irq_remapping.h>
 #include <asm/early_ioremap.h>
 
-static void __init fix_hypertransport_config(int num, int slot, int func)
+static bool __init fix_hypertransport_config(int num, int slot, int func)
 {
 	u32 htcfg;
 	/*
@@ -51,10 +51,10 @@ static void __init fix_hypertransport_config(int num, int slot, int func)
 		}
 	}
 
-
+	return true;
 }
 
-static void __init via_bugs(int  num, int slot, int func)
+static bool __init via_bugs(int  num, int slot, int func)
 {
 #ifdef CONFIG_GART_IOMMU
 	if ((max_pfn > MAX_DMA32_PFN ||  force_iommu) &&
@@ -63,8 +63,12 @@ static void __init via_bugs(int  num, int slot, int func)
 		       "Looks like a VIA chipset. Disabling IOMMU."
 		       " Override with iommu=allowed\n");
 		gart_iommu_aperture_disabled = 1;
+
+		return true;
 	}
 #endif
+
+	return false;
 }
 
 #ifdef CONFIG_ACPI
@@ -77,7 +81,7 @@ static int __init nvidia_hpet_check(struct acpi_table_header *header)
 #endif /* CONFIG_X86_IO_APIC */
 #endif /* CONFIG_ACPI */
 
-static void __init nvidia_bugs(int num, int slot, int func)
+static bool __init nvidia_bugs(int num, int slot, int func)
 {
 #ifdef CONFIG_ACPI
 #ifdef CONFIG_X86_IO_APIC
@@ -86,7 +90,7 @@ static void __init nvidia_bugs(int num, int slot, int func)
 	 * Nvidia graphics cards with PCI ports on secondary buses.
 	 */
 	if (num)
-		return;
+		return false;
 
 	/*
 	 * All timer overrides on Nvidia are
@@ -96,7 +100,7 @@ static void __init nvidia_bugs(int num, int slot, int func)
 	 * at least allow a command line override.
 	 */
 	if (acpi_use_timer_override)
-		return;
+		return false;
 
 	if (acpi_table_parse(ACPI_SIG_HPET, nvidia_hpet_check)) {
 		acpi_skip_timer_override = 1;
@@ -105,11 +109,14 @@ static void __init nvidia_bugs(int num, int slot, int func)
 		       "timer override.\n");
 		printk(KERN_INFO "If you got timer trouble "
 			"try acpi_use_timer_override\n");
+
+		return true;
 	}
 #endif
 #endif
 	/* RED-PEN skip them on mptables too? */
 
+	return false;
 }
 
 #if defined(CONFIG_ACPI) && defined(CONFIG_X86_IO_APIC)
@@ -131,13 +138,13 @@ static u32 __init ati_ixp4x0_rev(int num, int slot, int func)
 	return d;
 }
 
-static void __init ati_bugs(int num, int slot, int func)
+static bool __init ati_bugs(int num, int slot, int func)
 {
 	u32 d;
 	u8  b;
 
 	if (acpi_use_timer_override)
-		return;
+		return true;
 
 	d = ati_ixp4x0_rev(num, slot, func);
 	if (d  < 0x82)
@@ -155,6 +162,8 @@ static void __init ati_bugs(int num, int slot, int func)
 		printk(KERN_INFO "If you got timer trouble "
 		       "try acpi_use_timer_override\n");
 	}
+
+	return true;
 }
 
 static u32 __init ati_sbx00_rev(int num, int slot, int func)
@@ -167,7 +176,7 @@ static u32 __init ati_sbx00_rev(int num, int slot, int func)
 	return d;
 }
 
-static void __init ati_bugs_contd(int num, int slot, int func)
+static bool __init ati_bugs_contd(int num, int slot, int func)
 {
 	u32 d, rev;
 
@@ -181,10 +190,10 @@ static void __init ati_bugs_contd(int num, int slot, int func)
 	 * SB800: revisions 0x40, 0x41, ...
 	 */
 	if (rev >= 0x39)
-		return;
+		return true;
 
 	if (acpi_use_timer_override)
-		return;
+		return true;
 
 	/* check for IRQ0 interrupt swap */
 	d = read_pci_config(num, slot, func, 0x64);
@@ -197,18 +206,22 @@ static void __init ati_bugs_contd(int num, int slot, int func)
 		printk(KERN_INFO "If you got timer trouble "
 		       "try acpi_use_timer_override\n");
 	}
+
+	return true;
 }
 #else
-static void __init ati_bugs(int num, int slot, int func)
+static bool __init ati_bugs(int num, int slot, int func)
 {
+	return true;
 }
 
-static void __init ati_bugs_contd(int num, int slot, int func)
+static bool __init ati_bugs_contd(int num, int slot, int func)
 {
+	return true;
 }
 #endif
 
-static void __init intel_remapping_check(int num, int slot, int func)
+static bool __init intel_remapping_check(int num, int slot, int func)
 {
 	u8 revision;
 	u16 device;
@@ -226,6 +239,8 @@ static void __init intel_remapping_check(int num, int slot, int func)
 		set_irq_remapping_broken();
 	else if (device == 0x3405 && revision == 0x22)
 		set_irq_remapping_broken();
+
+	return true;
 }
 
 /*
@@ -585,7 +600,7 @@ intel_graphics_stolen(int num, int slot, int func,
 	e820__update_table(e820_table);
 }
 
-static void __init intel_graphics_quirks(int num, int slot, int func)
+static bool __init intel_graphics_quirks(int num, int slot, int func)
 {
 	const struct intel_early_ops *early_ops;
 	u16 device;
@@ -603,16 +618,20 @@ static void __init intel_graphics_quirks(int num, int slot, int func)
 
 		intel_graphics_stolen(num, slot, func, early_ops);
 
-		return;
+		return true;
 	}
+
+	return false;
 }
 
-static void __init force_disable_hpet(int num, int slot, int func)
+static bool __init force_disable_hpet(int num, int slot, int func)
 {
 #ifdef CONFIG_HPET_TIMER
 	boot_hpet_disable = true;
 	pr_info("x86/hpet: Will disable the HPET for this platform because it's not reliable\n");
 #endif
+
+	return true;
 }
 
 #define BCM4331_MMIO_SIZE	16384
@@ -620,7 +639,7 @@ static void __init force_disable_hpet(int num, int slot, int func)
 #define bcma_aread32(reg)	ioread32(mmio + 1 * BCMA_CORE_SIZE + reg)
 #define bcma_awrite32(reg, val)	iowrite32(val, mmio + 1 * BCMA_CORE_SIZE + reg)
 
-static void __init apple_airport_reset(int bus, int slot, int func)
+static bool __init apple_airport_reset(int bus, int slot, int func)
 {
 	void __iomem *mmio;
 	u16 pmcsr;
@@ -628,7 +647,7 @@ static void __init apple_airport_reset(int bus, int slot, int func)
 	int i;
 
 	if (!x86_apple_machine)
-		return;
+		return true;
 
 	/* Card may have been put into PCI_D3hot by grub quirk */
 	pmcsr = read_pci_config_16(bus, slot, func, BCM4331_PM_CAP + PCI_PM_CTRL);
@@ -642,7 +661,7 @@ static void __init apple_airport_reset(int bus, int slot, int func)
 		if ((pmcsr & PCI_PM_CTRL_STATE_MASK) != PCI_D0) {
 			pr_err("pci 0000:%02x:%02x.%d: Cannot power up Apple AirPort card\n",
 			       bus, slot, func);
-			return;
+			return true;
 		}
 	}
 
@@ -654,7 +673,7 @@ static void __init apple_airport_reset(int bus, int slot, int func)
 	if (!mmio) {
 		pr_err("pci 0000:%02x:%02x.%d: Cannot iomap Apple AirPort card\n",
 		       bus, slot, func);
-		return;
+		return true;
 	}
 
 	pr_info("Resetting Apple AirPort card (left enabled by EFI)\n");
@@ -671,6 +690,8 @@ static void __init apple_airport_reset(int bus, int slot, int func)
 	udelay(10);
 
 	early_iounmap(mmio, BCM4331_MMIO_SIZE);
+
+	return true;
 }
 
 #define QFLAG_APPLY_ONCE 	0x1
@@ -682,7 +703,7 @@ struct chipset {
 	u32 class;
 	u32 class_mask;
 	u32 flags;
-	void (*f)(int num, int slot, int func);
+	bool (*f)(int num, int slot, int func);
 };
 
 static struct chipset early_qrk[] __initdata = {
@@ -757,11 +778,13 @@ static int __init check_dev_quirk(int num, int slot, int func)
 			(early_qrk[i].device == device)) &&
 			(!((early_qrk[i].class ^ class) &
 			    early_qrk[i].class_mask))) {
-				if ((early_qrk[i].flags &
-				     QFLAG_DONE) != QFLAG_DONE)
-					early_qrk[i].f(num, slot, func);
-				early_qrk[i].flags |= QFLAG_APPLIED;
+			if ((early_qrk[i].flags & QFLAG_DONE) != QFLAG_DONE) {
+				bool applied = early_qrk[i].f(num, slot, func);
+
+				if (applied)
+					early_qrk[i].flags |= QFLAG_APPLIED;
 			}
+		}
 	}
 
 	type = read_pci_config_byte(num, slot, func,
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [Intel-gfx] [PATCH] x86/quirks: Fix logic to apply quirk once
@ 2021-12-18  6:13 ` Lucas De Marchi
  0 siblings, 0 replies; 8+ messages in thread
From: Lucas De Marchi @ 2021-12-18  6:13 UTC (permalink / raw)
  To: x86
  Cc: linux-pci, intel-gfx, Dave Hansen, Ingo Molnar, Bjorn Helgaas,
	Thomas Gleixner

When using QFLAG_APPLY_ONCE we make sure the quirk is applied only once.
This is useful when it's enough one device to trigger a certain
condition or when the resource in each that applies is global to the
system rather than local to the device.

However we call the quirk handler based on vendor, class, and device,
allowing the specific handler to do additional filtering. In that case
check_dev_quirk() may incorrectly mark the quirk as applied when it's
not. This is particularly bad for intel_graphics_quirks() that uses
PCI_ANY_ID and then compares with a long list of devices. This hasn't
been problematic so far because those devices are integrated GPUs and
there can only be one in the system.  However as Intel starts to
release discrete cards, this condition is no longer true and we fail to
reserve the stolen memory (for the integrated gpu) depending on the bus
topology: if the traversal finds the discrete card first, for which
there is no system stolen memory, we will fail to reserve it for the
integrated card.

This fixes the stolen memory reservation for an Alderlake-P system with
one additional DG2. In this system we have:

	- 00:01.0 Bridge
	  `- 03:00.0 DG2
	- Alderklake-P's integrated graphics

Since we do a depth-first traversal, when we call the handler because of
DG2 we were marking it as already being applied and never reserving the
stolen memory for Alderlake-P.

Here we change the quirk fucntions to return bool in case it applied a
quirk so we only flag it as applied when that really happened. This only
makes a difference for quirks using QFLAG_APPLY_ONCE, so all the others
simply returns true in order to avoid unnecessary complication.

Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
 arch/x86/kernel/early-quirks.c | 75 ++++++++++++++++++++++------------
 1 file changed, 49 insertions(+), 26 deletions(-)

diff --git a/arch/x86/kernel/early-quirks.c b/arch/x86/kernel/early-quirks.c
index 391a4e2b8604..5d235fe2a07a 100644
--- a/arch/x86/kernel/early-quirks.c
+++ b/arch/x86/kernel/early-quirks.c
@@ -28,7 +28,7 @@
 #include <asm/irq_remapping.h>
 #include <asm/early_ioremap.h>
 
-static void __init fix_hypertransport_config(int num, int slot, int func)
+static bool __init fix_hypertransport_config(int num, int slot, int func)
 {
 	u32 htcfg;
 	/*
@@ -51,10 +51,10 @@ static void __init fix_hypertransport_config(int num, int slot, int func)
 		}
 	}
 
-
+	return true;
 }
 
-static void __init via_bugs(int  num, int slot, int func)
+static bool __init via_bugs(int  num, int slot, int func)
 {
 #ifdef CONFIG_GART_IOMMU
 	if ((max_pfn > MAX_DMA32_PFN ||  force_iommu) &&
@@ -63,8 +63,12 @@ static void __init via_bugs(int  num, int slot, int func)
 		       "Looks like a VIA chipset. Disabling IOMMU."
 		       " Override with iommu=allowed\n");
 		gart_iommu_aperture_disabled = 1;
+
+		return true;
 	}
 #endif
+
+	return false;
 }
 
 #ifdef CONFIG_ACPI
@@ -77,7 +81,7 @@ static int __init nvidia_hpet_check(struct acpi_table_header *header)
 #endif /* CONFIG_X86_IO_APIC */
 #endif /* CONFIG_ACPI */
 
-static void __init nvidia_bugs(int num, int slot, int func)
+static bool __init nvidia_bugs(int num, int slot, int func)
 {
 #ifdef CONFIG_ACPI
 #ifdef CONFIG_X86_IO_APIC
@@ -86,7 +90,7 @@ static void __init nvidia_bugs(int num, int slot, int func)
 	 * Nvidia graphics cards with PCI ports on secondary buses.
 	 */
 	if (num)
-		return;
+		return false;
 
 	/*
 	 * All timer overrides on Nvidia are
@@ -96,7 +100,7 @@ static void __init nvidia_bugs(int num, int slot, int func)
 	 * at least allow a command line override.
 	 */
 	if (acpi_use_timer_override)
-		return;
+		return false;
 
 	if (acpi_table_parse(ACPI_SIG_HPET, nvidia_hpet_check)) {
 		acpi_skip_timer_override = 1;
@@ -105,11 +109,14 @@ static void __init nvidia_bugs(int num, int slot, int func)
 		       "timer override.\n");
 		printk(KERN_INFO "If you got timer trouble "
 			"try acpi_use_timer_override\n");
+
+		return true;
 	}
 #endif
 #endif
 	/* RED-PEN skip them on mptables too? */
 
+	return false;
 }
 
 #if defined(CONFIG_ACPI) && defined(CONFIG_X86_IO_APIC)
@@ -131,13 +138,13 @@ static u32 __init ati_ixp4x0_rev(int num, int slot, int func)
 	return d;
 }
 
-static void __init ati_bugs(int num, int slot, int func)
+static bool __init ati_bugs(int num, int slot, int func)
 {
 	u32 d;
 	u8  b;
 
 	if (acpi_use_timer_override)
-		return;
+		return true;
 
 	d = ati_ixp4x0_rev(num, slot, func);
 	if (d  < 0x82)
@@ -155,6 +162,8 @@ static void __init ati_bugs(int num, int slot, int func)
 		printk(KERN_INFO "If you got timer trouble "
 		       "try acpi_use_timer_override\n");
 	}
+
+	return true;
 }
 
 static u32 __init ati_sbx00_rev(int num, int slot, int func)
@@ -167,7 +176,7 @@ static u32 __init ati_sbx00_rev(int num, int slot, int func)
 	return d;
 }
 
-static void __init ati_bugs_contd(int num, int slot, int func)
+static bool __init ati_bugs_contd(int num, int slot, int func)
 {
 	u32 d, rev;
 
@@ -181,10 +190,10 @@ static void __init ati_bugs_contd(int num, int slot, int func)
 	 * SB800: revisions 0x40, 0x41, ...
 	 */
 	if (rev >= 0x39)
-		return;
+		return true;
 
 	if (acpi_use_timer_override)
-		return;
+		return true;
 
 	/* check for IRQ0 interrupt swap */
 	d = read_pci_config(num, slot, func, 0x64);
@@ -197,18 +206,22 @@ static void __init ati_bugs_contd(int num, int slot, int func)
 		printk(KERN_INFO "If you got timer trouble "
 		       "try acpi_use_timer_override\n");
 	}
+
+	return true;
 }
 #else
-static void __init ati_bugs(int num, int slot, int func)
+static bool __init ati_bugs(int num, int slot, int func)
 {
+	return true;
 }
 
-static void __init ati_bugs_contd(int num, int slot, int func)
+static bool __init ati_bugs_contd(int num, int slot, int func)
 {
+	return true;
 }
 #endif
 
-static void __init intel_remapping_check(int num, int slot, int func)
+static bool __init intel_remapping_check(int num, int slot, int func)
 {
 	u8 revision;
 	u16 device;
@@ -226,6 +239,8 @@ static void __init intel_remapping_check(int num, int slot, int func)
 		set_irq_remapping_broken();
 	else if (device == 0x3405 && revision == 0x22)
 		set_irq_remapping_broken();
+
+	return true;
 }
 
 /*
@@ -585,7 +600,7 @@ intel_graphics_stolen(int num, int slot, int func,
 	e820__update_table(e820_table);
 }
 
-static void __init intel_graphics_quirks(int num, int slot, int func)
+static bool __init intel_graphics_quirks(int num, int slot, int func)
 {
 	const struct intel_early_ops *early_ops;
 	u16 device;
@@ -603,16 +618,20 @@ static void __init intel_graphics_quirks(int num, int slot, int func)
 
 		intel_graphics_stolen(num, slot, func, early_ops);
 
-		return;
+		return true;
 	}
+
+	return false;
 }
 
-static void __init force_disable_hpet(int num, int slot, int func)
+static bool __init force_disable_hpet(int num, int slot, int func)
 {
 #ifdef CONFIG_HPET_TIMER
 	boot_hpet_disable = true;
 	pr_info("x86/hpet: Will disable the HPET for this platform because it's not reliable\n");
 #endif
+
+	return true;
 }
 
 #define BCM4331_MMIO_SIZE	16384
@@ -620,7 +639,7 @@ static void __init force_disable_hpet(int num, int slot, int func)
 #define bcma_aread32(reg)	ioread32(mmio + 1 * BCMA_CORE_SIZE + reg)
 #define bcma_awrite32(reg, val)	iowrite32(val, mmio + 1 * BCMA_CORE_SIZE + reg)
 
-static void __init apple_airport_reset(int bus, int slot, int func)
+static bool __init apple_airport_reset(int bus, int slot, int func)
 {
 	void __iomem *mmio;
 	u16 pmcsr;
@@ -628,7 +647,7 @@ static void __init apple_airport_reset(int bus, int slot, int func)
 	int i;
 
 	if (!x86_apple_machine)
-		return;
+		return true;
 
 	/* Card may have been put into PCI_D3hot by grub quirk */
 	pmcsr = read_pci_config_16(bus, slot, func, BCM4331_PM_CAP + PCI_PM_CTRL);
@@ -642,7 +661,7 @@ static void __init apple_airport_reset(int bus, int slot, int func)
 		if ((pmcsr & PCI_PM_CTRL_STATE_MASK) != PCI_D0) {
 			pr_err("pci 0000:%02x:%02x.%d: Cannot power up Apple AirPort card\n",
 			       bus, slot, func);
-			return;
+			return true;
 		}
 	}
 
@@ -654,7 +673,7 @@ static void __init apple_airport_reset(int bus, int slot, int func)
 	if (!mmio) {
 		pr_err("pci 0000:%02x:%02x.%d: Cannot iomap Apple AirPort card\n",
 		       bus, slot, func);
-		return;
+		return true;
 	}
 
 	pr_info("Resetting Apple AirPort card (left enabled by EFI)\n");
@@ -671,6 +690,8 @@ static void __init apple_airport_reset(int bus, int slot, int func)
 	udelay(10);
 
 	early_iounmap(mmio, BCM4331_MMIO_SIZE);
+
+	return true;
 }
 
 #define QFLAG_APPLY_ONCE 	0x1
@@ -682,7 +703,7 @@ struct chipset {
 	u32 class;
 	u32 class_mask;
 	u32 flags;
-	void (*f)(int num, int slot, int func);
+	bool (*f)(int num, int slot, int func);
 };
 
 static struct chipset early_qrk[] __initdata = {
@@ -757,11 +778,13 @@ static int __init check_dev_quirk(int num, int slot, int func)
 			(early_qrk[i].device == device)) &&
 			(!((early_qrk[i].class ^ class) &
 			    early_qrk[i].class_mask))) {
-				if ((early_qrk[i].flags &
-				     QFLAG_DONE) != QFLAG_DONE)
-					early_qrk[i].f(num, slot, func);
-				early_qrk[i].flags |= QFLAG_APPLIED;
+			if ((early_qrk[i].flags & QFLAG_DONE) != QFLAG_DONE) {
+				bool applied = early_qrk[i].f(num, slot, func);
+
+				if (applied)
+					early_qrk[i].flags |= QFLAG_APPLIED;
 			}
+		}
 	}
 
 	type = read_pci_config_byte(num, slot, func,
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [Intel-gfx] ✓ Fi.CI.BAT: success for x86/quirks: Fix logic to apply quirk once
  2021-12-18  6:13 ` [Intel-gfx] " Lucas De Marchi
  (?)
@ 2021-12-18  7:13 ` Patchwork
  -1 siblings, 0 replies; 8+ messages in thread
From: Patchwork @ 2021-12-18  7:13 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: intel-gfx

[-- Attachment #1: Type: text/plain, Size: 5890 bytes --]

== Series Details ==

Series: x86/quirks: Fix logic to apply quirk once
URL   : https://patchwork.freedesktop.org/series/98200/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_11014 -> Patchwork_21874
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/index.html

Participating hosts (41 -> 33)
------------------------------

  Additional (1): fi-bxt-dsi 
  Missing    (9): fi-kbl-soraka bat-dg1-6 bat-dg1-5 fi-bsw-n3050 fi-bsw-cyan bat-adlp-6 fi-pnv-d510 bat-jsl-2 fi-bdw-samus 

Known issues
------------

  Here are the changes found in Patchwork_21874 that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@gem_huc_copy@huc-copy:
    - fi-bxt-dsi:         NOTRUN -> [SKIP][1] ([fdo#109271] / [i915#2190])
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/fi-bxt-dsi/igt@gem_huc_copy@huc-copy.html

  * igt@gem_lmem_swapping@verify-random:
    - fi-bxt-dsi:         NOTRUN -> [SKIP][2] ([fdo#109271] / [i915#4613]) +3 similar issues
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/fi-bxt-dsi/igt@gem_lmem_swapping@verify-random.html

  * igt@i915_selftest@live:
    - fi-skl-6600u:       NOTRUN -> [FAIL][3] ([i915#4547])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/fi-skl-6600u/igt@i915_selftest@live.html

  * igt@kms_chamelium@common-hpd-after-suspend:
    - fi-bxt-dsi:         NOTRUN -> [SKIP][4] ([fdo#109271] / [fdo#111827]) +8 similar issues
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/fi-bxt-dsi/igt@kms_chamelium@common-hpd-after-suspend.html

  * igt@kms_chamelium@dp-crc-fast:
    - fi-bsw-nick:        NOTRUN -> [SKIP][5] ([fdo#109271] / [fdo#111827]) +8 similar issues
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/fi-bsw-nick/igt@kms_chamelium@dp-crc-fast.html

  * igt@kms_force_connector_basic@force-load-detect:
    - fi-bxt-dsi:         NOTRUN -> [SKIP][6] ([fdo#109271]) +30 similar issues
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/fi-bxt-dsi/igt@kms_force_connector_basic@force-load-detect.html

  * igt@kms_pipe_crc_basic@compare-crc-sanitycheck-pipe-d:
    - fi-bxt-dsi:         NOTRUN -> [SKIP][7] ([fdo#109271] / [i915#533])
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/fi-bxt-dsi/igt@kms_pipe_crc_basic@compare-crc-sanitycheck-pipe-d.html

  * igt@prime_vgem@basic-fence-flip:
    - fi-bsw-nick:        NOTRUN -> [SKIP][8] ([fdo#109271]) +62 similar issues
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/fi-bsw-nick/igt@prime_vgem@basic-fence-flip.html

  * igt@runner@aborted:
    - fi-skl-6600u:       NOTRUN -> [FAIL][9] ([i915#1436] / [i915#4312])
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/fi-skl-6600u/igt@runner@aborted.html

  
#### Possible fixes ####

  * igt@gem_ctx_exec@basic:
    - fi-bsw-nick:        [DMESG-WARN][10] ([i915#3428]) -> [PASS][11]
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/fi-bsw-nick/igt@gem_ctx_exec@basic.html
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/fi-bsw-nick/igt@gem_ctx_exec@basic.html

  * igt@i915_selftest@live@gem_contexts:
    - {fi-tgl-dsi}:       [INCOMPLETE][12] ([i915#402]) -> [PASS][13]
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/fi-tgl-dsi/igt@i915_selftest@live@gem_contexts.html
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/fi-tgl-dsi/igt@i915_selftest@live@gem_contexts.html

  * igt@i915_selftest@live@hugepages:
    - {fi-tgl-dsi}:       [INCOMPLETE][14] -> [PASS][15]
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/fi-tgl-dsi/igt@i915_selftest@live@hugepages.html
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/fi-tgl-dsi/igt@i915_selftest@live@hugepages.html

  * igt@kms_frontbuffer_tracking@basic:
    - fi-cml-u2:          [DMESG-WARN][16] ([i915#4269]) -> [PASS][17]
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/fi-cml-u2/igt@kms_frontbuffer_tracking@basic.html
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/fi-cml-u2/igt@kms_frontbuffer_tracking@basic.html

  
  {name}: This element is suppressed. This means it is ignored when computing
          the status of the difference (SUCCESS, WARNING, or FAILURE).

  [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
  [fdo#109315]: https://bugs.freedesktop.org/show_bug.cgi?id=109315
  [fdo#111827]: https://bugs.freedesktop.org/show_bug.cgi?id=111827
  [i915#1436]: https://gitlab.freedesktop.org/drm/intel/issues/1436
  [i915#2190]: https://gitlab.freedesktop.org/drm/intel/issues/2190
  [i915#2575]: https://gitlab.freedesktop.org/drm/intel/issues/2575
  [i915#3428]: https://gitlab.freedesktop.org/drm/intel/issues/3428
  [i915#402]: https://gitlab.freedesktop.org/drm/intel/issues/402
  [i915#4269]: https://gitlab.freedesktop.org/drm/intel/issues/4269
  [i915#4312]: https://gitlab.freedesktop.org/drm/intel/issues/4312
  [i915#4547]: https://gitlab.freedesktop.org/drm/intel/issues/4547
  [i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613
  [i915#533]: https://gitlab.freedesktop.org/drm/intel/issues/533


Build changes
-------------

  * Linux: CI_DRM_11014 -> Patchwork_21874

  CI-20190529: 20190529
  CI_DRM_11014: c4f095f24fcdc6e85ae112052b3034328e24ae66 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_6313: 1793ed798cc09966c27bf478781e0c1d6bb23bad @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  Patchwork_21874: 238a09b51604f2825f00e6aa795adc1dd3022849 @ git://anongit.freedesktop.org/gfx-ci/linux


== Linux commits ==

238a09b51604 x86/quirks: Fix logic to apply quirk once

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/index.html

[-- Attachment #2: Type: text/html, Size: 7155 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Intel-gfx] ✗ Fi.CI.IGT: failure for x86/quirks: Fix logic to apply quirk once
  2021-12-18  6:13 ` [Intel-gfx] " Lucas De Marchi
  (?)
  (?)
@ 2021-12-18  9:10 ` Patchwork
  -1 siblings, 0 replies; 8+ messages in thread
From: Patchwork @ 2021-12-18  9:10 UTC (permalink / raw)
  To: Lucas De Marchi; +Cc: intel-gfx

[-- Attachment #1: Type: text/plain, Size: 30264 bytes --]

== Series Details ==

Series: x86/quirks: Fix logic to apply quirk once
URL   : https://patchwork.freedesktop.org/series/98200/
State : failure

== Summary ==

CI Bug Log - changes from CI_DRM_11014_full -> Patchwork_21874_full
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with Patchwork_21874_full absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in Patchwork_21874_full, please notify your bug team to allow them
  to document this new failure mode, which will reduce false positives in CI.

  

Participating hosts (10 -> 10)
------------------------------

  No changes in participating hosts

Possible new issues
-------------------

  Here are the unknown changes that may have been introduced in Patchwork_21874_full:

### IGT changes ###

#### Possible regressions ####

  * igt@i915_pm_rpm@fences:
    - shard-iclb:         [PASS][1] -> [INCOMPLETE][2]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-iclb8/igt@i915_pm_rpm@fences.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-iclb4/igt@i915_pm_rpm@fences.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-draw-pwrite:
    - shard-tglb:         [PASS][3] -> [INCOMPLETE][4]
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-tglb3/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-draw-pwrite.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-tglb8/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-draw-pwrite.html

  * igt@kms_vblank@pipe-c-ts-continuation-dpms-suspend:
    - shard-skl:          [PASS][5] -> [INCOMPLETE][6]
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-skl9/igt@kms_vblank@pipe-c-ts-continuation-dpms-suspend.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-skl4/igt@kms_vblank@pipe-c-ts-continuation-dpms-suspend.html

  
Known issues
------------

  Here are the changes found in Patchwork_21874_full that come from known issues:

### CI changes ###

#### Possible fixes ####

  * boot:
    - shard-apl:          ([PASS][7], [PASS][8], [PASS][9], [PASS][10], [FAIL][11], [PASS][12], [PASS][13], [PASS][14], [PASS][15], [PASS][16], [PASS][17], [PASS][18], [PASS][19], [PASS][20], [PASS][21], [PASS][22], [PASS][23], [PASS][24], [PASS][25], [PASS][26], [PASS][27], [PASS][28], [PASS][29], [PASS][30], [PASS][31]) ([i915#4386]) -> ([PASS][32], [PASS][33], [PASS][34], [PASS][35], [PASS][36], [PASS][37], [PASS][38], [PASS][39], [PASS][40], [PASS][41], [PASS][42], [PASS][43], [PASS][44], [PASS][45], [PASS][46], [PASS][47], [PASS][48], [PASS][49], [PASS][50], [PASS][51], [PASS][52], [PASS][53], [PASS][54], [PASS][55], [PASS][56])
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-apl6/boot.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-apl6/boot.html
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-apl1/boot.html
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-apl1/boot.html
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-apl1/boot.html
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-apl1/boot.html
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-apl2/boot.html
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-apl2/boot.html
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-apl2/boot.html
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-apl2/boot.html
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-apl3/boot.html
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-apl3/boot.html
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-apl8/boot.html
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-apl3/boot.html
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-apl8/boot.html
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-apl8/boot.html
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-apl7/boot.html
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-apl3/boot.html
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-apl4/boot.html
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-apl7/boot.html
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-apl7/boot.html
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-apl6/boot.html
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-apl4/boot.html
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-apl6/boot.html
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-apl4/boot.html
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-apl8/boot.html
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-apl3/boot.html
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-apl3/boot.html
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-apl2/boot.html
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-apl3/boot.html
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-apl4/boot.html
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-apl4/boot.html
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-apl2/boot.html
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-apl1/boot.html
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-apl1/boot.html
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-apl1/boot.html
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-apl4/boot.html
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-apl6/boot.html
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-apl6/boot.html
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-apl6/boot.html
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-apl6/boot.html
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-apl7/boot.html
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-apl7/boot.html
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-apl7/boot.html
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-apl7/boot.html
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-apl7/boot.html
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-apl8/boot.html
   [54]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-apl3/boot.html
   [55]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-apl8/boot.html
   [56]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-apl8/boot.html

  

### IGT changes ###

#### Issues hit ####

  * igt@feature_discovery@psr2:
    - shard-iclb:         NOTRUN -> [SKIP][57] ([i915#658])
   [57]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-iclb8/igt@feature_discovery@psr2.html

  * igt@gem_ctx_persistence@many-contexts:
    - shard-iclb:         [PASS][58] -> [FAIL][59] ([i915#2410])
   [58]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-iclb5/igt@gem_ctx_persistence@many-contexts.html
   [59]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-iclb5/igt@gem_ctx_persistence@many-contexts.html

  * igt@gem_eio@in-flight-contexts-1us:
    - shard-tglb:         [PASS][60] -> [TIMEOUT][61] ([i915#3063])
   [60]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-tglb2/igt@gem_eio@in-flight-contexts-1us.html
   [61]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-tglb1/igt@gem_eio@in-flight-contexts-1us.html

  * igt@gem_eio@in-flight-contexts-immediate:
    - shard-iclb:         [PASS][62] -> [TIMEOUT][63] ([i915#3070])
   [62]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-iclb5/igt@gem_eio@in-flight-contexts-immediate.html
   [63]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-iclb5/igt@gem_eio@in-flight-contexts-immediate.html

  * igt@gem_eio@unwedge-stress:
    - shard-tglb:         [PASS][64] -> [TIMEOUT][65] ([i915#3063] / [i915#3648])
   [64]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-tglb2/igt@gem_eio@unwedge-stress.html
   [65]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-tglb1/igt@gem_eio@unwedge-stress.html

  * igt@gem_exec_capture@pi@vcs0:
    - shard-skl:          NOTRUN -> [INCOMPLETE][66] ([i915#4547])
   [66]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-skl8/igt@gem_exec_capture@pi@vcs0.html

  * igt@gem_exec_fair@basic-none@vcs1:
    - shard-iclb:         NOTRUN -> [FAIL][67] ([i915#2842])
   [67]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-iclb2/igt@gem_exec_fair@basic-none@vcs1.html

  * igt@gem_exec_fair@basic-pace-share@rcs0:
    - shard-tglb:         [PASS][68] -> [FAIL][69] ([i915#2842])
   [68]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-tglb7/igt@gem_exec_fair@basic-pace-share@rcs0.html
   [69]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-tglb2/igt@gem_exec_fair@basic-pace-share@rcs0.html

  * igt@gem_exec_fair@basic-throttle@rcs0:
    - shard-iclb:         [PASS][70] -> [FAIL][71] ([i915#2849])
   [70]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-iclb8/igt@gem_exec_fair@basic-throttle@rcs0.html
   [71]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-iclb4/igt@gem_exec_fair@basic-throttle@rcs0.html

  * igt@gem_exec_parallel@engines@basic:
    - shard-glk:          [PASS][72] -> [DMESG-WARN][73] ([i915#118])
   [72]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-glk5/igt@gem_exec_parallel@engines@basic.html
   [73]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-glk5/igt@gem_exec_parallel@engines@basic.html

  * igt@gem_huc_copy@huc-copy:
    - shard-tglb:         [PASS][74] -> [SKIP][75] ([i915#2190])
   [74]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-tglb5/igt@gem_huc_copy@huc-copy.html
   [75]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-tglb7/igt@gem_huc_copy@huc-copy.html
    - shard-apl:          NOTRUN -> [SKIP][76] ([fdo#109271] / [i915#2190])
   [76]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-apl4/igt@gem_huc_copy@huc-copy.html

  * igt@gem_lmem_swapping@basic:
    - shard-apl:          NOTRUN -> [SKIP][77] ([fdo#109271] / [i915#4613])
   [77]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-apl7/igt@gem_lmem_swapping@basic.html

  * igt@gem_lmem_swapping@heavy-verify-random:
    - shard-kbl:          NOTRUN -> [SKIP][78] ([fdo#109271] / [i915#4613]) +1 similar issue
   [78]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-kbl4/igt@gem_lmem_swapping@heavy-verify-random.html
    - shard-skl:          NOTRUN -> [SKIP][79] ([fdo#109271] / [i915#4613])
   [79]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-skl10/igt@gem_lmem_swapping@heavy-verify-random.html

  * igt@gem_pxp@dmabuf-shared-protected-dst-is-context-refcounted:
    - shard-iclb:         NOTRUN -> [SKIP][80] ([i915#4270]) +1 similar issue
   [80]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-iclb6/igt@gem_pxp@dmabuf-shared-protected-dst-is-context-refcounted.html

  * igt@gem_render_copy@y-tiled-to-vebox-linear:
    - shard-iclb:         NOTRUN -> [SKIP][81] ([i915#768]) +1 similar issue
   [81]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-iclb6/igt@gem_render_copy@y-tiled-to-vebox-linear.html

  * igt@gem_userptr_blits@readonly-pwrite-unsync:
    - shard-iclb:         NOTRUN -> [SKIP][82] ([i915#3297])
   [82]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-iclb6/igt@gem_userptr_blits@readonly-pwrite-unsync.html

  * igt@gen9_exec_parse@allowed-all:
    - shard-glk:          [PASS][83] -> [DMESG-WARN][84] ([i915#1436] / [i915#716])
   [83]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-glk6/igt@gen9_exec_parse@allowed-all.html
   [84]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-glk5/igt@gen9_exec_parse@allowed-all.html

  * igt@gen9_exec_parse@unaligned-access:
    - shard-iclb:         NOTRUN -> [SKIP][85] ([i915#2856])
   [85]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-iclb6/igt@gen9_exec_parse@unaligned-access.html

  * igt@i915_pm_dc@dc9-dpms:
    - shard-iclb:         [PASS][86] -> [SKIP][87] ([i915#4281])
   [86]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-iclb7/igt@i915_pm_dc@dc9-dpms.html
   [87]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-iclb3/igt@i915_pm_dc@dc9-dpms.html

  * igt@kms_async_flips@alternate-sync-async-flip:
    - shard-skl:          [PASS][88] -> [FAIL][89] ([i915#2521])
   [88]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-skl9/igt@kms_async_flips@alternate-sync-async-flip.html
   [89]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-skl4/igt@kms_async_flips@alternate-sync-async-flip.html
    - shard-kbl:          [PASS][90] -> [FAIL][91] ([i915#2521])
   [90]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-kbl6/igt@kms_async_flips@alternate-sync-async-flip.html
   [91]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-kbl7/igt@kms_async_flips@alternate-sync-async-flip.html

  * igt@kms_big_fb@linear-8bpp-rotate-90:
    - shard-iclb:         NOTRUN -> [SKIP][92] ([fdo#110725] / [fdo#111614]) +1 similar issue
   [92]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-iclb6/igt@kms_big_fb@linear-8bpp-rotate-90.html

  * igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-hflip:
    - shard-kbl:          NOTRUN -> [SKIP][93] ([fdo#109271] / [i915#3777])
   [93]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-kbl4/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-hflip.html
    - shard-skl:          NOTRUN -> [SKIP][94] ([fdo#109271] / [i915#3777])
   [94]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-skl10/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-hflip.html

  * igt@kms_big_fb@yf-tiled-64bpp-rotate-180:
    - shard-iclb:         NOTRUN -> [SKIP][95] ([fdo#110723])
   [95]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-iclb6/igt@kms_big_fb@yf-tiled-64bpp-rotate-180.html

  * igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-0-hflip-async-flip:
    - shard-kbl:          NOTRUN -> [SKIP][96] ([fdo#109271]) +119 similar issues
   [96]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-kbl1/igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-0-hflip-async-flip.html

  * igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-180-async-flip:
    - shard-skl:          NOTRUN -> [FAIL][97] ([i915#3743])
   [97]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-skl10/igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html

  * igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-0:
    - shard-apl:          NOTRUN -> [SKIP][98] ([fdo#109271]) +74 similar issues
   [98]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-apl4/igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-0.html

  * igt@kms_ccs@pipe-a-ccs-on-another-bo-y_tiled_gen12_mc_ccs:
    - shard-apl:          NOTRUN -> [SKIP][99] ([fdo#109271] / [i915#3886]) +1 similar issue
   [99]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-apl7/igt@kms_ccs@pipe-a-ccs-on-another-bo-y_tiled_gen12_mc_ccs.html

  * igt@kms_ccs@pipe-a-ccs-on-another-bo-y_tiled_gen12_rc_ccs_cc:
    - shard-skl:          NOTRUN -> [SKIP][100] ([fdo#109271] / [i915#3886]) +5 similar issues
   [100]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-skl10/igt@kms_ccs@pipe-a-ccs-on-another-bo-y_tiled_gen12_rc_ccs_cc.html
    - shard-kbl:          NOTRUN -> [SKIP][101] ([fdo#109271] / [i915#3886]) +3 similar issues
   [101]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-kbl4/igt@kms_ccs@pipe-a-ccs-on-another-bo-y_tiled_gen12_rc_ccs_cc.html

  * igt@kms_ccs@pipe-b-crc-primary-rotation-180-y_tiled_gen12_rc_ccs:
    - shard-iclb:         NOTRUN -> [SKIP][102] ([fdo#109278]) +12 similar issues
   [102]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-iclb6/igt@kms_ccs@pipe-b-crc-primary-rotation-180-y_tiled_gen12_rc_ccs.html

  * igt@kms_chamelium@hdmi-crc-fast:
    - shard-iclb:         NOTRUN -> [SKIP][103] ([fdo#109284] / [fdo#111827]) +4 similar issues
   [103]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-iclb6/igt@kms_chamelium@hdmi-crc-fast.html

  * igt@kms_chamelium@hdmi-edid-change-during-suspend:
    - shard-apl:          NOTRUN -> [SKIP][104] ([fdo#109271] / [fdo#111827]) +4 similar issues
   [104]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-apl7/igt@kms_chamelium@hdmi-edid-change-during-suspend.html

  * igt@kms_chamelium@hdmi-mode-timings:
    - shard-kbl:          NOTRUN -> [SKIP][105] ([fdo#109271] / [fdo#111827]) +13 similar issues
   [105]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-kbl1/igt@kms_chamelium@hdmi-mode-timings.html

  * igt@kms_color_chamelium@pipe-d-ctm-0-25:
    - shard-skl:          NOTRUN -> [SKIP][106] ([fdo#109271] / [fdo#111827]) +7 similar issues
   [106]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-skl10/igt@kms_color_chamelium@pipe-d-ctm-0-25.html

  * igt@kms_content_protection@dp-mst-type-1:
    - shard-iclb:         NOTRUN -> [SKIP][107] ([i915#3116])
   [107]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-iclb6/igt@kms_content_protection@dp-mst-type-1.html

  * igt@kms_cursor_crc@pipe-a-cursor-512x512-offscreen:
    - shard-iclb:         NOTRUN -> [SKIP][108] ([fdo#109278] / [fdo#109279]) +1 similar issue
   [108]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-iclb6/igt@kms_cursor_crc@pipe-a-cursor-512x512-offscreen.html

  * igt@kms_cursor_legacy@2x-long-cursor-vs-flip-legacy:
    - shard-iclb:         NOTRUN -> [SKIP][109] ([fdo#109274] / [fdo#109278]) +3 similar issues
   [109]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-iclb6/igt@kms_cursor_legacy@2x-long-cursor-vs-flip-legacy.html

  * igt@kms_flip@2x-flip-vs-dpms:
    - shard-iclb:         NOTRUN -> [SKIP][110] ([fdo#109274]) +1 similar issue
   [110]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-iclb6/igt@kms_flip@2x-flip-vs-dpms.html

  * igt@kms_flip@flip-vs-suspend-interruptible@c-dp1:
    - shard-apl:          [PASS][111] -> [DMESG-WARN][112] ([i915#180]) +3 similar issues
   [111]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-apl7/igt@kms_flip@flip-vs-suspend-interruptible@c-dp1.html
   [112]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-apl8/igt@kms_flip@flip-vs-suspend-interruptible@c-dp1.html

  * igt@kms_flip@flip-vs-suspend@c-dp1:
    - shard-kbl:          NOTRUN -> [DMESG-WARN][113] ([i915#180]) +2 similar issues
   [113]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-kbl1/igt@kms_flip@flip-vs-suspend@c-dp1.html

  * igt@kms_flip@plain-flip-fb-recreate-interruptible@b-edp1:
    - shard-skl:          [PASS][114] -> [FAIL][115] ([i915#2122])
   [114]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-skl3/igt@kms_flip@plain-flip-fb-recreate-interruptible@b-edp1.html
   [115]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-skl1/igt@kms_flip@plain-flip-fb-recreate-interruptible@b-edp1.html

  * igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs:
    - shard-iclb:         NOTRUN -> [SKIP][116] ([i915#2587])
   [116]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-iclb6/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs.html

  * igt@kms_flip_tiling@flip-change-tiling@dp-1-pipe-a-y-to-yf-ccs:
    - shard-kbl:          NOTRUN -> [DMESG-WARN][117] ([i915#1226])
   [117]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-kbl4/igt@kms_flip_tiling@flip-change-tiling@dp-1-pipe-a-y-to-yf-ccs.html

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-shrfb-draw-mmap-cpu:
    - shard-glk:          [PASS][118] -> [FAIL][119] ([i915#2546])
   [118]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-glk7/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-shrfb-draw-mmap-cpu.html
   [119]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-glk5/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-shrfb-draw-mmap-cpu.html

  * igt@kms_frontbuffer_tracking@fbc-1p-shrfb-fliptrack-mmap-gtt:
    - shard-skl:          NOTRUN -> [SKIP][120] ([fdo#109271]) +103 similar issues
   [120]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-skl8/igt@kms_frontbuffer_tracking@fbc-1p-shrfb-fliptrack-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-shrfb-draw-mmap-cpu:
    - shard-iclb:         NOTRUN -> [SKIP][121] ([fdo#109280]) +12 similar issues
   [121]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-iclb6/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-shrfb-draw-mmap-cpu.html

  * igt@kms_frontbuffer_tracking@psr-suspend:
    - shard-iclb:         [PASS][122] -> [DMESG-WARN][123] ([i915#2867])
   [122]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-iclb8/igt@kms_frontbuffer_tracking@psr-suspend.html
   [123]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-iclb2/igt@kms_frontbuffer_tracking@psr-suspend.html

  * igt@kms_hdr@bpc-switch-suspend:
    - shard-skl:          NOTRUN -> [FAIL][124] ([i915#1188])
   [124]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-skl10/igt@kms_hdr@bpc-switch-suspend.html

  * igt@kms_pipe_crc_basic@read-crc-pipe-d:
    - shard-apl:          NOTRUN -> [SKIP][125] ([fdo#109271] / [i915#533])
   [125]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-apl7/igt@kms_pipe_crc_basic@read-crc-pipe-d.html

  * igt@kms_pipe_crc_basic@suspend-read-crc-pipe-c:
    - shard-kbl:          [PASS][126] -> [DMESG-WARN][127] ([i915#180]) +2 similar issues
   [126]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-kbl1/igt@kms_pipe_crc_basic@suspend-read-crc-pipe-c.html
   [127]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-kbl7/igt@kms_pipe_crc_basic@suspend-read-crc-pipe-c.html

  * igt@kms_plane_alpha_blend@pipe-a-alpha-transparent-fb:
    - shard-apl:          NOTRUN -> [FAIL][128] ([i915#265])
   [128]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-apl6/igt@kms_plane_alpha_blend@pipe-a-alpha-transparent-fb.html

  * igt@kms_plane_alpha_blend@pipe-a-coverage-7efc:
    - shard-skl:          NOTRUN -> [FAIL][129] ([fdo#108145] / [i915#265])
   [129]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-skl10/igt@kms_plane_alpha_blend@pipe-a-coverage-7efc.html

  * igt@kms_plane_alpha_blend@pipe-b-alpha-7efc:
    - shard-kbl:          NOTRUN -> [FAIL][130] ([fdo#108145] / [i915#265]) +1 similar issue
   [130]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-kbl1/igt@kms_plane_alpha_blend@pipe-b-alpha-7efc.html

  * igt@kms_plane_lowres@pipe-c-tiling-none:
    - shard-iclb:         NOTRUN -> [SKIP][131] ([i915#3536]) +1 similar issue
   [131]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-iclb6/igt@kms_plane_lowres@pipe-c-tiling-none.html

  * igt@kms_psr2_sf@plane-move-sf-dmg-area:
    - shard-iclb:         NOTRUN -> [SKIP][132] ([fdo#111068] / [i915#658])
   [132]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-iclb6/igt@kms_psr2_sf@plane-move-sf-dmg-area.html

  * igt@kms_psr2_su@page_flip-xrgb8888:
    - shard-kbl:          NOTRUN -> [SKIP][133] ([fdo#109271] / [i915#658])
   [133]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-kbl4/igt@kms_psr2_su@page_flip-xrgb8888.html

  * igt@kms_psr@psr2_primary_mmap_gtt:
    - shard-iclb:         [PASS][134] -> [SKIP][135] ([fdo#109441]) +1 similar issue
   [134]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-iclb2/igt@kms_psr@psr2_primary_mmap_gtt.html
   [135]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-iclb8/igt@kms_psr@psr2_primary_mmap_gtt.html

  * igt@kms_psr@psr2_sprite_plane_move:
    - shard-iclb:         NOTRUN -> [SKIP][136] ([fdo#109441])
   [136]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-iclb6/igt@kms_psr@psr2_sprite_plane_move.html

  * igt@kms_vblank@pipe-a-ts-continuation-suspend:
    - shard-kbl:          [PASS][137] -> [DMESG-WARN][138] ([i915#180] / [i915#295])
   [137]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-kbl3/igt@kms_vblank@pipe-a-ts-continuation-suspend.html
   [138]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-kbl1/igt@kms_vblank@pipe-a-ts-continuation-suspend.html

  * igt@kms_writeback@writeback-fb-id:
    - shard-kbl:          NOTRUN -> [SKIP][139] ([fdo#109271] / [i915#2437])
   [139]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-kbl3/igt@kms_writeback@writeback-fb-id.html

  * igt@kms_writeback@writeback-pixel-formats:
    - shard-iclb:         NOTRUN -> [SKIP][140] ([i915#2437])
   [140]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-iclb6/igt@kms_writeback@writeback-pixel-formats.html

  * igt@prime_nv_api@i915_nv_import_twice:
    - shard-iclb:         NOTRUN -> [SKIP][141] ([fdo#109291])
   [141]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-iclb6/igt@prime_nv_api@i915_nv_import_twice.html

  * igt@prime_vgem@fence-read-hang:
    - shard-iclb:         NOTRUN -> [SKIP][142] ([fdo#109295])
   [142]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-iclb6/igt@prime_vgem@fence-read-hang.html

  * igt@sysfs_clients@fair-7:
    - shard-iclb:         NOTRUN -> [SKIP][143] ([i915#2994])
   [143]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-iclb8/igt@sysfs_clients@fair-7.html

  * igt@sysfs_clients@pidname:
    - shard-skl:          NOTRUN -> [SKIP][144] ([fdo#109271] / [i915#2994]) +2 similar issues
   [144]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-skl10/igt@sysfs_clients@pidname.html
    - shard-kbl:          NOTRUN -> [SKIP][145] ([fdo#109271] / [i915#2994])
   [145]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-kbl4/igt@sysfs_clients@pidname.html

  * igt@sysfs_clients@sema-50:
    - shard-apl:          NOTRUN -> [SKIP][146] ([fdo#109271] / [i915#2994])
   [146]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-apl7/igt@sysfs_clients@sema-50.html

  
#### Possible fixes ####

  * igt@gem_eio@in-flight-suspend:
    - shard-skl:          [INCOMPLETE][147] -> [PASS][148]
   [147]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-skl6/igt@gem_eio@in-flight-suspend.html
   [148]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-skl10/igt@gem_eio@in-flight-suspend.html

  * igt@gem_exec_fair@basic-none-solo@rcs0:
    - shard-kbl:          [FAIL][149] ([i915#2842]) -> [PASS][150] +2 similar issues
   [149]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-kbl4/igt@gem_exec_fair@basic-none-solo@rcs0.html
   [150]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-kbl6/igt@gem_exec_fair@basic-none-solo@rcs0.html

  * igt@gem_exec_fair@basic-pace@rcs0:
    - shard-kbl:          [FAIL][151] ([i915#2851]) -> [PASS][152]
   [151]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-kbl7/igt@gem_exec_fair@basic-pace@rcs0.html
   [152]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-kbl4/igt@gem_exec_fair@basic-pace@rcs0.html

  * igt@i915_pm_dc@dc6-psr:
    - shard-iclb:         [FAIL][153] ([i915#454]) -> [PASS][154]
   [153]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-iclb4/igt@i915_pm_dc@dc6-psr.html
   [154]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-iclb8/igt@i915_pm_dc@dc6-psr.html

  * igt@kms_big_fb@x-tiled-32bpp-rotate-180:
    - shard-glk:          [DMESG-WARN][155] ([i915#118]) -> [PASS][156]
   [155]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-glk2/igt@kms_big_fb@x-tiled-32bpp-rotate-180.html
   [156]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-glk7/igt@kms_big_fb@x-tiled-32bpp-rotate-180.html

  * igt@kms_cursor_legacy@2x-long-flip-vs-cursor-legacy:
    - shard-glk:          [FAIL][157] ([i915#72]) -> [PASS][158]
   [157]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-glk9/igt@kms_cursor_legacy@2x-long-flip-vs-cursor-legacy.html
   [158]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-glk9/igt@kms_cursor_legacy@2x-long-flip-vs-cursor-legacy.html

  * igt@kms_flip@flip-vs-expired-vblank-interruptible@a-edp1:
    - shard-skl:          [FAIL][159] ([i915#2122]) -> [PASS][160]
   [159]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-skl6/igt@kms_flip@flip-vs-expired-vblank-interruptible@a-edp1.html
   [160]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-skl8/igt@kms_flip@flip-vs-expired-vblank-interruptible@a-edp1.html

  * igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytile:
    - shard-iclb:         [SKIP][161] ([i915#3701]) -> [PASS][162]
   [161]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-iclb2/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytile.html
   [162]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/shard-iclb4/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytile.html

  * igt@kms_hdr@bpc-switch:
    - shard-skl:          [FAIL][163] ([i915#1188]) -> [PASS][164]
   [163]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11014/shard-skl8/igt@kms_hdr@bpc-switch.html
   [164]: https://intel-gfx-ci.01.

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_21874/index.html

[-- Attachment #2: Type: text/html, Size: 33569 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] x86/quirks: Fix logic to apply quirk once
  2021-12-18  6:13 ` [Intel-gfx] " Lucas De Marchi
@ 2021-12-29 23:27   ` Bjorn Helgaas
  -1 siblings, 0 replies; 8+ messages in thread
From: Bjorn Helgaas @ 2021-12-29 23:27 UTC (permalink / raw)
  To: Lucas De Marchi
  Cc: x86, Dave Hansen, Ingo Molnar, Thomas Gleixner, Bjorn Helgaas,
	linux-pci, intel-gfx, Ville Syrjälä,
	Matt Roper

On Fri, Dec 17, 2021 at 10:13:13PM -0800, Lucas De Marchi wrote:
> When using QFLAG_APPLY_ONCE we make sure the quirk is applied only once.

Maybe "called" only once, since you're about to add a distinction
between "called" and "applied"?

I'm not really sure the concept of QFLAG_APPLY_ONCE, QFLAG_APPLIED,
QFLAG_DONE is general purpose enough to be handled at the level of
check_dev_quirk().

We don't have anything like that for the regular PCI fixups (see
pci_do_fixups()).  If a regular fixup needed something like that, it
would use a static local variable.  Maybe that would be simpler
overall here, too, since the quirk would be *always* called for
matching devices, and the "one-time" logic would be encapsulated in
the quirk itself where it's more obvious?

> This is useful when it's enough one device to trigger a certain
> condition or when the resource in each that applies is global to the
> system rather than local to the device.
> 
> However we call the quirk handler based on vendor, class, and device,
> allowing the specific handler to do additional filtering. In that case
> check_dev_quirk() may incorrectly mark the quirk as applied when it's
> not. This is particularly bad for intel_graphics_quirks() that uses
> PCI_ANY_ID and then compares with a long list of devices. This hasn't
> been problematic so far because those devices are integrated GPUs and
> there can only be one in the system.  However as Intel starts to
> release discrete cards, this condition is no longer true and we fail to
> reserve the stolen memory (for the integrated gpu) depending on the bus
> topology: if the traversal finds the discrete card first, for which
> there is no system stolen memory, we will fail to reserve it for the
> integrated card.

s/integrated gpu/integrated GPU/ (to match previous use)

> This fixes the stolen memory reservation for an Alderlake-P system with
> one additional DG2. In this system we have:

DG2?

> 	- 00:01.0 Bridge
> 	  `- 03:00.0 DG2
> 	- Alderklake-P's integrated graphics

s/Alderklake-P/Alderlake-P/

Might be nice to include the integrated GPU PCI address to be parallel
with the bridge and DG2.

> Since we do a depth-first traversal, when we call the handler because of
> DG2 we were marking it as already being applied and never reserving the
> stolen memory for Alderlake-P.
> 
> Here we change the quirk fucntions to return bool in case it applied a
> quirk so we only flag it as applied when that really happened. This only
> makes a difference for quirks using QFLAG_APPLY_ONCE, so all the others
> simply returns true in order to avoid unnecessary complication.

s/fucntions/functions/
s/returns true/return true/

I would consider splitting this into two patches:

  1) Change the quirk signature, make them all return "true", and
  update check_dev_quirk().  This would have no functional impact.

  2) Update intel_graphics_quirks() to return "false" when it doesn't
  reserve the stolen memory.

Then the important change will be in a small patch by itself and will
be easier to understand and revert if that should be necessary.

> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
> ---
>  arch/x86/kernel/early-quirks.c | 75 ++++++++++++++++++++++------------
>  1 file changed, 49 insertions(+), 26 deletions(-)
> 
> diff --git a/arch/x86/kernel/early-quirks.c b/arch/x86/kernel/early-quirks.c
> index 391a4e2b8604..5d235fe2a07a 100644
> --- a/arch/x86/kernel/early-quirks.c
> +++ b/arch/x86/kernel/early-quirks.c
> @@ -28,7 +28,7 @@
>  #include <asm/irq_remapping.h>
>  #include <asm/early_ioremap.h>
>  
> -static void __init fix_hypertransport_config(int num, int slot, int func)
> +static bool __init fix_hypertransport_config(int num, int slot, int func)
>  {
>  	u32 htcfg;
>  	/*
> @@ -51,10 +51,10 @@ static void __init fix_hypertransport_config(int num, int slot, int func)
>  		}
>  	}
>  
> -
> +	return true;
>  }
>  
> -static void __init via_bugs(int  num, int slot, int func)
> +static bool __init via_bugs(int  num, int slot, int func)
>  {
>  #ifdef CONFIG_GART_IOMMU
>  	if ((max_pfn > MAX_DMA32_PFN ||  force_iommu) &&
> @@ -63,8 +63,12 @@ static void __init via_bugs(int  num, int slot, int func)
>  		       "Looks like a VIA chipset. Disabling IOMMU."
>  		       " Override with iommu=allowed\n");
>  		gart_iommu_aperture_disabled = 1;
> +
> +		return true;
>  	}
>  #endif
> +
> +	return false;
>  }
>  
>  #ifdef CONFIG_ACPI
> @@ -77,7 +81,7 @@ static int __init nvidia_hpet_check(struct acpi_table_header *header)
>  #endif /* CONFIG_X86_IO_APIC */
>  #endif /* CONFIG_ACPI */
>  
> -static void __init nvidia_bugs(int num, int slot, int func)
> +static bool __init nvidia_bugs(int num, int slot, int func)
>  {
>  #ifdef CONFIG_ACPI
>  #ifdef CONFIG_X86_IO_APIC
> @@ -86,7 +90,7 @@ static void __init nvidia_bugs(int num, int slot, int func)
>  	 * Nvidia graphics cards with PCI ports on secondary buses.
>  	 */
>  	if (num)
> -		return;
> +		return false;
>  
>  	/*
>  	 * All timer overrides on Nvidia are
> @@ -96,7 +100,7 @@ static void __init nvidia_bugs(int num, int slot, int func)
>  	 * at least allow a command line override.
>  	 */
>  	if (acpi_use_timer_override)
> -		return;
> +		return false;
>  
>  	if (acpi_table_parse(ACPI_SIG_HPET, nvidia_hpet_check)) {
>  		acpi_skip_timer_override = 1;
> @@ -105,11 +109,14 @@ static void __init nvidia_bugs(int num, int slot, int func)
>  		       "timer override.\n");
>  		printk(KERN_INFO "If you got timer trouble "
>  			"try acpi_use_timer_override\n");
> +
> +		return true;
>  	}
>  #endif
>  #endif
>  	/* RED-PEN skip them on mptables too? */
>  
> +	return false;
>  }
>  
>  #if defined(CONFIG_ACPI) && defined(CONFIG_X86_IO_APIC)
> @@ -131,13 +138,13 @@ static u32 __init ati_ixp4x0_rev(int num, int slot, int func)
>  	return d;
>  }
>  
> -static void __init ati_bugs(int num, int slot, int func)
> +static bool __init ati_bugs(int num, int slot, int func)
>  {
>  	u32 d;
>  	u8  b;
>  
>  	if (acpi_use_timer_override)
> -		return;
> +		return true;
>  
>  	d = ati_ixp4x0_rev(num, slot, func);
>  	if (d  < 0x82)
> @@ -155,6 +162,8 @@ static void __init ati_bugs(int num, int slot, int func)
>  		printk(KERN_INFO "If you got timer trouble "
>  		       "try acpi_use_timer_override\n");
>  	}
> +
> +	return true;
>  }
>  
>  static u32 __init ati_sbx00_rev(int num, int slot, int func)
> @@ -167,7 +176,7 @@ static u32 __init ati_sbx00_rev(int num, int slot, int func)
>  	return d;
>  }
>  
> -static void __init ati_bugs_contd(int num, int slot, int func)
> +static bool __init ati_bugs_contd(int num, int slot, int func)
>  {
>  	u32 d, rev;
>  
> @@ -181,10 +190,10 @@ static void __init ati_bugs_contd(int num, int slot, int func)
>  	 * SB800: revisions 0x40, 0x41, ...
>  	 */
>  	if (rev >= 0x39)
> -		return;
> +		return true;
>  
>  	if (acpi_use_timer_override)
> -		return;
> +		return true;
>  
>  	/* check for IRQ0 interrupt swap */
>  	d = read_pci_config(num, slot, func, 0x64);
> @@ -197,18 +206,22 @@ static void __init ati_bugs_contd(int num, int slot, int func)
>  		printk(KERN_INFO "If you got timer trouble "
>  		       "try acpi_use_timer_override\n");
>  	}
> +
> +	return true;
>  }
>  #else
> -static void __init ati_bugs(int num, int slot, int func)
> +static bool __init ati_bugs(int num, int slot, int func)
>  {
> +	return true;
>  }
>  
> -static void __init ati_bugs_contd(int num, int slot, int func)
> +static bool __init ati_bugs_contd(int num, int slot, int func)
>  {
> +	return true;
>  }
>  #endif
>  
> -static void __init intel_remapping_check(int num, int slot, int func)
> +static bool __init intel_remapping_check(int num, int slot, int func)
>  {
>  	u8 revision;
>  	u16 device;
> @@ -226,6 +239,8 @@ static void __init intel_remapping_check(int num, int slot, int func)
>  		set_irq_remapping_broken();
>  	else if (device == 0x3405 && revision == 0x22)
>  		set_irq_remapping_broken();
> +
> +	return true;
>  }
>  
>  /*
> @@ -585,7 +600,7 @@ intel_graphics_stolen(int num, int slot, int func,
>  	e820__update_table(e820_table);
>  }
>  
> -static void __init intel_graphics_quirks(int num, int slot, int func)
> +static bool __init intel_graphics_quirks(int num, int slot, int func)
>  {
>  	const struct intel_early_ops *early_ops;
>  	u16 device;
> @@ -603,16 +618,20 @@ static void __init intel_graphics_quirks(int num, int slot, int func)
>  
>  		intel_graphics_stolen(num, slot, func, early_ops);
>  
> -		return;
> +		return true;
>  	}
> +
> +	return false;
>  }
>  
> -static void __init force_disable_hpet(int num, int slot, int func)
> +static bool __init force_disable_hpet(int num, int slot, int func)
>  {
>  #ifdef CONFIG_HPET_TIMER
>  	boot_hpet_disable = true;
>  	pr_info("x86/hpet: Will disable the HPET for this platform because it's not reliable\n");
>  #endif
> +
> +	return true;
>  }
>  
>  #define BCM4331_MMIO_SIZE	16384
> @@ -620,7 +639,7 @@ static void __init force_disable_hpet(int num, int slot, int func)
>  #define bcma_aread32(reg)	ioread32(mmio + 1 * BCMA_CORE_SIZE + reg)
>  #define bcma_awrite32(reg, val)	iowrite32(val, mmio + 1 * BCMA_CORE_SIZE + reg)
>  
> -static void __init apple_airport_reset(int bus, int slot, int func)
> +static bool __init apple_airport_reset(int bus, int slot, int func)
>  {
>  	void __iomem *mmio;
>  	u16 pmcsr;
> @@ -628,7 +647,7 @@ static void __init apple_airport_reset(int bus, int slot, int func)
>  	int i;
>  
>  	if (!x86_apple_machine)
> -		return;
> +		return true;
>  
>  	/* Card may have been put into PCI_D3hot by grub quirk */
>  	pmcsr = read_pci_config_16(bus, slot, func, BCM4331_PM_CAP + PCI_PM_CTRL);
> @@ -642,7 +661,7 @@ static void __init apple_airport_reset(int bus, int slot, int func)
>  		if ((pmcsr & PCI_PM_CTRL_STATE_MASK) != PCI_D0) {
>  			pr_err("pci 0000:%02x:%02x.%d: Cannot power up Apple AirPort card\n",
>  			       bus, slot, func);
> -			return;
> +			return true;
>  		}
>  	}
>  
> @@ -654,7 +673,7 @@ static void __init apple_airport_reset(int bus, int slot, int func)
>  	if (!mmio) {
>  		pr_err("pci 0000:%02x:%02x.%d: Cannot iomap Apple AirPort card\n",
>  		       bus, slot, func);
> -		return;
> +		return true;
>  	}
>  
>  	pr_info("Resetting Apple AirPort card (left enabled by EFI)\n");
> @@ -671,6 +690,8 @@ static void __init apple_airport_reset(int bus, int slot, int func)
>  	udelay(10);
>  
>  	early_iounmap(mmio, BCM4331_MMIO_SIZE);
> +
> +	return true;
>  }
>  
>  #define QFLAG_APPLY_ONCE 	0x1
> @@ -682,7 +703,7 @@ struct chipset {
>  	u32 class;
>  	u32 class_mask;
>  	u32 flags;
> -	void (*f)(int num, int slot, int func);
> +	bool (*f)(int num, int slot, int func);
>  };
>  
>  static struct chipset early_qrk[] __initdata = {
> @@ -757,11 +778,13 @@ static int __init check_dev_quirk(int num, int slot, int func)
>  			(early_qrk[i].device == device)) &&
>  			(!((early_qrk[i].class ^ class) &
>  			    early_qrk[i].class_mask))) {
> -				if ((early_qrk[i].flags &
> -				     QFLAG_DONE) != QFLAG_DONE)
> -					early_qrk[i].f(num, slot, func);
> -				early_qrk[i].flags |= QFLAG_APPLIED;
> +			if ((early_qrk[i].flags & QFLAG_DONE) != QFLAG_DONE) {
> +				bool applied = early_qrk[i].f(num, slot, func);
> +
> +				if (applied)
> +					early_qrk[i].flags |= QFLAG_APPLIED;
>  			}
> +		}
>  	}
>  
>  	type = read_pci_config_byte(num, slot, func,
> -- 
> 2.34.1
> 

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Intel-gfx] [PATCH] x86/quirks: Fix logic to apply quirk once
@ 2021-12-29 23:27   ` Bjorn Helgaas
  0 siblings, 0 replies; 8+ messages in thread
From: Bjorn Helgaas @ 2021-12-29 23:27 UTC (permalink / raw)
  To: Lucas De Marchi
  Cc: Dave Hansen, linux-pci, intel-gfx, x86, Ingo Molnar,
	Bjorn Helgaas, Thomas Gleixner

On Fri, Dec 17, 2021 at 10:13:13PM -0800, Lucas De Marchi wrote:
> When using QFLAG_APPLY_ONCE we make sure the quirk is applied only once.

Maybe "called" only once, since you're about to add a distinction
between "called" and "applied"?

I'm not really sure the concept of QFLAG_APPLY_ONCE, QFLAG_APPLIED,
QFLAG_DONE is general purpose enough to be handled at the level of
check_dev_quirk().

We don't have anything like that for the regular PCI fixups (see
pci_do_fixups()).  If a regular fixup needed something like that, it
would use a static local variable.  Maybe that would be simpler
overall here, too, since the quirk would be *always* called for
matching devices, and the "one-time" logic would be encapsulated in
the quirk itself where it's more obvious?

> This is useful when it's enough one device to trigger a certain
> condition or when the resource in each that applies is global to the
> system rather than local to the device.
> 
> However we call the quirk handler based on vendor, class, and device,
> allowing the specific handler to do additional filtering. In that case
> check_dev_quirk() may incorrectly mark the quirk as applied when it's
> not. This is particularly bad for intel_graphics_quirks() that uses
> PCI_ANY_ID and then compares with a long list of devices. This hasn't
> been problematic so far because those devices are integrated GPUs and
> there can only be one in the system.  However as Intel starts to
> release discrete cards, this condition is no longer true and we fail to
> reserve the stolen memory (for the integrated gpu) depending on the bus
> topology: if the traversal finds the discrete card first, for which
> there is no system stolen memory, we will fail to reserve it for the
> integrated card.

s/integrated gpu/integrated GPU/ (to match previous use)

> This fixes the stolen memory reservation for an Alderlake-P system with
> one additional DG2. In this system we have:

DG2?

> 	- 00:01.0 Bridge
> 	  `- 03:00.0 DG2
> 	- Alderklake-P's integrated graphics

s/Alderklake-P/Alderlake-P/

Might be nice to include the integrated GPU PCI address to be parallel
with the bridge and DG2.

> Since we do a depth-first traversal, when we call the handler because of
> DG2 we were marking it as already being applied and never reserving the
> stolen memory for Alderlake-P.
> 
> Here we change the quirk fucntions to return bool in case it applied a
> quirk so we only flag it as applied when that really happened. This only
> makes a difference for quirks using QFLAG_APPLY_ONCE, so all the others
> simply returns true in order to avoid unnecessary complication.

s/fucntions/functions/
s/returns true/return true/

I would consider splitting this into two patches:

  1) Change the quirk signature, make them all return "true", and
  update check_dev_quirk().  This would have no functional impact.

  2) Update intel_graphics_quirks() to return "false" when it doesn't
  reserve the stolen memory.

Then the important change will be in a small patch by itself and will
be easier to understand and revert if that should be necessary.

> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
> ---
>  arch/x86/kernel/early-quirks.c | 75 ++++++++++++++++++++++------------
>  1 file changed, 49 insertions(+), 26 deletions(-)
> 
> diff --git a/arch/x86/kernel/early-quirks.c b/arch/x86/kernel/early-quirks.c
> index 391a4e2b8604..5d235fe2a07a 100644
> --- a/arch/x86/kernel/early-quirks.c
> +++ b/arch/x86/kernel/early-quirks.c
> @@ -28,7 +28,7 @@
>  #include <asm/irq_remapping.h>
>  #include <asm/early_ioremap.h>
>  
> -static void __init fix_hypertransport_config(int num, int slot, int func)
> +static bool __init fix_hypertransport_config(int num, int slot, int func)
>  {
>  	u32 htcfg;
>  	/*
> @@ -51,10 +51,10 @@ static void __init fix_hypertransport_config(int num, int slot, int func)
>  		}
>  	}
>  
> -
> +	return true;
>  }
>  
> -static void __init via_bugs(int  num, int slot, int func)
> +static bool __init via_bugs(int  num, int slot, int func)
>  {
>  #ifdef CONFIG_GART_IOMMU
>  	if ((max_pfn > MAX_DMA32_PFN ||  force_iommu) &&
> @@ -63,8 +63,12 @@ static void __init via_bugs(int  num, int slot, int func)
>  		       "Looks like a VIA chipset. Disabling IOMMU."
>  		       " Override with iommu=allowed\n");
>  		gart_iommu_aperture_disabled = 1;
> +
> +		return true;
>  	}
>  #endif
> +
> +	return false;
>  }
>  
>  #ifdef CONFIG_ACPI
> @@ -77,7 +81,7 @@ static int __init nvidia_hpet_check(struct acpi_table_header *header)
>  #endif /* CONFIG_X86_IO_APIC */
>  #endif /* CONFIG_ACPI */
>  
> -static void __init nvidia_bugs(int num, int slot, int func)
> +static bool __init nvidia_bugs(int num, int slot, int func)
>  {
>  #ifdef CONFIG_ACPI
>  #ifdef CONFIG_X86_IO_APIC
> @@ -86,7 +90,7 @@ static void __init nvidia_bugs(int num, int slot, int func)
>  	 * Nvidia graphics cards with PCI ports on secondary buses.
>  	 */
>  	if (num)
> -		return;
> +		return false;
>  
>  	/*
>  	 * All timer overrides on Nvidia are
> @@ -96,7 +100,7 @@ static void __init nvidia_bugs(int num, int slot, int func)
>  	 * at least allow a command line override.
>  	 */
>  	if (acpi_use_timer_override)
> -		return;
> +		return false;
>  
>  	if (acpi_table_parse(ACPI_SIG_HPET, nvidia_hpet_check)) {
>  		acpi_skip_timer_override = 1;
> @@ -105,11 +109,14 @@ static void __init nvidia_bugs(int num, int slot, int func)
>  		       "timer override.\n");
>  		printk(KERN_INFO "If you got timer trouble "
>  			"try acpi_use_timer_override\n");
> +
> +		return true;
>  	}
>  #endif
>  #endif
>  	/* RED-PEN skip them on mptables too? */
>  
> +	return false;
>  }
>  
>  #if defined(CONFIG_ACPI) && defined(CONFIG_X86_IO_APIC)
> @@ -131,13 +138,13 @@ static u32 __init ati_ixp4x0_rev(int num, int slot, int func)
>  	return d;
>  }
>  
> -static void __init ati_bugs(int num, int slot, int func)
> +static bool __init ati_bugs(int num, int slot, int func)
>  {
>  	u32 d;
>  	u8  b;
>  
>  	if (acpi_use_timer_override)
> -		return;
> +		return true;
>  
>  	d = ati_ixp4x0_rev(num, slot, func);
>  	if (d  < 0x82)
> @@ -155,6 +162,8 @@ static void __init ati_bugs(int num, int slot, int func)
>  		printk(KERN_INFO "If you got timer trouble "
>  		       "try acpi_use_timer_override\n");
>  	}
> +
> +	return true;
>  }
>  
>  static u32 __init ati_sbx00_rev(int num, int slot, int func)
> @@ -167,7 +176,7 @@ static u32 __init ati_sbx00_rev(int num, int slot, int func)
>  	return d;
>  }
>  
> -static void __init ati_bugs_contd(int num, int slot, int func)
> +static bool __init ati_bugs_contd(int num, int slot, int func)
>  {
>  	u32 d, rev;
>  
> @@ -181,10 +190,10 @@ static void __init ati_bugs_contd(int num, int slot, int func)
>  	 * SB800: revisions 0x40, 0x41, ...
>  	 */
>  	if (rev >= 0x39)
> -		return;
> +		return true;
>  
>  	if (acpi_use_timer_override)
> -		return;
> +		return true;
>  
>  	/* check for IRQ0 interrupt swap */
>  	d = read_pci_config(num, slot, func, 0x64);
> @@ -197,18 +206,22 @@ static void __init ati_bugs_contd(int num, int slot, int func)
>  		printk(KERN_INFO "If you got timer trouble "
>  		       "try acpi_use_timer_override\n");
>  	}
> +
> +	return true;
>  }
>  #else
> -static void __init ati_bugs(int num, int slot, int func)
> +static bool __init ati_bugs(int num, int slot, int func)
>  {
> +	return true;
>  }
>  
> -static void __init ati_bugs_contd(int num, int slot, int func)
> +static bool __init ati_bugs_contd(int num, int slot, int func)
>  {
> +	return true;
>  }
>  #endif
>  
> -static void __init intel_remapping_check(int num, int slot, int func)
> +static bool __init intel_remapping_check(int num, int slot, int func)
>  {
>  	u8 revision;
>  	u16 device;
> @@ -226,6 +239,8 @@ static void __init intel_remapping_check(int num, int slot, int func)
>  		set_irq_remapping_broken();
>  	else if (device == 0x3405 && revision == 0x22)
>  		set_irq_remapping_broken();
> +
> +	return true;
>  }
>  
>  /*
> @@ -585,7 +600,7 @@ intel_graphics_stolen(int num, int slot, int func,
>  	e820__update_table(e820_table);
>  }
>  
> -static void __init intel_graphics_quirks(int num, int slot, int func)
> +static bool __init intel_graphics_quirks(int num, int slot, int func)
>  {
>  	const struct intel_early_ops *early_ops;
>  	u16 device;
> @@ -603,16 +618,20 @@ static void __init intel_graphics_quirks(int num, int slot, int func)
>  
>  		intel_graphics_stolen(num, slot, func, early_ops);
>  
> -		return;
> +		return true;
>  	}
> +
> +	return false;
>  }
>  
> -static void __init force_disable_hpet(int num, int slot, int func)
> +static bool __init force_disable_hpet(int num, int slot, int func)
>  {
>  #ifdef CONFIG_HPET_TIMER
>  	boot_hpet_disable = true;
>  	pr_info("x86/hpet: Will disable the HPET for this platform because it's not reliable\n");
>  #endif
> +
> +	return true;
>  }
>  
>  #define BCM4331_MMIO_SIZE	16384
> @@ -620,7 +639,7 @@ static void __init force_disable_hpet(int num, int slot, int func)
>  #define bcma_aread32(reg)	ioread32(mmio + 1 * BCMA_CORE_SIZE + reg)
>  #define bcma_awrite32(reg, val)	iowrite32(val, mmio + 1 * BCMA_CORE_SIZE + reg)
>  
> -static void __init apple_airport_reset(int bus, int slot, int func)
> +static bool __init apple_airport_reset(int bus, int slot, int func)
>  {
>  	void __iomem *mmio;
>  	u16 pmcsr;
> @@ -628,7 +647,7 @@ static void __init apple_airport_reset(int bus, int slot, int func)
>  	int i;
>  
>  	if (!x86_apple_machine)
> -		return;
> +		return true;
>  
>  	/* Card may have been put into PCI_D3hot by grub quirk */
>  	pmcsr = read_pci_config_16(bus, slot, func, BCM4331_PM_CAP + PCI_PM_CTRL);
> @@ -642,7 +661,7 @@ static void __init apple_airport_reset(int bus, int slot, int func)
>  		if ((pmcsr & PCI_PM_CTRL_STATE_MASK) != PCI_D0) {
>  			pr_err("pci 0000:%02x:%02x.%d: Cannot power up Apple AirPort card\n",
>  			       bus, slot, func);
> -			return;
> +			return true;
>  		}
>  	}
>  
> @@ -654,7 +673,7 @@ static void __init apple_airport_reset(int bus, int slot, int func)
>  	if (!mmio) {
>  		pr_err("pci 0000:%02x:%02x.%d: Cannot iomap Apple AirPort card\n",
>  		       bus, slot, func);
> -		return;
> +		return true;
>  	}
>  
>  	pr_info("Resetting Apple AirPort card (left enabled by EFI)\n");
> @@ -671,6 +690,8 @@ static void __init apple_airport_reset(int bus, int slot, int func)
>  	udelay(10);
>  
>  	early_iounmap(mmio, BCM4331_MMIO_SIZE);
> +
> +	return true;
>  }
>  
>  #define QFLAG_APPLY_ONCE 	0x1
> @@ -682,7 +703,7 @@ struct chipset {
>  	u32 class;
>  	u32 class_mask;
>  	u32 flags;
> -	void (*f)(int num, int slot, int func);
> +	bool (*f)(int num, int slot, int func);
>  };
>  
>  static struct chipset early_qrk[] __initdata = {
> @@ -757,11 +778,13 @@ static int __init check_dev_quirk(int num, int slot, int func)
>  			(early_qrk[i].device == device)) &&
>  			(!((early_qrk[i].class ^ class) &
>  			    early_qrk[i].class_mask))) {
> -				if ((early_qrk[i].flags &
> -				     QFLAG_DONE) != QFLAG_DONE)
> -					early_qrk[i].f(num, slot, func);
> -				early_qrk[i].flags |= QFLAG_APPLIED;
> +			if ((early_qrk[i].flags & QFLAG_DONE) != QFLAG_DONE) {
> +				bool applied = early_qrk[i].f(num, slot, func);
> +
> +				if (applied)
> +					early_qrk[i].flags |= QFLAG_APPLIED;
>  			}
> +		}
>  	}
>  
>  	type = read_pci_config_byte(num, slot, func,
> -- 
> 2.34.1
> 

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] x86/quirks: Fix logic to apply quirk once
  2021-12-29 23:27   ` [Intel-gfx] " Bjorn Helgaas
@ 2021-12-30  7:26     ` Lucas De Marchi
  -1 siblings, 0 replies; 8+ messages in thread
From: Lucas De Marchi @ 2021-12-30  7:26 UTC (permalink / raw)
  To: Bjorn Helgaas
  Cc: x86, Dave Hansen, Ingo Molnar, Thomas Gleixner, Bjorn Helgaas,
	linux-pci, intel-gfx, Ville Syrjälä,
	Matt Roper

On Wed, Dec 29, 2021 at 05:27:52PM -0600, Bjorn Helgaas wrote:
>On Fri, Dec 17, 2021 at 10:13:13PM -0800, Lucas De Marchi wrote:
>> When using QFLAG_APPLY_ONCE we make sure the quirk is applied only once.
>
>Maybe "called" only once, since you're about to add a distinction
>between "called" and "applied"?

ok... yeah, the current issue is that the logic here considers
"called" as "applied", and it's not true since the called function may
do additional checks

>
>I'm not really sure the concept of QFLAG_APPLY_ONCE, QFLAG_APPLIED,
>QFLAG_DONE is general purpose enough to be handled at the level of
>check_dev_quirk().
>
>We don't have anything like that for the regular PCI fixups (see
>pci_do_fixups()).  If a regular fixup needed something like that, it
>would use a static local variable.  Maybe that would be simpler
>overall here, too, since the quirk would be *always* called for
>matching devices, and the "one-time" logic would be encapsulated in
>the quirk itself where it's more obvious?

so would that mean an alternative solution, removing all the logic using
flags and just embed it in the few quirks that make use of it?

yeah, I guess that would work too. Not sure what solution is preferred
though.

>> This is useful when it's enough one device to trigger a certain
>> condition or when the resource in each that applies is global to the
>> system rather than local to the device.
>>
>> However we call the quirk handler based on vendor, class, and device,
>> allowing the specific handler to do additional filtering. In that case
>> check_dev_quirk() may incorrectly mark the quirk as applied when it's
>> not. This is particularly bad for intel_graphics_quirks() that uses
>> PCI_ANY_ID and then compares with a long list of devices. This hasn't
>> been problematic so far because those devices are integrated GPUs and
>> there can only be one in the system.  However as Intel starts to
>> release discrete cards, this condition is no longer true and we fail to
>> reserve the stolen memory (for the integrated gpu) depending on the bus
>> topology: if the traversal finds the discrete card first, for which
>> there is no system stolen memory, we will fail to reserve it for the
>> integrated card.
>
>s/integrated gpu/integrated GPU/ (to match previous use)
>
>> This fixes the stolen memory reservation for an Alderlake-P system with
>> one additional DG2. In this system we have:
>
>DG2?

that is its name, not an abbreviation. It's one of Intel's discrete
graphics cards. See for example 9e22cfc5e9b9 ("drm/i915/dg2: add DG2 platform info")

maybe reword this as "one additional Intel GPU, DG2"?

>
>> 	- 00:01.0 Bridge
>> 	  `- 03:00.0 DG2
>> 	- Alderklake-P's integrated graphics
>
>s/Alderklake-P/Alderlake-P/
>
>Might be nice to include the integrated GPU PCI address to be parallel
>with the bridge and DG2.

ok

>
>> Since we do a depth-first traversal, when we call the handler because of
>> DG2 we were marking it as already being applied and never reserving the
>> stolen memory for Alderlake-P.
>>
>> Here we change the quirk fucntions to return bool in case it applied a
>> quirk so we only flag it as applied when that really happened. This only
>> makes a difference for quirks using QFLAG_APPLY_ONCE, so all the others
>> simply returns true in order to avoid unnecessary complication.
>
>s/fucntions/functions/
>s/returns true/return true/
>
>I would consider splitting this into two patches:
>
>  1) Change the quirk signature, make them all return "true", and
>  update check_dev_quirk().  This would have no functional impact.
>
>  2) Update intel_graphics_quirks() to return "false" when it doesn't
>  reserve the stolen memory.
>
>Then the important change will be in a small patch by itself and will
>be easier to understand and revert if that should be necessary.

makes sense. I will take a look on what the other alternative you gave
looks like, too.

thanks for the review

Lucas De Marchi

>
>> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
>> ---
>>  arch/x86/kernel/early-quirks.c | 75 ++++++++++++++++++++++------------
>>  1 file changed, 49 insertions(+), 26 deletions(-)
>>
>> diff --git a/arch/x86/kernel/early-quirks.c b/arch/x86/kernel/early-quirks.c
>> index 391a4e2b8604..5d235fe2a07a 100644
>> --- a/arch/x86/kernel/early-quirks.c
>> +++ b/arch/x86/kernel/early-quirks.c
>> @@ -28,7 +28,7 @@
>>  #include <asm/irq_remapping.h>
>>  #include <asm/early_ioremap.h>
>>
>> -static void __init fix_hypertransport_config(int num, int slot, int func)
>> +static bool __init fix_hypertransport_config(int num, int slot, int func)
>>  {
>>  	u32 htcfg;
>>  	/*
>> @@ -51,10 +51,10 @@ static void __init fix_hypertransport_config(int num, int slot, int func)
>>  		}
>>  	}
>>
>> -
>> +	return true;
>>  }
>>
>> -static void __init via_bugs(int  num, int slot, int func)
>> +static bool __init via_bugs(int  num, int slot, int func)
>>  {
>>  #ifdef CONFIG_GART_IOMMU
>>  	if ((max_pfn > MAX_DMA32_PFN ||  force_iommu) &&
>> @@ -63,8 +63,12 @@ static void __init via_bugs(int  num, int slot, int func)
>>  		       "Looks like a VIA chipset. Disabling IOMMU."
>>  		       " Override with iommu=allowed\n");
>>  		gart_iommu_aperture_disabled = 1;
>> +
>> +		return true;
>>  	}
>>  #endif
>> +
>> +	return false;
>>  }
>>
>>  #ifdef CONFIG_ACPI
>> @@ -77,7 +81,7 @@ static int __init nvidia_hpet_check(struct acpi_table_header *header)
>>  #endif /* CONFIG_X86_IO_APIC */
>>  #endif /* CONFIG_ACPI */
>>
>> -static void __init nvidia_bugs(int num, int slot, int func)
>> +static bool __init nvidia_bugs(int num, int slot, int func)
>>  {
>>  #ifdef CONFIG_ACPI
>>  #ifdef CONFIG_X86_IO_APIC
>> @@ -86,7 +90,7 @@ static void __init nvidia_bugs(int num, int slot, int func)
>>  	 * Nvidia graphics cards with PCI ports on secondary buses.
>>  	 */
>>  	if (num)
>> -		return;
>> +		return false;
>>
>>  	/*
>>  	 * All timer overrides on Nvidia are
>> @@ -96,7 +100,7 @@ static void __init nvidia_bugs(int num, int slot, int func)
>>  	 * at least allow a command line override.
>>  	 */
>>  	if (acpi_use_timer_override)
>> -		return;
>> +		return false;
>>
>>  	if (acpi_table_parse(ACPI_SIG_HPET, nvidia_hpet_check)) {
>>  		acpi_skip_timer_override = 1;
>> @@ -105,11 +109,14 @@ static void __init nvidia_bugs(int num, int slot, int func)
>>  		       "timer override.\n");
>>  		printk(KERN_INFO "If you got timer trouble "
>>  			"try acpi_use_timer_override\n");
>> +
>> +		return true;
>>  	}
>>  #endif
>>  #endif
>>  	/* RED-PEN skip them on mptables too? */
>>
>> +	return false;
>>  }
>>
>>  #if defined(CONFIG_ACPI) && defined(CONFIG_X86_IO_APIC)
>> @@ -131,13 +138,13 @@ static u32 __init ati_ixp4x0_rev(int num, int slot, int func)
>>  	return d;
>>  }
>>
>> -static void __init ati_bugs(int num, int slot, int func)
>> +static bool __init ati_bugs(int num, int slot, int func)
>>  {
>>  	u32 d;
>>  	u8  b;
>>
>>  	if (acpi_use_timer_override)
>> -		return;
>> +		return true;
>>
>>  	d = ati_ixp4x0_rev(num, slot, func);
>>  	if (d  < 0x82)
>> @@ -155,6 +162,8 @@ static void __init ati_bugs(int num, int slot, int func)
>>  		printk(KERN_INFO "If you got timer trouble "
>>  		       "try acpi_use_timer_override\n");
>>  	}
>> +
>> +	return true;
>>  }
>>
>>  static u32 __init ati_sbx00_rev(int num, int slot, int func)
>> @@ -167,7 +176,7 @@ static u32 __init ati_sbx00_rev(int num, int slot, int func)
>>  	return d;
>>  }
>>
>> -static void __init ati_bugs_contd(int num, int slot, int func)
>> +static bool __init ati_bugs_contd(int num, int slot, int func)
>>  {
>>  	u32 d, rev;
>>
>> @@ -181,10 +190,10 @@ static void __init ati_bugs_contd(int num, int slot, int func)
>>  	 * SB800: revisions 0x40, 0x41, ...
>>  	 */
>>  	if (rev >= 0x39)
>> -		return;
>> +		return true;
>>
>>  	if (acpi_use_timer_override)
>> -		return;
>> +		return true;
>>
>>  	/* check for IRQ0 interrupt swap */
>>  	d = read_pci_config(num, slot, func, 0x64);
>> @@ -197,18 +206,22 @@ static void __init ati_bugs_contd(int num, int slot, int func)
>>  		printk(KERN_INFO "If you got timer trouble "
>>  		       "try acpi_use_timer_override\n");
>>  	}
>> +
>> +	return true;
>>  }
>>  #else
>> -static void __init ati_bugs(int num, int slot, int func)
>> +static bool __init ati_bugs(int num, int slot, int func)
>>  {
>> +	return true;
>>  }
>>
>> -static void __init ati_bugs_contd(int num, int slot, int func)
>> +static bool __init ati_bugs_contd(int num, int slot, int func)
>>  {
>> +	return true;
>>  }
>>  #endif
>>
>> -static void __init intel_remapping_check(int num, int slot, int func)
>> +static bool __init intel_remapping_check(int num, int slot, int func)
>>  {
>>  	u8 revision;
>>  	u16 device;
>> @@ -226,6 +239,8 @@ static void __init intel_remapping_check(int num, int slot, int func)
>>  		set_irq_remapping_broken();
>>  	else if (device == 0x3405 && revision == 0x22)
>>  		set_irq_remapping_broken();
>> +
>> +	return true;
>>  }
>>
>>  /*
>> @@ -585,7 +600,7 @@ intel_graphics_stolen(int num, int slot, int func,
>>  	e820__update_table(e820_table);
>>  }
>>
>> -static void __init intel_graphics_quirks(int num, int slot, int func)
>> +static bool __init intel_graphics_quirks(int num, int slot, int func)
>>  {
>>  	const struct intel_early_ops *early_ops;
>>  	u16 device;
>> @@ -603,16 +618,20 @@ static void __init intel_graphics_quirks(int num, int slot, int func)
>>
>>  		intel_graphics_stolen(num, slot, func, early_ops);
>>
>> -		return;
>> +		return true;
>>  	}
>> +
>> +	return false;
>>  }
>>
>> -static void __init force_disable_hpet(int num, int slot, int func)
>> +static bool __init force_disable_hpet(int num, int slot, int func)
>>  {
>>  #ifdef CONFIG_HPET_TIMER
>>  	boot_hpet_disable = true;
>>  	pr_info("x86/hpet: Will disable the HPET for this platform because it's not reliable\n");
>>  #endif
>> +
>> +	return true;
>>  }
>>
>>  #define BCM4331_MMIO_SIZE	16384
>> @@ -620,7 +639,7 @@ static void __init force_disable_hpet(int num, int slot, int func)
>>  #define bcma_aread32(reg)	ioread32(mmio + 1 * BCMA_CORE_SIZE + reg)
>>  #define bcma_awrite32(reg, val)	iowrite32(val, mmio + 1 * BCMA_CORE_SIZE + reg)
>>
>> -static void __init apple_airport_reset(int bus, int slot, int func)
>> +static bool __init apple_airport_reset(int bus, int slot, int func)
>>  {
>>  	void __iomem *mmio;
>>  	u16 pmcsr;
>> @@ -628,7 +647,7 @@ static void __init apple_airport_reset(int bus, int slot, int func)
>>  	int i;
>>
>>  	if (!x86_apple_machine)
>> -		return;
>> +		return true;
>>
>>  	/* Card may have been put into PCI_D3hot by grub quirk */
>>  	pmcsr = read_pci_config_16(bus, slot, func, BCM4331_PM_CAP + PCI_PM_CTRL);
>> @@ -642,7 +661,7 @@ static void __init apple_airport_reset(int bus, int slot, int func)
>>  		if ((pmcsr & PCI_PM_CTRL_STATE_MASK) != PCI_D0) {
>>  			pr_err("pci 0000:%02x:%02x.%d: Cannot power up Apple AirPort card\n",
>>  			       bus, slot, func);
>> -			return;
>> +			return true;
>>  		}
>>  	}
>>
>> @@ -654,7 +673,7 @@ static void __init apple_airport_reset(int bus, int slot, int func)
>>  	if (!mmio) {
>>  		pr_err("pci 0000:%02x:%02x.%d: Cannot iomap Apple AirPort card\n",
>>  		       bus, slot, func);
>> -		return;
>> +		return true;
>>  	}
>>
>>  	pr_info("Resetting Apple AirPort card (left enabled by EFI)\n");
>> @@ -671,6 +690,8 @@ static void __init apple_airport_reset(int bus, int slot, int func)
>>  	udelay(10);
>>
>>  	early_iounmap(mmio, BCM4331_MMIO_SIZE);
>> +
>> +	return true;
>>  }
>>
>>  #define QFLAG_APPLY_ONCE 	0x1
>> @@ -682,7 +703,7 @@ struct chipset {
>>  	u32 class;
>>  	u32 class_mask;
>>  	u32 flags;
>> -	void (*f)(int num, int slot, int func);
>> +	bool (*f)(int num, int slot, int func);
>>  };
>>
>>  static struct chipset early_qrk[] __initdata = {
>> @@ -757,11 +778,13 @@ static int __init check_dev_quirk(int num, int slot, int func)
>>  			(early_qrk[i].device == device)) &&
>>  			(!((early_qrk[i].class ^ class) &
>>  			    early_qrk[i].class_mask))) {
>> -				if ((early_qrk[i].flags &
>> -				     QFLAG_DONE) != QFLAG_DONE)
>> -					early_qrk[i].f(num, slot, func);
>> -				early_qrk[i].flags |= QFLAG_APPLIED;
>> +			if ((early_qrk[i].flags & QFLAG_DONE) != QFLAG_DONE) {
>> +				bool applied = early_qrk[i].f(num, slot, func);
>> +
>> +				if (applied)
>> +					early_qrk[i].flags |= QFLAG_APPLIED;
>>  			}
>> +		}
>>  	}
>>
>>  	type = read_pci_config_byte(num, slot, func,
>> --
>> 2.34.1
>>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Intel-gfx] [PATCH] x86/quirks: Fix logic to apply quirk once
@ 2021-12-30  7:26     ` Lucas De Marchi
  0 siblings, 0 replies; 8+ messages in thread
From: Lucas De Marchi @ 2021-12-30  7:26 UTC (permalink / raw)
  To: Bjorn Helgaas
  Cc: Dave Hansen, linux-pci, intel-gfx, x86, Ingo Molnar,
	Bjorn Helgaas, Thomas Gleixner

On Wed, Dec 29, 2021 at 05:27:52PM -0600, Bjorn Helgaas wrote:
>On Fri, Dec 17, 2021 at 10:13:13PM -0800, Lucas De Marchi wrote:
>> When using QFLAG_APPLY_ONCE we make sure the quirk is applied only once.
>
>Maybe "called" only once, since you're about to add a distinction
>between "called" and "applied"?

ok... yeah, the current issue is that the logic here considers
"called" as "applied", and it's not true since the called function may
do additional checks

>
>I'm not really sure the concept of QFLAG_APPLY_ONCE, QFLAG_APPLIED,
>QFLAG_DONE is general purpose enough to be handled at the level of
>check_dev_quirk().
>
>We don't have anything like that for the regular PCI fixups (see
>pci_do_fixups()).  If a regular fixup needed something like that, it
>would use a static local variable.  Maybe that would be simpler
>overall here, too, since the quirk would be *always* called for
>matching devices, and the "one-time" logic would be encapsulated in
>the quirk itself where it's more obvious?

so would that mean an alternative solution, removing all the logic using
flags and just embed it in the few quirks that make use of it?

yeah, I guess that would work too. Not sure what solution is preferred
though.

>> This is useful when it's enough one device to trigger a certain
>> condition or when the resource in each that applies is global to the
>> system rather than local to the device.
>>
>> However we call the quirk handler based on vendor, class, and device,
>> allowing the specific handler to do additional filtering. In that case
>> check_dev_quirk() may incorrectly mark the quirk as applied when it's
>> not. This is particularly bad for intel_graphics_quirks() that uses
>> PCI_ANY_ID and then compares with a long list of devices. This hasn't
>> been problematic so far because those devices are integrated GPUs and
>> there can only be one in the system.  However as Intel starts to
>> release discrete cards, this condition is no longer true and we fail to
>> reserve the stolen memory (for the integrated gpu) depending on the bus
>> topology: if the traversal finds the discrete card first, for which
>> there is no system stolen memory, we will fail to reserve it for the
>> integrated card.
>
>s/integrated gpu/integrated GPU/ (to match previous use)
>
>> This fixes the stolen memory reservation for an Alderlake-P system with
>> one additional DG2. In this system we have:
>
>DG2?

that is its name, not an abbreviation. It's one of Intel's discrete
graphics cards. See for example 9e22cfc5e9b9 ("drm/i915/dg2: add DG2 platform info")

maybe reword this as "one additional Intel GPU, DG2"?

>
>> 	- 00:01.0 Bridge
>> 	  `- 03:00.0 DG2
>> 	- Alderklake-P's integrated graphics
>
>s/Alderklake-P/Alderlake-P/
>
>Might be nice to include the integrated GPU PCI address to be parallel
>with the bridge and DG2.

ok

>
>> Since we do a depth-first traversal, when we call the handler because of
>> DG2 we were marking it as already being applied and never reserving the
>> stolen memory for Alderlake-P.
>>
>> Here we change the quirk fucntions to return bool in case it applied a
>> quirk so we only flag it as applied when that really happened. This only
>> makes a difference for quirks using QFLAG_APPLY_ONCE, so all the others
>> simply returns true in order to avoid unnecessary complication.
>
>s/fucntions/functions/
>s/returns true/return true/
>
>I would consider splitting this into two patches:
>
>  1) Change the quirk signature, make them all return "true", and
>  update check_dev_quirk().  This would have no functional impact.
>
>  2) Update intel_graphics_quirks() to return "false" when it doesn't
>  reserve the stolen memory.
>
>Then the important change will be in a small patch by itself and will
>be easier to understand and revert if that should be necessary.

makes sense. I will take a look on what the other alternative you gave
looks like, too.

thanks for the review

Lucas De Marchi

>
>> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
>> ---
>>  arch/x86/kernel/early-quirks.c | 75 ++++++++++++++++++++++------------
>>  1 file changed, 49 insertions(+), 26 deletions(-)
>>
>> diff --git a/arch/x86/kernel/early-quirks.c b/arch/x86/kernel/early-quirks.c
>> index 391a4e2b8604..5d235fe2a07a 100644
>> --- a/arch/x86/kernel/early-quirks.c
>> +++ b/arch/x86/kernel/early-quirks.c
>> @@ -28,7 +28,7 @@
>>  #include <asm/irq_remapping.h>
>>  #include <asm/early_ioremap.h>
>>
>> -static void __init fix_hypertransport_config(int num, int slot, int func)
>> +static bool __init fix_hypertransport_config(int num, int slot, int func)
>>  {
>>  	u32 htcfg;
>>  	/*
>> @@ -51,10 +51,10 @@ static void __init fix_hypertransport_config(int num, int slot, int func)
>>  		}
>>  	}
>>
>> -
>> +	return true;
>>  }
>>
>> -static void __init via_bugs(int  num, int slot, int func)
>> +static bool __init via_bugs(int  num, int slot, int func)
>>  {
>>  #ifdef CONFIG_GART_IOMMU
>>  	if ((max_pfn > MAX_DMA32_PFN ||  force_iommu) &&
>> @@ -63,8 +63,12 @@ static void __init via_bugs(int  num, int slot, int func)
>>  		       "Looks like a VIA chipset. Disabling IOMMU."
>>  		       " Override with iommu=allowed\n");
>>  		gart_iommu_aperture_disabled = 1;
>> +
>> +		return true;
>>  	}
>>  #endif
>> +
>> +	return false;
>>  }
>>
>>  #ifdef CONFIG_ACPI
>> @@ -77,7 +81,7 @@ static int __init nvidia_hpet_check(struct acpi_table_header *header)
>>  #endif /* CONFIG_X86_IO_APIC */
>>  #endif /* CONFIG_ACPI */
>>
>> -static void __init nvidia_bugs(int num, int slot, int func)
>> +static bool __init nvidia_bugs(int num, int slot, int func)
>>  {
>>  #ifdef CONFIG_ACPI
>>  #ifdef CONFIG_X86_IO_APIC
>> @@ -86,7 +90,7 @@ static void __init nvidia_bugs(int num, int slot, int func)
>>  	 * Nvidia graphics cards with PCI ports on secondary buses.
>>  	 */
>>  	if (num)
>> -		return;
>> +		return false;
>>
>>  	/*
>>  	 * All timer overrides on Nvidia are
>> @@ -96,7 +100,7 @@ static void __init nvidia_bugs(int num, int slot, int func)
>>  	 * at least allow a command line override.
>>  	 */
>>  	if (acpi_use_timer_override)
>> -		return;
>> +		return false;
>>
>>  	if (acpi_table_parse(ACPI_SIG_HPET, nvidia_hpet_check)) {
>>  		acpi_skip_timer_override = 1;
>> @@ -105,11 +109,14 @@ static void __init nvidia_bugs(int num, int slot, int func)
>>  		       "timer override.\n");
>>  		printk(KERN_INFO "If you got timer trouble "
>>  			"try acpi_use_timer_override\n");
>> +
>> +		return true;
>>  	}
>>  #endif
>>  #endif
>>  	/* RED-PEN skip them on mptables too? */
>>
>> +	return false;
>>  }
>>
>>  #if defined(CONFIG_ACPI) && defined(CONFIG_X86_IO_APIC)
>> @@ -131,13 +138,13 @@ static u32 __init ati_ixp4x0_rev(int num, int slot, int func)
>>  	return d;
>>  }
>>
>> -static void __init ati_bugs(int num, int slot, int func)
>> +static bool __init ati_bugs(int num, int slot, int func)
>>  {
>>  	u32 d;
>>  	u8  b;
>>
>>  	if (acpi_use_timer_override)
>> -		return;
>> +		return true;
>>
>>  	d = ati_ixp4x0_rev(num, slot, func);
>>  	if (d  < 0x82)
>> @@ -155,6 +162,8 @@ static void __init ati_bugs(int num, int slot, int func)
>>  		printk(KERN_INFO "If you got timer trouble "
>>  		       "try acpi_use_timer_override\n");
>>  	}
>> +
>> +	return true;
>>  }
>>
>>  static u32 __init ati_sbx00_rev(int num, int slot, int func)
>> @@ -167,7 +176,7 @@ static u32 __init ati_sbx00_rev(int num, int slot, int func)
>>  	return d;
>>  }
>>
>> -static void __init ati_bugs_contd(int num, int slot, int func)
>> +static bool __init ati_bugs_contd(int num, int slot, int func)
>>  {
>>  	u32 d, rev;
>>
>> @@ -181,10 +190,10 @@ static void __init ati_bugs_contd(int num, int slot, int func)
>>  	 * SB800: revisions 0x40, 0x41, ...
>>  	 */
>>  	if (rev >= 0x39)
>> -		return;
>> +		return true;
>>
>>  	if (acpi_use_timer_override)
>> -		return;
>> +		return true;
>>
>>  	/* check for IRQ0 interrupt swap */
>>  	d = read_pci_config(num, slot, func, 0x64);
>> @@ -197,18 +206,22 @@ static void __init ati_bugs_contd(int num, int slot, int func)
>>  		printk(KERN_INFO "If you got timer trouble "
>>  		       "try acpi_use_timer_override\n");
>>  	}
>> +
>> +	return true;
>>  }
>>  #else
>> -static void __init ati_bugs(int num, int slot, int func)
>> +static bool __init ati_bugs(int num, int slot, int func)
>>  {
>> +	return true;
>>  }
>>
>> -static void __init ati_bugs_contd(int num, int slot, int func)
>> +static bool __init ati_bugs_contd(int num, int slot, int func)
>>  {
>> +	return true;
>>  }
>>  #endif
>>
>> -static void __init intel_remapping_check(int num, int slot, int func)
>> +static bool __init intel_remapping_check(int num, int slot, int func)
>>  {
>>  	u8 revision;
>>  	u16 device;
>> @@ -226,6 +239,8 @@ static void __init intel_remapping_check(int num, int slot, int func)
>>  		set_irq_remapping_broken();
>>  	else if (device == 0x3405 && revision == 0x22)
>>  		set_irq_remapping_broken();
>> +
>> +	return true;
>>  }
>>
>>  /*
>> @@ -585,7 +600,7 @@ intel_graphics_stolen(int num, int slot, int func,
>>  	e820__update_table(e820_table);
>>  }
>>
>> -static void __init intel_graphics_quirks(int num, int slot, int func)
>> +static bool __init intel_graphics_quirks(int num, int slot, int func)
>>  {
>>  	const struct intel_early_ops *early_ops;
>>  	u16 device;
>> @@ -603,16 +618,20 @@ static void __init intel_graphics_quirks(int num, int slot, int func)
>>
>>  		intel_graphics_stolen(num, slot, func, early_ops);
>>
>> -		return;
>> +		return true;
>>  	}
>> +
>> +	return false;
>>  }
>>
>> -static void __init force_disable_hpet(int num, int slot, int func)
>> +static bool __init force_disable_hpet(int num, int slot, int func)
>>  {
>>  #ifdef CONFIG_HPET_TIMER
>>  	boot_hpet_disable = true;
>>  	pr_info("x86/hpet: Will disable the HPET for this platform because it's not reliable\n");
>>  #endif
>> +
>> +	return true;
>>  }
>>
>>  #define BCM4331_MMIO_SIZE	16384
>> @@ -620,7 +639,7 @@ static void __init force_disable_hpet(int num, int slot, int func)
>>  #define bcma_aread32(reg)	ioread32(mmio + 1 * BCMA_CORE_SIZE + reg)
>>  #define bcma_awrite32(reg, val)	iowrite32(val, mmio + 1 * BCMA_CORE_SIZE + reg)
>>
>> -static void __init apple_airport_reset(int bus, int slot, int func)
>> +static bool __init apple_airport_reset(int bus, int slot, int func)
>>  {
>>  	void __iomem *mmio;
>>  	u16 pmcsr;
>> @@ -628,7 +647,7 @@ static void __init apple_airport_reset(int bus, int slot, int func)
>>  	int i;
>>
>>  	if (!x86_apple_machine)
>> -		return;
>> +		return true;
>>
>>  	/* Card may have been put into PCI_D3hot by grub quirk */
>>  	pmcsr = read_pci_config_16(bus, slot, func, BCM4331_PM_CAP + PCI_PM_CTRL);
>> @@ -642,7 +661,7 @@ static void __init apple_airport_reset(int bus, int slot, int func)
>>  		if ((pmcsr & PCI_PM_CTRL_STATE_MASK) != PCI_D0) {
>>  			pr_err("pci 0000:%02x:%02x.%d: Cannot power up Apple AirPort card\n",
>>  			       bus, slot, func);
>> -			return;
>> +			return true;
>>  		}
>>  	}
>>
>> @@ -654,7 +673,7 @@ static void __init apple_airport_reset(int bus, int slot, int func)
>>  	if (!mmio) {
>>  		pr_err("pci 0000:%02x:%02x.%d: Cannot iomap Apple AirPort card\n",
>>  		       bus, slot, func);
>> -		return;
>> +		return true;
>>  	}
>>
>>  	pr_info("Resetting Apple AirPort card (left enabled by EFI)\n");
>> @@ -671,6 +690,8 @@ static void __init apple_airport_reset(int bus, int slot, int func)
>>  	udelay(10);
>>
>>  	early_iounmap(mmio, BCM4331_MMIO_SIZE);
>> +
>> +	return true;
>>  }
>>
>>  #define QFLAG_APPLY_ONCE 	0x1
>> @@ -682,7 +703,7 @@ struct chipset {
>>  	u32 class;
>>  	u32 class_mask;
>>  	u32 flags;
>> -	void (*f)(int num, int slot, int func);
>> +	bool (*f)(int num, int slot, int func);
>>  };
>>
>>  static struct chipset early_qrk[] __initdata = {
>> @@ -757,11 +778,13 @@ static int __init check_dev_quirk(int num, int slot, int func)
>>  			(early_qrk[i].device == device)) &&
>>  			(!((early_qrk[i].class ^ class) &
>>  			    early_qrk[i].class_mask))) {
>> -				if ((early_qrk[i].flags &
>> -				     QFLAG_DONE) != QFLAG_DONE)
>> -					early_qrk[i].f(num, slot, func);
>> -				early_qrk[i].flags |= QFLAG_APPLIED;
>> +			if ((early_qrk[i].flags & QFLAG_DONE) != QFLAG_DONE) {
>> +				bool applied = early_qrk[i].f(num, slot, func);
>> +
>> +				if (applied)
>> +					early_qrk[i].flags |= QFLAG_APPLIED;
>>  			}
>> +		}
>>  	}
>>
>>  	type = read_pci_config_byte(num, slot, func,
>> --
>> 2.34.1
>>

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2021-12-30  7:26 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-18  6:13 [PATCH] x86/quirks: Fix logic to apply quirk once Lucas De Marchi
2021-12-18  6:13 ` [Intel-gfx] " Lucas De Marchi
2021-12-18  7:13 ` [Intel-gfx] ✓ Fi.CI.BAT: success for " Patchwork
2021-12-18  9:10 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " Patchwork
2021-12-29 23:27 ` [PATCH] " Bjorn Helgaas
2021-12-29 23:27   ` [Intel-gfx] " Bjorn Helgaas
2021-12-30  7:26   ` Lucas De Marchi
2021-12-30  7:26     ` [Intel-gfx] " Lucas De Marchi

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.