回复:[PATCH v6 01/17] net/nbl: add doc and minimum nbl build framework
Dimon
dimon.zhao at nebula-matrix.com
Thu Aug 28 05:06:26 CEST 2025
Hi Stephen,
Our driver architecture is designed to support multiple chip variants, each with distinct hardware-software interactions, which contributes to its relative complexity.
To ensure broad compatibility and modularity, the architecture is organized into the following layers:
1. Dev Layer (Device Layer)
2. Dispatch Layer
3. Resource Layer
4. Channel Layer
5. HW Layer (Hardware Layer)
Each chip variant has its own init and remove functions for these layers.
As you correctly pointed out, there are many indirection tables involved.
This patch series implements the tables for one chip, and subsequent patches will add support for more chip variants.
Thank you.
------------------------------------------------------------------
发件人:Stephen Hemminger <stephen at networkplumber.org>
发送时间:2025年8月28日(周四) 00:27
收件人:Dimon<dimon.zhao at nebula-matrix.com>
抄 送:dev<dev at dpdk.org>; Thomas Monjalon<thomas at monjalon.net>; Kyo Liu<kyo.liu at nebula-matrix.com>; Leon<leon.yu at nebula-matrix.com>; Sam<sam.chen at nebula-matrix.com>
主 题:Re: [PATCH v6 01/17] net/nbl: add doc and minimum nbl build framework
This code looks like it was part of something bigger (and/or written
by a object oriented programmer).
Lots of indirection tables and most never have multiple implementations.
Function indirection is slower and risks SPECTRE type attacks.
> +struct nbl_product_core_ops {
> + int (*hw_init)(void *p);
> + void (*hw_remove)(void *p);
> + int (*res_init)(void *p, struct rte_eth_dev *eth_dev);
> + void (*res_remove)(void *p);
> + int (*chan_init)(void *p);
> + void (*chan_remove)(void *p);
> +};
> +struct nbl_product_dev_ops {
> + int (*dev_init)(void *adapter);
> + void (*dev_uninit)(void *adapter);
> + int (*dev_start)(void *adapter);
> + void (*dev_stop)(void *adapter);
> +};
> +
> +struct nbl_product_dispatch_ops {
> + int (*dispatch_init)(void *mgt);
> + int (*dispatch_uninit)(void *mgt);
> +};
> +struct nbl_product_dev_external_ops {
> + int (*external_pf_ops_get)(struct rte_eth_dev *dev, void *arg);
> + int (*external_rep_ops_get)(struct rte_eth_dev *dev, void *arg);
> + int (*external_bond_ops_get)(struct rte_eth_dev *dev, void *arg);
> +};
These are defined but never used.
> +#endif
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mails.dpdk.org/archives/dev/attachments/20250828/5a06e4d6/attachment.htm>
More information about the dev
mailing list