100 lines
2.8 KiB
ReStructuredText
100 lines
2.8 KiB
ReStructuredText
Linux Devlink Documentation
|
|
===========================
|
|
|
|
devlink is an API to expose device information and resources not directly
|
|
related to any device class, such as chip-wide/switch-ASIC-wide configuration.
|
|
|
|
Locking
|
|
-------
|
|
|
|
Driver facing APIs are currently transitioning to allow more explicit
|
|
locking. Drivers can use the existing ``devlink_*`` set of APIs, or
|
|
new APIs prefixed by ``devl_*``. The older APIs handle all the locking
|
|
in devlink core, but don't allow registration of most sub-objects once
|
|
the main devlink object is itself registered. The newer ``devl_*`` APIs assume
|
|
the devlink instance lock is already held. Drivers can take the instance
|
|
lock by calling ``devl_lock()``. It is also held all callbacks of devlink
|
|
netlink commands.
|
|
|
|
Drivers are encouraged to use the devlink instance lock for their own needs.
|
|
|
|
Drivers need to be cautious when taking devlink instance lock and
|
|
taking RTNL lock at the same time. Devlink instance lock needs to be taken
|
|
first, only after that RTNL lock could be taken.
|
|
|
|
Nested instances
|
|
----------------
|
|
|
|
Some objects, like linecards or port functions, could have another
|
|
devlink instances created underneath. In that case, drivers should make
|
|
sure to respect following rules:
|
|
|
|
- Lock ordering should be maintained. If driver needs to take instance
|
|
lock of both nested and parent instances at the same time, devlink
|
|
instance lock of the parent instance should be taken first, only then
|
|
instance lock of the nested instance could be taken.
|
|
- Driver should use object-specific helpers to setup the
|
|
nested relationship:
|
|
|
|
- ``devl_nested_devlink_set()`` - called to setup devlink -> nested
|
|
devlink relationship (could be user for multiple nested instances.
|
|
- ``devl_port_fn_devlink_set()`` - called to setup port function ->
|
|
nested devlink relationship.
|
|
- ``devlink_linecard_nested_dl_set()`` - called to setup linecard ->
|
|
nested devlink relationship.
|
|
|
|
The nested devlink info is exposed to the userspace over object-specific
|
|
attributes of devlink netlink.
|
|
|
|
Interface documentation
|
|
-----------------------
|
|
|
|
The following pages describe various interfaces available through devlink in
|
|
general.
|
|
|
|
.. toctree::
|
|
:maxdepth: 1
|
|
|
|
devlink-dpipe
|
|
devlink-health
|
|
devlink-info
|
|
devlink-flash
|
|
devlink-params
|
|
devlink-port
|
|
devlink-region
|
|
devlink-resource
|
|
devlink-reload
|
|
devlink-selftests
|
|
devlink-trap
|
|
devlink-linecard
|
|
devlink-eswitch-attr
|
|
|
|
Driver-specific documentation
|
|
-----------------------------
|
|
|
|
Each driver that implements ``devlink`` is expected to document what
|
|
parameters, info versions, and other features it supports.
|
|
|
|
.. toctree::
|
|
:maxdepth: 1
|
|
|
|
bnxt
|
|
etas_es58x
|
|
hns3
|
|
i40e
|
|
ionic
|
|
ice
|
|
mlx4
|
|
mlx5
|
|
mlxsw
|
|
mv88e6xxx
|
|
netdevsim
|
|
nfp
|
|
qed
|
|
ti-cpsw-switch
|
|
am65-nuss-cpsw-switch
|
|
prestera
|
|
iosm
|
|
octeontx2
|
|
sfc
|