[Blackfin] arch: fix bug - trap_tests fails to recover on some tests.
authorRobin Getz <robin.getz@analog.com>
Sun, 27 Jan 2008 07:38:56 +0000 (15:38 +0800)
committerBryan Wu <bryan.wu@analog.com>
Sun, 27 Jan 2008 07:38:56 +0000 (15:38 +0800)
commit13fe24f37df20e580a5a364e67ec8cf3219d8f8c
treec790da8a840c6fdc3e6f5eacccadede92e329d7c
parentf53e86760e10abbe7ee98a5b3cb270fa6426fcdb
[Blackfin] arch: fix bug - trap_tests fails to recover on some tests.

http://blackfin.uclinux.org/gf/project/uclinux-dist/tracker/?action=TrackerItemEdit&tracker_item_id=3719

When the CPLBs get a miss, we do:
  - find a victim in the HW table
  - remove the victim
  - find the replacement in the software table
  - put it into the HW table.

If we can't find a replacement in the software table, we accidently
leave a duplicate in the HW table. This patch ensures that duplicate
is marked as not valid.

What we should do is find the replacement in the software table, before
we find a victim in the HW table - but its too late in the release cycle
to do that much restructuring of this code.

Rather that duplicate code, connect Hardware Errors (irq5) into trap_c,
so user space processes get killed properly.

The rest of irq_panic() can be moved into traps.c (later)

There is still a small corner case that causes problems when a
pheriperal interrupt goes off a single cycle before a user space
hardware error. This causes a kernel panic, rather than the user
space process being killed.

But, this checkin makes things work in 99.9% of the cases, and is a vast
improvement from what is there today (which fails 100% of the time).

Signed-off-by: Robin Getz <robin.getz@analog.com>
Signed-off-by: Bryan Wu <bryan.wu@analog.com>
arch/blackfin/kernel/traps.c
arch/blackfin/mach-common/cplbmgr.S
arch/blackfin/mach-common/interrupt.S
arch/blackfin/mach-common/irqpanic.c
include/asm-blackfin/traps.h