[dpdk-dev] [PATCH v3 02/12] eal/bus: introduce bus abstraction

Shreyansh Jain shreyansh.jain at nxp.com
Wed Dec 21 08:11:36 CET 2016


On Tuesday 20 December 2016 10:41 PM, Stephen Hemminger wrote:
> On Tue, 20 Dec 2016 14:17:14 +0100
> Jan Blunck <jblunck at infradead.org> wrote:
>
>> On Fri, Dec 16, 2016 at 2:10 PM, Shreyansh Jain <shreyansh.jain at nxp.com> wrote:
>>> This patch introduces the rte_bus abstraction for devices and drivers in
>>> EAL framework. The model is:
>>>  - One or more buses are connected to a CPU (or core)
>>>  - One or more devices are conneted to a Bus
>>>  - Drivers are running instances which manage one or more devices
>>>  - Bus is responsible for identifying devices (and interrupt propogation)
>>>  - Driver is responsible for initializing the device
>>>
>>> This patch adds a 'rte_bus' class which rte_driver and rte_device refer.
>>> This way, each device (rte_xxx_device) would have reference to the bus
>>> it is based on. As well as, each driver (rte_xxx_driver) would have link
>>> to the bus and devices on it for servicing.
>>>
>>>                                   __ rte_bus_list
>>>                                  /
>>>                      +----------'---+
>>>                      |rte_bus       |
>>>                      | driver_list------> List of rte_bus specific
>>>                      | device_list----    devices
>>>                      |              | `-> List of rte_bus associated
>>>                      |              |     drivers
>>>                      +--|------|----+
>>>               _________/        \_________
>>>     +--------/----+                     +-\---------------+
>>>     |rte_device   |                     |rte_driver       |
>>>     | rte_bus     |                     | rte_bus         |
>>>     | rte_driver  |                     | ...             |
>>>     | ...         |                     +---------...-----+
>>>     |             |                               |||
>>>     +---||--------+                               |||
>>>         ||                                        |||
>>>         | \                                        \\\
>>>         |  \_____________                           \\\
>>>         |                \                          |||
>>>  +------|---------+ +----|----------+               |||
>>>  |rte_pci_device  | |rte_xxx_device |               |||
>>>  | ....           | | ....          |               |||
>>>  +----------------+ +---------------+              / | \
>>>                                                   /  |  \
>>>                             _____________________/  /    \
>>>                            /                    ___/      \
>>>             +-------------'--+    +------------'---+    +--'------------+
>>>             |rte_pci_driver  |    |rte_vdev_driver |    |rte_xxx_driver |
>>>             | ....           |    | ....           |    | ....          |
>>>             +----------------+    +----------------+    +---------------+
>>>
>>> This patch only enables the bus references on rte_driver and rte_driver.
>>> EAL wide global device and driver list continue to exist until an instance
>>> of bus is added in subsequent patches.
>>>
>>> This patch also introduces RTE_REGISTER_BUS macro on the lines of
>>> RTE_PMD_REGISTER_XXX. Key difference is that the constructor priority has
>>> been explicitly set to 101 so as to execute bus registration before PMD.
>>>
>>> Signed-off-by: Shreyansh Jain <shreyansh.jain at nxp.com>
>>>
>
> Ok, but let's keep this as bus type not bus. It gets really hard and complex
> to enumerate all layers of PCI bus and bridges.
>

Sorry, I couldn't understand your comment. You mean it should be 
rte_bus_type rather than rte_bus? Or, you mean rather than creating a 
rte_bus, we should rather have a type embedded in rte_device/driver?

(Though this is 'to' Jan, the context is hinting at my mail)




More information about the dev mailing list