summaryrefslogtreecommitdiffstats
path: root/arch/s390/kernel/kprobes.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2009-06-22 12:51:28 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2009-06-22 12:51:28 -0700
commita9b011f5ac57cbaedb32a8149f3d39d7b2c1f0e0 (patch)
tree89c850cc9e2ed949f5fc3b99180cd6cb70db6160 /arch/s390/kernel/kprobes.c
parentb5bdd43876e475724c662f99206f0349c67e33e6 (diff)
parentda6330fccc251db73945ee3eb6248985cf2574de (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.c18
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)