@@ -41,7 +41,7 @@ MODULE_PARM_DESC(tjmax, "TjMax value in degrees Celsius");
4141
4242#define PKG_SYSFS_ATTR_NO 1 /* Sysfs attribute for package temp */
4343#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 */
4545#define CORETEMP_NAME_LENGTH 28 /* String Length of attrs */
4646#define MAX_CORE_ATTRS 4 /* Maximum no of basic attrs */
4747#define TOTAL_ATTRS (MAX_CORE_ATTRS + 1)
@@ -419,7 +419,7 @@ static ssize_t show_temp(struct device *dev,
419419}
420420
421421static int create_core_attrs (struct temp_data * tdata , struct device * dev ,
422- int attr_no )
422+ int index )
423423{
424424 int i ;
425425 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,
431431 };
432432
433433 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+
434441 snprintf (tdata -> attr_name [i ], CORETEMP_NAME_LENGTH ,
435442 "temp%d_%s" , attr_no , suffixes [i ]);
436443 sysfs_attr_init (& tdata -> sd_attrs [i ].dev_attr .attr );
437444 tdata -> sd_attrs [i ].dev_attr .attr .name = tdata -> attr_name [i ];
438445 tdata -> sd_attrs [i ].dev_attr .attr .mode = 0444 ;
439446 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 ;
441448 tdata -> attrs [i ] = & tdata -> sd_attrs [i ].dev_attr .attr ;
442449 }
443450 tdata -> attr_group .attrs = tdata -> attrs ;
@@ -495,30 +502,25 @@ static int create_core_data(struct platform_device *pdev, unsigned int cpu,
495502 struct platform_data * pdata = platform_get_drvdata (pdev );
496503 struct cpuinfo_x86 * c = & cpu_data (cpu );
497504 u32 eax , edx ;
498- int err , index , attr_no ;
505+ int err , index ;
499506
500507 if (!housekeeping_cpu (cpu , HK_TYPE_MISC ))
501508 return 0 ;
502509
503510 /*
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]
508514 */
509515 if (pkg_flag ) {
510- attr_no = PKG_SYSFS_ATTR_NO ;
516+ index = PKG_SYSFS_ATTR_NO ;
511517 } else {
512- index = ida_alloc (& pdata -> ida , GFP_KERNEL );
518+ index = ida_alloc_max (& pdata -> ida , NUM_REAL_CORES - 1 , GFP_KERNEL );
513519 if (index < 0 )
514520 return index ;
515- pdata -> cpu_map [index ] = topology_core_id (cpu );
516- attr_no = index + BASE_SYSFS_ATTR_NO ;
517- }
518521
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 ;
522524 }
523525
524526 tdata = init_temp_data (cpu , pkg_flag );
@@ -544,20 +546,20 @@ static int create_core_data(struct platform_device *pdev, unsigned int cpu,
544546 if (get_ttarget (tdata , & pdev -> dev ) >= 0 )
545547 tdata -> attr_size ++ ;
546548
547- pdata -> core_data [attr_no ] = tdata ;
549+ pdata -> core_data [index ] = tdata ;
548550
549551 /* Create sysfs interfaces */
550- err = create_core_attrs (tdata , pdata -> hwmon_dev , attr_no );
552+ err = create_core_attrs (tdata , pdata -> hwmon_dev , index );
551553 if (err )
552554 goto exit_free ;
553555
554556 return 0 ;
555557exit_free :
556- pdata -> core_data [attr_no ] = NULL ;
558+ pdata -> core_data [index ] = NULL ;
557559 kfree (tdata );
558560ida_free :
559561 if (!pkg_flag )
560- ida_free (& pdata -> ida , index );
562+ ida_free (& pdata -> ida , index - BASE_SYSFS_ATTR_NO );
561563 return err ;
562564}
563565
0 commit comments