From owner-svn-src-projects@FreeBSD.ORG Tue Aug 3 08:38:26 2010 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 5EAAA106567C; Tue, 3 Aug 2010 08:38:26 +0000 (UTC) (envelope-from jeff@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 339F88FC1A; Tue, 3 Aug 2010 08:38:26 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o738cQ0G090471; Tue, 3 Aug 2010 08:38:26 GMT (envelope-from jeff@svn.freebsd.org) Received: (from jeff@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o738cQaS090469; Tue, 3 Aug 2010 08:38:26 GMT (envelope-from jeff@svn.freebsd.org) Message-Id: <201008030838.o738cQaS090469@svn.freebsd.org> From: Jeff Roberson Date: Tue, 3 Aug 2010 08:38:26 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r210790 - projects/ofed/head/sys/ofed/include/linux X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 03 Aug 2010 08:38:26 -0000 Author: jeff Date: Tue Aug 3 08:38:25 2010 New Revision: 210790 URL: http://svn.freebsd.org/changeset/base/210790 Log: - Convert the linux semaphores to use BSD sempahores rather than sx locks. There are places where we need counting semaphore semantics. This is unfortunate since sema(9) is not implemented with the most expedient possible mechanism. Sponsored by: Isilon Systems, iX Systems, and Panasas. Modified: projects/ofed/head/sys/ofed/include/linux/semaphore.h Modified: projects/ofed/head/sys/ofed/include/linux/semaphore.h ============================================================================== --- projects/ofed/head/sys/ofed/include/linux/semaphore.h Tue Aug 3 08:37:16 2010 (r210789) +++ projects/ofed/head/sys/ofed/include/linux/semaphore.h Tue Aug 3 08:38:25 2010 (r210790) @@ -30,25 +30,35 @@ #include #include -#include +#include +/* + * XXX BSD semaphores are disused and slow. They also do not provide a + * sema_wait_sig method. This must be resolved eventually. + */ struct semaphore { - struct sx sx; + struct sema sema; }; -#define init_MUTEX(_rw) sx_init_flags(&(_rw)->sx, \ - "lnxsema", SX_NOWITNESS) -#define down(_rw) sx_xlock(&(_rw)->sx) -#define down_interruptible(_rw) sx_xlock_sig(&(_rw)->sx) -#define down_trylock(_rw) !sx_try_xlock(&(_rw)->sx) -#define up(_rw) sx_xunlock(&(_rw)->sx) +#define down(_sem) sema_wait(&(_sem)->sema) +#define down_interruptible(_sem) sema_wait(&(_sem)->sema), 0 +#define down_trylock(_sem) !sema_trywait(&(_sem)->sema) +#define up(_sem) sema_post(&(_sem)->sema) static inline void -sema_init(struct semaphore *sem, int val) +linux_sema_init(struct semaphore *sem, int val) { - init_MUTEX(sem); - if (val == 0) - down(sem); + + sema_init(&sem->sema, val, "lnxsema"); } +static inline void +init_MUTEX(struct semaphore *sem) +{ + + sema_init(&sem->sema, 1, "lnxsema"); +} + +#define sema_init linux_sema_init + #endif /* _LINUX_SEMAPHORE_H_ */