|
|
ac32bf |
From 7e79fa94dc6c294cd731c0c684b277dd4811c5db Mon Sep 17 00:00:00 2001
|
|
|
ac32bf |
From: Aristeu Rozanski <aris@redhat.com>
|
|
|
ac32bf |
Date: Fri, 15 Aug 2014 13:50:58 -0400
|
|
|
ac32bf |
Subject: [PATCH 3/4] rasdaemon: do not assume dimmX/ directories will be
|
|
|
ac32bf |
present
|
|
|
ac32bf |
|
|
|
ac32bf |
While finding the labels, size and location, ras-mc-ctl will search /sys for
|
|
|
ac32bf |
the files and calculate the location. When it uses the location trying to map
|
|
|
ac32bf |
back to files to print labels or write labels, it'll just assume dimm*
|
|
|
ac32bf |
directories exist which is not correct while using drivers like amd64_edac.
|
|
|
ac32bf |
This patch adds two new hashes to store the location and the label file path
|
|
|
ac32bf |
so it can be used later.
|
|
|
ac32bf |
|
|
|
ac32bf |
Signed-off-by: Aristeu Rozanski <aris@redhat.com>
|
|
|
ac32bf |
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
|
|
|
ac32bf |
---
|
|
|
ac32bf |
util/ras-mc-ctl.in | 21 +++++++++++++--------
|
|
|
ac32bf |
1 file changed, 13 insertions(+), 8 deletions(-)
|
|
|
ac32bf |
|
|
|
ac32bf |
diff --git a/util/ras-mc-ctl.in b/util/ras-mc-ctl.in
|
|
|
ac32bf |
index 110262f..7b6d798 100755
|
|
|
ac32bf |
--- a/util/ras-mc-ctl.in
|
|
|
ac32bf |
+++ b/util/ras-mc-ctl.in
|
|
|
ac32bf |
@@ -45,6 +45,8 @@ my %conf = ();
|
|
|
ac32bf |
my %bus = ();
|
|
|
ac32bf |
my %dimm_size = ();
|
|
|
ac32bf |
my %dimm_node = ();
|
|
|
ac32bf |
+my %dimm_label_file = ();
|
|
|
ac32bf |
+my %dimm_location = ();
|
|
|
ac32bf |
my %csrow_size = ();
|
|
|
ac32bf |
my %rank_size = ();
|
|
|
ac32bf |
my %csrow_ranks = ();
|
|
|
ac32bf |
@@ -278,6 +280,9 @@ sub parse_dimm_nodes
|
|
|
ac32bf |
my $str_loc = join(':', $mc, @pos);
|
|
|
ac32bf |
$dimm_size{$str_loc} = $size;
|
|
|
ac32bf |
$dimm_node{$str_loc} = $dimm;
|
|
|
ac32bf |
+ $file =~ s/size/dimm_label/;
|
|
|
ac32bf |
+ $dimm_label_file{$str_loc} = $file;
|
|
|
ac32bf |
+ $dimm_location{$str_loc} = $location;
|
|
|
ac32bf |
|
|
|
ac32bf |
return;
|
|
|
ac32bf |
}
|
|
|
ac32bf |
@@ -557,12 +562,14 @@ sub read_dimm_label
|
|
|
ac32bf |
|
|
|
ac32bf |
my $dimm = $dimm_node{$pos};
|
|
|
ac32bf |
|
|
|
ac32bf |
- my $file = "$sysfs/mc$mc/dimm$dimm/dimm_label";
|
|
|
ac32bf |
+ my $dimm_label_file = $dimm_label_file{$pos};
|
|
|
ac32bf |
|
|
|
ac32bf |
- return ("$pos missing") unless -f $file;
|
|
|
ac32bf |
+ my $location = $dimm_location{$pos};
|
|
|
ac32bf |
|
|
|
ac32bf |
- if (!open (LABEL, "$file")) {
|
|
|
ac32bf |
- warn "Failed to open $file: $!\n";
|
|
|
ac32bf |
+ return ("label missing", "$pos missing") unless -f $dimm_label_file;
|
|
|
ac32bf |
+
|
|
|
ac32bf |
+ if (!open (LABEL, "$dimm_label_file")) {
|
|
|
ac32bf |
+ warn "Failed to open $dimm_label_file: $!\n";
|
|
|
ac32bf |
return ("Error");
|
|
|
ac32bf |
}
|
|
|
ac32bf |
|
|
|
ac32bf |
@@ -570,7 +577,7 @@ sub read_dimm_label
|
|
|
ac32bf |
|
|
|
ac32bf |
close (LABEL);
|
|
|
ac32bf |
|
|
|
ac32bf |
- $pos = "mc$mc " . qx(cat $sysfs/mc$mc/dimm$dimm/dimm_location);
|
|
|
ac32bf |
+ $pos = "mc$mc $location";
|
|
|
ac32bf |
|
|
|
ac32bf |
return ($label, $pos);
|
|
|
ac32bf |
}
|
|
|
ac32bf |
@@ -587,9 +594,7 @@ sub get_dimm_label_node
|
|
|
ac32bf |
|
|
|
ac32bf |
return "" if (!defined($dimm_node{$pos}));
|
|
|
ac32bf |
|
|
|
ac32bf |
- my $dimm = $dimm_node{$pos};
|
|
|
ac32bf |
-
|
|
|
ac32bf |
- return "$sysfs/mc$mc/dimm$dimm/dimm_label";
|
|
|
ac32bf |
+ return "$dimm_label_file{$pos}";
|
|
|
ac32bf |
}
|
|
|
ac32bf |
|
|
|
ac32bf |
|
|
|
ac32bf |
--
|
|
|
ac32bf |
1.8.3.1
|
|
|
ac32bf |
|