Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

soc: qcom: smsm: Improve error handling, quiesce probe deferral

Don't use size if info indicates an error condition. Previously a
non-ENOENT error (such as -EPROBE_DEFER) would lead to size being used
even though it hadn't necessarily been initialized in qcom_smem_get.

Don't print an error message in the -EPROBE_DEFER case.

Signed-off-by: Jonathan Neuschäfer <j.neuschaefer@gmx.net>
Reviewed-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Signed-off-by: Andy Gross <andy.gross@linaro.org>

authored by

Jonathan Neuschäfer and committed by
Andy Gross
35dfa3ef 2ea659a9

+5 -4
+5 -4
drivers/soc/qcom/smsm.c
··· 439 439 } *info; 440 440 441 441 info = qcom_smem_get(QCOM_SMEM_HOST_ANY, SMEM_SMSM_SIZE_INFO, &size); 442 - if (PTR_ERR(info) == -ENOENT || size != sizeof(*info)) { 442 + if (IS_ERR(info) && PTR_ERR(info) != -ENOENT) { 443 + if (PTR_ERR(info) != -EPROBE_DEFER) 444 + dev_err(smsm->dev, "unable to retrieve smsm size info\n"); 445 + return PTR_ERR(info); 446 + } else if (IS_ERR(info) || size != sizeof(*info)) { 443 447 dev_warn(smsm->dev, "no smsm size info, using defaults\n"); 444 448 smsm->num_entries = SMSM_DEFAULT_NUM_ENTRIES; 445 449 smsm->num_hosts = SMSM_DEFAULT_NUM_HOSTS; 446 450 return 0; 447 - } else if (IS_ERR(info)) { 448 - dev_err(smsm->dev, "unable to retrieve smsm size info\n"); 449 - return PTR_ERR(info); 450 451 } 451 452 452 453 smsm->num_entries = info->num_entries;