@ -288,7 +288,6 @@ static bool radeon_fence_any_seq_signaled(struct radeon_device *rdev, u64 *seq)
* @ rdev : radeon device pointer
* @ target_seq : sequence number ( s ) we want to wait for
* @ intr : use interruptable sleep
* @ lock_ring : whether the ring should be locked or not
*
* Wait for the requested sequence number ( s ) to be written by any ring
* ( all asics ) . Sequnce number array is indexed by ring id .
@ -299,7 +298,7 @@ static bool radeon_fence_any_seq_signaled(struct radeon_device *rdev, u64 *seq)
* - EDEADLK is returned when a GPU lockup has been detected .
*/
static int radeon_fence_wait_seq ( struct radeon_device * rdev , u64 * target_seq ,
bool intr , bool lock_ring )
bool intr )
{
uint64_t last_seq [ RADEON_NUM_RINGS ] ;
bool signaled ;
@ -358,9 +357,6 @@ static int radeon_fence_wait_seq(struct radeon_device *rdev, u64 *target_seq,
if ( i ! = RADEON_NUM_RINGS )
continue ;
if ( lock_ring )
mutex_lock ( & rdev - > ring_lock ) ;
for ( i = 0 ; i < RADEON_NUM_RINGS ; + + i ) {
if ( ! target_seq [ i ] )
continue ;
@ -378,14 +374,9 @@ static int radeon_fence_wait_seq(struct radeon_device *rdev, u64 *target_seq,
/* remember that we need an reset */
rdev - > needs_reset = true ;
if ( lock_ring )
mutex_unlock ( & rdev - > ring_lock ) ;
wake_up_all ( & rdev - > fence_queue ) ;
return - EDEADLK ;
}
if ( lock_ring )
mutex_unlock ( & rdev - > ring_lock ) ;
}
}
return 0 ;
@ -416,7 +407,7 @@ int radeon_fence_wait(struct radeon_fence *fence, bool intr)
if ( seq [ fence - > ring ] = = RADEON_FENCE_SIGNALED_SEQ )
return 0 ;
r = radeon_fence_wait_seq ( fence - > rdev , seq , intr , true ) ;
r = radeon_fence_wait_seq ( fence - > rdev , seq , intr ) ;
if ( r )
return r ;
@ -464,7 +455,7 @@ int radeon_fence_wait_any(struct radeon_device *rdev,
if ( num_rings = = 0 )
return - ENOENT ;
r = radeon_fence_wait_seq ( rdev , seq , intr , true ) ;
r = radeon_fence_wait_seq ( rdev , seq , intr ) ;
if ( r ) {
return r ;
}
@ -472,37 +463,7 @@ int radeon_fence_wait_any(struct radeon_device *rdev,
}
/**
* radeon_fence_wait_locked - wait for a fence to signal
*
* @ fence : radeon fence object
*
* Wait for the requested fence to signal ( all asics ) .
* Returns 0 if the fence has passed , error for all other cases .
*/
int radeon_fence_wait_locked ( struct radeon_fence * fence )
{
uint64_t seq [ RADEON_NUM_RINGS ] = { } ;
int r ;
if ( fence = = NULL ) {
WARN ( 1 , " Querying an invalid fence : %p ! \n " , fence ) ;
return - EINVAL ;
}
seq [ fence - > ring ] = fence - > seq ;
if ( seq [ fence - > ring ] = = RADEON_FENCE_SIGNALED_SEQ )
return 0 ;
r = radeon_fence_wait_seq ( fence - > rdev , seq , false , false ) ;
if ( r )
return r ;
fence - > seq = RADEON_FENCE_SIGNALED_SEQ ;
return 0 ;
}
/**
* radeon_fence_wait_next_locked - wait for the next fence to signal
* radeon_fence_wait_next - wait for the next fence to signal
*
* @ rdev : radeon device pointer
* @ ring : ring index the fence is associated with
@ -511,7 +472,7 @@ int radeon_fence_wait_locked(struct radeon_fence *fence)
* Returns 0 if the next fence has passed , error for all other cases .
* Caller must hold ring lock .
*/
int radeon_fence_wait_next_locked ( struct radeon_device * rdev , int ring )
int radeon_fence_wait_next ( struct radeon_device * rdev , int ring )
{
uint64_t seq [ RADEON_NUM_RINGS ] = { } ;
@ -521,11 +482,11 @@ int radeon_fence_wait_next_locked(struct radeon_device *rdev, int ring)
already the last emited fence */
return - ENOENT ;
}
return radeon_fence_wait_seq ( rdev , seq , false , false ) ;
return radeon_fence_wait_seq ( rdev , seq , false ) ;
}
/**
* radeon_fence_wait_empty_locked - wait for all fences to signal
* radeon_fence_wait_empty - wait for all fences to signal
*
* @ rdev : radeon device pointer
* @ ring : ring index the fence is associated with
@ -534,7 +495,7 @@ int radeon_fence_wait_next_locked(struct radeon_device *rdev, int ring)
* Returns 0 if the fences have passed , error for all other cases .
* Caller must hold ring lock .
*/
int radeon_fence_wait_empty_locked ( struct radeon_device * rdev , int ring )
int radeon_fence_wait_empty ( struct radeon_device * rdev , int ring )
{
uint64_t seq [ RADEON_NUM_RINGS ] = { } ;
int r ;
@ -543,7 +504,7 @@ int radeon_fence_wait_empty_locked(struct radeon_device *rdev, int ring)
if ( ! seq [ ring ] )
return 0 ;
r = radeon_fence_wait_seq ( rdev , seq , false , false ) ;
r = radeon_fence_wait_seq ( rdev , seq , false ) ;
if ( r ) {
if ( r = = - EDEADLK )
return - EDEADLK ;
@ -794,7 +755,7 @@ void radeon_fence_driver_fini(struct radeon_device *rdev)
for ( ring = 0 ; ring < RADEON_NUM_RINGS ; ring + + ) {
if ( ! rdev - > fence_drv [ ring ] . initialized )
continue ;
r = radeon_fence_wait_empty_locked ( rdev , ring ) ;
r = radeon_fence_wait_empty ( rdev , ring ) ;
if ( r ) {
/* no need to trigger GPU reset as we are unloading */
radeon_fence_driver_force_completion ( rdev ) ;