Skip to content

Commit 6dc69d3

Browse files
committed
Merge tag 'driver-core-5.17-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core
Pull driver core updates from Greg KH: "Here is the set of changes for the driver core for 5.17-rc1. Lots of little things here, including: - kobj_type cleanups - auxiliary_bus documentation updates - auxiliary_device conversions for some drivers (relevant subsystems all have provided acks for these) - kernfs lock contention reduction for some workloads - other tiny cleanups and changes. All of these have been in linux-next for a while with no reported issues" * tag 'driver-core-5.17-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core: (43 commits) kobject documentation: remove default_attrs information drivers/firmware: Add missing platform_device_put() in sysfb_create_simplefb debugfs: lockdown: Allow reading debugfs files that are not world readable driver core: Make bus notifiers in right order in really_probe() driver core: Move driver_sysfs_remove() after driver_sysfs_add() firmware: edd: remove empty default_attrs array firmware: dmi-sysfs: use default_groups in kobj_type qemu_fw_cfg: use default_groups in kobj_type firmware: memmap: use default_groups in kobj_type sh: sq: use default_groups in kobj_type headers/uninline: Uninline single-use function: kobject_has_children() devtmpfs: mount with noexec and nosuid driver core: Simplify async probe test code by using ktime_ms_delta() nilfs2: use default_groups in kobj_type kobject: remove kset from struct kset_uevent_ops callbacks driver core: make kobj_type constant. driver core: platform: document registration-failure requirement vdpa/mlx5: Use auxiliary_device driver data helpers net/mlx5e: Use auxiliary_device driver data helpers soundwire: intel: Use auxiliary_device driver data helpers ...
2 parents e3084ed + c9512fd commit 6dc69d3

File tree

58 files changed

+1217
-755
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+1217
-755
lines changed

Documentation/ABI/testing/sysfs-devices-system-cpu

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -666,3 +666,18 @@ Description: Preferred MTE tag checking mode
666666
================ ==============================================
667667

668668
See also: Documentation/arm64/memory-tagging-extension.rst
669+
670+
What: /sys/devices/system/cpu/nohz_full
671+
Date: Apr 2015
672+
Contact: Linux kernel mailing list <[email protected]>
673+
Description:
674+
(RO) the list of CPUs that are in nohz_full mode.
675+
These CPUs are set by boot parameter "nohz_full=".
676+
677+
What: /sys/devices/system/cpu/isolated
678+
Date: Apr 2015
679+
Contact: Linux kernel mailing list <[email protected]>
680+
Description:
681+
(RO) the list of CPUs that are isolated and don't
682+
participate in load balancing. These CPUs are set by
683+
boot parameter "isolcpus=".

Documentation/admin-guide/cputopology.rst

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,9 @@ to /proc/cpuinfo output of some architectures. They reside in
88
Documentation/ABI/stable/sysfs-devices-system-cpu.
99

1010
Architecture-neutral, drivers/base/topology.c, exports these attributes.
11-
However, the book and drawer related sysfs files will only be created if
12-
CONFIG_SCHED_BOOK and CONFIG_SCHED_DRAWER are selected, respectively.
13-
14-
CONFIG_SCHED_BOOK and CONFIG_SCHED_DRAWER are currently only used on s390,
15-
where they reflect the cpu and cache hierarchy.
11+
However the die, cluster, book, and drawer hierarchy related sysfs files will
12+
only be created if an architecture provides the related macros as described
13+
below.
1614

1715
For an architecture to support this feature, it must define some of
1816
these macros in include/asm-XXX/topology.h::
@@ -43,15 +41,14 @@ not defined by include/asm-XXX/topology.h:
4341
2) topology_die_id: -1
4442
3) topology_cluster_id: -1
4543
4) topology_core_id: 0
46-
5) topology_sibling_cpumask: just the given CPU
47-
6) topology_core_cpumask: just the given CPU
48-
7) topology_cluster_cpumask: just the given CPU
49-
8) topology_die_cpumask: just the given CPU
50-
51-
For architectures that don't support books (CONFIG_SCHED_BOOK) there are no
52-
default definitions for topology_book_id() and topology_book_cpumask().
53-
For architectures that don't support drawers (CONFIG_SCHED_DRAWER) there are
54-
no default definitions for topology_drawer_id() and topology_drawer_cpumask().
44+
5) topology_book_id: -1
45+
6) topology_drawer_id: -1
46+
7) topology_sibling_cpumask: just the given CPU
47+
8) topology_core_cpumask: just the given CPU
48+
9) topology_cluster_cpumask: just the given CPU
49+
10) topology_die_cpumask: just the given CPU
50+
11) topology_book_cpumask: just the given CPU
51+
12) topology_drawer_cpumask: just the given CPU
5552

