为什么在读锁块内调用`synchronize_rcu()`时不会死锁?

时间:2018-08-18 07:41:31

标签: c linux kernel kernel-module rcu

synchronize_rcu()用于仅等待正在进行的RCU读取侧关键部分完成。如果是这样,当在读取块中被调用时,应该永远将其阻塞。但是,以下代码在我的Linux内核上运行良好,为什么?

void port_range_clean( void ) 
{
    struct port_range *p;

redo:
    rcu_read_lock();
    list_for_each_entry_rcu(p, &port_rt->ports, list) {
        list_del_rcu(&p->list);
        synchronize_rcu();
         rcu_read_unlock();           
        kfree(p);
        goto redo;
    }
}

0 个答案:

没有答案