diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-06-22 12:51:28 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-06-22 12:51:28 -0700 |
commit | a9b011f5ac57cbaedb32a8149f3d39d7b2c1f0e0 (patch) | |
tree | 89c850cc9e2ed949f5fc3b99180cd6cb70db6160 /arch/s390/kernel/kprobes.c | |
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/s390/kernel/kprobes.c')
-rw-r--r-- | arch/s390/kernel/kprobes.c | 18 |
1 files changed, 7 insertions, 11 deletions
diff --git a/arch/s390/kernel/kprobes.c b/arch/s390/kernel/kprobes.c index 9bb2f6241d9..86783efa24e 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) static int __kprobes swap_instruction(void *aref) { + struct kprobe_ctlblk *kcb = get_kprobe_ctlblk(); + unsigned long status = kcb->kprobe_status; struct ins_replace_args *args = aref; + int rc; - return probe_kernel_write(args->ptr, &args->new, sizeof(args->new)); + kcb->kprobe_status = KPROBE_SWAP_INST; + rc = probe_kernel_write(args->ptr, &args->new, sizeof(args->new)); + kcb->kprobe_status = status; + return rc; } void __kprobes arch_arm_kprobe(struct kprobe *p) { - struct kprobe_ctlblk *kcb = get_kprobe_ctlblk(); - unsigned long status = kcb->kprobe_status; struct ins_replace_args args; args.ptr = p->addr; args.old = p->opcode; args.new = BREAKPOINT_INSTRUCTION; - - kcb->kprobe_status = KPROBE_SWAP_INST; stop_machine(swap_instruction, &args, NULL); - kcb->kprobe_status = status; } void __kprobes arch_disarm_kprobe(struct kprobe *p) { - struct kprobe_ctlblk *kcb = get_kprobe_ctlblk(); - unsigned long status = kcb->kprobe_status; struct ins_replace_args args; args.ptr = p->addr; args.old = BREAKPOINT_INSTRUCTION; args.new = p->opcode; - - kcb->kprobe_status = KPROBE_SWAP_INST; stop_machine(swap_instruction, &args, NULL); - kcb->kprobe_status = status; } void __kprobes arch_remove_kprobe(struct kprobe *p) |