kern/65627: [i386] [patch] store P3 serial number in sysctl

Internet Partners, Inc. Tech Support support at ipinc.net
Sat Jan 27 10:40:22 UTC 2007


The following reply was made to PR kern/65627; it has been noted by GNATS.

From: "Internet Partners, Inc. Tech Support" <support at ipinc.net>
To: <bug-followup at FreeBSD.org>, <gavin at ury.york.ac.uk>
Cc:  
Subject: Re: kern/65627: [i386] [patch] store P3 serial number in sysctl
Date: Sat, 27 Jan 2007 02:32:15 -0800

 Here is this patch updated for the FreeBSD 6.2-RELEASE kernel:
 
 
 diff -u sys/i386/i386/identcpu.c.orig sys/i386/i386/identcpu.c
 
 --- sys/i386/i386/identcpu.c.orig       Tue Aug  8 01:41:34 2006
 +++ sys/i386/i386/identcpu.c    Sat Jan 27 01:33:18 2007
 @@ -89,6 +89,13 @@
  SYSCTL_STRING(_hw, HW_MODEL, model, CTLFLAG_RD,
      cpu_model, 0, "Machine model");
 
 +SYSCTL_NODE(_hw, OID_AUTO, cpu0, CTLFLAG_RD,
 +    0, "CPU 0 Information");
 +
 +static char cpu_serial[32];
 +SYSCTL_STRING(_hw_cpu0, OID_AUTO, serial, CTLFLAG_RD,
 +    cpu_serial, 0, "CPU serial number");
 +
  static int hw_clockrate;
  SYSCTL_INT(_hw, OID_AUTO, clockrate, CTLFLAG_RD,
      &hw_clockrate, 0, "CPU instruction clock rate");
 @@ -856,6 +863,21 @@
                          */
                         if (cpu_feature & CPUID_HTT)
                                 htt = (cpu_procinfo & CPUID_HTT_CORES) >>
 16;
 +                       /*
 +                        * Obtain the serial number if the CPU supports it
 +                        */
 +                       if (cpu_feature & CPUID_PSN) {
 +                               do_cpuid(3, regs);
 +                               snprintf(cpu_serial,
 +                                   sizeof(cpu_serial),
 +                                   "%04x-%04x-%04x-%04x-%04x-%04x",
 +                                   (cpu_id >> 16), (cpu_id & 0xffff),
 +                                   (regs[3] >> 16), (regs[3] & 0xffff),
 +                                   (regs[2] >> 16), (regs[2] & 0xffff));
 +                               if (bootverbose)
 +                                       printf("\n  Processor Serial Number:
 %s",
 +                                           cpu_serial);
 +                       }
                         if (strcmp(cpu_vendor, "AuthenticAMD") == 0 &&
                             (amd_feature2 & AMDID2_CMP))
                                 cmp = (cpu_procinfo2 & AMDID_CMP_CORES) + 1;
 
 
 To apply, place patch in /usr/src and run patch < psn.diff
 
 sysctl is hw.cpu0.serial
 
 here is a snippet from booting verbosely with this patch:
 
 CPU: Intel Pentium III (927.11-MHz 686-class CPU)
   Origin = "GenuineIntel"  Id = 0x683  Stepping = 3
 
 Features=0x387fbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,
 CMOV,PAT,PSE36,PN,MMX,FXSR,SSE>
   Processor Serial Number: 0000-0623-0001-de43-1r2c-6123
 real memory  = 268435456 (256 MB)
 Physical memory chunk(s):
 
 so you can see what it looks like.
 
 Ted
 
 


More information about the freebsd-bugs mailing list