• Tejun Heo's avatar
    cgroup: css_set_lock should nest inside tasklist_lock · d8742e22
    Tejun Heo authored
    cgroup_enable_task_cg_lists() incorrectly nests non-irq-safe
    tasklist_lock inside irq-safe css_set_lock triggering the following
    lockdep warning.
    
      WARNING: possible irq lock inversion dependency detected
      4.17.0-rc1-00027-gb37d049 #6 Not tainted
      --------------------------------------------------------
      systemd/1 just changed the state of lock:
      00000000fe57773b (css_set_lock){..-.}, at: cgroup_free+0xf2/0x12a
      but this lock took another, SOFTIRQ-unsafe lock in the past:
       (tasklist_lock){.+.+}
    
      and interrupts could create inverse lock ordering between them.
    
      other info that might help us debug this:
       Possible interrupt unsafe locking scenario:
    
    	 CPU0                    CPU1
    	 ----                    ----
        lock(tasklist_lock);
    				 local_irq_disable();
    				 lock(css_set_lock);
    				 lock(tasklist_lock);
        <Interrupt>
          lock(css_set_lock);
    
       *** DEADLOCK ***
    
    The condition is highly unlikely to actually happen especially given
    that the path is executed only once per boot.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Reported-by: default avatarBoqun Feng <boqun.feng@gmail.com>
    d8742e22
cgroup.c 157 KB