x86: kernel/early_printk.c simple_strtoul cleanup
PATCH 1/1 x86: kernel/early_printk.c simple_strtoul cleanup
Change early_serial_init() to call kstrtoul() instead of calling obsoleted simple_strtoul().
--- arch/x86/kernel/early_printk.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-)
arch/x86/kernel/early_printk.c +14 -7
@@ -119,22 +119,27 @@ static __init void early_serial_init(char *s)unsigned char c;unsigned divisor;unsigned baud =DEFAULT_BAUD ; -char *e; +unsigned long val; +ssize_t ret;if (*s ==',' ) ++s;if (*s) { -unsigned port; +unsigned port =0 ;if (!strncmp (s,"0x" ,2 )) { - early_serial_base =simple_strtoul (s, &e,16 ); + ret =kstrtoul (s,16 , &val); +if (!ret) + early_serial_base = val; }else {static const int __initconst bases[] = {0x3f8 ,0x2f8 };if (!strncmp (s,"ttyS" ,4 )) s +=4 ; - port =simple_strtoul (s, &e,10 ); -if (port >1 || s == e) + ret =kstrtoul (s,10 , &val); +if (!ret) + port = val; +if (port >1 ) port =0 ; early_serial_base = bases[port]; }
@@ -149,8 +154,10 @@ static __init void early_serial_init(char *s)outb (0x3 , early_serial_base +MCR );/* DTR + RTS */ if (*s) { - baud =simple_strtoul (s, &e,0 ); -if (baud ==0 || s == e) + ret =kstrtoul (s,0 , &val); +if (!ret) + baud = val; +if (baud ==0 ) baud =DEFAULT_BAUD ; }
Signature · 1 line
1.7.9.5
Quoted 2 lines · Shuah Khan
Change
early_serial_init()to callkstrtoul()instead of calling obsoletedsimple_strtoul().
[]
arch/x86/kernel/early_printk.c
Quoted 1 line
arch/x86/kernel/early_printk.c +0
-0
[]
Quoted 9 lines
arch/x86/kernel/early_printk.c +2
-1@@ -119,22 +119,27 @@ static __init void early_serial_init(char *s)unsigned char c;unsigned divisor;unsigned baud =DEFAULT_BAUD ; -char *e; +unsigned long val; +ssize_t ret;if (*s ==',' )
arch/x86/kernel/early_printk.c static __init void early_serial_init(char *s) · line 133
Quoted 10 lines
arch/x86/kernel/early_printk.c +4
-2++s;if (*s) { -unsigned port; +unsigned port =0 ;if (!strncmp (s,"0x" ,2 )) { - early_serial_base =simple_strtoul (s, &e,16 ); + ret =kstrtoul (s,16 , &val); +if (!ret) + early_serial_base = val;
I believe none of the kstrto<foo> calls set
the value in the pointer unless successful so
you don't need a temporary and can simply use:
ret = kstrtoint(s, 16, &early_serial_base) if (ret)
etc...
Quoted 30 lines · Joe Perches
Quoted 2 lines · Shuah Khan
Change
early_serial_init()to callkstrtoul()instead of calling obsoletedsimple_strtoul().[]
arch/x86/kernel/early_printk.c
Quoted 1 line
arch/x86/kernel/early_printk.c +0
-0[]
Quoted 9 lines
arch/x86/kernel/early_printk.c +2
-1@@ -119,22 +119,27 @@ static __init void early_serial_init(char *s)unsigned char c;unsigned divisor;unsigned baud =DEFAULT_BAUD ; -char *e; +unsigned long val; +ssize_t ret;if (*s ==',' )arch/x86/kernel/early_printk.c static __init void early_serial_init(char *s) · line 133
Quoted 10 lines
arch/x86/kernel/early_printk.c +4
-2++s;if (*s) { -unsigned port; +unsigned port =0 ;if (!strncmp (s,"0x" ,2 )) { - early_serial_base =simple_strtoul (s, &e,16 ); + ret =kstrtoul (s,16 , &val); +if (!ret) + early_serial_base = val;I believe none of the kstrto<foo> calls set
the value in the pointer unless successful so
you don't need a temporary and can simply use:
Quoted 4 lines
ret =
kstrtoint(s, 16, &early_serial_base)if (ret)etc...
Will re-work the patch and resend it.
Thanks,
-- Shuah
PATCH RESEND 1/1 x86: kernel/early_printk.c simple_strtoul cleanup
Change early_serial_init() to call kstrtoul() instead of calling obsoleted simple_strtoul().
--- arch/x86/kernel/early_printk.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
arch/x86/kernel/early_printk.c +6 -6
@@ -119,7 +119,7 @@ static __init void early_serial_init(char *s)unsigned char c;unsigned divisor;unsigned baud =DEFAULT_BAUD ; -char *e; +ssize_t ret;if (*s ==',' ) ++s;
@@ -127,14 +127,14 @@ static __init void early_serial_init(char *s)if (*s) {unsigned port;if (!strncmp (s,"0x" ,2 )) { - early_serial_base =simple_strtoul (s, &e,16 ); + ret =kstrtoint (s,16 , &early_serial_base); }else {static const int __initconst bases[] = {0x3f8 ,0x2f8 };if (!strncmp (s,"ttyS" ,4 )) s +=4 ; - port =simple_strtoul (s, &e,10 ); -if (port >1 || s == e) + ret =kstrtouint (s,10 , &port); +if (ret || port >1 ) port =0 ; early_serial_base = bases[port]; }
@@ -149,8 +149,8 @@ static __init void early_serial_init(char *s)outb (0x3 , early_serial_base +MCR );/* DTR + RTS */ if (*s) { - baud =simple_strtoul (s, &e,0 ); -if (baud ==0 || s == e) + ret =kstrtouint (s,0 , &baud); +if (ret || baud ==0 ) baud =DEFAULT_BAUD ; }
Signature · 1 line
1.7.9.5
[tip:x86/cleanups] x86/early_printk: Replace obsolete simple_strtoul() usage with kstrtoint()
Commit-ID: fbd24153c48b8425b09c161a020483cd77da870e Gitweb: http://git.kernel.org/tip/fbd24153c48b8425b09c161a020483cd77da870e Author: Shuah Khan <[email protected]> AuthorDate: Wed, 30 May 2012 18:40:03 -0600 Committer: Ingo Molnar <[email protected]> CommitDate: Wed, 6 Jun 2012 11:44:22 +0200
x86/early_printk: Replace obsolete simple_strtoul() usage with kstrtoint()
Change early_serial_init() to call kstrtoul() instead of calling obsoleted simple_strtoul().
--- arch/x86/kernel/early_printk.c | 12 ++++++------ 1 files changed, 6 insertions(+), 6 deletions(-)
arch/x86/kernel/early_printk.c +6 -6
@@ -119,7 +119,7 @@ static __init void early_serial_init(char *s)unsigned char c;unsigned divisor;unsigned baud =DEFAULT_BAUD ; -char *e; +ssize_t ret;if (*s ==',' ) ++s;
@@ -127,14 +127,14 @@ static __init void early_serial_init(char *s)if (*s) {unsigned port;if (!strncmp (s,"0x" ,2 )) { - early_serial_base =simple_strtoul (s, &e,16 ); + ret =kstrtoint (s,16 , &early_serial_base); }else {static const int __initconst bases[] = {0x3f8 ,0x2f8 };if (!strncmp (s,"ttyS" ,4 )) s +=4 ; - port =simple_strtoul (s, &e,10 ); -if (port >1 || s == e) + ret =kstrtouint (s,10 , &port); +if (ret || port >1 ) port =0 ; early_serial_base = bases[port]; }
@@ -149,8 +149,8 @@ static __init void early_serial_init(char *s)outb (0x3 , early_serial_base +MCR );/* DTR + RTS */ if (*s) { - baud =simple_strtoul (s, &e,0 ); -if (baud ==0 || s == e) + ret =kstrtouint (s,0 , &baud); +if (ret || baud ==0 ) baud =DEFAULT_BAUD ; }
Re: [tip:x86/cleanups] x86/early_printk: Replace obsolete simple_strtoul() usage with kstrtoint()
Quoted 52 lines · tip-bot for Shuah Khan
Commit-ID: fbd24153c48b8425b09c161a020483cd77da870e Gitweb: http://git.kernel.org/tip/fbd24153c48b8425b09c161a020483cd77da870e Author: Shuah Khan <[email protected]> AuthorDate: Wed, 30 May 2012 18:40:03 -0600 Committer: Ingo Molnar <[email protected]> CommitDate: Wed, 6 Jun 2012 11:44:22 +0200x86/early_printk: Replace obsolete
simple_strtoul()usage withkstrtoint()Change
early_serial_init()to callkstrtoul()instead of calling obsoletedsimple_strtoul().Signed-off-by Shuah Khan <[email protected]>Cc Joe Perches <[email protected]>Signed-off-by Ingo Molnar <[email protected]>--- arch/x86/kernel/early_printk.c | 12 ++++++------ 1 files changed, 6 insertions(+), 6 deletions(-)arch/x86/kernel/early_printk.c +4
-4@@ -119,7 +119,7 @@ static __init void early_serial_init(char *s)unsigned char c;unsigned divisor;unsigned baud =DEFAULT_BAUD ; -char *e; +ssize_t ret;if (*s ==',' ) ++s;@@ -127,14 +127,14 @@ static __init void early_serial_init(char *s)if (*s) {unsigned port;if (!strncmp (s,"0x" ,2 )) { - early_serial_base =simple_strtoul (s, &e,16 ); + ret =kstrtoint (s,16 , &early_serial_base); }else {static const int __initconst bases[] = {0x3f8 ,0x2f8 };if (!strncmp (s,"ttyS" ,4 )) s +=4 ; - port =simple_strtoul (s, &e,10 ); -if (port >1 || s == e) + ret =kstrtouint (s,10 , &port); +if (ret || port >1 ) port =0 ; early_serial_base = bases[port]; }
arch/x86/kernel/early_printk.c static __init void early_serial_init(char *s) · line 155
Quoted 9 lines
arch/x86/kernel/early_printk.c +2
-2@@ -149,8 +149,8 @@ static __init void early_serial_init(char *s)outb (0x3 , early_serial_base +MCR );/* DTR + RTS */ if (*s) { - baud =simple_strtoul (s, &e,0 ); -if (baud ==0 || s == e) + ret =kstrtouint (s,0 , &baud); +if (ret || baud ==0 ) baud =DEFAULT_BAUD ; }
This commit is quite buggy: kstrto*int() can return an error but it's not checked in every path above. simple_strtoul() on the other hand could not fail, so this patch subtly intruduces new failure modes.
I'm dropping this patch.
Thanks,
Ingo
Re: [tip:x86/cleanups] x86/early_printk: Replace obsolete simple_strtoul() usage with kstrtoint()
Quoted 3 lines
I'm dropping this patch.
No problem. I missed return value check in one path. Will fix it and send the fixed patch. I probably will pool this change with other simple_strtoul() cleanup related changes I am working on.
-- Shuah
Re: [tip:x86/cleanups] x86/early_printk: Replace obsolete simple_strtoul() usage with kstrtoint()
Quoted 6 lines · Shuah Khan
Quoted 1 line
I'm dropping this patch.
No problem. I missed return value check in one path. Will fix it and send the fixed patch. I probably will pool this change with other
simple_strtoul()cleanup related changes I am working on.
Yep, that will probably make it easier to review in a batch, looking for side effects and such.
Thanks,
Ingo
[tip:x86/cleanups] Revert "x86/early_printk: Replace obsolete simple_strtoul() usage with kstrtoint()"
In reply to Shuah KhanCommit-ID: 3f44392e7872bdc9470134f29cead2e06ed4d426 Gitweb: http://git.kernel.org/tip/3f44392e7872bdc9470134f29cead2e06ed4d426 Author: Ingo Molnar <[email protected]> AuthorDate: Fri, 22 Jun 2012 16:25:19 +0200 Committer: Ingo Molnar <[email protected]> CommitDate: Fri, 22 Jun 2012 16:25:19 +0200
Revert "x86/early_printk: Replace obsolete simple_strtoul() usage with kstrtoint()"
This reverts commit fbd24153c48b8425b09c161a020483cd77da870e.
This commit is subtly buggy: kstrto*int() can return an error but it's not checked in every path. simple_strtoul() on the other hand could not fail, so this patch subtly intruduces new failure modes.
--- arch/x86/kernel/early_printk.c | 12 ++++++------ 1 files changed, 6 insertions(+), 6 deletions(-)
arch/x86/kernel/early_printk.c +6 -6
@@ -119,7 +119,7 @@ static __init void early_serial_init(char *s)unsigned char c;unsigned divisor;unsigned baud =DEFAULT_BAUD ; -ssize_t ret; +char *e;if (*s ==',' ) ++s;
@@ -127,14 +127,14 @@ static __init void early_serial_init(char *s)if (*s) {unsigned port;if (!strncmp (s,"0x" ,2 )) { - ret =kstrtoint (s,16 , &early_serial_base); + early_serial_base =simple_strtoul (s, &e,16 ); }else {static const int __initconst bases[] = {0x3f8 ,0x2f8 };if (!strncmp (s,"ttyS" ,4 )) s +=4 ; - ret =kstrtouint (s,10 , &port); -if (ret || port >1 ) + port =simple_strtoul (s, &e,10 ); +if (port >1 || s == e) port =0 ; early_serial_base = bases[port]; }
@@ -149,8 +149,8 @@ static __init void early_serial_init(char *s)outb (0x3 , early_serial_base +MCR );/* DTR + RTS */ if (*s) { - ret =kstrtouint (s,0 , &baud); -if (ret || baud ==0 ) + baud =simple_strtoul (s, &e,0 ); +if (baud ==0 || s == e) baud =DEFAULT_BAUD ; }
[tip:x86/platform] Revert "x86/early_printk: Replace obsolete simple_strtoul() usage with kstrtoint()"
In reply to Shuah KhanCommit-ID: 36d93d88a5396baa135f8bcde7b8501dfe3b8e53 Gitweb: http://git.kernel.org/tip/36d93d88a5396baa135f8bcde7b8501dfe3b8e53 Author: Ingo Molnar <[email protected]> AuthorDate: Fri, 22 Jun 2012 16:25:19 +0200 Committer: Ingo Molnar <[email protected]> CommitDate: Sun, 22 Jul 2012 15:47:52 +0200
Revert "x86/early_printk: Replace obsolete simple_strtoul() usage with kstrtoint()"
This reverts commit fbd24153c48b8425b09c161a020483cd77da870e.
This commit is subtly buggy: kstrto*int() can return an error but it's not checked in every path. simple_strtoul() on the other hand could not fail, so this patch subtly intruduces new failure modes.
--- arch/x86/kernel/early_printk.c | 12 ++++++------ 1 files changed, 6 insertions(+), 6 deletions(-)
arch/x86/kernel/early_printk.c +6 -6
@@ -119,7 +119,7 @@ static __init void early_serial_init(char *s)unsigned char c;unsigned divisor;unsigned baud =DEFAULT_BAUD ; -ssize_t ret; +char *e;if (*s ==',' ) ++s;
@@ -127,14 +127,14 @@ static __init void early_serial_init(char *s)if (*s) {unsigned port;if (!strncmp (s,"0x" ,2 )) { - ret =kstrtoint (s,16 , &early_serial_base); + early_serial_base =simple_strtoul (s, &e,16 ); }else {static const int __initconst bases[] = {0x3f8 ,0x2f8 };if (!strncmp (s,"ttyS" ,4 )) s +=4 ; - ret =kstrtouint (s,10 , &port); -if (ret || port >1 ) + port =simple_strtoul (s, &e,10 ); +if (port >1 || s == e) port =0 ; early_serial_base = bases[port]; }
@@ -149,8 +149,8 @@ static __init void early_serial_init(char *s)outb (0x3 , early_serial_base +MCR );/* DTR + RTS */ if (*s) { - ret =kstrtouint (s,0 , &baud); -if (ret || baud ==0 ) + baud =simple_strtoul (s, &e,0 ); +if (baud ==0 || s == e) baud =DEFAULT_BAUD ; }