@@ -1280,18 +1280,20 @@ EXPORT_SYMBOL(devfreq_remove_governor);
1280
1280
static ssize_t name_show (struct device * dev ,
1281
1281
struct device_attribute * attr , char * buf )
1282
1282
{
1283
- struct devfreq * devfreq = to_devfreq (dev );
1284
- return sprintf (buf , "%s\n" , dev_name (devfreq -> dev .parent ));
1283
+ struct devfreq * df = to_devfreq (dev );
1284
+ return sprintf (buf , "%s\n" , dev_name (df -> dev .parent ));
1285
1285
}
1286
1286
static DEVICE_ATTR_RO (name );
1287
1287
1288
1288
static ssize_t governor_show (struct device * dev ,
1289
1289
struct device_attribute * attr , char * buf )
1290
1290
{
1291
- if (!to_devfreq (dev )-> governor )
1291
+ struct devfreq * df = to_devfreq (dev );
1292
+
1293
+ if (!df -> governor )
1292
1294
return - EINVAL ;
1293
1295
1294
- return sprintf (buf , "%s\n" , to_devfreq ( dev ) -> governor -> name );
1296
+ return sprintf (buf , "%s\n" , df -> governor -> name );
1295
1297
}
1296
1298
1297
1299
static ssize_t governor_store (struct device * dev , struct device_attribute * attr ,
@@ -1302,6 +1304,9 @@ static ssize_t governor_store(struct device *dev, struct device_attribute *attr,
1302
1304
char str_governor [DEVFREQ_NAME_LEN + 1 ];
1303
1305
const struct devfreq_governor * governor , * prev_governor ;
1304
1306
1307
+ if (!df -> governor )
1308
+ return - EINVAL ;
1309
+
1305
1310
ret = sscanf (buf , "%" __stringify (DEVFREQ_NAME_LEN ) "s" , str_governor );
1306
1311
if (ret != 1 )
1307
1312
return - EINVAL ;
@@ -1315,20 +1320,18 @@ static ssize_t governor_store(struct device *dev, struct device_attribute *attr,
1315
1320
if (df -> governor == governor ) {
1316
1321
ret = 0 ;
1317
1322
goto out ;
1318
- } else if ((df -> governor && df -> governor -> immutable ) ||
1319
- governor -> immutable ) {
1323
+ } else if (df -> governor -> immutable || governor -> immutable ) {
1320
1324
ret = - EINVAL ;
1321
1325
goto out ;
1322
1326
}
1323
1327
1324
- if (df -> governor ) {
1325
- ret = df -> governor -> event_handler (df , DEVFREQ_GOV_STOP , NULL );
1326
- if (ret ) {
1327
- dev_warn (dev , "%s: Governor %s not stopped(%d)\n" ,
1328
- __func__ , df -> governor -> name , ret );
1329
- goto out ;
1330
- }
1328
+ ret = df -> governor -> event_handler (df , DEVFREQ_GOV_STOP , NULL );
1329
+ if (ret ) {
1330
+ dev_warn (dev , "%s: Governor %s not stopped(%d)\n" ,
1331
+ __func__ , df -> governor -> name , ret );
1332
+ goto out ;
1331
1333
}
1334
+
1332
1335
prev_governor = df -> governor ;
1333
1336
df -> governor = governor ;
1334
1337
strncpy (df -> governor_name , governor -> name , DEVFREQ_NAME_LEN );
@@ -1363,13 +1366,16 @@ static ssize_t available_governors_show(struct device *d,
1363
1366
struct devfreq * df = to_devfreq (d );
1364
1367
ssize_t count = 0 ;
1365
1368
1369
+ if (!df -> governor )
1370
+ return - EINVAL ;
1371
+
1366
1372
mutex_lock (& devfreq_list_lock );
1367
1373
1368
1374
/*
1369
1375
* The devfreq with immutable governor (e.g., passive) shows
1370
1376
* only own governor.
1371
1377
*/
1372
- if (df -> governor && df -> governor -> immutable ) {
1378
+ if (df -> governor -> immutable ) {
1373
1379
count = scnprintf (& buf [count ], DEVFREQ_NAME_LEN ,
1374
1380
"%s " , df -> governor_name );
1375
1381
/*
@@ -1403,27 +1409,37 @@ static ssize_t cur_freq_show(struct device *dev, struct device_attribute *attr,
1403
1409
char * buf )
1404
1410
{
1405
1411
unsigned long freq ;
1406
- struct devfreq * devfreq = to_devfreq (dev );
1412
+ struct devfreq * df = to_devfreq (dev );
1407
1413
1408
- if (devfreq -> profile -> get_cur_freq &&
1409
- !devfreq -> profile -> get_cur_freq (devfreq -> dev .parent , & freq ))
1414
+ if (!df -> profile )
1415
+ return - EINVAL ;
1416
+
1417
+ if (df -> profile -> get_cur_freq &&
1418
+ !df -> profile -> get_cur_freq (df -> dev .parent , & freq ))
1410
1419
return sprintf (buf , "%lu\n" , freq );
1411
1420
1412
- return sprintf (buf , "%lu\n" , devfreq -> previous_freq );
1421
+ return sprintf (buf , "%lu\n" , df -> previous_freq );
1413
1422
}
1414
1423
static DEVICE_ATTR_RO (cur_freq );
1415
1424
1416
1425
static ssize_t target_freq_show (struct device * dev ,
1417
1426
struct device_attribute * attr , char * buf )
1418
1427
{
1419
- return sprintf (buf , "%lu\n" , to_devfreq (dev )-> previous_freq );
1428
+ struct devfreq * df = to_devfreq (dev );
1429
+
1430
+ return sprintf (buf , "%lu\n" , df -> previous_freq );
1420
1431
}
1421
1432
static DEVICE_ATTR_RO (target_freq );
1422
1433
1423
1434
static ssize_t polling_interval_show (struct device * dev ,
1424
1435
struct device_attribute * attr , char * buf )
1425
1436
{
1426
- return sprintf (buf , "%d\n" , to_devfreq (dev )-> profile -> polling_ms );
1437
+ struct devfreq * df = to_devfreq (dev );
1438
+
1439
+ if (!df -> profile )
1440
+ return - EINVAL ;
1441
+
1442
+ return sprintf (buf , "%d\n" , df -> profile -> polling_ms );
1427
1443
}
1428
1444
1429
1445
static ssize_t polling_interval_store (struct device * dev ,
@@ -1551,6 +1567,9 @@ static ssize_t available_frequencies_show(struct device *d,
1551
1567
ssize_t count = 0 ;
1552
1568
int i ;
1553
1569
1570
+ if (!df -> profile )
1571
+ return - EINVAL ;
1572
+
1554
1573
mutex_lock (& df -> lock );
1555
1574
1556
1575
for (i = 0 ; i < df -> profile -> max_state ; i ++ )
@@ -1571,49 +1590,53 @@ static DEVICE_ATTR_RO(available_frequencies);
1571
1590
static ssize_t trans_stat_show (struct device * dev ,
1572
1591
struct device_attribute * attr , char * buf )
1573
1592
{
1574
- struct devfreq * devfreq = to_devfreq (dev );
1593
+ struct devfreq * df = to_devfreq (dev );
1575
1594
ssize_t len ;
1576
1595
int i , j ;
1577
- unsigned int max_state = devfreq -> profile -> max_state ;
1596
+ unsigned int max_state ;
1597
+
1598
+ if (!df -> profile )
1599
+ return - EINVAL ;
1600
+ max_state = df -> profile -> max_state ;
1578
1601
1579
1602
if (max_state == 0 )
1580
1603
return sprintf (buf , "Not Supported.\n" );
1581
1604
1582
- mutex_lock (& devfreq -> lock );
1583
- if (!devfreq -> stop_polling &&
1584
- devfreq_update_status (devfreq , devfreq -> previous_freq )) {
1585
- mutex_unlock (& devfreq -> lock );
1605
+ mutex_lock (& df -> lock );
1606
+ if (!df -> stop_polling &&
1607
+ devfreq_update_status (df , df -> previous_freq )) {
1608
+ mutex_unlock (& df -> lock );
1586
1609
return 0 ;
1587
1610
}
1588
- mutex_unlock (& devfreq -> lock );
1611
+ mutex_unlock (& df -> lock );
1589
1612
1590
1613
len = sprintf (buf , " From : To\n" );
1591
1614
len += sprintf (buf + len , " :" );
1592
1615
for (i = 0 ; i < max_state ; i ++ )
1593
1616
len += sprintf (buf + len , "%10lu" ,
1594
- devfreq -> profile -> freq_table [i ]);
1617
+ df -> profile -> freq_table [i ]);
1595
1618
1596
1619
len += sprintf (buf + len , " time(ms)\n" );
1597
1620
1598
1621
for (i = 0 ; i < max_state ; i ++ ) {
1599
- if (devfreq -> profile -> freq_table [i ]
1600
- == devfreq -> previous_freq ) {
1622
+ if (df -> profile -> freq_table [i ]
1623
+ == df -> previous_freq ) {
1601
1624
len += sprintf (buf + len , "*" );
1602
1625
} else {
1603
1626
len += sprintf (buf + len , " " );
1604
1627
}
1605
1628
len += sprintf (buf + len , "%10lu:" ,
1606
- devfreq -> profile -> freq_table [i ]);
1629
+ df -> profile -> freq_table [i ]);
1607
1630
for (j = 0 ; j < max_state ; j ++ )
1608
1631
len += sprintf (buf + len , "%10u" ,
1609
- devfreq -> stats .trans_table [(i * max_state ) + j ]);
1632
+ df -> stats .trans_table [(i * max_state ) + j ]);
1610
1633
1611
1634
len += sprintf (buf + len , "%10llu\n" , (u64 )
1612
- jiffies64_to_msecs (devfreq -> stats .time_in_state [i ]));
1635
+ jiffies64_to_msecs (df -> stats .time_in_state [i ]));
1613
1636
}
1614
1637
1615
1638
len += sprintf (buf + len , "Total transition : %u\n" ,
1616
- devfreq -> stats .total_trans );
1639
+ df -> stats .total_trans );
1617
1640
return len ;
1618
1641
}
1619
1642
@@ -1624,6 +1647,9 @@ static ssize_t trans_stat_store(struct device *dev,
1624
1647
struct devfreq * df = to_devfreq (dev );
1625
1648
int err , value ;
1626
1649
1650
+ if (!df -> profile )
1651
+ return - EINVAL ;
1652
+
1627
1653
if (df -> profile -> max_state == 0 )
1628
1654
return count ;
1629
1655
0 commit comments