mei: consolidate repeating code in mei_cl_irq_read_msg
authorTomas Winkler <tomas.winkler@intel.com>
Fri, 11 Nov 2016 01:00:07 +0000 (03:00 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 15 Nov 2016 09:56:52 +0000 (10:56 +0100)
A cb is always placed on the completion queue
during discarding queue. Hence this can be performed
upon discard.

Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/misc/mei/interrupt.c

index 5a4893ce9c240b4525671fb3c609aa6077933c3e..b584749bcc4a1c630337566a6944dde900b74bf2 100644 (file)
@@ -118,7 +118,6 @@ int mei_cl_irq_read_msg(struct mei_cl *cl,
 
        if (!mei_cl_is_connected(cl)) {
                cl_dbg(dev, cl, "not connected\n");
-               list_move_tail(&cb->list, &complete_list->list);
                cb->status = -ENODEV;
                goto discard;
        }
@@ -128,8 +127,6 @@ int mei_cl_irq_read_msg(struct mei_cl *cl,
        if (buf_sz < cb->buf_idx) {
                cl_err(dev, cl, "message is too big len %d idx %zu\n",
                       mei_hdr->length, cb->buf_idx);
-
-               list_move_tail(&cb->list, &complete_list->list);
                cb->status = -EMSGSIZE;
                goto discard;
        }
@@ -137,8 +134,6 @@ int mei_cl_irq_read_msg(struct mei_cl *cl,
        if (cb->buf.size < buf_sz) {
                cl_dbg(dev, cl, "message overflow. size %zu len %d idx %zu\n",
                        cb->buf.size, mei_hdr->length, cb->buf_idx);
-
-               list_move_tail(&cb->list, &complete_list->list);
                cb->status = -EMSGSIZE;
                goto discard;
        }
@@ -158,6 +153,8 @@ int mei_cl_irq_read_msg(struct mei_cl *cl,
        return 0;
 
 discard:
+       if (cb)
+               list_move_tail(&cb->list, &complete_list->list);
        mei_irq_discard_msg(dev, mei_hdr);
        return 0;
 }