[PROTO] Add type/subtype in msg_function_exit 98/22698/3
authorVasiliy Ulyanov <v.ulyanov@samsung.com>
Tue, 10 Jun 2014 08:28:40 +0000 (12:28 +0400)
committerVasiliy Ulyanov <v.ulyanov@samsung.com>
Fri, 18 Jul 2014 09:32:04 +0000 (13:32 +0400)
Change-Id: I451d282f315c84009881e76d43efbbc76090d35b
Signed-off-by: Vasiliy Ulyanov <v.ulyanov@samsung.com>
ks_features/ks_features.c
us_manager/sspt/ip.c
writer/swap_writer_module.c
writer/swap_writer_module.h

index a5fe06f..4a56671 100644 (file)
@@ -135,10 +135,12 @@ static int ret_handler(struct kretprobe_instance *ri, struct pt_regs *regs)
        struct kretprobe *rp = ri->rp;
 
        if (rp && check_event(current)) {
+               struct ks_probe *ksp = container_of(rp, struct ks_probe, rp);
                unsigned long func_addr = (unsigned long)rp->kp.addr;
                unsigned long ret_addr = (unsigned long)ri->ret_addr;
+               int sub_type = ksp->sub_type;
 
-               exit_event('x', regs, func_addr, ret_addr);
+               exit_event('x', regs, PT_KS, sub_type, func_addr, ret_addr);
        }
 
        return 0;
index c7779ce..a54353e 100644 (file)
@@ -54,7 +54,7 @@ static int ret_handler(struct uretprobe_instance *ri, struct pt_regs *regs)
                unsigned long addr = (unsigned long)ip->orig_addr;
                unsigned long ret_addr = (unsigned long)ri->ret_addr;
 
-               exit_event(ip->ret_type, regs, addr, ret_addr);
+               exit_event(ip->ret_type, regs, PT_US, PST_NONE, addr, ret_addr);
        }
 
        return 0;
