On Tue, Jun 6, 2017 at 1:05 PM, Aleksa Sarai <asarai@xxxxxxx> wrote: >>> diff --git a/drivers/tty/pty.c b/drivers/tty/pty.c >>> index 65799575c666..2a6bd9ae3f8b 100644 >>> --- a/drivers/tty/pty.c >>> +++ b/drivers/tty/pty.c >>> @@ -481,6 +481,16 @@ static int pty_bsd_ioctl(struct tty_struct *tty, >>> return -ENOIOCTLCMD; >>> } >>> >>> +static long pty_bsd_compat_ioctl(struct tty_struct *tty, >>> + unsigned int cmd, unsigned long arg) >>> +{ >>> + /* >>> + * PTY ioctls don't require any special translation between >>> 32-bit and >>> + * 64-bit userspace, they are already compatible. >>> + */ >>> + return pty_bsd_ioctl(tty, cmd, arg); >>> +} >>> + >> >> >> This looks correct but unnecessary, you can simply point both >> function pointers to the same function: > > > They have different types, since they have different return types: > > int (*ioctl)(struct tty_struct *tty, > unsigned int cmd, unsigned long arg); > long (*compat_ioctl)(struct tty_struct *tty, > unsigned int cmd, unsigned long arg); > > If you like, I can change (*ioctl) to return longs as well, and then change > all of the call-sites (since unlocked_ioctl also returns long). Ah, my mistake. In most other data structures that have a compat_ioctl callback pointer, the prototypes are the same, and I had not realized that tty_operations is an exception. Arnd