Hello, Few days ago Alessio Igor Bogani<abogani@xxxxxxxxxx> sent me patch that removes BKLs like lock/unlock_kernel() in open call and place mutex there in media/radio/radio-mr800.c. This patch broke the driver, so we figured out new approah. We added one more mutex lock that was used in open call. The patch is below: diff -r ffa5df73ebeb linux/drivers/media/radio/radio-mr800.c --- a/linux/drivers/media/radio/radio-mr800.c Fri Mar 13 00:43:34 2009 +0000 +++ b/linux/drivers/media/radio/radio-mr800.c Thu Apr 02 00:40:56 2009 +0400 @@ -163,6 +163,7 @@ unsigned char *buffer; struct mutex lock; /* buffer locking */ + struct mutex open; int curfreq; int stereo; int users; @@ -570,7 +571,7 @@ struct amradio_device *radio = video_get_drvdata(video_devdata(file)); int retval; - lock_kernel(); + mutex_lock(&radio->open); radio->users = 1; radio->muted = 1; @@ -580,7 +581,7 @@ amradio_dev_warn(&radio->videodev->dev, "radio did not start up properly\n"); radio->users = 0; - unlock_kernel(); + mutex_unlock(&radio->open); return -EIO; } @@ -594,7 +595,7 @@ amradio_dev_warn(&radio->videodev->dev, "set frequency failed\n"); - unlock_kernel(); + mutex_unlock(&radio->open); return 0; } @@ -735,6 +736,7 @@ radio->stereo = -1; mutex_init(&radio->lock); + mutex_init(&radio->open); video_set_drvdata(radio->videodev, radio); retval = video_register_device(radio->videodev, VFL_TYPE_RADIO, radio_nr); I tested such approach using stress tool that tries to open /dev/radio0 few hundred times. Looks fine. So, questions are: 1) What for is lock/unlock_kernel() used in open? 2) Can it be replaced by mutex, for example? Please, comments, exaplanations are more than welcome. Thanks, -- best regards, Klimov Alexey -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html