devobj: allow read only device file mappings (OFED 3.3 support)
This commit is contained in:
@@ -78,7 +78,8 @@ static struct memobj *to_memobj(struct devobj *devobj)
|
||||
/***********************************************************************
|
||||
* devobj
|
||||
*/
|
||||
int devobj_create(int fd, size_t len, off_t off, struct memobj **objp, int *maxprotp)
|
||||
int devobj_create(int fd, size_t len, off_t off, struct memobj **objp, int *maxprotp,
|
||||
int prot)
|
||||
{
|
||||
ihk_mc_user_context_t ctx;
|
||||
struct pager_map_result result; // XXX: assumes contiguous physical
|
||||
@@ -115,6 +116,7 @@ int devobj_create(int fd, size_t len, off_t off, struct memobj **objp, int *maxp
|
||||
ihk_mc_syscall_arg2(&ctx) = len;
|
||||
ihk_mc_syscall_arg3(&ctx) = off;
|
||||
ihk_mc_syscall_arg4(&ctx) = virt_to_phys(&result);
|
||||
ihk_mc_syscall_arg5(&ctx) = prot;
|
||||
|
||||
error = syscall_generic_forwarding(__NR_mmap, &ctx);
|
||||
if (error) {
|
||||
|
||||
@@ -141,6 +141,7 @@ int fileobj_create(int fd, struct memobj **objp, int *maxprotp);
|
||||
struct shmid_ds;
|
||||
int shmobj_create(struct shmid_ds *ds, struct memobj **objp);
|
||||
int zeroobj_create(struct memobj **objp);
|
||||
int devobj_create(int fd, size_t len, off_t off, struct memobj **objp, int *maxprotp);
|
||||
int devobj_create(int fd, size_t len, off_t off, struct memobj **objp, int *maxprotp,
|
||||
int prot);
|
||||
|
||||
#endif /* HEADER_MEMOBJ_H */
|
||||
|
||||
@@ -1108,7 +1108,7 @@ do_mmap(const intptr_t addr0, const size_t len0, const int prot,
|
||||
vrflags &= ~VR_MEMTYPE_MASK;
|
||||
vrflags |= VR_MEMTYPE_UC;
|
||||
}
|
||||
error = devobj_create(fd, len, off, &memobj, &maxprot);
|
||||
error = devobj_create(fd, len, off, &memobj, &maxprot, prot);
|
||||
}
|
||||
if (error) {
|
||||
ekprintf("do_mmap:fileobj_create failed. %d\n", error);
|
||||
|
||||
Reference in New Issue
Block a user