Showing error 602

User: Jiri Slaby
Error type: Double Unlock
Error type description: Some lock is unlocked twice unintentionally in a sequence
File location: sound/oss/sscape.c
Line in file: 948
Project: Linux Kernel
Project version: 2.6.28
Confirmation: Driver removed b7d5d946e50116f4150542f881ac90ac74c28165
Tools: Stanse (1.2)
Entered: 2011-11-07 22:20:57 UTC


Source:

 918        int                     timeout_val;
 919        char*                     data,*dt;
 920        int                     len,l;
 921        unsigned long        flags;
 922
 923        sscape_write( devc, 9, sscape_read(devc, 9 )  & 0x3F );
 924        sscape_write( devc, 2, (devc -> dma << 4) | 0x80 );
 925        sscape_write( devc, 3, 0x20 );
 926        sscape_write( devc, 9, sscape_read( devc, 9 )  | 0x80 );
 927        
 928        len = mod_firmware_load(fn, &data);
 929        if (len == 0) {
 930                    printk(KERN_ERR "sscape: file not found: %s\n", fn);
 931                    return 0;
 932        }
 933        dt = data;
 934        spin_lock_irqsave(&devc->lock,flags);
 935        while ( len > 0 ) {
 936                if (len > devc -> buffsize) l = devc->buffsize;
 937                else l = len;
 938                len -= l;                
 939                memcpy(devc->raw_buf, dt, l); dt += l;
 940                sscape_start_dma(devc->dma, devc->raw_buf_phys, l, 0x48);
 941                sscape_pnp_start_dma ( devc, 0 );
 942                if (sscape_pnp_wait_dma ( devc, 0 ) == 0) {
 943                        spin_unlock_irqrestore(&devc->lock,flags);
 944                        return 0;
 945                }
 946        }
 947        
 948        spin_unlock_irqrestore(&devc->lock,flags);
 949        vfree(data);
 950        
 951        outb(0, devc -> base + 2);
 952        outb(0, devc -> base);
 953
 954        sscape_write ( devc, 9, sscape_read( devc, 9 ) | 0x40);
 955
 956        timeout_val = 5 * HZ; 
 957        while (!done && timeout_val-- > 0)
 958        {
Show full sources