Re: [GIT PULL, v2] x86/cpu changes for v2.6.35

From: Jaswinder Singh Rajput
Date: Tue May 18 2010 - 04:33:13 EST


Hello,


On Tue, May 18, 2010 at 1:51 PM, Jaswinder Singh Rajput
<jaswinderlinux@xxxxxxxxx> wrote:
> Hello,
>
> On Tue, May 18, 2010 at 4:24 AM, Ingo Molnar <mingo@xxxxxxx> wrote:
>>
>> * Ingo Molnar <mingo@xxxxxxx> wrote:
>>
>>> Linus,
>>>
>>> Please pull the latest x86-cleanups-for-linus git tree from:
>>
>> Correction, the above URI is still the previous pull
>> request - the one for x86-cleanups-for-linus is:
>>
>> Please pull the latest x86-cpu-for-linus git tree from:
>>
>>   git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip.git x86-cpu-for-linus
>>
>>
>> diff --git a/arch/x86/kernel/cpu/intel_cacheinfo.c b/arch/x86/kernel/cpu/intel_cacheinfo.c
>> index b3eeb66..33eae20 100644
>> --- a/arch/x86/kernel/cpu/intel_cacheinfo.c
>> +++ b/arch/x86/kernel/cpu/intel_cacheinfo.c
>> @@ -148,13 +148,19 @@ union _cpuid4_leaf_ecx {
>>        u32 full;
>>  };
>>
>> +struct amd_l3_cache {
>> +       struct   pci_dev *dev;
>> +       bool     can_disable;
>> +       unsigned indices;
>> +       u8       subcaches[4];
>> +};
>> +
>>  struct _cpuid4_info {
>>        union _cpuid4_leaf_eax eax;
>>        union _cpuid4_leaf_ebx ebx;
>>        union _cpuid4_leaf_ecx ecx;
>>        unsigned long size;
>> -       bool can_disable;
>> -       unsigned int l3_indices;
>> +       struct amd_l3_cache *l3;
>>        DECLARE_BITMAP(shared_cpu_map, NR_CPUS);
>>  };
>>
>> @@ -164,8 +170,7 @@ struct _cpuid4_info_regs {
>>        union _cpuid4_leaf_ebx ebx;
>>        union _cpuid4_leaf_ecx ecx;
>>        unsigned long size;
>> -       bool can_disable;
>> -       unsigned int l3_indices;
>> +       struct amd_l3_cache *l3;
>>  };
>>
>>  unsigned short                 num_cache_leaves;
>> @@ -302,87 +307,163 @@ struct _cache_attr {
>>  };
>>
>>  #ifdef CONFIG_CPU_SUP_AMD
>> -static unsigned int __cpuinit amd_calc_l3_indices(void)
>> +
>> +/*
>> + * L3 cache descriptors
>> + */
>> +static struct amd_l3_cache **__cpuinitdata l3_caches;
>> +
>> +static void __cpuinit amd_calc_l3_indices(struct amd_l3_cache *l3)
>>  {
>> -       /*
>> -        * We're called over smp_call_function_single() and therefore
>> -        * are on the correct cpu.
>> -        */
>> -       int cpu = smp_processor_id();
>> -       int node = cpu_to_node(cpu);
>> -       struct pci_dev *dev = node_to_k8_nb_misc(node);
>>        unsigned int sc0, sc1, sc2, sc3;
>>        u32 val = 0;
>>
>> -       pci_read_config_dword(dev, 0x1C4, &val);
>> +       pci_read_config_dword(l3->dev, 0x1C4, &val);
>>
>>        /* calculate subcache sizes */
>> -       sc0 = !(val & BIT(0));
>> -       sc1 = !(val & BIT(4));
>> -       sc2 = !(val & BIT(8))  + !(val & BIT(9));
>> -       sc3 = !(val & BIT(12)) + !(val & BIT(13));
>> +       l3->subcaches[0] = sc0 = !(val & BIT(0));
>> +       l3->subcaches[1] = sc1 = !(val & BIT(4));
>> +       l3->subcaches[2] = sc2 = !(val & BIT(8))  + !(val & BIT(9));
>> +       l3->subcaches[3] = sc3 = !(val & BIT(12)) + !(val & BIT(13));
>>
>> -       return (max(max(max(sc0, sc1), sc2), sc3) << 10) - 1;
>> +       l3->indices = (max(max(max(sc0, sc1), sc2), sc3) << 10) - 1;
>> +}
>> +
>> +static struct amd_l3_cache * __cpuinit amd_init_l3_cache(int node)
>> +{
>> +       struct amd_l3_cache *l3;
>> +       struct pci_dev *dev = node_to_k8_nb_misc(node);
>> +
>> +       l3 = kzalloc(sizeof(struct amd_l3_cache), GFP_ATOMIC);
>> +       if (!l3) {
>> +               printk(KERN_WARNING "Error allocating L3 struct\n");
>> +               return NULL;

'return NULL' is also wrong. It should be only return.

I have already send some test patch to fix these issues, it seems no
one has time to review it.

Thanks,
--
Jaswinder Singh.

>> +       }
>> +
>> +       l3->dev = dev;
>
> This is still Buggy. You are not checking whether dev is NULL or not.
> If dev is NULL you should return.
>
> Thanks,
> --
> Jaswinder Singh.
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/