summaryrefslogtreecommitdiff
path: root/source/module/monitor_kernel.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/module/monitor_kernel.c')
-rw-r--r--source/module/monitor_kernel.c37
1 files changed, 27 insertions, 10 deletions
diff --git a/source/module/monitor_kernel.c b/source/module/monitor_kernel.c
index a7c1383..644da98 100644
--- a/source/module/monitor_kernel.c
+++ b/source/module/monitor_kernel.c
@@ -45,6 +45,23 @@ typedef struct {
int id;
} ioctl_id;
+// dump log from buffer
+static int dump_log(ioctl_dump_param *dump_param, unsigned long ioctl_param,
+ struct diag_variant_buffer *buffer) {
+ int ret = 0;
+ ret = copy_from_user(dump_param, (ioctl_dump_param *)ioctl_param,
+ sizeof(ioctl_dump_param));
+ printk(KERN_INFO "dump_param: %p %lx %p\n", dump_param->user_ptr_len,
+ dump_param->user_buf_len, dump_param->user_buf);
+ if (!ret) {
+ ret = copy_to_user_variant_buffer(buffer, dump_param->user_ptr_len,
+ dump_param->user_buf,
+ dump_param->user_buf_len);
+ printk(KERN_INFO "ret %d, %lx\n", ret, dump_param->user_buf_len);
+ }
+ return ret;
+}
+
static long device_ioctl(struct file *file, unsigned int ioctl_num,
unsigned long ioctl_param) {
int ret = 0;
@@ -74,17 +91,10 @@ static long device_ioctl(struct file *file, unsigned int ioctl_num,
break;
case IOCTL_DUMP_LOG:
printk(KERN_INFO "variable_monitor IOCTL_DUMP_LOG\n");
- ret = copy_from_user(&dump_param, (ioctl_dump_param *)ioctl_param,
- sizeof(ioctl_dump_param));
- printk(KERN_INFO "dump_param: %p %lx %p\n", dump_param.user_ptr_len,
- dump_param.user_buf_len, dump_param.user_buf);
- if (!ret) {
- ret = copy_to_user_variant_buffer(
- &load_monitor_variant_buffer, dump_param.user_ptr_len,
- dump_param.user_buf, dump_param.user_buf_len);
- printk(KERN_INFO "ret %d, %lx\n", ret, dump_param.user_buf_len);
+ ret = dump_log(&dump_param, ioctl_param, &load_monitor_variant_buffer);
+ if (ret) {
+ printk(KERN_INFO "dump_log failed\n");
}
- // printk(KERN_INFO "copy_to_user_variant_buffer \n");
break;
case IOCTL_PID:
printk(KERN_INFO "variable_monitor PID\n");
@@ -96,6 +106,13 @@ static long device_ioctl(struct file *file, unsigned int ioctl_num,
ret = copy_from_user(&wid, (ioctl_id *)ioctl_param, sizeof(ioctl_id));
diag_tgid(wid.id);
break;
+ case IOCTL_DUMP_LOG_SA:
+ printk(KERN_INFO "variable_monitor IOCTL_DUMP_LOG_SA\n");
+ ret = dump_log(&dump_param, ioctl_param, &stand_alone_buffer);
+ if (ret) {
+ printk(KERN_INFO "dump_log failed\n");
+ }
+ break;
default:
break;
}