git: b487b1f50289 - main - openzfs/freebsd: Use compiler.h from FreeBSD's base's linuxkpi

From: Warner Losh <imp_at_FreeBSD.org>
Date: Tue, 15 Oct 2024 21:18:05 UTC
The branch main has been updated by imp:

URL: https://cgit.FreeBSD.org/src/commit/?id=b487b1f502899530951bd3923b3927c067d13ffb

commit b487b1f502899530951bd3923b3927c067d13ffb
Author:     Warner Losh <imp@FreeBSD.org>
AuthorDate: 2024-10-15 19:49:42 +0000
Commit:     Warner Losh <imp@FreeBSD.org>
CommitDate: 2024-10-15 21:05:49 +0000

    openzfs/freebsd: Use compiler.h from FreeBSD's base's linuxkpi
    
    The FreeBSD linux/compiler.h in OpenZFS was copied from a very old
    version of FreeBSD's linuxkpi's linux/compiler.h. There's no need for
    this duplication. Use FreeBSD's linuxkpi version instead, and provide
    zfs_fallthrough to augment it (it's all that's needed). Use #pragma once
    to avoid naming issues for guard variables. Since this is a complete
    rewrite, use my copyright here (the original code in FreeBSD still
    credits everybody).
    
    Remove extra copies of macros that were defined elsewhere, but are now
    properly defined in LinuxKPI so are redundant.
    
    This is currently pull request #16650 upstream. Committing now to get
    wider testing (make universe works, but historically doesn't catch all
    errors).
    
    Sponsored by:           Netflix
    Reviewed by:            brooks
    Differential Revision:  https://reviews.freebsd.org/D47131
---
 .../openzfs/include/os/freebsd/linux/compiler.h    | 83 +++-------------------
 .../openzfs/include/os/freebsd/spl/sys/ccompat.h   |  9 ---
 .../openzfs/include/os/freebsd/spl/sys/debug.h     |  4 --
 3 files changed, 8 insertions(+), 88 deletions(-)

diff --git a/sys/contrib/openzfs/include/os/freebsd/linux/compiler.h b/sys/contrib/openzfs/include/os/freebsd/linux/compiler.h
index b408b77c746d..24f09c722158 100644
--- a/sys/contrib/openzfs/include/os/freebsd/linux/compiler.h
+++ b/sys/contrib/openzfs/include/os/freebsd/linux/compiler.h
@@ -1,10 +1,5 @@
 /*
- * Copyright (c) 2010 Isilon Systems, Inc.
- * Copyright (c) 2010 iXsystems, Inc.
- * Copyright (c) 2010 Panasas, Inc.
- * Copyright (c) 2013-2016 Mellanox Technologies, Ltd.
- * Copyright (c) 2015 François Tigeot
- * All rights reserved.
+ * Copyright (c) 2024 Warner Losh.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -26,76 +21,14 @@
  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * $FreeBSD$
  */
-#ifndef	_LINUX_COMPILER_H_
-#define	_LINUX_COMPILER_H_
-
-#include <sys/cdefs.h>
-
-#define	__user
-#define	__kernel
-#define	__safe
-#define	__force
-#define	__nocast
-#define	__iomem
-#define	__chk_user_ptr(x)		((void)0)
-#define	__chk_io_ptr(x)			((void)0)
-#define	__builtin_warning(x, y...)	(1)
-#define	__acquires(x)
-#define	__releases(x)
-#define	__acquire(x)			do { } while (0)
-#define	__release(x)			do { } while (0)
-#define	__cond_lock(x, c)		(c)
-#define	__bitwise
-#define	__devinitdata
-#define	__deprecated
-#define	__init
-#define	__initconst
-#define	__devinit
-#define	__devexit
-#define	__exit
-#define	__rcu
-#define	__percpu
-#define	__weak __weak_symbol
-#define	__malloc
-#define	___stringify(...)		#__VA_ARGS__
-#define	__stringify(...)		___stringify(__VA_ARGS__)
-#define	__attribute_const__		__attribute__((__const__))
-#undef __always_inline
-#define	__always_inline			inline
-#define	noinline			__noinline
-#define	____cacheline_aligned		__aligned(CACHE_LINE_SIZE)
-#define	zfs_fallthrough			__attribute__((__fallthrough__))
-
-#if !defined(_KERNEL) && !defined(_STANDALONE)
-#define	likely(x)			__builtin_expect(!!(x), 1)
-#define	unlikely(x)			__builtin_expect(!!(x), 0)
-#endif
-#define	typeof(x)			__typeof(x)
-
-#define	uninitialized_var(x)		x = x
-#define	__maybe_unused			__unused
-#define	__always_unused			__unused
-#define	__must_check			__result_use_check
-
-#define	__printf(a, b)			__printflike(a, b)
 
