• Andy Walls's avatar
    [media] v4l2-ctrls: eliminate lockdep false alarms for struct v4l2_ctrl_handler.lock · 6cd247ef
    Andy Walls authored
    When calling v4l2_ctrl_add_handler(), lockdep would detect a potential
    recursive locking problem on a situation that is by design intended and
    not a recursive lock.  This happened because all struct
    v4l2_ctrl_handler.lock mutexes were created as members of the same lock
    class in v4l2_ctrl_handler_init(), and v4l2_ctrl_add_handler() takes the
    hdl->lock on two different v4l2_ctrl_handler instances.
    This change breaks the large lockdep lock class for struct
    v4l2_ctrl_handler.lock and breaks it into v4l2_ctrl_handler
    instantiation specific lock classes with meaningful class names.
    This will validly eliminate lockdep alarms for v4l2_ctrl_handler locking
    validation, as long as the relationships between drivers adding v4l2
    controls to their own handler from other v4l2 drivers' control handlers
    remains straightforward.
    struct v4l2_ctrl_handler.lock lock classes are created with names such
    that the output of cat /proc/lockdep indicates where in the v4l2 driver
    code v4l2_ctrl_handle_init() is being called on instantiations:
    ffffffffa045f490 FD:   10 BD:    8 +.+...: cx2341x:1534:(hdl)->lock
    ffffffffa0497d20 FD:   12 BD:    2 +.+.+.: saa7115:1581:(hdl)->lock
    ffffffffa04ac660 FD:   14 BD:    2 +.+.+.: msp3400_driver:756:(hdl)->lock
    ffffffffa0484b90 FD:   12 BD:    1 +.+.+.: ivtv_gpio:366:(&itv->hdl_gpio)->lock
    ffffffffa04eb530 FD:   11 BD:    2 +.+.+.: cx25840_core:1982:(&state->hdl)->lock
    ffffffffa04fbc80 FD:   11 BD:    3 +.+.+.: wm8775:246:(&state->hdl)->lock
    Some lock chains, that were previously causing the recursion alarms, are
    now visible in the output of cat /proc/lockdep_chains:
    irq_context: 0
    [ffffffffa0497d20] saa7115:1581:(hdl)->lock
    [ffffffffa045f490] cx2341x:1534:(hdl)->lock
    irq_context: 0
    [ffffffffa04ac660] msp3400_driver:756:(hdl)->lock
    [ffffffffa045f490] cx2341x:1534:(hdl)->lock
    irq_context: 0
    [ffffffffa0484b90] ivtv_gpio:366:(&itv->hdl_gpio)->lock
    [ffffffffa045f490] cx2341x:1534:(hdl)->lock
    irq_context: 0
    [ffffffffa04eb530] cx25840_core:1982:(&state->hdl)->lock
    [ffffffffa045f490] cx2341x:1534:(hdl)->lock
    irq_context: 0
    [ffffffffa04fbc80] wm8775:246:(&state->hdl)->lock
    [ffffffffa045f490] cx2341x:1534:(hdl)->lock
    Signed-off-by: default avatarAndy Walls <awalls@md.metrocast.net>
    [hans.verkuil@cisco.com: keep mutex_init in v4l2_ctrl_handler_init_class]
    Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
    Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
    6cd247ef
v4l2-ctrls.h 26.8 KB