| 1 | Linux Devlink Documentation
|
| 2 | ===========================
|
| 3 |
|
| 4 | devlink is an API to expose device information and resources not directly
|
| 5 | related to any device class, such as chip-wide/switch-ASIC-wide configuration.
|
| 6 |
|
| 7 | Locking
|
| 8 | -------
|
| 9 |
|
| 10 | Driver facing APIs are currently transitioning to allow more explicit
|
| 11 | locking. Drivers can use the existing ``devlink_*`` set of APIs, or
|
| 12 | new APIs prefixed by ``devl_*``. The older APIs handle all the locking
|
| 13 | in devlink core, but don't allow registration of most sub-objects once
|
| 14 | the main devlink object is itself registered. The newer ``devl_*`` APIs assume
|
| 15 | the devlink instance lock is already held. Drivers can take the instance
|
| 16 | lock by calling ``devl_lock()``. It is also held across all callbacks of
|
| 17 | devlink netlink commands.
|
| 18 |
|
| 19 | Drivers are encouraged to use the devlink instance lock for their own needs.
|
| 20 |
|
| 21 | Drivers need to be cautious when taking devlink instance lock and
|
| 22 | taking RTNL lock at the same time. Devlink instance lock needs to be taken
|
| 23 | first, only after that RTNL lock could be taken.
|
| 24 |
|
| 25 | Nested instances
|
| 26 | ----------------
|
| 27 |
|
| 28 | Some objects, like linecards or port functions, could have another
|
| 29 | devlink instances created underneath. In that case, drivers should make
|
| 30 | sure to respect following rules:
|
| 31 |
|
| 32 | - Lock ordering should be maintained. If driver needs to take instance
|
| 33 | lock of both nested and parent instances at the same time, devlink
|
| 34 | instance lock of the nested instance should be taken first, only then
|
| 35 | instance lock of the parent instance could be taken.
|
| 36 | - Driver should use object-specific helpers to setup the
|
| 37 | nested relationship:
|
| 38 |
|
| 39 | - ``devl_nested_devlink_set()`` - called to setup devlink -> nested
|
| 40 | devlink relationship (could be used for multiple nested instances).
|
| 41 | - ``devl_port_fn_devlink_set()`` - called to setup port function ->
|
| 42 | nested devlink relationship.
|
| 43 | - ``devlink_linecard_nested_dl_set()`` - called to setup linecard ->
|
| 44 | nested devlink relationship.
|
| 45 |
|
| 46 | The nested devlink info is exposed to the userspace over object-specific
|
| 47 | attributes of devlink netlink.
|
| 48 |
|
| 49 | Interface documentation
|
| 50 | -----------------------
|
| 51 |
|
| 52 | The following pages describe various interfaces available through devlink in
|
| 53 | general.
|
| 54 |
|
| 55 | .. toctree::
|
| 56 | :maxdepth: 1
|
| 57 |
|
| 58 | devlink-dpipe
|
| 59 | devlink-eswitch-attr
|
| 60 | devlink-flash
|
| 61 | devlink-health
|
| 62 | devlink-info
|
| 63 | devlink-linecard
|
| 64 | devlink-params
|
| 65 | devlink-port
|
| 66 | devlink-region
|
| 67 | devlink-reload
|
| 68 | devlink-resource
|
| 69 | devlink-selftests
|
| 70 | devlink-trap
|
| 71 | devlink-shared
|
| 72 |
|
| 73 | Driver-specific documentation
|
| 74 | -----------------------------
|
| 75 |
|
| 76 | Each driver that implements ``devlink`` is expected to document what
|
| 77 | parameters, info versions, and other features it supports.
|
| 78 |
|
| 79 | .. toctree::
|
| 80 | :maxdepth: 1
|
| 81 |
|
| 82 | am65-nuss-cpsw-switch
|
| 83 | bnxt
|
| 84 | etas_es58x
|
| 85 | hns3
|
| 86 | i40e
|
| 87 | ice
|
| 88 | ionic
|
| 89 | iosm
|
| 90 | ixd
|
| 91 | ixgbe
|
| 92 | kvaser_pciefd
|
| 93 | kvaser_usb
|
| 94 | mlx4
|
| 95 | mlx5
|
| 96 | mlxsw
|
| 97 | mv88e6xxx
|
| 98 | netdevsim
|
| 99 | nfp
|
| 100 | octeontx2
|
| 101 | prestera
|
| 102 | qed
|
| 103 | sfc
|
| 104 | stmmac
|
| 105 | ti-cpsw-switch
|
| 106 | zl3073x
|