FAILED: patch "[PATCH] nfit/ars: Avoid stale ARS results" failed to apply to 5.0-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 5.0-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 78153dd45e7e0596ba32b15d02bda08e1513111e Mon Sep 17 00:00:00 2001
From: Dan Williams <[email protected]>
Date: Wed, 13 Feb 2019 09:28:40 -0800
Subject: [PATCH] nfit/ars: Avoid stale ARS results
Gate ARS result consumption on whether the OS issued start-ARS since the previous consumption. The BIOS may only clear its result buffers after a successful start-ARS.
Fixes 0caeef63e6d2 ("libnvdimm: Add a poison list and export badblocks")
Cc <[email protected]>
Reported-by Krzysztof Rusocki <[email protected]>
Reported-by Vishal Verma <[email protected]>
Reviewed-by Toshi Kani <[email protected]>
Signed-off-by Dan Williams <[email protected]>
drivers/acpi/nfit/core.c +16 -1
@@ -2652,7 +2652,10 @@ static int ars_start(struct acpi_nfit_desc *acpi_desc,if (rc <0 )return rc; -return cmd_rc; +if (cmd_rc <0 ) +return cmd_rc; +set_bit (ARS_VALID , &acpi_desc->scrub_flags); +return 0 ; }static int ars_continue (struct acpi_nfit_desc *acpi_desc)
@@ -2745,6 +2748,17 @@ static int ars_status_process_records(struct acpi_nfit_desc *acpi_desc)*/ if (ars_status->out_length <44 )return 0 ; + +/* +* Ignore potentially stale results that are only refreshed +* after a start-ARS event. +*/ +if (!test_and_clear_bit (ARS_VALID , &acpi_desc->scrub_flags)) { +dev_dbg (acpi_desc->dev,"skip %d stale records\n" , + ars_status->num_records); +return 0 ; + } +for (i =0 ; i < ars_status->num_records; i++) {/* only process full records */ if (ars_status->out_length
@@ -3229,6 +3243,7 @@ static int acpi_nfit_register_regions(struct acpi_nfit_desc *acpi_desc)struct nfit_spa *nfit_spa;int rc; +set_bit (ARS_VALID , &acpi_desc->scrub_flags);list_for_each_entry (nfit_spa, &acpi_desc->spas, list) {switch (nfit_spa_type (nfit_spa->spa)) {case NFIT_SPA_VOLATILE :
drivers/acpi/nfit/nfit.h +1 -0
@@ -213,6 +213,7 @@ struct nfit_mem {enum scrub_flags {ARS_BUSY ,ARS_CANCEL , +ARS_VALID ,ARS_POLL , };