diff options
author | Kyle McMartin <kyle@mcmartin.ca> | 2010-08-03 20:38:08 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-08-04 14:17:10 -0400 |
commit | d9b68e5e88248bb24fd4e455588bea1d56108fd6 (patch) | |
tree | 94a1a3980fc4a428b2628a8188e24a57ce941dcf /arch/parisc/kernel/firmware.c | |
parent | f46e9913faeebcb6bd29edf795f12b60acbff171 (diff) |
parisc: pass through '\t' to early (iodc) console
The firmware handles '\t' internally, so stop trying to emulate it
(which, incidentally, had a bug in it.)
Fixes a really weird hang at bootup in rcu_bootup_announce, which,
as far as I can tell, is the first printk in the core kernel to use
a tab as the first character.
Cc: stable@kernel.org
Signed-off-by: Kyle McMartin <kyle@parisc-linux.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'arch/parisc/kernel/firmware.c')
-rw-r--r-- | arch/parisc/kernel/firmware.c | 12 |
1 files changed, 2 insertions, 10 deletions
diff --git a/arch/parisc/kernel/firmware.c b/arch/parisc/kernel/firmware.c index 4c247e02d9b1..df971fa0c32f 100644 --- a/arch/parisc/kernel/firmware.c +++ b/arch/parisc/kernel/firmware.c | |||
@@ -1123,7 +1123,6 @@ static char __attribute__((aligned(64))) iodc_dbuf[4096]; | |||
1123 | */ | 1123 | */ |
1124 | int pdc_iodc_print(const unsigned char *str, unsigned count) | 1124 | int pdc_iodc_print(const unsigned char *str, unsigned count) |
1125 | { | 1125 | { |
1126 | static int posx; /* for simple TAB-Simulation... */ | ||
1127 | unsigned int i; | 1126 | unsigned int i; |
1128 | unsigned long flags; | 1127 | unsigned long flags; |
1129 | 1128 | ||
@@ -1133,19 +1132,12 @@ int pdc_iodc_print(const unsigned char *str, unsigned count) | |||
1133 | iodc_dbuf[i+0] = '\r'; | 1132 | iodc_dbuf[i+0] = '\r'; |
1134 | iodc_dbuf[i+1] = '\n'; | 1133 | iodc_dbuf[i+1] = '\n'; |
1135 | i += 2; | 1134 | i += 2; |
1136 | posx = 0; | ||
1137 | goto print; | 1135 | goto print; |
1138 | case '\t': | ||
1139 | while (posx & 7) { | ||
1140 | iodc_dbuf[i] = ' '; | ||
1141 | i++, posx++; | ||
1142 | } | ||
1143 | break; | ||
1144 | case '\b': /* BS */ | 1136 | case '\b': /* BS */ |
1145 | posx -= 2; | 1137 | i--; /* overwrite last */ |
1146 | default: | 1138 | default: |
1147 | iodc_dbuf[i] = str[i]; | 1139 | iodc_dbuf[i] = str[i]; |
1148 | i++, posx++; | 1140 | i++; |
1149 | break; | 1141 | break; |
1150 | } | 1142 | } |
1151 | } | 1143 | } |