Subject: pcb_onfault changes broken 386DX
To: None <port-i386@netbsd.org>
From: Jaromír <jdolecek@netbsd.org>
List: port-i386
Date: 03/30/2001 12:35:36
Hi,
well, I'm not sure why, but this change:
"""
in trap(), when invoking the pcb_onfault mechanism, pass the return value
of uvm_fault() to the onfault routine via %eax.  users of pcb_onfault now
return this value to their callers rather than always returning EFAULT.
this allows i/o errors in VOP_GETPAGES() to be returned back to read(), etc.
"""
to sys/arch/i386/ has some weird effect of trashing kernel memory
on my diskless 386DX. This causes the machine to not be able to
execute /sbin/init (something during nfs lookup causes the code
to look for /sbin/in instead), and /sbin/oinit dies with SIGSEGV.
I get no panic though. And yes, this is reliably repeatable.

If I back off sys/arch/i386/i386/locore.s to rev. 1.233 and
sys/arch/i386/i386/trap.c to rev. 1.155, the thing works again.

I did not tried to track down yet what exactly makes it lose; probably
%eax is used by something implicitely on 386DX?
Since kernel with -current sources works just ok on PIII/600, I think
this is really 386-dependant thing.

Anyone has an idea what may be broken?

Jaromir
-- 
Jaromir Dolecek <jdolecek@NetBSD.org>      http://www.ics.muni.cz/~dolecek/
 ***  Wanna a real operating system ? Go and get NetBSD, dammit!  ***