@@ -28,6 +28,7 @@ static LIST_HEAD(icc_providers);
2828static int providers_count ;
2929static bool synced_state ;
3030static DEFINE_MUTEX (icc_lock );
31+ static DEFINE_MUTEX (icc_bw_lock );
3132static struct dentry * icc_debugfs_dir ;
3233
3334static void icc_summary_show_one (struct seq_file * s , struct icc_node * n )
@@ -631,7 +632,7 @@ int icc_set_bw(struct icc_path *path, u32 avg_bw, u32 peak_bw)
631632 if (WARN_ON (IS_ERR (path ) || !path -> num_nodes ))
632633 return - EINVAL ;
633634
634- mutex_lock (& icc_lock );
635+ mutex_lock (& icc_bw_lock );
635636
636637 old_avg = path -> reqs [0 ].avg_bw ;
637638 old_peak = path -> reqs [0 ].peak_bw ;
@@ -663,7 +664,7 @@ int icc_set_bw(struct icc_path *path, u32 avg_bw, u32 peak_bw)
663664 apply_constraints (path );
664665 }
665666
666- mutex_unlock (& icc_lock );
667+ mutex_unlock (& icc_bw_lock );
667668
668669 trace_icc_set_bw_end (path , ret );
669670
@@ -872,6 +873,7 @@ void icc_node_add(struct icc_node *node, struct icc_provider *provider)
872873 return ;
873874
874875 mutex_lock (& icc_lock );
876+ mutex_lock (& icc_bw_lock );
875877
876878 node -> provider = provider ;
877879 list_add_tail (& node -> node_list , & provider -> nodes );
@@ -900,6 +902,7 @@ void icc_node_add(struct icc_node *node, struct icc_provider *provider)
900902 node -> avg_bw = 0 ;
901903 node -> peak_bw = 0 ;
902904
905+ mutex_unlock (& icc_bw_lock );
903906 mutex_unlock (& icc_lock );
904907}
905908EXPORT_SYMBOL_GPL (icc_node_add );
@@ -1025,6 +1028,7 @@ void icc_sync_state(struct device *dev)
10251028 return ;
10261029
10271030 mutex_lock (& icc_lock );
1031+ mutex_lock (& icc_bw_lock );
10281032 synced_state = true;
10291033 list_for_each_entry (p , & icc_providers , provider_list ) {
10301034 dev_dbg (p -> dev , "interconnect provider is in synced state\n" );
0 commit comments