On Friday 27 November 2015 18:00:31 WEN Pingbo wrote:
This patch depends on 'introduce new evdev interface'.
Userspace cat set / get evdev interface type via the two ioctl commands. And default interface type is EV_IF_LEGACY, so the old binary will work normal with new kernel. Maybe we should change this default option to encourage people to move to new interface.
And since all events are stored as input_value in evdev, there are no need to flush evdev_client's buffer if we change clk_type and if_type.
I would split out the change to evdev_set_clk_type into a separate patch.
- case EVIOCSIFTYPE:
if (get_user(if_type, ip))
return -EFAULT;
return evdev_set_if_type(client, if_type);
- case EVIOCGIFTYPE:
}return put_user(client->if_type, ip);
This look asymmetric: EVIOCSIFTYPE uses a EVDEV_* constant, while EVIOCGIFTYPE returns a EV_IF_* constant. Should those just be the same constants anyway?
Arnd
在 2015年11月28日,00:59,Arnd Bergmann arnd@arndb.de 写道:
On Friday 27 November 2015 18:00:31 WEN Pingbo wrote:
This patch depends on 'introduce new evdev interface'.
Userspace cat set / get evdev interface type via the two ioctl commands. And default interface type is EV_IF_LEGACY, so the old binary will work normal with new kernel. Maybe we should change this default option to encourage people to move to new interface.
And since all events are stored as input_value in evdev, there are no need to flush evdev_client's buffer if we change clk_type and if_type.
I would split out the change to evdev_set_clk_type into a separate patch.
Agreed.
- case EVIOCSIFTYPE:
if (get_user(if_type, ip))
return -EFAULT;
return evdev_set_if_type(client, if_type);
- case EVIOCGIFTYPE:
}return put_user(client->if_type, ip);
This look asymmetric: EVIOCSIFTYPE uses a EVDEV_* constant, while EVIOCGIFTYPE returns a EV_IF_* constant. Should those just be the same constants anyway?
Yes, thanks for pointing it out. I need add evdev_get_if_type() here.
Pingbo