Revision 85b144f860176ec18db927d6d9ecdfb24d9c6483 authored by Maarten Lankhorst on 29 November 2012, 11:36:54 UTC, committed by Dave Airlie on 10 December 2012, 10:21:03 UTC
By removing the unlocking of lru and retaking it immediately, a race is
removed where the bo is taken off the swap list or the lru list between
the unlock and relock. As such the cleanup_refs code can be simplified,
it will attempt to call ttm_bo_wait non-blockingly, and if it fails
it will drop the locks and perform a blocking wait, or return an error
if no_wait_gpu was set.

The need for looping is also eliminated, since swapout and evict_mem_first
will always follow the destruction path, no new fence is allowed
to be attached. As far as I can see this may already have been the case,
but the unlocking / relocking required a complicated loop to deal with
re-reservation.

Changes since v1:
 - Simplify no_wait_gpu case by folding it in with empty ddestroy.
 - Hold a reservation while calling ttm_bo_cleanup_memtype_use again.
Changes since v2:
 - Do not remove bo from lru list while waiting

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@canonical.com>
Reviewed-by: Thomas Hellstrom <thellstrom@vmware.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
1 parent 6ed9ccb
Raw File
Kconfig
#
# Timer subsystem related configuration options
#

# Options selectable by arch Kconfig

# Watchdog function for clocksources to detect instabilities
config CLOCKSOURCE_WATCHDOG
	bool

# Architecture has extra clocksource data
config ARCH_CLOCKSOURCE_DATA
	bool

# Timekeeping vsyscall support
config GENERIC_TIME_VSYSCALL
	bool

# Timekeeping vsyscall support
config GENERIC_TIME_VSYSCALL_OLD
	bool

# ktime_t scalar 64bit nsec representation
config KTIME_SCALAR
	bool

# Old style timekeeping
config ARCH_USES_GETTIMEOFFSET
	bool

# The generic clock events infrastructure
config GENERIC_CLOCKEVENTS
	bool

# Migration helper. Builds, but does not invoke
config GENERIC_CLOCKEVENTS_BUILD
	bool
	default y
	depends on GENERIC_CLOCKEVENTS

# Clockevents broadcasting infrastructure
config GENERIC_CLOCKEVENTS_BROADCAST
	bool
	depends on GENERIC_CLOCKEVENTS

# Automatically adjust the min. reprogramming time for
# clock event device
config GENERIC_CLOCKEVENTS_MIN_ADJUST
	bool

# Generic update of CMOS clock
config GENERIC_CMOS_UPDATE
	bool

if GENERIC_CLOCKEVENTS
menu "Timers subsystem"

# Core internal switch. Selected by NO_HZ / HIGH_RES_TIMERS. This is
# only related to the tick functionality. Oneshot clockevent devices
# are supported independ of this.
config TICK_ONESHOT
	bool

config NO_HZ
	bool "Tickless System (Dynamic Ticks)"
	depends on !ARCH_USES_GETTIMEOFFSET && GENERIC_CLOCKEVENTS
	select TICK_ONESHOT
	help
	  This option enables a tickless system: timer interrupts will
	  only trigger on an as-needed basis both when the system is
	  busy and when the system is idle.

config HIGH_RES_TIMERS
	bool "High Resolution Timer Support"
	depends on !ARCH_USES_GETTIMEOFFSET && GENERIC_CLOCKEVENTS
	select TICK_ONESHOT
	help
	  This option enables high resolution timer support. If your
	  hardware is not capable then this option only increases
	  the size of the kernel image.

endmenu
endif
back to top