Commit 5e8e19bf authored by Borislav Petkov's avatar Borislav Petkov Committed by Borislav Petkov

EDAC: Correct scrub rate API

The original scrub rate API definition states that if scrub rate
accessors are not implemented, a negative value (-1) should be written
to the sysfs file (/sys/devices/system/edac/mc/mc<N>/sdram_scrub_rate,
where N is the memory controller number on the system). This is
counter-intuitive and awkward at the very least because, when setting
the scrub rate, userspace has to write to sysfs and then read it back to
check error status of the operation.

As Tony notes, best it would be to not have the sdram_scrub_rate in
sysfs if scrub rate support is not implemented. It is too late about
that and a bunch of drivers on a bunch of arches would need to be
changed and tested which is not a trivial task ATM.

Instead, settle for the next best thing of returning -ENODEV when
implementation is missing and -EINVAL when there was an error
encountered while setting the scrub rate.
Reported-by: default avatarHan Pingtian <phan@redhat.com>
Cc: Tony Luck <tony.luck@intel.com>
Link: http://lkml.kernel.org/r/20110916105856.GA13253@hpt.nay.redhat.comSigned-off-by: default avatarBorislav Petkov <borislav.petkov@amd.com>
parent 11b0a314
...@@ -334,8 +334,8 @@ Sdram memory scrubbing rate: ...@@ -334,8 +334,8 @@ Sdram memory scrubbing rate:
Reading the file will return the actual scrubbing rate employed. Reading the file will return the actual scrubbing rate employed.
If configuration fails or memory scrubbing is not implemented, the value If configuration fails or memory scrubbing is not implemented, accessing
of the attribute file will be -1. that attribute will fail.
......
...@@ -452,7 +452,7 @@ static ssize_t mci_sdram_scrub_rate_store(struct mem_ctl_info *mci, ...@@ -452,7 +452,7 @@ static ssize_t mci_sdram_scrub_rate_store(struct mem_ctl_info *mci,
int new_bw = 0; int new_bw = 0;
if (!mci->set_sdram_scrub_rate) if (!mci->set_sdram_scrub_rate)
return -EINVAL; return -ENODEV;
if (strict_strtoul(data, 10, &bandwidth) < 0) if (strict_strtoul(data, 10, &bandwidth) < 0)
return -EINVAL; return -EINVAL;
...@@ -475,7 +475,7 @@ static ssize_t mci_sdram_scrub_rate_show(struct mem_ctl_info *mci, char *data) ...@@ -475,7 +475,7 @@ static ssize_t mci_sdram_scrub_rate_show(struct mem_ctl_info *mci, char *data)
int bandwidth = 0; int bandwidth = 0;
if (!mci->get_sdram_scrub_rate) if (!mci->get_sdram_scrub_rate)
return -EINVAL; return -ENODEV;
bandwidth = mci->get_sdram_scrub_rate(mci); bandwidth = mci->get_sdram_scrub_rate(mci);
if (bandwidth < 0) { if (bandwidth < 0) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment