[PATCH] Fix EDAC sdram_scrub_rate read/write failure

From: Han Pingtian
Date: Fri Sep 16 2011 - 06:43:20 EST


If sdram scrubbing rate isn't implemented on current system, read/write it
will cause an error:

]# cat /sys/devices/system/edac/mc/mc0/sdram_scrub_rate
cat: /sys/devices/system/edac/mc/mc0/sdram_scrub_rate: Invalid argument

]# echo 1 > /sys/devices/system/edac/mc/mc0/sdram_scrub_rate
-bash: echo: write error: Invalid argument

The eba042a81edd6baaff44831b2d719b14a6d21e58 let it returning -EINVAL,
but according to the document, the value should be -1, so there
shouldn't be a failure.

Sdram memory scrubbing rate:

'sdram_scrub_rate'

Read/Write attribute file that controls memory scrubbing. The scrubbing
rate is set by writing a minimum bandwidth in bytes/sec to the attribute
file. The rate will be translated to an internal value that gives at
least the specified rate.

Reading the file will return the actual scrubbing rate employed.

If configuration fails or memory scrubbing is not implemented, the value
of the attribute file will be -1.

Signed-off-by: Han Pingtian <phan@xxxxxxxxxx>
---
drivers/edac/edac_mc_sysfs.c | 14 ++++++++++----
1 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/drivers/edac/edac_mc_sysfs.c b/drivers/edac/edac_mc_sysfs.c
index 29ffa35..dae14cf 100644
--- a/drivers/edac/edac_mc_sysfs.c
+++ b/drivers/edac/edac_mc_sysfs.c
@@ -451,8 +451,11 @@ static ssize_t mci_sdram_scrub_rate_store(struct mem_ctl_info *mci,
unsigned long bandwidth = 0;
int new_bw = 0;

- if (!mci->set_sdram_scrub_rate)
- return -EINVAL;
+ if (!mci->set_sdram_scrub_rate) {
+ edac_printk(KERN_WARNING, EDAC_MC,
+ "Memory scrub rate writing is not implemented\n");
+ return count;
+ }

if (strict_strtoul(data, 10, &bandwidth) < 0)
return -EINVAL;
@@ -474,8 +477,11 @@ static ssize_t mci_sdram_scrub_rate_show(struct mem_ctl_info *mci, char *data)
{
int bandwidth = 0;

- if (!mci->get_sdram_scrub_rate)
- return -EINVAL;
+ if (!mci->get_sdram_scrub_rate) {
+ edac_printk(KERN_WARNING, EDAC_MC,
+ "Memory scrub rate reading not implemented\n");
+ return sprintf(data, "%d\n", -1);
+ }

bandwidth = mci->get_sdram_scrub_rate(mci);
if (bandwidth < 0) {
--
1.7.1


--d6Gm4EdcadzBjdND--
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/