From patchwork Fri Nov 12 13:54:05 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shuai Xue X-Patchwork-Id: 12692405 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3D7F4C433F5 for ; Fri, 12 Nov 2021 13:55:34 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 05CD360F55 for ; Fri, 12 Nov 2021 13:55:33 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 05CD360F55 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.alibaba.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-Id:Date:Subject:Cc :To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=OQNEDr6h4mZJSSuygRYx80f213XJCm7xFqMRObHMFtY=; b=neWQ+cRbd5l1kp /X9jEQHfi415rNKIYIkxCIc8j/zEJmddnZO9qLZ4cw/UyChHip6Jgqesfp+AHcCGm1xEx5rurONxH jPIu7dhW3K73YG7uwVAe7lsOqRoi1zS3oY8Flm4PmciFVdP5TO5LXWl7AkdtsIJ+c6KBXdUtolPUB VpalzLIEN8GQhi6yg1hmqDIbWM6JaddIm7itzj6Jeq8jUIh3DANXRbQJTWuUhkcEiOZ6JdDdQAE9E Kfba0V/bs2vfk/rSQPWceC9IzrWLNvYqeDa7Z0Bp+V/qe/jHt8SGxMMB72xuvL6unDZZr6QfX1sNN Xa9NA0ZL26XKIH+ts/3g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mlX0V-00AfaQ-QM; Fri, 12 Nov 2021 13:54:19 +0000 Received: from out30-132.freemail.mail.aliyun.com ([115.124.30.132]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mlX0R-00AfWs-Gd for linux-arm-kernel@lists.infradead.org; Fri, 12 Nov 2021 13:54:17 +0000 X-Alimail-AntiSpam: AC=PASS; BC=-1|-1; BR=01201311R581e4; CH=green; DM=||false|; DS=||; FP=0|-1|-1|-1|0|-1|-1|-1; HT=e01e04426; MF=xueshuai@linux.alibaba.com; NM=1; PH=DS; RN=13; SR=0; TI=SMTPD_---0UwCALcf_1636725247; Received: from localhost.localdomain(mailfrom:xueshuai@linux.alibaba.com fp:SMTPD_---0UwCALcf_1636725247) by smtp.aliyun-inc.com(127.0.0.1); Fri, 12 Nov 2021 21:54:08 +0800 From: Shuai Xue To: linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-pci@vger.kernel.org Cc: bp@alien8.de, tony.luck@intel.com, james.morse@arm.com, lenb@kernel.org, rjw@rjwysocki.net, bhelgaas@google.com, xueshuai@linux.alibaba.com, zhangliguang@linux.alibaba.com, zhuo.song@linux.alibaba.com Subject: [RFC PATCH] ACPI: Move sdei_init and ghes_init ahead Date: Fri, 12 Nov 2021 21:54:05 +0800 Message-Id: <20211112135405.19318-1-xueshuai@linux.alibaba.com> X-Mailer: git-send-email 2.24.3 (Apple Git-128) MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211112_055415_846146_6DE250BA X-CRM114-Status: GOOD ( 13.01 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org On an ACPI system, ACPI is initialised very early from a subsys_initcall(), while SDEI is not ready until a subsys_initcall(). More seriously, the kernel is able to handle and report errors until the GHES is initialised by device_initcall(). Consequently, when an error occurs during the kernel booting, the phyiscal sdei dispatcher in firmware fails to dispatch error events. All errors that occurred before GHES initialization are missed and there is no chance to report and find them again. In this patch, move sdei_init and ghes_init as far ahead as possible, right after acpi_hest_init(). Signed-off-by: Shuai Xue --- drivers/acpi/apei/ghes.c | 3 +-- drivers/acpi/pci_root.c | 2 ++ drivers/firmware/arm_sdei.c | 9 +-------- include/acpi/apei.h | 2 ++ 4 files changed, 6 insertions(+), 10 deletions(-) diff --git a/drivers/acpi/apei/ghes.c b/drivers/acpi/apei/ghes.c index c60961d31213..bf0177f44dfd 100644 --- a/drivers/acpi/apei/ghes.c +++ b/drivers/acpi/apei/ghes.c @@ -1452,7 +1452,7 @@ static struct platform_driver ghes_platform_driver = { .remove = ghes_remove, }; -static int __init ghes_init(void) +int __init ghes_init(void) { int rc; @@ -1494,4 +1494,3 @@ static int __init ghes_init(void) err: return rc; } -device_initcall(ghes_init); diff --git a/drivers/acpi/pci_root.c b/drivers/acpi/pci_root.c index 81cc18f39cc8..d9bbb6b8340e 100644 --- a/drivers/acpi/pci_root.c +++ b/drivers/acpi/pci_root.c @@ -977,6 +977,8 @@ struct pci_bus *acpi_pci_root_create(struct acpi_pci_root *root, void __init acpi_pci_root_init(void) { acpi_hest_init(); + sdei_init(); + ghes_init(); if (acpi_pci_disabled) return; diff --git a/drivers/firmware/arm_sdei.c b/drivers/firmware/arm_sdei.c index 198151ca471d..604063d6f542 100644 --- a/drivers/firmware/arm_sdei.c +++ b/drivers/firmware/arm_sdei.c @@ -1089,7 +1089,7 @@ static bool __init sdei_present_acpi(void) return true; } -static int __init sdei_init(void) +int __init sdei_init(void) { struct platform_device *pdev; int ret; @@ -1110,13 +1110,6 @@ static int __init sdei_init(void) return ret; } -/* - * On an ACPI system SDEI needs to be ready before HEST:GHES tries to register - * its events. ACPI is initialised from a subsys_initcall(), GHES is initialised - * by device_initcall(). We want to be called in the middle. - */ -subsys_initcall_sync(sdei_init); - int sdei_event_handler(struct pt_regs *regs, struct sdei_registered_event *arg) { diff --git a/include/acpi/apei.h b/include/acpi/apei.h index 680f80960c3d..5e6187ca5621 100644 --- a/include/acpi/apei.h +++ b/include/acpi/apei.h @@ -33,6 +33,8 @@ extern bool ghes_disable; #ifdef CONFIG_ACPI_APEI void __init acpi_hest_init(void); +int __init sdei_init(void); +int __init ghes_init(void); #else static inline void acpi_hest_init(void) { return; } #endif