more on compat_ioctl
Posted Oct 23, 2005 14:19 UTC (Sun) by arnd
Parent article: The new way of ioctl()
There are a few noteworthy points about compat_ioctl:
- If you are writing a new device driver that needs ioctl methods (which
some might argue you should not do in the first place), make sure the data
structure are compatible between 32 and 64 bit, so unlocked_ioctl and
compat_ioctl can point to the same function. In particular, data
structures containing must not contain fields that have different sizes
(e.g. 'void *' or 'long') or need padding (e.g. 'long long' after 'int')
on 64 bit systems.
- As of 2.6.14, nobody has started converting the network layer to
compat_ioctl, so the next person that needs new compatibility code for
socket ioctls should add the infrastructure for that instead of adding on
- While the fs/compat_ioctl.c infrastructure still exists, it is valid
for compat_ioctl methods to return -ENOIOCTLCMD for anything they don't
know. This is particularly useful for block or tty devices that have a lot
of ioctl numbers common to all drivers.
The vfs layer first calls ->compat_ioctl and if that does not exist or
returns -ENOIOCTLCMD, it scans the list of known conversions between 32
and 64 bit ioctls and if it finds a valid conversion, it enters the native
64 bit ->unlocked_ioctl/->ioctl path.
to post comments)