1. 07 8月, 2013 1 次提交
  2. 01 8月, 2013 1 次提交
    • D
      drm/mm: include required headers in drm_mm.h · 86e81f0e
      David Herrmann 提交于
      We need BUG_ON(), spinlock_t and standard kernel data-types so include the
      right headers.
      
      Subject: [drm-intel:drm-intel-nightly 154/166] include/drm/drm_mm.h:67:2:
       error: unknown type name 'spinlock_t'
      Message-ID: <51f14693.g5HGdcuw2v3m8FOd%fengguang.wu@intel.com>
      
      In case it didn't link to it correctly. Somehow this bug doesn't occur
      here on my machine, hmm. But I think fixing drm_mm.h is better than
      changing the include-order in drm_vma_manager.h, so this is what I
      did.
      Signed-off-by: NDavid Herrmann <dh.herrmann@gmail.com>
      Signed-off-by: NDave Airlie <airlied@redhat.com>
      86e81f0e
  3. 25 7月, 2013 4 次提交
    • D
      drm/vma: provide drm_vma_node_unmap() helper · 51335df9
      David Herrmann 提交于
      Instead of unmapping the nodes in TTM and GEM users manually, we provide
      a generic wrapper which does the correct thing for all vma-nodes.
      
      v2: remove bdev->dev_mapping test in ttm_bo_unmap_virtual_unlocked() as
      ttm_mem_io_free_vm() does nothing in that case (io_reserved_vm is 0).
      v4: Fix docbook comments
      v5: use drm_vma_node_size()
      
      Cc: Dave Airlie <airlied@redhat.com>
      Cc: Maarten Lankhorst <maarten.lankhorst@canonical.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>
      51335df9
    • 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
    • D
      drm/gem: convert to new unified vma manager · 0de23977
      David Herrmann 提交于
      Use the new vma manager instead of the old hashtable. Also convert all
      drivers to use the new convenience helpers. This drops all the
      (map_list.hash.key << PAGE_SHIFT) non-sense.
      
      Locking and access-management is exactly the same as before with an
      additional lock inside of the vma-manager, which strictly wouldn't be
      needed for gem.
      
      v2:
       - rebase on drm-next
       - init nodes via drm_vma_node_reset() in drm_gem.c
      v3:
       - fix tegra
      v4:
       - remove duplicate if (drm_vma_node_has_offset()) checks
       - inline now trivial drm_vma_node_offset_addr() calls
      v5:
       - skip node-reset on gem-init due to kzalloc()
       - do not allow mapping gem-objects with offsets (backwards compat)
       - remove unneccessary casts
      
      Cc: Inki Dae <inki.dae@samsung.com>
      Cc: Rob Clark <robdclark@gmail.com>
      Cc: Dave Airlie <airlied@redhat.com>
      Cc: Thierry Reding <thierry.reding@gmail.com>
      Signed-off-by: NDavid Herrmann <dh.herrmann@gmail.com>
      Acked-by: NPatrik Jakobsson <patrik.r.jakobsson@gmail.com>
      Reviewed-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      Signed-off-by: NDave Airlie <airlied@gmail.com>
      0de23977
    • D
      drm: add unified vma offset manager · fe3078fa
      David Herrmann 提交于
      If we want to map GPU memory into user-space, we need to linearize the
      addresses to not confuse mm-core. Currently, GEM and TTM both implement
      their own offset-managers to assign a pgoff to each object for user-space
      CPU access. GEM uses a hash-table, TTM uses an rbtree.
      
      This patch provides a unified implementation that can be used to replace
      both. TTM allows partial mmaps with a given offset, so we cannot use
      hashtables as the start address may not be known at mmap time. Hence, we
      use the rbtree-implementation of TTM.
      
      We could easily update drm_mm to use an rbtree instead of a linked list
      for it's object list and thus drop the rbtree from the vma-manager.
      However, this would slow down drm_mm object allocation for all other
      use-cases (rbtree insertion) and add another 4-8 bytes to each mm node.
      Hence, use the separate tree but allow for later migration.
      
      This is a rewrite of the 2012-proposal by David Airlie <airlied@linux.ie>
      
      v2:
       - fix Docbook integration
       - drop drm_mm_node_linked() and use drm_mm_node_allocated()
       - remove unjustified likely/unlikely usage (but keep for rbtree paths)
       - remove BUG_ON() as drm_mm already does that
       - clarify page-based vs. byte-based addresses
       - use drm_vma_node_reset() for initialization, too
      v4:
       - allow external locking via drm_vma_offset_un/lock_lookup()
       - add locked lookup helper drm_vma_offset_lookup_locked()
      v5:
       - fix drm_vma_offset_lookup() to correctly validate range-mismatches
         (fix (offset > start + pages))
       - fix drm_vma_offset_exact_lookup() to actually do what it says
       - remove redundant vm_pages member (add drm_vma_node_size() helper)
       - remove unneeded goto
       - fix documentation
      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>
      fe3078fa
  4. 23 7月, 2013 11 次提交
  5. 09 7月, 2013 2 次提交
    • B
      drm: Change create block to reserve node · 338710e7
      Ben Widawsky 提交于
      With the previous patch we no longer actually create a node, we simply
      find the correct hole and occupy it. This very well could have been
      squashed with the last patch, but since I already had David's review, I
      figured it's easiest to keep it distinct.
      
      Also update the users in i915. Conveniently this is the only user of the
      interface.
      
      CC: David Airlie <airlied@linux.ie>
      CC: <dri-devel@lists.freedesktop.org>
      Signed-off-by: NBen Widawsky <ben@bwidawsk.net>
      Acked-by: NDavid Airlie <airlied@linux.ie>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      338710e7
    • B
      drm: pre allocate node for create_block · b3a070cc
      Ben Widawsky 提交于
      For an upcoming patch where we introduce the i915 VMA, it's ideal to
      have the drm_mm_node as part of the VMA struct (ie. it's pre-allocated).
      Part of the conversion to VMAs is to kill off obj->gtt_space. Doing this
      will break a bunch of code, but amongst them are 2 callers of
      drm_mm_create_block(), both related to stolen memory.
      
      It also allows us to embed the drm_mm_node into the object currently
      which provides a nice transition over to the new code.
      
      v2: Reordered to do before ripping out obj->gtt_offset.
      Some minor cleanups made available because of reordering.
      
      v3: s/continue/break on failed stolen node allocation (David)
      Set obj->gtt_space on failed node allocation (David)
      Only unref stolen (fix double free) on failed create_stolen (David)
      Free node, and NULL it in failed create_stolen (David)
      Add back accidentally removed newline (David)
      
      CC: <dri-devel@lists.freedesktop.org>
      Reviewed-by: NDavid Herrmann <dh.herrmann@gmail.com>
      Signed-off-by: NBen Widawsky <ben@bwidawsk.net>
      Acked-by: NDavid Airlie <airlied@linux.ie>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      b3a070cc
  6. 05 7月, 2013 3 次提交
  7. 04 7月, 2013 1 次提交
  8. 02 7月, 2013 1 次提交
  9. 28 6月, 2013 7 次提交
  10. 27 6月, 2013 3 次提交
  11. 25 6月, 2013 1 次提交
    • D
      drm: fix fb leak in setcrtc · 5cef29aa
      Daniel Vetter 提交于
      Drivers are allowed (actually have to) disable unrelated crtcs in
      their ->set_config callback (when we steal all the connectors from
      that crtc). If they do that they'll clear crtc->fb to NULL.
      
      Which results in a refcount leak, since the drm core is keeping track
      of that reference.
      
      To fix this track the old fb of all crtcs and adjust references for
      all of them. Of course, since we only hold an additional reference for
      the fb for the current crtc we need to increase refcounts before we
      drop the old one.
      
      This approach has the benefit that it inches us a bit closer to an
      atomic modeset world, where we want to update the config of all crtcs
      in one step.
      
      This regression has been introduce in the framebuffer refcount
      conversion, specifically in
      
      commit b0d12325
      Author: Daniel Vetter <daniel.vetter@ffwll.ch>
      Date:   Tue Dec 11 01:07:12 2012 +0100
      
          drm: refcounting for crtc framebuffers
      Reported-by: NRussell King <linux@arm.linux.org.uk>
      Cc: Russell King <linux@arm.linux.org.uk>
      Cc: stable@vger.kernel.org
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      Signed-off-by: NDave Airlie <airlied@redhat.com>
      5cef29aa
  12. 17 6月, 2013 2 次提交
  13. 11 6月, 2013 3 次提交