diff options
-rw-r--r-- | arch/s390/defconfig | 47 | ||||
-rw-r--r-- | arch/s390/hypfs/hypfs_diag.c | 4 | ||||
-rw-r--r-- | arch/s390/kernel/ipl.c | 59 | ||||
-rw-r--r-- | arch/s390/kernel/reipl.S | 6 | ||||
-rw-r--r-- | arch/s390/kernel/reipl64.S | 5 | ||||
-rw-r--r-- | arch/s390/kernel/reset.S | 42 | ||||
-rw-r--r-- | drivers/s390/char/sclp_cpi.c | 2 | ||||
-rw-r--r-- | drivers/s390/cio/cio.c | 25 | ||||
-rw-r--r-- | drivers/s390/cio/css.c | 3 | ||||
-rw-r--r-- | drivers/s390/cio/qdio.c | 13 | ||||
-rw-r--r-- | drivers/s390/crypto/ap_bus.c | 14 | ||||
-rw-r--r-- | include/asm-s390/qdio.h | 1 | ||||
-rw-r--r-- | include/asm-s390/reset.h | 1 |
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 | # |
6 | CONFIG_MMU=y | 6 | CONFIG_MMU=y |
7 | CONFIG_LOCKDEP_SUPPORT=y | 7 | CONFIG_LOCKDEP_SUPPORT=y |
8 | CONFIG_STACKTRACE_SUPPORT=y | 8 | CONFIG_STACKTRACE_SUPPORT=y |
9 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | 9 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y |
10 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set | ||
11 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set | ||
10 | CONFIG_GENERIC_HWEIGHT=y | 12 | CONFIG_GENERIC_HWEIGHT=y |
11 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
12 | CONFIG_GENERIC_TIME=y | 13 | CONFIG_GENERIC_TIME=y |
13 | CONFIG_S390=y | 14 | CONFIG_S390=y |
14 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | 15 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" |
@@ -37,12 +38,13 @@ CONFIG_AUDIT=y | |||
37 | CONFIG_IKCONFIG=y | 38 | CONFIG_IKCONFIG=y |
38 | CONFIG_IKCONFIG_PROC=y | 39 | CONFIG_IKCONFIG_PROC=y |
39 | # CONFIG_CPUSETS is not set | 40 | # CONFIG_CPUSETS is not set |
41 | CONFIG_SYSFS_DEPRECATED=y | ||
40 | # CONFIG_RELAY is not set | 42 | # CONFIG_RELAY is not set |
41 | CONFIG_INITRAMFS_SOURCE="" | 43 | CONFIG_INITRAMFS_SOURCE="" |
42 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 44 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
43 | CONFIG_SYSCTL=y | 45 | CONFIG_SYSCTL=y |
44 | # CONFIG_EMBEDDED is not set | 46 | # CONFIG_EMBEDDED is not set |
45 | # CONFIG_SYSCTL_SYSCALL is not set | 47 | CONFIG_SYSCTL_SYSCALL=y |
46 | CONFIG_KALLSYMS=y | 48 | CONFIG_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 | |||
119 | CONFIG_CHECK_STACK=y | 121 | CONFIG_CHECK_STACK=y |
120 | CONFIG_STACK_GUARD=256 | 122 | CONFIG_STACK_GUARD=256 |
121 | # CONFIG_WARN_STACK is not set | 123 | # CONFIG_WARN_STACK is not set |
124 | CONFIG_ARCH_POPULATES_NODE_MAP=y | ||
122 | CONFIG_SELECT_MEMORY_MODEL=y | 125 | CONFIG_SELECT_MEMORY_MODEL=y |
123 | CONFIG_FLATMEM_MANUAL=y | 126 | CONFIG_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 |
129 | CONFIG_SPLIT_PTLOCK_CPUS=4 | 132 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
130 | CONFIG_RESOURCES_64BIT=y | 133 | CONFIG_RESOURCES_64BIT=y |
134 | CONFIG_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 |
197 | CONFIG_TCP_CONG_CUBIC=y | 201 | CONFIG_TCP_CONG_CUBIC=y |
198 | CONFIG_DEFAULT_TCP_CONG="cubic" | 202 | CONFIG_DEFAULT_TCP_CONG="cubic" |
203 | # CONFIG_TCP_MD5SIG is not set | ||
199 | CONFIG_IPV6=y | 204 | CONFIG_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 |
212 | CONFIG_IPV6_SIT=y | 217 | CONFIG_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 | # |
248 | CONFIG_NET_SCHED=y | 252 | CONFIG_NET_SCHED=y |
253 | CONFIG_NET_SCH_FIFO=y | ||
249 | CONFIG_NET_SCH_CLK_JIFFIES=y | 254 | CONFIG_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 | |||
277 | CONFIG_NET_CLS_FW=m | 282 | CONFIG_NET_CLS_FW=m |
278 | CONFIG_NET_CLS_U32=m | 283 | CONFIG_NET_CLS_U32=m |
279 | # CONFIG_CLS_U32_PERF is not set | 284 | # CONFIG_CLS_U32_PERF is not set |
285 | CONFIG_CLS_U32_MARK=y | ||
280 | CONFIG_NET_CLS_RSVP=m | 286 | CONFIG_NET_CLS_RSVP=m |
281 | CONFIG_NET_CLS_RSVP6=m | 287 | CONFIG_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 |
317 | CONFIG_SCSI=y | 323 | CONFIG_SCSI=y |
324 | # CONFIG_SCSI_TGT is not set | ||
318 | CONFIG_SCSI_NETLINK=y | 325 | CONFIG_SCSI_NETLINK=y |
319 | CONFIG_SCSI_PROC_FS=y | 326 | CONFIG_SCSI_PROC_FS=y |
320 | 327 | ||
@@ -335,6 +342,7 @@ CONFIG_CHR_DEV_SG=y | |||
335 | CONFIG_SCSI_MULTI_LUN=y | 342 | CONFIG_SCSI_MULTI_LUN=y |
336 | CONFIG_SCSI_CONSTANTS=y | 343 | CONFIG_SCSI_CONSTANTS=y |
337 | CONFIG_SCSI_LOGGING=y | 344 | CONFIG_SCSI_LOGGING=y |
345 | CONFIG_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 |
557 | CONFIG_GENERIC_ACL=y | ||
549 | 558 | ||
550 | # | 559 | # |
551 | # CD-ROM/DVD Filesystems | 560 | # CD-ROM/DVD Filesystems |
@@ -571,7 +580,7 @@ CONFIG_TMPFS=y | |||
571 | CONFIG_TMPFS_POSIX_ACL=y | 580 | CONFIG_TMPFS_POSIX_ACL=y |
572 | # CONFIG_HUGETLB_PAGE is not set | 581 | # CONFIG_HUGETLB_PAGE is not set |
573 | CONFIG_RAMFS=y | 582 | CONFIG_RAMFS=y |
574 | # CONFIG_CONFIGFS_FS is not set | 583 | CONFIG_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 |
619 | CONFIG_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 | # | ||
659 | CONFIG_DLM=m | ||
660 | CONFIG_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 | |||
663 | CONFIG_ENABLE_MUST_CHECK=y | 679 | CONFIG_ENABLE_MUST_CHECK=y |
664 | CONFIG_MAGIC_SYSRQ=y | 680 | CONFIG_MAGIC_SYSRQ=y |
665 | # CONFIG_UNUSED_SYMBOLS is not set | 681 | # CONFIG_UNUSED_SYMBOLS is not set |
682 | CONFIG_DEBUG_FS=y | ||
683 | CONFIG_HEADERS_CHECK=y | ||
666 | CONFIG_DEBUG_KERNEL=y | 684 | CONFIG_DEBUG_KERNEL=y |
667 | CONFIG_LOG_BUF_SHIFT=17 | 685 | CONFIG_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 |
682 | CONFIG_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 |
687 | CONFIG_FORCED_INLINING=y | 704 | CONFIG_FORCED_INLINING=y |
688 | CONFIG_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 | # |
701 | CONFIG_CRYPTO=y | 717 | CONFIG_CRYPTO=y |
702 | CONFIG_CRYPTO_ALGAPI=m | 718 | CONFIG_CRYPTO_ALGAPI=y |
703 | CONFIG_CRYPTO_BLKCIPHER=m | 719 | CONFIG_CRYPTO_BLKCIPHER=y |
704 | CONFIG_CRYPTO_MANAGER=m | 720 | CONFIG_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 | ||
716 | CONFIG_CRYPTO_ECB=m | 734 | CONFIG_CRYPTO_ECB=m |
717 | CONFIG_CRYPTO_CBC=m | 735 | CONFIG_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 | # |
762 | CONFIG_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 |
745 | CONFIG_CRC32=m | 765 | CONFIG_CRC32=m |
746 | # CONFIG_LIBCRC32C is not set | 766 | # CONFIG_LIBCRC32C is not set |
747 | CONFIG_PLIST=y | 767 | CONFIG_PLIST=y |
768 | CONFIG_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) | |||
379 | static void *diag204_alloc_rbuf(void) | 379 | static 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, | |||
609 | static struct subsys_attribute on_panic_attr = | 609 | static 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 | ||
612 | static 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 | |||
627 | void do_reipl(void) | 612 | void 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 | ||
1039 | extern void reset_mcck_handler(void); | 996 | extern void reset_mcck_handler(void); |
997 | extern void reset_pgm_handler(void); | ||
998 | extern __u32 dump_prefix_page; | ||
1040 | 999 | ||
1041 | void s390_reset_system(void) | 1000 | void 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 | ||
83 | dump_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 | ||
107 | dump_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: | |||
27 | s390_reset_mcck_handler: | 28 | s390_reset_mcck_handler: |
28 | .quad 0 | 29 | .quad 0 |
29 | 30 | ||
31 | .globl reset_pgm_handler | ||
32 | reset_pgm_handler: | ||
33 | stmg %r0,%r15,__LC_SAVE_AREA | ||
34 | basr %r13,0 | ||
35 | 0: 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 | ||
43 | 1: lpswe disabled_wait_psw-0b(%r13) | ||
44 | .globl s390_reset_pgm_handler | ||
45 | s390_reset_pgm_handler: | ||
46 | .quad 0 | ||
47 | .align 8 | ||
48 | disabled_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: | |||
45 | s390_reset_mcck_handler: | 66 | s390_reset_mcck_handler: |
46 | .long 0 | 67 | .long 0 |
47 | 68 | ||
69 | .globl reset_pgm_handler | ||
70 | reset_pgm_handler: | ||
71 | stm %r0,%r15,__LC_SAVE_AREA | ||
72 | basr %r13,0 | ||
73 | 0: 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 | |||
82 | 1: lpsw disabled_wait_psw-0b(%r13) | ||
83 | .globl s390_reset_pgm_handler | ||
84 | s390_reset_pgm_handler: | ||
85 | .long 0 | ||
86 | disabled_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 | ||
52 | MODULE_LICENSE("GPL"); | ||
53 | |||
52 | MODULE_AUTHOR( | 54 | MODULE_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 | ||
874 | static int pgm_check_occured; | ||
875 | |||
876 | static void cio_reset_pgm_check_handler(void) | ||
877 | { | ||
878 | pgm_check_occured = 1; | ||
879 | } | ||
880 | |||
881 | static 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 | |||
874 | static int __shutdown_subchannel_easy(struct subchannel_id schid, void *data) | 895 | static 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 | ||
1132 | static void ap_reset(void) | 1132 | static 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 | |||
1140 | static 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 | ||
1141 | static struct reset_call ap_reset_call = { | 1149 | static 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 | ||
38 | struct qdio_buffer_element{ | 39 | struct 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); | |||
19 | extern void unregister_reset_call(struct reset_call *reset); | 19 | extern void unregister_reset_call(struct reset_call *reset); |
20 | extern void s390_reset_system(void); | 20 | extern void s390_reset_system(void); |
21 | extern void (*s390_reset_mcck_handler)(void); | 21 | extern void (*s390_reset_mcck_handler)(void); |
22 | extern void (*s390_reset_pgm_handler)(void); | ||
22 | 23 | ||
23 | #endif /* _ASM_S390_RESET_H */ | 24 | #endif /* _ASM_S390_RESET_H */ |