@@ -2018,8 +2018,8 @@ int pm_genpd_init(struct generic_pm_domain *genpd,
20182018
20192019 mutex_lock (& gpd_list_lock );
20202020 list_add (& genpd -> gpd_list_node , & gpd_list );
2021- genpd_debug_add (genpd );
20222021 mutex_unlock (& gpd_list_lock );
2022+ genpd_debug_add (genpd );
20232023
20242024 return 0 ;
20252025}
@@ -2206,12 +2206,19 @@ static int genpd_add_provider(struct device_node *np, genpd_xlate_t xlate,
22062206
22072207static bool genpd_present (const struct generic_pm_domain * genpd )
22082208{
2209+ bool ret = false;
22092210 const struct generic_pm_domain * gpd ;
22102211
2211- list_for_each_entry (gpd , & gpd_list , gpd_list_node )
2212- if (gpd == genpd )
2213- return true;
2214- return false;
2212+ mutex_lock (& gpd_list_lock );
2213+ list_for_each_entry (gpd , & gpd_list , gpd_list_node ) {
2214+ if (gpd == genpd ) {
2215+ ret = true;
2216+ break ;
2217+ }
2218+ }
2219+ mutex_unlock (& gpd_list_lock );
2220+
2221+ return ret ;
22152222}
22162223
22172224/**
@@ -2222,15 +2229,13 @@ static bool genpd_present(const struct generic_pm_domain *genpd)
22222229int of_genpd_add_provider_simple (struct device_node * np ,
22232230 struct generic_pm_domain * genpd )
22242231{
2225- int ret = - EINVAL ;
2232+ int ret ;
22262233
22272234 if (!np || !genpd )
22282235 return - EINVAL ;
22292236
2230- mutex_lock (& gpd_list_lock );
2231-
22322237 if (!genpd_present (genpd ))
2233- goto unlock ;
2238+ return - EINVAL ;
22342239
22352240 genpd -> dev .of_node = np ;
22362241
@@ -2241,7 +2246,7 @@ int of_genpd_add_provider_simple(struct device_node *np,
22412246 if (ret != - EPROBE_DEFER )
22422247 dev_err (& genpd -> dev , "Failed to add OPP table: %d\n" ,
22432248 ret );
2244- goto unlock ;
2249+ return ret ;
22452250 }
22462251
22472252 /*
@@ -2259,16 +2264,13 @@ int of_genpd_add_provider_simple(struct device_node *np,
22592264 dev_pm_opp_of_remove_table (& genpd -> dev );
22602265 }
22612266
2262- goto unlock ;
2267+ return ret ;
22632268 }
22642269
22652270 genpd -> provider = & np -> fwnode ;
22662271 genpd -> has_provider = true;
22672272
2268- unlock :
2269- mutex_unlock (& gpd_list_lock );
2270-
2271- return ret ;
2273+ return 0 ;
22722274}
22732275EXPORT_SYMBOL_GPL (of_genpd_add_provider_simple );
22742276
@@ -2287,8 +2289,6 @@ int of_genpd_add_provider_onecell(struct device_node *np,
22872289 if (!np || !data )
22882290 return - EINVAL ;
22892291
2290- mutex_lock (& gpd_list_lock );
2291-
22922292 if (!data -> xlate )
22932293 data -> xlate = genpd_xlate_onecell ;
22942294
@@ -2328,8 +2328,6 @@ int of_genpd_add_provider_onecell(struct device_node *np,
23282328 if (ret < 0 )
23292329 goto error ;
23302330
2331- mutex_unlock (& gpd_list_lock );
2332-
23332331 return 0 ;
23342332
23352333error :
@@ -2348,8 +2346,6 @@ int of_genpd_add_provider_onecell(struct device_node *np,
23482346 }
23492347 }
23502348
2351- mutex_unlock (& gpd_list_lock );
2352-
23532349 return ret ;
23542350}
23552351EXPORT_SYMBOL_GPL (of_genpd_add_provider_onecell );
0 commit comments