Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 29 Sep 2020 20:59:42 +0200
From:      Hans Petter Selasky <hps@selasky.org>
To:        Warner Losh <imp@FreeBSD.org>, src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   Re: svn commit: r366265 - head/sys/sys
Message-ID:  <cff8d9cd-ddb7-2589-2883-0e017100055e@selasky.org>
In-Reply-To: <202009291806.08TI62eE083160@repo.freebsd.org>
References:  <202009291806.08TI62eE083160@repo.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On 2020-09-29 20:06, Warner Losh wrote:
> Author: imp
> Date: Tue Sep 29 18:06:02 2020
> New Revision: 366265
> URL: https://svnweb.freebsd.org/changeset/base/366265
> 
> Log:
>    Standalone SX shims
>    
>    Create a do-nothing version of SX locks. OpenZFS needs them. However,
>    since the boot loader is single threaded, they can be nops.
> 
> Modified:
>    head/sys/sys/sx.h
> 
> Modified: head/sys/sys/sx.h
> ==============================================================================
> --- head/sys/sys/sx.h	Tue Sep 29 17:52:15 2020	(r366264)
> +++ head/sys/sys/sx.h	Tue Sep 29 18:06:02 2020	(r366265)
> @@ -300,4 +300,26 @@ __sx_xunlock(struct sx *sx, struct thread *td, const c
>   
>   #endif /* _KERNEL */
>   
> +#ifdef _STANDALONE
> +/* since we have no threads in the boot loader, trivially implement no-op version */
> +#define sx_xlock(s) (1)
> +#define sx_try_xlock(s) (1)
> +#define sx_xunlock(s) (1)
> +#define SX_DUPOK 0
> +#define SX_NEW 0
> +#define SX_NOWITNESS 0
> +
> +static __inline void
> +sx_init_flags(struct sx *sx, const char *description, int opts)
> +{
> +
> +}
> +
> +static __inline void
> +sx_destroy(struct sx *sx)
> +{
> +
> +}
> +#endif /* _STANDALONE */
> +
>   #endif /* !_SYS_SX_H_ */
> 

You may want to use:

bsd_kernel.c:sx_init_flags(struct sx *sx, const char *name, int flags)
bsd_kernel.c:	sx->owned = 0;
bsd_kernel.c:sx_destroy(struct sx *sx)
bsd_kernel.c:sx_xlock(struct sx *sx)
bsd_kernel.c:	sx->owned++;
bsd_kernel.c:sx_xunlock(struct sx *sx)
bsd_kernel.c:	sx->owned--;
bsd_kernel.c:sx_xlocked(struct sx *sx)
bsd_kernel.c:	return (sx->owned != 0);
bsd_kernel.h:struct sx {
bsd_kernel.h:#define	sx_assert(...) do { } while (0)
bsd_kernel.h:#define	sx_init(...) sx_init_flags(__VA_ARGS__, 0)
bsd_kernel.h:void	sx_init_flags(struct sx *, const char *, int);
bsd_kernel.h:void	sx_destroy(struct sx *);
bsd_kernel.h:void	sx_xlock(struct sx *);
bsd_kernel.h:void	sx_xunlock(struct sx *);
bsd_kernel.h:int	sx_xlocked(struct sx *);

from "src/stand/kshim"

--HPS



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?cff8d9cd-ddb7-2589-2883-0e017100055e>