1. 22 9月, 2016 2 次提交
  2. 26 6月, 2016 12 次提交
  3. 04 5月, 2016 2 次提交
  4. 01 5月, 2016 4 次提交
  5. 07 2月, 2016 1 次提交
    • M
      tty: vt: initialize softcursor_original correctly · e882f715
      Melchior FRANZ 提交于
      add_softcursor() stores the contents of the text buffer position in this
      variable before drawing the softcursor, whereas hide_softcursor() writes
      the value back. A value of -1 means that no cursor has been drawn and
      therefore no character is to be restored. softcursor_original, however,
      is only implicitly initialized with 0. Therefore, when hide_softcursor
      is called for the first time (console_init -> con_init -> redraw_screen
      -> hide_cursor), it wrongly writes 0x0000 in the top left corner of
      the text buffer. Normally, this is just as black as the rest of the
      screen (vc_video_erase_char) and can't be seen, but it appears as a
      black cursor rectangle on non-black backgrounds e.g. with boot option
      "vt.global_cursor_default=0 vt.color=0xf0". softcursor_original needs
      to be initialized with -1.
      Signed-off-by: NMelchior FRANZ <mfranz@aon.at>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      e882f715
  6. 29 1月, 2016 1 次提交
  7. 14 12月, 2015 1 次提交
  8. 24 7月, 2015 1 次提交
    • D
      tty/vt: Fix the memory leak in visual_init · 08b33249
      Dongxing Zhang 提交于
      If vc->vc_uni_pagedir_loc is not NULL, its refcount needs to be
      decreased before vc_uni_pagedir_loc is re-assigned.
      
      unreferenced object 0xffff88002cdd13b0 (size 512):
        comm "setfont", pid 503, jiffies 4294896503 (age 722.828s)
        hex dump (first 32 bytes):
          40 92 61 2b 00 88 ff ff 00 00 00 00 00 00 00 00  @.a+............
          00 00 00 00 00 00 00 00 a0 ad 61 2b 00 88 ff ff  ..........a+....
        backtrace:
          [<ffffffff817b755e>] kmemleak_alloc+0x4e/0xb0
          [<ffffffff811d4898>] kmem_cache_alloc_trace+0x1c8/0x240
          [<ffffffff814ae7d3>] con_do_clear_unimap.isra.2+0x83/0xe0
          [<ffffffff814ae9b2>] con_clear_unimap+0x22/0x40
          [<ffffffff814a8db8>] vt_ioctl+0xeb8/0x1170
          [<ffffffff8149b458>] tty_ioctl+0x208/0xca0
          [<ffffffff81207858>] do_vfs_ioctl+0x2f8/0x510
          [<ffffffff81207af1>] SyS_ioctl+0x81/0xa0
          [<ffffffff817ca2b2>] system_call_fastpath+0x16/0x75
          [<ffffffffffffffff>] 0xffffffffffffffff
      unreferenced object 0xffff88002b619240 (size 256):
        comm "setfont", pid 503, jiffies 4294896503 (age 722.828s)
        hex dump (first 32 bytes):
          90 bc 84 d5 00 88 ff ff 58 85 84 d5 00 88 ff ff  ........X.......
          88 ac 84 d5 00 88 ff ff e0 b1 84 d5 00 88 ff ff  ................
        backtrace:
          [<ffffffff817b755e>] kmemleak_alloc+0x4e/0xb0
          [<ffffffff811d4898>] kmem_cache_alloc_trace+0x1c8/0x240
          [<ffffffff814ae286>] con_insert_unipair+0x86/0x170
          [<ffffffff814af107>] con_set_unimap+0x1b7/0x280
          [<ffffffff814a8d65>] vt_ioctl+0xe65/0x1170
          [<ffffffff8149b458>] tty_ioctl+0x208/0xca0
          [<ffffffff81207858>] do_vfs_ioctl+0x2f8/0x510
          [<ffffffff81207af1>] SyS_ioctl+0x81/0xa0
          [<ffffffff817ca2b2>] system_call_fastpath+0x16/0x75
          [<ffffffffffffffff>] 0xffffffffffffffff
      Signed-off-by: NDongxing Zhang <dongxing.zhang@intel.com>
      Signed-off-by: NXiaoming Wang <xiaoming.wang@intel.com>
      Reviewed-by: NPeter Hurley <peter@hurleysoftware.com>
      Tested-by: NKonstantin Khlebnikov <khlebnikov@yandex-team.ru>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      08b33249
  9. 11 5月, 2015 3 次提交
    • D
      vt: Don't check KD_GRAPHICS when binding/unbinding · 77232f79
      Daniel Vetter 提交于
      This was introduced in
      
      commit 6db4063c
      Author: Antonino A. Daplas <adaplas@gmail.com>
      Date:   Mon Jun 26 00:27:12 2006 -0700
      
          [PATCH] VT binding: Add sysfs control to the VT layer
      
      with the justification
      
          "In addition, if any of the consoles are in KD_GRAPHICS mode, binding and
          unbinding will not succeed.  KD_GRAPHICS mode usually indicates that the
          underlying console hardware is used for other purposes other than displaying
          text (ie X).  This feature should prevent binding/unbinding from interfering
          with a graphics application using the VT."
      
      I think we should lift this artificial restriction though:
      - KD_GRAPHICS doesn't get cleaned up automatically, which means it's
        easy to have terminals stuck in KD_GRAPHICS when hacking around on
        X.
      - X doesn't really care, especially with drm where kms already blocks
        fbdev (and hence fbcon) when there's an active compositor.
      - This is a root-only interface with a separate .config option and
        it's possible to hang your machine already anyway if you
        unload/reload drivers and don't know what you're doing.
      
      With this patch i915.ko module reloading works again reliably,
      something in the recent fedora upgrades broke things.
      
      Cc: Antonino A. Daplas <adaplas@gmail.com>
      Cc: Peter Hurley <peter@hurleysoftware.com>
      Cc: Imre Deak <imre.deak@intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@intel.com>
      Acked-by: NDavid Herrmann <dh.herrmann@gmail.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      77232f79
    • I
      vt: fix console lock vs. kernfs s_active lock order · d364b5c3
      Imre Deak 提交于
      Currently there is a lock order problem between the console lock and the
      kernfs s_active lock of the console driver's bind sysfs entry. When
      writing to the sysfs entry the lock order is first s_active then console
      lock, when unregistering the console driver via
      do_unregister_con_driver() the order is the opposite. See the below
      bugzilla reference for one instance of a lockdep backtrace.
      
      Fix this by unregistering the console driver from a deferred work, where
      we can safely drop the console lock while unregistering the device and
      corresponding sysfs entries (which in turn acquire s_active). Note that
      we have to keep the console driver slot in the registered_con_driver
      array reserved for the driver that's being unregistered until it's fully
      removed. Otherwise a concurrent call to do_register_con_driver could
      try to reuse the same slot and fail when registering the corresponding
      device with a minor index that's still in use.
      
      Note that the referenced bug report contains two dmesg logs with two
      distinct lockdep reports: [1] is about a locking scenario involving
      s_active, console_lock and the fb_notifier list lock, while [2] is
      about a locking scenario involving only s_active and console_lock.
      In [1] locking fb_notifier triggers the lockdep warning only because
      of its dependence on console_lock, otherwise case [1] is the same
      s_active<->console_lock dependency problem fixed by this patch.
      Before this change we have the following locking scenarios involving
      the 3 locks:
      
      a) via do_unregister_framebuffer()->...->do_unregister_con_driver():
         1. console lock 2. fb_notifier lock 3. s_active lock
      b) for example via give_up_console()->do_unregister_con_driver():
         1. console lock 2. s_active lock
      c) via vt_bind()/vt_unbind():
         1. s_active lock 2. console lock
      
      Since c) is the console bind sysfs entry's write code path we can't
      change the locking order there. We can only fix this issue by removing
      s_active's dependence on the other two locks in a) and b). We can do
      this only in the vt code which owns the corresponding sysfs entry, so
      that after the change we have:
      
      a) 1. console lock 2. fb_notifier lock
      b) 1. console lock
      c) 1. s_active lock 2. console lock
      d) in the new con_driver_unregister_callback():
         1. s_active lock
      
      [1] https://bugs.freedesktop.org/attachment.cgi?id=87716
      [2] https://bugs.freedesktop.org/attachment.cgi?id=107602
      
      v2:
      - get console_lock earlier in con_driver_unregister_callback(), so we
        protect the following console driver field assignments there
      - add code coment explaining the reason for deferring the sysfs entry
        removal
      - add a third paragraph to the commit message explaining why there are
        two distinct lockdep reports and that this issue is independent of
        fb/fbcon. (Peter Hurley)
      v3:
      - clarify further the third paragraph
      v4:
      - rebased on v4 of patch 1/3
      Signed-off-by: NImre Deak <imre.deak@intel.com>
      Reviewed-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      d364b5c3
    • S
      vt: add cursor blink interval escape sequence · bd63364c
      Scot Doyle 提交于
      Add an escape sequence to specify the current console's cursor blink
      interval. The interval is specified as a number of milliseconds until
      the next cursor display state toggle, from 50 to 65535. /proc/loadavg
      did not show a difference with a one msec interval, but the lower
      bound is set to 50 msecs since slower hardware wasn't tested.
      
      Store the interval in the vc_data structure for later access by fbcon,
      initializing the value to fbcon's current hardcoded value of 200 msecs.
      Signed-off-by: NScot Doyle <lkml14@scotdoyle.com>
      Acked-by: NPavel Machek <pavel@ucw.cz>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      bd63364c
  10. 26 3月, 2015 1 次提交
  11. 07 3月, 2015 2 次提交
  12. 03 2月, 2015 1 次提交
  13. 10 1月, 2015 2 次提交
    • I
      vt: fix locking around vt_bind/vt_unbind · 4c215fe8
      Imre Deak 提交于
      Currently vt_bind and vt_unbind access at least the con_driver object
      and registered_con_driver array without holding the console lock. Fix
      this by locking around the whole function in each case.
      Signed-off-by: NImre Deak <imre.deak@intel.com>
      Reviewed-by: NPeter Hurley <peter@hurleysoftware.com>
      Reviewed-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      4c215fe8
    • I
      vt: fix check for system/busy console drivers when unregistering them · 2cf30f75
      Imre Deak 提交于
      The default console driver (conswitchp) and busy drivers bound to a
      console (as reported by con_is_bound()) shouldn't be unregistered.
      System console drivers (without the CON_DRIVER_FLAG_MODULE flag) can be
      unregistered, provided they are neither default nor busy. The current
      code checks for the CON_DRIVER_FLAG_INIT flag but this doesn't make
      sense: this flag is set for a driver whenever its associated console's
      con_startup() function is called, which first happens when the console
      driver is registered (so before the console gets bound) and gets cleared
      when the console gets unbound. The purpose of this flag is to show if we
      need to call con_startup() on a console before we use it.
      
      Based on the above, do_unregister_con_driver() in its current form will
      allow unregistering a console driver only if it was never bound, but
      will refuse to unregister one that was bound and later unbound.
      
      Fix this by dropping the CON_DRIVER_FLAG_INIT check, allowing
      unregistering of any console driver provided that it's not the default
      one and it's not busy.
      
      v2:
      - reword the third paragraph to clarify how the fix works (Peter Hurley)
      v3:
      - unchanged
      v4:
      - Allow unregistering a system console driver too, needed by i915 to
        unregister vgacon. Update commit description accordingly. (Daniel)
      Signed-off-by: NImre Deak <imre.deak@intel.com>
      Reviewed-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      2cf30f75
  14. 26 11月, 2014 1 次提交
  15. 22 11月, 2014 1 次提交
  16. 06 11月, 2014 2 次提交
  17. 07 6月, 2014 3 次提交
    • D
      vt: Don't ignore unbind errors in vt_unbind · f418f2ec
      Daniel Vetter 提交于
      Otherwise the loop will never stop since we don't make any
      forward progress. Noticed while breaking this accidentally
      in a painful attempt to make vga_con unregistering work.
      
      With this patch we'll bail out on the first attempt, which
      at least leaves a useful enough system behind for debugging.
      Livelocks on console_lock just aren't fun.
      
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: Jiri Slaby <jslaby@suse.cz>
      Reviewed-by: NDavid Herrmann <dh.herrmann@gmail.com>
      Acked-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      f418f2ec
    • D
      vt: Fix up unregistration of vt drivers · d9c660e7
      Daniel Vetter 提交于
      A bunch of issues:
      - We should not kick out the default console (which is tracked in
        conswitchp), so check for that.
      - Add better error codes so callers can differentiate between "something
        went wrong" and "your driver isn't registered already". i915 needs
        that so it doesn't fall over when reloading the driver and hence
        vga_con is already unregistered.
      - There's a mess with the driver flags: What we need to check for is
        that the driver isn't used any more, i.e. unbound completely (FLAG_INIT).
        And not whether it's the boot console or not (which is the only one
        which doesn't have FLAG_MODULE). Otherwise there's no way to kick
        out the boot console, which i915 wants to do to prevent havoc with
        vga_con interferring (which tends to hang machines).
      
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: Jiri Slaby <jslaby@suse.cz>
      Reviewed-by: NDavid Herrmann <dh.herrmann@gmail.com>
      Acked-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      d9c660e7
    • D
      vt: Fix replacement console check when unbinding · 249f7b3e
      Daniel Vetter 提交于
      I don't fully understand the magic of the vt register/unregister
      logic, but apparently everything but the inital console (as set
      in the conswitchp pointer) is marked with FLAG_MODULE. Which means
      if something unregistered the boot vt driver (e.g. i915.ko kicking
      out vga_con) there's nothing left when trying to unbind e.g. fbcon
      through sysfs.
      
      But in most cases have the dummy console hanging around besides the
      boot console, so this test is fairly dubious. What we actually want is
      simply a different console than the one we want to unbind.
      
      v2: Correct the commit message to clarify that the dummy console isn't
      always around, but only in most cases (David).
      
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: Jiri Slaby <jslaby@suse.cz>
      Cc: David Herrmann <dh.herrmann@gmail.com>
      Reviewed-by: NDavid Herrmann <dh.herrmann@gmail.com>
      Acked-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      249f7b3e