• Dan Carpenter's avatar
    ALSA: take tu->qlock with irqs disabled · bfe70783
    Dan Carpenter authored
    We should disable irqs when we take the tu->qlock because it is used in
    the irq handler.  The only place that doesn't is
    snd_timer_user_ccallback().  Most of the time snd_timer_user_ccallback()
    is called with interrupts disabled but the the first ti->ccallback()
    call in snd_timer_notify1() has interrupts enabled.
    
    This was caught by lockdep which generates the following message:
    
    > =================================
    > [ INFO: inconsistent lock state ]
    > 2.6.34-rc5 #5
    > ---------------------------------
    > inconsistent {HARDIRQ-ON-W} -> {IN-HARDIRQ-W} usage.
    > dolphin/4003 [HC1[1]:SC0[0]:HE0:SE1] takes:
    > (&(&tu->qlock)->rlock){?.+...}, at: [<f84ec472>] snd_timer_user_tinterrupt+0x28/0x132 [snd_timer]
    > {HARDIRQ-ON-W} state was registered at:
    >   [<c1048de9>] __lock_acquire+0x654/0x1482
    >   [<c1049c73>] lock_acquire+0x5c/0x73
    >   [<c125ac3e>] _raw_spin_lock+0x25/0x34
    >   [<f84ec370>] snd_timer_user_ccallback+0x55/0x95 [snd_timer]
    >   [<f84ecc4b>] snd_timer_notify1+0x53/0xca [snd_timer]
    Reported-by: default avatarStefan Richter <stefanr@s5r6.in-berlin.de>
    Signed-off-by: default avatarDan Carpenter <error27@gmail.com>
    Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    bfe70783
timer.c 50.6 KB