@@ -29,6 +29,7 @@ static LIST_HEAD(icc_providers);
29
29
static int providers_count ;
30
30
static bool synced_state ;
31
31
static DEFINE_MUTEX (icc_lock );
32
+ static DEFINE_MUTEX (icc_bw_lock );
32
33
static struct dentry * icc_debugfs_dir ;
33
34
34
35
static void icc_summary_show_one (struct seq_file * s , struct icc_node * n )
@@ -632,7 +633,7 @@ int icc_set_bw(struct icc_path *path, u32 avg_bw, u32 peak_bw)
632
633
if (WARN_ON (IS_ERR (path ) || !path -> num_nodes ))
633
634
return - EINVAL ;
634
635
635
- mutex_lock (& icc_lock );
636
+ mutex_lock (& icc_bw_lock );
636
637
637
638
old_avg = path -> reqs [0 ].avg_bw ;
638
639
old_peak = path -> reqs [0 ].peak_bw ;
@@ -664,7 +665,7 @@ int icc_set_bw(struct icc_path *path, u32 avg_bw, u32 peak_bw)
664
665
apply_constraints (path );
665
666
}
666
667
667
- mutex_unlock (& icc_lock );
668
+ mutex_unlock (& icc_bw_lock );
668
669
669
670
trace_icc_set_bw_end (path , ret );
670
671
@@ -963,6 +964,7 @@ void icc_node_add(struct icc_node *node, struct icc_provider *provider)
963
964
return ;
964
965
965
966
mutex_lock (& icc_lock );
967
+ mutex_lock (& icc_bw_lock );
966
968
967
969
node -> provider = provider ;
968
970
list_add_tail (& node -> node_list , & provider -> nodes );
@@ -988,6 +990,7 @@ void icc_node_add(struct icc_node *node, struct icc_provider *provider)
988
990
node -> avg_bw = 0 ;
989
991
node -> peak_bw = 0 ;
990
992
993
+ mutex_unlock (& icc_bw_lock );
991
994
mutex_unlock (& icc_lock );
992
995
}
993
996
EXPORT_SYMBOL_GPL (icc_node_add );
@@ -1115,6 +1118,7 @@ void icc_sync_state(struct device *dev)
1115
1118
return ;
1116
1119
1117
1120
mutex_lock (& icc_lock );
1121
+ mutex_lock (& icc_bw_lock );
1118
1122
synced_state = true;
1119
1123
list_for_each_entry (p , & icc_providers , provider_list ) {
1120
1124
dev_dbg (p -> dev , "interconnect provider is in synced state\n" );
0 commit comments