Merge tag 'locking-urgent-2020-08-10' of git://git.kernel.org/pub/scm/linux/kernel...
[linux-2.6-microblaze.git] / drivers / dma-buf / dma-resv.c
index 07f5273..434a331 100644 (file)
 DEFINE_WD_CLASS(reservation_ww_class);
 EXPORT_SYMBOL(reservation_ww_class);
 
-struct lock_class_key reservation_seqcount_class;
-EXPORT_SYMBOL(reservation_seqcount_class);
-
-const char reservation_seqcount_string[] = "reservation_seqcount";
-EXPORT_SYMBOL(reservation_seqcount_string);
-
 /**
  * dma_resv_list_alloc - allocate fence list
  * @shared_max: number of fences we need space for
@@ -143,9 +137,8 @@ subsys_initcall(dma_resv_lockdep);
 void dma_resv_init(struct dma_resv *obj)
 {
        ww_mutex_init(&obj->lock, &reservation_ww_class);
+       seqcount_ww_mutex_init(&obj->seq, &obj->lock);
 
-       __seqcount_init(&obj->seq, reservation_seqcount_string,
-                       &reservation_seqcount_class);
        RCU_INIT_POINTER(obj->fence, NULL);
        RCU_INIT_POINTER(obj->fence_excl, NULL);
 }
@@ -275,7 +268,6 @@ void dma_resv_add_shared_fence(struct dma_resv *obj, struct dma_fence *fence)
        fobj = dma_resv_get_list(obj);
        count = fobj->shared_count;
 
-       preempt_disable();
        write_seqcount_begin(&obj->seq);
 
        for (i = 0; i < count; ++i) {
@@ -297,7 +289,6 @@ replace:
        smp_store_mb(fobj->shared_count, count);
 
        write_seqcount_end(&obj->seq);
-       preempt_enable();
        dma_fence_put(old);
 }
 EXPORT_SYMBOL(dma_resv_add_shared_fence);
@@ -324,14 +315,12 @@ void dma_resv_add_excl_fence(struct dma_resv *obj, struct dma_fence *fence)
        if (fence)
                dma_fence_get(fence);
 
-       preempt_disable();
        write_seqcount_begin(&obj->seq);
        /* write_seqcount_begin provides the necessary memory barrier */
        RCU_INIT_POINTER(obj->fence_excl, fence);
        if (old)
                old->shared_count = 0;
        write_seqcount_end(&obj->seq);
-       preempt_enable();
 
        /* inplace update, no shared fences */
        while (i--)
@@ -409,13 +398,11 @@ retry:
        src_list = dma_resv_get_list(dst);
        old = dma_resv_get_excl(dst);
 
-       preempt_disable();
        write_seqcount_begin(&dst->seq);
        /* write_seqcount_begin provides the necessary memory barrier */
        RCU_INIT_POINTER(dst->fence_excl, new);
        RCU_INIT_POINTER(dst->fence, dst_list);
        write_seqcount_end(&dst->seq);
-       preempt_enable();
 
        dma_resv_list_free(src_list);
        dma_fence_put(old);