From: Matthias Kaehlcke The Berkshire USB-PC Watchdog driver uses a semaphore as mutex. Use the mutex API instead of the (binary) semaphore. Signed-off-by: Matthias Kaehlcke Cc: Wim Van Sebroeck Cc: Greg KH Signed-off-by: Andrew Morton --- drivers/char/watchdog/pcwd_usb.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff -puN drivers/char/watchdog/pcwd_usb.c~use-mutex-instead-of-semaphore-in-berkshire-usb-pc-watchdog-driver drivers/char/watchdog/pcwd_usb.c --- a/drivers/char/watchdog/pcwd_usb.c~use-mutex-instead-of-semaphore-in-berkshire-usb-pc-watchdog-driver +++ a/drivers/char/watchdog/pcwd_usb.c @@ -34,6 +34,7 @@ #include /* For the watchdog specific items */ #include /* For notifier support */ #include /* For reboot_notifier stuff */ +#include #include /* For __init/__exit/... */ #include /* For file operations */ #include /* For USB functions */ @@ -146,7 +147,7 @@ struct usb_pcwd_private { atomic_t cmd_received; /* true if we received a report after a command */ int exists; /* Wether or not the device exists */ - struct semaphore sem; /* locks this structure */ + struct mutex mtx; /* locks this structure */ }; static struct usb_pcwd_private *usb_pcwd_device; @@ -635,7 +636,7 @@ static int usb_pcwd_probe(struct usb_int usb_pcwd_device = usb_pcwd; - init_MUTEX (&usb_pcwd->sem); + mutex_init(&usb_pcwd->mtx); usb_pcwd->udev = udev; usb_pcwd->interface = interface; usb_pcwd->interface_number = iface_desc->desc.bInterfaceNumber; @@ -763,7 +764,7 @@ static void usb_pcwd_disconnect(struct u usb_pcwd = usb_get_intfdata (interface); usb_set_intfdata (interface, NULL); - down (&usb_pcwd->sem); + mutex_lock(&usb_pcwd->mtx); /* Stop the timer before we leave */ if (!nowayout) @@ -777,7 +778,7 @@ static void usb_pcwd_disconnect(struct u misc_deregister(&usb_pcwd_temperature_miscdev); unregister_reboot_notifier(&usb_pcwd_notifier); - up (&usb_pcwd->sem); + mutex_unlock(&usb_pcwd->mtx); /* Delete the USB PCWD device */ usb_pcwd_delete(usb_pcwd); _