diff options
author | Jack Steiner <steiner@sgi.com> | 2009-12-15 19:48:13 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-12-16 10:20:16 -0500 |
commit | c550222f64265c9384c45d7f691445386025a82b (patch) | |
tree | 562d45bf656c8bafc9c0dd5b3897dba5da6ae9a3 /drivers/misc/sgi-gru/gruhandles.c | |
parent | 57ebb0342c12f00e7a6d15ba59bb6c3ee501c3af (diff) |
gru: preload tlb for bcopy instructions
Add anticipatory TLB dropins for GRU TLB misses that occur on BCOPY
instructions that copy large amounts of data.
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/gruhandles.c')
-rw-r--r-- | drivers/misc/sgi-gru/gruhandles.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/drivers/misc/sgi-gru/gruhandles.c b/drivers/misc/sgi-gru/gruhandles.c index 66d67d9bc9b6..2f30badc6ffd 100644 --- a/drivers/misc/sgi-gru/gruhandles.c +++ b/drivers/misc/sgi-gru/gruhandles.c | |||
@@ -165,17 +165,20 @@ int tgh_invalidate(struct gru_tlb_global_handle *tgh, | |||
165 | return wait_instruction_complete(tgh, tghop_invalidate); | 165 | return wait_instruction_complete(tgh, tghop_invalidate); |
166 | } | 166 | } |
167 | 167 | ||
168 | void tfh_write_only(struct gru_tlb_fault_handle *tfh, | 168 | int tfh_write_only(struct gru_tlb_fault_handle *tfh, |
169 | unsigned long pfn, unsigned long vaddr, | 169 | unsigned long paddr, int gaa, |
170 | int asid, int dirty, int pagesize) | 170 | unsigned long vaddr, int asid, int dirty, |
171 | int pagesize) | ||
171 | { | 172 | { |
172 | tfh->fillasid = asid; | 173 | tfh->fillasid = asid; |
173 | tfh->fillvaddr = vaddr; | 174 | tfh->fillvaddr = vaddr; |
174 | tfh->pfn = pfn; | 175 | tfh->pfn = paddr >> GRU_PADDR_SHIFT; |
176 | tfh->gaa = gaa; | ||
175 | tfh->dirty = dirty; | 177 | tfh->dirty = dirty; |
176 | tfh->pagesize = pagesize; | 178 | tfh->pagesize = pagesize; |
177 | tfh->opc = TFHOP_WRITE_ONLY; | 179 | tfh->opc = TFHOP_WRITE_ONLY; |
178 | start_instruction(tfh); | 180 | start_instruction(tfh); |
181 | return wait_instruction_complete(tfh, tfhop_write_only); | ||
179 | } | 182 | } |
180 | 183 | ||
181 | void tfh_write_restart(struct gru_tlb_fault_handle *tfh, | 184 | void tfh_write_restart(struct gru_tlb_fault_handle *tfh, |