Received: by 10.223.176.46 with SMTP id f43csp626551wra; Fri, 26 Jan 2018 04:26:53 -0800 (PST) X-Google-Smtp-Source: AH8x224aT6z9GwLwRGyrRxKHZSj4q1CrkH+JlLcSRp3mRg3bX3OsDRIzWLFC5TwEBywxDseAmLQ6 X-Received: by 2002:a17:902:6bca:: with SMTP id m10-v6mr13953360plt.351.1516969613393; Fri, 26 Jan 2018 04:26:53 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1516969613; cv=none; d=google.com; s=arc-20160816; b=Al4iLBl9e2IvUcbfVk7QaXXQk4uRlt2wvGMRco0hdcknSg1NYStqttKfbcV1YgLTWF 4fBBuvhy+bz5qsQD5DgW+2n0lT8UnNHpMA0evxpcdNH/H2zGhjxhExZKwJcMQ2ddjoxE pnqKFxU+nrErcF6BgXnzPBvnWEURobmLhh6IQL8mb4jw8wdHEkqqtlDkCv2b3JLAjScg 4dMM/bDU7/bVbODCwHquwwkHXKFmenoFezd496PzyTKUi2flA2QZu23LHhNtmDdsQOVR alMacXqaqNVj6cthOQ2vRxKpu4+4YzL8Wj7Upci89YIL6t7gpjE10pdmqPjPiLDXn+hD HC5Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:arc-authentication-results; bh=tGVVhOiUmTnKZIPZwaWuj4axHFwgd8OIQOG1jPpGBDY=; b=THF5Ir8alxTaJc1RS4ACyUYaT8mbU83z0NKX9erQG8+NgIACN1UXVCrwRofMhHP4/s OFtQEQiee/JJlP7BB684TpwnunAQIUxrlOo9KT+VKNAIAyezo7wDnP8CbKdwFLe6SvQH y7BqSBvmE8CN0yHEoVf1v9NRMY5QfzZqa2DaSuh7Fdm7+dRZBriMoX1HZmjsbNX0AX3U y3SonbbyC86zFTae//unQDIlSkShwYBhwX4IZRzUqeXRt2ERGRI45hBRx7/pP3IDLJgl 3nNIRuxwPeURMOfCZ62+ycwiigTC/vP3HPZKY9+9jF+IiF+BXfxXUhDoiQxC4u/BMZid vGUg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 62-v6si3714844ple.267.2018.01.26.04.26.39; Fri, 26 Jan 2018 04:26:53 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752024AbeAZMZj (ORCPT + 99 others); Fri, 26 Jan 2018 07:25:39 -0500 Received: from szxga05-in.huawei.com ([45.249.212.191]:4737 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751990AbeAZMZZ (ORCPT ); Fri, 26 Jan 2018 07:25:25 -0500 Received: from DGGEMS411-HUB.china.huawei.com (unknown [172.30.72.60]) by Forcepoint Email with ESMTP id 7F80C42038B5D; Fri, 26 Jan 2018 20:25:09 +0800 (CST) Received: from localhost.localdomain.localdomain (10.175.113.25) by DGGEMS411-HUB.china.huawei.com (10.3.19.211) with Microsoft SMTP Server id 14.3.361.1; Fri, 26 Jan 2018 20:25:04 +0800 From: Xie XiuQi To: , , , , , , , , , , , , , CC: , , , , , , , , , , , , Subject: [PATCH v5 3/3] arm64/ras: save error address from memory section for recovery Date: Fri, 26 Jan 2018 20:31:25 +0800 Message-ID: <1516969885-150532-4-git-send-email-xiexiuqi@huawei.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1516969885-150532-1-git-send-email-xiexiuqi@huawei.com> References: <1516969885-150532-1-git-send-email-xiexiuqi@huawei.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.175.113.25] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In some platform, when SEA triggerred, physical address might be reported by memory section, so we save it for error recovery later. Signed-off-by: Xie XiuQi Tested-by: Wang Xiongfeng Tested-by: Tyler Baicar --- arch/arm64/kernel/ras.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/arch/arm64/kernel/ras.c b/arch/arm64/kernel/ras.c index 05d3871..4690193 100644 --- a/arch/arm64/kernel/ras.c +++ b/arch/arm64/kernel/ras.c @@ -140,3 +140,34 @@ void ghes_arm_process_error(struct ghes *ghes, struct cper_sec_proc_arm *err) if (info_saved) set_thread_flag(TIF_SEA_NOTIFY); } + +int ghes_mem_err_callback(struct notifier_block *nb, unsigned long val, void *data) +{ + bool info_saved = false; + struct ghes_mem_err *ghes_mem = (struct ghes_mem_err *)data; + struct cper_sec_mem_err *mem_err = ghes_mem->mem_err; + + if ((ghes_mem->notify_type != ACPI_HEST_NOTIFY_SEA) || + (ghes_mem->severity != CPER_SEV_RECOVERABLE)) + return 0; + + if (mem_err->validation_bits & CPER_MEM_VALID_PA) + info_saved = sea_save_info(mem_err->physical_addr); + + if (info_saved) + set_thread_flag(TIF_SEA_NOTIFY); + + return 0; +} + +static struct notifier_block ghes_mem_err_nb = { + .notifier_call = ghes_mem_err_callback, +}; + +static int arm64_err_recov_init(void) +{ + atomic_notifier_chain_register(&ghes_mem_err_chain, &ghes_mem_err_nb); + return 0; +} + +late_initcall(arm64_err_recov_init); -- 1.8.3.1