David VomLehn (dvomlehn) wrote:
The 2.6.28 kernel dies in memcpy when called from set_vi_srs_handler on
a
24K processor. The problem is that ebase has an invalid value. The
original
value of ebase comes from a bootmem allocation, but the following code
in
set_uncached_handler takes a perfectly good kseg0 address and turns it
into
an invalid kseg1 address.
if (cpu_has_mips_r2)
ebase += (read_c0_ebase() & 0x3ffff000);
This code was added in commit 566f74f6b2f8b85d5b8d6caaf97e5672cecd3e3e.
I remember worrying about why it was "+=" and not "=" when others had
problems with that patch. See the thread "NXP STB225 board support" from
January 8 or so. When I asked about that, I got a comment that the add
operation was correct, but that patch *should* have said "uncached_ebase
+= (read_c0_ebase() & 0x3ffff000);" I guess uncache_ebase is assumed to
contain something interesting in some non-address bits. Try pre-pending
"uncached_" to that "ebase"...
Regards,
Kevin K.