--- fault.c.orig 2003-11-02 08:29:23.000000000 +0100 +++ fault.c 2003-11-02 09:03:55.000000000 +0100 @@ -135,13 +135,21 @@ * Check that here and ignore it. */ static int __is_prefetch(struct pt_regs *regs, unsigned long addr) -{ +{ + static int entered = 0; + unsigned long limit; unsigned long instr = get_segment_eip (regs, &limit); int scan_more = 1; int prefetch = 0; int i; + entered++; + + if (entered < 10) + printk("Init: limit: %lx, instr: %lx, eip: %lx, seg: %x\n", + limit, instr, regs->eip, regs->xcs & 0xffff); + for (i = 0; scan_more && i < 15; i++) { unsigned char opcode; unsigned char instr_hi; @@ -149,9 +157,16 @@ if (instr > limit) break; + + if (entered < 10) + printk("%d: limit: %lx, instr: %lx\n", i, limit, instr); + if (__get_user(opcode, (unsigned char *) instr)) break; + if (entered < 10) + printk("%d: opcode: %lx\n", i, (long)(opcode & 0xff)); + instr_hi = opcode & 0xf0; instr_lo = opcode & 0x0f; instr++; @@ -186,6 +201,10 @@ break; } } + + if (entered < 10) + printk("prefetch: %d\n", prefetch); + return prefetch; }