diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-06-22 15:51:28 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-06-22 15:51:28 -0400 |
commit | a9b011f5ac57cbaedb32a8149f3d39d7b2c1f0e0 (patch) | |
tree | 89c850cc9e2ed949f5fc3b99180cd6cb70db6160 /arch | |
parent | b5bdd43876e475724c662f99206f0349c67e33e6 (diff) | |
parent | da6330fccc251db73945ee3eb6248985cf2574de (diff) |
Merge branch 'for-linus' of git://git390.marist.edu/pub/scm/linux-2.6
* 'for-linus' of git://git390.marist.edu/pub/scm/linux-2.6: (22 commits)
[S390] Update default configuration.
[S390] kprobes: defer setting of ctlblk state
[S390] Enable tick based perf_counter on s390.
[S390] dasd: fix refcounting in dasd_change_state
[S390] lockless idle time accounting
[S390] driver_data access
[S390] pm: fix build error for !SMP
[S390] dasd_pm: fix stop flag handling
[S390] ap/zcrypt: Suspend/Resume ap bus and zcrypt
[S390] qdio: Sanitize do_QDIO sanity checks
[S390] qdio: leave inbound SBALs primed
[S390] qdio: merge AI tasklet into interrupt handler
[S390] qdio: extract all primed SBALs at once
[S390] qdio: fix check for running under z/VM
[S390] qdio: move adapter interrupt tasklet code
[S390] Use del_timer instead of del_timer_sync
[S390] s390: remove DEBUG_MALLOC
[S390] vt220 console: convert from bootmem to slab
[S390] sclp console: convert from bootmem to slab
[S390] 3270 console: convert from bootmem to slab
...
Diffstat (limited to 'arch')
-rw-r--r-- | arch/s390/Kconfig | 1 | ||||
-rw-r--r-- | arch/s390/defconfig | 72 | ||||
-rw-r--r-- | arch/s390/include/asm/cputime.h | 2 | ||||
-rw-r--r-- | arch/s390/include/asm/debug.h | 9 | ||||
-rw-r--r-- | arch/s390/include/asm/perf_counter.h | 8 | ||||
-rw-r--r-- | arch/s390/include/asm/qdio.h | 2 | ||||
-rw-r--r-- | arch/s390/kernel/kprobes.c | 18 | ||||
-rw-r--r-- | arch/s390/kernel/smp.c | 28 | ||||
-rw-r--r-- | arch/s390/kernel/time.c | 16 | ||||
-rw-r--r-- | arch/s390/kernel/vtime.c | 27 | ||||
-rw-r--r-- | arch/s390/power/swsusp_asm64.S | 6 |
11 files changed, 115 insertions, 74 deletions
diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig index a14dba0e4d67..e577839f3073 100644 --- a/arch/s390/Kconfig +++ b/arch/s390/Kconfig | |||
@@ -94,6 +94,7 @@ config S390 | |||
94 | select HAVE_KVM if 64BIT | 94 | select HAVE_KVM if 64BIT |
95 | select HAVE_ARCH_TRACEHOOK | 95 | select HAVE_ARCH_TRACEHOOK |
96 | select INIT_ALL_POSSIBLE | 96 | select INIT_ALL_POSSIBLE |
97 | select HAVE_PERF_COUNTERS | ||
97 | 98 | ||
98 | source "init/Kconfig" | 99 | source "init/Kconfig" |
99 | 100 | ||
diff --git a/arch/s390/defconfig b/arch/s390/defconfig index d401d56c255f..fcba206529f3 100644 --- a/arch/s390/defconfig +++ b/arch/s390/defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.30-rc3 | 3 | # Linux kernel version: 2.6.30 |
4 | # Thu Apr 23 09:29:52 2009 | 4 | # Mon Jun 22 11:08:16 2009 |
5 | # | 5 | # |
6 | CONFIG_SCHED_MC=y | 6 | CONFIG_SCHED_MC=y |
7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
@@ -25,6 +25,7 @@ CONFIG_VIRT_CPU_ACCOUNTING=y | |||
25 | CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y | 25 | CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y |
26 | CONFIG_S390=y | 26 | CONFIG_S390=y |
27 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | 27 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" |
28 | CONFIG_CONSTRUCTORS=y | ||
28 | 29 | ||
29 | # | 30 | # |
30 | # General setup | 31 | # General setup |
@@ -90,7 +91,6 @@ CONFIG_SYSCTL_SYSCALL=y | |||
90 | CONFIG_KALLSYMS=y | 91 | CONFIG_KALLSYMS=y |
91 | # CONFIG_KALLSYMS_ALL is not set | 92 | # CONFIG_KALLSYMS_ALL is not set |
92 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 93 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
93 | # CONFIG_STRIP_ASM_SYMS is not set | ||
94 | CONFIG_HOTPLUG=y | 94 | CONFIG_HOTPLUG=y |
95 | CONFIG_PRINTK=y | 95 | CONFIG_PRINTK=y |
96 | CONFIG_BUG=y | 96 | CONFIG_BUG=y |
@@ -103,7 +103,14 @@ CONFIG_TIMERFD=y | |||
103 | CONFIG_EVENTFD=y | 103 | CONFIG_EVENTFD=y |
104 | CONFIG_SHMEM=y | 104 | CONFIG_SHMEM=y |
105 | CONFIG_AIO=y | 105 | CONFIG_AIO=y |
106 | CONFIG_HAVE_PERF_COUNTERS=y | ||
107 | |||
108 | # | ||
109 | # Performance Counters | ||
110 | # | ||
111 | # CONFIG_PERF_COUNTERS is not set | ||
106 | CONFIG_VM_EVENT_COUNTERS=y | 112 | CONFIG_VM_EVENT_COUNTERS=y |
113 | # CONFIG_STRIP_ASM_SYMS is not set | ||
107 | # CONFIG_COMPAT_BRK is not set | 114 | # CONFIG_COMPAT_BRK is not set |
108 | CONFIG_SLAB=y | 115 | CONFIG_SLAB=y |
109 | # CONFIG_SLUB is not set | 116 | # CONFIG_SLUB is not set |
@@ -119,6 +126,11 @@ CONFIG_HAVE_KRETPROBES=y | |||
119 | CONFIG_HAVE_ARCH_TRACEHOOK=y | 126 | CONFIG_HAVE_ARCH_TRACEHOOK=y |
120 | CONFIG_USE_GENERIC_SMP_HELPERS=y | 127 | CONFIG_USE_GENERIC_SMP_HELPERS=y |
121 | CONFIG_HAVE_DEFAULT_NO_SPIN_MUTEXES=y | 128 | CONFIG_HAVE_DEFAULT_NO_SPIN_MUTEXES=y |
129 | |||
130 | # | ||
131 | # GCOV-based kernel profiling | ||
132 | # | ||
133 | # CONFIG_GCOV_KERNEL is not set | ||
122 | # CONFIG_SLOW_WORK is not set | 134 | # CONFIG_SLOW_WORK is not set |
123 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | 135 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set |
124 | CONFIG_SLABINFO=y | 136 | CONFIG_SLABINFO=y |
@@ -150,7 +162,7 @@ CONFIG_DEFAULT_DEADLINE=y | |||
150 | # CONFIG_DEFAULT_NOOP is not set | 162 | # CONFIG_DEFAULT_NOOP is not set |
151 | CONFIG_DEFAULT_IOSCHED="deadline" | 163 | CONFIG_DEFAULT_IOSCHED="deadline" |
152 | CONFIG_PREEMPT_NOTIFIERS=y | 164 | CONFIG_PREEMPT_NOTIFIERS=y |
153 | # CONFIG_FREEZER is not set | 165 | CONFIG_FREEZER=y |
154 | 166 | ||
155 | # | 167 | # |
156 | # Base setup | 168 | # Base setup |
@@ -199,6 +211,7 @@ CONFIG_ARCH_SPARSEMEM_DEFAULT=y | |||
199 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | 211 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y |
200 | CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y | 212 | CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y |
201 | CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y | 213 | CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y |
214 | CONFIG_ARCH_HIBERNATION_POSSIBLE=y | ||
202 | CONFIG_SELECT_MEMORY_MODEL=y | 215 | CONFIG_SELECT_MEMORY_MODEL=y |
203 | # CONFIG_FLATMEM_MANUAL is not set | 216 | # CONFIG_FLATMEM_MANUAL is not set |
204 | # CONFIG_DISCONTIGMEM_MANUAL is not set | 217 | # CONFIG_DISCONTIGMEM_MANUAL is not set |
@@ -218,9 +231,9 @@ CONFIG_PHYS_ADDR_T_64BIT=y | |||
218 | CONFIG_ZONE_DMA_FLAG=1 | 231 | CONFIG_ZONE_DMA_FLAG=1 |
219 | CONFIG_BOUNCE=y | 232 | CONFIG_BOUNCE=y |
220 | CONFIG_VIRT_TO_BUS=y | 233 | CONFIG_VIRT_TO_BUS=y |
221 | CONFIG_UNEVICTABLE_LRU=y | ||
222 | CONFIG_HAVE_MLOCK=y | 234 | CONFIG_HAVE_MLOCK=y |
223 | CONFIG_HAVE_MLOCKED_PAGE_BIT=y | 235 | CONFIG_HAVE_MLOCKED_PAGE_BIT=y |
236 | CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 | ||
224 | 237 | ||
225 | # | 238 | # |
226 | # I/O subsystem configuration | 239 | # I/O subsystem configuration |
@@ -257,6 +270,16 @@ CONFIG_KEXEC=y | |||
257 | # CONFIG_ZFCPDUMP is not set | 270 | # CONFIG_ZFCPDUMP is not set |
258 | CONFIG_S390_GUEST=y | 271 | CONFIG_S390_GUEST=y |
259 | CONFIG_SECCOMP=y | 272 | CONFIG_SECCOMP=y |
273 | |||
274 | # | ||
275 | # Power Management | ||
276 | # | ||
277 | CONFIG_PM=y | ||
278 | # CONFIG_PM_DEBUG is not set | ||
279 | CONFIG_PM_SLEEP_SMP=y | ||
280 | CONFIG_PM_SLEEP=y | ||
281 | CONFIG_HIBERNATION=y | ||
282 | CONFIG_PM_STD_PARTITION="" | ||
260 | CONFIG_NET=y | 283 | CONFIG_NET=y |
261 | 284 | ||
262 | # | 285 | # |
@@ -384,6 +407,7 @@ CONFIG_SCTP_HMAC_MD5=y | |||
384 | # CONFIG_ECONET is not set | 407 | # CONFIG_ECONET is not set |
385 | # CONFIG_WAN_ROUTER is not set | 408 | # CONFIG_WAN_ROUTER is not set |
386 | # CONFIG_PHONET is not set | 409 | # CONFIG_PHONET is not set |
410 | # CONFIG_IEEE802154 is not set | ||
387 | CONFIG_NET_SCHED=y | 411 | CONFIG_NET_SCHED=y |
388 | 412 | ||
389 | # | 413 | # |
@@ -446,6 +470,7 @@ CONFIG_CAN_BCM=m | |||
446 | # CAN Device Drivers | 470 | # CAN Device Drivers |
447 | # | 471 | # |
448 | CONFIG_CAN_VCAN=m | 472 | CONFIG_CAN_VCAN=m |
473 | # CONFIG_CAN_DEV is not set | ||
449 | # CONFIG_CAN_DEBUG_DEVICES is not set | 474 | # CONFIG_CAN_DEBUG_DEVICES is not set |
450 | # CONFIG_AF_RXRPC is not set | 475 | # CONFIG_AF_RXRPC is not set |
451 | # CONFIG_WIMAX is not set | 476 | # CONFIG_WIMAX is not set |
@@ -524,10 +549,6 @@ CONFIG_BLK_DEV_SR=y | |||
524 | CONFIG_BLK_DEV_SR_VENDOR=y | 549 | CONFIG_BLK_DEV_SR_VENDOR=y |
525 | CONFIG_CHR_DEV_SG=y | 550 | CONFIG_CHR_DEV_SG=y |
526 | # CONFIG_CHR_DEV_SCH is not set | 551 | # CONFIG_CHR_DEV_SCH is not set |
527 | |||
528 | # | ||
529 | # Some SCSI devices (e.g. CD jukebox) support multiple LUNs | ||
530 | # | ||
531 | CONFIG_SCSI_MULTI_LUN=y | 552 | CONFIG_SCSI_MULTI_LUN=y |
532 | CONFIG_SCSI_CONSTANTS=y | 553 | CONFIG_SCSI_CONSTANTS=y |
533 | CONFIG_SCSI_LOGGING=y | 554 | CONFIG_SCSI_LOGGING=y |
@@ -578,7 +599,6 @@ CONFIG_DM_MULTIPATH=m | |||
578 | # CONFIG_DM_DELAY is not set | 599 | # CONFIG_DM_DELAY is not set |
579 | # CONFIG_DM_UEVENT is not set | 600 | # CONFIG_DM_UEVENT is not set |
580 | CONFIG_NETDEVICES=y | 601 | CONFIG_NETDEVICES=y |
581 | CONFIG_COMPAT_NET_DEV_OPS=y | ||
582 | # CONFIG_IFB is not set | 602 | # CONFIG_IFB is not set |
583 | CONFIG_DUMMY=m | 603 | CONFIG_DUMMY=m |
584 | CONFIG_BONDING=m | 604 | CONFIG_BONDING=m |
@@ -595,6 +615,7 @@ CONFIG_NET_ETHERNET=y | |||
595 | # CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set | 615 | # CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set |
596 | # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set | 616 | # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set |
597 | # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set | 617 | # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set |
618 | # CONFIG_KS8842 is not set | ||
598 | CONFIG_NETDEV_1000=y | 619 | CONFIG_NETDEV_1000=y |
599 | CONFIG_NETDEV_10000=y | 620 | CONFIG_NETDEV_10000=y |
600 | # CONFIG_TR is not set | 621 | # CONFIG_TR is not set |
@@ -674,6 +695,11 @@ CONFIG_S390_TAPE_34XX=m | |||
674 | # CONFIG_MONREADER is not set | 695 | # CONFIG_MONREADER is not set |
675 | CONFIG_MONWRITER=m | 696 | CONFIG_MONWRITER=m |
676 | CONFIG_S390_VMUR=m | 697 | CONFIG_S390_VMUR=m |
698 | |||
699 | # | ||
700 | # PPS support | ||
701 | # | ||
702 | # CONFIG_PPS is not set | ||
677 | # CONFIG_POWER_SUPPLY is not set | 703 | # CONFIG_POWER_SUPPLY is not set |
678 | # CONFIG_THERMAL is not set | 704 | # CONFIG_THERMAL is not set |
679 | # CONFIG_THERMAL_HWMON is not set | 705 | # CONFIG_THERMAL_HWMON is not set |
@@ -683,6 +709,10 @@ CONFIG_S390_VMUR=m | |||
683 | # CONFIG_NEW_LEDS is not set | 709 | # CONFIG_NEW_LEDS is not set |
684 | CONFIG_ACCESSIBILITY=y | 710 | CONFIG_ACCESSIBILITY=y |
685 | # CONFIG_AUXDISPLAY is not set | 711 | # CONFIG_AUXDISPLAY is not set |
712 | |||
713 | # | ||
714 | # TI VLYNQ | ||
715 | # | ||
686 | # CONFIG_STAGING is not set | 716 | # CONFIG_STAGING is not set |
687 | 717 | ||
688 | # | 718 | # |
@@ -703,11 +733,12 @@ CONFIG_FS_MBCACHE=y | |||
703 | # CONFIG_REISERFS_FS is not set | 733 | # CONFIG_REISERFS_FS is not set |
704 | # CONFIG_JFS_FS is not set | 734 | # CONFIG_JFS_FS is not set |
705 | CONFIG_FS_POSIX_ACL=y | 735 | CONFIG_FS_POSIX_ACL=y |
706 | CONFIG_FILE_LOCKING=y | ||
707 | # CONFIG_XFS_FS is not set | 736 | # CONFIG_XFS_FS is not set |
708 | # CONFIG_GFS2_FS is not set | 737 | # CONFIG_GFS2_FS is not set |
709 | # CONFIG_OCFS2_FS is not set | 738 | # CONFIG_OCFS2_FS is not set |
710 | # CONFIG_BTRFS_FS is not set | 739 | # CONFIG_BTRFS_FS is not set |
740 | CONFIG_FILE_LOCKING=y | ||
741 | CONFIG_FSNOTIFY=y | ||
711 | CONFIG_DNOTIFY=y | 742 | CONFIG_DNOTIFY=y |
712 | CONFIG_INOTIFY=y | 743 | CONFIG_INOTIFY=y |
713 | CONFIG_INOTIFY_USER=y | 744 | CONFIG_INOTIFY_USER=y |
@@ -865,19 +896,23 @@ CONFIG_DEBUG_MEMORY_INIT=y | |||
865 | CONFIG_SYSCTL_SYSCALL_CHECK=y | 896 | CONFIG_SYSCTL_SYSCALL_CHECK=y |
866 | # CONFIG_DEBUG_PAGEALLOC is not set | 897 | # CONFIG_DEBUG_PAGEALLOC is not set |
867 | CONFIG_HAVE_FUNCTION_TRACER=y | 898 | CONFIG_HAVE_FUNCTION_TRACER=y |
899 | CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y | ||
900 | CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y | ||
901 | CONFIG_HAVE_DYNAMIC_FTRACE=y | ||
902 | CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y | ||
903 | CONFIG_HAVE_FTRACE_SYSCALLS=y | ||
868 | CONFIG_TRACING_SUPPORT=y | 904 | CONFIG_TRACING_SUPPORT=y |
869 | 905 | CONFIG_FTRACE=y | |
870 | # | ||
871 | # Tracers | ||
872 | # | ||
873 | # CONFIG_FUNCTION_TRACER is not set | 906 | # CONFIG_FUNCTION_TRACER is not set |
874 | # CONFIG_IRQSOFF_TRACER is not set | 907 | # CONFIG_IRQSOFF_TRACER is not set |
875 | # CONFIG_PREEMPT_TRACER is not set | 908 | # CONFIG_PREEMPT_TRACER is not set |
876 | # CONFIG_SCHED_TRACER is not set | 909 | # CONFIG_SCHED_TRACER is not set |
877 | # CONFIG_CONTEXT_SWITCH_TRACER is not set | 910 | # CONFIG_ENABLE_DEFAULT_TRACERS is not set |
878 | # CONFIG_EVENT_TRACER is not set | 911 | # CONFIG_FTRACE_SYSCALLS is not set |
879 | # CONFIG_BOOT_TRACER is not set | 912 | # CONFIG_BOOT_TRACER is not set |
880 | # CONFIG_TRACE_BRANCH_PROFILING is not set | 913 | CONFIG_BRANCH_PROFILE_NONE=y |
914 | # CONFIG_PROFILE_ANNOTATED_BRANCHES is not set | ||
915 | # CONFIG_PROFILE_ALL_BRANCHES is not set | ||
881 | # CONFIG_STACK_TRACER is not set | 916 | # CONFIG_STACK_TRACER is not set |
882 | # CONFIG_KMEMTRACE is not set | 917 | # CONFIG_KMEMTRACE is not set |
883 | # CONFIG_WORKQUEUE_TRACER is not set | 918 | # CONFIG_WORKQUEUE_TRACER is not set |
@@ -886,6 +921,7 @@ CONFIG_TRACING_SUPPORT=y | |||
886 | CONFIG_SAMPLES=y | 921 | CONFIG_SAMPLES=y |
887 | # CONFIG_SAMPLE_KOBJECT is not set | 922 | # CONFIG_SAMPLE_KOBJECT is not set |
888 | # CONFIG_SAMPLE_KPROBES is not set | 923 | # CONFIG_SAMPLE_KPROBES is not set |
924 | # CONFIG_KMEMCHECK is not set | ||
889 | 925 | ||
890 | # | 926 | # |
891 | # Security options | 927 | # Security options |
diff --git a/arch/s390/include/asm/cputime.h b/arch/s390/include/asm/cputime.h index ec917d42ee6d..7a3817a656df 100644 --- a/arch/s390/include/asm/cputime.h +++ b/arch/s390/include/asm/cputime.h | |||
@@ -178,7 +178,7 @@ cputime64_to_clock_t(cputime64_t cputime) | |||
178 | } | 178 | } |
179 | 179 | ||
180 | struct s390_idle_data { | 180 | struct s390_idle_data { |
181 | spinlock_t lock; | 181 | unsigned int sequence; |
182 | unsigned long long idle_count; | 182 | unsigned long long idle_count; |
183 | unsigned long long idle_enter; | 183 | unsigned long long idle_enter; |
184 | unsigned long long idle_time; | 184 | unsigned long long idle_time; |
diff --git a/arch/s390/include/asm/debug.h b/arch/s390/include/asm/debug.h index 9450ce6e32de..31ed5686a968 100644 --- a/arch/s390/include/asm/debug.h +++ b/arch/s390/include/asm/debug.h | |||
@@ -248,14 +248,5 @@ int debug_unregister_view(debug_info_t* id, struct debug_view* view); | |||
248 | #define PRINT_FATAL(x...) printk ( KERN_DEBUG PRINTK_HEADER x ) | 248 | #define PRINT_FATAL(x...) printk ( KERN_DEBUG PRINTK_HEADER x ) |
249 | #endif /* DASD_DEBUG */ | 249 | #endif /* DASD_DEBUG */ |
250 | 250 | ||
251 | #undef DEBUG_MALLOC | ||
252 | #ifdef DEBUG_MALLOC | ||
253 | void *b; | ||
254 | #define kmalloc(x...) (PRINT_INFO(" kmalloc %p\n",b=kmalloc(x)),b) | ||
255 | #define kfree(x) PRINT_INFO(" kfree %p\n",x);kfree(x) | ||
256 | #define get_zeroed_page(x...) (PRINT_INFO(" gfp %p\n",b=get_zeroed_page(x)),b) | ||
257 | #define __get_free_pages(x...) (PRINT_INFO(" gfps %p\n",b=__get_free_pages(x)),b) | ||
258 | #endif /* DEBUG_MALLOC */ | ||
259 | |||
260 | #endif /* __KERNEL__ */ | 251 | #endif /* __KERNEL__ */ |
261 | #endif /* DEBUG_H */ | 252 | #endif /* DEBUG_H */ |
diff --git a/arch/s390/include/asm/perf_counter.h b/arch/s390/include/asm/perf_counter.h new file mode 100644 index 000000000000..a7205a3828cb --- /dev/null +++ b/arch/s390/include/asm/perf_counter.h | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | * Performance counter support - s390 specific definitions. | ||
3 | * | ||
4 | * Copyright 2009 Martin Schwidefsky, IBM Corporation. | ||
5 | */ | ||
6 | |||
7 | static inline void set_perf_counter_pending(void) {} | ||
8 | static inline void clear_perf_counter_pending(void) {} | ||
diff --git a/arch/s390/include/asm/qdio.h b/arch/s390/include/asm/qdio.h index 402d6dcf0d26..79d849f014f0 100644 --- a/arch/s390/include/asm/qdio.h +++ b/arch/s390/include/asm/qdio.h | |||
@@ -380,7 +380,7 @@ extern int qdio_establish(struct qdio_initialize *); | |||
380 | extern int qdio_activate(struct ccw_device *); | 380 | extern int qdio_activate(struct ccw_device *); |
381 | 381 | ||
382 | extern int do_QDIO(struct ccw_device *cdev, unsigned int callflags, | 382 | extern int do_QDIO(struct ccw_device *cdev, unsigned int callflags, |
383 | int q_nr, int bufnr, int count); | 383 | int q_nr, unsigned int bufnr, unsigned int count); |
384 | extern int qdio_cleanup(struct ccw_device*, int); | 384 | extern int qdio_cleanup(struct ccw_device*, int); |
385 | extern int qdio_shutdown(struct ccw_device*, int); | 385 | extern int qdio_shutdown(struct ccw_device*, int); |
386 | extern int qdio_free(struct ccw_device *); | 386 | extern int qdio_free(struct ccw_device *); |
diff --git a/arch/s390/kernel/kprobes.c b/arch/s390/kernel/kprobes.c index 9bb2f6241d9f..86783efa24ee 100644 --- a/arch/s390/kernel/kprobes.c +++ b/arch/s390/kernel/kprobes.c | |||
@@ -154,39 +154,35 @@ void __kprobes get_instruction_type(struct arch_specific_insn *ainsn) | |||
154 | 154 | ||
155 | static int __kprobes swap_instruction(void *aref) | 155 | static int __kprobes swap_instruction(void *aref) |
156 | { | 156 | { |
157 | struct kprobe_ctlblk *kcb = get_kprobe_ctlblk(); | ||
158 | unsigned long status = kcb->kprobe_status; | ||
157 | struct ins_replace_args *args = aref; | 159 | struct ins_replace_args *args = aref; |
160 | int rc; | ||
158 | 161 | ||
159 | return probe_kernel_write(args->ptr, &args->new, sizeof(args->new)); | 162 | kcb->kprobe_status = KPROBE_SWAP_INST; |
163 | rc = probe_kernel_write(args->ptr, &args->new, sizeof(args->new)); | ||
164 | kcb->kprobe_status = status; | ||
165 | return rc; | ||
160 | } | 166 | } |
161 | 167 | ||
162 | void __kprobes arch_arm_kprobe(struct kprobe *p) | 168 | void __kprobes arch_arm_kprobe(struct kprobe *p) |
163 | { | 169 | { |
164 | struct kprobe_ctlblk *kcb = get_kprobe_ctlblk(); | ||
165 | unsigned long status = kcb->kprobe_status; | ||
166 | struct ins_replace_args args; | 170 | struct ins_replace_args args; |
167 | 171 | ||
168 | args.ptr = p->addr; | 172 | args.ptr = p->addr; |
169 | args.old = p->opcode; | 173 | args.old = p->opcode; |
170 | args.new = BREAKPOINT_INSTRUCTION; | 174 | args.new = BREAKPOINT_INSTRUCTION; |
171 | |||
172 | kcb->kprobe_status = KPROBE_SWAP_INST; | ||
173 | stop_machine(swap_instruction, &args, NULL); | 175 | stop_machine(swap_instruction, &args, NULL); |
174 | kcb->kprobe_status = status; | ||
175 | } | 176 | } |
176 | 177 | ||
177 | void __kprobes arch_disarm_kprobe(struct kprobe *p) | 178 | void __kprobes arch_disarm_kprobe(struct kprobe *p) |
178 | { | 179 | { |
179 | struct kprobe_ctlblk *kcb = get_kprobe_ctlblk(); | ||
180 | unsigned long status = kcb->kprobe_status; | ||
181 | struct ins_replace_args args; | 180 | struct ins_replace_args args; |
182 | 181 | ||
183 | args.ptr = p->addr; | 182 | args.ptr = p->addr; |
184 | args.old = BREAKPOINT_INSTRUCTION; | 183 | args.old = BREAKPOINT_INSTRUCTION; |
185 | args.new = p->opcode; | 184 | args.new = p->opcode; |
186 | |||
187 | kcb->kprobe_status = KPROBE_SWAP_INST; | ||
188 | stop_machine(swap_instruction, &args, NULL); | 185 | stop_machine(swap_instruction, &args, NULL); |
189 | kcb->kprobe_status = status; | ||
190 | } | 186 | } |
191 | 187 | ||
192 | void __kprobes arch_remove_kprobe(struct kprobe *p) | 188 | void __kprobes arch_remove_kprobe(struct kprobe *p) |
diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c index fd8e3111a4e8..2270730f5354 100644 --- a/arch/s390/kernel/smp.c +++ b/arch/s390/kernel/smp.c | |||
@@ -856,13 +856,20 @@ static ssize_t show_idle_count(struct sys_device *dev, | |||
856 | { | 856 | { |
857 | struct s390_idle_data *idle; | 857 | struct s390_idle_data *idle; |
858 | unsigned long long idle_count; | 858 | unsigned long long idle_count; |
859 | unsigned int sequence; | ||
859 | 860 | ||
860 | idle = &per_cpu(s390_idle, dev->id); | 861 | idle = &per_cpu(s390_idle, dev->id); |
861 | spin_lock(&idle->lock); | 862 | repeat: |
863 | sequence = idle->sequence; | ||
864 | smp_rmb(); | ||
865 | if (sequence & 1) | ||
866 | goto repeat; | ||
862 | idle_count = idle->idle_count; | 867 | idle_count = idle->idle_count; |
863 | if (idle->idle_enter) | 868 | if (idle->idle_enter) |
864 | idle_count++; | 869 | idle_count++; |
865 | spin_unlock(&idle->lock); | 870 | smp_rmb(); |
871 | if (idle->sequence != sequence) | ||
872 | goto repeat; | ||
866 | return sprintf(buf, "%llu\n", idle_count); | 873 | return sprintf(buf, "%llu\n", idle_count); |
867 | } | 874 | } |
868 | static SYSDEV_ATTR(idle_count, 0444, show_idle_count, NULL); | 875 | static SYSDEV_ATTR(idle_count, 0444, show_idle_count, NULL); |
@@ -872,15 +879,22 @@ static ssize_t show_idle_time(struct sys_device *dev, | |||
872 | { | 879 | { |
873 | struct s390_idle_data *idle; | 880 | struct s390_idle_data *idle; |
874 | unsigned long long now, idle_time, idle_enter; | 881 | unsigned long long now, idle_time, idle_enter; |
882 | unsigned int sequence; | ||
875 | 883 | ||
876 | idle = &per_cpu(s390_idle, dev->id); | 884 | idle = &per_cpu(s390_idle, dev->id); |
877 | spin_lock(&idle->lock); | ||
878 | now = get_clock(); | 885 | now = get_clock(); |
886 | repeat: | ||
887 | sequence = idle->sequence; | ||
888 | smp_rmb(); | ||
889 | if (sequence & 1) | ||
890 | goto repeat; | ||
879 | idle_time = idle->idle_time; | 891 | idle_time = idle->idle_time; |
880 | idle_enter = idle->idle_enter; | 892 | idle_enter = idle->idle_enter; |
881 | if (idle_enter != 0ULL && idle_enter < now) | 893 | if (idle_enter != 0ULL && idle_enter < now) |
882 | idle_time += now - idle_enter; | 894 | idle_time += now - idle_enter; |
883 | spin_unlock(&idle->lock); | 895 | smp_rmb(); |
896 | if (idle->sequence != sequence) | ||
897 | goto repeat; | ||
884 | return sprintf(buf, "%llu\n", idle_time >> 12); | 898 | return sprintf(buf, "%llu\n", idle_time >> 12); |
885 | } | 899 | } |
886 | static SYSDEV_ATTR(idle_time_us, 0444, show_idle_time, NULL); | 900 | static SYSDEV_ATTR(idle_time_us, 0444, show_idle_time, NULL); |
@@ -908,11 +922,7 @@ static int __cpuinit smp_cpu_notify(struct notifier_block *self, | |||
908 | case CPU_ONLINE: | 922 | case CPU_ONLINE: |
909 | case CPU_ONLINE_FROZEN: | 923 | case CPU_ONLINE_FROZEN: |
910 | idle = &per_cpu(s390_idle, cpu); | 924 | idle = &per_cpu(s390_idle, cpu); |
911 | spin_lock_irq(&idle->lock); | 925 | memset(idle, 0, sizeof(struct s390_idle_data)); |
912 | idle->idle_enter = 0; | ||
913 | idle->idle_time = 0; | ||
914 | idle->idle_count = 0; | ||
915 | spin_unlock_irq(&idle->lock); | ||
916 | if (sysfs_create_group(&s->kobj, &cpu_online_attr_group)) | 926 | if (sysfs_create_group(&s->kobj, &cpu_online_attr_group)) |
917 | return NOTIFY_BAD; | 927 | return NOTIFY_BAD; |
918 | break; | 928 | break; |
diff --git a/arch/s390/kernel/time.c b/arch/s390/kernel/time.c index 215330a2c128..d4c8e9c47c81 100644 --- a/arch/s390/kernel/time.c +++ b/arch/s390/kernel/time.c | |||
@@ -36,7 +36,6 @@ | |||
36 | #include <linux/notifier.h> | 36 | #include <linux/notifier.h> |
37 | #include <linux/clocksource.h> | 37 | #include <linux/clocksource.h> |
38 | #include <linux/clockchips.h> | 38 | #include <linux/clockchips.h> |
39 | #include <linux/bootmem.h> | ||
40 | #include <asm/uaccess.h> | 39 | #include <asm/uaccess.h> |
41 | #include <asm/delay.h> | 40 | #include <asm/delay.h> |
42 | #include <asm/s390_ext.h> | 41 | #include <asm/s390_ext.h> |
@@ -62,9 +61,6 @@ | |||
62 | 61 | ||
63 | u64 sched_clock_base_cc = -1; /* Force to data section. */ | 62 | u64 sched_clock_base_cc = -1; /* Force to data section. */ |
64 | 63 | ||
65 | static ext_int_info_t ext_int_info_cc; | ||
66 | static ext_int_info_t ext_int_etr_cc; | ||
67 | |||
68 | static DEFINE_PER_CPU(struct clock_event_device, comparators); | 64 | static DEFINE_PER_CPU(struct clock_event_device, comparators); |
69 | 65 | ||
70 | /* | 66 | /* |
@@ -255,15 +251,11 @@ void __init time_init(void) | |||
255 | stp_reset(); | 251 | stp_reset(); |
256 | 252 | ||
257 | /* request the clock comparator external interrupt */ | 253 | /* request the clock comparator external interrupt */ |
258 | if (register_early_external_interrupt(0x1004, | 254 | if (register_external_interrupt(0x1004, clock_comparator_interrupt)) |
259 | clock_comparator_interrupt, | ||
260 | &ext_int_info_cc) != 0) | ||
261 | panic("Couldn't request external interrupt 0x1004"); | 255 | panic("Couldn't request external interrupt 0x1004"); |
262 | 256 | ||
263 | /* request the timing alert external interrupt */ | 257 | /* request the timing alert external interrupt */ |
264 | if (register_early_external_interrupt(0x1406, | 258 | if (register_external_interrupt(0x1406, timing_alert_interrupt)) |
265 | timing_alert_interrupt, | ||
266 | &ext_int_etr_cc) != 0) | ||
267 | panic("Couldn't request external interrupt 0x1406"); | 259 | panic("Couldn't request external interrupt 0x1406"); |
268 | 260 | ||
269 | if (clocksource_register(&clocksource_tod) != 0) | 261 | if (clocksource_register(&clocksource_tod) != 0) |
@@ -1445,14 +1437,14 @@ static void __init stp_reset(void) | |||
1445 | { | 1437 | { |
1446 | int rc; | 1438 | int rc; |
1447 | 1439 | ||
1448 | stp_page = alloc_bootmem_pages(PAGE_SIZE); | 1440 | stp_page = (void *) get_zeroed_page(GFP_ATOMIC); |
1449 | rc = chsc_sstpc(stp_page, STP_OP_CTRL, 0x0000); | 1441 | rc = chsc_sstpc(stp_page, STP_OP_CTRL, 0x0000); |
1450 | if (rc == 0) | 1442 | if (rc == 0) |
1451 | set_bit(CLOCK_SYNC_HAS_STP, &clock_sync_flags); | 1443 | set_bit(CLOCK_SYNC_HAS_STP, &clock_sync_flags); |
1452 | else if (stp_online) { | 1444 | else if (stp_online) { |
1453 | pr_warning("The real or virtual hardware system does " | 1445 | pr_warning("The real or virtual hardware system does " |
1454 | "not provide an STP interface\n"); | 1446 | "not provide an STP interface\n"); |
1455 | free_bootmem((unsigned long) stp_page, PAGE_SIZE); | 1447 | free_page((unsigned long) stp_page); |
1456 | stp_page = NULL; | 1448 | stp_page = NULL; |
1457 | stp_online = 0; | 1449 | stp_online = 0; |
1458 | } | 1450 | } |
diff --git a/arch/s390/kernel/vtime.c b/arch/s390/kernel/vtime.c index c8eb7255332b..c41bb0d416e1 100644 --- a/arch/s390/kernel/vtime.c +++ b/arch/s390/kernel/vtime.c | |||
@@ -25,13 +25,9 @@ | |||
25 | #include <asm/irq_regs.h> | 25 | #include <asm/irq_regs.h> |
26 | #include <asm/cputime.h> | 26 | #include <asm/cputime.h> |
27 | 27 | ||
28 | static ext_int_info_t ext_int_info_timer; | ||
29 | |||
30 | static DEFINE_PER_CPU(struct vtimer_queue, virt_cpu_timer); | 28 | static DEFINE_PER_CPU(struct vtimer_queue, virt_cpu_timer); |
31 | 29 | ||
32 | DEFINE_PER_CPU(struct s390_idle_data, s390_idle) = { | 30 | DEFINE_PER_CPU(struct s390_idle_data, s390_idle); |
33 | .lock = __SPIN_LOCK_UNLOCKED(s390_idle.lock) | ||
34 | }; | ||
35 | 31 | ||
36 | static inline __u64 get_vtimer(void) | 32 | static inline __u64 get_vtimer(void) |
37 | { | 33 | { |
@@ -153,11 +149,13 @@ void vtime_start_cpu(void) | |||
153 | vq->elapsed -= vq->idle - S390_lowcore.async_enter_timer; | 149 | vq->elapsed -= vq->idle - S390_lowcore.async_enter_timer; |
154 | } | 150 | } |
155 | 151 | ||
156 | spin_lock(&idle->lock); | 152 | idle->sequence++; |
153 | smp_wmb(); | ||
157 | idle->idle_time += idle_time; | 154 | idle->idle_time += idle_time; |
158 | idle->idle_enter = 0ULL; | 155 | idle->idle_enter = 0ULL; |
159 | idle->idle_count++; | 156 | idle->idle_count++; |
160 | spin_unlock(&idle->lock); | 157 | smp_wmb(); |
158 | idle->sequence++; | ||
161 | } | 159 | } |
162 | 160 | ||
163 | void vtime_stop_cpu(void) | 161 | void vtime_stop_cpu(void) |
@@ -244,15 +242,23 @@ cputime64_t s390_get_idle_time(int cpu) | |||
244 | { | 242 | { |
245 | struct s390_idle_data *idle; | 243 | struct s390_idle_data *idle; |
246 | unsigned long long now, idle_time, idle_enter; | 244 | unsigned long long now, idle_time, idle_enter; |
245 | unsigned int sequence; | ||
247 | 246 | ||
248 | idle = &per_cpu(s390_idle, cpu); | 247 | idle = &per_cpu(s390_idle, cpu); |
249 | spin_lock(&idle->lock); | 248 | |
250 | now = get_clock(); | 249 | now = get_clock(); |
250 | repeat: | ||
251 | sequence = idle->sequence; | ||
252 | smp_rmb(); | ||
253 | if (sequence & 1) | ||
254 | goto repeat; | ||
251 | idle_time = 0; | 255 | idle_time = 0; |
252 | idle_enter = idle->idle_enter; | 256 | idle_enter = idle->idle_enter; |
253 | if (idle_enter != 0ULL && idle_enter < now) | 257 | if (idle_enter != 0ULL && idle_enter < now) |
254 | idle_time = now - idle_enter; | 258 | idle_time = now - idle_enter; |
255 | spin_unlock(&idle->lock); | 259 | smp_rmb(); |
260 | if (idle->sequence != sequence) | ||
261 | goto repeat; | ||
256 | return idle_time; | 262 | return idle_time; |
257 | } | 263 | } |
258 | 264 | ||
@@ -557,8 +563,7 @@ void init_cpu_vtimer(void) | |||
557 | void __init vtime_init(void) | 563 | void __init vtime_init(void) |
558 | { | 564 | { |
559 | /* request the cpu timer external interrupt */ | 565 | /* request the cpu timer external interrupt */ |
560 | if (register_early_external_interrupt(0x1005, do_cpu_timer_interrupt, | 566 | if (register_external_interrupt(0x1005, do_cpu_timer_interrupt)) |
561 | &ext_int_info_timer) != 0) | ||
562 | panic("Couldn't request external interrupt 0x1005"); | 567 | panic("Couldn't request external interrupt 0x1005"); |
563 | 568 | ||
564 | /* Enable cpu timer interrupts on the boot cpu. */ | 569 | /* Enable cpu timer interrupts on the boot cpu. */ |
diff --git a/arch/s390/power/swsusp_asm64.S b/arch/s390/power/swsusp_asm64.S index 3c74e7d827c9..76d688da32fa 100644 --- a/arch/s390/power/swsusp_asm64.S +++ b/arch/s390/power/swsusp_asm64.S | |||
@@ -109,10 +109,11 @@ swsusp_arch_resume: | |||
109 | aghi %r15,-STACK_FRAME_OVERHEAD | 109 | aghi %r15,-STACK_FRAME_OVERHEAD |
110 | stg %r1,__SF_BACKCHAIN(%r15) | 110 | stg %r1,__SF_BACKCHAIN(%r15) |
111 | 111 | ||
112 | #ifdef CONFIG_SMP | ||
112 | /* Save boot cpu number */ | 113 | /* Save boot cpu number */ |
113 | brasl %r14,smp_get_phys_cpu_id | 114 | brasl %r14,smp_get_phys_cpu_id |
114 | lgr %r10,%r2 | 115 | lgr %r10,%r2 |
115 | 116 | #endif | |
116 | /* Deactivate DAT */ | 117 | /* Deactivate DAT */ |
117 | stnsm __SF_EMPTY(%r15),0xfb | 118 | stnsm __SF_EMPTY(%r15),0xfb |
118 | 119 | ||
@@ -177,11 +178,12 @@ swsusp_arch_resume: | |||
177 | /* Pointer to save arae */ | 178 | /* Pointer to save arae */ |
178 | lghi %r13,0x1000 | 179 | lghi %r13,0x1000 |
179 | 180 | ||
181 | #ifdef CONFIG_SMP | ||
180 | /* Switch CPUs */ | 182 | /* Switch CPUs */ |
181 | lgr %r2,%r10 /* get cpu id */ | 183 | lgr %r2,%r10 /* get cpu id */ |
182 | llgf %r3,0x318(%r13) | 184 | llgf %r3,0x318(%r13) |
183 | brasl %r14,smp_switch_boot_cpu_in_resume | 185 | brasl %r14,smp_switch_boot_cpu_in_resume |
184 | 186 | #endif | |
185 | /* Restore prefix register */ | 187 | /* Restore prefix register */ |
186 | spx 0x318(%r13) | 188 | spx 0x318(%r13) |
187 | 189 | ||