2001-02-15 12:23:58

by James Cownie

[permalink] [raw]
Subject: Compaq Alpha: missing i-cache invalidates in ptrace (2.2.18, 2.4.0) ?


I've been seeing some peculiar effects on Alpha boxes (particularly on
SMPs) where threads run right past breakpoints planted by a debugger.
(This on 2.2 series kernels).

Looking at the code in arch/alpha/kernel/ptrace.c there appears to be
nowhere where flush_icache_range is called. According to the Alpha
architecture manual you must execute a "call_pal imb" (which is what
flush_icache_range turns into) after changing the I-stream.

So :-

1) Anyone agree with me that flush_icache_range ought to be called
after any ptrace write which modifies an executable page ?
(Or have I missed something which has this effect ?)

2) If so, would patches be accepted ?

The same problem also appears to exist in 2.4...

Thanks

-- Jim

James Cownie <[email protected]>
Etnus, LLC. +44 117 9071438
http://www.etnus.com


2001-02-15 13:33:14

by James Cownie

[permalink] [raw]
Subject: Re: Compaq Alpha: missing i-cache invalidates in ptrace (2.2.18, 2.4.0) ?


Jeff Garzik asked :-

> Does the same Alpha problem exist in 2.4.1-AC patches? (Alan Cox's
> patchkit)

It looks as if there's a very suitable fix in kernel/ptrace.c .

In access_one_page we have

if (write) {
maddr = kmap(page);
memcpy(maddr + (addr & ~PAGE_MASK), buf, len);
flush_page_to_ram(page);
flush_icache_page(vma, page);
kunmap(page);
}

which looks ideal to me...

That still leaves 2.2 broken, though :-(

-- Jim

James Cownie <[email protected]>
Etnus, LLC. +44 117 9071438
http://www.etnus.com