Re: [U-Boot] [PATCH v2 09/33] x86: Replace fill_processor_name() with cpu_get_name()

2014-11-11 Thread Bin Meng
On Tue, Nov 11, 2014 at 9:00 AM, Simon Glass s...@chromium.org wrote:
 This implementation has a 'cpu' prefix and returns a pointer to the string,
 avoiding the need for copying.

 Signed-off-by: Simon Glass s...@chromium.org

 ---

 Changes in v2:
 - Add new patch to replace fill_processor_name() with cpu_get_name()

  arch/x86/cpu/cpu.c | 22 ++
  arch/x86/include/asm/cpu.h | 11 ---
  2 files changed, 18 insertions(+), 15 deletions(-)

 diff --git a/arch/x86/cpu/cpu.c b/arch/x86/cpu/cpu.c
 index a4e639d..0d75941 100644
 --- a/arch/x86/cpu/cpu.c
 +++ b/arch/x86/cpu/cpu.c
 @@ -491,14 +491,14 @@ const char *cpu_vendor_name(int vendor)
 return name;
  }

 -void fill_processor_name(char *processor_name)
 +char *cpu_get_name(char *name)
  {
 +   unsigned int *name_as_ints = (unsigned int *)name;
 struct cpuid_result regs;
 -   char temp_processor_name[49];
 -   char *processor_name_start;
 -   unsigned int *name_as_ints = (unsigned int *)temp_processor_name;
 +   char *ptr;
 int i;

 +   /* This bit adds up to 48 bytes */
 for (i = 0; i  3; i++) {
 regs = cpuid(0x8002 + i);
 name_as_ints[i * 4 + 0] = regs.eax;
 @@ -506,19 +506,17 @@ void fill_processor_name(char *processor_name)
 name_as_ints[i * 4 + 2] = regs.ecx;
 name_as_ints[i * 4 + 3] = regs.edx;
 }
 -
 -   temp_processor_name[48] = 0;
 +   name[CPU_MAX_NAME_LEN - 1] = '\0';

 /* Skip leading spaces. */
 -   processor_name_start = temp_processor_name;
 -   while (*processor_name_start == ' ')
 -   processor_name_start++;
 +   ptr = name;
 +   while (*ptr == ' ')
 +   ptr++;

 -   memset(processor_name, 0, 49);
 -   strcpy(processor_name, processor_name_start);
 +   return ptr;
  }

 -int print_cpuinfo(void)
 +int default_print_cpuinfo(void)
  {
 printf(CPU: %s, vendor %s, device %xh\n,
cpu_has_64bit() ? x86_64 : x86,
 diff --git a/arch/x86/include/asm/cpu.h b/arch/x86/include/asm/cpu.h
 index 89b748b..c839291 100644
 --- a/arch/x86/include/asm/cpu.h
 +++ b/arch/x86/include/asm/cpu.h
 @@ -179,12 +179,17 @@ int cpu_has_64bit(void);
   */
  const char *cpu_vendor_name(int vendor);

 +#define CPU_MAX_NAME_LEN   49
 +
  /**
 - * fill_processor_name() - Get processor name
 + * cpu_get_name() - Get the name of the current cpu
   *
 - * @processor_name:Address to hold the processor name string
 + * @name: Place to put name, which must be CPU_MAX_NAME_LEN bytes including
 + * @return pointer to name, which will likely be a few bytes after the start
 + * of @name
 + * \0 terminator
   */
 -void fill_processor_name(char *processor_name);
 +char *cpu_get_name(char *name);

  /**
   * cpu_call64() - Jump to a 64-bit Linux kernel (internal function)
 --

Reviewed-by: Bin Meng bmeng...@gmail.com
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


[U-Boot] [PATCH v2 09/33] x86: Replace fill_processor_name() with cpu_get_name()

2014-11-10 Thread Simon Glass
This implementation has a 'cpu' prefix and returns a pointer to the string,
avoiding the need for copying.

Signed-off-by: Simon Glass s...@chromium.org

---

Changes in v2:
- Add new patch to replace fill_processor_name() with cpu_get_name()

 arch/x86/cpu/cpu.c | 22 ++
 arch/x86/include/asm/cpu.h | 11 ---
 2 files changed, 18 insertions(+), 15 deletions(-)

diff --git a/arch/x86/cpu/cpu.c b/arch/x86/cpu/cpu.c
index a4e639d..0d75941 100644
--- a/arch/x86/cpu/cpu.c
+++ b/arch/x86/cpu/cpu.c
@@ -491,14 +491,14 @@ const char *cpu_vendor_name(int vendor)
return name;
 }
 
-void fill_processor_name(char *processor_name)
+char *cpu_get_name(char *name)
 {
+   unsigned int *name_as_ints = (unsigned int *)name;
struct cpuid_result regs;
-   char temp_processor_name[49];
-   char *processor_name_start;
-   unsigned int *name_as_ints = (unsigned int *)temp_processor_name;
+   char *ptr;
int i;
 
+   /* This bit adds up to 48 bytes */
for (i = 0; i  3; i++) {
regs = cpuid(0x8002 + i);
name_as_ints[i * 4 + 0] = regs.eax;
@@ -506,19 +506,17 @@ void fill_processor_name(char *processor_name)
name_as_ints[i * 4 + 2] = regs.ecx;
name_as_ints[i * 4 + 3] = regs.edx;
}
-
-   temp_processor_name[48] = 0;
+   name[CPU_MAX_NAME_LEN - 1] = '\0';
 
/* Skip leading spaces. */
-   processor_name_start = temp_processor_name;
-   while (*processor_name_start == ' ')
-   processor_name_start++;
+   ptr = name;
+   while (*ptr == ' ')
+   ptr++;
 
-   memset(processor_name, 0, 49);
-   strcpy(processor_name, processor_name_start);
+   return ptr;
 }
 
-int print_cpuinfo(void)
+int default_print_cpuinfo(void)
 {
printf(CPU: %s, vendor %s, device %xh\n,
   cpu_has_64bit() ? x86_64 : x86,
diff --git a/arch/x86/include/asm/cpu.h b/arch/x86/include/asm/cpu.h
index 89b748b..c839291 100644
--- a/arch/x86/include/asm/cpu.h
+++ b/arch/x86/include/asm/cpu.h
@@ -179,12 +179,17 @@ int cpu_has_64bit(void);
  */
 const char *cpu_vendor_name(int vendor);
 
+#define CPU_MAX_NAME_LEN   49
+
 /**
- * fill_processor_name() - Get processor name
+ * cpu_get_name() - Get the name of the current cpu
  *
- * @processor_name:Address to hold the processor name string
+ * @name: Place to put name, which must be CPU_MAX_NAME_LEN bytes including
+ * @return pointer to name, which will likely be a few bytes after the start
+ * of @name
+ * \0 terminator
  */
-void fill_processor_name(char *processor_name);
+char *cpu_get_name(char *name);
 
 /**
  * cpu_call64() - Jump to a 64-bit Linux kernel (internal function)
-- 
2.1.0.rc2.206.gedb03e5

___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot