The ioctl() has been a common way of passing control into a kernel. Recent change of Linux kernel requires new driver be developed without resorting to the big kernel lock.
This article titled “the new way of ioctl()” explain it in much details.
- compat_ioctl() is used by 64-bit systems for 32-bit application to make a ioctl() call. If this function does not exist, the driver must do the conversion by hand.
- unlocked_ioctl() is called in preference to ioctl(). The inode argument is removed. And the old drivers, can do a formal conversion from ioctl() to unlocked_ioctl() by adding “lock_kernel()” to the entry point of ioctl, and “unlock_kernel()” to all the exiting points.
Or … … anything else?