On 8/30/05, Adeshara Tushar <[email protected]> wrote:
> Hi,
> I am wondering how to handle device usage count in
> open and release call of device driver if hardware
> need to be initialized on first open and shutdown on
> last close. I have seen som code like
>
> int open()
> {
> /*some code*/
> device->usage++;
> if(device->usage==1)
> init_hardware();
> /*rest of code*/
> }
> void release ()
> {
> /*some code*/
> if(device->usage==1)
> shutdown_hardware();
> device->usage--;
> /*rest of code*/
> }
>
>
>
> However, it seems to me that this code can make
> problem.
> If device->usage=0, and two process A,B execute line
> device->usage++;
> concurretly, device->usage will become 2 when they
> come to next line. This will result in hardware being
> used without initialization. Same things can happen in
> release call also, which will result in no shutdown of
> hardware.
> I have seen this type of code in
> /linux-2.6.8/drivers/ide/ide-disk.c and
> /linux-2.6.8/drivers/ide/ide-floppy.c
>
> Please let me know if its bug or not before I
> start working on patches.
Not a bug: ->open() and ->release() for block devices
are never called concurrently (because of bdev->bd_sem).
Bartlomiej
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[Index of Archives]
[Kernel Newbies]
[Netfilter]
[Bugtraq]
[Photo]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
|
|