Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1537381 > unrolled thread
| Started by | Dan Williams <dan.j.williams@intel.com> |
|---|---|
| First post | 2016-12-07 01:50 +0100 |
| Last post | 2016-12-07 02:50 +0100 |
| Articles | 2 — 1 participant |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
[PATCH 4/5] acpi, nfit: fix bus vs dimm confusion in xlat_status Dan Williams <dan.j.williams@intel.com> - 2016-12-07 01:50 +0100
Re: [PATCH 4/5] acpi, nfit: fix bus vs dimm confusion in xlat_status Dan Williams <dan.j.williams@intel.com> - 2016-12-07 02:50 +0100
| From | Dan Williams <dan.j.williams@intel.com> |
|---|---|
| Date | 2016-12-07 01:50 +0100 |
| Subject | [PATCH 4/5] acpi, nfit: fix bus vs dimm confusion in xlat_status |
| Message-ID | <sLyAO-Qu-7@gated-at.bofh.it> |
Given dimms and bus commands share the same command number space we need
to be careful that we are translating status in the correct context.
Otherwise we can, for example, fail an ND_CMD_GET_CONFIG_SIZE command
because max_xfer is zero. It fails because that condition erroneously
correlates with the 'cleared == 0' failure of ND_CMD_CLEAR_ERROR.
Cc: <stable@vger.kernel.org>
Fixes: aef253382266 ("libnvdimm, nfit: centralize command status translation")
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
---
drivers/acpi/nfit/core.c | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)
diff --git a/drivers/acpi/nfit/core.c b/drivers/acpi/nfit/core.c
index 4b8b4f520d76..9690b28f0da7 100644
--- a/drivers/acpi/nfit/core.c
+++ b/drivers/acpi/nfit/core.c
@@ -94,7 +94,7 @@ static struct acpi_device *to_acpi_dev(struct acpi_nfit_desc *acpi_desc)
return to_acpi_device(acpi_desc->dev);
}
-static int xlat_status(void *buf, unsigned int cmd, u32 status)
+static int xlat_bus_status(void *buf, unsigned int cmd, u32 status)
{
struct nd_cmd_clear_error *clear_err;
struct nd_cmd_ars_status *ars_status;
@@ -175,6 +175,15 @@ static int xlat_status(void *buf, unsigned int cmd, u32 status)
return 0;
}
+static int xlat_status(struct nvdimm *nvdimm, void *buf, unsigned int cmd,
+ u32 status)
+{
+ if (!nvdimm)
+ return xlat_bus_status(buf, cmd, status);
+ if (status)
+ return -EIO;
+}
+
static int acpi_nfit_ctl(struct nvdimm_bus_descriptor *nd_desc,
struct nvdimm *nvdimm, unsigned int cmd, void *buf,
unsigned int buf_len, int *cmd_rc)
@@ -335,7 +344,8 @@ static int acpi_nfit_ctl(struct nvdimm_bus_descriptor *nd_desc,
*/
rc = buf_len - offset - in_buf.buffer.length;
if (cmd_rc)
- *cmd_rc = xlat_status(buf, cmd, fw_status);
+ *cmd_rc = xlat_status(nvdimm, buf, cmd,
+ fw_status);
} else {
dev_err(dev, "%s:%s underrun cmd: %s buf_len: %d out_len: %d\n",
__func__, dimm_name, cmd_name, buf_len,
@@ -345,7 +355,7 @@ static int acpi_nfit_ctl(struct nvdimm_bus_descriptor *nd_desc,
} else {
rc = 0;
if (cmd_rc)
- *cmd_rc = xlat_status(buf, cmd, fw_status);
+ *cmd_rc = xlat_status(nvdimm, buf, cmd, fw_status);
}
out:
[toc] | [next] | [standalone]
| From | Dan Williams <dan.j.williams@intel.com> |
|---|---|
| Date | 2016-12-07 02:50 +0100 |
| Message-ID | <sLzwS-1oj-5@gated-at.bofh.it> |
| In reply to | #1537381 |
On Tue, Dec 6, 2016 at 4:39 PM, Dan Williams <dan.j.williams@intel.com> wrote:
> Given dimms and bus commands share the same command number space we need
> to be careful that we are translating status in the correct context.
> Otherwise we can, for example, fail an ND_CMD_GET_CONFIG_SIZE command
> because max_xfer is zero. It fails because that condition erroneously
> correlates with the 'cleared == 0' failure of ND_CMD_CLEAR_ERROR.
>
> Cc: <stable@vger.kernel.org>
> Fixes: aef253382266 ("libnvdimm, nfit: centralize command status translation")
> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
> ---
> drivers/acpi/nfit/core.c | 16 +++++++++++++---
> 1 file changed, 13 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/acpi/nfit/core.c b/drivers/acpi/nfit/core.c
> index 4b8b4f520d76..9690b28f0da7 100644
> --- a/drivers/acpi/nfit/core.c
> +++ b/drivers/acpi/nfit/core.c
> @@ -94,7 +94,7 @@ static struct acpi_device *to_acpi_dev(struct acpi_nfit_desc *acpi_desc)
> return to_acpi_device(acpi_desc->dev);
> }
>
> -static int xlat_status(void *buf, unsigned int cmd, u32 status)
> +static int xlat_bus_status(void *buf, unsigned int cmd, u32 status)
> {
> struct nd_cmd_clear_error *clear_err;
> struct nd_cmd_ars_status *ars_status;
> @@ -175,6 +175,15 @@ static int xlat_status(void *buf, unsigned int cmd, u32 status)
> return 0;
> }
>
> +static int xlat_status(struct nvdimm *nvdimm, void *buf, unsigned int cmd,
> + u32 status)
> +{
> + if (!nvdimm)
> + return xlat_bus_status(buf, cmd, status);
> + if (status)
> + return -EIO;
Here comes a 0day report:
drivers/acpi/nfit/core.c:185:1: warning: control reaches end of
non-void function [-Wreturn-type]
...fixed up the patch to add a return 0;
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web