summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid S. Miller <davem@nuts.ninka.net>2003-07-24 23:56:01 -0700
committerDavid S. Miller <davem@nuts.ninka.net>2003-07-24 23:56:01 -0700
commitae6eb6dc6bc58f62263511ed8a103d49bb43a6c9 (patch)
tree2252afbb54c766411220ee71d5d652b31e3bb79e
parent52a77587c29b6ba5a7e10eedc7ec9d570076ad1a (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.c16
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);