10 #include <linux/kernel.h>
11 #include <linux/sched.h>
12 #include <asm/uaccess.h>
13 #include <asm/processor.h>
29 #define unimplemented_virtual_address(va) ( \
30 ((va) & local_cpu_data->unimpl_va_mask) != 0 && \
31 ((va) & local_cpu_data->unimpl_va_mask) != local_cpu_data->unimpl_va_mask \
40 #define unimplemented_physical_address(pa) ( \
41 ((pa) & local_cpu_data->unimpl_pa_mask) != 0 \
57 unsigned long bundle[2];
59 unsigned long next_ip;
62 long tmp_taken, unimplemented_address;
70 if (
copy_from_user(bundle, (
void *) (regs->cr_iip),
sizeof(bundle)))
73 next_ip = (
unsigned long) regs->cr_iip + 16;
79 if ((bundle[0] & 0x1e) != 0x4)
return rv;
81 opcode = (bundle[1] >> 60);
82 btype = ((bundle[1] >> 29) & 0x7);
83 qp = ((bundle[1] >> 23) & 0x3f);
84 offset = ((bundle[1] & 0x0800000000000000
L) << 4)
85 | ((bundle[1] & 0x00fffff000000000
L) >> 32)
86 | ((bundle[1] & 0x00000000007fffff
L) << 40)
87 | ((bundle[0] & 0xffff000000000000
L) >> 24);
89 tmp_taken = regs->pr & (1
L << qp);
97 if (btype != 0)
return rv;
104 regs->cr_iip = next_ip;
120 regs->cr_iip = next_ip;
162 regs->ar_pfs = ((regs->cr_ifs & 0x3fffffffff)
163 | (ar_ec << 52) | (cpl << 62));
173 regs->cr_ifs = ((regs->cr_ifs & 0xffffffc00000007f)
174 - ((regs->cr_ifs >> 7) & 0x7f));
194 if (unimplemented_address) {
201 siginfo.si_flags = 0;
214 siginfo.si_flags = 0;
227 siginfo.si_flags = 0;