1. 25 7月, 2013 1 次提交
    • D
      drm/ttm: convert to unified vma offset manager · 72525b3f
      David Herrmann 提交于
      Use the new vma-manager infrastructure. This doesn't change any
      implementation details as the vma-offset-manager is nearly copied 1-to-1
      from TTM.
      
      The vm_lock is moved into the offset manager so we can drop it from TTM.
      During lookup, we use the vma locking helpers to take a reference to the
      found object.
      In all other scenarios, locking stays the same as before. We always
      guarantee that drm_vma_offset_remove() is called only during destruction.
      Hence, helpers like drm_vma_node_offset_addr() are always safe as long as
      the node has a valid offset.
      
      This also drops the addr_space_offset member as it is a copy of vm_start
      in vma_node objects. Use the accessor functions instead.
      
      v4:
       - remove vm_lock
       - use drm_vma_offset_lock_lookup() to protect lookup (instead of vm_lock)
      
      Cc: Dave Airlie <airlied@redhat.com>
      Cc: Ben Skeggs <bskeggs@redhat.com>
      Cc: Maarten Lankhorst <maarten.lankhorst@canonical.com>
      Cc: Martin Peres <martin.peres@labri.fr>
      Cc: Alex Deucher <alexander.deucher@amd.com>
      Cc: Thomas Hellstrom <thellstrom@vmware.com>
      Signed-off-by: NDavid Herrmann <dh.herrmann@gmail.com>
      Reviewed-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      Signed-off-by: NDave Airlie <airlied@gmail.com>
      72525b3f
  2. 28 6月, 2013 2 次提交
    • M
      37c5a525
    • M
      drm/cirrus: do not attempt to acquire a reservation while in an interrupt handler · 19d4b72c
      Maarten Lankhorst 提交于
      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: NFengguang Wu <fengguang.wu@intel.com>
      Signed-off-by: NMaarten Lankhorst <maarten.lankhorst@canonical.com>
      Signed-off-by: NDave Airlie <airlied@redhat.com>
      19d4b72c
  3. 31 5月, 2013 1 次提交
  4. 02 5月, 2013 1 次提交
    • D
      drm/cirrus: deal with bo reserve fail in dirty update path · f3b2bbdc
      Dave Airlie 提交于
      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: NDave Airlie <airlied@redhat.com>
      f3b2bbdc
  5. 14 2月, 2013 2 次提交
  6. 21 1月, 2013 1 次提交
    • D
      drm: revamp framebuffer cleanup interfaces · 36206361
      Daniel Vetter 提交于
      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: NRob Clark <rob@ti.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      36206361
  7. 20 1月, 2013 2 次提交
    • D
      drm/<drivers>: Unified handling of unimplemented fb->create_handle · af26ef3b
      Daniel Vetter 提交于
      Some drivers don't have real ->create_handle callbacks.
      
      - cirrus/ast/mga200: Returns either 0 or -EINVAL.
      
      - udl: Didn't even bother with a callback, leading to a nice
        userspace-triggerable OOPS.
      
      - vmwgfx: This driver bothered with an implementation to return 0 as
        the handle (which is the canonical no-obj gem handle).
      
      All have in common that ->create_handle doesn't really make too much
      sense for them - that ioctl is used only for seamless fb takeover in
      the radeon/nouveau/i915 ddx drivers. So allow drivers to not implement
      this and return a consistent -ENODEV.
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      af26ef3b
    • D
      drm/<drivers>: reorder framebuffer init sequence · c7d73f6a
      Daniel Vetter 提交于
      With more fine-grained locking we can no longer rely on the big
      mode_config lock to prevent concurrent access to mode resources
      like framebuffers. Instead a framebuffer becomes accessible to
      other threads as soon as it is added to the relevant lookup
      structures. Hence it needs to be fully set up by the time drivers
      call drm_framebuffer_init.
      
      This patch here is the drivers part of that reorg. Nothing really fancy
      going on safe for three special cases.
      
      - exynos needs to be careful to properly unref all handles.
      - nouveau gets a resource leak fixed for free: one of the error
        cases didn't cleanup the framebuffer, which is now moot since
        the framebuffer is only registered once it is fully set up.
      - vmwgfx requires a slight reordering of operations, I'm hoping I didn't
        break anything (but it's refcount management only, so should be safe).
      
      v2: Split out exynos, since it's a bit more hairy than expected.
      
      v3: Drop bogus cirrus hunk noticed by Richard Wilbur.
      
      v4: Split out vmwgfx since there's a small change in return values.
      
      Reviewed-by: Rob Clark <rob@ti.com> (core + omapdrm)
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      c7d73f6a
  8. 18 1月, 2013 1 次提交
  9. 04 1月, 2013 1 次提交
    • G
      Drivers: gpu: remove __dev* attributes. · 56550d94
      Greg Kroah-Hartman 提交于
      CONFIG_HOTPLUG is going away as an option.  As a result, the __dev*
      markings need to be removed.
      
      This change removes the use of __devinit, __devexit_p, and __devexit
      from these drivers.
      
      Based on patches originally written by Bill Pemberton, but redone by me
      in order to handle some of the coding style issues better, by hand.
      
      Cc: Bill Pemberton <wfp5p@virginia.edu>
      Cc: David Airlie <airlied@linux.ie>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      56550d94
  10. 10 12月, 2012 1 次提交
    • M
      drm/ttm: remove no_wait_reserve, v3 · 97a875cb
      Maarten Lankhorst 提交于
      All items on the lru list are always reservable, so this is a stupid
      thing to keep. Not only that, it is used in a way which would
      guarantee deadlocks if it were ever to be set to block on reserve.
      
      This is a lot of churn, but mostly because of the removal of the
      argument which can be nested arbitrarily deeply in many places.
      
      No change of code in this patch except removal of the no_wait_reserve
      argument, the previous patch removed the use of no_wait_reserve.
      
      v2:
       - Warn if -EBUSY is returned on reservation, all objects on the list
         should be reservable. Adjusted patch slightly due to conflicts.
      v3:
       - Focus on no_wait_reserve removal only.
      Signed-off-by: NMaarten Lankhorst <maarten.lankhorst@canonical.com>
      Reviewed-by: NThomas Hellstrom <thellstrom@vmware.com>
      Signed-off-by: NDave Airlie <airlied@redhat.com>
      97a875cb
  11. 20 11月, 2012 2 次提交
  12. 03 10月, 2012 2 次提交
  13. 06 9月, 2012 1 次提交
    • K
      drm: use drm_compat_ioctl for 32-bit apps · 804d74ab
      Keith Packard 提交于
      Most of the DRM drivers appear to be missing the .compat_ioctl file
      operation entry necessary for 32-bit application compatibility.
      
      This patch  uses drm_compat_ioctl for all drivers which don't have
      their own, and which are using drm_ioctl for .unlocked_ioctl.
      
      This leaves drivers/gpu/drm/psb/psb_drv.c unchanged; it has a custom
      .unlocked_ioctl and will presumably need a custom .compat_ioctl as
      well.
      Signed-off-by: NKeith Packard <keithp@keithp.com>
      Signed-off-by: NDave Airlie <airlied@gmail.com>
      804d74ab
  14. 24 8月, 2012 1 次提交
  15. 20 7月, 2012 1 次提交
  16. 01 6月, 2012 1 次提交
  17. 31 5月, 2012 1 次提交
  18. 23 5月, 2012 1 次提交
  19. 20 5月, 2012 1 次提交
  20. 19 5月, 2012 1 次提交
  21. 17 5月, 2012 1 次提交
    • D
      drm/kms: driver for virtual cirrus under qemu · f9aa76a8
      Dave Airlie 提交于
      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: NAdam Jackson <ajax@redhat.com>
      Signed-off-by: NDave Airlie <airlied@redhat.com>
      f9aa76a8