diff options
author | Kumar Sanghvi <kumar.sanghvi@stericsson.com> | 2011-04-19 21:07:56 +0530 |
---|---|---|
committer | Philippe Langlais <philippe.langlais@stericsson.com> | 2012-05-22 11:07:09 +0200 |
commit | ecd3d1c2e397188b5ea04a4ebb1cc8c6f69bf3b3 (patch) | |
tree | 5ff5f2a333e6a9462ebd4026179fc1ac9b8061c8 /drivers/char | |
parent | 3f2bd84ea8f3d966f2abf93ccb5d5427805d3f95 (diff) |
u8500: shrm: Update AC_Wake logic and one fix for MSR
Updates the AC_Wake logic related to MSR.
Also, corrects one NULL pointer dereference.
ST-Ericsson ID: ER335373
Change-Id: Ie3f46c2a7bcdde9936a0f9eed52f8dcd0ab5a06b
Signed-off-by: Kumar Sanghvi <kumar.sanghvi@stericsson.com>
Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/21162
Reviewed-by: QATEST
Reviewed-by: Srinidhi KASAGAR <srinidhi.kasagar@stericsson.com>
Diffstat (limited to 'drivers/char')
-rw-r--r-- | drivers/char/shrm_char.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/drivers/char/shrm_char.c b/drivers/char/shrm_char.c index e2aaf60674f..6a6b3d7245a 100644 --- a/drivers/char/shrm_char.c +++ b/drivers/char/shrm_char.c @@ -236,25 +236,26 @@ int remove_msg_from_queue(struct message_queue *q) { struct queue_element *old_msg = NULL; struct shrm_dev *shrm = q->shrm; - struct list_head *msg; + struct list_head *msg_ptr = NULL; + struct list_head *old_msg_ptr = NULL; dev_dbg(shrm->dev, "%s IN q->readptr %d\n", __func__, q->readptr); - list_for_each(msg, &q->msg_list) { - old_msg = list_entry(msg, struct queue_element, entry); + list_for_each_safe(old_msg_ptr, msg_ptr, &q->msg_list) { + old_msg = list_entry(old_msg_ptr, struct queue_element, entry); if (old_msg == NULL) { dev_err(shrm->dev, "no message found\n"); return -EFAULT; } + list_del(old_msg_ptr); + q->readptr = (q->readptr + old_msg->size)%q->size; + kfree(old_msg); break; } - list_del(msg); - q->readptr = (q->readptr + old_msg->size)%q->size; if (list_empty(&q->msg_list)) { dev_dbg(shrm->dev, "List is empty setting RP= 0\n"); atomic_set(&q->q_rp, 0); } - kfree(old_msg); dev_dbg(shrm->dev, "%s OUT\n", __func__); return 0; |