]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - drivers/dma-buf/dma-buf.c
Merge branch 'work.misc' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
[mirror_ubuntu-bionic-kernel.git] / drivers / dma-buf / dma-buf.c
index 0007b792827b7ec16a21351f924522e7344a6c92..512bdbc23bbb43b85e9da8badbe24bcd64a66872 100644 (file)
@@ -405,8 +405,8 @@ struct dma_buf *dma_buf_export(const struct dma_buf_export_info *exp_info)
                          || !exp_info->ops->map_dma_buf
                          || !exp_info->ops->unmap_dma_buf
                          || !exp_info->ops->release
-                         || !exp_info->ops->kmap_atomic
-                         || !exp_info->ops->kmap
+                         || !exp_info->ops->map_atomic
+                         || !exp_info->ops->map
                          || !exp_info->ops->mmap)) {
                return ERR_PTR(-EINVAL);
        }
@@ -872,7 +872,7 @@ void *dma_buf_kmap_atomic(struct dma_buf *dmabuf, unsigned long page_num)
 {
        WARN_ON(!dmabuf);
 
-       return dmabuf->ops->kmap_atomic(dmabuf, page_num);
+       return dmabuf->ops->map_atomic(dmabuf, page_num);
 }
 EXPORT_SYMBOL_GPL(dma_buf_kmap_atomic);
 
@@ -889,8 +889,8 @@ void dma_buf_kunmap_atomic(struct dma_buf *dmabuf, unsigned long page_num,
 {
        WARN_ON(!dmabuf);
 
-       if (dmabuf->ops->kunmap_atomic)
-               dmabuf->ops->kunmap_atomic(dmabuf, page_num, vaddr);
+       if (dmabuf->ops->unmap_atomic)
+               dmabuf->ops->unmap_atomic(dmabuf, page_num, vaddr);
 }
 EXPORT_SYMBOL_GPL(dma_buf_kunmap_atomic);
 
@@ -907,7 +907,7 @@ void *dma_buf_kmap(struct dma_buf *dmabuf, unsigned long page_num)
 {
        WARN_ON(!dmabuf);
 
-       return dmabuf->ops->kmap(dmabuf, page_num);
+       return dmabuf->ops->map(dmabuf, page_num);
 }
 EXPORT_SYMBOL_GPL(dma_buf_kmap);
 
@@ -924,8 +924,8 @@ void dma_buf_kunmap(struct dma_buf *dmabuf, unsigned long page_num,
 {
        WARN_ON(!dmabuf);
 
-       if (dmabuf->ops->kunmap)
-               dmabuf->ops->kunmap(dmabuf, page_num, vaddr);
+       if (dmabuf->ops->unmap)
+               dmabuf->ops->unmap(dmabuf, page_num, vaddr);
 }
 EXPORT_SYMBOL_GPL(dma_buf_kunmap);
 
@@ -1059,7 +1059,11 @@ static int dma_buf_debug_show(struct seq_file *s, void *unused)
        int ret;
        struct dma_buf *buf_obj;
        struct dma_buf_attachment *attach_obj;
-       int count = 0, attach_count;
+       struct reservation_object *robj;
+       struct reservation_object_list *fobj;
+       struct dma_fence *fence;
+       unsigned seq;
+       int count = 0, attach_count, shared_count, i;
        size_t size = 0;
 
        ret = mutex_lock_interruptible(&db_list.lock);
@@ -1068,7 +1072,8 @@ static int dma_buf_debug_show(struct seq_file *s, void *unused)
                return ret;
 
        seq_puts(s, "\nDma-buf Objects:\n");
-       seq_puts(s, "size\tflags\tmode\tcount\texp_name\n");
+       seq_printf(s, "%-8s\t%-8s\t%-8s\t%-8s\texp_name\n",
+                  "size", "flags", "mode", "count");
 
        list_for_each_entry(buf_obj, &db_list.head, list_node) {
                ret = mutex_lock_interruptible(&buf_obj->lock);
@@ -1085,6 +1090,34 @@ static int dma_buf_debug_show(struct seq_file *s, void *unused)
                                file_count(buf_obj->file),
                                buf_obj->exp_name);
 
+               robj = buf_obj->resv;
+               while (true) {
+                       seq = read_seqcount_begin(&robj->seq);
+                       rcu_read_lock();
+                       fobj = rcu_dereference(robj->fence);
+                       shared_count = fobj ? fobj->shared_count : 0;
+                       fence = rcu_dereference(robj->fence_excl);
+                       if (!read_seqcount_retry(&robj->seq, seq))
+                               break;
+                       rcu_read_unlock();
+               }
+
+               if (fence)
+                       seq_printf(s, "\tExclusive fence: %s %s %ssignalled\n",
+                                  fence->ops->get_driver_name(fence),
+                                  fence->ops->get_timeline_name(fence),
+                                  dma_fence_is_signaled(fence) ? "" : "un");
+               for (i = 0; i < shared_count; i++) {
+                       fence = rcu_dereference(fobj->shared[i]);
+                       if (!dma_fence_get_rcu(fence))
+                               continue;
+                       seq_printf(s, "\tShared fence: %s %s %ssignalled\n",
+                                  fence->ops->get_driver_name(fence),
+                                  fence->ops->get_timeline_name(fence),
+                                  dma_fence_is_signaled(fence) ? "" : "un");
+               }
+               rcu_read_unlock();
+
                seq_puts(s, "\tAttached Devices:\n");
                attach_count = 0;