> In order to know what is correct, what is not, you should do what I wrote 
> in my previous email.
> 
> --
> Nilay

I found that the kernel gets these values in this function (exists in 
linux-2.6.28.4/arch/x86/kernel/cpu/common.c):

void __cpuinit display_cacheinfo(struct cpuinfo_x86 *c)
{
    unsigned int n, dummy, ebx, ecx, edx, l2size;

    n = c->extended_cpuid_level;

    if (n >= 0x80000005) {                                  
        cpuid(0x80000005, &dummy, &ebx, &ecx, &edx);        
        printk(KERN_INFO "CPU: L1 I Cache: %dK (%d bytes/line), D cache %dK (%d 
bytes/line)\n",
                edx>>24, edx&0xFF, ecx>>24, ecx&0xFF);
        c->x86_cache_size = (ecx>>24) + (edx>>24);

the call to cpuid is responsible for getting edx and ecx , this call ultimatley 
executes asm code exists in native_cpuid function in 
"linux-2.6.28.4/arch/x86/include/asm/processor.h"

static inline void native_cpuid(unsigned int *eax, unsigned int *ebx,
                unsigned int *ecx, unsigned int *edx)
{
    /* ecx is often an input as well as an output. */
    asm("cpuid"
        : "=a" (*eax),
          "=b" (*ebx),
          "=c" (*ecx),
          "=d" (*edx)
        : "0" (*eax), "2" (*ecx));
}

but it seems that the asm code is calling cpuid again !


Regards
                                          
_______________________________________________
gem5-users mailing list
[email protected]
http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users

Reply via email to