@@ -1394,45 +1394,66 @@ int cppc_get_perf_caps(int cpunum, struct cppc_perf_caps *perf_caps)
13941394 }
13951395 }
13961396
1397- cpc_read (cpunum , highest_reg , & high );
1397+ ret = cpc_read (cpunum , highest_reg , & high );
1398+ if (ret )
1399+ goto out_err ;
13981400 perf_caps -> highest_perf = high ;
13991401
1400- cpc_read (cpunum , lowest_reg , & low );
1402+ ret = cpc_read (cpunum , lowest_reg , & low );
1403+ if (ret )
1404+ goto out_err ;
14011405 perf_caps -> lowest_perf = low ;
14021406
1403- cpc_read (cpunum , nominal_reg , & nom );
1407+ ret = cpc_read (cpunum , nominal_reg , & nom );
1408+ if (ret )
1409+ goto out_err ;
14041410 perf_caps -> nominal_perf = nom ;
14051411
14061412 /*
14071413 * If reference perf register is not supported then we should
14081414 * use the nominal perf value
14091415 */
1410- if (CPC_SUPPORTED (reference_reg ))
1411- cpc_read (cpunum , reference_reg , & ref );
1412- else
1416+ if (CPC_SUPPORTED (reference_reg )) {
1417+ ret = cpc_read (cpunum , reference_reg , & ref );
1418+ if (ret )
1419+ goto out_err ;
1420+ } else {
14131421 ref = nom ;
1422+ }
14141423 perf_caps -> reference_perf = ref ;
14151424
14161425 if (guaranteed_reg -> type != ACPI_TYPE_BUFFER ||
14171426 IS_NULL_REG (& guaranteed_reg -> cpc_entry .reg )) {
14181427 perf_caps -> guaranteed_perf = 0 ;
14191428 } else {
1420- cpc_read (cpunum , guaranteed_reg , & guaranteed );
1429+ ret = cpc_read (cpunum , guaranteed_reg , & guaranteed );
1430+ if (ret )
1431+ goto out_err ;
14211432 perf_caps -> guaranteed_perf = guaranteed ;
14221433 }
14231434
1424- cpc_read (cpunum , lowest_non_linear_reg , & min_nonlinear );
1435+ ret = cpc_read (cpunum , lowest_non_linear_reg , & min_nonlinear );
1436+ if (ret )
1437+ goto out_err ;
14251438 perf_caps -> lowest_nonlinear_perf = min_nonlinear ;
14261439
1427- if (!high || !low || !nom || !ref || !min_nonlinear )
1440+ if (!high || !low || !nom || !ref || !min_nonlinear ) {
14281441 ret = - EFAULT ;
1442+ goto out_err ;
1443+ }
14291444
14301445 /* Read optional lowest and nominal frequencies if present */
1431- if (CPC_SUPPORTED (low_freq_reg ))
1432- cpc_read (cpunum , low_freq_reg , & low_f );
1446+ if (CPC_SUPPORTED (low_freq_reg )) {
1447+ ret = cpc_read (cpunum , low_freq_reg , & low_f );
1448+ if (ret )
1449+ goto out_err ;
1450+ }
14331451
1434- if (CPC_SUPPORTED (nom_freq_reg ))
1435- cpc_read (cpunum , nom_freq_reg , & nom_f );
1452+ if (CPC_SUPPORTED (nom_freq_reg )) {
1453+ ret = cpc_read (cpunum , nom_freq_reg , & nom_f );
1454+ if (ret )
1455+ goto out_err ;
1456+ }
14361457
14371458 perf_caps -> lowest_freq = low_f ;
14381459 perf_caps -> nominal_freq = nom_f ;
@@ -1526,16 +1547,25 @@ int cppc_get_perf_ctrs(int cpunum, struct cppc_perf_fb_ctrs *perf_fb_ctrs)
15261547 }
15271548 }
15281549
1529- cpc_read (cpunum , delivered_reg , & delivered );
1530- cpc_read (cpunum , reference_reg , & reference );
1550+ ret = cpc_read (cpunum , delivered_reg , & delivered );
1551+ if (ret )
1552+ goto out_err ;
1553+
1554+ ret = cpc_read (cpunum , reference_reg , & reference );
1555+ if (ret )
1556+ goto out_err ;
1557+
15311558 /*
15321559 * Per spec, if ctr_wrap_time optional register is unsupported, then the
15331560 * performance counters are assumed to never wrap during the lifetime of
15341561 * platform
15351562 */
15361563 ctr_wrap_time = (u64 )(~((u64 )0 ));
1537- if (CPC_SUPPORTED (ctr_wrap_reg ))
1538- cpc_read (cpunum , ctr_wrap_reg , & ctr_wrap_time );
1564+ if (CPC_SUPPORTED (ctr_wrap_reg )) {
1565+ ret = cpc_read (cpunum , ctr_wrap_reg , & ctr_wrap_time );
1566+ if (ret )
1567+ goto out_err ;
1568+ }
15391569
15401570 if (!delivered || !reference ) {
15411571 ret = - EFAULT ;
@@ -1811,24 +1841,39 @@ int cppc_get_perf(int cpu, struct cppc_perf_ctrls *perf_ctrls)
18111841 }
18121842
18131843 /* Read optional elements if present */
1814- if (CPC_SUPPORTED (max_perf_reg ))
1815- cpc_read (cpu , max_perf_reg , & max );
1844+ if (CPC_SUPPORTED (max_perf_reg )) {
1845+ ret = cpc_read (cpu , max_perf_reg , & max );
1846+ if (ret )
1847+ goto out_err ;
1848+ }
18161849 perf_ctrls -> max_perf = max ;
18171850
1818- if (CPC_SUPPORTED (min_perf_reg ))
1819- cpc_read (cpu , min_perf_reg , & min );
1851+ if (CPC_SUPPORTED (min_perf_reg )) {
1852+ ret = cpc_read (cpu , min_perf_reg , & min );
1853+ if (ret )
1854+ goto out_err ;
1855+ }
18201856 perf_ctrls -> min_perf = min ;
18211857
1822- if (CPC_SUPPORTED (desired_perf_reg ))
1823- cpc_read (cpu , desired_perf_reg , & desired_perf );
1858+ if (CPC_SUPPORTED (desired_perf_reg )) {
1859+ ret = cpc_read (cpu , desired_perf_reg , & desired_perf );
1860+ if (ret )
1861+ goto out_err ;
1862+ }
18241863 perf_ctrls -> desired_perf = desired_perf ;
18251864
1826- if (CPC_SUPPORTED (energy_perf_reg ))
1827- cpc_read (cpu , energy_perf_reg , & energy_perf );
1865+ if (CPC_SUPPORTED (energy_perf_reg )) {
1866+ ret = cpc_read (cpu , energy_perf_reg , & energy_perf );
1867+ if (ret )
1868+ goto out_err ;
1869+ }
18281870 perf_ctrls -> energy_perf = energy_perf ;
18291871
1830- if (CPC_SUPPORTED (auto_sel_reg ))
1831- cpc_read (cpu , auto_sel_reg , & auto_sel );
1872+ if (CPC_SUPPORTED (auto_sel_reg )) {
1873+ ret = cpc_read (cpu , auto_sel_reg , & auto_sel );
1874+ if (ret )
1875+ goto out_err ;
1876+ }
18321877 perf_ctrls -> auto_sel = (bool )auto_sel ;
18331878
18341879out_err :
0 commit comments