5 Jun 00:59
Re: Re: [parisc-linux] [PATCH] usb/input/hid-core.c extract() brain damage
Alan Stern <stern <at> rowland.harvard.edu>
2005-06-04 22:59:53 GMT
2005-06-04 22:59:53 GMT
On Sat, 4 Jun 2005, Grant Grundler wrote:
> On Sat, Jun 04, 2005 at 11:06:52AM -0400, Alan Stern wrote:
> > In spite of the total overall number of changes required, wouldn't it be
> > much simpler to have a suite of routines (inlines or macros) like:
> >
> > get_16, put_16, get_le16, put_le16, get_be16, put_be16
> > get_32, put_32, get_le32, put_le32, get_be32, put_be32
> > get_64, put_64, get_le64, put_le64, get_be64, put_be64
> >
> > in short, {get|put}_{|le|be}{16|32|64}
>
> Sorry, no. The architectures that trap on misaligned accesses have to
> handle that in the kernel. And even though the implementations
> get simpler, a plethoria of interfaces just clutters up the general
> device driver API. For that reason alone I wouldn't want it.
>
> The endian conversion (swap) macros are PITA already.
> I'll argue the swap API should be simplified to four macros:
> cpu_to_le(x), cpu_to_be(x), le_to_cpu(x), be_to_cpu(x)
>
> and force the caller to cast to the right size. switch(sizeof(x)) would
> then select the right arch specific variant. I'll figure out how to
> pitch this to linux-arch...and then see how far it gets batted back. :^)
I don't really follow your argument. For example, consider the swap API.
There's nothing to stop you from defining, in your own code, those four
macros. Have them perform the appropriate conversion based on the type of
x. You don't have to use the full existing API if you don't want to.
(Continue reading)
RSS Feed