From owner-p4-projects@FreeBSD.ORG Fri Apr 27 19:49:27 2007 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 6E3E116A407; Fri, 27 Apr 2007 19:49:27 +0000 (UTC) X-Original-To: perforce@FreeBSD.org Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 37AC016A400 for ; Fri, 27 Apr 2007 19:49:27 +0000 (UTC) (envelope-from rdivacky@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [69.147.83.41]) by mx1.freebsd.org (Postfix) with ESMTP id 267CE13C468 for ; Fri, 27 Apr 2007 19:49:27 +0000 (UTC) (envelope-from rdivacky@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.8/8.13.8) with ESMTP id l3RJnRnW065223 for ; Fri, 27 Apr 2007 19:49:27 GMT (envelope-from rdivacky@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.8/8.13.8/Submit) id l3RJnQl4065220 for perforce@freebsd.org; Fri, 27 Apr 2007 19:49:26 GMT (envelope-from rdivacky@FreeBSD.org) Date: Fri, 27 Apr 2007 19:49:26 GMT Message-Id: <200704271949.l3RJnQl4065220@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to rdivacky@FreeBSD.org using -f From: Roman Divacky To: Perforce Change Reviews Cc: Subject: PERFORCE change 118888 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 27 Apr 2007 19:49:27 -0000 http://perforce.freebsd.org/chv.cgi?CH=118888 Change 118888 by rdivacky@rdivacky_witten on 2007/04/27 19:49:22 Working WAKEUP_OP operation: o I moved the futex asm stuff into $ARCH diretory to linux[32]_support.s o I changed the asm code to copyout oldval correctly Glitches: amd64 is not implemented, i386 version manually includes assym.s to let the module build succeed and it needs fixing (to be able to really include assym.s) Affected files ... .. //depot/projects/soc2007/rdivacky/linux_futex/sys/amd64/amd64/support.S#2 edit .. //depot/projects/soc2007/rdivacky/linux_futex/sys/amd64/linux32/linux32_support.s#1 add .. //depot/projects/soc2007/rdivacky/linux_futex/sys/compat/linux/linux_futex.c#2 edit .. //depot/projects/soc2007/rdivacky/linux_futex/sys/i386/linux/linux_support.s#1 add .. //depot/projects/soc2007/rdivacky/linux_futex/sys/modules/linux/Makefile#2 edit Differences ... ==== //depot/projects/soc2007/rdivacky/linux_futex/sys/amd64/amd64/support.S#2 (text+ko) ==== ==== //depot/projects/soc2007/rdivacky/linux_futex/sys/compat/linux/linux_futex.c#2 (text+ko) ==== @@ -90,13 +90,13 @@ static int futex_sleep(struct futex *, struct thread *, unsigned long); static int futex_wake(struct futex *, int, struct futex *, int); static int futex_atomic_op(struct thread *td, int encoded_op, caddr_t uaddr); -static int futex_orl(int oparg, caddr_t uaddr, int *oldval); -static int futex_andl(int oparg, caddr_t uaddr, int *oldval); -static int futex_xorl(int oparg, caddr_t uaddr, int *oldval); /* support.s */ int futex_xchgl(int oparg, caddr_t uaddr, int *oldval); int futex_addl(int oparg, caddr_t uaddr, int *oldval); +int futex_orl(int oparg, caddr_t uaddr, int *oldval); +int futex_andl(int oparg, caddr_t uaddr, int *oldval); +int futex_xorl(int oparg, caddr_t uaddr, int *oldval); int linux_sys_futex(struct thread *td, struct linux_sys_futex_args *args) @@ -509,42 +509,3 @@ return (ret); } - -static int -futex_orl(int oparg, caddr_t uaddr, int *oldval) -{ - uint32_t ua, ua_old; - - for (;;) { - ua = ua_old = fuword32(uaddr); - ua |= oparg; - if (casuword32((void *)uaddr, ua_old, ua) == ua_old) - return ua_old; - } -} - -static int -futex_andl(int oparg, caddr_t uaddr, int *oldval) -{ - uint32_t ua, ua_old; - - for (;;) { - ua = ua_old = fuword32(uaddr); - ua &= oparg; - if (casuword32((void *)uaddr, ua_old, ua) == ua_old) - return ua_old; - } -} - -static int -futex_xorl(int oparg, caddr_t uaddr, int *oldval) -{ - uint32_t ua, ua_old; - - for (;;) { - ua = ua_old = fuword32(uaddr); - ua ^= oparg; - if (casuword32((void *)uaddr, ua_old, ua) == ua_old) - return ua_old; - } -} ==== //depot/projects/soc2007/rdivacky/linux_futex/sys/modules/linux/Makefile#2 (text+ko) ==== @@ -15,7 +15,7 @@ linux${SFX}_sysvec.c linux_uid16.c linux_util.c linux_time.c \ opt_inet6.h opt_mac.h opt_compat.h opt_posix.h vnode_if.h \ device_if.h bus_if.h -OBJS= linux${SFX}_locore.o +OBJS= linux${SFX}_locore.o linux${SFX}_support.o .if ${MACHINE_ARCH} == "i386" SRCS+= linux_ptrace.c imgact_linux.c opt_cpu.h @@ -41,6 +41,10 @@ ${CC} -c -x assembler-with-cpp -DLOCORE ${CFLAGS} \ ${.IMPSRC} -o ${.TARGET} +linux${SFX}_support.o: linux${SFX}_support.s + ${CC} -c -x assembler-with-cpp -DLOCORE ${CFLAGS} \ + ${.IMPSRC} -o ${.TARGET} + linux${SFX}_genassym.o: linux${SFX}_genassym.c linux.h @ machine ${CC} -c ${CFLAGS:N-fno-common} ${.IMPSRC}