Skip to content

Commit 34f001e

Browse files
linux_dma_buf do mmap
1 parent f9ac66d commit 34f001e

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

sys/compat/linuxkpi/common/src/linux_dmabuf.c

+15-1
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ dma_buf_mmap_fileops(struct file *fp, vm_map_t map, vm_offset_t *addr,
138138
{
139139
struct dma_buf *db;
140140
struct vm_area_struct vma;
141+
int error;
141142

142143
if (!fp_is_db(fp))
143144
return (EINVAL);
@@ -149,9 +150,22 @@ dma_buf_mmap_fileops(struct file *fp, vm_map_t map, vm_offset_t *addr,
149150
vma.vm_start = *addr;
150151
vma.vm_end = *addr + size;
151152
vma.vm_pgoff = foff;
153+
vma.vm_obj = NULL;
152154
/* XXX do we need to fill in / propagate other flags? */
153155

154-
return (-db->ops->mmap(db, &vma));
156+
error = (-db->ops->mmap(db, &vma));
157+
if( error )
158+
return error;
159+
160+
vm_object_reference(vma.vm_obj);
161+
162+
error = vm_mmap_object(map, addr, size, prot, cap_maxprot, flags,
163+
vma.vm_obj, foff, FALSE, td );
164+
165+
if( error != 0 )
166+
vm_object_deallocate(vma.vm_obj);
167+
168+
return error;
155169
}
156170

157171
static int

sys/compat/linuxkpi/common/src/linux_fs.c

+1
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,7 @@ free_anon_mapping(struct address_space *as)
276276
static int shm_file_mmap(struct linux_file *filp, struct vm_area_struct *vma)
277277
{
278278
vma->vm_file = get_file(filp);
279+
vma->vm_obj = filp->f_mapping;
279280
return 0;
280281
}
281282

0 commit comments

Comments
 (0)