Messages in this thread Patch in this message | | | From | Max Kellermann <> | Subject | [PATCH v5 07/35] sysfs.h: move declarations to sysfs_types.h | Date | Mon, 12 Feb 2024 12:54:32 +0100 |
| |
By providing declarations in a lean header, we can reduce header dependencies.
Signed-off-by: Max Kellermann <max.kellermann@ionos.com> --- drivers/firmware/dmi-sysfs.c | 1 + drivers/firmware/memmap.c | 1 + drivers/input/vivaldi-fmap.c | 1 + include/linux/device/bus.h | 2 +- include/linux/iio/buffer_impl.h | 3 +- include/linux/kobject.h | 2 +- include/linux/module.h | 2 +- include/linux/perf_event.h | 2 +- include/linux/sysfs.h | 63 +---------------------- include/linux/sysfs_types.h | 89 +++++++++++++++++++++++++++++++++ include/linux/thermal.h | 2 +- include/net/netdev_rx_queue.h | 2 +- include/rdma/ib_sysfs.h | 2 +- kernel/kheaders.c | 1 + lib/kobject.c | 1 + mm/cma_sysfs.c | 1 + 16 files changed, 105 insertions(+), 70 deletions(-) create mode 100644 include/linux/sysfs_types.h
diff --git a/drivers/firmware/dmi-sysfs.c b/drivers/firmware/dmi-sysfs.c index b6a72128e818..158cc26a0331 100644 --- a/drivers/firmware/dmi-sysfs.c +++ b/drivers/firmware/dmi-sysfs.c @@ -25,6 +25,7 @@ #include <linux/dmi.h> #include <linux/capability.h> #include <linux/slab.h> +#include <linux/sysfs.h> #include <linux/list.h> #include <linux/io.h> #include <asm/dmi.h> diff --git a/drivers/firmware/memmap.c b/drivers/firmware/memmap.c index 4cf473815372..a188b204a012 100644 --- a/drivers/firmware/memmap.c +++ b/drivers/firmware/memmap.c @@ -14,6 +14,7 @@ #include <linux/types.h> #include <linux/memblock.h> #include <linux/slab.h> +#include <linux/sysfs.h> #include <linux/mm.h> /* diff --git a/drivers/input/vivaldi-fmap.c b/drivers/input/vivaldi-fmap.c index 0d29ec014e2f..72845c0720f2 100644 --- a/drivers/input/vivaldi-fmap.c +++ b/drivers/input/vivaldi-fmap.c @@ -9,6 +9,7 @@ #include <linux/input/vivaldi-fmap.h> #include <linux/kernel.h> #include <linux/module.h> +#include <linux/sysfs.h> #include <linux/types.h> /** diff --git a/include/linux/device/bus.h b/include/linux/device/bus.h index bdd8ac64f629..a6fc75a825a3 100644 --- a/include/linux/device/bus.h +++ b/include/linux/device/bus.h @@ -16,7 +16,7 @@ #include <linux/klist.h> #include <linux/pm.h> -#include <linux/sysfs.h> // for struct attribute +#include <linux/sysfs_types.h> // for struct attribute struct device_driver; struct device_node; diff --git a/include/linux/iio/buffer_impl.h b/include/linux/iio/buffer_impl.h index 184f8c399854..df4cad6a8c8e 100644 --- a/include/linux/iio/buffer_impl.h +++ b/include/linux/iio/buffer_impl.h @@ -1,7 +1,8 @@ /* SPDX-License-Identifier: GPL-2.0 */ #ifndef _IIO_BUFFER_GENERIC_IMPL_H_ #define _IIO_BUFFER_GENERIC_IMPL_H_ -#include <linux/sysfs.h> + +#include <linux/sysfs_types.h> // for struct attribute_group #include <linux/kref_types.h> #ifdef CONFIG_IIO_BUFFER diff --git a/include/linux/kobject.h b/include/linux/kobject.h index cd29809a05e4..462a2d604b03 100644 --- a/include/linux/kobject.h +++ b/include/linux/kobject.h @@ -18,7 +18,7 @@ #include <linux/kobject_types.h> #include <linux/types.h> #include <linux/list.h> -#include <linux/sysfs.h> +#include <linux/sysfs_types.h> // for struct attribute #include <linux/compiler.h> #include <linux/container_of.h> #include <linux/spinlock_types.h> diff --git a/include/linux/module.h b/include/linux/module.h index 426d3bdf83bb..ba3c0d129cb5 100644 --- a/include/linux/module.h +++ b/include/linux/module.h @@ -27,7 +27,7 @@ #include <linux/tracepoint-defs.h> #include <linux/srcu.h> #include <linux/static_call_types.h> -#include <linux/sysfs.h> // for struct attribute +#include <linux/sysfs_types.h> // for struct attribute #include <linux/dynamic_debug.h> #include <linux/percpu.h> diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h index eaf5d5f76e0e..b3aec977b0e4 100644 --- a/include/linux/perf_event.h +++ b/include/linux/perf_event.h @@ -55,7 +55,7 @@ struct perf_guest_info_callbacks { #include <linux/static_key.h> #include <linux/jump_label_ratelimit.h> #include <linux/atomic.h> -#include <linux/sysfs.h> +#include <linux/sysfs_types.h> #include <linux/perf_regs.h> #include <linux/cgroup.h> #include <linux/refcount_types.h> diff --git a/include/linux/sysfs.h b/include/linux/sysfs.h index 6fed6884d2e6..0500b023b5cc 100644 --- a/include/linux/sysfs.h +++ b/include/linux/sysfs.h @@ -13,6 +13,7 @@ #ifndef _SYSFS_H_ #define _SYSFS_H_ +#include <linux/sysfs_types.h> #include <linux/kernfs.h> #include <linux/kernel.h> // for VERIFY_OCTAL_PERMISSIONS() #include <linux/compiler.h> @@ -23,16 +24,6 @@ struct kobject; struct module; struct bin_attribute; -struct attribute { - const char *name; - umode_t mode; -#ifdef CONFIG_DEBUG_LOCK_ALLOC - bool ignore_lockdep:1; - struct lock_class_key *key; - struct lock_class_key skey; -#endif -}; - /** * sysfs_attr_init - initialize a dynamically allocated sysfs attribute * @attr: struct attribute to initialize @@ -54,39 +45,6 @@ do { \ #define sysfs_attr_init(attr) do {} while (0) #endif -/** - * struct attribute_group - data structure used to declare an attribute group. - * @name: Optional: Attribute group name - * If specified, the attribute group will be created in - * a new subdirectory with this name. - * @is_visible: Optional: Function to return permissions associated with an - * attribute of the group. Will be called repeatedly for each - * non-binary attribute in the group. Only read/write - * permissions as well as SYSFS_PREALLOC are accepted. Must - * return 0 if an attribute is not visible. The returned value - * will replace static permissions defined in struct attribute. - * @is_bin_visible: - * Optional: Function to return permissions associated with a - * binary attribute of the group. Will be called repeatedly - * for each binary attribute in the group. Only read/write - * permissions as well as SYSFS_PREALLOC are accepted. Must - * return 0 if a binary attribute is not visible. The returned - * value will replace static permissions defined in - * struct bin_attribute. - * @attrs: Pointer to NULL terminated list of attributes. - * @bin_attrs: Pointer to NULL terminated list of binary attributes. - * Either attrs or bin_attrs or both must be provided. - */ -struct attribute_group { - const char *name; - umode_t (*is_visible)(struct kobject *, - struct attribute *, int); - umode_t (*is_bin_visible)(struct kobject *, - struct bin_attribute *, int); - struct attribute **attrs; - struct bin_attribute **bin_attrs; -}; - /* * Use these macros to make defining attributes easier. * See include/linux/device.h for examples.. @@ -164,25 +122,6 @@ static const struct attribute_group _name##_group = { \ }; \ __ATTRIBUTE_GROUPS(_name) -struct file; -struct vm_area_struct; -struct address_space; - -struct bin_attribute { - struct attribute attr; - size_t size; - void *private; - struct address_space *(*f_mapping)(void); - ssize_t (*read)(struct file *, struct kobject *, struct bin_attribute *, - char *, loff_t, size_t); - ssize_t (*write)(struct file *, struct kobject *, struct bin_attribute *, - char *, loff_t, size_t); - loff_t (*llseek)(struct file *, struct kobject *, struct bin_attribute *, - loff_t, int); - int (*mmap)(struct file *, struct kobject *, struct bin_attribute *attr, - struct vm_area_struct *vma); -}; - /** * sysfs_bin_attr_init - initialize a dynamically allocated bin_attribute * @attr: struct bin_attribute to initialize diff --git a/include/linux/sysfs_types.h b/include/linux/sysfs_types.h new file mode 100644 index 000000000000..2840a1935ea1 --- /dev/null +++ b/include/linux/sysfs_types.h @@ -0,0 +1,89 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * sysfs.h - definitions for the device driver filesystem + * + * Copyright (c) 2001,2002 Patrick Mochel + * Copyright (c) 2004 Silicon Graphics, Inc. + * Copyright (c) 2007 SUSE Linux Products GmbH + * Copyright (c) 2007 Tejun Heo <teheo@suse.de> + * + * Please see Documentation/filesystems/sysfs.rst for more information. + */ + +#ifndef _SYSFS_TYPES_H_ +#define _SYSFS_TYPES_H_ + +#include <linux/types.h> +#include <linux/lockdep_types.h> + +struct kobject; +struct module; +struct bin_attribute; + +struct attribute { + const char *name; + umode_t mode; +#ifdef CONFIG_DEBUG_LOCK_ALLOC + bool ignore_lockdep:1; + struct lock_class_key *key; + struct lock_class_key skey; +#endif +}; + +/** + * struct attribute_group - data structure used to declare an attribute group. + * @name: Optional: Attribute group name + * If specified, the attribute group will be created in + * a new subdirectory with this name. + * @is_visible: Optional: Function to return permissions associated with an + * attribute of the group. Will be called repeatedly for each + * non-binary attribute in the group. Only read/write + * permissions as well as SYSFS_PREALLOC are accepted. Must + * return 0 if an attribute is not visible. The returned value + * will replace static permissions defined in struct attribute. + * @is_bin_visible: + * Optional: Function to return permissions associated with a + * binary attribute of the group. Will be called repeatedly + * for each binary attribute in the group. Only read/write + * permissions as well as SYSFS_PREALLOC are accepted. Must + * return 0 if a binary attribute is not visible. The returned + * value will replace static permissions defined in + * struct bin_attribute. + * @attrs: Pointer to NULL terminated list of attributes. + * @bin_attrs: Pointer to NULL terminated list of binary attributes. + * Either attrs or bin_attrs or both must be provided. + */ +struct attribute_group { + const char *name; + umode_t (*is_visible)(struct kobject *, + struct attribute *, int); + umode_t (*is_bin_visible)(struct kobject *, + struct bin_attribute *, int); + struct attribute **attrs; + struct bin_attribute **bin_attrs; +}; + +struct file; +struct vm_area_struct; +struct address_space; + +struct bin_attribute { + struct attribute attr; + size_t size; +#ifdef __cplusplus + void *private_; +#else + void *private; +#endif + struct address_space *(*f_mapping)(void); + ssize_t (*read)(struct file *, struct kobject *, struct bin_attribute *, + char *, loff_t, size_t); + ssize_t (*write)(struct file *, struct kobject *, struct bin_attribute *, + char *, loff_t, size_t); + loff_t (*llseek)(struct file *, struct kobject *, struct bin_attribute *, + loff_t, int); + int (*mmap)(struct file *, struct kobject *, struct bin_attribute *attr, + struct vm_area_struct *vma); +}; + +#endif /* _SYSFS_TYPES_H_ */ diff --git a/include/linux/thermal.h b/include/linux/thermal.h index e0bdda259a29..14450673bd8b 100644 --- a/include/linux/thermal.h +++ b/include/linux/thermal.h @@ -12,7 +12,7 @@ #include <linux/idr.h> #include <linux/device.h> -#include <linux/sysfs.h> +#include <linux/sysfs_types.h> #include <linux/workqueue_types.h> #include <uapi/linux/thermal.h> diff --git a/include/net/netdev_rx_queue.h b/include/net/netdev_rx_queue.h index 4841ec031857..7122cb4b7e44 100644 --- a/include/net/netdev_rx_queue.h +++ b/include/net/netdev_rx_queue.h @@ -4,7 +4,7 @@ #include <linux/kobject_types.h> #include <linux/netdevice.h> -#include <linux/sysfs.h> +#include <linux/sysfs_types.h> #include <net/xdp.h> /* This structure contains an instance of an RX queue. */ diff --git a/include/rdma/ib_sysfs.h b/include/rdma/ib_sysfs.h index 3b77cfd74d9a..ece1b920c690 100644 --- a/include/rdma/ib_sysfs.h +++ b/include/rdma/ib_sysfs.h @@ -5,7 +5,7 @@ #ifndef DEF_RDMA_IB_SYSFS_H #define DEF_RDMA_IB_SYSFS_H -#include <linux/sysfs.h> +#include <linux/sysfs_types.h> struct ib_device; diff --git a/kernel/kheaders.c b/kernel/kheaders.c index 42163c9e94e5..b48bd8a23cda 100644 --- a/kernel/kheaders.c +++ b/kernel/kheaders.c @@ -10,6 +10,7 @@ #include <linux/module.h> #include <linux/kobject.h> #include <linux/init.h> +#include <linux/sysfs.h> /* * Define kernel_headers_data and kernel_headers_data_end, within which the diff --git a/lib/kobject.c b/lib/kobject.c index 48ba445604f8..f53564596438 100644 --- a/lib/kobject.c +++ b/lib/kobject.c @@ -22,6 +22,7 @@ #include <linux/uidgid.h> #include <linux/workqueue.h> #include <linux/kref.h> +#include <linux/sysfs.h> /** * kobject_namespace() - Return @kobj's namespace tag. diff --git a/mm/cma_sysfs.c b/mm/cma_sysfs.c index f50db3973171..2c75ea0827c4 100644 --- a/mm/cma_sysfs.c +++ b/mm/cma_sysfs.c @@ -8,6 +8,7 @@ #include <linux/cma.h> #include <linux/kernel.h> #include <linux/slab.h> +#include <linux/sysfs.h> #include "cma.h" -- 2.39.2
| |