diff options
author | Miod Vallat <miod@cvs.openbsd.org> | 2007-05-25 20:58:40 +0000 |
---|---|---|
committer | Miod Vallat <miod@cvs.openbsd.org> | 2007-05-25 20:58:40 +0000 |
commit | ea6c22ed3e8787ca90bd0c939d3f389e7e2ec427 (patch) | |
tree | 807153580a6a6c9b5032011fbe1659dfe149d138 /sys/dev | |
parent | f317bc290c14036a44fa5bd89e108b886c5cca9c (diff) |
Edge cases can trigger a TLB miss exception instead of an invalid TLB
exception on early R5000 revisions. Despite this bug being supposedly
fixed in R5000 revision 2 onwards, it nevertheless occurs quite frequently
on matthieu's revision 2.1 R5000.
Servicing the TLB miss exception would cause a duplicate TLB to be inserted,
which causes the processor operation to become unpredictable (but lethal to
the kernel, ten times out of nine).
More details about the problem can be found in:
http://www.linux-mips.org/archives/linux-mips/2000-02/msg00040.html
We work around the issue by checking for an existing TLB entry, and handling
this as an invalid TLB exception (as it was intended to be), in this case.
Unfortunately this causes a measurable 1% slowdown on ``safe'' processors,
so we'll work on providing different tlb handler flavours in the near future
to recover from this.
Diffstat (limited to 'sys/dev')
0 files changed, 0 insertions, 0 deletions