diff options
author | Jack Steiner <steiner@sgi.com> | 2009-12-15 19:48:18 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-12-16 10:20:17 -0500 |
commit | 5958ab88f721d312b531d17705fc3ed54102fa05 (patch) | |
tree | 0fdd2a982c1fa0370d496a25f7b3ef70ccb96bde /drivers/misc/sgi-gru/grufault.c | |
parent | 2ce4d4c937ce4c14704f02ae60e2e07e3906c68a (diff) |
gru: improve GRU TLB dropin statistics
Update the TLB dropin statistics kept for each GRU context. Count TLB
dropins separate from the misses - some misses do not result in a TLB
dropin. Some of the diagnostics need both counts.
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/grufault.c')
-rw-r--r-- | drivers/misc/sgi-gru/grufault.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/misc/sgi-gru/grufault.c b/drivers/misc/sgi-gru/grufault.c index 6ff6dfb7516d..38657cdaf54d 100644 --- a/drivers/misc/sgi-gru/grufault.c +++ b/drivers/misc/sgi-gru/grufault.c | |||
@@ -438,6 +438,7 @@ static int gru_try_dropin(struct gru_state *gru, | |||
438 | } | 438 | } |
439 | 439 | ||
440 | gru_cb_set_istatus_active(cbk); | 440 | gru_cb_set_istatus_active(cbk); |
441 | gts->ustats.tlbdropin++; | ||
441 | tfh_write_restart(tfh, gpa, GAA_RAM, vaddr, asid, write, | 442 | tfh_write_restart(tfh, gpa, GAA_RAM, vaddr, asid, write, |
442 | GRU_PAGESIZE(pageshift)); | 443 | GRU_PAGESIZE(pageshift)); |
443 | gru_dbg(grudev, | 444 | gru_dbg(grudev, |
@@ -580,9 +581,9 @@ static irqreturn_t gru_intr(int chiplet, int blade) | |||
580 | * This is running in interrupt context. Trylock the mmap_sem. | 581 | * This is running in interrupt context. Trylock the mmap_sem. |
581 | * If it fails, retry the fault in user context. | 582 | * If it fails, retry the fault in user context. |
582 | */ | 583 | */ |
584 | gts->ustats.fmm_tlbmiss++; | ||
583 | if (!gts->ts_force_cch_reload && | 585 | if (!gts->ts_force_cch_reload && |
584 | down_read_trylock(>s->ts_mm->mmap_sem)) { | 586 | down_read_trylock(>s->ts_mm->mmap_sem)) { |
585 | gts->ustats.fmm_tlbdropin++; | ||
586 | gru_try_dropin(gru, gts, tfh, NULL); | 587 | gru_try_dropin(gru, gts, tfh, NULL); |
587 | up_read(>s->ts_mm->mmap_sem); | 588 | up_read(>s->ts_mm->mmap_sem); |
588 | } else { | 589 | } else { |
@@ -624,7 +625,7 @@ static int gru_user_dropin(struct gru_thread_state *gts, | |||
624 | struct gru_mm_struct *gms = gts->ts_gms; | 625 | struct gru_mm_struct *gms = gts->ts_gms; |
625 | int ret; | 626 | int ret; |
626 | 627 | ||
627 | gts->ustats.upm_tlbdropin++; | 628 | gts->ustats.upm_tlbmiss++; |
628 | while (1) { | 629 | while (1) { |
629 | wait_event(gms->ms_wait_queue, | 630 | wait_event(gms->ms_wait_queue, |
630 | atomic_read(&gms->ms_range_active) == 0); | 631 | atomic_read(&gms->ms_range_active) == 0); |