@@ -28,6 +28,7 @@ static LIST_HEAD(icc_providers);
28
28
static int providers_count ;
29
29
static bool synced_state ;
30
30
static DEFINE_MUTEX (icc_lock );
31
+ static DEFINE_MUTEX (icc_bw_lock );
31
32
static struct dentry * icc_debugfs_dir ;
32
33
33
34
static 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)
631
632
if (WARN_ON (IS_ERR (path ) || !path -> num_nodes ))
632
633
return - EINVAL ;
633
634
634
- mutex_lock (& icc_lock );
635
+ mutex_lock (& icc_bw_lock );
635
636
636
637
old_avg = path -> reqs [0 ].avg_bw ;
637
638
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)
663
664
apply_constraints (path );
664
665
}
665
666
666
- mutex_unlock (& icc_lock );
667
+ mutex_unlock (& icc_bw_lock );
667
668
668
669
trace_icc_set_bw_end (path , ret );
669
670
@@ -872,6 +873,7 @@ void icc_node_add(struct icc_node *node, struct icc_provider *provider)
872
873
return ;
873
874
874
875
mutex_lock (& icc_lock );
876
+ mutex_lock (& icc_bw_lock );
875
877
876
878
node -> provider = provider ;
877
879
list_add_tail (& node -> node_list , & provider -> nodes );
@@ -900,6 +902,7 @@ void icc_node_add(struct icc_node *node, struct icc_provider *provider)
900
902
node -> avg_bw = 0 ;
901
903
node -> peak_bw = 0 ;
902
904
905
+ mutex_unlock (& icc_bw_lock );
903
906
mutex_unlock (& icc_lock );
904
907
}
905
908
EXPORT_SYMBOL_GPL (icc_node_add );
@@ -1025,6 +1028,7 @@ void icc_sync_state(struct device *dev)
1025
1028
return ;
1026
1029
1027
1030
mutex_lock (& icc_lock );
1031
+ mutex_lock (& icc_bw_lock );
1028
1032
synced_state = true;
1029
1033
list_for_each_entry (p , & icc_providers , provider_list ) {
1030
1034
dev_dbg (p -> dev , "interconnect provider is in synced state\n" );
0 commit comments