5653
Additionally, CPU topology information is provided under
5754
/sys/devices/system/cpu and includes these files. The internal

Documentation/core-api/kobject.rst

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ Initialization of kobjects
118118
Code which creates a kobject must, of course, initialize that object. Some
119119
of the internal fields are setup with a (mandatory) call to kobject_init()::
120120

121-
void kobject_init(struct kobject *kobj, struct kobj_type *ktype);
121+
void kobject_init(struct kobject *kobj, const struct kobj_type *ktype);
122122

123123
The ktype is required for a kobject to be created properly, as every kobject
124124
must have an associated kobj_type. After calling kobject_init(), to
@@ -156,7 +156,7 @@ kobject_name()::
156156
There is a helper function to both initialize and add the kobject to the
157157
kernel at the same time, called surprisingly enough kobject_init_and_add()::
158158

159-
int kobject_init_and_add(struct kobject *kobj, struct kobj_type *ktype,
159+
int kobject_init_and_add(struct kobject *kobj, const struct kobj_type *ktype,
160160
struct kobject *parent, const char *fmt, ...);
161161

162162
The arguments are the same as the individual kobject_init() and
@@ -299,7 +299,6 @@ kobj_type::
299299
struct kobj_type {
300300
void (*release)(struct kobject *kobj);
301301
const struct sysfs_ops *sysfs_ops;
302-
struct attribute **default_attrs;
303302
const struct attribute_group **default_groups;
304303
const struct kobj_ns_type_operations *(*child_ns_type)(struct kobject *kobj);
305304
const void *(*namespace)(struct kobject *kobj);
@@ -313,10 +312,10 @@ call kobject_init() or kobject_init_and_add().
313312

314313
The release field in struct kobj_type is, of course, a pointer to the
315314
release() method for this type of kobject. The other two fields (sysfs_ops
316-
and default_attrs) control how objects of this type are represented in
315+
and default_groups) control how objects of this type are represented in
317316
sysfs; they are beyond the scope of this document.
318317

319-
The default_attrs pointer is a list of default attributes that will be
318+
The default_groups pointer is a list of default attributes that will be
320319
automatically created for any kobject that is registered with this ktype.
321320

322321

@@ -373,10 +372,9 @@ If a kset wishes to control the uevent operations of the kobjects
373372
associated with it, it can use the struct kset_uevent_ops to handle it::
374373

375374
struct kset_uevent_ops {
376-
int (* const filter)(struct kset *kset, struct kobject *kobj);
377-
const char *(* const name)(struct kset *kset, struct kobject *kobj);
378-
int (* const uevent)(struct kset *kset, struct kobject *kobj,
379-
struct kobj_uevent_env *env);
375+
int (* const filter)(struct kobject *kobj);
376+
const char *(* const name)(struct kobject *kobj);
377+
int (* const uevent)(struct kobject *kobj, struct kobj_uevent_env *env);
380378
};
381379

382380

Documentation/driver-api/auxiliary_bus.rst

Lines changed: 25 additions & 211 deletions
Original file line numberDiff line numberDiff line change
@@ -6,231 +6,45 @@
66
Auxiliary Bus
77
=============
88

9-
In some subsystems, the functionality of the core device (PCI/ACPI/other) is
10-
too complex for a single device to be managed by a monolithic driver
11-
(e.g. Sound Open Firmware), multiple devices might implement a common
12-
intersection of functionality (e.g. NICs + RDMA), or a driver may want to
13-
export an interface for another subsystem to drive (e.g. SIOV Physical Function
14-
export Virtual Function management). A split of the functionality into child-
15-
devices representing sub-domains of functionality makes it possible to
16-
compartmentalize, layer, and distribute domain-specific concerns via a Linux
17-
device-driver model.
18-
19-
An example for this kind of requirement is the audio subsystem where a single
20-
IP is handling multiple entities such as HDMI, Soundwire, local devices such as
21-
mics/speakers etc. The split for the core's functionality can be arbitrary or
22-
be defined by the DSP firmware topology and include hooks for test/debug. This
23-
allows for the audio core device to be minimal and focused on hardware-specific
24-
control and communication.
25-
26-
Each auxiliary_device represents a part of its parent functionality. The
27-
generic behavior can be extended and specialized as needed by encapsulating an
28-
auxiliary_device within other domain-specific structures and the use of .ops
29-
callbacks. Devices on the auxiliary bus do not share any structures and the use
30-
of a communication channel with the parent is domain-specific.
31-
32-
Note that ops are intended as a way to augment instance behavior within a class
33-
of auxiliary devices, it is not the mechanism for exporting common
34-
infrastructure from the parent. Consider EXPORT_SYMBOL_NS() to convey
35-
infrastructure from the parent module to the auxiliary module(s).
36-
9+
.. kernel-doc:: drivers/base/auxiliary.c
10+
:doc: PURPOSE
3711

3812
When Should the Auxiliary Bus Be Used
3913
=====================================
4014

41-
The auxiliary bus is to be used when a driver and one or more kernel modules,
42-
who share a common header file with the driver, need a mechanism to connect and
43-
provide access to a shared object allocated by the auxiliary_device's
44-
registering driver. The registering driver for the auxiliary_device(s) and the
45-
kernel module(s) registering auxiliary_drivers can be from the same subsystem,
46-
or from multiple subsystems.
47-
48-
The emphasis here is on a common generic interface that keeps subsystem
49-
customization out of the bus infrastructure.
50-
51-
One example is a PCI network device that is RDMA-capable and exports a child
52-
device to be driven by an auxiliary_driver in the RDMA subsystem. The PCI
53-
driver allocates and registers an auxiliary_device for each physical
54-
function on the NIC. The RDMA driver registers an auxiliary_driver that claims
55-
each of these auxiliary_devices. This conveys data/ops published by the parent
56-
PCI device/driver to the RDMA auxiliary_driver.
57-
58-
Another use case is for the PCI device to be split out into multiple sub
59-
functions. For each sub function an auxiliary_device is created. A PCI sub
60-
function driver binds to such devices that creates its own one or more class
61-
devices. A PCI sub function auxiliary device is likely to be contained in a
62-
struct with additional attributes such as user defined sub function number and
63-
optional attributes such as resources and a link to the parent device. These
64-
attributes could be used by systemd/udev; and hence should be initialized
65-
before a driver binds to an auxiliary_device.
66-
67-
A key requirement for utilizing the auxiliary bus is that there is no
68-
dependency on a physical bus, device, register accesses or regmap support.
69-
These individual devices split from the core cannot live on the platform bus as
70-
they are not physical devices that are controlled by DT/ACPI. The same
71-
argument applies for not using MFD in this scenario as MFD relies on individual
72-
function devices being physical devices.
73-
74-
Auxiliary Device
75-
================
76-
77-
An auxiliary_device represents a part of its parent device's functionality. It
78-
is given a name that, combined with the registering drivers KBUILD_MODNAME,
79-
creates a match_name that is used for driver binding, and an id that combined
80-
with the match_name provide a unique name to register with the bus subsystem.
81-
82-
Registering an auxiliary_device is a two-step process. First call
83-
auxiliary_device_init(), which checks several aspects of the auxiliary_device
84-
struct and performs a device_initialize(). After this step completes, any
85-
error state must have a call to auxiliary_device_uninit() in its resolution path.
86-
The second step in registering an auxiliary_device is to perform a call to
87-
auxiliary_device_add(), which sets the name of the device and add the device to
88-
the bus.
89-
90-
Unregistering an auxiliary_device is also a two-step process to mirror the
91-
register process. First call auxiliary_device_delete(), then call
92-
auxiliary_device_uninit().
93-
94-
.. code-block:: c
95-
96-
struct auxiliary_device {
97-
struct device dev;
98-
const char *name;
99-
u32 id;
100-
};
101-
102-
If two auxiliary_devices both with a match_name "mod.foo" are registered onto
103-
the bus, they must have unique id values (e.g. "x" and "y") so that the
104-
registered devices names are "mod.foo.x" and "mod.foo.y". If match_name + id
105-
are not unique, then the device_add fails and generates an error message.
106-
107-
The auxiliary_device.dev.type.release or auxiliary_device.dev.release must be
108-
populated with a non-NULL pointer to successfully register the auxiliary_device.
109-
110-
The auxiliary_device.dev.parent must also be populated.
15+
.. kernel-doc:: drivers/base/auxiliary.c
16+
:doc: USAGE
17+
18+
19+
Auxiliary Device Creation
20+
=========================
21+
22+
.. kernel-doc:: include/linux/auxiliary_bus.h
23+
:identifiers: auxiliary_device
24+
25+
.. kernel-doc:: drivers/base/auxiliary.c
26+
:identifiers: auxiliary_device_init __auxiliary_device_add
27+
auxiliary_find_device
11128

11229
Auxiliary Device Memory Model and Lifespan
11330
------------------------------------------
11431

115-
The registering driver is the entity that allocates memory for the
116-
auxiliary_device and register it on the auxiliary bus. It is important to note
117-
that, as opposed to the platform bus, the registering driver is wholly
118-
responsible for the management for the memory used for the driver object.
119-
120-
A parent object, defined in the shared header file, contains the
121-
auxiliary_device. It also contains a pointer to the shared object(s), which
122-
also is defined in the shared header. Both the parent object and the shared
123-
object(s) are allocated by the registering driver. This layout allows the
124-
auxiliary_driver's registering module to perform a container_of() call to go
125-
from the pointer to the auxiliary_device, that is passed during the call to the
126-
auxiliary_driver's probe function, up to the parent object, and then have
127-
access to the shared object(s).
128-
129-
The memory for the auxiliary_device is freed only in its release() callback
130-
flow as defined by its registering driver.
131-
132-
The memory for the shared object(s) must have a lifespan equal to, or greater
133-
than, the lifespan of the memory for the auxiliary_device. The auxiliary_driver
134-
should only consider that this shared object is valid as long as the
135-
auxiliary_device is still registered on the auxiliary bus. It is up to the
136-
registering driver to manage (e.g. free or keep available) the memory for the
137-
shared object beyond the life of the auxiliary_device.
138-
139-
The registering driver must unregister all auxiliary devices before its own
140-
driver.remove() is completed.
32+
.. kernel-doc:: include/linux/auxiliary_bus.h
33+
:doc: DEVICE_LIFESPAN
34+
14135

14236
Auxiliary Drivers
14337
=================
14438

145-
Auxiliary drivers follow the standard driver model convention, where
146-
discovery/enumeration is handled by the core, and drivers
147-
provide probe() and remove() methods. They support power management
148-
and shutdown notifications using the standard conventions.
149-
150-
.. code-block:: c
39+
.. kernel-doc:: include/linux/auxiliary_bus.h
40+
:identifiers: auxiliary_driver module_auxiliary_driver
15141

152-
struct auxiliary_driver {
153-
int (*probe)(struct auxiliary_device *,
154-
const struct auxiliary_device_id *id);
155-
void (*remove)(struct auxiliary_device *);
156-
void (*shutdown)(struct auxiliary_device *);
157-
int (*suspend)(struct auxiliary_device *, pm_message_t);
158-
int (*resume)(struct auxiliary_device *);
159-
struct device_driver driver;
160-
const struct auxiliary_device_id *id_table;
161-
};
162-
163-
Auxiliary drivers register themselves with the bus by calling
164-
auxiliary_driver_register(). The id_table contains the match_names of auxiliary
165-
devices that a driver can bind with.
42+
.. kernel-doc:: drivers/base/auxiliary.c
43+
:identifiers: __auxiliary_driver_register auxiliary_driver_unregister
16644

16745
Example Usage
16846
=============
16947

170-
Auxiliary devices are created and registered by a subsystem-level core device
171-
that needs to break up its functionality into smaller fragments. One way to
172-
extend the scope of an auxiliary_device is to encapsulate it within a domain-
173-
pecific structure defined by the parent device. This structure contains the
174-
auxiliary_device and any associated shared data/callbacks needed to establish
175-
the connection with the parent.
176-
177-
An example is:
178-
179-
.. code-block:: c
180-
181-
struct foo {
182-
struct auxiliary_device auxdev;
183-
void (*connect)(struct auxiliary_device *auxdev);
184-
void (*disconnect)(struct auxiliary_device *auxdev);
185-
void *data;
186-
};
187-
188-
The parent device then registers the auxiliary_device by calling
189-
auxiliary_device_init(), and then auxiliary_device_add(), with the pointer to
190-
the auxdev member of the above structure. The parent provides a name for the
191-
auxiliary_device that, combined with the parent's KBUILD_MODNAME, creates a
192-
match_name that is be used for matching and binding with a driver.
193-
194-
Whenever an auxiliary_driver is registered, based on the match_name, the
195-
auxiliary_driver's probe() is invoked for the matching devices. The
196-
auxiliary_driver can also be encapsulated inside custom drivers that make the
197-
core device's functionality extensible by adding additional domain-specific ops
198-
as follows:
199-
200-
.. code-block:: c
201-
202-
struct my_ops {
203-
void (*send)(struct auxiliary_device *auxdev);
204-
void (*receive)(struct auxiliary_device *auxdev);
205-
};
206-
207-
208-
struct my_driver {
209-
struct auxiliary_driver auxiliary_drv;
210-
const struct my_ops ops;
211-
};
212-
213-
An example of this type of usage is:
214-
215-
.. code-block:: c
216-
217-
const struct auxiliary_device_id my_auxiliary_id_table[] = {
218-
{ .name = "foo_mod.foo_dev" },
219-
{ },
220-
};
221-
222-
const struct my_ops my_custom_ops = {
223-
.send = my_tx,
224-
.receive = my_rx,
225-
};
226-
227-
const struct my_driver my_drv = {
228-
.auxiliary_drv = {
229-
.name = "myauxiliarydrv",
230-
.id_table = my_auxiliary_id_table,
231-
.probe = my_probe,
232-
.remove = my_remove,
233-
.shutdown = my_shutdown,
234-
},
235-
.ops = my_custom_ops,
236-
};
48+
.. kernel-doc:: drivers/base/auxiliary.c
49+
:doc: EXAMPLE
50+

0 commit comments

Comments
 (0)