• iceberg's avatar
    [media] double mutex lock in drivers/media/radio/si470x/radio-si470x- · 2b97e220
    iceberg authored
    KERNEL_VERSION: 2.6.37
    common.c in function ssize_t si470x_fops_read.
    
    1. First mutex_lock on &radio->lock in line 441
    2. Second in line 462
    
    I think that mutex in line 462 is not needed.
    
     433static ssize_t si470x_fops_read(struct file *file, char __user *buf,
     434                size_t count, loff_t *ppos)
     435{
    ....
     441        mutex_lock(&radio->lock);
     442        if ((radio->registers[SYSCONFIG1] & SYSCONFIG1_RDS) == 0)
     443                si470x_rds_on(radio);
     444
     445        /* block if no new data available */
     446        while (radio->wr_index == radio->rd_index) {
     447                if (file->f_flags & O_NONBLOCK) {
     448                        retval = -EWOULDBLOCK;
     449                        goto done;
     450                }
     451                if (wait_event_interruptible(radio->read_queue,
     452                        radio->wr_index != radio->rd_index) < 0) {
     453                        retval = -EINTR;
     454                        goto done;
     455                }
     456        }
     457
     458        /* calculate block count from byte count */
     459        count /= 3;
     460
     461        /* copy RDS block out of internal buffer and to user buffer */
     462        mutex_lock(&radio->lock);
    
    Found by Linux Device Drivers Verification Project
    
    Remove second mutex.
    Signed-off-by: default avatarAlexander Strakh <strakh@ispras.ru>
    Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
    2b97e220
radio-si470x-common.c 23.4 KB