| 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 across 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 | |
| before registering the nested devlink instance: | |
| - ``devl_nested_devlink_set()`` - called to setup devlink -> nested | |
| devlink relationship (could be used 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-eswitch-attr | |
| devlink-flash | |
| devlink-health | |
| devlink-info | |
| devlink-linecard | |
| devlink-params | |
| devlink-port | |
| devlink-region | |
| devlink-reload | |
| devlink-resource | |
| devlink-selftests | |
| devlink-trap | |
| devlink-shared | |
| Driver-specific documentation | |
| ----------------------------- | |
| Each driver that implements ``devlink`` is expected to document what | |
| parameters, info versions, and other features it supports. | |
| .. toctree:: | |
| :maxdepth: 1 | |
| am65-nuss-cpsw-switch | |
| bnxt | |
| etas_es58x | |
| hns3 | |
| i40e | |
| ice | |
| ionic | |
| iosm | |
| ixgbe | |
| kvaser_pciefd | |
| kvaser_usb | |
| mlx4 | |
| mlx5 | |
| mlxsw | |
| mv88e6xxx | |
| netdevsim | |
| nfp | |
| octeontx2 | |
| prestera | |
| qed | |
| sfc | |
| stmmac | |
| ti-cpsw-switch | |
| zl3073x |