Patch "irqchip/gic-v3: Don't return errors from gic_acpi_match_gicc()" has been added to the 6.10-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    irqchip/gic-v3: Don't return errors from gic_acpi_match_gicc()

to the 6.10-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     irqchip-gic-v3-don-t-return-errors-from-gic_acpi_mat.patch
and it can be found in the queue-6.10 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit cb6803bff3500e0963d27f0ba8b9808ceb7f47bf
Author: James Morse <james.morse@xxxxxxx>
Date:   Wed May 29 14:34:40 2024 +0100

    irqchip/gic-v3: Don't return errors from gic_acpi_match_gicc()
    
    [ Upstream commit fa2dabe57220e6af78ed7a2f7016bf250a618204 ]
    
    gic_acpi_match_gicc() is only called via gic_acpi_count_gicr_regions().
    It should only count the number of enabled redistributors, but it
    also tries to sanity check the GICC entry, currently returning an
    error if the Enabled bit is set, but the gicr_base_address is zero.
    
    Adding support for the online-capable bit to the sanity check will
    complicate it, for no benefit. The existing check implicitly depends on
    gic_acpi_count_gicr_regions() previous failing to find any GICR regions
    (as it is valid to have gicr_base_address of zero if the redistributors
    are described via a GICR entry).
    
    Instead of complicating the check, remove it. Failures that happen at
    this point cause the irqchip not to register, meaning no irqs can be
    requested. The kernel grinds to a panic() pretty quickly.
    
    Without the check, MADT tables that exhibit this problem are still
    caught by gic_populate_rdist(), which helpfully also prints what went
    wrong:
    | CPU4: mpidr 100 has no re-distributor!
    
    Signed-off-by: James Morse <james.morse@xxxxxxx>
    Reviewed-by: Gavin Shan <gshan@xxxxxxxxxx>
    Tested-by: Miguel Luis <miguel.luis@xxxxxxxxxx>
    Signed-off-by: Russell King (Oracle) <rmk+kernel@xxxxxxxxxxxxxxx>
    Reviewed-by: Jonathan Cameron <Jonathan.Cameron@xxxxxxxxxx>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@xxxxxxxxxx>
    Reviewed-by: Marc Zyngier <maz@xxxxxxxxxx>
    Link: https://lore.kernel.org/r/20240529133446.28446-14-Jonathan.Cameron@xxxxxxxxxx
    Signed-off-by: Catalin Marinas <catalin.marinas@xxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/irqchip/irq-gic-v3.c b/drivers/irqchip/irq-gic-v3.c
index 6fb276504bcc8..10af15f93d4d4 100644
--- a/drivers/irqchip/irq-gic-v3.c
+++ b/drivers/irqchip/irq-gic-v3.c
@@ -2415,19 +2415,10 @@ static int __init gic_acpi_match_gicc(union acpi_subtable_headers *header,
 	 * If GICC is enabled and has valid gicr base address, then it means
 	 * GICR base is presented via GICC
 	 */
-	if (acpi_gicc_is_usable(gicc) && gicc->gicr_base_address) {
+	if (acpi_gicc_is_usable(gicc) && gicc->gicr_base_address)
 		acpi_data.enabled_rdists++;
-		return 0;
-	}
 
-	/*
-	 * It's perfectly valid firmware can pass disabled GICC entry, driver
-	 * should not treat as errors, skip the entry instead of probe fail.
-	 */
-	if (!acpi_gicc_is_usable(gicc))
-		return 0;
-
-	return -ENODEV;
+	return 0;
 }
 
 static int __init gic_acpi_count_gicr_regions(void)




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux