Hi everybody,

we recently found that a good bunch of the RCU accesses to the dma_resv object 
are actually not correctly protected.

Those where fixed by either dropping the RCU approach and taking appropriate 
locks or using a central function to return the current fences as array and 
then work with that snapshot.

This set now tries to prevent adding any new broken code by rolling out two new 
interfaces to access the fences in a dma_resv object:

dma_resv_for_each_fence() - Iterator which should be used while holding the 
reservation lock.
dma_resv_for_each_fence_unlocked() - Iterator based on RCU which can be used 
without holding the reservation lock and automatic restart on concurrent 
modification.

While doing this we also move the decision which fences to use for write and 
read accesses into the dma_resv object which results in a quite nice code 
de-duplication and simplification.

The only two remaining users of the RCU shared fence interface are removing 
shared fences in amdkfd and debugfs code in qxl which will both be addresses in 
the next patch set.

Please review and/or comment,
Christian.


Reply via email to