powerpc: print cores passed to firmware in decimal
PATCH 1/1 powerpc: print cores passed to firmware in decimal
Currently we look pretty stupid when printing out the number of cores passed to FW
Max number of cores passed to firmware: 0x0000000000000080
So I've change this to print in decimal:
Max number of cores passed to firmware: 128 (NR_CPUS = 256)
This required adding a prom_print_dec() function.
--
Anton suggested printing it in EBCDIC, but I nixed that.
arch/powerpc/kernel/prom_init.c | 32 +++++++++++++++++++++++++++++--- 1 files changed, 29 insertions(+), 3 deletions(-)
arch/powerpc/kernel/prom_init.c +29 -3
@@ -311,6 +311,27 @@ static void __init prom_print_hex(unsigned long val)call_prom ("write" ,3 ,1 , _prom->stdout, buf, nibbles); } +/* max number of decimal digits in an unsigned long */ +#define UL_DIGITS 21 +static void __init prom_print_dec (unsigned long val) +{ +int i, size; +char buf[UL_DIGITS +1 ]; +struct prom_t *_prom = &RELOC (prom); + +for (i =UL_DIGITS -1 ; i >=0 ; i--) { + buf[i] = (val %10 ) +'0' ; + val = val/10 ; +if (val ==0 ) +break ; + } +/* shift stuff down */ + size =UL_DIGITS - i; +for (i =0 ; i < size ; i++) + buf[i] = buf[i +UL_DIGITS - size]; + buf[size+1 ] ='\0' ; +call_prom ("write" ,3 ,1 , _prom->stdout, buf, size); +}static void __init prom_printf (const char *format, ...) {
@@ -350,6 +371,11 @@ static void __init prom_printf(const char *format, ...) v = va_arg(args, unsigned long);prom_print_hex (v);break ; +case 'i' : + ++q; + v = va_arg(args, unsigned long); +prom_print_dec (v); +break ; } } }
@@ -869,12 +895,12 @@ static void __init prom_send_capabilities(void) cores = (u32 *)PTRRELOC (&ibm_architecture_vec[IBM_ARCH_VEC_NRCORES_OFFSET ]);if (*cores !=NR_CPUS ) {prom_printf ("WARNING ! " -"ibm_architecture_vec structure inconsistent: 0x%x !\n" , +"ibm_architecture_vec structure inconsistent: 0x%i !\n" , *cores); }else { *cores =DIV_ROUND_UP (NR_CPUS ,prom_count_smt_threads ()); -prom_printf ("Max number of cores passed to firmware: 0x%x\n" , - (unsigned long )*cores); +prom_printf ("Max number of cores passed to firmware: %i (NR_CPUS = %i)\n" , + *cores,NR_CPUS ); }/* try calling the ibm,client-architecture-support method */
arch/powerpc/kernel/prom_init.c static void __init prom_printf(const char *format, ...) · line 378
Quoted 5 lines
arch/powerpc/kernel/prom_init.c +5
-0+case 'i' : + ++q; + v = va_arg(args, unsigned long); +prom_print_dec (v); +break ;
Unsigned long should be "%lu".
Segher
Currently we look pretty stupid when printing out the number of cores passed to FW
Max number of cores passed to firmware: 0x0000000000000080
So I've change this to print in decimal:
Max number of cores passed to firmware: 128 (NR_CPUS = 256)
This required adding a prom_print_dec() function.
--
Quoted 1 line
Unsigned long should be "%lu".
Changed %i to %lu as per Segher request
arch/powerpc/kernel/prom_init.c | 35 ++++++++++++++++++++++++++++++++--- 1 files changed, 32 insertions(+), 3 deletions(-)
arch/powerpc/kernel/prom_init.c +32 -3
@@ -311,6 +311,27 @@ static void __init prom_print_hex(unsigned long val)call_prom ("write" ,3 ,1 , _prom->stdout, buf, nibbles); } +/* max number of decimal digits in an unsigned long */ +#define UL_DIGITS 21 +static void __init prom_print_dec (unsigned long val) +{ +int i, size; +char buf[UL_DIGITS +1 ]; +struct prom_t *_prom = &RELOC (prom); + +for (i =UL_DIGITS -1 ; i >=0 ; i--) { + buf[i] = (val %10 ) +'0' ; + val = val/10 ; +if (val ==0 ) +break ; + } +/* shift stuff down */ + size =UL_DIGITS - i; +for (i =0 ; i < size ; i++) + buf[i] = buf[i +UL_DIGITS - size]; + buf[size+1 ] ='\0' ; +call_prom ("write" ,3 ,1 , _prom->stdout, buf, size); +}static void __init prom_printf (const char *format, ...) {
@@ -350,6 +371,14 @@ static void __init prom_printf(const char *format, ...) v = va_arg(args, unsigned long);prom_print_hex (v);break ; +case 'l' : + ++q; +if (*q =='u' ) {/* '%lx' */ + ++q; + v = va_arg(args, unsigned long); +prom_print_dec (v); + } +break ; } } }
@@ -869,12 +898,12 @@ static void __init prom_send_capabilities(void) cores = (u32 *)PTRRELOC (&ibm_architecture_vec[IBM_ARCH_VEC_NRCORES_OFFSET ]);if (*cores !=NR_CPUS ) {prom_printf ("WARNING ! " -"ibm_architecture_vec structure inconsistent: 0x%x !\n" , +"ibm_architecture_vec structure inconsistent: 0x%lu !\n" , *cores); }else { *cores =DIV_ROUND_UP (NR_CPUS ,prom_count_smt_threads ()); -prom_printf ("Max number of cores passed to firmware: 0x%x\n" , - (unsigned long )*cores); +prom_printf ("Max number of cores passed to firmware: %lu (NR_CPUS = %lu)\n" , + *cores,NR_CPUS ); }/* try calling the ibm,client-architecture-support method */
arch/powerpc/kernel/prom_init.c static void __init prom_send_capabilities(void) · line 900
Quoted 8 lines · Michael Neuling
arch/powerpc/kernel/prom_init.c +1
-1@@ -869,12 +895,12 @@ static void __init prom_send_capabilities(void) cores = (u32 *)PTRRELOC (&ibm_architecture_vec[IBM_ARCH_VEC_NRCORES_OFFSET ]);if (*cores !=NR_CPUS ) {prom_printf ("WARNING ! " -"ibm_architecture_vec structure inconsistent: 0x%x !\n" , +"ibm_architecture_vec structure inconsistent: 0x%i !\n" , *cores);
Since we're changing from hex to decimal, we shouldn't print the "0x".
Sincerely,
Signature · 5 lines
Jesse Larrew Software Engineer, Linux on Power Kernel Team IBM Linux Technology Center Phone: (512) 973-2052 (T/L: 363-2052) [email protected]
Currently we look pretty stupid when printing out the number of cores passed to FW
Max number of cores passed to firmware: 0x0000000000000080
So I've change this to print in decimal:
Max number of cores passed to firmware: 128 (NR_CPUS = 256)
This required adding a prom_print_dec() function.
---
Quoted 1 line
Quoted 1 line
cores = (u32 *)PTRRELOC(&ibm_architecture_vec[IBM_ARCH_VEC_NRCO
RES_OFFSET]);
Quoted 3 lines
Review
Quoted 3 lines
if (*cores != NR_CPUS) { prom_printf("WARNING ! "(quoted diff) +0
-1- "ibm_architecture_vec structure inconsisten
t: 0x%x !\n",
Quoted 1 line
Review
Quoted 1 line
(quoted diff) +1
-0+ "ibm_architecture_vec structure inconsisten
t: 0x%i !\n",
Quoted 4 lines
Quoted 2 lines
*cores);
Since we're changing from hex to decimal, we shouldn't print the "0x".
Oops yes. Thanks!
BTW please CC me directly rather than sending only to the list.
arch/powerpc/kernel/prom_init.c | 35 ++++++++++++++++++++++++++++++++--- 1 files changed, 32 insertions(+), 3 deletions(-)
arch/powerpc/kernel/prom_init.c +32 -3
@@ -311,6 +311,27 @@ static void __init prom_print_hex(unsigned long val)call_prom ("write" ,3 ,1 , _prom->stdout, buf, nibbles); } +/* max number of decimal digits in an unsigned long */ +#define UL_DIGITS 21 +static void __init prom_print_dec (unsigned long val) +{ +int i, size; +char buf[UL_DIGITS +1 ]; +struct prom_t *_prom = &RELOC (prom); + +for (i =UL_DIGITS -1 ; i >=0 ; i--) { + buf[i] = (val %10 ) +'0' ; + val = val/10 ; +if (val ==0 ) +break ; + } +/* shift stuff down */ + size =UL_DIGITS - i; +for (i =0 ; i < size ; i++) + buf[i] = buf[i +UL_DIGITS - size]; + buf[size+1 ] ='\0' ; +call_prom ("write" ,3 ,1 , _prom->stdout, buf, size); +}static void __init prom_printf (const char *format, ...) {
@@ -350,6 +371,14 @@ static void __init prom_printf(const char *format, ...) v = va_arg(args, unsigned long);prom_print_hex (v);break ; +case 'l' : + ++q; +if (*q =='u' ) {/* '%lu' */ + ++q; + v = va_arg(args, unsigned long); +prom_print_dec (v); + } +break ; } } }
@@ -869,12 +898,12 @@ static void __init prom_send_capabilities(void) cores = (u32 *)PTRRELOC (&ibm_architecture_vec[IBM_ARCH_VEC_NRCORES_OFFSET ]);if (*cores !=NR_CPUS ) {prom_printf ("WARNING ! " -"ibm_architecture_vec structure inconsistent: 0x%x !\n" , +"ibm_architecture_vec structure inconsistent: %lu !\n" , *cores); }else { *cores =DIV_ROUND_UP (NR_CPUS ,prom_count_smt_threads ()); -prom_printf ("Max number of cores passed to firmware: 0x%x\n" , - (unsigned long )*cores); +prom_printf ("Max number of cores passed to firmware: %lu (NR_CPUS = %lu)\n" , + *cores,NR_CPUS ); }/* try calling the ibm,client-architecture-support method */
PATCH 1/1 powerpc: print decimal values in prom_init.c
Currently we look pretty stupid when printing out a bunch of things in prom_init.c. eg.
Max number of cores passed to firmware: 0x0000000000000080
So I've change this to print in decimal:
Max number of cores passed to firmware: 128 (NR_CPUS = 256)
This required adding a prom_print_dec() function and changing some prom_printk() calls from %x to %lu.
---
This version changes more things over to decimal.
arch/powerpc/kernel/prom_init.c | 47 +++++++++++++++++++++++++++++++------- 1 files changed, 38 insertions(+), 9 deletions(-)
arch/powerpc/kernel/prom_init.c +38 -9
@@ -311,6 +311,27 @@ static void __init prom_print_hex(unsigned long val)call_prom ("write" ,3 ,1 , _prom->stdout, buf, nibbles); } +/* max number of decimal digits in an unsigned long */ +#define UL_DIGITS 21 +static void __init prom_print_dec (unsigned long val) +{ +int i, size; +char buf[UL_DIGITS +1 ]; +struct prom_t *_prom = &RELOC (prom); + +for (i =UL_DIGITS -1 ; i >=0 ; i--) { + buf[i] = (val %10 ) +'0' ; + val = val/10 ; +if (val ==0 ) +break ; + } +/* shift stuff down */ + size =UL_DIGITS - i; +for (i =0 ; i < size ; i++) + buf[i] = buf[i +UL_DIGITS - size]; + buf[size+1 ] ='\0' ; +call_prom ("write" ,3 ,1 , _prom->stdout, buf, size); +}static void __init prom_printf (const char *format, ...) {
@@ -350,6 +371,14 @@ static void __init prom_printf(const char *format, ...) v = va_arg(args, unsigned long);prom_print_hex (v);break ; +case 'l' : + ++q; +if (*q =='u' ) {/* '%lu' */ + ++q; + v = va_arg(args, unsigned long); +prom_print_dec (v); + } +break ; } } }
@@ -835,11 +864,11 @@ static int __init prom_count_smt_threads(void)if (plen ==PROM_ERROR )break ; plen >>=2 ; -prom_debug ("Found 0x%x smt threads per core\n" , (unsigned long )plen); +prom_debug ("Found %lu smt threads per core\n" , (unsigned long )plen);/* Sanity check */ if (plen <1 || plen >64 ) { -prom_printf ("Threads per core 0x%x out of bounds, assuming 1\n" , +prom_printf ("Threads per core %lu out of bounds, assuming 1\n" , (unsigned long )plen);return 1 ; }
@@ -869,12 +898,12 @@ static void __init prom_send_capabilities(void) cores = (u32 *)PTRRELOC (&ibm_architecture_vec[IBM_ARCH_VEC_NRCORES_OFFSET ]);if (*cores !=NR_CPUS ) {prom_printf ("WARNING ! " -"ibm_architecture_vec structure inconsistent: 0x%x !\n" , +"ibm_architecture_vec structure inconsistent: %lu!\n" , *cores); }else { *cores =DIV_ROUND_UP (NR_CPUS ,prom_count_smt_threads ()); -prom_printf ("Max number of cores passed to firmware: 0x%x\n" , - (unsigned long )*cores); +prom_printf ("Max number of cores passed to firmware: %lu (NR_CPUS = %lu)\n" , + *cores,NR_CPUS ); }/* try calling the ibm,client-architecture-support method */
@@ -1482,7 +1511,7 @@ static void __init prom_hold_cpus(void) reg =-1 ;prom_getprop (node,"reg" , ®,sizeof (reg)); -prom_debug ("cpu hw idx = 0x%x\n" , reg); +prom_debug ("cpu hw idx = %lu\n" , reg);/* Init the acknowledge var which will be reset by * the secondary cpu when it awakens from its OF
@@ -1492,7 +1521,7 @@ static void __init prom_hold_cpus(void)if (reg != _prom->cpu) {/* Primary Thread of non-boot cpu */ -prom_printf ("starting cpu hw idx %x... " , reg); +prom_printf ("starting cpu hw idx %lu... " , reg);call_prom ("start-cpu" ,3 ,0 , node, secondary_hold, reg);
@@ -1507,7 +1536,7 @@ static void __init prom_hold_cpus(void) }#ifdef CONFIG_SMP else - prom_printf("boot cpu hw idx %x\n", reg); + prom_printf("boot cpu hw idx %lu\n", reg);#endif /* CONFIG_SMP */ }
@@ -2420,7 +2449,7 @@ static void __init prom_find_boot_cpu(void)prom_getprop (cpu_pkg,"reg" , &getprop_rval,sizeof (getprop_rval)); _prom->cpu = getprop_rval; -prom_debug ("Booting CPU hw index = 0x%x\n" , _prom->cpu); +prom_debug ("Booting CPU hw index = %lu\n" , _prom->cpu); }static void __init prom_check_initrd (unsigned long r3,unsigned long r4)
Re: [PATCH] powerpc: print decimal values in prom_init.c
Currently we look pretty stupid when printing out a bunch of things in prom_init.c. eg.
Max number of cores passed to firmware: 0x0000000000000080
So I've change this to print in decimal:
Max number of cores passed to firmware: 128 (NR_CPUS = 256)
This required adding a prom_print_dec() function and changing some prom_printk() calls from %x to %lu.
---
Bike shed colour status: Mauve.
Thanks to a suggestion from paulus, we are now 3 lines shorter.
arch/powerpc/kernel/prom_init.c | 44 +++++++++++++++++++++++++++++++-------- 1 files changed, 35 insertions(+), 9 deletions(-)
arch/powerpc/kernel/prom_init.c +35 -9
@@ -311,6 +311,24 @@ static void __init prom_print_hex(unsigned long val)call_prom ("write" ,3 ,1 , _prom->stdout, buf, nibbles); } +/* max number of decimal digits in an unsigned long */ +#define UL_DIGITS 21 +static void __init prom_print_dec (unsigned long val) +{ +int i, size; +char buf[UL_DIGITS +1 ]; +struct prom_t *_prom = &RELOC (prom); + +for (i =UL_DIGITS -1 ; i >=0 ; i--) { + buf[i] = (val %10 ) +'0' ; + val = val/10 ; +if (val ==0 ) +break ; + } +/* shift stuff down */ + size =UL_DIGITS - i; +call_prom ("write" ,3 ,1 , _prom->stdout, buf+i, size); +}static void __init prom_printf (const char *format, ...) {
@@ -350,6 +368,14 @@ static void __init prom_printf(const char *format, ...) v = va_arg(args, unsigned long);prom_print_hex (v);break ; +case 'l' : + ++q; +if (*q =='u' ) {/* '%lu' */ + ++q; + v = va_arg(args, unsigned long); +prom_print_dec (v); + } +break ; } } }
@@ -835,11 +861,11 @@ static int __init prom_count_smt_threads(void)if (plen ==PROM_ERROR )break ; plen >>=2 ; -prom_debug ("Found 0x%x smt threads per core\n" , (unsigned long )plen); +prom_debug ("Found %lu smt threads per core\n" , (unsigned long )plen);/* Sanity check */ if (plen <1 || plen >64 ) { -prom_printf ("Threads per core 0x%x out of bounds, assuming 1\n" , +prom_printf ("Threads per core %lu out of bounds, assuming 1\n" , (unsigned long )plen);return 1 ; }
@@ -869,12 +895,12 @@ static void __init prom_send_capabilities(void) cores = (u32 *)PTRRELOC (&ibm_architecture_vec[IBM_ARCH_VEC_NRCORES_OFFSET ]);if (*cores !=NR_CPUS ) {prom_printf ("WARNING ! " -"ibm_architecture_vec structure inconsistent: 0x%x !\n" , +"ibm_architecture_vec structure inconsistent: %lu!\n" , *cores); }else { *cores =DIV_ROUND_UP (NR_CPUS ,prom_count_smt_threads ()); -prom_printf ("Max number of cores passed to firmware: 0x%x\n" , - (unsigned long )*cores); +prom_printf ("Max number of cores passed to firmware: %lu (NR_CPUS = %lu)\n" , + *cores,NR_CPUS ); }/* try calling the ibm,client-architecture-support method */
@@ -1482,7 +1508,7 @@ static void __init prom_hold_cpus(void) reg =-1 ;prom_getprop (node,"reg" , ®,sizeof (reg)); -prom_debug ("cpu hw idx = 0x%x\n" , reg); +prom_debug ("cpu hw idx = %lu\n" , reg);/* Init the acknowledge var which will be reset by * the secondary cpu when it awakens from its OF
@@ -1492,7 +1518,7 @@ static void __init prom_hold_cpus(void)if (reg != _prom->cpu) {/* Primary Thread of non-boot cpu */ -prom_printf ("starting cpu hw idx %x... " , reg); +prom_printf ("starting cpu hw idx %lu... " , reg);call_prom ("start-cpu" ,3 ,0 , node, secondary_hold, reg);
@@ -1507,7 +1533,7 @@ static void __init prom_hold_cpus(void) }#ifdef CONFIG_SMP else - prom_printf("boot cpu hw idx %x\n", reg); + prom_printf("boot cpu hw idx %lu\n", reg);#endif /* CONFIG_SMP */ }
@@ -2420,7 +2446,7 @@ static void __init prom_find_boot_cpu(void)prom_getprop (cpu_pkg,"reg" , &getprop_rval,sizeof (getprop_rval)); _prom->cpu = getprop_rval; -prom_debug ("Booting CPU hw index = 0x%x\n" , _prom->cpu); +prom_debug ("Booting CPU hw index = %lu\n" , _prom->cpu); }static void __init prom_check_initrd (unsigned long r3,unsigned long r4)