1. 26 4月, 2018 1 次提交
    • T
      Revert: Unify CLOCK_MONOTONIC and CLOCK_BOOTTIME · a3ed0e43
      Thomas Gleixner 提交于
      Revert commits
      
      92af4dcb ("tracing: Unify the "boot" and "mono" tracing clocks")
      127bfa5f ("hrtimer: Unify MONOTONIC and BOOTTIME clock behavior")
      7250a404 ("posix-timers: Unify MONOTONIC and BOOTTIME clock behavior")
      d6c7270e ("timekeeping: Remove boot time specific code")
      f2d6fdbf ("Input: Evdev - unify MONOTONIC and BOOTTIME clock behavior")
      d6ed449a ("timekeeping: Make the MONOTONIC clock behave like the BOOTTIME clock")
      72199320 ("timekeeping: Add the new CLOCK_MONOTONIC_ACTIVE clock")
      
      As stated in the pull request for the unification of CLOCK_MONOTONIC and
      CLOCK_BOOTTIME, it was clear that we might have to revert the change.
      
      As reported by several folks systemd and other applications rely on the
      documented behaviour of CLOCK_MONOTONIC on Linux and break with the above
      changes. After resume daemons time out and other timeout related issues are
      observed. Rafael compiled this list:
      
      * systemd kills daemons on resume, after >WatchdogSec seconds
        of suspending (Genki Sky).  [Verified that that's because systemd uses
        CLOCK_MONOTONIC and expects it to not include the suspend time.]
      
      * systemd-journald misbehaves after resume:
        systemd-journald[7266]: File /var/log/journal/016627c3c4784cd4812d4b7e96a34226/system.journal
      corrupted or uncleanly shut down, renaming and replacing.
        (Mike Galbraith).
      
      * NetworkManager reports "networking disabled" and networking is broken
        after resume 50% of the time (Pavel).  [May be because of systemd.]
      
      * MATE desktop dims the display and starts the screensaver right after
        system resume (Pavel).
      
      * Full system hang during resume (me).  [May be due to systemd or NM or both.]
      
      That happens on debian and open suse systems.
      
      It's sad, that these problems were neither catched in -next nor by those
      folks who expressed interest in this change.
      Reported-by: NRafael J. Wysocki <rjw@rjwysocki.net>
      Reported-by: Genki Sky <sky@genki.is>,
      Reported-by: NPavel Machek <pavel@ucw.cz>
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
      Cc: John Stultz <john.stultz@linaro.org>
      Cc: Jonathan Corbet <corbet@lwn.net>
      Cc: Kevin Easton <kevin@guarana.org>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Mark Salyzyn <salyzyn@android.com>
      Cc: Michael Kerrisk <mtk.manpages@gmail.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Petr Mladek <pmladek@suse.com>
      Cc: Prarit Bhargava <prarit@redhat.com>
      Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      a3ed0e43
  2. 13 3月, 2018 1 次提交
    • T
      Input: Evdev - unify MONOTONIC and BOOTTIME clock behavior · f2d6fdbf
      Thomas Gleixner 提交于
      Now that the MONOTONIC and BOOTTIME clocks are indentical, remove all the
      special casing.
      
      The user space visible interfaces still support both clocks, but their behavior
      is identical.
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
      Cc: John Stultz <john.stultz@linaro.org>
      Cc: Jonathan Corbet <corbet@lwn.net>
      Cc: Kevin Easton <kevin@guarana.org>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Mark Salyzyn <salyzyn@android.com>
      Cc: Michael Kerrisk <mtk.manpages@gmail.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Petr Mladek <pmladek@suse.com>
      Cc: Prarit Bhargava <prarit@redhat.com>
      Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      Cc: linux-input@vger.kernel.org
      Link: http://lkml.kernel.org/r/20180301165150.155899327@linutronix.deSigned-off-by: NIngo Molnar <mingo@kernel.org>
      f2d6fdbf
  3. 12 2月, 2018 1 次提交
    • L
      vfs: do bulk POLL* -> EPOLL* replacement · a9a08845
      Linus Torvalds 提交于
      This is the mindless scripted replacement of kernel use of POLL*
      variables as described by Al, done by this script:
      
          for V in IN OUT PRI ERR RDNORM RDBAND WRNORM WRBAND HUP RDHUP NVAL MSG; do
              L=`git grep -l -w POLL$V | grep -v '^t' | grep -v /um/ | grep -v '^sa' | grep -v '/poll.h$'|grep -v '^D'`
              for f in $L; do sed -i "-es/^\([^\"]*\)\(\<POLL$V\>\)/\\1E\\2/" $f; done
          done
      
      with de-mangling cleanups yet to come.
      
      NOTE! On almost all architectures, the EPOLL* constants have the same
      values as the POLL* constants do.  But they keyword here is "almost".
      For various bad reasons they aren't the same, and epoll() doesn't
      actually work quite correctly in some cases due to this on Sparc et al.
      
      The next patch from Al will sort out the final differences, and we
      should be all done.
      Scripted-by: NAl Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      a9a08845
  4. 10 1月, 2018 1 次提交
    • D
      Input: extend usable life of event timestamps to 2106 on 32 bit systems · 152194fe
      Deepa Dinamani 提交于
      The input events use struct timeval to store event time, unfortunately
      this structure is not y2038 safe and is being replaced in kernel with
      y2038 safe structures.
      
      Because of ABI concerns we can not change the size or the layout of
      structure input_event, so we opt to re-interpreting the 'seconds' part
      of timestamp as an unsigned value, effectively doubling the range of
      values, to year 2106.
      
      Newer glibc that has support for 32 bit applications to use 64 bit
      time_t supplies __USE_TIME_BITS64 define [1], that we can use to present
      the userspace with updated input_event layout. The updated layout will
      cause the compile time breakage, alerting applications and distributions
      maintainers to the issue. Existing 32 binaries will continue working
      without any changes until 2038.
      
      Ultimately userspace applications should switch to using monotonic or
      boot time clocks, as realtime clock is not very well suited for input
      event timestamps as it can go backwards (see a80b83b7 "Input: evdev -
      add CLOCK_BOOTTIME support" by by John Stultz). With monotonic clock the
      practical range of reported times will always fit into the pair of 32
      bit values, as we do not expect any system to stay up for a hundred
      years without a single reboot.
      
      [1] https://sourceware.org/glibc/wiki/Y2038ProofnessDesignSuggested-by: NArnd Bergmann <arnd@arndb.de>
      Signed-off-by: NDeepa Dinamani <deepa.kernel@gmail.com>
      Acked-by: NPeter Hutterer <peter.hutterer@who-t.net>
      Patchwork-Id: 10148083
      Signed-off-by: NDmitry Torokhov <dmitry.torokhov@gmail.com>
      152194fe
  5. 29 11月, 2017 1 次提交
  6. 21 3月, 2017 1 次提交
  7. 01 11月, 2015 1 次提交
  8. 27 10月, 2015 1 次提交
    • D
      Input: evdev - add event-mask API · 06a16293
      David Herrmann 提交于
      Hardware manufacturers group keys in the weirdest way possible. This may
      cause a power-key to be grouped together with normal keyboard keys and
      thus be reported on the same kernel interface.
      
      However, user-space is often only interested in specific sets of events.
      For instance, daemons dealing with system-reboot (like systemd-logind)
      listen for KEY_POWER, but are not interested in any main keyboard keys.
      Usually, power keys are reported via separate interfaces, however,
      some i8042 boards report it in the AT matrix. To avoid waking up those
      system daemons on each key-press, we had two ideas:
       - split off KEY_POWER into a separate interface unconditionally
       - allow filtering a specific set of events on evdev FDs
      
      Splitting of KEY_POWER is a rather weird way to deal with this and may
      break backwards-compatibility. It is also specific to KEY_POWER and might
      be required for other stuff, too. Moreover, we might end up with a huge
      set of input-devices just to have them properly split.
      
      Hence, this patchset implements the second idea: An event-mask to specify
      which events you're interested in. Two ioctls allow setting this mask for
      each event-type. If not set, all events are reported. The type==0 entry is
      used same as in EVIOCGBIT to set the actual EV_* mask of filtered events.
      This way, you have a two-level filter.
      
      We are heavily forward-compatible to new event-types and event-codes. So
      new user-space will be able to run on an old kernel which doesn't know the
      given event-codes or event-types.
      Signed-off-by: NDavid Herrmann <dh.herrmann@gmail.com>
      Signed-off-by: NDmitry Torokhov <dmitry.torokhov@gmail.com>
      06a16293
  9. 04 9月, 2015 1 次提交
    • T
      Input: evdev - do not report errors form flush() · eb38f3a4
      Takashi Iwai 提交于
      We've got bug reports showing the old systemd-logind (at least
      system-210) aborting unexpectedly, and this turned out to be because
      of an invalid error code from close() call to evdev devices.  close()
      is supposed to return only either EINTR or EBADFD, while the device
      returned ENODEV.  logind was overreacting to it and decided to kill
      itself when an unexpected error code was received.  What a tragedy.
      
      The bad error code comes from flush fops, and actually evdev_flush()
      returns ENODEV when device is disconnected or client's access to it is
      revoked. But in these cases the fact that flush did not actually happen is
      not an error, but rather normal behavior. For non-disconnected devices
      result of flush is also not that interesting as there is no potential of
      data loss and even if it fails application has no way of handling the
      error. Because of that we are better off always returning success from
      evdev_flush().
      
      Also returning EINTR from flush()/close() is discouraged (as it is not
      clear how application should handle this error), so let's stop taking
      evdev->mutex interruptibly.
      
      Bugzilla: http://bugzilla.suse.com/show_bug.cgi?id=939834
      Cc: <stable@vger.kernel.org>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      Signed-off-by: NDmitry Torokhov <dmitry.torokhov@gmail.com>
      eb38f3a4
  10. 16 5月, 2015 1 次提交
  11. 06 2月, 2015 1 次提交
  12. 16 1月, 2015 1 次提交
  13. 18 12月, 2014 1 次提交
  14. 04 12月, 2014 1 次提交
  15. 08 10月, 2014 1 次提交
  16. 24 7月, 2014 1 次提交
  17. 15 5月, 2014 1 次提交
  18. 30 3月, 2014 1 次提交
  19. 31 10月, 2013 1 次提交
    • D
      Input: evdev - fall back to vmalloc for client event buffer · 92eb77d0
      Daniel Stone 提交于
      evdev always tries to allocate the event buffer for clients using
      kzalloc rather than vmalloc, presumably to avoid mapping overhead where
      possible.  However, drivers like bcm5974, which claims support for
      reporting 16 fingers simultaneously, can have an extraordinarily large
      buffer.  The resultant contiguous order-4 allocation attempt fails due
      to fragmentation, and the device is thus unusable until reboot.
      
      Try kzalloc if we can to avoid the mapping overhead, but if that fails,
      fall back to vzalloc.
      Signed-off-by: NDaniel Stone <daniels@collabora.com>
      Signed-off-by: NDmitry Torokhov <dmitry.torokhov@gmail.com>
      92eb77d0
  20. 08 9月, 2013 1 次提交
    • D
      Input: evdev - add EVIOCREVOKE ioctl · c7dc6573
      David Herrmann 提交于
      If we have multiple sessions on a system, we normally don't want
      background sessions to read input events. Otherwise, it could capture
      passwords and more entered by the user on the foreground session. This is
      a real world problem as the recent XMir development showed:
        http://mjg59.dreamwidth.org/27327.html
      
      We currently rely on sessions to release input devices when being
      deactivated. This relies on trust across sessions. But that's not given on
      usual systems. We therefore need a way to control which processes have
      access to input devices.
      
      With VTs the kernel simply routed them through the active /dev/ttyX. This
      is not possible with evdev devices, though. Moreover, we want to avoid
      routing input-devices through some dispatcher-daemon in userspace (which
      would add some latency).
      
      This patch introduces EVIOCREVOKE. If called on an evdev fd, this revokes
      device-access irrecoverably for that *single* open-file. Hence, once you
      call EVIOCREVOKE on any dup()ed fd, all fds for that open-file will be
      rather useless now (but still valid compared to close()!). This allows us
      to pass fds directly to session-processes from a trusted source. The
      source keeps a dup()ed fd and revokes access once the session-process is
      no longer active.
      Compared to the EVIOCMUTE proposal, we can avoid the CAP_SYS_ADMIN
      restriction now as there is no way to revive the fd again. Hence, a user
      is free to call EVIOCREVOKE themself to kill the fd.
      
      Additionally, this ioctl allows multi-layer access-control (again compared
      to EVIOCMUTE which was limited to one layer via CAP_SYS_ADMIN). A middle
      layer can simply request a new open-file from the layer above and pass it
      to the layer below. Now each layer can call EVIOCREVOKE on the fds to
      revoke access for all layers below, at the expense of one fd per layer.
      
      There's already ongoing experimental user-space work which demonstrates
      how it can be used:
        http://lists.freedesktop.org/archives/systemd-devel/2013-August/012897.htmlSigned-off-by: NDavid Herrmann <dh.herrmann@gmail.com>
      Signed-off-by: NDmitry Torokhov <dmitry.torokhov@gmail.com>
      c7dc6573
  21. 10 6月, 2013 1 次提交
    • D
      Input: evdev - flush queues during EVIOCGKEY-like ioctls · 48318028
      David Herrmann 提交于
      If userspace requests current KEY-state, they very likely assume that no
      such events are pending in the output queue of the evdev device.
      Otherwise, they will parse events which they already handled via
      EVIOCGKEY(). For XKB applications this can cause irreversible keyboard
      states if a modifier is locked multiple times because a CTRL-DOWN event is
      handled once via EVIOCGKEY() and once from the queue via read(), even
      though it should handle it only once.
      
      Therefore, lets do the only logical thing and flush the evdev queue
      atomically during this ioctl. We only flush events that are affected by
      the given ioctl.
      
      This only affects boolean events like KEY, SND, SW and LED. ABS, REL and
      others are not affected as duplicate events can be handled gracefully by
      user-space.
      
      Note: This actually breaks semantics of the evdev ABI. However,
      investigations showed that userspace already expects the new semantics and
      we end up fixing at least all XKB applications.
      All applications that are aware of this race-condition mirror the KEY
      state for each open-file and detect/drop duplicate events. Hence, they do
      not care whether duplicates are posted or not and work fine with this fix.
      
      Also note that we need proper locking to guarantee atomicity and avoid
      dead-locks. event_lock must be locked before queue_lock (see input-core).
      However, we can safely release event_lock while flushing the queue. This
      allows the input-core to proceed with pending events and only stop if it
      needs our queue_lock to post new events.
      This should guarantee that we don't block event-dispatching for too long
      while flushing a single event queue.
      Signed-off-by: NDavid Herrmann <dh.herrmann@gmail.com>
      Acked-by: NPeter Hutterer <peter.hutterer@who-t.net>
      Signed-off-by: NDmitry Torokhov <dmitry.torokhov@gmail.com>
      48318028
  22. 22 10月, 2012 1 次提交
  23. 09 10月, 2012 1 次提交
  24. 20 9月, 2012 2 次提交
  25. 02 5月, 2012 2 次提交
  26. 24 2月, 2012 1 次提交
  27. 09 2月, 2012 1 次提交
  28. 03 2月, 2012 1 次提交
    • J
      Input: add infrastructure for selecting clockid for event time stamps · a80b83b7
      John Stultz 提交于
      As noted by Arve and others, since wall time can jump backwards, it is
      difficult to use for input because one cannot determine if one event
      occurred before another or for how long a key was pressed.
      
      However, the timestamp field is part of the kernel ABI, and cannot be
      changed without possibly breaking existing users.
      
      This patch adds a new IOCTL that allows a clockid to be set in the
      evdev_client struct that will specify which time base to use for event
      timestamps (ie: CLOCK_MONOTONIC instead of CLOCK_REALTIME).
      
      For now we only support CLOCK_MONOTONIC and CLOCK_REALTIME, but
      in the future we could support other clockids if appropriate.
      
      The default remains CLOCK_REALTIME, so we don't change the ABI.
      Signed-off-by: NJohn Stultz <john.stultz@linaro.org>
      Reviewed-by: NDaniel Kurtz <djkurtz@google.com>
      Signed-off-by: NDmitry Torokhov <dtor@mail.ru>
      a80b83b7
  29. 02 2月, 2012 1 次提交
  30. 31 12月, 2011 3 次提交
  31. 18 6月, 2011 1 次提交
  32. 12 5月, 2011 1 次提交
  33. 27 4月, 2011 1 次提交
    • J
      Input: evdev - only signal polls on full packets · cdda911c
      Jeff Brown 提交于
      This patch modifies evdev so that it only becomes readable when
      the buffer contains an EV_SYN/SYN_REPORT event.
      
      On SMP systems, it is possible for an evdev client blocked on poll()
      to wake up and read events from the evdev ring buffer at the same
      rate as they are enqueued.  This can result in high CPU usage,
      particularly for MT devices, because the client ends up reading
      events one at a time instead of reading complete packets.
      
      We eliminate this problem by making the device readable only when
      the buffer contains at least one complete packet.  This causes
      clients to block until the entire packet is available.
      Signed-off-by: NJeff Brown <jeffbrown@android.com>
      Signed-off-by: NDmitry Torokhov <dtor@mail.ru>
      cdda911c
  34. 13 4月, 2011 1 次提交
  35. 27 2月, 2011 1 次提交
  36. 20 12月, 2010 1 次提交
    • H
      Input: introduce device properties · 85b77200
      Henrik Rydberg 提交于
      Today, userspace sets up an input device based on the data it emits.
      This is not always enough; a tablet and a touchscreen may emit exactly
      the same data, for instance, but the former should be set up with a
      pointer whereas the latter does not need to. Recently, a new type of
      touchpad has emerged where the buttons are under the pad, which
      changes logic without changing the emitted data. This patch introduces
      a new ioctl, EVIOCGPROP, which enables user access to a set of device
      properties useful during setup. The properties are given as a bitmap
      in the same fashion as the event types, and are also made available
      via sysfs, uevent and /proc/bus/input/devices.
      Acked-by: NPing Cheng <pingc@wacom.com>
      Acked-by: NChase Douglas <chase.douglas@canonical.com>
      Acked-by: NDmitry Torokhov <dtor@mail.ru>
      Signed-off-by: NHenrik Rydberg <rydberg@euromail.se>
      85b77200