Linux Devlink 文档¶
devlink 是一个 API,用于公开与任何设备类不直接相关的设备信息和资源,例如芯片范围/交换 ASIC 范围的配置。
锁定¶
面向驱动程序的 API 当前正在过渡,以允许更显式的锁定。驱动程序可以使用现有的 devlink_*
API 集,或以 devl_*
为前缀的新 API。较旧的 API 在 devlink 核心中处理所有锁定,但一旦主 devlink 对象本身注册后,就不允许注册大多数子对象。较新的 devl_*
API 假设 devlink 实例锁已被持有。驱动程序可以通过调用 devl_lock()
来获取实例锁。它也在 devlink netlink 命令的所有回调中被持有。
鼓励驱动程序将 devlink 实例锁用于自己的需求。
驱动程序在同时获取 devlink 实例锁和 RTNL 锁时需要谨慎。需要首先获取 Devlink 实例锁,之后才能获取 RTNL 锁。
嵌套实例¶
某些对象(如线卡或端口功能)可以在其下创建另一个 devlink 实例。在这种情况下,驱动程序应确保遵守以下规则
应保持锁的顺序。如果驱动程序需要同时获取嵌套实例和父实例的实例锁,则应首先获取父实例的 devlink 实例锁,然后才能获取嵌套实例的实例锁。
驱动程序应使用特定于对象的辅助函数来设置嵌套关系
devl_nested_devlink_set()
- 调用以设置 devlink -> 嵌套 devlink 关系(可用于多个嵌套实例)。
devl_port_fn_devlink_set()
- 调用以设置端口功能 -> 嵌套 devlink 关系。
devlink_linecard_nested_dl_set()
- 调用以设置线卡 -> 嵌套 devlink 关系。
嵌套的 devlink 信息通过 devlink netlink 的特定于对象的属性暴露给用户空间。
接口文档¶
以下页面描述了通常可通过 devlink 使用的各种接口。
特定于驱动程序的文档¶
每个实现 devlink
的驱动程序都应记录其支持的参数、信息版本和其他功能。
- bnxt devlink 支持
- etas_es58x devlink 支持
- hns3 devlink 支持
- i40e devlink 支持
- ionic devlink 支持
- ice devlink 支持
- mlx4 devlink 支持
- mlx5 devlink 支持
- mlxsw devlink 支持
- mv88e6xxx devlink 支持
- netdevsim devlink 支持
- nfp devlink 支持
- qed devlink 支持
- ti-cpsw-switch devlink 支持
- am65-cpsw-nuss devlink 支持
- prestera devlink 支持
- iosm devlink 支持
- octeontx2 devlink 支持
- sfc devlink 支持