mei: replace callback structures used as list head by list_head
authorAlexander Usyskin <alexander.usyskin@intel.com>
Fri, 27 Jan 2017 14:32:45 +0000 (16:32 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 31 Jan 2017 10:07:43 +0000 (11:07 +0100)
mei_dev structure used struct mei_cl_cb type variables as for holding
callbacks list heads.  Replace them by the actual struct list_head
as there is no other info that is handled. This slims down
the mei_dev structure and mostly streamline the code.

Signed-off-by: Alexander Usyskin <alexander.usyskin@intel.com>
Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/misc/mei/amthif.c
drivers/misc/mei/client.c
drivers/misc/mei/client.h
drivers/misc/mei/hbm.c
drivers/misc/mei/hw-me.c
drivers/misc/mei/hw-txe.c
drivers/misc/mei/init.c
drivers/misc/mei/interrupt.c
drivers/misc/mei/mei_dev.h

index 2d553cd..366ef1f 100644 (file)
@@ -132,8 +132,7 @@ int mei_amthif_run_next_cmd(struct mei_device *dev)
 
        dev_dbg(dev->dev, "complete amthif cmd_list cb.\n");
 
-       cb = list_first_entry_or_null(&dev->amthif_cmd_list.list,
-                                       typeof(*cb), list);
+       cb = list_first_entry_or_null(&dev->amthif_cmd_list, typeof(*cb), list);
        if (!cb) {
                dev->iamthif_state = MEI_IAMTHIF_IDLE;
                cl->fp = NULL;
@@ -167,7 +166,7 @@ int mei_amthif_write(struct mei_cl *cl, struct mei_cl_cb *cb)
 
        struct mei_device *dev = cl->dev;
 
-       list_add_tail(&cb->list, &dev->amthif_cmd_list.list);
+       list_add_tail(&cb->list, &dev->amthif_cmd_list);
 
        /*
         * The previous request is still in processing, queue this one.
@@ -211,7 +210,7 @@ unsigned int mei_amthif_poll(struct file *file, poll_table *wait)
  * Return: 0, OK; otherwise, error.
  */
 int mei_amthif_irq_write(struct mei_cl *cl, struct mei_cl_cb *cb,
-                        struct mei_cl_cb *cmpl_list)
+                        struct list_head *cmpl_list)
 {
        int ret;
 
@@ -237,7 +236,7 @@ int mei_amthif_irq_write(struct mei_cl *cl, struct mei_cl_cb *cb,
  */
 int mei_amthif_irq_read_msg(struct mei_cl *cl,
                            struct mei_msg_hdr *mei_hdr,
-                           struct mei_cl_cb *cmpl_list)
+                           struct list_head *cmpl_list)
 {
        struct mei_device *dev;
        int ret;
@@ -354,7 +353,7 @@ int mei_amthif_release(struct mei_device *dev, struct file *file)
        }
 
        /* Don't clean ctrl_rd_list here, the reads has to be completed */
-       mei_clear_list(file, &dev->amthif_cmd_list.list);
+       mei_clear_list(file, &dev->amthif_cmd_list);
        mei_clear_list(file, &cl->rd_completed);
 
        return 0;
index d9e3e68..838a4a3 100644 (file)
@@ -379,17 +379,17 @@ static struct mei_cl_cb *mei_io_cb_init(struct mei_cl *cl,
 /**
  * __mei_io_list_flush - removes and frees cbs belonging to cl.
  *
- * @list:  an instance of our list structure
+ * @head:  an instance of our list structure
  * @cl:    host client, can be NULL for flushing the whole list
  * @free:  whether to free the cbs
  */
-static void __mei_io_list_flush(struct mei_cl_cb *list,
+static void __mei_io_list_flush(struct list_head *head,
                                struct mei_cl *cl, bool free)
 {
        struct mei_cl_cb *cb, *next;
 
        /* enable removing everything if no cl is specified */
-       list_for_each_entry_safe(cb, next, &list->list, list) {
+       list_for_each_entry_safe(cb, next, head, list) {
                if (!cl || mei_cl_cmp_id(cl, cb->cl)) {
                        list_del_init(&cb->list);
                        if (free)
@@ -401,23 +401,23 @@ static void __mei_io_list_flush(struct mei_cl_cb *list,
 /**
  * mei_io_list_flush - removes list entry belonging to cl.
  *
- * @list:  An instance of our list structure
+ * @head: An instance of our list structure
  * @cl: host client
  */
-static inline void mei_io_list_flush(struct mei_cl_cb *list, struct mei_cl *cl)
+static inline void mei_io_list_flush(struct list_head *head, struct mei_cl *cl)
 {
-       __mei_io_list_flush(list, cl, false);
+       __mei_io_list_flush(head, cl, false);
 }
 
 /**
  * mei_io_list_free - removes cb belonging to cl and free them
  *
- * @list:  An instance of our list structure
+ * @head: An instance of our list structure
  * @cl: host client
  */
-static inline void mei_io_list_free(struct mei_cl_cb *list, struct mei_cl *cl)
+static inline void mei_io_list_free(struct list_head *head, struct mei_cl *cl)
 {
-       __mei_io_list_flush(list, cl, true);
+       __mei_io_list_flush(head, cl, true);
 }
 
 /**
@@ -479,7 +479,7 @@ struct mei_cl_cb *mei_cl_enqueue_ctrl_wr_cb(struct mei_cl *cl, size_t length,
        if (!cb)
                return NULL;
 
-       list_add_tail(&cb->list, &cl->dev->ctrl_wr_list.list);
+       list_add_tail(&cb->list, &cl->dev->ctrl_wr_list);
        return cb;
 }
 
@@ -831,7 +831,7 @@ static int mei_cl_send_disconnect(struct mei_cl *cl, struct mei_cl_cb *cb)
                return ret;
        }
 
-       list_move_tail(&cb->list, &dev->ctrl_rd_list.list);
+       list_move_tail(&cb->list, &dev->ctrl_rd_list);
        cl->timer_count = MEI_CONNECT_TIMEOUT;
        mei_schedule_stall_timer(dev);
 
@@ -849,7 +849,7 @@ static int mei_cl_send_disconnect(struct mei_cl *cl, struct mei_cl_cb *cb)
  * Return: 0, OK; otherwise, error.
  */
 int mei_cl_irq_disconnect(struct mei_cl *cl, struct mei_cl_cb *cb,
-                           struct mei_cl_cb *cmpl_list)
+                         struct list_head *cmpl_list)
 {
        struct mei_device *dev = cl->dev;
        u32 msg_slots;
@@ -864,7 +864,7 @@ int mei_cl_irq_disconnect(struct mei_cl *cl, struct mei_cl_cb *cb,
 
        ret = mei_cl_send_disconnect(cl, cb);
        if (ret)
-               list_move_tail(&cb->list, &cmpl_list->list);
+               list_move_tail(&cb->list, cmpl_list);
 
        return ret;
 }
@@ -986,7 +986,7 @@ static bool mei_cl_is_other_connecting(struct mei_cl *cl)
 
        dev = cl->dev;
 
-       list_for_each_entry(cb, &dev->ctrl_rd_list.list, list) {
+       list_for_each_entry(cb, &dev->ctrl_rd_list, list) {
                if (cb->fop_type == MEI_FOP_CONNECT &&
                    mei_cl_me_id(cl) == mei_cl_me_id(cb->cl))
                        return true;
@@ -1017,7 +1017,7 @@ static int mei_cl_send_connect(struct mei_cl *cl, struct mei_cl_cb *cb)
                return ret;
        }
 
-       list_move_tail(&cb->list, &dev->ctrl_rd_list.list);
+       list_move_tail(&cb->list, &dev->ctrl_rd_list);
        cl->timer_count = MEI_CONNECT_TIMEOUT;
        mei_schedule_stall_timer(dev);
        return 0;
@@ -1033,7 +1033,7 @@ static int mei_cl_send_connect(struct mei_cl *cl, struct mei_cl_cb *cb)
  * Return: 0, OK; otherwise, error.
  */
 int mei_cl_irq_connect(struct mei_cl *cl, struct mei_cl_cb *cb,
-                             struct mei_cl_cb *cmpl_list)
+                      struct list_head *cmpl_list)
 {
        struct mei_device *dev = cl->dev;
        u32 msg_slots;
@@ -1051,7 +1051,7 @@ int mei_cl_irq_connect(struct mei_cl *cl, struct mei_cl_cb *cb,
 
        rets = mei_cl_send_connect(cl, cb);
        if (rets)
-               list_move_tail(&cb->list, &cmpl_list->list);
+               list_move_tail(&cb->list, cmpl_list);
 
        return rets;
 }
@@ -1276,7 +1276,7 @@ enum mei_cb_file_ops mei_cl_notify_req2fop(u8 req)
  * Return: 0 on such and error otherwise.
  */
 int mei_cl_irq_notify(struct mei_cl *cl, struct mei_cl_cb *cb,
-                     struct mei_cl_cb *cmpl_list)
+                     struct list_head *cmpl_list)
 {
        struct mei_device *dev = cl->dev;
        u32 msg_slots;
@@ -1294,11 +1294,11 @@ int mei_cl_irq_notify(struct mei_cl *cl, struct mei_cl_cb *cb,
        ret = mei_hbm_cl_notify_req(dev, cl, request);
        if (ret) {
                cl->status = ret;
-               list_move_tail(&cb->list, &cmpl_list->list);
+               list_move_tail(&cb->list, cmpl_list);
                return ret;
        }
 
-       list_move_tail(&cb->list, &dev->ctrl_rd_list.list);
+       list_move_tail(&cb->list, &dev->ctrl_rd_list);
        return 0;
 }
 
@@ -1353,7 +1353,7 @@ int mei_cl_notify_request(struct mei_cl *cl,
                        rets = -ENODEV;
                        goto out;
                }
-               list_move_tail(&cb->list, &dev->ctrl_rd_list.list);
+               list_move_tail(&cb->list, &dev->ctrl_rd_list);
        }
 
        mutex_unlock(&dev->device_lock);
@@ -1533,7 +1533,7 @@ nortpm:
  * Return: 0, OK; otherwise error.
  */
 int mei_cl_irq_write(struct mei_cl *cl, struct mei_cl_cb *cb,
-                    struct mei_cl_cb *cmpl_list)
+                    struct list_head *cmpl_list)
 {
        struct mei_device *dev;
        struct mei_msg_data *buf;
@@ -1605,13 +1605,13 @@ int mei_cl_irq_write(struct mei_cl *cl, struct mei_cl_cb *cb,
        }
 
        if (mei_hdr.msg_complete)
-               list_move_tail(&cb->list, &dev->write_waiting_list.list);
+               list_move_tail(&cb->list, &dev->write_waiting_list);
 
        return 0;
 
 err:
        cl->status = rets;
-       list_move_tail(&cb->list, &cmpl_list->list);
+       list_move_tail(&cb->list, cmpl_list);
        return rets;
 }
 
@@ -1701,9 +1701,9 @@ int mei_cl_write(struct mei_cl *cl, struct mei_cl_cb *cb)
 
 out:
        if (mei_hdr.msg_complete)
-               list_add_tail(&cb->list, &dev->write_waiting_list.list);
+               list_add_tail(&cb->list, &dev->write_waiting_list);
        else
-               list_add_tail(&cb->list, &dev->write_list.list);
+               list_add_tail(&cb->list, &dev->write_list);
 
        cb = NULL;
        if (blocking && cl->writing_state != MEI_WRITE_COMPLETE) {
index ab92a54..f48cfa0 100644 (file)
@@ -84,16 +84,6 @@ static inline u8 mei_me_cl_ver(const struct mei_me_client *me_cl)
  */
 void mei_io_cb_free(struct mei_cl_cb *priv_cb);
 
-/**
- * mei_io_list_init - Sets up a queue list.
- *
- * @list: An instance cl callback structure
- */
-static inline void mei_io_list_init(struct mei_cl_cb *list)
-{
-       INIT_LIST_HEAD(&list->list);
-}
-
 /*
  * MEI Host Client Functions
  */
@@ -209,17 +199,17 @@ static inline u8 mei_cl_host_addr(const struct mei_cl *cl)
 
 int mei_cl_disconnect(struct mei_cl *cl);
 int mei_cl_irq_disconnect(struct mei_cl *cl, struct mei_cl_cb *cb,
-                         struct mei_cl_cb *cmpl_list);
+                         struct list_head *cmpl_list);
 int mei_cl_connect(struct mei_cl *cl, struct mei_me_client *me_cl,
                   const struct file *file);
 int mei_cl_irq_connect(struct mei_cl *cl, struct mei_cl_cb *cb,
-                             struct mei_cl_cb *cmpl_list);
+                      struct list_head *cmpl_list);
 int mei_cl_read_start(struct mei_cl *cl, size_t length, const struct file *fp);
 int mei_cl_irq_read_msg(struct mei_cl *cl, struct mei_msg_hdr *hdr,
-                       struct mei_cl_cb *cmpl_list);
+                       struct list_head *cmpl_list);
 int mei_cl_write(struct mei_cl *cl, struct mei_cl_cb *cb);
 int mei_cl_irq_write(struct mei_cl *cl, struct mei_cl_cb *cb,
-                    struct mei_cl_cb *cmpl_list);
+                    struct list_head *cmpl_list);
 
 void mei_cl_complete(struct mei_cl *cl, struct mei_cl_cb *cb);
 
@@ -230,7 +220,7 @@ enum mei_cb_file_ops mei_cl_notify_req2fop(u8 request);
 int mei_cl_notify_request(struct mei_cl *cl,
                          const struct file *file, u8 request);
 int mei_cl_irq_notify(struct mei_cl *cl, struct mei_cl_cb *cb,
-                     struct mei_cl_cb *cmpl_list);
+                     struct list_head *cmpl_list);
 int mei_cl_notify_get(struct mei_cl *cl, bool block, bool *notify_ev);
 void mei_cl_notify(struct mei_cl *cl);
 
index 25b4a1b..ba3a774 100644 (file)
@@ -815,7 +815,7 @@ static void mei_hbm_cl_res(struct mei_device *dev,
        struct mei_cl_cb *cb, *next;
 
        cl = NULL;
-       list_for_each_entry_safe(cb, next, &dev->ctrl_rd_list.list, list) {
+       list_for_each_entry_safe(cb, next, &dev->ctrl_rd_list, list) {
 
                cl = cb->cl;
 
index a05375a..06a5799 100644 (file)
@@ -1189,7 +1189,7 @@ irqreturn_t mei_me_irq_quick_handler(int irq, void *dev_id)
 irqreturn_t mei_me_irq_thread_handler(int irq, void *dev_id)
 {
        struct mei_device *dev = (struct mei_device *) dev_id;
-       struct mei_cl_cb complete_list;
+       struct list_head cmpl_list;
        s32 slots;
        u32 hcsr;
        int rets = 0;
@@ -1201,7 +1201,7 @@ irqreturn_t mei_me_irq_thread_handler(int irq, void *dev_id)
        hcsr = mei_hcsr_read(dev);
        me_intr_clear(dev, hcsr);
 
-       mei_io_list_init(&complete_list);
+       INIT_LIST_HEAD(&cmpl_list);
 
        /* check if ME wants a reset */
        if (!mei_hw_is_ready(dev) && dev->dev_state != MEI_DEV_RESETTING) {
@@ -1227,7 +1227,7 @@ irqreturn_t mei_me_irq_thread_handler(int irq, void *dev_id)
        slots = mei_count_full_read_slots(dev);
        while (slots > 0) {
                dev_dbg(dev->dev, "slots to read = %08x\n", slots);
-               rets = mei_irq_read_handler(dev, &complete_list, &slots);
+               rets = mei_irq_read_handler(dev, &cmpl_list, &slots);
                /* There is a race between ME write and interrupt delivery:
                 * Not all data is always available immediately after the
                 * interrupt, so try to read again on the next interrupt.
@@ -1252,11 +1252,11 @@ irqreturn_t mei_me_irq_thread_handler(int irq, void *dev_id)
         */
        if (dev->pg_event != MEI_PG_EVENT_WAIT &&
            dev->pg_event != MEI_PG_EVENT_RECEIVED) {
-               rets = mei_irq_write_handler(dev, &complete_list);
+               rets = mei_irq_write_handler(dev, &cmpl_list);
                dev->hbuf_is_ready = mei_hbuf_is_ready(dev);
        }
 
-       mei_irq_compl_handler(dev, &complete_list);
+       mei_irq_compl_handler(dev, &cmpl_list);
 
 end:
        dev_dbg(dev->dev, "interrupt thread end ret = %d\n", rets);
index e9f8c0a..6259b11 100644 (file)
@@ -1057,7 +1057,7 @@ irqreturn_t mei_txe_irq_thread_handler(int irq, void *dev_id)
 {
        struct mei_device *dev = (struct mei_device *) dev_id;
        struct mei_txe_hw *hw = to_txe_hw(dev);
-       struct mei_cl_cb complete_list;
+       struct list_head cmpl_list;
        s32 slots;
        int rets = 0;
 
@@ -1069,7 +1069,7 @@ irqreturn_t mei_txe_irq_thread_handler(int irq, void *dev_id)
 
        /* initialize our complete list */
        mutex_lock(&dev->device_lock);
-       mei_io_list_init(&complete_list);
+       INIT_LIST_HEAD(&cmpl_list);
 
        if (pci_dev_msi_enabled(to_pci_dev(dev->dev)))
                mei_txe_check_and_ack_intrs(dev, true);
@@ -1126,7 +1126,7 @@ irqreturn_t mei_txe_irq_thread_handler(int irq, void *dev_id)
        slots = mei_count_full_read_slots(dev);
        if (test_and_clear_bit(TXE_INTR_OUT_DB_BIT, &hw->intr_cause)) {
                /* Read from TXE */
-               rets = mei_irq_read_handler(dev, &complete_list, &slots);
+               rets = mei_irq_read_handler(dev, &cmpl_list, &slots);
                if (rets && dev->dev_state != MEI_DEV_RESETTING) {
                        dev_err(dev->dev,
                                "mei_irq_read_handler ret = %d.\n", rets);
@@ -1144,14 +1144,14 @@ irqreturn_t mei_txe_irq_thread_handler(int irq, void *dev_id)
        if (hw->aliveness && dev->hbuf_is_ready) {
                /* get the real register value */
                dev->hbuf_is_ready = mei_hbuf_is_ready(dev);
-               rets = mei_irq_write_handler(dev, &complete_list);
+               rets = mei_irq_write_handler(dev, &cmpl_list);
                if (rets && rets != -EMSGSIZE)
                        dev_err(dev->dev, "mei_irq_write_handler ret = %d.\n",
                                rets);
                dev->hbuf_is_ready = mei_hbuf_is_ready(dev);
        }
 
-       mei_irq_compl_handler(dev, &complete_list);
+       mei_irq_compl_handler(dev, &cmpl_list);
 
 end:
        dev_dbg(dev->dev, "interrupt thread end ret = %d\n", rets);
index 41e5760..cfb1cdf 100644 (file)
@@ -349,16 +349,16 @@ EXPORT_SYMBOL_GPL(mei_stop);
 bool mei_write_is_idle(struct mei_device *dev)
 {
        bool idle = (dev->dev_state == MEI_DEV_ENABLED &&
-               list_empty(&dev->ctrl_wr_list.list) &&
-               list_empty(&dev->write_list.list)   &&
-               list_empty(&dev->write_waiting_list.list));
+               list_empty(&dev->ctrl_wr_list) &&
+               list_empty(&dev->write_list)   &&
+               list_empty(&dev->write_waiting_list));
 
        dev_dbg(dev->dev, "write pg: is idle[%d] state=%s ctrl=%01d write=%01d wwait=%01d\n",
                idle,
                mei_dev_state_str(dev->dev_state),
-               list_empty(&dev->ctrl_wr_list.list),
-               list_empty(&dev->write_list.list),
-               list_empty(&dev->write_waiting_list.list));
+               list_empty(&dev->ctrl_wr_list),
+               list_empty(&dev->write_list),
+               list_empty(&dev->write_waiting_list));
 
        return idle;
 }
@@ -388,17 +388,17 @@ void mei_device_init(struct mei_device *dev,
        dev->dev_state = MEI_DEV_INITIALIZING;
        dev->reset_count = 0;
 
-       mei_io_list_init(&dev->write_list);
-       mei_io_list_init(&dev->write_waiting_list);
-       mei_io_list_init(&dev->ctrl_wr_list);
-       mei_io_list_init(&dev->ctrl_rd_list);
+       INIT_LIST_HEAD(&dev->write_list);
+       INIT_LIST_HEAD(&dev->write_waiting_list);
+       INIT_LIST_HEAD(&dev->ctrl_wr_list);
+       INIT_LIST_HEAD(&dev->ctrl_rd_list);
 
        INIT_DELAYED_WORK(&dev->timer_work, mei_timer);
        INIT_WORK(&dev->reset_work, mei_reset_work);
        INIT_WORK(&dev->bus_rescan_work, mei_cl_bus_rescan_work);
 
        INIT_LIST_HEAD(&dev->iamthif_cl.link);
-       mei_io_list_init(&dev->amthif_cmd_list);
+       INIT_LIST_HEAD(&dev->amthif_cmd_list);
 
        bitmap_zero(dev->host_clients_map, MEI_CLIENTS_MAX);
        dev->open_handle_count = 0;
index b584749..406e9e2 100644 (file)
  *     for the completed callbacks
  *
  * @dev: mei device
- * @compl_list: list of completed cbs
+ * @cmpl_list: list of completed cbs
  */
-void mei_irq_compl_handler(struct mei_device *dev, struct mei_cl_cb *compl_list)
+void mei_irq_compl_handler(struct mei_device *dev, struct list_head *cmpl_list)
 {
        struct mei_cl_cb *cb, *next;
        struct mei_cl *cl;
 
-       list_for_each_entry_safe(cb, next, &compl_list->list, list) {
+       list_for_each_entry_safe(cb, next, cmpl_list, list) {
                cl = cb->cl;
                list_del_init(&cb->list);
 
@@ -92,13 +92,13 @@ void mei_irq_discard_msg(struct mei_device *dev, struct mei_msg_hdr *hdr)
  *
  * @cl: reading client
  * @mei_hdr: header of mei client message
- * @complete_list: completion list
+ * @cmpl_list: completion list
  *
  * Return: always 0
  */
 int mei_cl_irq_read_msg(struct mei_cl *cl,
                       struct mei_msg_hdr *mei_hdr,
-                      struct mei_cl_cb *complete_list)
+                      struct list_head *cmpl_list)
 {
        struct mei_device *dev = cl->dev;
        struct mei_cl_cb *cb;
@@ -144,7 +144,7 @@ int mei_cl_irq_read_msg(struct mei_cl *cl,
 
        if (mei_hdr->msg_complete) {
                cl_dbg(dev, cl, "completed read length = %zu\n", cb->buf_idx);
-               list_move_tail(&cb->list, &complete_list->list);
+               list_move_tail(&cb->list, cmpl_list);
        } else {
                pm_runtime_mark_last_busy(dev->dev);
                pm_request_autosuspend(dev->dev);
@@ -154,7 +154,7 @@ int mei_cl_irq_read_msg(struct mei_cl *cl,
 
 discard:
        if (cb)
-               list_move_tail(&cb->list, &complete_list->list);
+               list_move_tail(&cb->list, cmpl_list);
        mei_irq_discard_msg(dev, mei_hdr);
        return 0;
 }
@@ -169,7 +169,7 @@ discard:
  * Return: 0, OK; otherwise, error.
  */
 static int mei_cl_irq_disconnect_rsp(struct mei_cl *cl, struct mei_cl_cb *cb,
-                                    struct mei_cl_cb *cmpl_list)
+                                    struct list_head *cmpl_list)
 {
        struct mei_device *dev = cl->dev;
        u32 msg_slots;
@@ -183,7 +183,7 @@ static int mei_cl_irq_disconnect_rsp(struct mei_cl *cl, struct mei_cl_cb *cb,
                return -EMSGSIZE;
 
        ret = mei_hbm_cl_disconnect_rsp(dev, cl);
-       list_move_tail(&cb->list, &cmpl_list->list);
+       list_move_tail(&cb->list, cmpl_list);
 
        return ret;
 }
@@ -199,7 +199,7 @@ static int mei_cl_irq_disconnect_rsp(struct mei_cl *cl, struct mei_cl_cb *cb,
  * Return: 0, OK; otherwise, error.
  */
 static int mei_cl_irq_read(struct mei_cl *cl, struct mei_cl_cb *cb,
-                          struct mei_cl_cb *cmpl_list)
+                          struct list_head *cmpl_list)
 {
        struct mei_device *dev = cl->dev;
        u32 msg_slots;
@@ -219,7 +219,7 @@ static int mei_cl_irq_read(struct mei_cl *cl, struct mei_cl_cb *cb,
        if (ret) {
                cl->status = ret;
                cb->buf_idx = 0;
-               list_move_tail(&cb->list, &cmpl_list->list);
+               list_move_tail(&cb->list, cmpl_list);
                return ret;
        }
 
@@ -249,7 +249,7 @@ static inline bool hdr_is_fixed(struct mei_msg_hdr *mei_hdr)
  * Return: 0 on success, <0 on failure.
  */
 int mei_irq_read_handler(struct mei_device *dev,
-               struct mei_cl_cb *cmpl_list, s32 *slots)
+                        struct list_head *cmpl_list, s32 *slots)
 {
        struct mei_msg_hdr *mei_hdr;
        struct mei_cl *cl;
@@ -347,12 +347,11 @@ EXPORT_SYMBOL_GPL(mei_irq_read_handler);
  *
  * Return: 0 on success, <0 on failure.
  */
-int mei_irq_write_handler(struct mei_device *dev, struct mei_cl_cb *cmpl_list)
+int mei_irq_write_handler(struct mei_device *dev, struct list_head *cmpl_list)
 {
 
        struct mei_cl *cl;
        struct mei_cl_cb *cb, *next;
-       struct mei_cl_cb *list;
        s32 slots;
        int ret;
 
@@ -367,19 +366,18 @@ int mei_irq_write_handler(struct mei_device *dev, struct mei_cl_cb *cmpl_list)
        /* complete all waiting for write CB */
        dev_dbg(dev->dev, "complete all waiting for write cb.\n");
 
-       list = &dev->write_waiting_list;
-       list_for_each_entry_safe(cb, next, &list->list, list) {
+       list_for_each_entry_safe(cb, next, &dev->write_waiting_list, list) {
                cl = cb->cl;
 
                cl->status = 0;
                cl_dbg(dev, cl, "MEI WRITE COMPLETE\n");
                cl->writing_state = MEI_WRITE_COMPLETE;
-               list_move_tail(&cb->list, &cmpl_list->list);
+               list_move_tail(&cb->list, cmpl_list);
        }
 
        /* complete control write list CB */
        dev_dbg(dev->dev, "complete control write list cb.\n");
-       list_for_each_entry_safe(cb, next, &dev->ctrl_wr_list.list, list) {
+       list_for_each_entry_safe(cb, next, &dev->ctrl_wr_list, list) {
                cl = cb->cl;
                switch (cb->fop_type) {
                case MEI_FOP_DISCONNECT:
@@ -423,7 +421,7 @@ int mei_irq_write_handler(struct mei_device *dev, struct mei_cl_cb *cmpl_list)
        }
        /* complete  write list CB */
        dev_dbg(dev->dev, "complete write list cb.\n");
-       list_for_each_entry_safe(cb, next, &dev->write_list.list, list) {
+       list_for_each_entry_safe(cb, next, &dev->write_list, list) {
                cl = cb->cl;
                if (cl == &dev->iamthif_cl)
                        ret = mei_amthif_irq_write(cl, cb, cmpl_list);
index 33ff4b7..d41aac5 100644 (file)
@@ -441,10 +441,10 @@ struct mei_device {
        struct cdev cdev;
        int minor;
 
-       struct mei_cl_cb write_list;
-       struct mei_cl_cb write_waiting_list;
-       struct mei_cl_cb ctrl_wr_list;
-       struct mei_cl_cb ctrl_rd_list;
+       struct list_head write_list;
+       struct list_head write_waiting_list;
+       struct list_head ctrl_wr_list;
+       struct list_head ctrl_rd_list;
 
        struct list_head file_list;
        long open_handle_count;
@@ -501,7 +501,7 @@ struct mei_device {
        bool override_fixed_address;
 
        /* amthif list for cmd waiting */
-       struct mei_cl_cb amthif_cmd_list;
+       struct list_head amthif_cmd_list;
        struct mei_cl iamthif_cl;
        long iamthif_open_count;
        u32 iamthif_stall_timer;
@@ -573,10 +573,10 @@ void mei_cancel_work(struct mei_device *dev);
 void mei_timer(struct work_struct *work);
 void mei_schedule_stall_timer(struct mei_device *dev);
 int mei_irq_read_handler(struct mei_device *dev,
-               struct mei_cl_cb *cmpl_list, s32 *slots);
+                        struct list_head *cmpl_list, s32 *slots);
 
-int mei_irq_write_handler(struct mei_device *dev, struct mei_cl_cb *cmpl_list);
-void mei_irq_compl_handler(struct mei_device *dev, struct mei_cl_cb *cmpl_list);
+int mei_irq_write_handler(struct mei_device *dev, struct list_head *cmpl_list);
+void mei_irq_compl_handler(struct mei_device *dev, struct list_head *cmpl_list);
 
 /*
  * AMTHIF - AMT Host Interface Functions
@@ -592,12 +592,12 @@ int mei_amthif_release(struct mei_device *dev, struct file *file);
 int mei_amthif_write(struct mei_cl *cl, struct mei_cl_cb *cb);
 int mei_amthif_run_next_cmd(struct mei_device *dev);
 int mei_amthif_irq_write(struct mei_cl *cl, struct mei_cl_cb *cb,
-                       struct mei_cl_cb *cmpl_list);
+                        struct list_head *cmpl_list);
 
 void mei_amthif_complete(struct mei_cl *cl, struct mei_cl_cb *cb);
 int mei_amthif_irq_read_msg(struct mei_cl *cl,
                            struct mei_msg_hdr *mei_hdr,
-                           struct mei_cl_cb *complete_list);
+                           struct list_head *cmpl_list);
 int mei_amthif_irq_read(struct mei_device *dev, s32 *slots);
 
 /*