aboutsummaryrefslogtreecommitdiffstats
path: root/arch/parisc/kernel/firmware.c
diff options
context:
space:
mode:
authorKyle McMartin <kyle@mcmartin.ca>2010-08-03 20:38:08 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2010-08-04 14:17:10 -0400
commitd9b68e5e88248bb24fd4e455588bea1d56108fd6 (patch)
tree94a1a3980fc4a428b2628a8188e24a57ce941dcf /arch/parisc/kernel/firmware.c
parentf46e9913faeebcb6bd29edf795f12b60acbff171 (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.c12
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 */
1124int pdc_iodc_print(const unsigned char *str, unsigned count) 1124int 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 }