mei: drop global me_client_index
authorAlexander Usyskin <alexander.usyskin@intel.com>
Sun, 17 Apr 2016 16:16:02 +0000 (12:16 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 30 Apr 2016 21:08:08 +0000 (14:08 -0700)
Global me_client_index is used only during the enumeration process and
can be effectively replaced by me_addr data from the last enumeration
response as we always enumerate clients in the increasing order.

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

index 5e305d2..5eaa463 100644 (file)
@@ -113,8 +113,6 @@ void mei_hbm_idle(struct mei_device *dev)
  */
 void mei_hbm_reset(struct mei_device *dev)
 {
  */
 void mei_hbm_reset(struct mei_device *dev)
 {
-       dev->me_client_index = 0;
-
        mei_me_cl_rm_all(dev);
 
        mei_hbm_idle(dev);
        mei_me_cl_rm_all(dev);
 
        mei_hbm_idle(dev);
@@ -530,24 +528,22 @@ static void mei_hbm_cl_notify(struct mei_device *dev,
  * mei_hbm_prop_req - request property for a single client
  *
  * @dev: the device structure
  * mei_hbm_prop_req - request property for a single client
  *
  * @dev: the device structure
+ * @start_idx: client index to start search
  *
  * Return: 0 on success and < 0 on failure
  */
  *
  * Return: 0 on success and < 0 on failure
  */
-
-static int mei_hbm_prop_req(struct mei_device *dev)
+static int mei_hbm_prop_req(struct mei_device *dev, unsigned long start_idx)
 {
 {
-
        struct mei_msg_hdr *mei_hdr = &dev->wr_msg.hdr;
        struct hbm_props_request *prop_req;
        const size_t len = sizeof(struct hbm_props_request);
        struct mei_msg_hdr *mei_hdr = &dev->wr_msg.hdr;
        struct hbm_props_request *prop_req;
        const size_t len = sizeof(struct hbm_props_request);
-       unsigned long next_client_index;
+       unsigned long addr;
        int ret;
 
        int ret;
 
-       next_client_index = find_next_bit(dev->me_clients_map, MEI_CLIENTS_MAX,
-                                         dev->me_client_index);
+       addr = find_next_bit(dev->me_clients_map, MEI_CLIENTS_MAX, start_idx);
 
        /* We got all client properties */
 
        /* We got all client properties */
-       if (next_client_index == MEI_CLIENTS_MAX) {
+       if (addr == MEI_CLIENTS_MAX) {
                dev->hbm_state = MEI_HBM_STARTED;
                mei_host_client_init(dev);
 
                dev->hbm_state = MEI_HBM_STARTED;
                mei_host_client_init(dev);
 
@@ -560,7 +556,7 @@ static int mei_hbm_prop_req(struct mei_device *dev)
        memset(prop_req, 0, sizeof(struct hbm_props_request));
 
        prop_req->hbm_cmd = HOST_CLIENT_PROPERTIES_REQ_CMD;
        memset(prop_req, 0, sizeof(struct hbm_props_request));
 
        prop_req->hbm_cmd = HOST_CLIENT_PROPERTIES_REQ_CMD;
-       prop_req->me_addr = next_client_index;
+       prop_req->me_addr = addr;
 
        ret = mei_write_message(dev, mei_hdr, dev->wr_msg.data);
        if (ret) {
 
        ret = mei_write_message(dev, mei_hdr, dev->wr_msg.data);
        if (ret) {
@@ -570,7 +566,6 @@ static int mei_hbm_prop_req(struct mei_device *dev)
        }
 
        dev->init_clients_timer = MEI_CLIENTS_INIT_TIMEOUT;
        }
 
        dev->init_clients_timer = MEI_CLIENTS_INIT_TIMEOUT;
-       dev->me_client_index = next_client_index;
 
        return 0;
 }
 
        return 0;
 }
@@ -1152,10 +1147,8 @@ int mei_hbm_dispatch(struct mei_device *dev, struct mei_msg_hdr *hdr)
 
                mei_hbm_me_cl_add(dev, props_res);
 
 
                mei_hbm_me_cl_add(dev, props_res);
 
-               dev->me_client_index++;
-
                /* request property for the next client */
                /* request property for the next client */
-               if (mei_hbm_prop_req(dev))
+               if (mei_hbm_prop_req(dev, props_res->me_addr + 1))
                        return -EIO;
 
                break;
                        return -EIO;
 
                break;
@@ -1181,7 +1174,7 @@ int mei_hbm_dispatch(struct mei_device *dev, struct mei_msg_hdr *hdr)
                dev->hbm_state = MEI_HBM_CLIENT_PROPERTIES;
 
                /* first property request */
                dev->hbm_state = MEI_HBM_CLIENT_PROPERTIES;
 
                /* first property request */
-               if (mei_hbm_prop_req(dev))
+               if (mei_hbm_prop_req(dev, 0))
                        return -EIO;
 
                break;
                        return -EIO;
 
                break;
index db78e6d..87586bb 100644 (file)
@@ -396,7 +396,6 @@ const char *mei_pg_state_str(enum mei_pg_state state);
  * @me_clients  : list of FW clients
  * @me_clients_map : FW clients bit map
  * @host_clients_map : host clients id pool
  * @me_clients  : list of FW clients
  * @me_clients_map : FW clients bit map
  * @host_clients_map : host clients id pool
- * @me_client_index : last FW client index in enumeration
  *
  * @allow_fixed_address: allow user space to connect a fixed client
  * @override_fixed_address: force allow fixed address behavior
  *
  * @allow_fixed_address: allow user space to connect a fixed client
  * @override_fixed_address: force allow fixed address behavior
@@ -486,7 +485,6 @@ struct mei_device {
        struct list_head me_clients;
        DECLARE_BITMAP(me_clients_map, MEI_CLIENTS_MAX);
        DECLARE_BITMAP(host_clients_map, MEI_CLIENTS_MAX);
        struct list_head me_clients;
        DECLARE_BITMAP(me_clients_map, MEI_CLIENTS_MAX);
        DECLARE_BITMAP(host_clients_map, MEI_CLIENTS_MAX);
-       unsigned long me_client_index;
 
        bool allow_fixed_address;
        bool override_fixed_address;
 
        bool allow_fixed_address;
        bool override_fixed_address;