From: Matthias Kaehlcke The CAPI 2.0 driver uses a semaphore as mutex. Use the mutex API instead of the (binary) semaphore. Signed-off-by: Matthias Kaehlcke Cc: Karsten Keil Signed-off-by: Andrew Morton --- drivers/isdn/capi/kcapi.c | 6 +++--- include/linux/kernelcapi.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff -puN drivers/isdn/capi/kcapi.c~use-mutex-instead-of-semaphore-in-capi-20-driver drivers/isdn/capi/kcapi.c --- a/drivers/isdn/capi/kcapi.c~use-mutex-instead-of-semaphore-in-capi-20-driver +++ a/drivers/isdn/capi/kcapi.c @@ -258,7 +258,7 @@ static void recv_handler(struct work_str if ((!ap) || (ap->release_in_progress)) return; - down(&ap->recv_sem); + mutex_lock(&ap->recv_mtx); while ((skb = skb_dequeue(&ap->recv_queue))) { if (CAPIMSG_CMD(skb->data) == CAPI_DATA_B3_IND) ap->nrecvdatapkt++; @@ -267,7 +267,7 @@ static void recv_handler(struct work_str ap->recv_message(ap, skb); } - up(&ap->recv_sem); + mutex_unlock(&ap->recv_mtx); } void capi_ctr_handle_message(struct capi_ctr * card, u16 appl, struct sk_buff *skb) @@ -547,7 +547,7 @@ u16 capi20_register(struct capi20_appl * ap->nsentctlpkt = 0; ap->nsentdatapkt = 0; ap->callback = NULL; - init_MUTEX(&ap->recv_sem); + mutex_init(&ap->recv_mtx); skb_queue_head_init(&ap->recv_queue); INIT_WORK(&ap->recv_work, recv_handler); ap->release_in_progress = 0; diff -puN include/linux/kernelcapi.h~use-mutex-instead-of-semaphore-in-capi-20-driver include/linux/kernelcapi.h --- a/include/linux/kernelcapi.h~use-mutex-instead-of-semaphore-in-capi-20-driver +++ a/include/linux/kernelcapi.h @@ -64,7 +64,7 @@ struct capi20_appl { unsigned long nrecvdatapkt; unsigned long nsentctlpkt; unsigned long nsentdatapkt; - struct semaphore recv_sem; + struct mutex recv_mtx; struct sk_buff_head recv_queue; struct work_struct recv_work; int release_in_progress; _