do_dump_sa

- module
- ucli
This commit is contained in:
zy
2023-12-12 04:05:56 -05:00
parent 96462422ce
commit 69bf4c8c69
7 changed files with 155 additions and 75 deletions

View File

@@ -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;
}