mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Hugh Dickins <hughd@google.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Michal Nazarewicz <mina86@mina86.com>,
	"Douglas W. Jones" <jones@cs.uiowa.edu>,
	Denis Vlasenko <vda.linux@googlemail.com>,
	linux-kernel@vger.kernel.org
Subject: [PATCH mmotm] fix broken bootup on 32-bit
Date: Sat, 5 Mar 2011 04:42:30 -0800 (PST)	[thread overview]
Message-ID: <alpine.LSU.2.00.1103050436010.4098@sister.anvils> (raw)

mmotm 2011-03-02-16-52 is utterly broken on 32-bit: panics at boot
with "Couldn't register console driver", and preceding warnings don't
even print their line numbers... which leads to the vsprintf changes.

Comparing the 32-bit version of put_dec() against mod7_put_dec()
in tools/put-dec/put-dec-test.c (ah, it is useful after all!) shows
that someone has decided to invert the ordering of pairs of lines
in the kernel version of the algorithm, making a nonsense of it.

Switch them back, and put in the conditionals from mod7_put_dec()
(absent from mod6_put_dec??): my guess is that less work is better.

My testing has gone no further than booting up, and checking that
the numbers in /proc/partitions come out right (which they didn't
at my first attempt, when I thought just a one-liner was needed).

Signed-off-by: Hugh Dickins <hughd@google.com>
---
Diffed to go on the top of mmotm, but can be applied after
lib-vsprintf-optimised-put_dec-function-fix.patch

 lib/vsprintf.c |   33 ++++++++++++++++++++-------------
 1 file changed, 20 insertions(+), 13 deletions(-)

--- mmotm/lib/vsprintf.c	2011-03-03 15:43:57.000000000 -0800
+++ linux/lib/vsprintf.c	2011-03-05 03:37:14.000000000 -0800
@@ -310,22 +310,29 @@ char *put_dec(char *buf, unsigned long l
 
 	q  = 656 * d3 + 7296 * d2 + 5536 * d1 + (n & 0xFFFF);
 
-	q  = q / 10000;
 	buf = put_dec_full4(buf, q % 10000);
+	q  = q / 10000;
 
 	d1 = q + 7671 * d3 + 9496 * d2 + 6 * d1;
-	q  = d1 / 10000;
-	buf = put_dec_full4(buf, d1 % 10000);
-
-	d2 = q + 4749 * d3 + 42 * d2;
-	q  = d2 / 10000;
-	buf = put_dec_full4(buf, d2 % 10000);
-
-	d3 = q + 281 * d3;
-	q  = d3 / 10000;
-	buf = put_dec_full4(buf, d3 % 10000);
-
-	buf = put_dec_full4(buf, q);
+	if (d1) {
+		buf = put_dec_full4(buf, d1 % 10000);
+		q  = d1 / 10000;
+
+		d2 = q + 4749 * d3 + 42 * d2;
+		if (d2) {
+			buf = put_dec_full4(buf, d2 % 10000);
+			q  = d2 / 10000;
+
+			d3 = q + 281 * d3;
+			if (d3) {
+				buf = put_dec_full4(buf, d3 % 10000);
+				q  = d3 / 10000;
+
+				if (q)
+					buf = put_dec_full4(buf, q);
+			}
+		}
+	}
 
 	while (buf[-1] == '0')
 		--buf;

             reply	other threads:[~2011-03-05 12:43 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-03-05 12:42 Hugh Dickins [this message]
2011-03-05 19:41 ` [PATCH] lib: vsprintf: 32-bit put_dec() fixes Michal Nazarewicz
     [not found] ` <AANLkTikDssqCD-f1E=i-HvKEAMnBMtD5qJq-k5Q3FJKC@mail.gmail.com>
2011-03-05 19:49   ` [PATCH mmotm] fix broken bootup on 32-bit Hugh Dickins
     [not found] <AANLkTinjs42oy9h7rdj0+PRQ8+HAJsd-66KdBsc6Kpor@mail.gmail.com>
2011-03-06 18:01 ` Hugh Dickins

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=alpine.LSU.2.00.1103050436010.4098@sister.anvils \
    --to=hughd@google.com \
    --cc=akpm@linux-foundation.org \
    --cc=jones@cs.uiowa.edu \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mina86@mina86.com \
    --cc=vda.linux@googlemail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®