diff options
| author | David S. Miller <davem@nuts.ninka.net> | 2003-07-24 23:56:01 -0700 |
|---|---|---|
| committer | David S. Miller <davem@nuts.ninka.net> | 2003-07-24 23:56:01 -0700 |
| commit | ae6eb6dc6bc58f62263511ed8a103d49bb43a6c9 (patch) | |
| tree | 2252afbb54c766411220ee71d5d652b31e3bb79e | |
| parent | 52a77587c29b6ba5a7e10eedc7ec9d570076ad1a (diff) | |
[SPARC64]: Pass correct args to data_access_exception() in unaligned.c
Spotted by Hal Duston <hduston@speedscript.com>
| -rw-r--r-- | arch/sparc64/kernel/unaligned.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/arch/sparc64/kernel/unaligned.c b/arch/sparc64/kernel/unaligned.c index 1d403a089e01..9d6de531ab8b 100644 --- a/arch/sparc64/kernel/unaligned.c +++ b/arch/sparc64/kernel/unaligned.c @@ -484,7 +484,9 @@ int handle_popc(u32 insn, struct pt_regs *regs) extern void do_fpother(struct pt_regs *regs); extern void do_privact(struct pt_regs *regs); -extern void data_access_exception(struct pt_regs *regs); +extern void data_access_exception(struct pt_regs *regs, + unsigned long sfsr, + unsigned long sfar); int handle_ldf_stq(u32 insn, struct pt_regs *regs) { @@ -527,14 +529,14 @@ int handle_ldf_stq(u32 insn, struct pt_regs *regs) break; } default: - data_access_exception(regs); + data_access_exception(regs, 0, addr); return 1; } if (put_user (first >> 32, (u32 *)addr) || __put_user ((u32)first, (u32 *)(addr + 4)) || __put_user (second >> 32, (u32 *)(addr + 8)) || __put_user ((u32)second, (u32 *)(addr + 12))) { - data_access_exception(regs); + data_access_exception(regs, 0, addr); return 1; } } else { @@ -547,7 +549,7 @@ int handle_ldf_stq(u32 insn, struct pt_regs *regs) do_privact(regs); return 1; } else if (asi > ASI_SNFL) { - data_access_exception(regs); + data_access_exception(regs, 0, addr); return 1; } switch (insn & 0x180000) { @@ -564,7 +566,7 @@ int handle_ldf_stq(u32 insn, struct pt_regs *regs) err |= __get_user (data[i], (u32 *)(addr + 4*i)); } if (err && !(asi & 0x2 /* NF */)) { - data_access_exception(regs); + data_access_exception(regs, 0, addr); return 1; } if (asi & 0x8) /* Little */ { @@ -667,7 +669,7 @@ void handle_lddfmna(struct pt_regs *regs, unsigned long sfar, unsigned long sfsr *(u64 *)(f->regs + freg) = value; current_thread_info()->fpsaved[0] |= flag; } else { -daex: data_access_exception(regs); +daex: data_access_exception(regs, sfsr, sfar); return; } advance(regs); @@ -711,7 +713,7 @@ void handle_stdfmna(struct pt_regs *regs, unsigned long sfar, unsigned long sfsr __put_user ((u32)value, (u32 *)(sfar + 4))) goto daex; } else { -daex: data_access_exception(regs); +daex: data_access_exception(regs, sfsr, sfar); return; } advance(regs); |
