aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/nfit
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/acpi/nfit')
-rw-r--r--drivers/acpi/nfit/core.c19
-rw-r--r--drivers/acpi/nfit/mce.c8
2 files changed, 11 insertions, 16 deletions
diff --git a/drivers/acpi/nfit/core.c b/drivers/acpi/nfit/core.c
index f8c638f3c946..14d9f5bea015 100644
--- a/drivers/acpi/nfit/core.c
+++ b/drivers/acpi/nfit/core.c
@@ -2928,9 +2928,9 @@ static int acpi_nfit_query_poison(struct acpi_nfit_desc *acpi_desc)
2928 return rc; 2928 return rc;
2929 2929
2930 if (ars_status_process_records(acpi_desc)) 2930 if (ars_status_process_records(acpi_desc))
2931 return -ENOMEM; 2931 dev_err(acpi_desc->dev, "Failed to process ARS records\n");
2932 2932
2933 return 0; 2933 return rc;
2934} 2934}
2935 2935
2936static int ars_register(struct acpi_nfit_desc *acpi_desc, 2936static int ars_register(struct acpi_nfit_desc *acpi_desc,
@@ -3341,8 +3341,6 @@ static int acpi_nfit_clear_to_send(struct nvdimm_bus_descriptor *nd_desc,
3341 struct nvdimm *nvdimm, unsigned int cmd) 3341 struct nvdimm *nvdimm, unsigned int cmd)
3342{ 3342{
3343 struct acpi_nfit_desc *acpi_desc = to_acpi_nfit_desc(nd_desc); 3343 struct acpi_nfit_desc *acpi_desc = to_acpi_nfit_desc(nd_desc);
3344 struct nfit_spa *nfit_spa;
3345 int rc = 0;
3346 3344
3347 if (nvdimm) 3345 if (nvdimm)
3348 return 0; 3346 return 0;
@@ -3355,17 +3353,10 @@ static int acpi_nfit_clear_to_send(struct nvdimm_bus_descriptor *nd_desc,
3355 * just needs guarantees that any ARS it initiates are not 3353 * just needs guarantees that any ARS it initiates are not
3356 * interrupted by any intervening start requests from userspace. 3354 * interrupted by any intervening start requests from userspace.
3357 */ 3355 */
3358 mutex_lock(&acpi_desc->init_mutex); 3356 if (work_busy(&acpi_desc->dwork.work))
3359 list_for_each_entry(nfit_spa, &acpi_desc->spas, list) 3357 return -EBUSY;
3360 if (acpi_desc->scrub_spa
3361 || test_bit(ARS_REQ_SHORT, &nfit_spa->ars_state)
3362 || test_bit(ARS_REQ_LONG, &nfit_spa->ars_state)) {
3363 rc = -EBUSY;
3364 break;
3365 }
3366 mutex_unlock(&acpi_desc->init_mutex);
3367 3358
3368 return rc; 3359 return 0;
3369} 3360}
3370 3361
3371int acpi_nfit_ars_rescan(struct acpi_nfit_desc *acpi_desc, 3362int acpi_nfit_ars_rescan(struct acpi_nfit_desc *acpi_desc,
diff --git a/drivers/acpi/nfit/mce.c b/drivers/acpi/nfit/mce.c
index e9626bf6ca29..d6c1b10f6c25 100644
--- a/drivers/acpi/nfit/mce.c
+++ b/drivers/acpi/nfit/mce.c
@@ -25,8 +25,12 @@ static int nfit_handle_mce(struct notifier_block *nb, unsigned long val,
25 struct acpi_nfit_desc *acpi_desc; 25 struct acpi_nfit_desc *acpi_desc;
26 struct nfit_spa *nfit_spa; 26 struct nfit_spa *nfit_spa;
27 27
28 /* We only care about memory errors */ 28 /* We only care about uncorrectable memory errors */
29 if (!mce_is_memory_error(mce)) 29 if (!mce_is_memory_error(mce) || mce_is_correctable(mce))
30 return NOTIFY_DONE;
31
32 /* Verify the address reported in the MCE is valid. */
33 if (!mce_usable_address(mce))
30 return NOTIFY_DONE; 34 return NOTIFY_DONE;
31 35
32 /* 36 /*