diff options
-rw-r--r-- | arch/x86/kernel/cpu/intel_cacheinfo.c | 52 |
1 files changed, 25 insertions, 27 deletions
diff --git a/arch/x86/kernel/cpu/intel_cacheinfo.c b/arch/x86/kernel/cpu/intel_cacheinfo.c index 7c6f7d548c0f..8dc72dda66fe 100644 --- a/arch/x86/kernel/cpu/intel_cacheinfo.c +++ b/arch/x86/kernel/cpu/intel_cacheinfo.c | |||
@@ -618,36 +618,34 @@ unsigned int __cpuinit init_intel_cacheinfo(struct cpuinfo_x86 *c) | |||
618 | * parameters cpuid leaf to find the cache details | 618 | * parameters cpuid leaf to find the cache details |
619 | */ | 619 | */ |
620 | for (i = 0; i < num_cache_leaves; i++) { | 620 | for (i = 0; i < num_cache_leaves; i++) { |
621 | struct _cpuid4_info_regs this_leaf; | 621 | struct _cpuid4_info_regs this_leaf = {}; |
622 | int retval; | 622 | int retval; |
623 | 623 | ||
624 | retval = cpuid4_cache_lookup_regs(i, &this_leaf); | 624 | retval = cpuid4_cache_lookup_regs(i, &this_leaf); |
625 | if (retval >= 0) { | 625 | if (retval < 0) |
626 | switch (this_leaf.eax.split.level) { | 626 | continue; |
627 | case 1: | 627 | |
628 | if (this_leaf.eax.split.type == | 628 | switch (this_leaf.eax.split.level) { |
629 | CACHE_TYPE_DATA) | 629 | case 1: |
630 | new_l1d = this_leaf.size/1024; | 630 | if (this_leaf.eax.split.type == CACHE_TYPE_DATA) |
631 | else if (this_leaf.eax.split.type == | 631 | new_l1d = this_leaf.size/1024; |
632 | CACHE_TYPE_INST) | 632 | else if (this_leaf.eax.split.type == CACHE_TYPE_INST) |
633 | new_l1i = this_leaf.size/1024; | 633 | new_l1i = this_leaf.size/1024; |
634 | break; | 634 | break; |
635 | case 2: | 635 | case 2: |
636 | new_l2 = this_leaf.size/1024; | 636 | new_l2 = this_leaf.size/1024; |
637 | num_threads_sharing = 1 + this_leaf.eax.split.num_threads_sharing; | 637 | num_threads_sharing = 1 + this_leaf.eax.split.num_threads_sharing; |
638 | index_msb = get_count_order(num_threads_sharing); | 638 | index_msb = get_count_order(num_threads_sharing); |
639 | l2_id = c->apicid & ~((1 << index_msb) - 1); | 639 | l2_id = c->apicid & ~((1 << index_msb) - 1); |
640 | break; | 640 | break; |
641 | case 3: | 641 | case 3: |
642 | new_l3 = this_leaf.size/1024; | 642 | new_l3 = this_leaf.size/1024; |
643 | num_threads_sharing = 1 + this_leaf.eax.split.num_threads_sharing; | 643 | num_threads_sharing = 1 + this_leaf.eax.split.num_threads_sharing; |
644 | index_msb = get_count_order( | 644 | index_msb = get_count_order(num_threads_sharing); |
645 | num_threads_sharing); | 645 | l3_id = c->apicid & ~((1 << index_msb) - 1); |
646 | l3_id = c->apicid & ~((1 << index_msb) - 1); | 646 | break; |
647 | break; | 647 | default: |
648 | default: | 648 | break; |
649 | break; | ||
650 | } | ||
651 | } | 649 | } |
652 | } | 650 | } |
653 | } | 651 | } |