extern u16 amd_get_nb_id(int cpu);
  
 -struct aperfmperf {
 -      u64 aperf, mperf;
 -};
 -
 -static inline void get_aperfmperf(struct aperfmperf *am)
 -{
 -      WARN_ON_ONCE(!boot_cpu_has(X86_FEATURE_APERFMPERF));
 -
 -      rdmsrl(MSR_IA32_APERF, am->aperf);
 -      rdmsrl(MSR_IA32_MPERF, am->mperf);
 -}
 -
 -#define APERFMPERF_SHIFT 10
 -
 -static inline
 -unsigned long calc_aperfmperf_ratio(struct aperfmperf *old,
 -                                  struct aperfmperf *new)
 -{
 -      u64 aperf = new->aperf - old->aperf;
 -      u64 mperf = new->mperf - old->mperf;
 -      unsigned long ratio = aperf;
 -
 -      mperf >>= APERFMPERF_SHIFT;
 -      if (mperf)
 -              ratio = div64_u64(aperf, mperf);
 -
 -      return ratio;
 -}
 -
+ static inline uint32_t hypervisor_cpuid_base(const char *sig, uint32_t leaves)
+ {
+       uint32_t base, eax, signature[3];
+ 
+       for (base = 0x40000000; base < 0x40010000; base += 0x100) {
+               cpuid(base, &eax, &signature[0], &signature[1], &signature[2]);
+ 
+               if (!memcmp(sig, signature, 12) &&
+                   (leaves == 0 || ((eax - base) >= leaves)))
+                       return base;
+       }
+ 
+       return 0;
+ }
+ 
  extern unsigned long arch_align_stack(unsigned long sp);
  extern void free_init_pages(char *what, unsigned long begin, unsigned long end);