Date: Wed, 7 May 2014 14:48:14 +1000 (EST) From: Bruce Evans <brde@optusnet.com.au> To: Ryan Stone <rysto32@gmail.com> Cc: "freebsd-arch@freebsd.org" <freebsd-arch@freebsd.org> Subject: Re: RFC: PCI SR-IOV Driver interface Message-ID: <20140507141652.K1349@besplex.bde.org> In-Reply-To: <CAFMmRNyDpLuxqJVC%2Bwdm856E0Abx4XrOZyR9iB7g2dvDeX4BMQ@mail.gmail.com> References: <CAFMmRNyDpLuxqJVC%2Bwdm856E0Abx4XrOZyR9iB7g2dvDeX4BMQ@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, 6 May 2014, Ryan Stone wrote:
> ...
> PF drivers implement the following method to advertise their
> configuration schema:
>
> METHOD void get_iov_config_schema {
> device_t dev;
> nvlist_t *pf_schema;
> nvlist_t *vf_schema;
> }
>
> The use of the nvlist_t in the interface is somewhat unfortunate. The
> problem is that now every driver that includes "pci_if.h" needs to
> have the typedef nvlist_t defined (and I *really* don't want to modify
> every PCI driver in the tree...). I have a somewhat hacky workaround
> for the problem in my tree right now but I thought that I would
> highlight the issue in case people had opinions on the issue.
Hrmph. style(9) explicitly forbids typedefs like nvlist_t. It is just
a pointer to a struct. But since it is just that, it is easy to
declare it in several headers. The struct type is not needed.
The user nv.h begins with massive namespace pollution:
% #include <sys/cdefs.h>
%
% #include <stdarg.h>
% #include <stdbool.h>
% #include <stdint.h>
% #include <stdio.h>
Why bother hiding the struct type when you expose all this? The API
does use FILE. FILE exposes its struct too.
The string 'FILE *'now occurs in 24 headers in /usr/include/*.h and
in 31 headers in /usr/include/*/*.h :-(. stdio.h is referenced in about
half of these.
Such mistakes shouldn't be repeated in new APIs.
%
% #ifndef _NVLIST_T_DECLARED
% #define _NVLIST_T_DECLARED
% struct nvlist;
Bogus forward declaration (not needed).
%
% typedef struct nvlist nvlist_t;
% #endif
The polluting symbols are of course undocumented in nv's man page (except
indirectly, by having a prototype that uses FILE, and many that use va_list
bool or uint64_t).
Bruce
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20140507141652.K1349>
