Implement functions to get next/prev tasks from __switch_to() 69/157669/3
authorVyacheslav Cherkashin <v.cherkashin@samsung.com>
Mon, 30 Jan 2017 17:01:03 +0000 (20:01 +0300)
committerVyacheslav Cherkashin <v.cherkashin@samsung.com>
Mon, 27 Nov 2017 09:13:17 +0000 (12:13 +0300)
functions:
swap_switch_to_prev()
swap_switch_to_next()

Change-Id: I09ba03d506a2ae361ddfac62fe3323ad300a7c5d
Signed-off-by: Vyacheslav Cherkashin <v.cherkashin@samsung.com>
modules/kprobe/arch/arm/swap-asm/swap_kprobes.h
modules/kprobe/arch/arm64/swap-asm/swap_kprobes.h
modules/kprobe/arch/x86/swap-asm/swap_kprobes.h

index 0ef86f2e87b22297f4d33ead55852e0a2c494e84..d418a586a5b513ec25b43402c0b4d6d8aab4227d 100644 (file)
@@ -266,6 +266,16 @@ static inline unsigned long swap_get_sarg(struct pt_regs *regs, unsigned long n)
        return swap_get_karg(regs, n);
 }
 
+static inline struct task_struct *swap_switch_to_prev(struct pt_regs *regs)
+{
+       return (struct task_struct *)swap_get_karg(regs, 0);
+}
+
+static inline struct task_struct *swap_switch_to_next(struct pt_regs *regs)
+{
+       return ((struct thread_info *)swap_get_karg(regs, 2))->task;
+}
+
 /* jumper */
 typedef unsigned long (*jumper_cb_t)(void *);
 
index 7975938fa44ddbc3a90e9ae490b4efb0e77de4e6..4ee86ce63663618871b1c0e4a3b6102c32243ba4 100644 (file)
@@ -96,6 +96,16 @@ static inline unsigned long swap_get_sarg(struct pt_regs *regs,
        return swap_get_karg(regs, n);
 }
 
+static inline struct task_struct *swap_switch_to_prev(struct pt_regs *regs)
+{
+       return (struct task_struct *)swap_get_karg(regs, 0);
+}
+
+static inline struct task_struct *swap_switch_to_next(struct pt_regs *regs)
+{
+       return (struct task_struct *)swap_get_karg(regs, 1);
+}
+
 static inline unsigned long swap_get_kpc(struct pt_regs *regs)
 {
        return regs->pc;
index 7aed0bb58012a0134aa4f3997d16dfa3c7295ace..b44332c77550197967e91e0c48b98529f8219774 100644 (file)
@@ -246,6 +246,16 @@ static inline unsigned long swap_get_sarg(struct pt_regs *regs, unsigned long n)
        return *((unsigned long *)kernel_stack_pointer(regs) + n + 1);
 }
 
+static inline struct task_struct *swap_switch_to_prev(struct pt_regs *regs)
+{
+       return (struct task_struct *)swap_get_karg(regs, 0);
+}
+
+static inline struct task_struct *swap_switch_to_next(struct pt_regs *regs)
+{
+       return (struct task_struct *)swap_get_karg(regs, 1);
+}
+
 /* jumper */
 typedef unsigned long (*jumper_cb_t)(void *);