提交 1aee351a 编写于 作者: T Tomas Winkler 提交者: Greg Kroah-Hartman

mei: make me client counters less error prone

1. u8 counters are prone to hard to detect overflow:
 make them unsigned long to match bit_ functions argument type

2. don't check me_clients_num for negativity, it is unsigned.

3. init all the me client counters from one place

Cc:  <stable@vger.kernel.org> # 3.9+
Signed-off-by: NTomas Winkler <tomas.winkler@intel.com>
Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
上级 4a10c2ac
...@@ -35,11 +35,15 @@ static void mei_hbm_me_cl_allocate(struct mei_device *dev) ...@@ -35,11 +35,15 @@ static void mei_hbm_me_cl_allocate(struct mei_device *dev)
struct mei_me_client *clients; struct mei_me_client *clients;
int b; int b;
dev->me_clients_num = 0;
dev->me_client_presentation_num = 0;
dev->me_client_index = 0;
/* count how many ME clients we have */ /* count how many ME clients we have */
for_each_set_bit(b, dev->me_clients_map, MEI_CLIENTS_MAX) for_each_set_bit(b, dev->me_clients_map, MEI_CLIENTS_MAX)
dev->me_clients_num++; dev->me_clients_num++;
if (dev->me_clients_num <= 0) if (dev->me_clients_num == 0)
return; return;
kfree(dev->me_clients); kfree(dev->me_clients);
...@@ -221,7 +225,7 @@ static int mei_hbm_prop_req(struct mei_device *dev) ...@@ -221,7 +225,7 @@ static int mei_hbm_prop_req(struct mei_device *dev)
struct hbm_props_request *prop_req; struct hbm_props_request *prop_req;
const size_t len = sizeof(struct hbm_props_request); const size_t len = sizeof(struct hbm_props_request);
unsigned long next_client_index; unsigned long next_client_index;
u8 client_num; unsigned long client_num;
client_num = dev->me_client_presentation_num; client_num = dev->me_client_presentation_num;
...@@ -677,8 +681,6 @@ void mei_hbm_dispatch(struct mei_device *dev, struct mei_msg_hdr *hdr) ...@@ -677,8 +681,6 @@ void mei_hbm_dispatch(struct mei_device *dev, struct mei_msg_hdr *hdr)
if (dev->dev_state == MEI_DEV_INIT_CLIENTS && if (dev->dev_state == MEI_DEV_INIT_CLIENTS &&
dev->hbm_state == MEI_HBM_ENUM_CLIENTS) { dev->hbm_state == MEI_HBM_ENUM_CLIENTS) {
dev->init_clients_timer = 0; dev->init_clients_timer = 0;
dev->me_client_presentation_num = 0;
dev->me_client_index = 0;
mei_hbm_me_cl_allocate(dev); mei_hbm_me_cl_allocate(dev);
dev->hbm_state = MEI_HBM_CLIENT_PROPERTIES; dev->hbm_state = MEI_HBM_CLIENT_PROPERTIES;
......
...@@ -396,9 +396,9 @@ struct mei_device { ...@@ -396,9 +396,9 @@ struct mei_device {
struct mei_me_client *me_clients; /* Note: memory has to be allocated */ struct mei_me_client *me_clients; /* Note: memory has to be allocated */
DECLARE_BITMAP(me_clients_map, MEI_CLIENTS_MAX); DECLARE_BITMAP(me_clients_map, MEI_CLIENTS_MAX);
DECLARE_BITMAP(host_clients_map, MEI_CLIENTS_MAX); DECLARE_BITMAP(host_clients_map, MEI_CLIENTS_MAX);
u8 me_clients_num; unsigned long me_clients_num;
u8 me_client_presentation_num; unsigned long me_client_presentation_num;
u8 me_client_index; unsigned long me_client_index;
struct mei_cl wd_cl; struct mei_cl wd_cl;
enum mei_wd_states wd_state; enum mei_wd_states wd_state;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册