[ofa-general] Re: [Bug 408] dapltest compilation fails on x86 [PATCH]

Michael S. Tsirkin mst at dev.mellanox.co.il
Fri Mar 16 08:13:36 PDT 2007


> Quoting James Lentini <jlentini at netapp.com>:
> Subject: RE: [Bug 408] dapltest compilation fails on x86 [PATCH]
> 
> 
> 
> On Wed, 7 Mar 2007, Arlin Davis wrote:
> 
> > 
> > James, please review this fix for dapltest build issue.
> 
> Hi Arlin,
> 
> Just returning from vacation and catching up on email.
> 
> > Signed-off by: Arlin Davis ardavis at ichips.intel.com
> > 
> > diff --git a/test/dapltest/mdep/linux/dapl_mdep_user.h b/test/dapltest/mdep/linux/dapl_mdep_user.h
> > index c05dd30..2903e78 100644
> > --- a/test/dapltest/mdep/linux/dapl_mdep_user.h
> > +++ b/test/dapltest/mdep/linux/dapl_mdep_user.h
> > @@ -117,7 +117,7 @@ typedef unsigned long long int 		DT_Mdep_TimeStamp;
> >  static _INLINE_ DT_Mdep_TimeStamp
> >  DT_Mdep_GetTimeStamp ( void )
> >  {
> > -#if defined(__GNUC__) && defined(__PENTIUM__)
> > +#if defined(__GNUC__) && defined(__i386__)
> >      DT_Mdep_TimeStamp x;
> >      __asm__ volatile (".byte 0x0f, 0x31" : "=A" (x));
> 
> This is the opcode for a RDTSC instruction. My copy of the "Intel 64 
> and IA-32 Architectures Software Developer's Manual" says that the 
> RDTSC instruction was introduced by the Pentium. Although I don't 
> think anyone is going to use RDMA on a 486, making the change 
> above would create code that attempted to use an RDTSC instruction on 
> pre-Pentium processors. 
> 
> What is the processor that is being excluded by the Pentium test? 
> Would it be possible to recode the compile guard to check for either 
> Pentium or X?
> 
> As a side note, the code could use the rdtsc mnemonic, as we do below, 
> instead of the raw opcode.
> 
> >      return x;
> > @@ -143,7 +143,7 @@ DT_Mdep_GetTimeStamp ( void )
> >        asm volatile("rdtsc" : "=a" (__a), "=d" (__d)); 
> >        return ((unsigned long)__a) | (((unsigned long)__d)<<32);
> >  #else
> > -#error "Non-Pentium and Non-PPC Linux - unimplemented"
> > +#error "Linux CPU architecture - unimplemented"
> >  #endif
> >  #endif
> >  #endif

You can't detect a pentium processor at compile-time, and testing
for __PENTIUM__ is the wrong thing to do - you are actually testing
for pentium-only optimizations being enabled in compiler.

You really must test for processor type at run time.

-- 
MST



More information about the general mailing list