From patchwork Tue Feb 7 23:43:50 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dan Williams X-Patchwork-Id: 9561533 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 82BA560547 for ; Tue, 7 Feb 2017 23:47:58 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 77BD728467 for ; Tue, 7 Feb 2017 23:47:58 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 6C65028495; Tue, 7 Feb 2017 23:47:58 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-1.9 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_NONE autolearn=unavailable version=3.3.1 Received: from ml01.01.org (ml01.01.org [198.145.21.10]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 354F82846B for ; Tue, 7 Feb 2017 23:47:57 +0000 (UTC) Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id A5D7381FB6; Tue, 7 Feb 2017 15:47:57 -0800 (PST) X-Original-To: linux-nvdimm@lists.01.org Delivered-To: linux-nvdimm@lists.01.org Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id F419A81F71 for ; Tue, 7 Feb 2017 15:47:55 -0800 (PST) Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga105.fm.intel.com with ESMTP; 07 Feb 2017 15:47:55 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.33,346,1477983600"; d="scan'208";a="62396017" Received: from dwillia2-desk3.jf.intel.com (HELO dwillia2-desk3.amr.corp.intel.com) ([10.54.39.14]) by fmsmga005.fm.intel.com with ESMTP; 07 Feb 2017 15:47:55 -0800 Subject: [PATCH] acpi, nfit: skip ARS on machine-check-recovery capable platforms From: Dan Williams To: linux-nvdimm@lists.01.org Date: Tue, 07 Feb 2017 15:43:50 -0800 Message-ID: <148651103020.2605.2544850985469410207.stgit@dwillia2-desk3.amr.corp.intel.com> User-Agent: StGit/0.17.1-9-g687f MIME-Version: 1.0 X-BeenThere: linux-nvdimm@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Linux-nvdimm developer list." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-acpi@vger.kernel.org Errors-To: linux-nvdimm-bounces@lists.01.org Sender: "Linux-nvdimm" X-Virus-Scanned: ClamAV using ClamSMTP If the platform supports machine-check-recovery then there is little reason to kick off opportunistic scrubs to collect a media error list. That initial scrub is only useful when it might prevent a kernel panic from consuming poison (a media error from memory). Cc: Vishal Verma Signed-off-by: Dan Williams --- drivers/acpi/nfit/core.c | 6 ++++-- drivers/acpi/nfit/mce.c | 7 +++++++ drivers/acpi/nfit/nfit.h | 5 +++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/drivers/acpi/nfit/core.c b/drivers/acpi/nfit/core.c index 7361d00818e2..bbefd9516939 100644 --- a/drivers/acpi/nfit/core.c +++ b/drivers/acpi/nfit/core.c @@ -2500,10 +2500,12 @@ static void acpi_nfit_scrub(struct work_struct *work) list_for_each_entry(nfit_spa, &acpi_desc->spas, list) { /* * Flag all the ranges that still need scrubbing, but - * register them now to make data available. + * register them now to make data available. If the + * platform supports machine-check recovery then we skip + * these opportunistic scans. */ if (!nfit_spa->nd_region) { - nfit_spa->ars_required = 1; + nfit_spa->ars_required = is_ars_required(); acpi_nfit_register_region(acpi_desc, nfit_spa); } } diff --git a/drivers/acpi/nfit/mce.c b/drivers/acpi/nfit/mce.c index e5ce81c38eed..1e6f1e7100f9 100644 --- a/drivers/acpi/nfit/mce.c +++ b/drivers/acpi/nfit/mce.c @@ -92,6 +92,13 @@ static struct notifier_block nfit_mce_dec = { .notifier_call = nfit_handle_mce, }; +bool is_ars_required(void) +{ + if (static_branch_unlikely(&mcsafe_key)) + return false; + return true; +} + void nfit_mce_register(void) { mce_register_decode_chain(&nfit_mce_dec); diff --git a/drivers/acpi/nfit/nfit.h b/drivers/acpi/nfit/nfit.h index fc29c2e9832e..925f2a3d896e 100644 --- a/drivers/acpi/nfit/nfit.h +++ b/drivers/acpi/nfit/nfit.h @@ -211,6 +211,7 @@ int acpi_nfit_ars_rescan(struct acpi_nfit_desc *acpi_desc); #ifdef CONFIG_X86_MCE void nfit_mce_register(void); void nfit_mce_unregister(void); +bool is_ars_required(void); #else static inline void nfit_mce_register(void) { @@ -218,6 +219,10 @@ static inline void nfit_mce_register(void) static inline void nfit_mce_unregister(void) { } +static inline bool is_ars_required(void) +{ + return true; +} #endif int nfit_spa_type(struct acpi_nfit_system_address *spa);