Revision 832a3aad1e2927b1684e7369c9f36a370e0b95da authored by Chris Wilson on 18 March 2015, 18:19:22 UTC, committed by Jani Nikula on 26 March 2015, 09:05:54 UTC
If we retire requests last, we may use a later seqno and so clear
the requests lists without clearing the active list, leading to
confusion. Hence we should retire requests first for consistency with
the early return. The order used to be important as the lifecycle for
the object on the active list was determined by request->seqno. However,
the requests themselves are now reference counted removing the
constraint from the order of retirement.

Fixes regression from

commit 1b5a433a4dd967b125131da42b89b5cc0d5b1f57
Author: John Harrison <John.C.Harrison@Intel.com>
Date:   Mon Nov 24 18:49:42 2014 +0000

    drm/i915: Convert 'i915_seqno_passed' calls into 'i915_gem_request_completed
'

and a

	WARNING: CPU: 0 PID: 1383 at drivers/gpu/drm/i915/i915_gem_evict.c:279 i915_gem_evict_vm+0x10c/0x140()
	WARN_ON(!list_empty(&vm->active_list))

Identified by updating WATCH_LISTS:

	[drm:i915_verify_lists] *ERROR* blitter ring: active list not empty, but no requests
	WARNING: CPU: 0 PID: 681 at drivers/gpu/drm/i915/i915_gem.c:2751 i915_gem_retire_requests_ring+0x149/0x230()
	WARN_ON(i915_verify_lists(ring->dev))

Note that this is only a problem in evict_vm where the following happens
after a retire_request has cleaned out all requests, but not all active
bo:
- intel_ring_idle called from i915_gpu_idle notices that no requests are
  outstanding and immediately returns.
- i915_gem_retire_requests_ring called from i915_gem_retire_requests also
  immediately returns when there's no request, still leaving the bo on the
  active list.
- evict_vm hits the WARN_ON(!list_empty(&vm->active_list)) after evicting
  all active objects that there's still stuff left that shouldn't be
  there.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: John Harrison <John.C.Harrison@Intel.com>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
1 parent 59a58cb
Raw File
Kconfig
menuconfig SAMPLES
	bool "Sample kernel code"
	help
	  You can build and test sample kernel code here.

if SAMPLES

config SAMPLE_TRACE_EVENTS
	tristate "Build trace_events examples -- loadable modules only"
	depends on EVENT_TRACING && m
	help
	  This build trace event example modules.

config SAMPLE_KOBJECT
	tristate "Build kobject examples -- loadable modules only"
	depends on m
	help
	  This config option will allow you to build a number of
	  different kobject sample modules showing how to use kobjects,
	  ksets, and ktypes properly.

	  If in doubt, say "N" here.

config SAMPLE_KPROBES
	tristate "Build kprobes examples -- loadable modules only"
	depends on KPROBES && m
	help
	  This build several kprobes example modules.

config SAMPLE_KRETPROBES
	tristate "Build kretprobes example -- loadable modules only"
	default m
	depends on SAMPLE_KPROBES && KRETPROBES

config SAMPLE_HW_BREAKPOINT
	tristate "Build kernel hardware breakpoint examples -- loadable module only"
	depends on HAVE_HW_BREAKPOINT && m
	help
	  This builds kernel hardware breakpoint example modules.

config SAMPLE_KFIFO
	tristate "Build kfifo examples -- loadable modules only"
	depends on m
	help
	  This config option will allow you to build a number of
	  different kfifo sample modules showing how to use the
	  generic kfifo API.

	  If in doubt, say "N" here.

config SAMPLE_KDB
	tristate "Build kdb command example -- loadable modules only"
	depends on KGDB_KDB && m
	help
	  Build an example of how to dynamically add the hello
	  command to the kdb shell.

config SAMPLE_RPMSG_CLIENT
	tristate "Build rpmsg client sample -- loadable modules only"
	depends on RPMSG && m
	help
	  Build an rpmsg client sample driver, which demonstrates how
	  to communicate with an AMP-configured remote processor over
	  the rpmsg bus.

config SAMPLE_LIVEPATCH
	tristate "Build live patching sample -- loadable modules only"
	depends on LIVEPATCH && m
	help
	  Builds a sample live patch that replaces the procfs handler
	  for /proc/cmdline to print "this has been live patched".

endif # SAMPLES
back to top