1*4882a593Smuzhiyunmake init script be able to automatically load EDAC module.
2*4882a593Smuzhiyun
3*4882a593SmuzhiyunUpstream-Status: Inappropriate [embedded specific]
4*4882a593Smuzhiyun
5*4882a593SmuzhiyunSigned-off-by: Roy.Li <rongqing.li@windriver.com>
6*4882a593Smuzhiyun---
7*4882a593Smuzhiyun src/etc/edac.init.in |   49 +++++++++++++++++++++++++++++++++++++++++++++++--
8*4882a593Smuzhiyun 1 file changed, 47 insertions(+), 2 deletions(-)
9*4882a593Smuzhiyun
10*4882a593Smuzhiyundiff --git a/src/etc/edac.init.in b/src/etc/edac.init.in
11*4882a593Smuzhiyunindex 7a51da9..5b568c4 100644
12*4882a593Smuzhiyun--- a/src/etc/edac.init.in
13*4882a593Smuzhiyun+++ b/src/etc/edac.init.in
14*4882a593Smuzhiyun@@ -42,7 +42,6 @@ for dir in "$sysconfdir/default" "$sysconfdir/sysconfig"; do
15*4882a593Smuzhiyun   [ -f "$dir/$SERVICE" ] && . "$dir/$SERVICE"
16*4882a593Smuzhiyun done
17*4882a593Smuzhiyun
18*4882a593Smuzhiyun-
19*4882a593Smuzhiyun ###############################################################################
20*4882a593Smuzhiyun
21*4882a593Smuzhiyun service_start ()
22*4882a593Smuzhiyun@@ -52,6 +51,46 @@ service_start ()
23*4882a593Smuzhiyun # Assume that if EDAC_DRIVER is not set, then EDAC is configured
24*4882a593Smuzhiyun #  automatically, thus return successfully, but don't do anything.
25*4882a593Smuzhiyun #
26*4882a593Smuzhiyun+    if [ ! -f /etc/edac/edac-driver ]; then
27*4882a593Smuzhiyun+         [ -d /sys/bus/edac/devices/mc/mc0 ] && \
28*4882a593Smuzhiyun+         echo `lsmod | grep _edac | cut -d" " -f1` > /etc/edac/edac-driver
29*4882a593Smuzhiyun+    fi
30*4882a593Smuzhiyun+
31*4882a593Smuzhiyun+    [ -f /etc/edac/edac-driver ] && EDAC_DRIVER=`cat /etc/edac/edac-driver`
32*4882a593Smuzhiyun+
33*4882a593Smuzhiyun+    if [ -z "$EDAC_DRIVER" ]; then
34*4882a593Smuzhiyun+
35*4882a593Smuzhiyun+        DRIVER_PATH=/lib/modules/`uname -r`/kernel/drivers/edac
36*4882a593Smuzhiyun+        oldpath=`pwd`
37*4882a593Smuzhiyun+        if [ -d $DRIVER_PATH ]; then
38*4882a593Smuzhiyun+
39*4882a593Smuzhiyun+            cd $DRIVER_PATH
40*4882a593Smuzhiyun+
41*4882a593Smuzhiyun+            for i in $(/bin/ls | /usr/bin/cut -d. -f1) ; do
42*4882a593Smuzhiyun+                /sbin/modprobe $i 2>/dev/null
43*4882a593Smuzhiyun+                if [ -d /sys/bus/edac/devices/mc/mc0 ]; then
44*4882a593Smuzhiyun+                    echo $i> /etc/edac/edac-driver
45*4882a593Smuzhiyun+                    EDAC_DRIVER=$i
46*4882a593Smuzhiyun+                    break
47*4882a593Smuzhiyun+                fi
48*4882a593Smuzhiyun+                /sbin/modprobe -r $i 2>/dev/null
49*4882a593Smuzhiyun+            done
50*4882a593Smuzhiyun+
51*4882a593Smuzhiyun+            cd "$oldpath"
52*4882a593Smuzhiyun+
53*4882a593Smuzhiyun+
54*4882a593Smuzhiyun+            if [ -z "$EDAC_DRIVER" ]; then
55*4882a593Smuzhiyun+                echo "This board may not support EDAC, or EDAC module may not be compiled in"
56*4882a593Smuzhiyun+                exit
57*4882a593Smuzhiyun+            fi
58*4882a593Smuzhiyun+
59*4882a593Smuzhiyun+        else
60*4882a593Smuzhiyun+            echo "This board may not support EDAC, or EDAC module may not be compiled in"
61*4882a593Smuzhiyun+            exit
62*4882a593Smuzhiyun+        fi
63*4882a593Smuzhiyun+
64*4882a593Smuzhiyun+    fi
65*4882a593Smuzhiyun+
66*4882a593Smuzhiyun   if [ -n "$EDAC_DRIVER" ]; then
67*4882a593Smuzhiyun      echo -n "Starting ${SERVICE}: "
68*4882a593Smuzhiyun      modprobe $EDAC_DRIVER
69*4882a593Smuzhiyun@@ -76,12 +115,15 @@ service_start ()
70*4882a593Smuzhiyun service_stop ()
71*4882a593Smuzhiyun {
72*4882a593Smuzhiyun   echo -n "Disabling ${SERVICE}: "
73*4882a593Smuzhiyun+
74*4882a593Smuzhiyun+  [ -f /etc/edac/edac-driver ] && EDAC_DRIVER=`cat /etc/edac/edac-driver`
75*4882a593Smuzhiyun+
76*4882a593Smuzhiyun   if [ -n "$EDAC_DRIVER" ]; then
77*4882a593Smuzhiyun     modprobe -r $EDAC_DRIVER
78*4882a593Smuzhiyun     STATUS=$?
79*4882a593Smuzhiyun     [ $STATUS -eq 0 ] && echo success || echo failure
80*4882a593Smuzhiyun   else
81*4882a593Smuzhiyun-    echo "Not supported for this configuration."
82*4882a593Smuzhiyun+    echo "Not supported for this configuration, or EDAC Module is not loaded."
83*4882a593Smuzhiyun     STATUS=6
84*4882a593Smuzhiyun   fi
85*4882a593Smuzhiyun }
86*4882a593Smuzhiyun@@ -92,6 +134,9 @@ service_status ()
87*4882a593Smuzhiyun {
88*4882a593Smuzhiyun # Print the current status of the service.  Required by LSB.
89*4882a593Smuzhiyun #
90*4882a593Smuzhiyun+  [ -f /etc/edac/edac-driver ] && EDAC_DRIVER=`cat /etc/edac/edac-driver`
91*4882a593Smuzhiyun+  [ -z "$EDAC_DRIVER" ] && STATUS=1 && exit
92*4882a593Smuzhiyun+
93*4882a593Smuzhiyun   edac-ctl --status
94*4882a593Smuzhiyun   STATUS=0
95*4882a593Smuzhiyun }
96*4882a593Smuzhiyun--
97*4882a593Smuzhiyun1.7.10.4
98*4882a593Smuzhiyun
99