On Wed, 13 Apr 2011, Arnd Bergmann wrote:
> On Tuesday 12 April 2011, Michał Mirosław wrote:
> > > + unsigned int cmd_timeout_ms;
> > > + __u64 data_ptr; /* DAT buffer */
> >
> > This will be more natural if you have an anonymous union here:
> > union {
> > __u64 data_ptr_
> > void *data_ptr;
> > };
>
> No, that really does not work. It's important for all members of the ioctl
> data
> structure to have a fixed size, independent of the size of long or pointer.
>
> If you do a union, the pointer ends up in the first 32 bits of the 64 bit
> member,
> which does not work on big-endian architectures. It also doesn't work on 31
> bit architectures, although that is a minor worry here.
>
Gah! OK, so much for the v5 I just sent then. What do you think about
the compat_ioctl that I sent in v2? It means having the extra 32-bit
compat structure, but at least all the compat overhead is conditional
upon CONFIG_COMPAT. If you're not using CONFIG_COMPAT, you don't get
any compat cruft.
John