summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Schwidefsky <schwidefsky@de.ibm.com>2011-07-24 10:48:28 +0200
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2011-07-24 10:48:22 +0200
commit5beab99100335936f4d845f9ae2f0e25796f2584 (patch)
tree001c61d9a2250caf3081aea8ab19590fb8fe6f1b
parent[S390] race safe external interrupt registration (diff)
downloadlinux-5beab99100335936f4d845f9ae2f0e25796f2584.tar.xz
linux-5beab99100335936f4d845f9ae2f0e25796f2584.zip
[S390] iucv cr0 enablement bit
Do not set the cr0 enablement bit for iucv by default in head[31|64].S, move the enablement to iucv_init in the iucv base layer. Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
-rw-r--r--arch/s390/kernel/head31.S2
-rw-r--r--arch/s390/kernel/head64.S2
-rw-r--r--net/iucv/iucv.c7
3 files changed, 7 insertions, 4 deletions
diff --git a/arch/s390/kernel/head31.S b/arch/s390/kernel/head31.S
index dd0d1e272be9..f21954b44dc1 100644
--- a/arch/s390/kernel/head31.S
+++ b/arch/s390/kernel/head31.S
@@ -45,7 +45,7 @@ ENTRY(startup_continue)
# virtual and never return ...
.align 8
.Lentry:.long 0x00080000,0x80000000 + _stext
-.Lctl: .long 0x04b50002 # cr0: various things
+.Lctl: .long 0x04b50000 # cr0: various things
.long 0 # cr1: primary space segment table
.long .Lduct # cr2: dispatchable unit control table
.long 0 # cr3: instruction authorization
diff --git a/arch/s390/kernel/head64.S b/arch/s390/kernel/head64.S
index 188602898c17..b6d30135e2ec 100644
--- a/arch/s390/kernel/head64.S
+++ b/arch/s390/kernel/head64.S
@@ -46,7 +46,7 @@ ENTRY(startup_continue)
.align 16
.LPG1:
.Lentry:.quad 0x0000000180000000,_stext
-.Lctl: .quad 0x04350002 # cr0: various things
+.Lctl: .quad 0x04350000 # cr0: various things
.quad 0 # cr1: primary space segment table
.quad .Lduct # cr2: dispatchable unit control table
.quad 0 # cr3: instruction authorization
diff --git a/net/iucv/iucv.c b/net/iucv/iucv.c
index 7f9124914b13..f2b713847b45 100644
--- a/net/iucv/iucv.c
+++ b/net/iucv/iucv.c
@@ -1988,12 +1988,13 @@ static int __init iucv_init(void)
rc = -EPROTONOSUPPORT;
goto out;
}
+ ctl_set_bit(0, 1);
rc = iucv_query_maxconn();
if (rc)
- goto out;
+ goto out_ctl;
rc = register_external_interrupt(0x4000, iucv_external_interrupt);
if (rc)
- goto out;
+ goto out_ctl;
iucv_root = root_device_register("iucv");
if (IS_ERR(iucv_root)) {
rc = PTR_ERR(iucv_root);
@@ -2055,6 +2056,8 @@ out_free:
root_device_unregister(iucv_root);
out_int:
unregister_external_interrupt(0x4000, iucv_external_interrupt);
+out_ctl:
+ ctl_clear_bit(0, 1);
out:
return rc;
}