• Sebastian Andrzej Siewior's avatar
    net: Write lock dev_base_lock without disabling bottom halves. · fd888e85
    Sebastian Andrzej Siewior authored
    The writer acquires dev_base_lock with disabled bottom halves.
    The reader can acquire dev_base_lock without disabling bottom halves
    because there is no writer in softirq context.
    
    On PREEMPT_RT the softirqs are preemptible and local_bh_disable() acts
    as a lock to ensure that resources, that are protected by disabling
    bottom halves, remain protected.
    This leads to a circular locking dependency if the lock acquired with
    disabled bottom halves (as in write_lock_bh()) and somewhere else with
    enabled bottom halves (as by read_lock() in netstat_show()) followed by
    disabling bottom halves (cxgb_get_stats() -> t4_wr_mbox_meat_timeout()
    -> spin_lock_bh()). This is the reverse locking order.
    
    All read_lock() invocation are from sysfs callback which are not invoked
    from softirq context. Therefore there is no need to disable bottom
    halves while acquiring a write lock.
    
    Acquire the write lock of dev_base_lock without disabling bottom halves.
    Reported-by: default avatarPei Zhang <pezhang@redhat.com>
    Reported-by: default avatarLuis Claudio R. Goncalves <lgoncalv@redhat.com>
    Signed-off-by: default avatarSebastian Andrzej Siewior <bigeasy@linutronix.de>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    fd888e85
rtnetlink.c 137 KB