1. 13 Jan, 2014 1 commit
  2. 28 Jun, 2013 1 commit
    • Maarten Lankhorst's avatar
      drm/cirrus: do not attempt to acquire a reservation while in an interrupt handler · 19d4b72c
      Maarten Lankhorst authored
      
      Mutexes should not be acquired in interrupt context. While the trylock
      fastpath is arguably safe on all implementations, the slowpath
      unlock path definitely isn't. This fixes the following lockdep splat:
      
      [   13.044313] ------------[ cut here ]------------
      [   13.044367] WARNING: at /c/kernel-tests/src/tip/kernel/mutex.c:858 mutex_trylock+0x87/0x220()
      [   13.044378] DEBUG_LOCKS_WARN_ON(in_interrupt())
      [   13.044378] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 3.10.0-rc4-00296-ga2963dd #20
      [   13.044379] Hardware name: Bochs Bochs, BIOS Bochs 01/01/2007
      [   13.044390]  0000000000000009 ffff88000de039f8 ffffffff81fc86d5 ffff88000de03a38
      [   13.044395]  ffffffff810d511b ffff880000000018 ffff88000f33c690 0000000000000001
      [   13.044398]  00000000000003f0 ffff88000f4677c8 0000000000000000 ffff88000de03a98
      [   13.044400] Call Trace:
      [   13.044412]  <IRQ>  [<ffffffff81fc86d5>] dump_stack+0x19/0x1b
      [   13.044441]  [<ffffffff810d511b>] warn_slowpath_common+0x6b/0x90
      [   13.044445]  [<ffffffff810d51a6>] warn_slowpath_fmt+0x46/0x50
      [   13.044448]  [<ffffffff81fd34d7>] mutex_trylock+0x87/0x220
      [   13.044482]  [<ffffffff8186484d>] cirrus_dirty_update+0x1cd/0x330
      [   13.044486]  [<ffffffff818649e8>] cirrus_imageblit+0x38/0x50
      [   13.044506]  [<ffffffff8165782e>] soft_cursor+0x22e/0x240
      [   13.044510]  [<ffffffff81656c31>] bit_cursor+0x581/0x5b0
      [   13.044525]  [<ffffffff815de9f4>] ? vsnprintf+0x124/0x670
      [   13.044529]  [<ffffffff81651333>] ? get_color.isra.16+0x43/0x130
      [   13.044532]  [<ffffffff81653fca>] fbcon_cursor+0x18a/0x1d0
      [   13.044535]  [<ffffffff816566b0>] ? update_attr.isra.2+0xa0/0xa0
      [   13.044556]  [<ffffffff81754b82>] hide_cursor+0x32/0xa0
      [   13.044565]  [<ffffffff81755bd3>] vt_console_print+0x103/0x3b0
      [   13.044569]  [<ffffffff810d58ac>] ? print_time+0x9c/0xb0
      [   13.044576]  [<ffffffff810d5960>] ? print_prefix+0xa0/0xc0
      [   13.044580]  [<ffffffff810d63f6>] call_console_drivers.constprop.6+0x146/0x1f0
      [   13.044593]  [<ffffffff815f9b38>] ? do_raw_spin_unlock+0xc8/0x100
      [   13.044597]  [<ffffffff810d6f27>] console_unlock+0x2f7/0x460
      [   13.044600]  [<ffffffff810d787a>] vprintk_emit+0x59a/0x5e0
      [   13.044615]  [<ffffffff81fb676c>] printk+0x4d/0x4f
      [   13.044650]  [<ffffffff82ba5511>] print_local_APIC+0x28/0x41c
      [   13.044672]  [<ffffffff8114db55>] generic_smp_call_function_single_interrupt+0x145/0x2b0
      [   13.044688]  [<ffffffff8106f9e7>] smp_call_function_single_interrupt+0x27/0x40
      [   13.044697]  [<ffffffff81fd8f72>] call_function_single_interrupt+0x72/0x80
      [   13.044707]  <EOI>  [<ffffffff81078166>] ? native_safe_halt+0x6/0x10
      [   13.044717]  [<ffffffff811425cd>] ? trace_hardirqs_on+0xd/0x10
      [   13.044738]  [<ffffffff8104f669>] default_idle+0x59/0x120
      [   13.044742]  [<ffffffff810501e8>] arch_cpu_idle+0x18/0x40
      [   13.044754]  [<ffffffff811320c5>] cpu_startup_entry+0x235/0x410
      [   13.044763]  [<ffffffff81f9e781>] rest_init+0xd1/0xe0
      [   13.044766]  [<ffffffff81f9e6b5>] ? rest_init+0x5/0xe0
      [   13.044778]  [<ffffffff82b93ec2>] start_kernel+0x425/0x493
      [   13.044781]  [<ffffffff82b93810>] ? repair_env_string+0x5e/0x5e
      [   13.044786]  [<ffffffff82b93595>] x86_64_start_reservations+0x2a/0x2c
      [   13.044789]  [<ffffffff82b93688>] x86_64_start_kernel+0xf1/0x100
      [   13.044799] ---[ end trace 113ad28772af4058 ]---
      Reported-by: default avatarFengguang Wu <fengguang.wu@intel.com>
      Signed-off-by: default avatarMaarten Lankhorst <maarten.lankhorst@canonical.com>
      Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
      19d4b72c
  3. 02 May, 2013 1 commit
    • Dave Airlie's avatar
      drm/cirrus: deal with bo reserve fail in dirty update path · f3b2bbdc
      Dave Airlie authored
      
      Port over the mgag200 fix to cirrus as it suffers the same issue.
      
          On F19 testing, it was noticed we get a lot of errors in dmesg
          about being unable to reserve the buffer when plymouth starts,
          this is due to the buffer being in the process of migrating,
          so it makes sense we can't reserve it.
      
          In order to deal with it, this adds delayed updates for the dirty
          updates, when the bo is unreservable, in the normal console case
          this shouldn't ever happen, its just when plymouth or X is
          pushing the console bo to system memory.
      
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
      f3b2bbdc
  4. 13 Feb, 2013 2 commits
  5. 20 Jan, 2013 1 commit
    • Daniel Vetter's avatar
      drm: revamp framebuffer cleanup interfaces · 36206361
      Daniel Vetter authored
      
      We have two classes of framebuffer
      - Created by the driver (atm only for fbdev), and the driver holds
        onto the last reference count until destruction.
      - Created by userspace and associated with a given fd. These
        framebuffers will be reaped when their assoiciated fb is closed.
      
      Now these two cases are set up differently, the framebuffers are on
      different lists and hence destruction needs to clean up different
      things. Also, for userspace framebuffers we remove them from any
      current usage, whereas for internal framebuffers it is assumed that
      the driver has done this already.
      
      Long story short, we need two different ways to cleanup such drivers.
      Three functions are involved in total:
      - drm_framebuffer_remove: Convenience function which removes the fb
        from all active usage and then drops the passed-in reference.
      - drm_framebuffer_unregister_private: Will remove driver-private
        framebuffers from relevant lists and drop the corresponding
        references. Should be called for driver-private framebuffers before
        dropping the last reference (or like for a lot of the drivers where
        the fbdev is embedded someplace else, before doing the cleanup
        manually).
      - drm_framebuffer_cleanup: Final cleanup for both classes of fbs,
        should be called by the driver's ->destroy callback once the last
        reference is gone.
      
      This patch just rolls out the new interfaces and updates all drivers
      (by adding calls to drm_framebuffer_unregister_private at all the
      right places)- no functional changes yet. Follow-on patches will move
      drm core code around and update the lifetime management for
      framebuffers, so that we are no longer required to keep framebuffers
      alive by locking mode_config.mutex.
      
      I've also updated the kerneldoc already.
      
      vmwgfx seems to again be a bit special, at least I haven't figured out
      how the fbdev support in that driver works. It smells like it's
      external though.
      
      v2: The i915 driver creates another private framebuffer in the
      load-detect code. Adjust its cleanup code, too.
      Reviewed-by: default avatarRob Clark <rob@ti.com>
      Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
      36206361
  6. 02 Oct, 2012 2 commits
  7. 17 May, 2012 1 commit
    • Dave Airlie's avatar
      drm/kms: driver for virtual cirrus under qemu · f9aa76a8
      Dave Airlie authored
      
      This is the initial driver for emulated cirrus GPU found in qemu.
      This driver only supports the emulated GPU and doesn't attempt
      to bind to any real cirrus GPUs.
      
      This driver is intended to be used with xf86-video-modesetting in userspace.
      It requires at least version 0.3.0
      
      This follow the same design as ast and mgag200, and is based on work
      done by Matthew Garrett previously.
      
      This GPU has no hw cursor, and it can't scanout 32-bpp, only packed 24-bpp.
      i.e. it sucks.
      Reviewed-by: default avatarAdam Jackson <ajax@redhat.com>
      Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
      f9aa76a8