.. | .. |
---|
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); |
---|