From: Max Kellermann <max.kellermann@ionos.com>
To: linux-kernel@vger.kernel.org
Cc: Max Kellermann <max.kellermann@ionos.com>
Subject: [PATCH v4 09/35] rwsem.h: move declarations to rwsem_types.h
Date: Mon, 12 Feb 2024 00:14:52 +0100 [thread overview]
Message-ID: <20240211231518.349442-10-max.kellermann@ionos.com> (raw)
In-Reply-To: <20240211231518.349442-1-max.kellermann@ionos.com>
By providing declarations in a lean header, we can reduce header
dependencies.
Signed-off-by: Max Kellermann <max.kellermann@ionos.com>
---
include/linux/backing-dev-defs.h | 2 +-
include/linux/comedi/comedidev.h | 2 +-
include/linux/gnss.h | 2 +-
include/linux/i3c/master.h | 2 +-
include/linux/ipc_namespace.h | 2 +-
include/linux/leds.h | 2 +-
include/linux/mfd/intel-m10-bmc.h | 2 +-
include/linux/mm_types.h | 2 +-
include/linux/nfs_fs.h | 2 +-
include/linux/posix-clock.h | 2 +-
include/linux/quota.h | 2 +-
include/linux/rwsem.h | 48 +------------------
include/linux/rwsem_types.h | 78 +++++++++++++++++++++++++++++++
include/linux/tty.h | 2 +-
include/linux/user_namespace.h | 2 +-
include/net/sch_generic.h | 2 +-
include/rdma/ib_verbs.h | 2 +-
include/sound/core.h | 2 +-
18 files changed, 95 insertions(+), 63 deletions(-)
create mode 100644 include/linux/rwsem_types.h
diff --git a/include/linux/backing-dev-defs.h b/include/linux/backing-dev-defs.h
index b379687434fa..68fdec049456 100644
--- a/include/linux/backing-dev-defs.h
+++ b/include/linux/backing-dev-defs.h
@@ -15,7 +15,7 @@
#include <linux/kref_types.h>
#ifdef CONFIG_CGROUP_WRITEBACK
-#include <linux/rwsem.h>
+#include <linux/rwsem_types.h>
#endif
struct page;
diff --git a/include/linux/comedi/comedidev.h b/include/linux/comedi/comedidev.h
index d7a75b15c6f7..a3c2268f7ae5 100644
--- a/include/linux/comedi/comedidev.h
+++ b/include/linux/comedi/comedidev.h
@@ -13,7 +13,7 @@
#include <linux/dma-mapping.h>
#include <linux/mutex_types.h>
#include <linux/spinlock_types.h>
-#include <linux/rwsem.h>
+#include <linux/rwsem_types.h>
#include <linux/kref_types.h>
#include <linux/comedi.h>
diff --git a/include/linux/gnss.h b/include/linux/gnss.h
index 8fc4bdd38dc6..9f38ff948d78 100644
--- a/include/linux/gnss.h
+++ b/include/linux/gnss.h
@@ -12,7 +12,7 @@
#include <linux/device.h>
#include <linux/kfifo.h>
#include <linux/mutex_types.h>
-#include <linux/rwsem.h>
+#include <linux/rwsem_types.h>
#include <linux/types.h>
#include <linux/wait.h>
diff --git a/include/linux/i3c/master.h b/include/linux/i3c/master.h
index 16cc81e55b12..0e456edeebbf 100644
--- a/include/linux/i3c/master.h
+++ b/include/linux/i3c/master.h
@@ -14,7 +14,7 @@
#include <linux/i2c.h>
#include <linux/i3c/ccc.h>
#include <linux/i3c/device.h>
-#include <linux/rwsem.h>
+#include <linux/rwsem_types.h>
#include <linux/workqueue_types.h>
#define I3C_HOT_JOIN_ADDR 0x2
diff --git a/include/linux/ipc_namespace.h b/include/linux/ipc_namespace.h
index e8240cf2611a..a0011b6cd5d1 100644
--- a/include/linux/ipc_namespace.h
+++ b/include/linux/ipc_namespace.h
@@ -4,7 +4,7 @@
#include <linux/err.h>
#include <linux/idr.h>
-#include <linux/rwsem.h>
+#include <linux/rwsem_types.h>
#include <linux/notifier.h>
#include <linux/nsproxy.h>
#include <linux/ns_common.h>
diff --git a/include/linux/leds.h b/include/linux/leds.h
index bec1c2fa5b26..6a50c2ea10e2 100644
--- a/include/linux/leds.h
+++ b/include/linux/leds.h
@@ -11,7 +11,7 @@
#include <dt-bindings/leds/common.h>
#include <linux/device.h>
#include <linux/mutex_types.h>
-#include <linux/rwsem.h>
+#include <linux/rwsem_types.h>
#include <linux/spinlock_types.h>
#include <linux/timer_types.h>
#include <linux/types.h>
diff --git a/include/linux/mfd/intel-m10-bmc.h b/include/linux/mfd/intel-m10-bmc.h
index ee66c9751003..3500f5fa8057 100644
--- a/include/linux/mfd/intel-m10-bmc.h
+++ b/include/linux/mfd/intel-m10-bmc.h
@@ -11,7 +11,7 @@
#include <linux/bits.h>
#include <linux/dev_printk.h>
#include <linux/regmap.h>
-#include <linux/rwsem.h>
+#include <linux/rwsem_types.h>
#define M10BMC_N3000_LEGACY_BUILD_VER 0x300468
#define M10BMC_N3000_SYS_BASE 0x300800
diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h
index ff5d33ace0f9..ed764511bc23 100644
--- a/include/linux/mm_types.h
+++ b/include/linux/mm_types.h
@@ -12,7 +12,7 @@
#include <linux/spinlock_types.h>
#include <linux/rbtree_types.h>
#include <linux/maple_tree_types.h>
-#include <linux/rwsem.h>
+#include <linux/rwsem_types.h>
#include <linux/cpumask.h>
#include <linux/uprobes.h>
#include <linux/rcupdate.h>
diff --git a/include/linux/nfs_fs.h b/include/linux/nfs_fs.h
index 4511d8a50e15..8f14fce5d7e2 100644
--- a/include/linux/nfs_fs.h
+++ b/include/linux/nfs_fs.h
@@ -24,7 +24,7 @@
#include <linux/pagemap.h>
#include <linux/rbtree_types.h>
#include <linux/refcount_types.h>
-#include <linux/rwsem.h>
+#include <linux/rwsem_types.h>
#include <linux/sunrpc/debug.h>
#include <linux/sunrpc/auth.h>
diff --git a/include/linux/posix-clock.h b/include/linux/posix-clock.h
index ef8619f48920..f8e0c65d262d 100644
--- a/include/linux/posix-clock.h
+++ b/include/linux/posix-clock.h
@@ -11,7 +11,7 @@
#include <linux/fs.h>
#include <linux/poll.h>
#include <linux/posix-timers.h>
-#include <linux/rwsem.h>
+#include <linux/rwsem_types.h>
struct posix_clock;
struct posix_clock_context;
diff --git a/include/linux/quota.h b/include/linux/quota.h
index bf16d9d2866c..956281c84850 100644
--- a/include/linux/quota.h
+++ b/include/linux/quota.h
@@ -34,7 +34,7 @@
#include <linux/list.h>
#include <linux/mutex_types.h>
-#include <linux/rwsem.h>
+#include <linux/rwsem_types.h>
#include <linux/spinlock_types.h>
#include <linux/percpu_counter.h>
diff --git a/include/linux/rwsem.h b/include/linux/rwsem.h
index 9c29689ff505..ba9532734bf6 100644
--- a/include/linux/rwsem.h
+++ b/include/linux/rwsem.h
@@ -8,10 +8,10 @@
#ifndef _LINUX_RWSEM_H
#define _LINUX_RWSEM_H
+#include <linux/rwsem_types.h>
#include <linux/linkage.h>
#include <linux/types.h>
-#include <linux/list.h>
#include <linux/spinlock.h>
#include <linux/atomic.h>
#include <linux/err.h>
@@ -29,43 +29,6 @@
#ifndef CONFIG_PREEMPT_RT
-#ifdef CONFIG_RWSEM_SPIN_ON_OWNER
-#include <linux/osq_lock.h>
-#endif
-
-/*
- * For an uncontended rwsem, count and owner are the only fields a task
- * needs to touch when acquiring the rwsem. So they are put next to each
- * other to increase the chance that they will share the same cacheline.
- *
- * In a contended rwsem, the owner is likely the most frequently accessed
- * field in the structure as the optimistic waiter that holds the osq lock
- * will spin on owner. For an embedded rwsem, other hot fields in the
- * containing structure should be moved further away from the rwsem to
- * reduce the chance that they will share the same cacheline causing
- * cacheline bouncing problem.
- */
-struct rw_semaphore {
- atomic_long_t count;
- /*
- * Write owner or one of the read owners as well flags regarding
- * the current state of the rwsem. Can be used as a speculative
- * check to see if the write owner is running on the cpu.
- */
- atomic_long_t owner;
-#ifdef CONFIG_RWSEM_SPIN_ON_OWNER
- struct optimistic_spin_queue osq; /* spinner MCS lock */
-#endif
- raw_spinlock_t wait_lock;
- struct list_head wait_list;
-#ifdef CONFIG_DEBUG_RWSEMS
- void *magic;
-#endif
-#ifdef CONFIG_DEBUG_LOCK_ALLOC
- struct lockdep_map dep_map;
-#endif
-};
-
/* In all implementations count != 0 means locked */
static inline int rwsem_is_locked(struct rw_semaphore *sem)
{
@@ -124,15 +87,6 @@ static inline int rwsem_is_contended(struct rw_semaphore *sem)
#else /* !CONFIG_PREEMPT_RT */
-#include <linux/rwbase_rt.h>
-
-struct rw_semaphore {
- struct rwbase_rt rwbase;
-#ifdef CONFIG_DEBUG_LOCK_ALLOC
- struct lockdep_map dep_map;
-#endif
-};
-
#define __RWSEM_INITIALIZER(name) \
{ \
.rwbase = __RWBASE_INITIALIZER(name), \
diff --git a/include/linux/rwsem_types.h b/include/linux/rwsem_types.h
new file mode 100644
index 000000000000..105142147b9b
--- /dev/null
+++ b/include/linux/rwsem_types.h
@@ -0,0 +1,78 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/* rwsem.h: R/W semaphores, public interface
+ *
+ * Written by David Howells (dhowells@redhat.com).
+ * Derived from asm-i386/semaphore.h
+ */
+
+#ifndef _LINUX_RWSEM_TYPES_H
+#define _LINUX_RWSEM_TYPES_H
+
+#include <linux/list.h>
+#include <linux/spinlock_types.h>
+#include <linux/atomic.h>
+
+#ifdef CONFIG_DEBUG_LOCK_ALLOC
+#include <linux/lockdep_types.h>
+# define __RWSEM_DEP_MAP_INIT(lockname) \
+ .dep_map = { \
+ .name = #lockname, \
+ .wait_type_inner = LD_WAIT_SLEEP, \
+ },
+#else
+# define __RWSEM_DEP_MAP_INIT(lockname)
+#endif
+
+#ifndef CONFIG_PREEMPT_RT
+
+#ifdef CONFIG_RWSEM_SPIN_ON_OWNER
+#include <linux/osq_lock.h>
+#endif
+
+/*
+ * For an uncontended rwsem, count and owner are the only fields a task
+ * needs to touch when acquiring the rwsem. So they are put next to each
+ * other to increase the chance that they will share the same cacheline.
+ *
+ * In a contended rwsem, the owner is likely the most frequently accessed
+ * field in the structure as the optimistic waiter that holds the osq lock
+ * will spin on owner. For an embedded rwsem, other hot fields in the
+ * containing structure should be moved further away from the rwsem to
+ * reduce the chance that they will share the same cacheline causing
+ * cacheline bouncing problem.
+ */
+struct rw_semaphore {
+ atomic_long_t count;
+ /*
+ * Write owner or one of the read owners as well flags regarding
+ * the current state of the rwsem. Can be used as a speculative
+ * check to see if the write owner is running on the cpu.
+ */
+ atomic_long_t owner;
+#ifdef CONFIG_RWSEM_SPIN_ON_OWNER
+ struct optimistic_spin_queue osq; /* spinner MCS lock */
+#endif
+ raw_spinlock_t wait_lock;
+ struct list_head wait_list;
+#ifdef CONFIG_DEBUG_RWSEMS
+ void *magic;
+#endif
+#ifdef CONFIG_DEBUG_LOCK_ALLOC
+ struct lockdep_map dep_map;
+#endif
+};
+
+#else /* !CONFIG_PREEMPT_RT */
+
+#include <linux/rwbase_rt.h>
+
+struct rw_semaphore {
+ struct rwbase_rt rwbase;
+#ifdef CONFIG_DEBUG_LOCK_ALLOC
+ struct lockdep_map dep_map;
+#endif
+};
+
+#endif /* CONFIG_PREEMPT_RT */
+
+#endif /* _LINUX_RWSEM_TYPES_H */
diff --git a/include/linux/tty.h b/include/linux/tty.h
index 5a3815e7d73d..da820609bc77 100644
--- a/include/linux/tty.h
+++ b/include/linux/tty.h
@@ -13,7 +13,7 @@
#include <linux/mutex_types.h>
#include <linux/tty_flags.h>
#include <uapi/linux/tty.h>
-#include <linux/rwsem.h>
+#include <linux/rwsem_types.h>
#include <linux/llist.h>
diff --git a/include/linux/user_namespace.h b/include/linux/user_namespace.h
index 7d0e3418d497..c82e1b50dfcb 100644
--- a/include/linux/user_namespace.h
+++ b/include/linux/user_namespace.h
@@ -6,7 +6,7 @@
#include <linux/ns_common.h>
#include <linux/sched.h>
#include <linux/workqueue_types.h>
-#include <linux/rwsem.h>
+#include <linux/rwsem_types.h>
#include <linux/sysctl.h>
#include <linux/err.h>
diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h
index bab44a435a62..6ec5064156d9 100644
--- a/include/net/sch_generic.h
+++ b/include/net/sch_generic.h
@@ -12,7 +12,7 @@
#include <linux/list.h>
#include <linux/refcount.h>
#include <linux/mutex_types.h>
-#include <linux/rwsem.h>
+#include <linux/rwsem_types.h>
#include <linux/atomic.h>
#include <linux/hashtable.h>
#include <net/gen_stats.h>
diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h
index 64b62d1388a4..7d6216e85b0e 100644
--- a/include/rdma/ib_verbs.h
+++ b/include/rdma/ib_verbs.h
@@ -18,7 +18,7 @@
#include <linux/dma-mapping.h>
#include <linux/kref_types.h>
#include <linux/list.h>
-#include <linux/rwsem.h>
+#include <linux/rwsem_types.h>
#include <linux/workqueue_types.h>
#include <linux/irq_poll.h>
#include <uapi/linux/if_ether.h>
diff --git a/include/sound/core.h b/include/sound/core.h
index 0c512acac050..f95f6863986f 100644
--- a/include/sound/core.h
+++ b/include/sound/core.h
@@ -10,7 +10,7 @@
#include <linux/device.h>
#include <linux/sched.h> /* wake_up() */
#include <linux/mutex_types.h> /* struct mutex */
-#include <linux/rwsem.h> /* struct rw_semaphore */
+#include <linux/rwsem_types.h> /* struct rw_semaphore */
#include <linux/stringify.h>
#include <linux/printk.h>
#include <linux/wait.h>
--
2.39.2
next prev parent reply other threads:[~2024-02-11 23:15 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-11 23:14 [PATCH v4 00/35] Fast kernel headers: reduce header dependencies Max Kellermann
2024-02-11 23:14 ` [PATCH v4 01/35] include: add missing includes Max Kellermann
2024-02-11 23:14 ` [PATCH v4 02/35] include: remove unnecessary #include directives Max Kellermann
2024-02-12 9:15 ` kernel test robot
2024-02-12 12:41 ` kernel test robot
2024-02-11 23:14 ` [PATCH v4 03/35] include: reduce header dependencies by using "*_types.h" Max Kellermann
2024-02-12 4:15 ` kernel test robot
2024-02-12 5:18 ` kernel test robot
2024-02-12 5:18 ` kernel test robot
2024-02-11 23:14 ` [PATCH v4 04/35] workqueue.h: move struct delayed_work to workqueue_types.h Max Kellermann
2024-02-11 23:14 ` [PATCH v4 05/35] kref.h: move declarations to kref_types.h Max Kellermann
2024-02-11 23:14 ` [PATCH v4 06/35] kobject.h: move declarations to kobject_types.h Max Kellermann
2024-02-11 23:14 ` [PATCH v4 07/35] sysfs.h: move declarations to sysfs_types.h Max Kellermann
2024-02-11 23:14 ` [PATCH v4 08/35] maple_tree.h: move declarations to maple_tree_types.h Max Kellermann
2024-02-11 23:14 ` Max Kellermann [this message]
2024-02-11 23:14 ` [PATCH v4 10/35] uprobes.h: move declarations to uprobes_types.h Max Kellermann
2024-02-11 23:14 ` [PATCH v4 11/35] percpu_counter.h: move declarations to percpu_counter_types.h Max Kellermann
2024-02-11 23:14 ` [PATCH v4 12/35] bvec.h: move declarations to bvec_types.h Max Kellermann
2024-02-11 23:14 ` [PATCH v4 13/35] wait.h: move declarations to wait_types.h Max Kellermann
2024-02-11 23:14 ` [PATCH v4 14/35] swait.h: move declarations to swait_types.h Max Kellermann
2024-02-11 23:14 ` [PATCH v4 15/35] completion.h: move declarations to completion_types.h Max Kellermann
2024-02-11 23:14 ` [PATCH v4 16/35] device.h: move declarations to device_types.h Max Kellermann
2024-02-11 23:15 ` [PATCH v4 17/35] xarray.h: move declarations to xarray_types.h Max Kellermann
2024-02-11 23:15 ` [PATCH v4 18/35] blkdev.h: move blk_op_is_passthrough() to blk_types.h Max Kellermann
2024-02-11 23:15 ` [PATCH v4 19/35] bio.h: move bio_has_data() and bio_no_advance_iter() " Max Kellermann
2024-02-11 23:15 ` [PATCH v4 20/35] bio.h: move declarations to bio_types.h Max Kellermann
2024-02-11 23:15 ` [PATCH v4 21/35] percpu-refcount.h: move declarations to percpu-refcount_types.h Max Kellermann
2024-02-11 23:15 ` [PATCH v4 22/35] blkdev.h: move declarations to blkdev_types.h Max Kellermann
2024-02-11 23:15 ` [PATCH v4 23/35] sbitmap.h: move declarations to sbitmap_types.h Max Kellermann
2024-02-11 23:15 ` [PATCH v4 24/35] list_lru.h: move declarations to list_lru_types.h Max Kellermann
2024-02-11 23:15 ` [PATCH v4 25/35] list_bl.h: move declarations to list_bl_types.h Max Kellermann
2024-02-11 23:15 ` [PATCH v4 26/35] percpu-rwsem.h: move declarations to percpu-rwsem_types.h Max Kellermann
2024-02-11 23:15 ` [PATCH v4 27/35] quota.h: move declarations to quota_types.h Max Kellermann
2024-02-11 23:15 ` [PATCH v4 28/35] radix-tree.h: move declarations to radix-tree_types.h Max Kellermann
2024-02-11 23:15 ` [PATCH v4 29/35] linux/random.h: reduce dependencies on linux/kernel.h Max Kellermann
2024-02-11 23:15 ` [PATCH v4 30/35] linux/kernel.h: move might_sleep(), ... to sched/debug_atomic_sleep.h Max Kellermann
2024-02-11 23:15 ` [PATCH v4 31/35] linux/kernel.h: move READ and WRITE to direction.h Max Kellermann
2024-02-11 23:15 ` [PATCH v4 32/35] linux/kernel.h: move VERIFY_OCTAL_PERMISSIONS() to octal_permissions.h Max Kellermann
2024-02-11 23:15 ` [PATCH v4 33/35] linux/kernel.h: move upper/lower_*_bits macros to wordpart.h Max Kellermann
2024-02-11 23:15 ` [PATCH v4 34/35] linux/kernel.h: move PTR_IF() to ptr_util.h Max Kellermann
2024-02-11 23:15 ` [PATCH v4 35/35] include: remove lots of unnecessary <linux/kernel.h> includes Max Kellermann
2024-02-12 13:43 ` [PATCH v4 00/35] Fast kernel headers: reduce header dependencies Jason Gunthorpe
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240211231518.349442-10-max.kellermann@ionos.com \
--to=max.kellermann@ionos.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.