Subject: Re: bin/25633 Was: NetBSD2.0/sparc not ready for prime time?
To: Chuck Silvers <chuq@chuq.com>
From: Markus W Kilbinger <kilbi@rad.rwth-aachen.de>
List: port-sparc
Date: 02/02/2005 23:46:48
>>>>> "Chuck" == Chuck Silvers <chuq@chuq.com> writes:

    Chuck> please try the attached patch for the sun4c-specific
    Chuck> pthreads problem. you'll need both a new kernel and a new
    Chuck> libpthread.so (built with the fixed lock.h)

    Chuck> -Chuck
    Chuck> Index: src/sys/arch/sparc/include/lock.h
    Chuck> ===================================================================
    Chuck> RCS file: /cvsroot/src/sys/arch/sparc/include/lock.h,v
    Chuck> retrieving revision 1.17
    Chuck> diff -u -p -r1.17 lock.h
    Chuck> --- src/sys/arch/sparc/include/lock.h	20 Apr 2004 08:48:03 -0000	1.17
    Chuck> +++ src/sys/arch/sparc/include/lock.h	2 Feb 2005 16:47:13 -0000
    Chuck> @@ -57,7 +57,7 @@ static __inline__ int __ldstub(__cpu_sim
    Chuck>  	int v;
 
    Chuck>  	__asm __volatile("ldstub [%1],%0"
    Chuck> -	    : "=r" (v)
    Chuck> +	    : "=&r" (v)
    Chuck>  	    : "r" (addr)
    Chuck>  	    : "memory");
 
    Chuck> Index: src/sys/arch/sparc/sparc/trap.c
    Chuck> ===================================================================
    Chuck> RCS file: /cvsroot/src/sys/arch/sparc/sparc/trap.c,v
    Chuck> retrieving revision 1.155
    Chuck> diff -u -p -r1.155 trap.c
    Chuck> --- src/sys/arch/sparc/sparc/trap.c	28 Aug 2004 17:53:02 -0000	1.155
    Chuck> +++ src/sys/arch/sparc/sparc/trap.c	2 Feb 2005 16:47:22 -0000
    Chuck> @@ -947,6 +947,20 @@ mem_access_fault(type, ser, v, pc, psr, 
    Chuck>  		goto fault;
    Chuck>  	}
    Chuck>  	atype = ser & SER_WRITE ? VM_PROT_WRITE : VM_PROT_READ;
    Chuck> +	if ((ser & SER_PROT) && atype == VM_PROT_READ && type != T_TEXTFAULT) {
    Chuck> +		int inst;
    Chuck> +
    Chuck> +		/*
    Chuck> +		 * The hardware reports protection faults by the atomic
    Chuck> +		 * load/store instructions as read faults.  If the faulting
    Chuck> +		 * instruction is one of those, indicate that this fault is
    Chuck> +		 * both read and write.
    Chuck> +		 */
    Chuck> +		inst = fuword((void *)pc);
    Chuck> +		if ((inst & 0xc1680000) == 0xc0680000) {
    Chuck> +			atype = VM_PROT_READ | VM_PROT_WRITE;
    Chuck> +		}
    Chuck> +	}
    Chuck>  	va = trunc_page(v);
    Chuck>  	if (psr & PSR_PS) {
    Chuck>  		extern char Lfsbail[];

Wow! This patch seems to solve

  http://www.netbsd.org/cgi-bin/query-pr-single.pl?number=25633

for me! Just tried it on my ipx... :-))

Maybe

  http://www.netbsd.org/cgi-bin/query-pr-single.pl?number=25896

too?

Markus.