]> Zhao Yanbai Git Server - minix.git/commit
Kernel: disable assert in prefetch abort handler 07/3307/1
authorDavid van Moolenbroek <david@minix3.org>
Wed, 9 Mar 2016 12:02:03 +0000 (12:02 +0000)
committerDavid van Moolenbroek <david@minix3.org>
Wed, 9 Mar 2016 12:11:23 +0000 (12:11 +0000)
commita3975fbc356715eac5dff4701d2e1b257fa36c1a
tree1b0d120870085d9106c9d45396e9cc1a12dc3a69
parent28aa92fd90d71d236677d07a6bbbd582618824d1
Kernel: disable assert in prefetch abort handler

For a reason currently unknown to us, the qemu-linaro emulator
sometimes produces a Prefetch Abort exception with a fault location
(IFAR) rather different from the location of the instruction being
executed (LR corrected by 4).  So far it has been observed in the
__udivmodsi4 routine of various processes, where the fault address is
for the first byte of the next page after the current instruction,
which itself is 44-64 bytes away from the start of that next page.
The affected instruction does not perform any sort of memory access.

Short of debugging qemu-linaro itself, we have no choice but to
disable the assert that previously went off in case the IFAR and
corrected LR are not equal.  Since we have not yet observed this case
on actual hardware, the kernel prints a warning when detecting such a
mismatch for the first time.  For the qemu-linaro case, the kernel's
actual page fault handling logic already handles this strange case
just fine.

Change-Id: Ibd19e624149ab4e68bfe75b918ec1554b825a431
minix/kernel/arch/earm/exception.c