aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@woody.osdl.org>2006-12-15 13:22:22 -0500
committerLinus Torvalds <torvalds@woody.osdl.org>2006-12-15 13:22:22 -0500
commit701dfbe71903413d10caf2790259bccbabbedcf5 (patch)
tree6d87a6d1ad2bc4672684197aa1788890bead0d1e
parentd1526e2cda64d5a1de56aef50bad9e5df14245c2 (diff)
parente42734e270b9e5ada83188d73b733533ce11ee4a (diff)
Merge branch 'for-linus' of git://git390.osdl.marist.edu/pub/scm/linux-2.6
* 'for-linus' of git://git390.osdl.marist.edu/pub/scm/linux-2.6: [S390] cio: css_register_subchannel race. [S390] Save prefix register for dump on panic [S390] Fix reboot hang [S390] Fix reboot hang on LPARs [S390] sclp_cpi module license. [S390] zcrypt: module unload fixes. [S390] Hipersocket multicast queue: make sure outbound handler is called [S390] hypfs fixes [S390] update default configuration
-rw-r--r--arch/s390/defconfig47
-rw-r--r--arch/s390/hypfs/hypfs_diag.c4
-rw-r--r--arch/s390/kernel/ipl.c59
-rw-r--r--arch/s390/kernel/reipl.S6
-rw-r--r--arch/s390/kernel/reipl64.S5
-rw-r--r--arch/s390/kernel/reset.S42
-rw-r--r--drivers/s390/char/sclp_cpi.c2
-rw-r--r--drivers/s390/cio/cio.c25
-rw-r--r--drivers/s390/cio/css.c3
-rw-r--r--drivers/s390/cio/qdio.c13
-rw-r--r--drivers/s390/crypto/ap_bus.c14
-rw-r--r--include/asm-s390/qdio.h1
-rw-r--r--include/asm-s390/reset.h1
13 files changed, 150 insertions, 72 deletions
diff --git a/arch/s390/defconfig b/arch/s390/defconfig
index a6ec919ba83f..5368cf4a350e 100644
--- a/arch/s390/defconfig
+++ b/arch/s390/defconfig
@@ -1,14 +1,15 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.19-rc2 3# Linux kernel version: 2.6.20-rc1
4# Wed Oct 18 17:11:10 2006 4# Fri Dec 15 16:52:28 2006
5# 5#
6CONFIG_MMU=y 6CONFIG_MMU=y
7CONFIG_LOCKDEP_SUPPORT=y 7CONFIG_LOCKDEP_SUPPORT=y
8CONFIG_STACKTRACE_SUPPORT=y 8CONFIG_STACKTRACE_SUPPORT=y
9CONFIG_RWSEM_XCHGADD_ALGORITHM=y 9CONFIG_RWSEM_XCHGADD_ALGORITHM=y
10# CONFIG_ARCH_HAS_ILOG2_U32 is not set
11# CONFIG_ARCH_HAS_ILOG2_U64 is not set
10CONFIG_GENERIC_HWEIGHT=y 12CONFIG_GENERIC_HWEIGHT=y
11CONFIG_GENERIC_CALIBRATE_DELAY=y
12CONFIG_GENERIC_TIME=y 13CONFIG_GENERIC_TIME=y
13CONFIG_S390=y 14CONFIG_S390=y
14CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" 15CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
@@ -37,12 +38,13 @@ CONFIG_AUDIT=y
37CONFIG_IKCONFIG=y 38CONFIG_IKCONFIG=y
38CONFIG_IKCONFIG_PROC=y 39CONFIG_IKCONFIG_PROC=y
39# CONFIG_CPUSETS is not set 40# CONFIG_CPUSETS is not set
41CONFIG_SYSFS_DEPRECATED=y
40# CONFIG_RELAY is not set 42# CONFIG_RELAY is not set
41CONFIG_INITRAMFS_SOURCE="" 43CONFIG_INITRAMFS_SOURCE=""
42# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set 44# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
43CONFIG_SYSCTL=y 45CONFIG_SYSCTL=y
44# CONFIG_EMBEDDED is not set 46# CONFIG_EMBEDDED is not set
45# CONFIG_SYSCTL_SYSCALL is not set 47CONFIG_SYSCTL_SYSCALL=y
46CONFIG_KALLSYMS=y 48CONFIG_KALLSYMS=y
47# CONFIG_KALLSYMS_ALL is not set 49# CONFIG_KALLSYMS_ALL is not set
48# CONFIG_KALLSYMS_EXTRA_PASS is not set 50# CONFIG_KALLSYMS_EXTRA_PASS is not set
@@ -119,6 +121,7 @@ CONFIG_PACK_STACK=y
119CONFIG_CHECK_STACK=y 121CONFIG_CHECK_STACK=y
120CONFIG_STACK_GUARD=256 122CONFIG_STACK_GUARD=256
121# CONFIG_WARN_STACK is not set 123# CONFIG_WARN_STACK is not set
124CONFIG_ARCH_POPULATES_NODE_MAP=y
122CONFIG_SELECT_MEMORY_MODEL=y 125CONFIG_SELECT_MEMORY_MODEL=y
123CONFIG_FLATMEM_MANUAL=y 126CONFIG_FLATMEM_MANUAL=y
124# CONFIG_DISCONTIGMEM_MANUAL is not set 127# CONFIG_DISCONTIGMEM_MANUAL is not set
@@ -128,6 +131,7 @@ CONFIG_FLAT_NODE_MEM_MAP=y
128# CONFIG_SPARSEMEM_STATIC is not set 131# CONFIG_SPARSEMEM_STATIC is not set
129CONFIG_SPLIT_PTLOCK_CPUS=4 132CONFIG_SPLIT_PTLOCK_CPUS=4
130CONFIG_RESOURCES_64BIT=y 133CONFIG_RESOURCES_64BIT=y
134CONFIG_HOLES_IN_ZONE=y
131 135
132# 136#
133# I/O subsystem configuration 137# I/O subsystem configuration
@@ -196,6 +200,7 @@ CONFIG_INET_TCP_DIAG=y
196# CONFIG_TCP_CONG_ADVANCED is not set 200# CONFIG_TCP_CONG_ADVANCED is not set
197CONFIG_TCP_CONG_CUBIC=y 201CONFIG_TCP_CONG_CUBIC=y
198CONFIG_DEFAULT_TCP_CONG="cubic" 202CONFIG_DEFAULT_TCP_CONG="cubic"
203# CONFIG_TCP_MD5SIG is not set
199CONFIG_IPV6=y 204CONFIG_IPV6=y
200# CONFIG_IPV6_PRIVACY is not set 205# CONFIG_IPV6_PRIVACY is not set
201# CONFIG_IPV6_ROUTER_PREF is not set 206# CONFIG_IPV6_ROUTER_PREF is not set
@@ -211,7 +216,6 @@ CONFIG_INET6_XFRM_MODE_BEET=y
211# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set 216# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
212CONFIG_IPV6_SIT=y 217CONFIG_IPV6_SIT=y
213# CONFIG_IPV6_TUNNEL is not set 218# CONFIG_IPV6_TUNNEL is not set
214# CONFIG_IPV6_SUBTREES is not set
215# CONFIG_IPV6_MULTIPLE_TABLES is not set 219# CONFIG_IPV6_MULTIPLE_TABLES is not set
216# CONFIG_NETWORK_SECMARK is not set 220# CONFIG_NETWORK_SECMARK is not set
217# CONFIG_NETFILTER is not set 221# CONFIG_NETFILTER is not set
@@ -246,6 +250,7 @@ CONFIG_IPV6_SIT=y
246# QoS and/or fair queueing 250# QoS and/or fair queueing
247# 251#
248CONFIG_NET_SCHED=y 252CONFIG_NET_SCHED=y
253CONFIG_NET_SCH_FIFO=y
249CONFIG_NET_SCH_CLK_JIFFIES=y 254CONFIG_NET_SCH_CLK_JIFFIES=y
250# CONFIG_NET_SCH_CLK_GETTIMEOFDAY is not set 255# CONFIG_NET_SCH_CLK_GETTIMEOFDAY is not set
251# CONFIG_NET_SCH_CLK_CPU is not set 256# CONFIG_NET_SCH_CLK_CPU is not set
@@ -277,6 +282,7 @@ CONFIG_NET_CLS_ROUTE=y
277CONFIG_NET_CLS_FW=m 282CONFIG_NET_CLS_FW=m
278CONFIG_NET_CLS_U32=m 283CONFIG_NET_CLS_U32=m
279# CONFIG_CLS_U32_PERF is not set 284# CONFIG_CLS_U32_PERF is not set
285CONFIG_CLS_U32_MARK=y
280CONFIG_NET_CLS_RSVP=m 286CONFIG_NET_CLS_RSVP=m
281CONFIG_NET_CLS_RSVP6=m 287CONFIG_NET_CLS_RSVP6=m
282# CONFIG_NET_EMATCH is not set 288# CONFIG_NET_EMATCH is not set
@@ -315,6 +321,7 @@ CONFIG_SYS_HYPERVISOR=y
315# 321#
316# CONFIG_RAID_ATTRS is not set 322# CONFIG_RAID_ATTRS is not set
317CONFIG_SCSI=y 323CONFIG_SCSI=y
324# CONFIG_SCSI_TGT is not set
318CONFIG_SCSI_NETLINK=y 325CONFIG_SCSI_NETLINK=y
319CONFIG_SCSI_PROC_FS=y 326CONFIG_SCSI_PROC_FS=y
320 327
@@ -335,6 +342,7 @@ CONFIG_CHR_DEV_SG=y
335CONFIG_SCSI_MULTI_LUN=y 342CONFIG_SCSI_MULTI_LUN=y
336CONFIG_SCSI_CONSTANTS=y 343CONFIG_SCSI_CONSTANTS=y
337CONFIG_SCSI_LOGGING=y 344CONFIG_SCSI_LOGGING=y
345CONFIG_SCSI_SCAN_ASYNC=y
338 346
339# 347#
340# SCSI Transports 348# SCSI Transports
@@ -546,6 +554,7 @@ CONFIG_DNOTIFY=y
546# CONFIG_AUTOFS_FS is not set 554# CONFIG_AUTOFS_FS is not set
547# CONFIG_AUTOFS4_FS is not set 555# CONFIG_AUTOFS4_FS is not set
548# CONFIG_FUSE_FS is not set 556# CONFIG_FUSE_FS is not set
557CONFIG_GENERIC_ACL=y
549 558
550# 559#
551# CD-ROM/DVD Filesystems 560# CD-ROM/DVD Filesystems
@@ -571,7 +580,7 @@ CONFIG_TMPFS=y
571CONFIG_TMPFS_POSIX_ACL=y 580CONFIG_TMPFS_POSIX_ACL=y
572# CONFIG_HUGETLB_PAGE is not set 581# CONFIG_HUGETLB_PAGE is not set
573CONFIG_RAMFS=y 582CONFIG_RAMFS=y
574# CONFIG_CONFIGFS_FS is not set 583CONFIG_CONFIGFS_FS=m
575 584
576# 585#
577# Miscellaneous filesystems 586# Miscellaneous filesystems
@@ -616,7 +625,6 @@ CONFIG_SUNRPC=y
616# CONFIG_CODA_FS is not set 625# CONFIG_CODA_FS is not set
617# CONFIG_AFS_FS is not set 626# CONFIG_AFS_FS is not set
618# CONFIG_9P_FS is not set 627# CONFIG_9P_FS is not set
619CONFIG_GENERIC_ACL=y
620 628
621# 629#
622# Partition Types 630# Partition Types
@@ -646,6 +654,14 @@ CONFIG_MSDOS_PARTITION=y
646# CONFIG_NLS is not set 654# CONFIG_NLS is not set
647 655
648# 656#
657# Distributed Lock Manager
658#
659CONFIG_DLM=m
660CONFIG_DLM_TCP=y
661# CONFIG_DLM_SCTP is not set
662# CONFIG_DLM_DEBUG is not set
663
664#
649# Instrumentation Support 665# Instrumentation Support
650# 666#
651 667
@@ -663,6 +679,8 @@ CONFIG_TRACE_IRQFLAGS_SUPPORT=y
663CONFIG_ENABLE_MUST_CHECK=y 679CONFIG_ENABLE_MUST_CHECK=y
664CONFIG_MAGIC_SYSRQ=y 680CONFIG_MAGIC_SYSRQ=y
665# CONFIG_UNUSED_SYMBOLS is not set 681# CONFIG_UNUSED_SYMBOLS is not set
682CONFIG_DEBUG_FS=y
683CONFIG_HEADERS_CHECK=y
666CONFIG_DEBUG_KERNEL=y 684CONFIG_DEBUG_KERNEL=y
667CONFIG_LOG_BUF_SHIFT=17 685CONFIG_LOG_BUF_SHIFT=17
668# CONFIG_SCHEDSTATS is not set 686# CONFIG_SCHEDSTATS is not set
@@ -679,13 +697,11 @@ CONFIG_DEBUG_SPINLOCK_SLEEP=y
679# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set 697# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
680# CONFIG_DEBUG_KOBJECT is not set 698# CONFIG_DEBUG_KOBJECT is not set
681# CONFIG_DEBUG_INFO is not set 699# CONFIG_DEBUG_INFO is not set
682CONFIG_DEBUG_FS=y
683# CONFIG_DEBUG_VM is not set 700# CONFIG_DEBUG_VM is not set
684# CONFIG_DEBUG_LIST is not set 701# CONFIG_DEBUG_LIST is not set
685# CONFIG_FRAME_POINTER is not set 702# CONFIG_FRAME_POINTER is not set
686# CONFIG_UNWIND_INFO is not set 703# CONFIG_UNWIND_INFO is not set
687CONFIG_FORCED_INLINING=y 704CONFIG_FORCED_INLINING=y
688CONFIG_HEADERS_CHECK=y
689# CONFIG_RCU_TORTURE_TEST is not set 705# CONFIG_RCU_TORTURE_TEST is not set
690# CONFIG_LKDTM is not set 706# CONFIG_LKDTM is not set
691 707
@@ -699,10 +715,11 @@ CONFIG_HEADERS_CHECK=y
699# Cryptographic options 715# Cryptographic options
700# 716#
701CONFIG_CRYPTO=y 717CONFIG_CRYPTO=y
702CONFIG_CRYPTO_ALGAPI=m 718CONFIG_CRYPTO_ALGAPI=y
703CONFIG_CRYPTO_BLKCIPHER=m 719CONFIG_CRYPTO_BLKCIPHER=y
704CONFIG_CRYPTO_MANAGER=m 720CONFIG_CRYPTO_MANAGER=y
705# CONFIG_CRYPTO_HMAC is not set 721# CONFIG_CRYPTO_HMAC is not set
722# CONFIG_CRYPTO_XCBC is not set
706# CONFIG_CRYPTO_NULL is not set 723# CONFIG_CRYPTO_NULL is not set
707# CONFIG_CRYPTO_MD4 is not set 724# CONFIG_CRYPTO_MD4 is not set
708# CONFIG_CRYPTO_MD5 is not set 725# CONFIG_CRYPTO_MD5 is not set
@@ -713,8 +730,10 @@ CONFIG_CRYPTO_MANAGER=m
713# CONFIG_CRYPTO_SHA512 is not set 730# CONFIG_CRYPTO_SHA512 is not set
714# CONFIG_CRYPTO_WP512 is not set 731# CONFIG_CRYPTO_WP512 is not set
715# CONFIG_CRYPTO_TGR192 is not set 732# CONFIG_CRYPTO_TGR192 is not set
733# CONFIG_CRYPTO_GF128MUL is not set
716CONFIG_CRYPTO_ECB=m 734CONFIG_CRYPTO_ECB=m
717CONFIG_CRYPTO_CBC=m 735CONFIG_CRYPTO_CBC=y
736# CONFIG_CRYPTO_LRW is not set
718# CONFIG_CRYPTO_DES is not set 737# CONFIG_CRYPTO_DES is not set
719# CONFIG_CRYPTO_DES_S390 is not set 738# CONFIG_CRYPTO_DES_S390 is not set
720# CONFIG_CRYPTO_BLOWFISH is not set 739# CONFIG_CRYPTO_BLOWFISH is not set
@@ -740,8 +759,10 @@ CONFIG_CRYPTO_CBC=m
740# 759#
741# Library routines 760# Library routines
742# 761#
762CONFIG_BITREVERSE=m
743# CONFIG_CRC_CCITT is not set 763# CONFIG_CRC_CCITT is not set
744# CONFIG_CRC16 is not set 764# CONFIG_CRC16 is not set
745CONFIG_CRC32=m 765CONFIG_CRC32=m
746# CONFIG_LIBCRC32C is not set 766# CONFIG_LIBCRC32C is not set
747CONFIG_PLIST=y 767CONFIG_PLIST=y
768CONFIG_IOMAP_COPY=y
diff --git a/arch/s390/hypfs/hypfs_diag.c b/arch/s390/hypfs/hypfs_diag.c
index 443fa377d9ff..2782cf9da5b4 100644
--- a/arch/s390/hypfs/hypfs_diag.c
+++ b/arch/s390/hypfs/hypfs_diag.c
@@ -379,7 +379,7 @@ static void *diag204_alloc_vbuf(int pages)
379static void *diag204_alloc_rbuf(void) 379static void *diag204_alloc_rbuf(void)
380{ 380{
381 diag204_buf = (void*)__get_free_pages(GFP_KERNEL,0); 381 diag204_buf = (void*)__get_free_pages(GFP_KERNEL,0);
382 if (diag204_buf) 382 if (!diag204_buf)
383 return ERR_PTR(-ENOMEM); 383 return ERR_PTR(-ENOMEM);
384 diag204_buf_pages = 1; 384 diag204_buf_pages = 1;
385 return diag204_buf; 385 return diag204_buf;
@@ -521,7 +521,7 @@ __init int hypfs_diag_init(void)
521 } 521 }
522 rc = diag224_get_name_table(); 522 rc = diag224_get_name_table();
523 if (rc) { 523 if (rc) {
524 diag224_delete_name_table(); 524 diag204_free_buffer();
525 printk(KERN_ERR "hypfs: could not get name table.\n"); 525 printk(KERN_ERR "hypfs: could not get name table.\n");
526 } 526 }
527 return rc; 527 return rc;
diff --git a/arch/s390/kernel/ipl.c b/arch/s390/kernel/ipl.c
index a36bea1188d9..9e9972e8a52b 100644
--- a/arch/s390/kernel/ipl.c
+++ b/arch/s390/kernel/ipl.c
@@ -609,42 +609,12 @@ static ssize_t on_panic_store(struct subsystem *subsys, const char *buf,
609static struct subsys_attribute on_panic_attr = 609static struct subsys_attribute on_panic_attr =
610 __ATTR(on_panic, 0644, on_panic_show, on_panic_store); 610 __ATTR(on_panic, 0644, on_panic_show, on_panic_store);
611 611
612static void print_fcp_block(struct ipl_parameter_block *fcp_block)
613{
614 printk(KERN_EMERG "wwpn: %016llx\n",
615 (unsigned long long)fcp_block->ipl_info.fcp.wwpn);
616 printk(KERN_EMERG "lun: %016llx\n",
617 (unsigned long long)fcp_block->ipl_info.fcp.lun);
618 printk(KERN_EMERG "bootprog: %lld\n",
619 (unsigned long long)fcp_block->ipl_info.fcp.bootprog);
620 printk(KERN_EMERG "br_lba: %lld\n",
621 (unsigned long long)fcp_block->ipl_info.fcp.br_lba);
622 printk(KERN_EMERG "device: %llx\n",
623 (unsigned long long)fcp_block->ipl_info.fcp.devno);
624 printk(KERN_EMERG "opt: %x\n", fcp_block->ipl_info.fcp.opt);
625}
626
627void do_reipl(void) 612void do_reipl(void)
628{ 613{
629 struct ccw_dev_id devid; 614 struct ccw_dev_id devid;
630 static char buf[100]; 615 static char buf[100];
631 char loadparm[LOADPARM_LEN + 1]; 616 char loadparm[LOADPARM_LEN + 1];
632 617
633 switch (reipl_type) {
634 case IPL_TYPE_CCW:
635 reipl_get_ascii_loadparm(loadparm);
636 printk(KERN_EMERG "reboot on ccw device: 0.0.%04x\n",
637 reipl_block_ccw->ipl_info.ccw.devno);
638 printk(KERN_EMERG "loadparm = '%s'\n", loadparm);
639 break;
640 case IPL_TYPE_FCP:
641 printk(KERN_EMERG "reboot on fcp device:\n");
642 print_fcp_block(reipl_block_fcp);
643 break;
644 default:
645 break;
646 }
647
648 switch (reipl_method) { 618 switch (reipl_method) {
649 case IPL_METHOD_CCW_CIO: 619 case IPL_METHOD_CCW_CIO:
650 devid.devno = reipl_block_ccw->ipl_info.ccw.devno; 620 devid.devno = reipl_block_ccw->ipl_info.ccw.devno;
@@ -654,6 +624,7 @@ void do_reipl(void)
654 reipl_ccw_dev(&devid); 624 reipl_ccw_dev(&devid);
655 break; 625 break;
656 case IPL_METHOD_CCW_VM: 626 case IPL_METHOD_CCW_VM:
627 reipl_get_ascii_loadparm(loadparm);
657 if (strlen(loadparm) == 0) 628 if (strlen(loadparm) == 0)
658 sprintf(buf, "IPL %X", 629 sprintf(buf, "IPL %X",
659 reipl_block_ccw->ipl_info.ccw.devno); 630 reipl_block_ccw->ipl_info.ccw.devno);
@@ -683,7 +654,6 @@ void do_reipl(void)
683 diag308(DIAG308_IPL, NULL); 654 diag308(DIAG308_IPL, NULL);
684 break; 655 break;
685 } 656 }
686 printk(KERN_EMERG "reboot failed!\n");
687 signal_processor(smp_processor_id(), sigp_stop_and_store_status); 657 signal_processor(smp_processor_id(), sigp_stop_and_store_status);
688} 658}
689 659
@@ -692,19 +662,6 @@ static void do_dump(void)
692 struct ccw_dev_id devid; 662 struct ccw_dev_id devid;
693 static char buf[100]; 663 static char buf[100];
694 664
695 switch (dump_type) {
696 case IPL_TYPE_CCW:
697 printk(KERN_EMERG "Automatic dump on ccw device: 0.0.%04x\n",
698 dump_block_ccw->ipl_info.ccw.devno);
699 break;
700 case IPL_TYPE_FCP:
701 printk(KERN_EMERG "Automatic dump on fcp device:\n");
702 print_fcp_block(dump_block_fcp);
703 break;
704 default:
705 return;
706 }
707
708 switch (dump_method) { 665 switch (dump_method) {
709 case IPL_METHOD_CCW_CIO: 666 case IPL_METHOD_CCW_CIO:
710 smp_send_stop(); 667 smp_send_stop();
@@ -1037,15 +994,21 @@ static void do_reset_calls(void)
1037} 994}
1038 995
1039extern void reset_mcck_handler(void); 996extern void reset_mcck_handler(void);
997extern void reset_pgm_handler(void);
998extern __u32 dump_prefix_page;
1040 999
1041void s390_reset_system(void) 1000void s390_reset_system(void)
1042{ 1001{
1043 struct _lowcore *lc; 1002 struct _lowcore *lc;
1044 1003
1045 /* Stack for interrupt/machine check handler */
1046 lc = (struct _lowcore *)(unsigned long) store_prefix(); 1004 lc = (struct _lowcore *)(unsigned long) store_prefix();
1005
1006 /* Stack for interrupt/machine check handler */
1047 lc->panic_stack = S390_lowcore.panic_stack; 1007 lc->panic_stack = S390_lowcore.panic_stack;
1048 1008
1009 /* Save prefix page address for dump case */
1010 dump_prefix_page = (unsigned long) lc;
1011
1049 /* Disable prefixing */ 1012 /* Disable prefixing */
1050 set_prefix(0); 1013 set_prefix(0);
1051 1014
@@ -1056,5 +1019,11 @@ void s390_reset_system(void)
1056 S390_lowcore.mcck_new_psw.mask = PSW_KERNEL_BITS & ~PSW_MASK_MCHECK; 1019 S390_lowcore.mcck_new_psw.mask = PSW_KERNEL_BITS & ~PSW_MASK_MCHECK;
1057 S390_lowcore.mcck_new_psw.addr = 1020 S390_lowcore.mcck_new_psw.addr =
1058 PSW_ADDR_AMODE | (unsigned long) &reset_mcck_handler; 1021 PSW_ADDR_AMODE | (unsigned long) &reset_mcck_handler;
1022
1023 /* Set new program check handler */
1024 S390_lowcore.program_new_psw.mask = PSW_KERNEL_BITS & ~PSW_MASK_MCHECK;
1025 S390_lowcore.program_new_psw.addr =
1026 PSW_ADDR_AMODE | (unsigned long) &reset_pgm_handler;
1027
1059 do_reset_calls(); 1028 do_reset_calls();
1060} 1029}
diff --git a/arch/s390/kernel/reipl.S b/arch/s390/kernel/reipl.S
index f9434d42ce9f..c3f4d9b95083 100644
--- a/arch/s390/kernel/reipl.S
+++ b/arch/s390/kernel/reipl.S
@@ -16,7 +16,7 @@ do_reipl_asm: basr %r13,0
16 stm %r0,%r15,__LC_GPREGS_SAVE_AREA 16 stm %r0,%r15,__LC_GPREGS_SAVE_AREA
17 stctl %c0,%c15,__LC_CREGS_SAVE_AREA 17 stctl %c0,%c15,__LC_CREGS_SAVE_AREA
18 stam %a0,%a15,__LC_AREGS_SAVE_AREA 18 stam %a0,%a15,__LC_AREGS_SAVE_AREA
19 stpx __LC_PREFIX_SAVE_AREA 19 mvc __LC_PREFIX_SAVE_AREA(4),dump_prefix_page-.Lpg0(%r13)
20 stckc .Lclkcmp-.Lpg0(%r13) 20 stckc .Lclkcmp-.Lpg0(%r13)
21 mvc __LC_CLOCK_COMP_SAVE_AREA(8),.Lclkcmp-.Lpg0(%r13) 21 mvc __LC_CLOCK_COMP_SAVE_AREA(8),.Lclkcmp-.Lpg0(%r13)
22 stpt __LC_CPU_TIMER_SAVE_AREA 22 stpt __LC_CPU_TIMER_SAVE_AREA
@@ -79,3 +79,7 @@ do_reipl_asm: basr %r13,0
79 .long 0x00000000,0x00000000 79 .long 0x00000000,0x00000000
80 .long 0x00000000,0x00000000 80 .long 0x00000000,0x00000000
81 .long 0x00000000,0x00000000 81 .long 0x00000000,0x00000000
82 .globl dump_prefix_page
83dump_prefix_page:
84 .long 0x00000000
85
diff --git a/arch/s390/kernel/reipl64.S b/arch/s390/kernel/reipl64.S
index f18ef260ca23..dbb3eed38865 100644
--- a/arch/s390/kernel/reipl64.S
+++ b/arch/s390/kernel/reipl64.S
@@ -20,7 +20,7 @@ do_reipl_asm: basr %r13,0
20 stg %r0,__LC_GPREGS_SAVE_AREA-0x1000+8(%r1) 20 stg %r0,__LC_GPREGS_SAVE_AREA-0x1000+8(%r1)
21 stctg %c0,%c15,__LC_CREGS_SAVE_AREA-0x1000(%r1) 21 stctg %c0,%c15,__LC_CREGS_SAVE_AREA-0x1000(%r1)
22 stam %a0,%a15,__LC_AREGS_SAVE_AREA-0x1000(%r1) 22 stam %a0,%a15,__LC_AREGS_SAVE_AREA-0x1000(%r1)
23 stpx __LC_PREFIX_SAVE_AREA-0x1000(%r1) 23 mvc __LC_PREFIX_SAVE_AREA-0x1000(4,%r1),dump_prefix_page-.Lpg0(%r13)
24 stfpc __LC_FP_CREG_SAVE_AREA-0x1000(%r1) 24 stfpc __LC_FP_CREG_SAVE_AREA-0x1000(%r1)
25 stckc .Lclkcmp-.Lpg0(%r13) 25 stckc .Lclkcmp-.Lpg0(%r13)
26 mvc __LC_CLOCK_COMP_SAVE_AREA-0x1000(8,%r1),.Lclkcmp-.Lpg0(%r13) 26 mvc __LC_CLOCK_COMP_SAVE_AREA-0x1000(8,%r1),.Lclkcmp-.Lpg0(%r13)
@@ -103,3 +103,6 @@ do_reipl_asm: basr %r13,0
103 .long 0x00000000,0x00000000 103 .long 0x00000000,0x00000000
104 .long 0x00000000,0x00000000 104 .long 0x00000000,0x00000000
105 .long 0x00000000,0x00000000 105 .long 0x00000000,0x00000000
106 .globl dump_prefix_page
107dump_prefix_page:
108 .long 0x00000000
diff --git a/arch/s390/kernel/reset.S b/arch/s390/kernel/reset.S
index be8688c0665c..8a87355161fa 100644
--- a/arch/s390/kernel/reset.S
+++ b/arch/s390/kernel/reset.S
@@ -3,6 +3,7 @@
3 * 3 *
4 * Copyright (C) IBM Corp. 2006 4 * Copyright (C) IBM Corp. 2006
5 * Author(s): Heiko Carstens <heiko.carstens@de.ibm.com> 5 * Author(s): Heiko Carstens <heiko.carstens@de.ibm.com>
6 * Michael Holzheu <holzheu@de.ibm.com>
6 */ 7 */
7 8
8#include <asm/ptrace.h> 9#include <asm/ptrace.h>
@@ -27,6 +28,26 @@ reset_mcck_handler:
27s390_reset_mcck_handler: 28s390_reset_mcck_handler:
28 .quad 0 29 .quad 0
29 30
31 .globl reset_pgm_handler
32reset_pgm_handler:
33 stmg %r0,%r15,__LC_SAVE_AREA
34 basr %r13,0
350: lg %r15,__LC_PANIC_STACK # load panic stack
36 aghi %r15,-STACK_FRAME_OVERHEAD
37 lg %r1,s390_reset_pgm_handler-0b(%r13)
38 ltgr %r1,%r1
39 jz 1f
40 basr %r14,%r1
41 lmg %r0,%r15,__LC_SAVE_AREA
42 lpswe __LC_PGM_OLD_PSW
431: lpswe disabled_wait_psw-0b(%r13)
44 .globl s390_reset_pgm_handler
45s390_reset_pgm_handler:
46 .quad 0
47 .align 8
48disabled_wait_psw:
49 .quad 0x0002000180000000,0x0000000000000000 + reset_pgm_handler
50
30#else /* CONFIG_64BIT */ 51#else /* CONFIG_64BIT */
31 52
32 .globl reset_mcck_handler 53 .globl reset_mcck_handler
@@ -45,4 +66,25 @@ reset_mcck_handler:
45s390_reset_mcck_handler: 66s390_reset_mcck_handler:
46 .long 0 67 .long 0
47 68
69 .globl reset_pgm_handler
70reset_pgm_handler:
71 stm %r0,%r15,__LC_SAVE_AREA
72 basr %r13,0
730: l %r15,__LC_PANIC_STACK # load panic stack
74 ahi %r15,-STACK_FRAME_OVERHEAD
75 l %r1,s390_reset_pgm_handler-0b(%r13)
76 ltr %r1,%r1
77 jz 1f
78 basr %r14,%r1
79 lm %r0,%r15,__LC_SAVE_AREA
80 lpsw __LC_PGM_OLD_PSW
81
821: lpsw disabled_wait_psw-0b(%r13)
83 .globl s390_reset_pgm_handler
84s390_reset_pgm_handler:
85 .long 0
86disabled_wait_psw:
87 .align 8
88 .long 0x000a0000,0x00000000 + reset_pgm_handler
89
48#endif /* CONFIG_64BIT */ 90#endif /* CONFIG_64BIT */
diff --git a/drivers/s390/char/sclp_cpi.c b/drivers/s390/char/sclp_cpi.c
index f7c10d954ec6..4f873ae148b7 100644
--- a/drivers/s390/char/sclp_cpi.c
+++ b/drivers/s390/char/sclp_cpi.c
@@ -49,6 +49,8 @@ static struct sclp_register sclp_cpi_event =
49 .send_mask = EvTyp_CtlProgIdent_Mask 49 .send_mask = EvTyp_CtlProgIdent_Mask
50}; 50};
51 51
52MODULE_LICENSE("GPL");
53
52MODULE_AUTHOR( 54MODULE_AUTHOR(
53 "Martin Peschke, IBM Deutschland Entwicklung GmbH " 55 "Martin Peschke, IBM Deutschland Entwicklung GmbH "
54 "<mpeschke@de.ibm.com>"); 56 "<mpeschke@de.ibm.com>");
diff --git a/drivers/s390/cio/cio.c b/drivers/s390/cio/cio.c
index 7835a714a405..3a403f195cf8 100644
--- a/drivers/s390/cio/cio.c
+++ b/drivers/s390/cio/cio.c
@@ -871,11 +871,32 @@ __clear_subchannel_easy(struct subchannel_id schid)
871 return -EBUSY; 871 return -EBUSY;
872} 872}
873 873
874static int pgm_check_occured;
875
876static void cio_reset_pgm_check_handler(void)
877{
878 pgm_check_occured = 1;
879}
880
881static int stsch_reset(struct subchannel_id schid, volatile struct schib *addr)
882{
883 int rc;
884
885 pgm_check_occured = 0;
886 s390_reset_pgm_handler = cio_reset_pgm_check_handler;
887 rc = stsch(schid, addr);
888 s390_reset_pgm_handler = NULL;
889 if (pgm_check_occured)
890 return -EIO;
891 else
892 return rc;
893}
894
874static int __shutdown_subchannel_easy(struct subchannel_id schid, void *data) 895static int __shutdown_subchannel_easy(struct subchannel_id schid, void *data)
875{ 896{
876 struct schib schib; 897 struct schib schib;
877 898
878 if (stsch_err(schid, &schib)) 899 if (stsch_reset(schid, &schib))
879 return -ENXIO; 900 return -ENXIO;
880 if (!schib.pmcw.ena) 901 if (!schib.pmcw.ena)
881 return 0; 902 return 0;
@@ -972,7 +993,7 @@ static int __reipl_subchannel_match(struct subchannel_id schid, void *data)
972 struct schib schib; 993 struct schib schib;
973 struct sch_match_id *match_id = data; 994 struct sch_match_id *match_id = data;
974 995
975 if (stsch_err(schid, &schib)) 996 if (stsch_reset(schid, &schib))
976 return -ENXIO; 997 return -ENXIO;
977 if (schib.pmcw.dnv && 998 if (schib.pmcw.dnv &&
978 (schib.pmcw.dev == match_id->devid.devno) && 999 (schib.pmcw.dev == match_id->devid.devno) &&
diff --git a/drivers/s390/cio/css.c b/drivers/s390/cio/css.c
index 4c81d890791e..9d6c02446863 100644
--- a/drivers/s390/cio/css.c
+++ b/drivers/s390/cio/css.c
@@ -139,6 +139,8 @@ css_register_subchannel(struct subchannel *sch)
139 sch->dev.release = &css_subchannel_release; 139 sch->dev.release = &css_subchannel_release;
140 sch->dev.groups = subch_attr_groups; 140 sch->dev.groups = subch_attr_groups;
141 141
142 css_get_ssd_info(sch);
143
142 /* make it known to the system */ 144 /* make it known to the system */
143 ret = css_sch_device_register(sch); 145 ret = css_sch_device_register(sch);
144 if (ret) { 146 if (ret) {
@@ -146,7 +148,6 @@ css_register_subchannel(struct subchannel *sch)
146 __func__, sch->dev.bus_id); 148 __func__, sch->dev.bus_id);
147 return ret; 149 return ret;
148 } 150 }
149 css_get_ssd_info(sch);
150 return ret; 151 return ret;
151} 152}
152 153
diff --git a/drivers/s390/cio/qdio.c b/drivers/s390/cio/qdio.c
index 9d4ea449a608..6fd1940842eb 100644
--- a/drivers/s390/cio/qdio.c
+++ b/drivers/s390/cio/qdio.c
@@ -979,12 +979,11 @@ __qdio_outbound_processing(struct qdio_q *q)
979 979
980 if (q->is_iqdio_q) { 980 if (q->is_iqdio_q) {
981 /* 981 /*
982 * for asynchronous queues, we better check, if the fill 982 * for asynchronous queues, we better check, if the sent
983 * level is too high. for synchronous queues, the fill 983 * buffer is already switched from PRIMED to EMPTY.
984 * level will never be that high.
985 */ 984 */
986 if (atomic_read(&q->number_of_buffers_used)> 985 if ((q->queue_type == QDIO_IQDIO_QFMT_ASYNCH) &&
987 IQDIO_FILL_LEVEL_TO_POLL) 986 !qdio_is_outbound_q_done(q))
988 qdio_mark_q(q); 987 qdio_mark_q(q);
989 988
990 } else if (!q->hydra_gives_outbound_pcis) 989 } else if (!q->hydra_gives_outbound_pcis)
@@ -1825,6 +1824,10 @@ qdio_fill_qs(struct qdio_irq *irq_ptr, struct ccw_device *cdev,
1825 q->sbal[j]=*(outbound_sbals_array++); 1824 q->sbal[j]=*(outbound_sbals_array++);
1826 1825
1827 q->queue_type=q_format; 1826 q->queue_type=q_format;
1827 if ((q->queue_type == QDIO_IQDIO_QFMT) &&
1828 (no_output_qs > 1) &&
1829 (i == no_output_qs-1))
1830 q->queue_type = QDIO_IQDIO_QFMT_ASYNCH;
1828 q->int_parm=int_parm; 1831 q->int_parm=int_parm;
1829 q->is_input_q=0; 1832 q->is_input_q=0;
1830 q->schid = irq_ptr->schid; 1833 q->schid = irq_ptr->schid;
diff --git a/drivers/s390/crypto/ap_bus.c b/drivers/s390/crypto/ap_bus.c
index ad60afe5dd11..81b5899f4010 100644
--- a/drivers/s390/crypto/ap_bus.c
+++ b/drivers/s390/crypto/ap_bus.c
@@ -1129,7 +1129,15 @@ static void ap_poll_thread_stop(void)
1129 mutex_unlock(&ap_poll_thread_mutex); 1129 mutex_unlock(&ap_poll_thread_mutex);
1130} 1130}
1131 1131
1132static void ap_reset(void) 1132static void ap_reset_domain(void)
1133{
1134 int i;
1135
1136 for (i = 0; i < AP_DEVICES; i++)
1137 ap_reset_queue(AP_MKQID(i, ap_domain_index));
1138}
1139
1140static void ap_reset_all(void)
1133{ 1141{
1134 int i, j; 1142 int i, j;
1135 1143
@@ -1139,7 +1147,7 @@ static void ap_reset(void)
1139} 1147}
1140 1148
1141static struct reset_call ap_reset_call = { 1149static struct reset_call ap_reset_call = {
1142 .fn = ap_reset, 1150 .fn = ap_reset_all,
1143}; 1151};
1144 1152
1145/** 1153/**
@@ -1229,10 +1237,12 @@ void ap_module_exit(void)
1229 int i; 1237 int i;
1230 struct device *dev; 1238 struct device *dev;
1231 1239
1240 ap_reset_domain();
1232 ap_poll_thread_stop(); 1241 ap_poll_thread_stop();
1233 del_timer_sync(&ap_config_timer); 1242 del_timer_sync(&ap_config_timer);
1234 del_timer_sync(&ap_poll_timer); 1243 del_timer_sync(&ap_poll_timer);
1235 destroy_workqueue(ap_work_queue); 1244 destroy_workqueue(ap_work_queue);
1245 tasklet_kill(&ap_tasklet);
1236 s390_root_dev_unregister(ap_root_device); 1246 s390_root_dev_unregister(ap_root_device);
1237 while ((dev = bus_find_device(&ap_bus_type, NULL, NULL, 1247 while ((dev = bus_find_device(&ap_bus_type, NULL, NULL,
1238 __ap_match_all))) 1248 __ap_match_all)))
diff --git a/include/asm-s390/qdio.h b/include/asm-s390/qdio.h
index 7189c79bc673..127f72e77419 100644
--- a/include/asm-s390/qdio.h
+++ b/include/asm-s390/qdio.h
@@ -34,6 +34,7 @@
34#define QDIO_QETH_QFMT 0 34#define QDIO_QETH_QFMT 0
35#define QDIO_ZFCP_QFMT 1 35#define QDIO_ZFCP_QFMT 1
36#define QDIO_IQDIO_QFMT 2 36#define QDIO_IQDIO_QFMT 2
37#define QDIO_IQDIO_QFMT_ASYNCH 3
37 38
38struct qdio_buffer_element{ 39struct qdio_buffer_element{
39 unsigned int flags; 40 unsigned int flags;
diff --git a/include/asm-s390/reset.h b/include/asm-s390/reset.h
index 9b439cf67800..532e65a2aafc 100644
--- a/include/asm-s390/reset.h
+++ b/include/asm-s390/reset.h
@@ -19,5 +19,6 @@ extern void register_reset_call(struct reset_call *reset);
19extern void unregister_reset_call(struct reset_call *reset); 19extern void unregister_reset_call(struct reset_call *reset);
20extern void s390_reset_system(void); 20extern void s390_reset_system(void);
21extern void (*s390_reset_mcck_handler)(void); 21extern void (*s390_reset_mcck_handler)(void);
22extern void (*s390_reset_pgm_handler)(void);
22 23
23#endif /* _ASM_S390_RESET_H */ 24#endif /* _ASM_S390_RESET_H */