From 24bbfd7764e56e5f19c6b8c20bfa896cbf0a3711 Mon Sep 17 00:00:00 2001 From: seantywork Date: Wed, 17 Sep 2025 23:49:26 +0000 Subject: [PATCH] rcu thread --- krcu-deadly/2509-17.xyz.md | 1 - krcu-deadly/README.md | 5 ++++ krcu-deadly/rcudeadly.c | 47 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 52 insertions(+), 1 deletion(-) delete mode 100644 krcu-deadly/2509-17.xyz.md create mode 100644 krcu-deadly/README.md diff --git a/krcu-deadly/2509-17.xyz.md b/krcu-deadly/2509-17.xyz.md deleted file mode 100644 index 4287ca8..0000000 --- a/krcu-deadly/2509-17.xyz.md +++ /dev/null @@ -1 +0,0 @@ -# \ No newline at end of file diff --git a/krcu-deadly/README.md b/krcu-deadly/README.md new file mode 100644 index 0000000..136000e --- /dev/null +++ b/krcu-deadly/README.md @@ -0,0 +1,5 @@ +# kernel-rcu-deadly + +- source: [linuxyz/krcu-deadly](https://github.com/seantywork/linuxyz/tree/main/krcu-deadly) +- date: 2509- + diff --git a/krcu-deadly/rcudeadly.c b/krcu-deadly/rcudeadly.c index 3ea0ec3..23cd927 100644 --- a/krcu-deadly/rcudeadly.c +++ b/krcu-deadly/rcudeadly.c @@ -5,20 +5,67 @@ #include #include #include +#include +#include +#include +#define OP_COUNT 10 +static struct task_struct *task_write; +static struct task_struct *task_read; +static int w = 10; +static int r = 11; +static int task_writer(void *arg){ + + int v = *(int *)arg; + + for(int i = 0; i < OP_COUNT; i++){ + printk(KERN_INFO "rcudeadly: v: %d: w: %d\n", v, i); + mdelay(1000); + } + + return 0; +} + +static int task_reader(void *arg){ + + int v = *(int *)arg; + + for(int i = 0; i < OP_COUNT; i++){ + printk(KERN_INFO "rcudeadly: v: %d: r: %d\n", v, i); + mdelay(1000); + } + + return 0; +} static int __init rcu_deadly_init(void){ + task_write = kthread_run(task_writer, (void*)&w, "tw/%d", w); + if(IS_ERR(task_write)){ + printk(KERN_ERR "rcudeadly: failed to create task_write thread\n"); + return -1; + } + task_read = kthread_run(task_reader, (void*)&r, "tr/%d", r); + if(IS_ERR(task_read)){ + printk(KERN_ERR "rcudeadly: failed to create task_read thread\n"); + return -1; + } + get_task_struct(task_write); + get_task_struct(task_read); + printk(KERN_INFO "rcudeadly: loaded\n"); return 0; } static void __exit rcu_deadly_exit(void){ + kthread_stop(task_write); + kthread_stop(task_read); + printk(KERN_INFO "rcudeadly: unloaded\n"); } -- 2.43.0