From owner-p4-projects@FreeBSD.ORG Fri Jan 8 22:29:33 2010 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 0FBD11065692; Fri, 8 Jan 2010 22:29:33 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id AEE06106568F for ; Fri, 8 Jan 2010 22:29:32 +0000 (UTC) (envelope-from bz@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 5208F8FC1B for ; Fri, 8 Jan 2010 22:29:32 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id o08MTW6w039422 for ; Fri, 8 Jan 2010 22:29:32 GMT (envelope-from bz@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id o08MTWv7039420 for perforce@freebsd.org; Fri, 8 Jan 2010 22:29:32 GMT (envelope-from bz@freebsd.org) Date: Fri, 8 Jan 2010 22:29:32 GMT Message-Id: <201001082229.o08MTWv7039420@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to bz@freebsd.org using -f From: "Bjoern A. Zeeb" To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 172808 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 08 Jan 2010 22:29:33 -0000 http://p4web.freebsd.org/chv.cgi?CH=172808 Change 172808 by bz@bz_dumpster on 2010/01/08 22:29:11 Reflect SVN r199135: Extract the code that records syscall results in the frame into MD function cpu_set_syscall_retval(). Affected files ... .. //depot/projects/s390/sys/s390/include/pcb.h#3 edit .. //depot/projects/s390/sys/s390/s390/trap.c#14 edit .. //depot/projects/s390/sys/s390/s390/vm_machdep.c#12 edit Differences ... ==== //depot/projects/s390/sys/s390/include/pcb.h#3 (text+ko) ==== ==== //depot/projects/s390/sys/s390/s390/trap.c#14 (text+ko) ==== @@ -482,7 +482,6 @@ struct sysentvec *sv; struct sysent *callp; struct thread *td; - int be32_hack = 0; struct proc *p; caddr_t params; u_int code; @@ -520,7 +519,6 @@ code = *argp++; nreg = 4; } else if (code == SYS___syscall) { - be32_hack = 1; argp++; code = *argp++; nreg = 3; @@ -555,32 +553,7 @@ error = (*callp->sy_call)(td, argp); } - switch (error) { - case 0: - if (be32_hack) { - tf->tf_gpr[3] = td->td_retval[0]; - } else { - tf->tf_gpr[2] = td->td_retval[0]; - tf->tf_gpr[3] = td->td_retval[1]; - } - tf->tf_psw.mask &= ~PSW_CC3; - break; - case ERESTART: - tf->tf_psw.addr -= 2; - break; - case EJUSTRETURN: - break; - default: - if (sv->sv_errsize) { - error = (error >= sv->sv_errsize) - ? -1 - : sv->sv_errtbl[error]; - } - tf->tf_gpr[2] = error; - tf->tf_psw.mask |= PSW_CC3; - break; - } - + cpu_set_syscall_retval(td, error); userret(td, tf); #ifdef KTRACE ==== //depot/projects/s390/sys/s390/s390/vm_machdep.c#12 (text+ko) ==== @@ -60,7 +60,9 @@ #include #include #include +#include #include +#include #include #include #include @@ -75,6 +77,7 @@ #include #include #include +#include #include @@ -158,6 +161,53 @@ } void +cpu_set_syscall_retval(struct thread *td, int error) +{ + struct trapframe *tf; + struct proc *p; + struct sysentvec *sv; + u_int code; + int be32_hack; + + tf = td->td_frame; + p = td->td_proc; + sv = p->p_sysent; + + code = tf->tf_gpr[0]; + be32_hack = 0; +#ifndef __s390x__ + if (code == SYS___syscall) + be32_hack = 1; +#endif + + switch (error) { + case 0: + if (be32_hack) { + tf->tf_gpr[3] = td->td_retval[0]; + } else { + tf->tf_gpr[2] = td->td_retval[0]; + tf->tf_gpr[3] = td->td_retval[1]; + } + tf->tf_psw.mask &= ~PSW_CC3; + break; + case ERESTART: + tf->tf_psw.addr -= 2; + break; + case EJUSTRETURN: + break; + default: + if (sv->sv_errsize) { + error = (error >= sv->sv_errsize) + ? -1 + : sv->sv_errtbl[error]; + } + tf->tf_gpr[2] = error; + tf->tf_psw.mask |= PSW_CC3; + break; + } +} + +void cpu_set_upcall(struct thread *td, struct thread *td0) { struct trapframe *tf;