@@ -41,7 +41,7 @@ MODULE_PARM_DESC(tjmax, "TjMax value in degrees Celsius");
41
41
42
42
#define PKG_SYSFS_ATTR_NO 1 /* Sysfs attribute for package temp */
43
43
#define BASE_SYSFS_ATTR_NO 2 /* Sysfs Base attr no for coretemp */
44
- #define NUM_REAL_CORES 128 /* Number of Real cores per cpu */
44
+ #define NUM_REAL_CORES 512 /* Number of Real cores per cpu */
45
45
#define CORETEMP_NAME_LENGTH 28 /* String Length of attrs */
46
46
#define MAX_CORE_ATTRS 4 /* Maximum no of basic attrs */
47
47
#define TOTAL_ATTRS (MAX_CORE_ATTRS + 1)
@@ -419,7 +419,7 @@ static ssize_t show_temp(struct device *dev,
419
419
}
420
420
421
421
static int create_core_attrs (struct temp_data * tdata , struct device * dev ,
422
- int attr_no )
422
+ int index )
423
423
{
424
424
int i ;
425
425
static ssize_t (* const rd_ptr [TOTAL_ATTRS ]) (struct device * dev ,
@@ -431,13 +431,20 @@ static int create_core_attrs(struct temp_data *tdata, struct device *dev,
431
431
};
432
432
433
433
for (i = 0 ; i < tdata -> attr_size ; i ++ ) {
434
+ /*
435
+ * We map the attr number to core id of the CPU
436
+ * The attr number is always core id + 2
437
+ * The Pkgtemp will always show up as temp1_*, if available
438
+ */
439
+ int attr_no = tdata -> is_pkg_data ? 1 : tdata -> cpu_core_id + 2 ;
440
+
434
441
snprintf (tdata -> attr_name [i ], CORETEMP_NAME_LENGTH ,
435
442
"temp%d_%s" , attr_no , suffixes [i ]);
436
443
sysfs_attr_init (& tdata -> sd_attrs [i ].dev_attr .attr );
437
444
tdata -> sd_attrs [i ].dev_attr .attr .name = tdata -> attr_name [i ];
438
445
tdata -> sd_attrs [i ].dev_attr .attr .mode = 0444 ;
439
446
tdata -> sd_attrs [i ].dev_attr .show = rd_ptr [i ];
440
- tdata -> sd_attrs [i ].index = attr_no ;
447
+ tdata -> sd_attrs [i ].index = index ;
441
448
tdata -> attrs [i ] = & tdata -> sd_attrs [i ].dev_attr .attr ;
442
449
}
443
450
tdata -> attr_group .attrs = tdata -> attrs ;
@@ -495,30 +502,25 @@ static int create_core_data(struct platform_device *pdev, unsigned int cpu,
495
502
struct platform_data * pdata = platform_get_drvdata (pdev );
496
503
struct cpuinfo_x86 * c = & cpu_data (cpu );
497
504
u32 eax , edx ;
498
- int err , index , attr_no ;
505
+ int err , index ;
499
506
500
507
if (!housekeeping_cpu (cpu , HK_TYPE_MISC ))
501
508
return 0 ;
502
509
503
510
/*
504
- * Find attr number for sysfs:
505
- * We map the attr number to core id of the CPU
506
- * The attr number is always core id + 2
507
- * The Pkgtemp will always show up as temp1_*, if available
511
+ * Get the index of tdata in pdata->core_data[]
512
+ * tdata for package: pdata->core_data[1]
513
+ * tdata for core: pdata->core_data[2] .. pdata->core_data[NUM_REAL_CORES + 1]
508
514
*/
509
515
if (pkg_flag ) {
510
- attr_no = PKG_SYSFS_ATTR_NO ;
516
+ index = PKG_SYSFS_ATTR_NO ;
511
517
} else {
512
- index = ida_alloc (& pdata -> ida , GFP_KERNEL );
518
+ index = ida_alloc_max (& pdata -> ida , NUM_REAL_CORES - 1 , GFP_KERNEL );
513
519
if (index < 0 )
514
520
return index ;
515
- pdata -> cpu_map [index ] = topology_core_id (cpu );
516
- attr_no = index + BASE_SYSFS_ATTR_NO ;
517
- }
518
521
519
- if (attr_no > MAX_CORE_DATA - 1 ) {
520
- err = - ERANGE ;
521
- goto ida_free ;
522
+ pdata -> cpu_map [index ] = topology_core_id (cpu );
523
+ index += BASE_SYSFS_ATTR_NO ;
522
524
}
523
525
524
526
tdata = init_temp_data (cpu , pkg_flag );
@@ -544,20 +546,20 @@ static int create_core_data(struct platform_device *pdev, unsigned int cpu,
544
546
if (get_ttarget (tdata , & pdev -> dev ) >= 0 )
545
547
tdata -> attr_size ++ ;
546
548
547
- pdata -> core_data [attr_no ] = tdata ;
549
+ pdata -> core_data [index ] = tdata ;
548
550
549
551
/* Create sysfs interfaces */
550
- err = create_core_attrs (tdata , pdata -> hwmon_dev , attr_no );
552
+ err = create_core_attrs (tdata , pdata -> hwmon_dev , index );
551
553
if (err )
552
554
goto exit_free ;
553
555
554
556
return 0 ;
555
557
exit_free :
556
- pdata -> core_data [attr_no ] = NULL ;
558
+ pdata -> core_data [index ] = NULL ;
557
559
kfree (tdata );
558
560
ida_free :
559
561
if (!pkg_flag )
560
- ida_free (& pdata -> ida , index );
562
+ ida_free (& pdata -> ida , index - BASE_SYSFS_ATTR_NO );
561
563
return err ;
562
564
}
563
565
0 commit comments