mei: add file pointer to the host client structure
authorAlexander Usyskin <alexander.usyskin@intel.com>
Thu, 16 Jun 2016 14:58:57 +0000 (17:58 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 30 Aug 2016 12:36:39 +0000 (14:36 +0200)
Store the file associated with a client in the host client structure,
this enables dropping the special amthif client file pointer from struct
mei_device, and this is also a preparation for changing the way rx
packet allocation for fixed_address clients

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/interrupt.c
drivers/misc/mei/main.c
drivers/misc/mei/mei_dev.h

index 3cf54ca051ea3b5a50ad64585deaf242ff791bfe..e346af17d9f4e4cdc52389425fed515cf45c76ee 100644 (file)
@@ -204,7 +204,7 @@ static int mei_amthif_read_start(struct mei_cl *cl, const struct file *file)
        list_add_tail(&cb->list, &dev->ctrl_wr_list.list);
 
        dev->iamthif_state = MEI_IAMTHIF_READING;
-       dev->iamthif_fp = cb->fp;
+       cl->fp = cb->fp;
 
        return 0;
 }
@@ -230,13 +230,13 @@ int mei_amthif_run_next_cmd(struct mei_device *dev)
                                        typeof(*cb), list);
        if (!cb) {
                dev->iamthif_state = MEI_IAMTHIF_IDLE;
-               dev->iamthif_fp = NULL;
+               cl->fp = NULL;
                return 0;
        }
 
        list_del_init(&cb->list);
        dev->iamthif_state = MEI_IAMTHIF_WRITING;
-       dev->iamthif_fp = cb->fp;
+       cl->fp = cb->fp;
 
        ret = mei_cl_write(cl, cb, false);
        if (ret < 0)
@@ -375,7 +375,7 @@ void mei_amthif_complete(struct mei_cl *cl, struct mei_cl_cb *cb)
                        return;
                }
                dev->iamthif_state = MEI_IAMTHIF_IDLE;
-               dev->iamthif_fp = NULL;
+               cl->fp = NULL;
                if (!dev->iamthif_canceled) {
                        /*
                         * in case of error enqueue the write cb to complete
@@ -453,11 +453,12 @@ static void mei_clear_lists(struct mei_device *dev, const struct file *file)
 */
 int mei_amthif_release(struct mei_device *dev, struct file *file)
 {
+       struct mei_cl *cl = file->private_data;
+
        if (dev->iamthif_open_count > 0)
                dev->iamthif_open_count--;
 
-       if (dev->iamthif_fp == file &&
-           dev->iamthif_state != MEI_IAMTHIF_IDLE) {
+       if (cl->fp == file && dev->iamthif_state != MEI_IAMTHIF_IDLE) {
 
                dev_dbg(dev->dev, "amthif canceled iamthif state %d\n",
                    dev->iamthif_state);
index 412229e7bb7cc8003ce0af2e5e7a8bfc31ff3370..8b5e4b4c4c152fe0aedc4cf0db43c3bdee6be1f3 100644 (file)
@@ -516,7 +516,6 @@ void mei_timer(struct work_struct *work)
                        dev_err(dev->dev, "timer: amthif  hanged.\n");
                        mei_reset(dev);
 
-                       dev->iamthif_fp = NULL;
                        mei_amthif_run_next_cmd(dev);
                }
        }
index d62e89c80beb6b0690743ba88d05d7c9630f1170..d7ef5edf044a5942f7fada1db400bb687eb729c7 100644 (file)
@@ -71,6 +71,7 @@ static int mei_open(struct inode *inode, struct file *file)
                goto err_unlock;
        }
 
+       cl->fp = file;
        file->private_data = cl;
 
        mutex_unlock(&dev->device_lock);
index d7b68063ace14f957947226d9b839c830e2e60df..aaefbc87c2fc66c8ac60cf0f8d83cb7a9333d250 100644 (file)
@@ -200,6 +200,7 @@ struct mei_cl_cb {
  * @ev_async: event async notification
  * @status: connection status
  * @me_cl: fw client connected
+ * @fp: file associated with client
  * @host_client_id: host id
  * @mei_flow_ctrl_creds: transmit flow credentials
  * @timer_count:  watchdog timer for operation completion
@@ -223,6 +224,7 @@ struct mei_cl {
        struct fasync_struct *ev_async;
        int status;
        struct mei_me_client *me_cl;
+       const struct file *fp;
        u8 host_client_id;
        u8 mei_flow_ctrl_creds;
        u8 timer_count;
@@ -398,7 +400,6 @@ const char *mei_pg_state_str(enum mei_pg_state state);
  * @override_fixed_address: force allow fixed address behavior
  *
  * @amthif_cmd_list : amthif list for cmd waiting
- * @iamthif_fp : file for current amthif operation
  * @iamthif_cl  : amthif host client
  * @iamthif_open_count : number of opened amthif connections
  * @iamthif_stall_timer : timer to detect amthif hang
@@ -481,8 +482,6 @@ struct mei_device {
 
        /* amthif list for cmd waiting */
        struct mei_cl_cb amthif_cmd_list;
-       /* driver managed amthif list for reading completed amthif cmd data */
-       const struct file *iamthif_fp;
        struct mei_cl iamthif_cl;
        long iamthif_open_count;
        u32 iamthif_stall_timer;