-#define	barrier()			__asm__ __volatile__("": : :"memory")
-#define	___PASTE(a, b) a##b
-#define	__PASTE(a, b) ___PASTE(a, b)
-
-#define	ACCESS_ONCE(x)			(*(volatile __typeof(x) *)&(x))
-
-#define	WRITE_ONCE(x, v) do {		\
-	barrier();			\
-	ACCESS_ONCE(x) = (v);		\
-	barrier();			\
-} while (0)
-
-#define	lockless_dereference(p) READ_ONCE(p)
+/*
+ * FreeBSD's LinuxKPI compiler.h as far back as FreeBSD 12 has what we need,
+ * except zfs_fallthrough.
+ */
+#pragma once
 
-#define	_AT(T, X)	((T)(X))
+#include <compat/linuxkpi/common/include/linux/compiler.h>
 
-#endif	/* _LINUX_COMPILER_H_ */
+#define	zfs_fallthrough			__attribute__((__fallthrough__))
diff --git a/sys/contrib/openzfs/include/os/freebsd/spl/sys/ccompat.h b/sys/contrib/openzfs/include/os/freebsd/spl/sys/ccompat.h
index 48749fb8eea2..07b3515ad964 100644
--- a/sys/contrib/openzfs/include/os/freebsd/spl/sys/ccompat.h
+++ b/sys/contrib/openzfs/include/os/freebsd/spl/sys/ccompat.h
@@ -70,15 +70,6 @@ hlist_del(struct hlist_node *n)
 		n->next->pprev = n->pprev;
 }
 	/* BEGIN CSTYLED */
-#define	READ_ONCE(x) ({			\
-	__typeof(x) __var = ({		\
-		barrier();		\
-		ACCESS_ONCE(x);		\
-	});				\
-	barrier();			\
-	__var;				\
-})
-
 #define	HLIST_HEAD_INIT { }
 #define	HLIST_HEAD(name) struct hlist_head name = HLIST_HEAD_INIT
 #define	INIT_HLIST_HEAD(head) (head)->first = NULL
diff --git a/sys/contrib/openzfs/include/os/freebsd/spl/sys/debug.h b/sys/contrib/openzfs/include/os/freebsd/spl/sys/debug.h
index f041dde34fc8..9eb424dd0373 100644
--- a/sys/contrib/openzfs/include/os/freebsd/spl/sys/debug.h
+++ b/sys/contrib/openzfs/include/os/freebsd/spl/sys/debug.h
@@ -95,10 +95,6 @@ spl_assert(const char *buf, const char *file, const char *func, int line)
 #ifndef expect
 #define	expect(expr, value) (__builtin_expect((expr), (value)))
 #endif
-#ifndef __linux__
-#define	likely(expr)   expect((expr) != 0, 1)
-#define	unlikely(expr) expect((expr) != 0, 0)
-#endif
 
 #define	PANIC(fmt, a...)						\
 	spl_panic(__FILE__, __FUNCTION__, __LINE__, fmt, ## a)