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 支持
- ixgbe 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 支持