On 05/06/14 12:51, Russell King - ARM Linux wrote:
On Thu, Jun 05, 2014 at 10:53:06AM +0100, Daniel Thompson wrote:
static int fiq_def_op(void *ref, int relinquish) {
- if (!relinquish)
- if (!relinquish) {
unsigned offset = FIQ_OFFSET;
set_fiq_handler(&no_fiq_insn, sizeof(no_fiq_insn));no_fiq_insn = *(unsigned long *)(0xffff0000 + offset);
- }
...
void __init init_FIQ(int start) {
- unsigned offset = FIQ_OFFSET;
- no_fiq_insn = *(unsigned long *)(0xffff0000 + offset); fiq_start = start;
}
This is wrong - when the default handler is "reinstalled", this change has the effect that we read the first instruction of the existing handler, and then write that same instruction back, rather than replacing the first instruction with the value that was there at boot.
Thanks. I'll fix this.