There are a couple of return statements before unlock. Lock is moved to a location just before queue manipulation. Signed-off-by: Chandra S Gorentla <csgorentla@xxxxxxxxx> --- drivers/staging/wilc1000/wilc_msgqueue.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/staging/wilc1000/wilc_msgqueue.c b/drivers/staging/wilc1000/wilc_msgqueue.c index a9c28ad..2fa3792 100644 --- a/drivers/staging/wilc1000/wilc_msgqueue.c +++ b/drivers/staging/wilc1000/wilc_msgqueue.c @@ -72,8 +72,6 @@ int wilc_mq_send(WILC_MsgQueueHandle *pHandle, goto ERRORHANDLER; } - spin_lock_irqsave(&pHandle->strCriticalSection, flags); - /* construct a new message */ pstrMessage = kmalloc(sizeof(Message), GFP_ATOMIC); if (!pstrMessage) @@ -88,6 +86,8 @@ int wilc_mq_send(WILC_MsgQueueHandle *pHandle, memcpy(pstrMessage->pvBuffer, pvSendBuffer, u32SendBufferSize); /* add it to the message queue */ + spin_lock_irqsave(&pHandle->strCriticalSection, flags); + if (!pHandle->pstrMessageList) { pHandle->pstrMessageList = pstrMessage; } else { -- 2.1.4 _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel