Skip to contentSkip to conversation

x86: kernel/early_printk.c simple_strtoul cleanup

PATCH Superseded Shuah Khan 3 participants 10 messages May 27, 2012 – Jul 22, 2012 x86

lore
Share & tools
lore

Shuah Khan

author
#0 lore raw

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
index 9b9f18b..a078f4d 100644
@@ -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
#1 lore raw
Quoted 2 lines · Shuah Khan

Change early_serial_init() to call kstrtoul() instead of calling obsoleted simple_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...

author
#2 lore raw
Quoted 30 lines · Joe Perches
Quoted 2 lines · Shuah Khan

Change early_serial_init() to call kstrtoul() instead of calling obsoleted simple_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

author
#3 lore raw

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
index 9b9f18b..5e47712 100644
@@ -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
#4 lore raw

[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
index 9b9f18b..5e47712 100644
@@ -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;
 	}
 
#5 lore raw

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 +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 +4 -4
index 9b9f18b..5e47712 100644
@@ -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

author
#6 lore raw

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

#7 lore raw

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

#8 lore raw

[tip:x86/cleanups] Revert "x86/early_printk: Replace obsolete simple_strtoul() usage with kstrtoint()"

In reply to Shuah Khan
Commit-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
index 5e47712..9b9f18b 100644
@@ -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;
 	}
 
#9 lore raw

[tip:x86/platform] Revert "x86/early_printk: Replace obsolete simple_strtoul() usage with kstrtoint()"

In reply to Shuah Khan
Commit-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
index 5e47712..9b9f18b 100644
@@ -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;
 	}