diff options
Diffstat (limited to 'arch/x86/kernel/cpu/intel_cacheinfo.c')
-rw-r--r-- | arch/x86/kernel/cpu/intel_cacheinfo.c | 30 |
1 files changed, 14 insertions, 16 deletions
diff --git a/arch/x86/kernel/cpu/intel_cacheinfo.c b/arch/x86/kernel/cpu/intel_cacheinfo.c index 9f530ff43c2..1b889860eb7 100644 --- a/arch/x86/kernel/cpu/intel_cacheinfo.c +++ b/arch/x86/kernel/cpu/intel_cacheinfo.c | |||
@@ -352,8 +352,8 @@ unsigned int __cpuinit init_intel_cacheinfo(struct cpuinfo_x86 *c) | |||
352 | */ | 352 | */ |
353 | if ((num_cache_leaves == 0 || c->x86 == 15) && c->cpuid_level > 1) { | 353 | if ((num_cache_leaves == 0 || c->x86 == 15) && c->cpuid_level > 1) { |
354 | /* supports eax=2 call */ | 354 | /* supports eax=2 call */ |
355 | int i, j, n; | 355 | int j, n; |
356 | int regs[4]; | 356 | unsigned int regs[4]; |
357 | unsigned char *dp = (unsigned char *)regs; | 357 | unsigned char *dp = (unsigned char *)regs; |
358 | int only_trace = 0; | 358 | int only_trace = 0; |
359 | 359 | ||
@@ -368,7 +368,7 @@ unsigned int __cpuinit init_intel_cacheinfo(struct cpuinfo_x86 *c) | |||
368 | 368 | ||
369 | /* If bit 31 is set, this is an unknown format */ | 369 | /* If bit 31 is set, this is an unknown format */ |
370 | for ( j = 0 ; j < 3 ; j++ ) { | 370 | for ( j = 0 ; j < 3 ; j++ ) { |
371 | if ( regs[j] < 0 ) regs[j] = 0; | 371 | if (regs[j] & (1 << 31)) regs[j] = 0; |
372 | } | 372 | } |
373 | 373 | ||
374 | /* Byte 0 is level count, not a descriptor */ | 374 | /* Byte 0 is level count, not a descriptor */ |
@@ -733,10 +733,8 @@ static int __cpuinit cache_add_dev(struct sys_device * sys_dev) | |||
733 | if (unlikely(retval < 0)) | 733 | if (unlikely(retval < 0)) |
734 | return retval; | 734 | return retval; |
735 | 735 | ||
736 | cache_kobject[cpu]->parent = &sys_dev->kobj; | 736 | retval = kobject_init_and_add(cache_kobject[cpu], &ktype_percpu_entry, |
737 | kobject_set_name(cache_kobject[cpu], "%s", "cache"); | 737 | &sys_dev->kobj, "%s", "cache"); |
738 | cache_kobject[cpu]->ktype = &ktype_percpu_entry; | ||
739 | retval = kobject_register(cache_kobject[cpu]); | ||
740 | if (retval < 0) { | 738 | if (retval < 0) { |
741 | cpuid4_cache_sysfs_exit(cpu); | 739 | cpuid4_cache_sysfs_exit(cpu); |
742 | return retval; | 740 | return retval; |
@@ -746,23 +744,23 @@ static int __cpuinit cache_add_dev(struct sys_device * sys_dev) | |||
746 | this_object = INDEX_KOBJECT_PTR(cpu,i); | 744 | this_object = INDEX_KOBJECT_PTR(cpu,i); |
747 | this_object->cpu = cpu; | 745 | this_object->cpu = cpu; |
748 | this_object->index = i; | 746 | this_object->index = i; |
749 | this_object->kobj.parent = cache_kobject[cpu]; | 747 | retval = kobject_init_and_add(&(this_object->kobj), |
750 | kobject_set_name(&(this_object->kobj), "index%1lu", i); | 748 | &ktype_cache, cache_kobject[cpu], |
751 | this_object->kobj.ktype = &ktype_cache; | 749 | "index%1lu", i); |
752 | retval = kobject_register(&(this_object->kobj)); | ||
753 | if (unlikely(retval)) { | 750 | if (unlikely(retval)) { |
754 | for (j = 0; j < i; j++) { | 751 | for (j = 0; j < i; j++) { |
755 | kobject_unregister( | 752 | kobject_put(&(INDEX_KOBJECT_PTR(cpu,j)->kobj)); |
756 | &(INDEX_KOBJECT_PTR(cpu,j)->kobj)); | ||
757 | } | 753 | } |
758 | kobject_unregister(cache_kobject[cpu]); | 754 | kobject_put(cache_kobject[cpu]); |
759 | cpuid4_cache_sysfs_exit(cpu); | 755 | cpuid4_cache_sysfs_exit(cpu); |
760 | break; | 756 | break; |
761 | } | 757 | } |
758 | kobject_uevent(&(this_object->kobj), KOBJ_ADD); | ||
762 | } | 759 | } |
763 | if (!retval) | 760 | if (!retval) |
764 | cpu_set(cpu, cache_dev_map); | 761 | cpu_set(cpu, cache_dev_map); |
765 | 762 | ||
763 | kobject_uevent(cache_kobject[cpu], KOBJ_ADD); | ||
766 | return retval; | 764 | return retval; |
767 | } | 765 | } |
768 | 766 | ||
@@ -778,8 +776,8 @@ static void __cpuinit cache_remove_dev(struct sys_device * sys_dev) | |||
778 | cpu_clear(cpu, cache_dev_map); | 776 | cpu_clear(cpu, cache_dev_map); |
779 | 777 | ||
780 | for (i = 0; i < num_cache_leaves; i++) | 778 | for (i = 0; i < num_cache_leaves; i++) |
781 | kobject_unregister(&(INDEX_KOBJECT_PTR(cpu,i)->kobj)); | 779 | kobject_put(&(INDEX_KOBJECT_PTR(cpu,i)->kobj)); |
782 | kobject_unregister(cache_kobject[cpu]); | 780 | kobject_put(cache_kobject[cpu]); |
783 | cpuid4_cache_sysfs_exit(cpu); | 781 | cpuid4_cache_sysfs_exit(cpu); |
784 | } | 782 | } |
785 | 783 | ||