| .. | .. |
|---|
| 614 | 614 | int ret; |
|---|
| 615 | 615 | |
|---|
| 616 | 616 | if (obj->import_attach) { |
|---|
| 617 | | - /* Drop the reference drm_gem_mmap_obj() acquired.*/ |
|---|
| 618 | | - drm_gem_object_put(obj); |
|---|
| 617 | + /* Reset both vm_ops and vm_private_data, so we don't end up with |
|---|
| 618 | + * vm_ops pointing to our implementation if the dma-buf backend |
|---|
| 619 | + * doesn't set those fields. |
|---|
| 620 | + */ |
|---|
| 619 | 621 | vma->vm_private_data = NULL; |
|---|
| 622 | + vma->vm_ops = NULL; |
|---|
| 620 | 623 | |
|---|
| 621 | | - return dma_buf_mmap(obj->dma_buf, vma, 0); |
|---|
| 624 | + ret = dma_buf_mmap(obj->dma_buf, vma, 0); |
|---|
| 625 | + |
|---|
| 626 | + /* Drop the reference drm_gem_mmap_obj() acquired.*/ |
|---|
| 627 | + if (!ret) |
|---|
| 628 | + drm_gem_object_put(obj); |
|---|
| 629 | + |
|---|
| 630 | + return ret; |
|---|
| 622 | 631 | } |
|---|
| 623 | 632 | |
|---|
| 624 | 633 | shmem = to_drm_gem_shmem_obj(obj); |
|---|