diff options
author | Jack Steiner <steiner@sgi.com> | 2009-06-17 19:28:19 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-06-18 16:03:59 -0400 |
commit | cd1334f03f7b799bc6893b511daf2080e8f73863 (patch) | |
tree | 468d9bc99e19aa7895321927eaf30c4dae55166f /drivers/misc/sgi-gru/gruprocfs.c | |
parent | d6580a9f15238b87e618310c862231ae3f352d2d (diff) |
gru: bug fixes for GRU exception handling
Bug fixes for GRU exception handling. Additional fields from the CBR must
be returned to the user to allow the user to correctly diagnose GRU
exceptions.
Handle endcase in TFH TLB miss handling. Verify that TFH actually
indicates a pending exception.
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/gruprocfs.c')
-rw-r--r-- | drivers/misc/sgi-gru/gruprocfs.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/misc/sgi-gru/gruprocfs.c b/drivers/misc/sgi-gru/gruprocfs.c index ee74821b171c..c46c1c5f0c73 100644 --- a/drivers/misc/sgi-gru/gruprocfs.c +++ b/drivers/misc/sgi-gru/gruprocfs.c | |||
@@ -84,6 +84,8 @@ static int statistics_show(struct seq_file *s, void *p) | |||
84 | printstat(s, tlb_dropin_fail_range_active); | 84 | printstat(s, tlb_dropin_fail_range_active); |
85 | printstat(s, tlb_dropin_fail_idle); | 85 | printstat(s, tlb_dropin_fail_idle); |
86 | printstat(s, tlb_dropin_fail_fmm); | 86 | printstat(s, tlb_dropin_fail_fmm); |
87 | printstat(s, tlb_dropin_fail_no_exception); | ||
88 | printstat(s, tlb_dropin_fail_no_exception_war); | ||
87 | printstat(s, mmu_invalidate_range); | 89 | printstat(s, mmu_invalidate_range); |
88 | printstat(s, mmu_invalidate_page); | 90 | printstat(s, mmu_invalidate_page); |
89 | printstat(s, mmu_clear_flush_young); | 91 | printstat(s, mmu_clear_flush_young); |
@@ -158,8 +160,7 @@ static ssize_t options_write(struct file *file, const char __user *userbuf, | |||
158 | unsigned long val; | 160 | unsigned long val; |
159 | char buf[80]; | 161 | char buf[80]; |
160 | 162 | ||
161 | if (copy_from_user | 163 | if (strncpy_from_user(buf, userbuf, sizeof(buf) - 1) < 0) |
162 | (buf, userbuf, count < sizeof(buf) ? count : sizeof(buf))) | ||
163 | return -EFAULT; | 164 | return -EFAULT; |
164 | buf[count - 1] = '\0'; | 165 | buf[count - 1] = '\0'; |
165 | if (!strict_strtoul(buf, 10, &val)) | 166 | if (!strict_strtoul(buf, 10, &val)) |