1. 06 2月, 2017 1 次提交
  2. 03 2月, 2017 1 次提交
    • C
      drm: Improve drm_mm search (and fix topdown allocation) with rbtrees · 4e64e553
      Chris Wilson 提交于
      The drm_mm range manager claimed to support top-down insertion, but it
      was neither searching for the top-most hole that could fit the
      allocation request nor fitting the request to the hole correctly.
      
      In order to search the range efficiently, we create a secondary index
      for the holes using either their size or their address. This index
      allows us to find the smallest hole or the hole at the bottom or top of
      the range efficiently, whilst keeping the hole stack to rapidly service
      evictions.
      
      v2: Search for holes both high and low. Rename flags to mode.
      v3: Discover rb_entry_safe() and use it!
      v4: Kerneldoc for enum drm_mm_insert_mode.
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Reviewed-by: NJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
      Cc: Alex Deucher <alexander.deucher@amd.com>
      Cc: "Christian König" <christian.koenig@amd.com>
      Cc: David Airlie <airlied@linux.ie>
      Cc: Russell King <rmk+kernel@armlinux.org.uk>
      Cc: Daniel Vetter <daniel.vetter@intel.com>
      Cc: Jani Nikula <jani.nikula@linux.intel.com>
      Cc: Sean Paul <seanpaul@chromium.org>
      Cc: Lucas Stach <l.stach@pengutronix.de>
      Cc: Christian Gmeiner <christian.gmeiner@gmail.com>
      Cc: Rob Clark <robdclark@gmail.com>
      Cc: Thierry Reding <thierry.reding@gmail.com>
      Cc: Stephen Warren <swarren@wwwdotorg.org>
      Cc: Alexandre Courbot <gnurou@gmail.com>
      Cc: Eric Anholt <eric@anholt.net>
      Cc: Sinclair Yeh <syeh@vmware.com>
      Cc: Thomas Hellstrom <thellstrom@vmware.com>
      Reviewed-by: NAlex Deucher <alexander.deucher@amd.com>
      Reviewed-by: Sinclair Yeh <syeh@vmware.com> # vmwgfx
      Reviewed-by: Lucas Stach <l.stach@pengutronix.de> #etnaviv
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      Link: http://patchwork.freedesktop.org/patch/msgid/20170202210438.28702-1-chris@chris-wilson.co.uk
      4e64e553
  3. 25 1月, 2017 1 次提交
  4. 30 12月, 2016 2 次提交
  5. 28 12月, 2016 12 次提交
  6. 27 12月, 2016 8 次提交
  7. 16 12月, 2016 2 次提交
  8. 01 12月, 2016 1 次提交
    • C
      drm: Initialise drm_mm.head_node.allocated · cc98e6ce
      Chris Wilson 提交于
      commit 202b52b7 ("drm: Track drm_mm nodes with an interval tree")
      introduced a requirement that the special drm_mm.head_node was
      initialised and marked as not being allocated. It is a very special node
      that has no side but has a hole that represents the drm_mm address
      space, and holds the list of nodes. Since it is not a real node, it is
      not part of the node rbtree and we detect this as it being unallocated.
      This presumed that drm_mm_init() was initialising it to zero. It happens
      that i915 kzallocs its objects and so it was accidentally setting it,
      but for generic use we cannot make that assumption.
      
      [   22.981519] general protection fault: 0000 [#1] SMP
      [   22.981521] Modules linked in: test_drm_mm(+) ctr ccm arc4 rt2800usb rt2x00usb rt2800lib rt2x00lib crc_ccitt mac80211 cmac rfcomm bnep snd_hda_codec_realtek snd_hda_codec_hdmi snd_hda_codec_generic snd_hda_intel dcdbas snd_hda_codec x86_pkg_temp_thermal intel_powerclamp btusb snd_hda_core coretemp crct10dif_pclmul cfg80211 btrtl btbcm btintel bluetooth crc32_pclmul ghash_clmulni_intel aesni_intel snd_pcm i2c_hid aes_x86_64 lrw gf128mul glue_helper ablk_helper cryptd snd_timer hid_multitouch snd joydev serio_raw lpc_ich mfd_core i2c_designware_platform i2c_designware_core 8250_dw binfmt_misc soundcore acpi_pad nls_iso8859_1 usbhid hid psmouse ahci libahci [last unloaded: test_drm_mm]
      [   22.981544] CPU: 1 PID: 2088 Comm: drm_mm Tainted: G        W       4.9.0-rc7+ #234
      [   22.981545] Hardware name: Dell Inc. XPS 13 9343/0310JH, BIOS A07 11/11/2015
      [   22.981546] task: ffff88020c971cc0 task.stack: ffffc90001728000
      [   22.981547] RIP: 0010:[<ffffffff814050f0>]  [<ffffffff814050f0>] drm_mm_interval_tree_add_node+0xa0/0xd0
      [   22.981551] RSP: 0018:ffffc9000172ba98  EFLAGS: 00010202
      [   22.981552] RAX: 0f0000c69cf63d80 RBX: ffff88020be00000 RCX: ffff88020be00000
      [   22.981553] RDX: 0000000000000fff RSI: ffffc9000172bc48 RDI: ffffffff810ac4df
      [   22.981553] RBP: ffffc9000172bb08 R08: ffffc9000172bc70 R09: 0000000000000fff
      [   22.981554] R10: ffffffff810ac4d7 R11: 4dc04d8b4cffffe5 R12: 0000000000001000
      [   22.981555] R13: ffffc9000172bbd0 R14: ffffc9000172bbe0 R15: 0000000002000000
      [   22.981556] FS:  00007f80c9fab740(0000) GS:ffff88021f480000(0000) knlGS:0000000000000000
      [   22.981557] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [   22.981558] CR2: 00007f80c9fd5000 CR3: 000000020c191000 CR4: 00000000003406e0
      [   22.981559] Stack:
      [   22.981560]  ffffffff81405d09 ffff88020be00000 ffffc9000172bbe0 000000000172bb08
      [   22.981562]  ffffffffffffffff 0000000000000000 0000000000000000 0000000000000000
      [   22.981563]  0000000002000000 0000000002000000 ffffffffa02f3000 ffff88020be00000
      [   22.981565] Call Trace:
      [   22.981568]  [<ffffffff81405d09>] ? drm_mm_insert_node_generic+0x229/0x310
      [   22.981570]  [<ffffffffa02f3000>] ? 0xffffffffa02f3000
      [   22.981572]  [<ffffffffa02903c1>] __subtest_insert_range.constprop.7+0xd1/0x5b0 [test_drm_mm]
      [   22.981575]  [<ffffffff81081222>] ? default_wake_function+0x12/0x20
      [   22.981576]  [<ffffffff81096905>] ? __wake_up_common+0x55/0x90
      [   22.981578]  [<ffffffff81085f42>] ? sched_clock_cpu+0x72/0xa0
      [   22.981581]  [<ffffffff811308ad>] ? irq_work_queue+0xd/0x80
      [   22.981582]  [<ffffffff810abcc4>] ? wake_up_klogd+0x34/0x40
      [   22.981584]  [<ffffffff810ac19d>] ? console_unlock+0x4cd/0x530
      [   22.981585]  [<ffffffff810ac4d7>] ? vprintk_emit+0x2d7/0x490
      [   22.981587]  [<ffffffff810ac82f>] ? vprintk_default+0x1f/0x30
      [   22.981589]  [<ffffffff81146e1c>] ? printk+0x4d/0x4f
      [   22.981590]  [<ffffffffa02f3000>] ? 0xffffffffa02f3000
      [   22.981592]  [<ffffffffa02908b5>] subtest_insert_range+0x15/0x80 [test_drm_mm]
      [   22.981594]  [<ffffffffa02f3088>] test_drm_mm_init+0x88/0x1000 [test_drm_mm]
      [   22.981597]  [<ffffffff8100043d>] do_one_initcall+0x3d/0x150
      [   22.981600]  [<ffffffff8119dfbf>] ? kfree+0x13f/0x180
      [   22.981602]  [<ffffffff811471f2>] do_init_module+0x60/0x1f1
      [   22.981606]  [<ffffffff810db878>] load_module+0x2228/0x2790
      [   22.981608]  [<ffffffff810d8590>] ? __symbol_put+0x40/0x40
      [   22.981612]  [<ffffffff811c52b1>] ? kernel_read+0x41/0x60
      [   22.981614]  [<ffffffff810dbfb6>] SYSC_finit_module+0x96/0xd0
      [   22.981617]  [<ffffffff810dc00e>] SyS_finit_module+0xe/0x10
      [   22.981620]  [<ffffffff816e7aa4>] entry_SYSCALL_64_fastpath+0x17/0x98
      [   22.981622] Code: c7 41 30 00 00 00 00 48 89 e5 48 89 3a 48 c7 c2 20 4e 40 81 e8 b2 a1 f0 ff 5d c3 48 8d 56 78 45 31 d2 48 89 d6 eb 25 48 8b 51 58 <48> 39 50 38 73 04 48 89 50 38 4c 8b 58 28 4c 39 59 48 48 8d 50
      [   22.981651] RIP  [<ffffffff814050f0>] drm_mm_interval_tree_add_node+0xa0/0xd0
      [   22.981655]  RSP <ffffc9000172ba98>
      
      Testcase: igt/drm_mm
      Fixes: 202b52b7 ("drm: Track drm_mm nodes with an interval tree")
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Cc: David Herrmann <dh.herrmann@gmail.com>
      Cc: dri-devel@lists.freedesktop.org
      Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
      Cc: <drm-intel-fixes@lists.freedesktop.org> # v4.9-rc1+
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      Link: http://patchwork.freedesktop.org/patch/msgid/20161130205126.31106-1-chris@chris-wilson.co.uk
      cc98e6ce
  9. 24 11月, 2016 2 次提交
  10. 08 11月, 2016 2 次提交
  11. 08 8月, 2016 3 次提交
  12. 23 5月, 2016 1 次提交
  13. 08 9月, 2015 1 次提交
  14. 29 5月, 2015 1 次提交
    • R
      drm: clean up drm_mm debugfs output · 2f15791c
      Russell King 提交于
      The drm_mm debugfs output is difficult to read as two different formats
      are used for the addresses:
      
      0x00000080000000-0x0000008000b000: 45056: used
      0x8000b000-0x80016000: 45056: free
      0x00000080016000-0x0000008001b000: 20480: used
      0x8001b000-0x817a1000: 24666112: free
      0x000000817a1000-0x000000817a8000: 28672: used
      0x000000817a8000-0x00000081ba8000: 4194304: used
      
      Fix this by using %#018llx for all addresses, thus making the output:
      
      0x0000000080000000-0x000000008000b000: 45056: used
      0x000000008000b000-0x0000000080016000: 45056: free
      0x0000000080016000-0x000000008001b000: 20480: used
      0x000000008001b000-0x00000000817a1000: 24666112: free
      0x00000000817a1000-0x00000000817a8000: 28672: used
      0x00000000817a8000-0x0000000081ba8000: 4194304: used
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      Reviewed-by: NAlex Deucher <alexander.deucher@amd.com>
      Signed-off-by: NDave Airlie <airlied@redhat.com>
      2f15791c
  15. 16 3月, 2015 1 次提交
  16. 05 3月, 2015 1 次提交