Process 在内核上执行休眠操作之前,在迭代任务列表时解锁读锁集

Process 在内核上执行休眠操作之前,在迭代任务列表时解锁读锁集,process,linux-kernel,driver,Process,Linux Kernel,Driver,在我的内核模块中,我想迭代任务列表,并对设置了任务->标志的所有进程执行一些休眠操作。我知道通过持有read_lock(任务列表锁)/rcu_read_lock,我不应该做任何昏昏欲睡的操作。因此,我编写了如下代码: 1.获取读取锁 2.迭代任务(针对每个进程) 3.如果设置了我的标志,我将解锁任务列表锁定并获取任务结构 4.然后我执行睡眠操作 5.放置任务结构 6.再次获取读取锁定(&任务列表锁定) 7.循环继续 read_lock(&tasklist_lock); for_

在我的内核模块中,我想迭代任务列表,并对设置了任务->标志的所有进程执行一些休眠操作。我知道通过持有read_lock(任务列表锁)/rcu_read_lock,我不应该做任何昏昏欲睡的操作。因此,我编写了如下代码:

1.获取读取锁
2.迭代任务(针对每个进程)
3.如果设置了我的标志,我将解锁任务列表锁定并获取任务结构
4.然后我执行睡眠操作
5.放置任务结构
6.再次获取读取锁定(&任务列表锁定)
7.循环继续

read_lock(&tasklist_lock);

    for_each_process(c) {

            if (c->my_flag) {

            read_unlock(&tasklist_lock);

                    get_task_struct(c);

                         ...

                         Do some sleepy_operation()

                         ...

                    put_task_struct(c);

                    read_lock(&tasklist_lock);

            }
    }
请让我知道我的方法是否正确