svn commit: r317989 - stable/11/sys/dev/evdev
Oleksandr Tymoshenko
gonzo at FreeBSD.org
Mon May 8 22:35:17 UTC 2017
Author: gonzo
Date: Mon May 8 22:35:15 2017
New Revision: 317989
URL: https://svnweb.freebsd.org/changeset/base/317989
Log:
MFC r315176-r315178
r315176:
[evdev] Do not ignore result evdev_register in UI_DEV_CREATE handler
Make sure that uinput state field reflects actual state by checking
evdev_register result for errors
Submitted by: Vladimir Kondratiev <wulf at cicgroup.ru>
Differential Revision: https://reviews.freebsd.org/D9320
r315177:
[evdev] Fix race condition between client's event queue reading and dropping
Submitted by: Vladimir Kondratiev <wulf at cicgroup.ru>
Differential Revision: https://reviews.freebsd.org/D9320
r315178:
[evdev] Fix Right Alt and Keypad Enter event codes for atkbd(4) and kbdmux(4) drivers
Submitted by: Vladimir Kondratiev <wulf at cicgroup.ru>
Differential Revision: https://reviews.freebsd.org/D9320
Modified:
stable/11/sys/dev/evdev/cdev.c
stable/11/sys/dev/evdev/evdev_utils.c
stable/11/sys/dev/evdev/uinput.c
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/sys/dev/evdev/cdev.c
==============================================================================
--- stable/11/sys/dev/evdev/cdev.c Mon May 8 22:24:06 2017 (r317988)
+++ stable/11/sys/dev/evdev/cdev.c Mon May 8 22:35:15 2017 (r317989)
@@ -162,7 +162,7 @@ static int
evdev_read(struct cdev *dev, struct uio *uio, int ioflag)
{
struct evdev_client *client;
- struct input_event *event;
+ struct input_event event;
int ret = 0;
int remaining;
@@ -197,13 +197,14 @@ evdev_read(struct cdev *dev, struct uio
}
while (ret == 0 && !EVDEV_CLIENT_EMPTYQ(client) && remaining > 0) {
- event = &client->ec_buffer[client->ec_buffer_head];
+ memcpy(&event, &client->ec_buffer[client->ec_buffer_head],
+ sizeof(struct input_event));
client->ec_buffer_head =
(client->ec_buffer_head + 1) % client->ec_buffer_size;
remaining--;
EVDEV_CLIENT_UNLOCKQ(client);
- ret = uiomove(event, sizeof(struct input_event), uio);
+ ret = uiomove(&event, sizeof(struct input_event), uio);
EVDEV_CLIENT_LOCKQ(client);
}
Modified: stable/11/sys/dev/evdev/evdev_utils.c
==============================================================================
--- stable/11/sys/dev/evdev/evdev_utils.c Mon May 8 22:24:06 2017 (r317988)
+++ stable/11/sys/dev/evdev/evdev_utils.c Mon May 8 22:35:15 2017 (r317989)
@@ -159,7 +159,7 @@ static uint16_t evdev_at_set1_scancodes[
KEY_PREVIOUSSONG, NONE, NONE, NONE,
NONE, NONE, NONE, NONE,
NONE, KEY_NEXTSONG, NONE, NONE,
- NONE, KEY_KPENTER, KEY_RIGHTCTRL, NONE,
+ KEY_KPENTER, KEY_RIGHTCTRL, NONE, NONE,
/* 0x20 - 0x3f. 0xE0 prefixed */
KEY_MUTE, KEY_CALC, KEY_PLAYPAUSE, NONE,
KEY_STOPCD, NONE, NONE, NONE,
Modified: stable/11/sys/dev/evdev/uinput.c
==============================================================================
--- stable/11/sys/dev/evdev/uinput.c Mon May 8 22:24:06 2017 (r317988)
+++ stable/11/sys/dev/evdev/uinput.c Mon May 8 22:35:15 2017 (r317989)
@@ -501,9 +501,10 @@ uinput_ioctl_sub(struct uinput_cdev_stat
evdev_set_methods(state->ucs_evdev, state, &uinput_ev_methods);
evdev_set_flag(state->ucs_evdev, EVDEV_FLAG_SOFTREPEAT);
- evdev_register(state->ucs_evdev);
- state->ucs_state = UINPUT_RUNNING;
- return (0);
+ ret = evdev_register(state->ucs_evdev);
+ if (ret == 0)
+ state->ucs_state = UINPUT_RUNNING;
+ return (ret);
case UI_DEV_DESTROY:
if (state->ucs_state != UINPUT_RUNNING)
More information about the svn-src-stable-11
mailing list