diff options
author | Albert Herranz <albert_herranz@yahoo.es> | 2009-12-17 08:33:41 (GMT) |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2009-12-18 04:13:57 (GMT) |
commit | 698cd335a782561b79504d4e98c7df62b08e7abd (patch) | |
tree | 44b3056c81ff1032ffd6c6681cf9e08c12746af8 /arch | |
parent | 38e1313fc753482b93aa6c6f11cfbd43a5bcd963 (diff) | |
download | linux-698cd335a782561b79504d4e98c7df62b08e7abd.tar.xz |
powerpc/gamecube/wii: Fix off-by-one error in ugecon/usbgecko_udbg
The retry logic in ug_putc() is broken.
If the TX fifo is not ready and the counter runs out it will have a
value of -1 and no transfer should be attempted. Also, a counter
with a value of 0 means that the TX fifo got ready in the last try
and the transfer should be attempted.
Reported-by: "Juha Leppanen" <juha_motorsportcom@luukku.com>
Signed-off-by: "Juha Leppanen" <juha_motorsportcom@luukku.com>
Signed-off-by: Albert Herranz <albert_herranz@yahoo.es>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/powerpc/boot/ugecon.c | 2 | ||||
-rw-r--r-- | arch/powerpc/platforms/embedded6xx/usbgecko_udbg.c | 2 |
2 files changed, 2 insertions, 2 deletions
diff --git a/arch/powerpc/boot/ugecon.c b/arch/powerpc/boot/ugecon.c index 50609ea..8f2a6b3 100644 --- a/arch/powerpc/boot/ugecon.c +++ b/arch/powerpc/boot/ugecon.c @@ -86,7 +86,7 @@ static void ug_putc(char ch) while (!ug_is_txfifo_ready() && count--) barrier(); - if (count) + if (count >= 0) ug_raw_putc(ch); } diff --git a/arch/powerpc/platforms/embedded6xx/usbgecko_udbg.c b/arch/powerpc/platforms/embedded6xx/usbgecko_udbg.c index edc956c..20a8ed9 100644 --- a/arch/powerpc/platforms/embedded6xx/usbgecko_udbg.c +++ b/arch/powerpc/platforms/embedded6xx/usbgecko_udbg.c @@ -120,7 +120,7 @@ static void ug_putc(char ch) while (!ug_is_txfifo_ready() && count--) barrier(); - if (count) + if (count >= 0) ug_raw_putc(ch); } |