pinctrl: Protect the pinctrl_maps in pinctrl_register_map

The pinctrl_maps_mutex didn't take affect in pinctrl_register_map
sometimes. Now the change make it to protect the pinctrl_maps list
operation all the time.

CRs-Fixed: 649599
Change-Id: I5e4ce53b84375e4b1cf08f362bb26cbbe8acc07e
Signed-off-by: Pan Fang <fangpan@codeaurora.org>
This commit is contained in:
Pan Fang 2014-04-15 18:07:45 +08:00
parent 1cd71605ba
commit 28ce3cd64e
3 changed files with 6 additions and 8 deletions

View File

@ -1077,7 +1077,7 @@ void devm_pinctrl_put(struct pinctrl *p)
EXPORT_SYMBOL_GPL(devm_pinctrl_put);
int pinctrl_register_map(struct pinctrl_map const *maps, unsigned num_maps,
bool dup, bool locked)
bool dup)
{
int i, ret;
struct pinctrl_maps *maps_node;
@ -1145,11 +1145,9 @@ int pinctrl_register_map(struct pinctrl_map const *maps, unsigned num_maps,
maps_node->maps = maps;
}
if (!locked)
mutex_lock(&pinctrl_maps_mutex);
mutex_lock(&pinctrl_maps_mutex);
list_add_tail(&maps_node->node, &pinctrl_maps);
if (!locked)
mutex_unlock(&pinctrl_maps_mutex);
mutex_unlock(&pinctrl_maps_mutex);
return 0;
}
@ -1164,7 +1162,7 @@ int pinctrl_register_map(struct pinctrl_map const *maps, unsigned num_maps,
int pinctrl_register_mappings(struct pinctrl_map const *maps,
unsigned num_maps)
{
return pinctrl_register_map(maps, num_maps, true, false);
return pinctrl_register_map(maps, num_maps, true);
}
void pinctrl_unregister_map(struct pinctrl_map const *map)

View File

@ -183,7 +183,7 @@ static inline struct pin_desc *pin_desc_get(struct pinctrl_dev *pctldev,
}
int pinctrl_register_map(struct pinctrl_map const *maps, unsigned num_maps,
bool dup, bool locked);
bool dup);
void pinctrl_unregister_map(struct pinctrl_map const *map);
extern int pinctrl_force_sleep(struct pinctrl_dev *pctldev);

View File

@ -92,7 +92,7 @@ static int dt_remember_or_free_map(struct pinctrl *p, const char *statename,
dt_map->num_maps = num_maps;
list_add_tail(&dt_map->node, &p->dt_maps);
return pinctrl_register_map(map, num_maps, false, true);
return pinctrl_register_map(map, num_maps, false);
}
struct pinctrl_dev *of_pinctrl_get(struct device_node *np)