diff options
author | Max Filippov <jcmvbkbc@gmail.com> | 2012-10-14 19:55:33 -0400 |
---|---|---|
committer | Chris Zankel <chris@zankel.net> | 2012-10-16 00:39:20 -0400 |
commit | c88d8df0cc69fe0238f2c805a87cc67fb27a43fe (patch) | |
tree | 37af3c6aab48c8e20c7c67cfc7558c75b45bd846 /arch/xtensa | |
parent | 50c08f8e9f44bc7b20e06c06d1180f3b914e5a83 (diff) |
xtensa: ISS: fix rs_put_char
ISS serial console prints garbage instead of symbols printed via
rs_put_char. gcc optimizes away putting prined symbol into memory buffer
because there's no evidence that the buffer is used afterwards.
Make rs_put_char and rs_write use simc_write that has explicit wmb.
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
Signed-off-by: Chris Zankel <chris@zankel.net>
Diffstat (limited to 'arch/xtensa')
-rw-r--r-- | arch/xtensa/platforms/iss/console.c | 9 |
1 files changed, 2 insertions, 7 deletions
diff --git a/arch/xtensa/platforms/iss/console.c b/arch/xtensa/platforms/iss/console.c index 8ab47edd7c82..7e74895eee04 100644 --- a/arch/xtensa/platforms/iss/console.c +++ b/arch/xtensa/platforms/iss/console.c | |||
@@ -91,7 +91,7 @@ static int rs_write(struct tty_struct * tty, | |||
91 | { | 91 | { |
92 | /* see drivers/char/serialX.c to reference original version */ | 92 | /* see drivers/char/serialX.c to reference original version */ |
93 | 93 | ||
94 | __simc (SYS_write, 1, (unsigned long)buf, count, 0, 0); | 94 | simc_write(1, buf, count); |
95 | return count; | 95 | return count; |
96 | } | 96 | } |
97 | 97 | ||
@@ -122,12 +122,7 @@ static void rs_poll(unsigned long priv) | |||
122 | 122 | ||
123 | static int rs_put_char(struct tty_struct *tty, unsigned char ch) | 123 | static int rs_put_char(struct tty_struct *tty, unsigned char ch) |
124 | { | 124 | { |
125 | char buf[2]; | 125 | return rs_write(tty, &ch, 1); |
126 | |||
127 | buf[0] = ch; | ||
128 | buf[1] = '\0'; /* Is this NULL necessary? */ | ||
129 | __simc (SYS_write, 1, (unsigned long) buf, 1, 0, 0); | ||
130 | return 1; | ||
131 | } | 126 | } |
132 | 127 | ||
133 | static void rs_flush_chars(struct tty_struct *tty) | 128 | static void rs_flush_chars(struct tty_struct *tty) |