diff options
author | Jack Steiner <steiner@sgi.com> | 2008-10-16 01:05:13 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-10-16 14:21:51 -0400 |
commit | 923f7f6970bd448b8e88b9e4be10fd01fc7106a4 (patch) | |
tree | 5e9f5646f547eaa345068f177815ebadd6a95454 /drivers/misc/sgi-gru/grumain.c | |
parent | ebf3f09c634906d371f2bfd71b41c7e0c52efe7e (diff) |
GRU driver: minor updates
A few minor updates for the GRU driver.
- documentation changes found in code reviews
- changes to #ifdefs to make them recognized by "unifdef"
(used in simulator testing)
- change GRU context load/unload to prefetch data
[akpm@linux-foundation.org: fix typo in comment]
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/grumain.c')
-rw-r--r-- | drivers/misc/sgi-gru/grumain.c | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/drivers/misc/sgi-gru/grumain.c b/drivers/misc/sgi-gru/grumain.c index 0eeb8dddd2f5..e11e1ac50900 100644 --- a/drivers/misc/sgi-gru/grumain.c +++ b/drivers/misc/sgi-gru/grumain.c | |||
@@ -432,29 +432,35 @@ static inline long gru_copy_handle(void *d, void *s) | |||
432 | return GRU_HANDLE_BYTES; | 432 | return GRU_HANDLE_BYTES; |
433 | } | 433 | } |
434 | 434 | ||
435 | /* rewrite in assembly & use lots of prefetch */ | 435 | static void gru_prefetch_context(void *gseg, void *cb, void *cbe, unsigned long cbrmap, |
436 | static void gru_load_context_data(void *save, void *grubase, int ctxnum, | 436 | unsigned long length) |
437 | unsigned long cbrmap, unsigned long dsrmap) | ||
438 | { | 437 | { |
439 | void *gseg, *cb, *cbe; | ||
440 | unsigned long length; | ||
441 | int i, scr; | 438 | int i, scr; |
442 | 439 | ||
443 | gseg = grubase + ctxnum * GRU_GSEG_STRIDE; | ||
444 | length = hweight64(dsrmap) * GRU_DSR_AU_BYTES; | ||
445 | prefetch_data(gseg + GRU_DS_BASE, length / GRU_CACHE_LINE_BYTES, | 440 | prefetch_data(gseg + GRU_DS_BASE, length / GRU_CACHE_LINE_BYTES, |
446 | GRU_CACHE_LINE_BYTES); | 441 | GRU_CACHE_LINE_BYTES); |
447 | 442 | ||
448 | cb = gseg + GRU_CB_BASE; | ||
449 | cbe = grubase + GRU_CBE_BASE; | ||
450 | for_each_cbr_in_allocation_map(i, &cbrmap, scr) { | 443 | for_each_cbr_in_allocation_map(i, &cbrmap, scr) { |
451 | prefetch_data(cb, 1, GRU_CACHE_LINE_BYTES); | 444 | prefetch_data(cb, 1, GRU_CACHE_LINE_BYTES); |
452 | prefetch_data(cbe + i * GRU_HANDLE_STRIDE, 1, | 445 | prefetch_data(cbe + i * GRU_HANDLE_STRIDE, 1, |
453 | GRU_CACHE_LINE_BYTES); | 446 | GRU_CACHE_LINE_BYTES); |
454 | cb += GRU_HANDLE_STRIDE; | 447 | cb += GRU_HANDLE_STRIDE; |
455 | } | 448 | } |
449 | } | ||
450 | |||
451 | static void gru_load_context_data(void *save, void *grubase, int ctxnum, | ||
452 | unsigned long cbrmap, unsigned long dsrmap) | ||
453 | { | ||
454 | void *gseg, *cb, *cbe; | ||
455 | unsigned long length; | ||
456 | int i, scr; | ||
456 | 457 | ||
458 | gseg = grubase + ctxnum * GRU_GSEG_STRIDE; | ||
457 | cb = gseg + GRU_CB_BASE; | 459 | cb = gseg + GRU_CB_BASE; |
460 | cbe = grubase + GRU_CBE_BASE; | ||
461 | length = hweight64(dsrmap) * GRU_DSR_AU_BYTES; | ||
462 | gru_prefetch_context(gseg, cb, cbe, cbrmap, length); | ||
463 | |||
458 | for_each_cbr_in_allocation_map(i, &cbrmap, scr) { | 464 | for_each_cbr_in_allocation_map(i, &cbrmap, scr) { |
459 | save += gru_copy_handle(cb, save); | 465 | save += gru_copy_handle(cb, save); |
460 | save += gru_copy_handle(cbe + i * GRU_HANDLE_STRIDE, save); | 466 | save += gru_copy_handle(cbe + i * GRU_HANDLE_STRIDE, save); |
@@ -472,15 +478,16 @@ static void gru_unload_context_data(void *save, void *grubase, int ctxnum, | |||
472 | int i, scr; | 478 | int i, scr; |
473 | 479 | ||
474 | gseg = grubase + ctxnum * GRU_GSEG_STRIDE; | 480 | gseg = grubase + ctxnum * GRU_GSEG_STRIDE; |
475 | |||
476 | cb = gseg + GRU_CB_BASE; | 481 | cb = gseg + GRU_CB_BASE; |
477 | cbe = grubase + GRU_CBE_BASE; | 482 | cbe = grubase + GRU_CBE_BASE; |
483 | length = hweight64(dsrmap) * GRU_DSR_AU_BYTES; | ||
484 | gru_prefetch_context(gseg, cb, cbe, cbrmap, length); | ||
485 | |||
478 | for_each_cbr_in_allocation_map(i, &cbrmap, scr) { | 486 | for_each_cbr_in_allocation_map(i, &cbrmap, scr) { |
479 | save += gru_copy_handle(save, cb); | 487 | save += gru_copy_handle(save, cb); |
480 | save += gru_copy_handle(save, cbe + i * GRU_HANDLE_STRIDE); | 488 | save += gru_copy_handle(save, cbe + i * GRU_HANDLE_STRIDE); |
481 | cb += GRU_HANDLE_STRIDE; | 489 | cb += GRU_HANDLE_STRIDE; |
482 | } | 490 | } |
483 | length = hweight64(dsrmap) * GRU_DSR_AU_BYTES; | ||
484 | memcpy(save, gseg + GRU_DS_BASE, length); | 491 | memcpy(save, gseg + GRU_DS_BASE, length); |
485 | } | 492 | } |
486 | 493 | ||