Lines Matching defs:fence

37 #include <linux/dma-fence-array.h>
38 #include <linux/dma-fence-chain.h>
1678 dma_fence_get(struct dma_fence *fence)
1680 if (fence)
1681 kref_get(&fence->refcount);
1682 return fence;
1686 dma_fence_get_rcu(struct dma_fence *fence)
1688 if (fence)
1689 kref_get(&fence->refcount);
1690 return fence;
1696 struct dma_fence *fence;
1699 fence = *dfp;
1700 if (fence)
1701 kref_get(&fence->refcount);
1702 return fence;
1708 struct dma_fence *fence = container_of(ref, struct dma_fence, refcount);
1709 if (fence->ops && fence->ops->release)
1710 fence->ops->release(fence);
1712 free(fence, M_DRM, 0);
1716 dma_fence_put(struct dma_fence *fence)
1718 if (fence)
1719 kref_put(&fence->refcount, dma_fence_release);
1723 dma_fence_signal_timestamp_locked(struct dma_fence *fence, ktime_t timestamp)
1728 if (fence == NULL)
1731 if (test_and_set_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags))
1734 list_replace(&fence->cb_list, &cb_list);
1736 fence->timestamp = timestamp;
1737 set_bit(DMA_FENCE_FLAG_TIMESTAMP_BIT, &fence->flags);
1741 cur->func(fence, cur);
1748 dma_fence_signal(struct dma_fence *fence)
1752 if (fence == NULL)
1755 mtx_enter(fence->lock);
1756 r = dma_fence_signal_timestamp_locked(fence, ktime_get());
1757 mtx_leave(fence->lock);
1763 dma_fence_signal_locked(struct dma_fence *fence)
1765 if (fence == NULL)
1768 return dma_fence_signal_timestamp_locked(fence, ktime_get());
1772 dma_fence_signal_timestamp(struct dma_fence *fence, ktime_t timestamp)
1776 if (fence == NULL)
1779 mtx_enter(fence->lock);
1780 r = dma_fence_signal_timestamp_locked(fence, timestamp);
1781 mtx_leave(fence->lock);
1787 dma_fence_is_signaled(struct dma_fence *fence)
1789 if (test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags))
1792 if (fence->ops->signaled && fence->ops->signaled(fence)) {
1793 dma_fence_signal(fence);
1801 dma_fence_is_signaled_locked(struct dma_fence *fence)
1803 if (test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags))
1806 if (fence->ops->signaled && fence->ops->signaled(fence)) {
1807 dma_fence_signal_locked(fence);
1815 dma_fence_timestamp(struct dma_fence *fence)
1817 if (test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags)) {
1818 while (!test_bit(DMA_FENCE_FLAG_TIMESTAMP_BIT, &fence->flags))
1820 return fence->timestamp;
1827 dma_fence_wait_timeout(struct dma_fence *fence, bool intr, long timeout)
1832 if (fence->ops->wait)
1833 return fence->ops->wait(fence, intr, timeout);
1835 return dma_fence_default_wait(fence, intr, timeout);
1839 dma_fence_wait(struct dma_fence *fence, bool intr)
1843 ret = dma_fence_wait_timeout(fence, intr, MAX_SCHEDULE_TIMEOUT);
1851 dma_fence_enable_sw_signaling(struct dma_fence *fence)
1853 if (!test_and_set_bit(DMA_FENCE_FLAG_ENABLE_SIGNAL_BIT, &fence->flags) &&
1854 !test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags) &&
1855 fence->ops->enable_signaling) {
1856 mtx_enter(fence->lock);
1857 if (!fence->ops->enable_signaling(fence))
1858 dma_fence_signal_locked(fence);
1859 mtx_leave(fence->lock);
1864 dma_fence_init(struct dma_fence *fence, const struct dma_fence_ops *ops,
1867 fence->ops = ops;
1868 fence->lock = lock;
1869 fence->context = context;
1870 fence->seqno = seqno;
1871 fence->flags = 0;
1872 fence->error = 0;
1873 kref_init(&fence->refcount);
1874 INIT_LIST_HEAD(&fence->cb_list);
1878 dma_fence_add_callback(struct dma_fence *fence, struct dma_fence_cb *cb,
1884 if (WARN_ON(!fence || !func))
1887 if (test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags)) {
1892 mtx_enter(fence->lock);
1894 was_set = test_and_set_bit(DMA_FENCE_FLAG_ENABLE_SIGNAL_BIT, &fence->flags);
1896 if (test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags))
1898 else if (!was_set && fence->ops->enable_signaling) {
1899 if (!fence->ops->enable_signaling(fence)) {
1900 dma_fence_signal_locked(fence);
1907 list_add_tail(&cb->node, &fence->cb_list);
1910 mtx_leave(fence->lock);
1916 dma_fence_remove_callback(struct dma_fence *fence, struct dma_fence_cb *cb)
1920 mtx_enter(fence->lock);
1926 mtx_leave(fence->lock);
1945 dma_fence_default_wait_cb(struct dma_fence *fence, struct dma_fence_cb *cb)
1953 dma_fence_default_wait(struct dma_fence *fence, bool intr, signed long timeout)
1963 if (test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags))
1966 mtx_enter(fence->lock);
1969 &fence->flags);
1971 if (test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags))
1974 if (!was_set && fence->ops->enable_signaling) {
1975 if (!fence->ops->enable_signaling(fence)) {
1976 dma_fence_signal_locked(fence);
1988 list_add(&cb.base.node, &fence->cb_list);
1992 if (test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags))
1994 err = msleep(curproc, fence->lock, intr ? PCATCH : 0,
2005 mtx_leave(fence->lock);
2017 struct dma_fence *fence = fences[i];
2018 if (test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags)) {
2054 struct dma_fence *fence = fences[i];
2056 if (dma_fence_add_callback(fence, &cb[i].base,
2095 dma_fence_stub_get_name(struct dma_fence *fence)
2132 dma_fence_array_get_driver_name(struct dma_fence *fence)
2138 dma_fence_array_get_timeline_name(struct dma_fence *fence)
2165 dma_fence_array_enable_signaling(struct dma_fence *fence)
2167 struct dma_fence_array *dfa = to_dma_fence_array(fence);
2186 dma_fence_array_signaled(struct dma_fence *fence)
2188 struct dma_fence_array *dfa = to_dma_fence_array(fence);
2194 dma_fence_array_release(struct dma_fence *fence)
2196 struct dma_fence_array *dfa = to_dma_fence_array(fence);
2203 dma_fence_free(fence);
2274 struct dma_fence *fence;
2282 fence = &chain->base;
2283 if (fence->seqno < seqno)
2286 dma_fence_chain_for_each(*df, fence) {
2287 if ((*df)->context != fence->context)
2294 dma_fence_put(fence);
2301 struct dma_fence *fence, uint64_t seqno)
2305 chain->fence = fence;
2329 dma_fence_chain_get_driver_name(struct dma_fence *fence)
2335 dma_fence_chain_get_timeline_name(struct dma_fence *fence)
2363 dma_fence_chain_enable_signaling(struct dma_fence *fence)
2368 h = to_dma_fence_chain(fence);
2370 dma_fence_chain_for_each(fence, &h->base) {
2371 chain = to_dma_fence_chain(fence);
2373 f = fence;
2375 f = chain->fence;
2379 dma_fence_put(fence);
2389 dma_fence_chain_signaled(struct dma_fence *fence)
2394 dma_fence_chain_for_each(fence, fence) {
2395 chain = to_dma_fence_chain(fence);
2397 f = fence;
2399 f = chain->fence;
2402 dma_fence_put(fence);
2410 dma_fence_chain_release(struct dma_fence *fence)
2412 struct dma_fence_chain *chain = to_dma_fence_chain(fence);
2426 dma_fence_put(chain->fence);
2427 dma_fence_free(fence);
2431 dma_fence_chain_walk(struct dma_fence *fence)
2433 struct dma_fence_chain *chain = to_dma_fence_chain(fence), *prev_chain;
2437 dma_fence_put(fence);
2444 if (!dma_fence_is_signaled(prev_chain->fence))
2457 dma_fence_put(fence);
2471 dma_fence_is_container(struct dma_fence *fence)
2473 return (fence->ops == &dma_fence_chain_ops) ||
2474 (fence->ops == &dma_fence_array_ops);
3099 dma_fence_put(sf->fence);
3215 f = dma_fence_get(sf->fence);
3221 sync_file_create(struct dma_fence *fence)
3234 sf->fence = dma_fence_get(fence);