| From 897de50e08937663912c86fb12ad7f708af2386c Mon Sep 17 00:00:00 2001 |
| From: Borislav Petkov <borislav.petkov@amd.com> |
| Date: Fri, 22 Jan 2010 16:01:06 +0100 |
| Subject: x86, cacheinfo: Add cache index disable sysfs attrs only to L3 caches |
| |
| From: Borislav Petkov <borislav.petkov@amd.com> |
| |
| commit 897de50e08937663912c86fb12ad7f708af2386c upstream. |
| |
| The cache_disable_[01] attribute in |
| |
| /sys/devices/system/cpu/cpu?/cache/index[0-3]/ |
| |
| is enabled on all cache levels although only L3 supports it. Add it only |
| to the cache level that actually supports it. |
| |
| Signed-off-by: Borislav Petkov <borislav.petkov@amd.com> |
| LKML-Reference: <1264172467-25155-5-git-send-email-bp@amd64.org> |
| Signed-off-by: H. Peter Anvin <hpa@zytor.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| arch/x86/kernel/cpu/intel_cacheinfo.c | 35 +++++++++++++++++++++++++--------- |
| 1 file changed, 26 insertions(+), 9 deletions(-) |
| |
| --- a/arch/x86/kernel/cpu/intel_cacheinfo.c |
| +++ b/arch/x86/kernel/cpu/intel_cacheinfo.c |
| @@ -829,16 +829,24 @@ static struct _cache_attr cache_disable_ |
| static struct _cache_attr cache_disable_1 = __ATTR(cache_disable_1, 0644, |
| show_cache_disable_1, store_cache_disable_1); |
| |
| +#define DEFAULT_SYSFS_CACHE_ATTRS \ |
| + &type.attr, \ |
| + &level.attr, \ |
| + &coherency_line_size.attr, \ |
| + &physical_line_partition.attr, \ |
| + &ways_of_associativity.attr, \ |
| + &number_of_sets.attr, \ |
| + &size.attr, \ |
| + &shared_cpu_map.attr, \ |
| + &shared_cpu_list.attr |
| + |
| static struct attribute *default_attrs[] = { |
| - &type.attr, |
| - &level.attr, |
| - &coherency_line_size.attr, |
| - &physical_line_partition.attr, |
| - &ways_of_associativity.attr, |
| - &number_of_sets.attr, |
| - &size.attr, |
| - &shared_cpu_map.attr, |
| - &shared_cpu_list.attr, |
| + DEFAULT_SYSFS_CACHE_ATTRS, |
| + NULL |
| +}; |
| + |
| +static struct attribute *default_l3_attrs[] = { |
| + DEFAULT_SYSFS_CACHE_ATTRS, |
| &cache_disable_0.attr, |
| &cache_disable_1.attr, |
| NULL |
| @@ -931,6 +939,7 @@ static int __cpuinit cache_add_dev(struc |
| unsigned int cpu = sys_dev->id; |
| unsigned long i, j; |
| struct _index_kobject *this_object; |
| + struct _cpuid4_info *this_leaf; |
| int retval; |
| |
| retval = cpuid4_cache_sysfs_init(cpu); |
| @@ -949,6 +958,14 @@ static int __cpuinit cache_add_dev(struc |
| this_object = INDEX_KOBJECT_PTR(cpu, i); |
| this_object->cpu = cpu; |
| this_object->index = i; |
| + |
| + this_leaf = CPUID4_INFO_IDX(cpu, i); |
| + |
| + if (this_leaf->can_disable) |
| + ktype_cache.default_attrs = default_l3_attrs; |
| + else |
| + ktype_cache.default_attrs = default_attrs; |
| + |
| retval = kobject_init_and_add(&(this_object->kobj), |
| &ktype_cache, |
| per_cpu(cache_kobject, cpu), |