Skip to content

Commit

Permalink
[PATCH] ppc64: Clean up CR handling
Browse files Browse the repository at this point in the history
Make the 16550 and real mode 16550 use tail recursion like the scc code
instead of repeating the routine except for the character sent.

Gcc recoginizes the tail recursion and handles it efficently without
stack allocations.  The maple real putc shrinks from 188 to 104 bytes
of instructions.  udbg_putc drops from 188 to 140 bytes.

Signed-off-by: Milton Miller <miltonm@bga.com>
Signed-off-by: Anton Blanchard <anton@samba.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
  • Loading branch information
Milton Miller authored and Paul Mackerras committed Sep 6, 2005
1 parent 5fdabaa commit cb14c4d
Showing 1 changed file with 4 additions and 12 deletions.
16 changes: 4 additions & 12 deletions arch/ppc64/kernel/udbg.c
Original file line number Diff line number Diff line change
Expand Up @@ -169,12 +169,8 @@ void udbg_maple_real_putc(unsigned char c)
while ((real_readb(&udbg_comport->lsr) & LSR_THRE) == 0)
/* wait for idle */;
real_writeb(c, &udbg_comport->thr); eieio();
if (c == '\n') {
/* Also put a CR. This is for convenience. */
while ((real_readb(&udbg_comport->lsr) & LSR_THRE) == 0)
/* wait for idle */;
real_writeb('\r', &udbg_comport->thr); eieio();
}
if (c == '\n')
udbg_maple_real_putc('\r');
}
}

Expand All @@ -194,12 +190,8 @@ void udbg_putc(unsigned char c)
while ((in_8(&udbg_comport->lsr) & LSR_THRE) == 0)
/* wait for idle */;
out_8(&udbg_comport->thr, c);
if (c == '\n') {
/* Also put a CR. This is for convenience. */
while ((in_8(&udbg_comport->lsr) & LSR_THRE) == 0)
/* wait for idle */;
out_8(&udbg_comport->thr, '\r');
}
if (c == '\n')
udbg_putc('\r');
}
#ifdef CONFIG_PPC_PMAC
else if (sccc) {
Expand Down

0 comments on commit cb14c4d

Please sign in to comment.