dma_fence_get(&head->base);
        dma_fence_chain_for_each(fence, &head->base) {
-               struct dma_fence_chain *chain = to_dma_fence_chain(fence);
-               struct dma_fence *f = chain ? chain->fence : fence;
+               struct dma_fence *f = dma_fence_chain_contained(fence);
 
                dma_fence_get(f);
                if (!dma_fence_add_callback(f, &head->cb, dma_fence_chain_cb)) {
 static bool dma_fence_chain_signaled(struct dma_fence *fence)
 {
        dma_fence_chain_for_each(fence, fence) {
-               struct dma_fence_chain *chain = to_dma_fence_chain(fence);
-               struct dma_fence *f = chain ? chain->fence : fence;
+               struct dma_fence *f = dma_fence_chain_contained(fence);
 
                if (!dma_fence_is_signaled(f)) {
                        dma_fence_put(fence);
 
        return container_of(fence, struct dma_fence_chain, base);
 }
 
+/**
+ * dma_fence_chain_contained - return the contained fence
+ * @fence: the fence to test
+ *
+ * If the fence is a dma_fence_chain the function returns the fence contained
+ * inside the chain object, otherwise it returns the fence itself.
+ */
+static inline struct dma_fence *
+dma_fence_chain_contained(struct dma_fence *fence)
+{
+       struct dma_fence_chain *chain = to_dma_fence_chain(fence);
+
+       return chain ? chain->fence : fence;
+}
+
 /**
  * dma_fence_chain_alloc
  *