diff options
author | Jack Steiner <steiner@sgi.com> | 2009-12-15 19:48:11 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-12-16 10:20:15 -0500 |
commit | 67bf04a5c2574e9495f660f418f6df776821d578 (patch) | |
tree | ff28ab4983b007136da88786c8966ea1598841a0 /drivers/misc/sgi-gru/gru_instructions.h | |
parent | e006043a4d2da52bba9fd9cb7e5a22e2951ff69b (diff) |
gru: fix prefetch and speculation bugs
Fix several bugs related to prefetch, ordering & speculation:
- GRU cch_allocate() instruction causes cacheable memory
to be created. Add a barriers to prevent speculation
from prefetching data before it exists.
- Add memory barriers before cache-flush instructions to ensure
that previously stored data is included in the line flushed to memory.
Signed-off-by: Jack Steiner <steiner@sgi.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/misc/sgi-gru/gru_instructions.h')
-rw-r--r-- | drivers/misc/sgi-gru/gru_instructions.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/misc/sgi-gru/gru_instructions.h b/drivers/misc/sgi-gru/gru_instructions.h index e033b6ce4a3f..32f358d9f429 100644 --- a/drivers/misc/sgi-gru/gru_instructions.h +++ b/drivers/misc/sgi-gru/gru_instructions.h | |||
@@ -325,6 +325,7 @@ static inline void gru_flush_cache(void *p) | |||
325 | static inline void gru_start_instruction(struct gru_instruction *ins, int op32) | 325 | static inline void gru_start_instruction(struct gru_instruction *ins, int op32) |
326 | { | 326 | { |
327 | gru_ordered_store_int(ins, op32); | 327 | gru_ordered_store_int(ins, op32); |
328 | mb(); | ||
328 | gru_flush_cache(ins); | 329 | gru_flush_cache(ins); |
329 | } | 330 | } |
330 | 331 | ||