Thread (9 messages) 9 messages, 5 authors, 2016-01-29

Re: [PATCH] pci: Add the class_id support in pci probe

From: Panu Matilainen <hidden>
Date: 2016-01-29 10:10:38

On 01/29/2016 11:34 AM, Thomas Monjalon wrote:
2016-01-29 11:21, Panu Matilainen:
quoted
On 01/28/2016 11:38 PM, Thomas Monjalon wrote:
quoted
2016-01-13 14:22, Panu Matilainen:
quoted
On 01/13/2016 01:55 PM, Bruce Richardson wrote:
quoted
On Thu, Dec 31, 2015 at 09:12:14AM -0800, Stephen Hemminger wrote:
quoted
On Tue, 29 Dec 2015 10:53:26 +0800
Ziye Yang [off-list ref] wrote:
quoted
This patch is used to add the class_id support
for pci_probe since some devices need the class_info
(class_code, subclass_code, programming_interface)

Signed-off-by: Ziye Yang <redacted>
Since rte_pci is exposed to application this breaks the ABI.
But applications are not going to be defining rte_pci_ids values internally, are
they? That is for drivers to use. Is this really an ABI breakage for applications that we
need to be concerned about?
There might not be applications using it but drivers are ABI consumers
too - think of 3rd party drivers and such.
Drivers are not ABI consumers in the sense that ABI means
Application Binary Interface.
We are talking about drivers interface here.
When establishing the ABI policy we were discussing about applications only.
Generally speaking an ABI is an interface between two program (or
software if you like) modules, its not specific to "applications".
Looking at http://dpdk.org/doc/guides/contributing/versioning.html I see
it does only talk about applications, but an ABI consumer can also be
another library. A driver calling rte_malloc() is just as much
librte_eal ABI consumer as anything else.

Now, I understand that drivers use and need interface(s) that
applications have no use for or simply cannot use, and those interfaces
could be subject to different policies. As an extreme example, the Linux
kernel has two isolated ABIs, one is the userland system call interface
which is guaranteed to stay forever and the other is kernel module
interface, guarantees nothing at all.

In DPDK the difference is far muddier than that since all the interfaces
live in common, versioned userland DSOs. So if there are two different
interfaces following two different policies, it's all the more important
to clearly document them. One simple way could be using a different
prefix than rte_.
Good suggestion. Or we can simply have different files with a clear notice
in their headers and in the versioning doc.
It was well split in rte_cryptodev_pmd.h
Using separate headers is also good. Optimally both? :)
quoted
quoted
I agree we must allow 3rd party drivers but there is no good reason
to try to upgrade DPDK without upgrading/porting the external drivers.
If someone does not want to release its driver and keep upgrading DPDK,
it is acceptable IMHO to force an upgrade of its driver.
Note that I've no particular sympathy for 3rd party drivers as such.
What I *do* care about is that breakage is made explicit, as in drivers
built for an incompatible version refuse to load at all, instead of
silently corrupting memory etc.
OK I agree.
Cool, the rest is just details then.
Anyway the ABI versionning does not cover the structure changes.
What about making a DPDK version check when registering a driver?
So a binary driver would be clearly bound to a DPDK version.
That's one possibility. Another way to achieve essentially the same is 
to make rte_eal_driver_register() symbol version follow the DPDK 
version, in which case a driver built for another version will fail at 
dlopen() already.
And we should change or remove the .so version which never change for
most of drivers.
Yup, so-versioning DSOs which do not offer any ABI is kinda pointless.

	- Panu -
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help