summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorroot <root@devel3.z900.redhat.com>2009-08-04 08:24:09 -0400
committerDavid Cantrell <dcantrell@redhat.com>2009-08-06 14:56:26 -1000
commit02dd0fdb02a3425a6c3d842b31b9d07fb6a89af3 (patch)
tree25aa76f32a6d9311d6cc15523d156057eeac20cf
parentf466cf90bce70b93ac100c3bc9b5ec2e699c3b16 (diff)
downloadanaconda-02dd0fdb02a3425a6c3d842b31b9d07fb6a89af3.tar.gz
anaconda-02dd0fdb02a3425a6c3d842b31b9d07fb6a89af3.tar.xz
anaconda-02dd0fdb02a3425a6c3d842b31b9d07fb6a89af3.zip
Complete udev setup in linuxrc.s390 for automatic module loading
Patch from Steffen Maier.
-rw-r--r--loader/linuxrc.s39043
1 files changed, 37 insertions, 6 deletions
diff --git a/loader/linuxrc.s390 b/loader/linuxrc.s390
index b9d44a6d2..d32ee9bdd 100644
--- a/loader/linuxrc.s390
+++ b/loader/linuxrc.s390
@@ -40,6 +40,8 @@
# - udev rule for lcs/ctcm vs. cu3088
# - make sure netiucv gets loaded even without udev events since on no bus
+# debug: set -x
+
VERSION=1.2
export TEXTDOMAIN=s390installer
@@ -151,6 +153,7 @@ function startinetd()
echo
echo $"Connect now to $IPADDR and login as user root to start the installation."
echo $"E.g. using: ssh -X root@$IPADDR"
+ echo $"After login, please start the installation using: loader"
read
while : ; do
/bin/sh --login
@@ -188,6 +191,7 @@ function readcmsfile() # $1=dasdport $2=filename
echo $"DASD $dev could not be set online"
return 1
fi
+ udevadm settle
if ! cmsfscat -d /dev/dasda -a $2 > /tmp/$2; then
echo $"Could not read conf file $2 on CMS DASD $1."
fi
@@ -195,6 +199,7 @@ function readcmsfile() # $1=dasdport $2=filename
echo $"DASD $dev could not be set offline again"
return 1
fi
+ udevadm settle
# consequences of no more module unload: loader/anaconda can no longer
# use DASD option to online DASDs and set other DASD parameters!
}
@@ -262,11 +267,13 @@ function init_main() {
# udevd req'd by udevadm settle (/dev/.udev/queue)
# in readcmsfile, dialog_network_table, semantic_check_subchannels.
# (important: start udevd at the right time, e.g. after setup of /dev)
- echo $"starting udev..."
+ echo $"Starting udev..."
udevd --daemon
+ # debug: udevadm control --log-priority=debug
mount -t devpts /dev/pts /dev/pts
mount -t sysfs none /sys
+
# remount root fs rw
mount /dev/root / -o remount,rw
@@ -284,12 +291,23 @@ function init_main() {
echo -e "127.0.0.1\tlocalhost.localdomain localhost localhost4 localhost4.localdomain4" > /etc/hosts
echo -e "::1\t\tlocalhost.localdomain localhost localhost6 localhost6.localdomain6" >> /etc/hosts
- # init.c would also fork /sbin/dbus-uuidgen --ensure
- # and /sbin/dbus-daemon --system
+ /sbin/dbus-uuidgen --ensure &
+ [ $? != 0 ] && echo "error on calling /sbin/dbus-uuidgen --ensure"
+ /sbin/dbus-daemon --system &
+ [ $? != 0 ] && echo "error on calling /sbin/dbus-daemon --system"
fi # testing
}
+# trigger udev to automatically load device drivers
+function udev_setup() {
+ if [ -z "$testing" ]; then
+ # debug: udevadm monitor &
+ udevadm trigger
+ udevadm settle
+ fi # testing
+}
+
# from here on accesses to sysfs try to follow
# linux/Documentation/sysfs-rules.txt
@@ -462,7 +480,7 @@ declare -r BUSIDFORMAT=[[:xdigit:]][[:xdigit:]][[:xdigit:]][[:xdigit:]]
declare -r IDFORMAT=$PREFIXFORMAT.$SSIDFORMAT.$BUSIDFORMAT
declare -r SUBCHANNEL_TYPE_IO=0
-. /sbin/controlunits
+. /sbin/controlunits.sh
function cardtype2cleartext() {
local cardtype=$1
@@ -565,6 +583,7 @@ function set_device_online() {
echo $"Could not set device ($SUBCHANNELS) online"
return 1
fi
+ udevadm settle
local i=1
while : ; do
local online
@@ -754,6 +773,7 @@ function rollback_config() {
if [ "$NETTYPE" = "iucv" ]; then
if [ -n "$DEVICE" ]; then
sysecho /sys/bus/iucv/drivers/netiucv/remove $DEVICE
+ udevadm settle
fi
else # "$NETTYPE" != "iucv"
if [ -n "$SCH_R_DEVBUSID" ]; then
@@ -764,8 +784,10 @@ function rollback_config() {
esac
[ -f /sys/devices/${sysnettype}/$SCH_R_DEVBUSID/online ] && \
sysecho /sys/devices/${sysnettype}/$SCH_R_DEVBUSID/online "0"
+ udevadm settle
[ -f /sys/devices/${sysnettype}/$SCH_R_DEVBUSID/ungroup ] && \
sysecho /sys/devices/${sysnettype}/$SCH_R_DEVBUSID/ungroup "1"
+ udevadm settle
fi
fi
fi
@@ -1307,6 +1329,7 @@ function handle_subchannels() {
driver=$NETTYPE
fi
if sysecho /sys/bus/ccwgroup/drivers/${driver}/group "$SUBCHANNELS"; then
+ udevadm settle
case "$NETTYPE" in
qeth)
# Just preliminary card_type info until device goes online!
@@ -1797,6 +1820,7 @@ function handle_peerid() {
echo $"Could not create new IUCV connection to peer $PEERID"
return 1
fi
+ udevadm settle
# find netiucv with proper guest user ID in
# /sys/bus/iucv/drivers/netiucv/netiucv[0-9]+/user
local userpath
@@ -1927,6 +1951,12 @@ function do_ipaddr() {
ask IPADDR \
question_prefix_ipaddr question_choices_ipaddr \
-h helptext_ipaddr -s syntax_check_ipaddr
+ if [ "$ipv6" ]; then
+ # qeth_l3 would load ipv6 automatically but not qeth_l2
+ modprobe ipv6
+ tv disable_ipv6_autoconf
+ fi
+
# no handling/configuring of IPADDR yet, since more parameters needed
}
@@ -2686,6 +2716,7 @@ function final_check() {
### MAIN ###
init_main
+udev_setup
# Parse configuration
if [ -n "$CMSDASD" -a -n "$CMSCONFFILE" ]; then
@@ -2719,9 +2750,11 @@ if [ -r /sys/firmware/ipl/ipl_type ]; then
fi
sysecho /sys/bus/ccw/drivers/zfcp/$CD_DEVICE/online 1 \
|| echo $"Could not set FCP device $CD_DEVICE online"
+ udevadm settle
# port (WWPN) appears automatically
sysecho /sys/bus/ccw/drivers/zfcp/$CD_DEVICE/$WWPN/unit_add $LUN \
|| echo $"Could not add LUN $LUN at WWPN $WWPN on FCP device $CD_DEVICE"
+ udevadm settle
break
;;
n|N|[Nn][Oo])
@@ -2762,8 +2795,6 @@ while : ; do
fi
do_nettype
# precondition: driver (qeth/lcs/ctcm/netiucv) loaded incl. dependencies
- # only works, if ipv6 kernel module has been loaded before:
- [ "$NETTYPE" = "qeth" ] && tv disable_ipv6_autoconf
if [ "$NETTYPE" != "iucv" ]; then
# all interface types except for iucv have ccw config
[ -n "$CHANDEV" ] && do_chandev