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: Tomas Winkler <tomas.winkler@intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
4a10c2ac2f
commit
1aee351a73
|
@ -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)
|
||||||
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)
|
||||||
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 {
|
||||||
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;
|
||||||
|
|
Loading…
Reference in New Issue