[CHECKER] 8 more potential locking problems

Andy Chou (acc@CS.Stanford.EDU)
Thu, 22 Mar 2001 14:10:59 -0800


We modified our compiler extension for checking lock consistency and
found 8 more potential errors.

-Andy Chou

Index:

drivers/char/pcwd.c:468:pcwd_close
drivers/sound/es1370.c:1775:es1370_release
drivers/sound/es1370.c:2442:es1370_midi_release
drivers/sound/es1371.c:2611:es1371_midi_release
drivers/sound/esssolo1.c:1936:solo1_midi_release
drivers/sound/sonicvibes.c:2215:sv_midi_release
drivers/video/fbmem.c:545:fb_mmap
fs/ufs/balloc.c:274:ufs_new_fragments

Errors:

---------------------------------------------------------
[BUG] GEM
/home/acc/oses/linux/2.4.1/drivers/char/pcwd.c:468:pcwd_close: ERROR:ALOCK:455:468: Inconsistent
lock using `lock_kernel':455

Start --->
lock_kernel();
is_open = 0;
#ifndef CONFIG_WATCHDOG_NOWAYOUT
/* Disable the board */
if (revision == PCWD_REVISION_C) {

... DELETED 5 lines ...

}
unlock_kernel();
#endif
}
Error --->
return 0;
}
---------------------------------------------------------
[BUG]
/home/acc/oses/linux/2.4.1/drivers/sound/es1370.c:2442:es1370_midi_release: ERROR:ALOCK:2427:2442: Inconsistent
lock using `lock_kernel':2427

Start --->
lock_kernel();
if (file->f_mode & FMODE_WRITE) {
add_wait_queue(&s->midi.owait, &wait);
for (;;) {
__set_current_state(TASK_INTERRUPTIBLE);

... DELETED 7 lines ...

break;
if (file->f_flags & O_NONBLOCK) {
remove_wait_queue(&s->midi.owait, &wait);
set_current_state(TASK_RUNNING);
Error --->
return -EBUSY;
}
---------------------------------------------------------
[BUG] GEM
/home/acc/oses/linux/2.4.1/drivers/sound/es1370.c:1775:es1370_release: ERROR:ALOCK:1759:1775: Inconsistent
lock using `lock_kernel':1759

Start --->
lock_kernel();
if (file->f_mode & FMODE_WRITE)
drain_dac2(s, file->f_flags & O_NONBLOCK);
down(&s->open_sem);
if (file->f_mode & FMODE_WRITE) {

... DELETED 8 lines ...

}
s->open_mode &= (~file->f_mode) & (FMODE_READ|FMODE_WRITE);
wake_up(&s->open_wait);
up(&s->open_sem);
Error --->
return 0;
unlock_kernel();
---------------------------------------------------------
[BUG]
/home/acc/oses/linux/2.4.1/drivers/sound/es1371.c:2611:es1371_midi_release: ERROR:ALOCK:2596:2611: Inconsistent
lock using `lock_kernel':2596

Start --->
lock_kernel();
if (file->f_mode & FMODE_WRITE) {
add_wait_queue(&s->midi.owait, &wait);
for (;;) {
__set_current_state(TASK_INTERRUPTIBLE);

... DELETED 7 lines ...

break;
if (file->f_flags & O_NONBLOCK) {
remove_wait_queue(&s->midi.owait, &wait);
set_current_state(TASK_RUNNING);
Error --->
return -EBUSY;
}
---------------------------------------------------------
[BUG]
/home/acc/oses/linux/2.4.1/drivers/sound/esssolo1.c:1936:solo1_midi_release: ERROR:ALOCK:1921:1936: Inconsistent
lock using `lock_kernel':1921

Start --->
lock_kernel();
if (file->f_mode & FMODE_WRITE) {
add_wait_queue(&s->midi.owait, &wait);
for (;;) {
__set_current_state(TASK_INTERRUPTIBLE);

... DELETED 7 lines ...

break;
if (file->f_flags & O_NONBLOCK) {
remove_wait_queue(&s->midi.owait, &wait);
set_current_state(TASK_RUNNING);
Error --->
return -EBUSY;
}
---------------------------------------------------------
[BUG]
/home/acc/oses/linux/2.4.1/drivers/sound/sonicvibes.c:2215:sv_midi_release: ERROR:ALOCK:2200:2215: Inconsistent
lock using `lock_kernel':2200

Start --->
lock_kernel();
if (file->f_mode & FMODE_WRITE) {
add_wait_queue(&s->midi.owait, &wait);
for (;;) {
__set_current_state(TASK_INTERRUPTIBLE);

... DELETED 7 lines ...

break;
if (file->f_flags & O_NONBLOCK) {
remove_wait_queue(&s->midi.owait, &wait);
set_current_state(TASK_RUNNING);
Error --->
return -EBUSY;
}
---------------------------------------------------------
[BUG]
/home/acc/oses/linux/2.4.1/drivers/video/fbmem.c:545:fb_mmap: ERROR:ALOCK:521:545: Inconsistent
lock using `lock_kernel':521

Start --->
lock_kernel();
res = fb->fb_mmap(info, file, vma);
unlock_kernel();
return res;
}

... DELETED 16 lines ...

/* memory mapped io */
off -= len;
fb->fb_get_var(&var, PROC_CONSOLE(info), info);
if (var.accel_flags)
Error --->
return -EINVAL;
start = fix.mmio_start;
---------------------------------------------------------
[BUG]
/home/acc/oses/linux/2.4.1/fs/ufs/balloc.c:274:ufs_new_fragments: ERROR:ALOCK:256:274: Inconsistent
lock using `lock_super':256

Start --->
lock_super (sb);

tmp = SWAB32(*p);
if (count + ufs_fragnum(fragment) > uspi->s_fpb) {
ufs_warning (sb, "ufs_new_fragments", "internal warning"

... DELETED 10 lines ...

if (oldcount) {
if (!tmp) {
ufs_error (sb, "ufs_new_fragments", "internal
error, "
"fragment %u, tmp %u\n", fragment, tmp);
Error --->
return (unsigned)-1;
}

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/