@@ -276,17 +276,6 @@ static int em_compute_costs(struct device *dev, struct em_perf_state *table,
276
276
return 0 ;
277
277
}
278
278
279
- static int em_allocate_perf_table (struct em_perf_domain * pd ,
280
- int nr_states )
281
- {
282
- pd -> table = kcalloc (nr_states , sizeof (struct em_perf_state ),
283
- GFP_KERNEL );
284
- if (!pd -> table )
285
- return - ENOMEM ;
286
-
287
- return 0 ;
288
- }
289
-
290
279
/**
291
280
* em_dev_update_perf_domain() - Update runtime EM table for a device
292
281
* @dev : Device for which the EM is to be updated
@@ -331,24 +320,6 @@ int em_dev_update_perf_domain(struct device *dev,
331
320
}
332
321
EXPORT_SYMBOL_GPL (em_dev_update_perf_domain );
333
322
334
- static int em_create_runtime_table (struct em_perf_domain * pd )
335
- {
336
- struct em_perf_table __rcu * table ;
337
- int table_size ;
338
-
339
- table = em_table_alloc (pd );
340
- if (!table )
341
- return - ENOMEM ;
342
-
343
- /* Initialize runtime table with existing data */
344
- table_size = sizeof (struct em_perf_state ) * pd -> nr_perf_states ;
345
- memcpy (table -> state , pd -> table , table_size );
346
-
347
- rcu_assign_pointer (pd -> em_table , table );
348
-
349
- return 0 ;
350
- }
351
-
352
323
static int em_create_perf_table (struct device * dev , struct em_perf_domain * pd ,
353
324
struct em_perf_state * table ,
354
325
struct em_data_callback * cb ,
@@ -409,6 +380,7 @@ static int em_create_pd(struct device *dev, int nr_states,
409
380
struct em_data_callback * cb , cpumask_t * cpus ,
410
381
unsigned long flags )
411
382
{
383
+ struct em_perf_table __rcu * em_table ;
412
384
struct em_perf_domain * pd ;
413
385
struct device * cpu_dev ;
414
386
int cpu , ret , num_cpus ;
@@ -435,17 +407,15 @@ static int em_create_pd(struct device *dev, int nr_states,
435
407
436
408
pd -> nr_perf_states = nr_states ;
437
409
438
- ret = em_allocate_perf_table (pd , nr_states );
439
- if (ret )
410
+ em_table = em_table_alloc (pd );
411
+ if (! em_table )
440
412
goto free_pd ;
441
413
442
- ret = em_create_perf_table (dev , pd , pd -> table , cb , flags );
414
+ ret = em_create_perf_table (dev , pd , em_table -> state , cb , flags );
443
415
if (ret )
444
416
goto free_pd_table ;
445
417
446
- ret = em_create_runtime_table (pd );
447
- if (ret )
448
- goto free_pd_table ;
418
+ rcu_assign_pointer (pd -> em_table , em_table );
449
419
450
420
if (_is_cpu_device (dev ))
451
421
for_each_cpu (cpu , cpus ) {
@@ -458,7 +428,7 @@ static int em_create_pd(struct device *dev, int nr_states,
458
428
return 0 ;
459
429
460
430
free_pd_table :
461
- kfree (pd -> table );
431
+ kfree (em_table );
462
432
free_pd :
463
433
kfree (pd );
464
434
return - EINVAL ;
@@ -629,7 +599,7 @@ int em_dev_register_perf_domain(struct device *dev, unsigned int nr_states,
629
599
630
600
dev -> em_pd -> flags |= flags ;
631
601
632
- em_cpufreq_update_efficiencies (dev , dev -> em_pd -> table );
602
+ em_cpufreq_update_efficiencies (dev , dev -> em_pd -> em_table -> state );
633
603
634
604
em_debug_create_pd (dev );
635
605
dev_info (dev , "EM: created perf domain\n" );
@@ -666,8 +636,6 @@ void em_dev_unregister_perf_domain(struct device *dev)
666
636
mutex_lock (& em_pd_mutex );
667
637
em_debug_remove_pd (dev );
668
638
669
- kfree (dev -> em_pd -> table );
670
-
671
639
em_table_free (dev -> em_pd -> em_table );
672
640
673
641
kfree (dev -> em_pd );
0 commit comments