[dpdk-dev] standardize device identification
thomas at monjalon.net
Fri Dec 22 10:00:22 CET 2017
22/12/2017 08:01, Shreyansh Jain:
> On Thursday 21 December 2017 03:32 AM, Thomas Monjalon wrote:
> > Changing the title and adding more comments inline:
> > 19/12/2017 00:05, Thomas Monjalon:
> >> Let's summarize and resume this thread.
> >> We need a generic syntax to describe a device.
> >> This syntax can be used
> >> - before initializing the device (i.e. whitelist/blacklist)
> >> - or after the initialization (e.g. user config)
> >> We need to answer 4 questions:
> >> 1/ what are the separators (comma, colon, etc)?
> >> 2/ how to distinguish a device identification from a configuration?
> >> 3/ what are the mandatory parts?
> >> 4/ what can be the optional properties?
> >> 30/11/2017 08:35, Yuanhan Liu:
> >>> What this patch proposes is to use "name[,mac]" syntax. "name" is the
> >>> PCI id for pci device. For vdev, it's the vdev name given by user. The
> >>> reason "mac" is needed is for some devices (say ConnectX-3), 2 ports
> >>> (in a single NIC) have the same PCI id.
> >> Based on the feedbacks we had, I suggest a syntax where everything is
> >> optional key/value pairs, and split in 3 categories:
> >> - bus (pci, vdev, vmbus, fslmc, etc)
> >> - class (eth, crypto)
> >> - driver (i40e, mlx5, virtio, etc)
> > The key/value pair describing the category scope is mandatory
> > and must be the first pair in the category properties.
> > Example: bus=pci, must be placed before id=0000:01:00.0
> >> Between categories, the separator is a slash.
> Why is a '/' required as a separator? Are you expecting the key in
> key,value pair to duplicate across categories?
We need to separate categories because each category is parsed by
a different parser.
The first level parser will get strings for each category and will
call the appropriate parser (by going through different levels of
bus parsers for bus and driver categories).
> >> Inside a category, the separator is a comma.
> >> Inside a key/value pair, the separator is an equal sign.
> sounds reasonable to me.
> >> It may look like this:
> >> bus=BUS_NAME,id=BUS_ID/class=CLASS_NAME,dev_port=PORT_NUM,mac=MAC_ADDRESS/driver=DRIVER_NAME,driverspecificproperty=VALUE
> If I take cue from fslmc and dpaa bus:
> for fslmc: bus=fslmc,id=dpni.1
> for dpaa: bus=dpaa,id=fm1-mac1
> So, at least from fslmc/dpaa perspective, above fits.
> Just want to highlight: in some cases the device names can contain ',' -
> but then, that can be handled at bus scan level.
> For dpaa bus, the device identified from platform identifiers contains a
> longer ',' separated string - which is then stripped to form a name like
> 'fm1-mac1' before being added to device->name.
> >> A device is identified when every properties are matched.
> So, a ovs-dpdk user would have to know a dpdk bus to identify a device
> to plug into a OVS bridge?
Yes, the user must know the bus if using a bus id.
But he can use another kind of id like the MAC address.
> >> Before device is probed, only the bus category is relevant.
> >> For the simple PCI whitelist, it means moving from
> >> -w 0000:01:00.0
> >> to
> >> -w bus=pci,id=0000:01:00.0
> >> It is possible to mix some settings in these devargs syntax if the keys
> >> are differents. Example: mac= is for identification by MAC, whereas
> >> newmac= would be for specifying a MAC address to set.
> >> Agreement?
> in principle, yes.
> just need clarity on '/' as a separator.
Thanks for reviewing.
More information about the dev