index f1853c2..af9646f 100644 (file)
@@ -914,6 +914,8 @@ EXPORT_SYMBOL_GPL(entry_event);
 struct msg_func_exit {
        u32 pid;                /**< PID */
        u32 tid;                /**< TID */
+       u16 probe_type;         /**< Probe type */
+       u16 probe_sub_type;     /**< Probe subtype */
        u64 pc_addr;            /**< Instruction pointer */
        u64 caller_pc_addr;     /**< Return address */
        u32 cpu_num;            /**< CPU number */
@@ -1003,8 +1005,8 @@ static int pack_msg_ret_val(char *buf, int len, char ret_type,
 
 
 static int pack_msg_func_exit(char *buf, int len, char ret_type,
-                             struct pt_regs *regs, unsigned long func_addr,
-                             unsigned long ret_addr)
+                             struct pt_regs *regs, int pt, int sub_type,
+                             unsigned long func_addr, unsigned long ret_addr)
 {
        struct msg_func_exit *mfe = (struct msg_func_exit *)buf;
        struct task_struct *task = current;
@@ -1012,6 +1014,8 @@ static int pack_msg_func_exit(char *buf, int len, char ret_type,
 
        mfe->pid = task->tgid;
        mfe->tid = task->pid;
+       mfe->probe_type = pt;
+       mfe->probe_sub_type = sub_type;
        mfe->cpu_num = smp_processor_id();
        mfe->pc_addr = func_addr;
        mfe->caller_pc_addr = ret_addr;
@@ -1030,12 +1034,13 @@ static int pack_msg_func_exit(char *buf, int len, char ret_type,
  *
  * @param ret_type Return value type.
  * @param regs CPU register data.
+ * @param sub_type Event subtype.
  * @param func_addr Function address.
  * @param ret_addr Return address.
  * @return Written data size on success, negative error code on error.
  */
-int exit_event(char ret_type, struct pt_regs *regs, unsigned long func_addr,
-              unsigned long ret_addr)
+int exit_event(char ret_type, struct pt_regs *regs, int pt, int sub_type,
+              unsigned long func_addr, unsigned long ret_addr)
 {
        char *buf, *payload, *buf_end;
        int ret;
@@ -1043,7 +1048,7 @@ int exit_event(char ret_type, struct pt_regs *regs, unsigned long func_addr,
        buf = get_current_buf();
        payload = pack_basic_msg_fmt(buf, MSG_FUNCTION_EXIT);
        /* FIXME: len=1024 */
-       ret = pack_msg_func_exit(payload, 1024, ret_type, regs,
+       ret = pack_msg_func_exit(payload, 1024, ret_type, regs, pt, sub_type,
                                 func_addr, ret_addr);
        if (ret < 0)
                goto put_buf;
@@ -1380,7 +1385,7 @@ enum { max_custom_event_size = 2048 };
  * @return Written data size on success, negative error code on error.
  */
 int custom_entry_event(unsigned long func_addr, struct pt_regs *regs,
-                      int type, int sub_type, const char *fmt, ...)
+                      int pt, int sub_type, const char *fmt, ...)
 {
        char *buf, *payload, *args, *buf_end;
        va_list vargs;
@@ -1389,7 +1394,7 @@ int custom_entry_event(unsigned long func_addr, struct pt_regs *regs,
        buf = get_current_buf();
        payload = pack_basic_msg_fmt(buf, MSG_FUNCTION_ENTRY);
        args = pack_msg_func_entry(payload, fmt, func_addr,
-                                  regs, type, sub_type);
+                                  regs, pt, sub_type);
 
        va_start(vargs, fmt);
        ret = pack_custom_event(args, max_custom_event_size, fmt, vargs);
@@ -1422,7 +1427,8 @@ EXPORT_SYMBOL_GPL(custom_entry_event);
  * @return Written data size on success, negative error code on error.
  */
 int custom_exit_event(unsigned long func_addr, unsigned long ret_addr,
-                     struct pt_regs *regs, const char *fmt, ...)
+                     struct pt_regs *regs, int pt, int sub_type,
+                     const char *fmt, ...)
 {
        char *buf, *payload, *buf_end;
        int ret;
@@ -1430,7 +1436,8 @@ int custom_exit_event(unsigned long func_addr, unsigned long ret_addr,
        buf = get_current_buf();
        payload = pack_basic_msg_fmt(buf, MSG_FUNCTION_EXIT);
        ret = pack_msg_func_exit(payload, max_custom_event_size,
-                                fmt[0], regs, func_addr, ret_addr);
+                                fmt[0], regs, pt, sub_type,
+                                func_addr, ret_addr);
        if (ret < 0)
                goto put_buf;
 
index 74a34c0..c975a8e 100644 (file)
@@ -77,8 +77,8 @@ int sample_msg(struct pt_regs *regs);
 
 int entry_event(const char *fmt, unsigned long func_addr, struct pt_regs *regs,
                enum PROBE_TYPE pt, int sub_type);
-int exit_event(char ret_type, struct pt_regs *regs, unsigned long func_addr,
-              unsigned long ret_addr);
+int exit_event(char ret_type, struct pt_regs *regs, int pt, int sub_type,
+              unsigned long func_addr, unsigned long ret_addr);
 
 int switch_entry(struct pt_regs *regs);
 int switch_exit(struct pt_regs *regs);
@@ -88,8 +88,9 @@ int error_msg(const char *fmt, ...);
 int raw_msg(char *buf, size_t len);
 
 int custom_entry_event(unsigned long func_addr, struct pt_regs *regs,
-                      int type, int sub_type, const char *fmt, ...);
+                      int pt, int sub_type, const char *fmt, ...);
 int custom_exit_event(unsigned long func_addr, unsigned long ret_addr,
-                     struct pt_regs *regs, const char *fmt, ...);
+                     struct pt_regs *regs, int pt, int sub_type,
+                     const char *fmt, ...);
 
 #endif /* _SWAP_MSG_H */