On Fri, Jun 15, 2012 at 02:45:33PM -0700, Greg KH wrote:
> On Fri, Jun 15, 2012 at 08:40:26AM +0200, Julian Andres Klode wrote:
> > On Thu, Jun 14, 2012 at 03:09:38PM -0700, Greg KH wrote:
> > > On Thu, Jun 14, 2012 at 11:57:38PM +0200, Marc Dietrich wrote:
> > > > Add a helper macro to wrap nvec_{a}sync_writes and to get rid of
> > > > the various strings distributed all over the nvec code.
> > >
> > > Why can't these be inline functions instead? That will catch errors
> > > easier, and make it a bit more "obvious" as to what is going on (hint, I
> > > have no idea in reading these what they are doing...)
> >
> > They are not really obvious, but they kind of catch more errors and are
> > shorter to
> > writer.
>
> Shorter to write where?
>
> And obvious is good, we want obvious in the kernel. Non-obvious is bad,
> bugs live there...
>
> > A nvec "call" consists of a type, a subtype and a payload, so
> > the calls expand like this:
> >
> > nvec_write_async(nvec, {NVEC_FOO, NVEC_FOO_BAR, ...}, length of ... + 2)
> > NVEC_CALL(nvec, FOO, BAR, ...)
> >
> > With an inline function, you would have to use arrays (as nvec_write_async()
> > does) or variable arguments lists which are not as optimizable, and you
> > would
> > need to repeat NVEC all over the place. For example, with an inline function
> > instead of a macro:
> >
> > nvec_call(nvec, NVEC_FOO, NVEC_FOO_BAR, [size here?], ...)
> >
> > This manual size tracking also makes it less reliable.
>
> I'm sorry, but I still don't understand. Why would you ever want any
> NVEC_CALL macros either?
>
> What exactly is the driver doing here that is so "odd" from other data
> streams that need to be written to devices that it has to go through
> wierd gyrations like this?
The core point was probably that we currently have various sequences
like
char blah[] = {some hex value, other hex value, ...}
nvec_write_async(nvec, blah, sizeof(blah))
which is a bit long to write or distracting under some circumstances (and
not very obvious, as we did not use named constants for those hex values
most of the time). With a macro you could just write it:
NVEC_CALL(nvec, FOO, BAR)
And save a line. Would you prefer us to use:
{
char msg[] = {NVEC_FOO, NVEC_FOO_BAR};
nvec_write_async(nvec, msg, sizeof(msg));
}
instead? And yes, macro-less code is much more readable than the
macro code for non-insiders, which is probably helpful.
--
Julian Andres Klode - Debian Developer, Ubuntu Member
See http://wiki.debian.org/JulianAndresKlode and http://jak-linux.org/.
pgp7pv99ACvmU.pgp
Description: PGP signature
_______________________________________________ devel mailing list [email protected] http://driverdev.linuxdriverproject.org/mailman/listinfo/devel
