Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 28ce3cd6 authored by Pan Fang's avatar Pan Fang
Browse files

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: default avatarPan Fang <fangpan@codeaurora.org>
parent 1cd71605
Loading
Loading
Loading
Loading
+4 −6
Original line number Diff line number Diff line
@@ -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,10 +1145,8 @@ int pinctrl_register_map(struct pinctrl_map const *maps, unsigned num_maps,
		maps_node->maps = maps;
	}

	if (!locked)
	mutex_lock(&pinctrl_maps_mutex);
	list_add_tail(&maps_node->node, &pinctrl_maps);
	if (!locked)
	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)
+1 −1
Original line number Diff line number Diff line
@@ -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);
+1 −1
Original line number Diff line number Diff line
@@ -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)