From patchwork Fri Feb 3 13:50:36 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Morse X-Patchwork-Id: 52515 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp855556wrn; Fri, 3 Feb 2023 06:05:02 -0800 (PST) X-Google-Smtp-Source: AK7set9j0UWmWGKgWZemntsya9QzgZ63zzCHa6CNX7D5+qY1SzCupmgsOOlVqesFhpX5Spvek2uA X-Received: by 2002:a05:6a20:938b:b0:be:a817:ef9d with SMTP id x11-20020a056a20938b00b000bea817ef9dmr12515476pzh.42.1675433102509; Fri, 03 Feb 2023 06:05:02 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1675433102; cv=none; d=google.com; s=arc-20160816; b=zbZrK+ZlmIt0u1b/eXHcSH/UnZc9wETN7rrtRzuZcNTaE8Z2wE6qZspr3Ul9o/i83E BTnEWEPWBvkFVPJePWmY8zhCKesu6aWPfuZ218dJ78apa7vZmCSAVExMdTCVO2hg4fN7 N/Osrxc+WQNuAvzOMeV1iCoWAQp/mqMJHoZDIo83u1PbGf5fahKGjLXhO6KEbROpab1h x3GwuZBh8UnBy01P0kymY1P2nCH5z9ITtwOLE/iRRpRNm3mTjvKG5vrVf3Txf6CGZU3z 99j7PRwLxXvMPg1j3XkeCmKEFYssy/S3Tmg3QOp82pW9uJ4YnPp2Ev76AkHkKC7WbBHC fRJQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=o6Z6NRSU02JUCQSEpMsJIG2KkyQmPqpkWs5y1VGAvxk=; b=mFd+jYum73inB6YyiVlrUPk0Fxq1GqbjN5/e26hMNAWOC/HBvhoGZWG3bmeUhxBxEC isW6qySE+jDmrU3vdFofyq2wuSzU1Jb2ZSgxNCEl0QQkp6xWjm3zgx4dBhKco207+DYz XIT++MqaigVuWRJrBzfZ9erlevU4NCkTn0x0s6242K7WxW04jsnKf40uvUoxWMWDQFqc uYoyfeLAThPLelNjvLFs4IJZMPXDEHUZA2SBx5QJqjzr26qixwqTKxMlFPVCdGD5lyD7 +2TWg4wLeImEjZdDTWcE+m7P9Nh702rqB4UY46B2eiEQl40w3BCNQAPa6jj9qfXoBGxC 0++w== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id n17-20020a637211000000b0049a8afc9b21si2752409pgc.730.2023.02.03.06.04.49; Fri, 03 Feb 2023 06:05:02 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233560AbjBCOEQ (ORCPT + 99 others); Fri, 3 Feb 2023 09:04:16 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49008 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233075AbjBCOD6 (ORCPT ); Fri, 3 Feb 2023 09:03:58 -0500 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 448D5A56E0; Fri, 3 Feb 2023 06:01:46 -0800 (PST) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 16D091688; Fri, 3 Feb 2023 05:54:25 -0800 (PST) Received: from eglon.cambridge.arm.com (eglon.cambridge.arm.com [10.1.196.177]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 4979D3F71E; Fri, 3 Feb 2023 05:53:39 -0800 (PST) From: James Morse To: linux-pm@vger.kernel.org, loongarch@lists.linux.dev, kvmarm@lists.linux.dev, kvm@vger.kernel.org, linux-acpi@vger.kernel.org, linux-arch@vger.kernel.org, linux-ia64@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, x86@kernel.org Cc: Marc Zyngier , Thomas Gleixner , Lorenzo Pieralisi , Mark Rutland , Sudeep Holla , Borislav Petkov , H Peter Anvin , Dave Hansen , Ingo Molnar , Will Deacon , Catalin Marinas , Huacai Chen , James Morse , Suzuki K Poulose , Oliver Upton , Len Brown , Rafael Wysocki , WANG Xuerui , Salil Mehta , Russell King , Jean-Philippe Brucker Subject: [RFC PATCH 25/32] irqchip/gic-v3: Don't return errors from gic_acpi_match_gicc() Date: Fri, 3 Feb 2023 13:50:36 +0000 Message-Id: <20230203135043.409192-26-james.morse@arm.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230203135043.409192-1-james.morse@arm.com> References: <20230203135043.409192-1-james.morse@arm.com> MIME-Version: 1.0 X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1756818940852537200?= X-GMAIL-MSGID: =?utf-8?q?1756818940852537200?= 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 complictes 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 --- drivers/irqchip/irq-gic-v3.c | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/drivers/irqchip/irq-gic-v3.c b/drivers/irqchip/irq-gic-v3.c index d484cccfd612..a8b969d652b6 100644 --- a/drivers/irqchip/irq-gic-v3.c +++ b/drivers/irqchip/irq-gic-v3.c @@ -2237,21 +2237,15 @@ 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 + * GICR base is presented via GICC. The redistributor is only known to + * be accessible if the GICC is marked as enabled. If this bit is not + * set, we'd need to add the redistributor at runtime, which isn't + * supported. */ - if (acpi_gicc_is_usable(gicc) && gicc->gicr_base_address) { + if (gicc->flags & ACPI_MADT_ENABLED && 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)