fileobj/shmobj/devobj: add file size to memobj
This commit is contained in:
@ -747,6 +747,7 @@ struct pager_create_result {
|
|||||||
uintptr_t handle;
|
uintptr_t handle;
|
||||||
int maxprot;
|
int maxprot;
|
||||||
uint32_t flags;
|
uint32_t flags;
|
||||||
|
size_t size;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
@ -895,6 +896,7 @@ found:
|
|||||||
resp->handle = (uintptr_t)pager;
|
resp->handle = (uintptr_t)pager;
|
||||||
resp->maxprot = maxprot;
|
resp->maxprot = maxprot;
|
||||||
resp->flags = mf_flags;
|
resp->flags = mf_flags;
|
||||||
|
resp->size = st.size;
|
||||||
ihk_device_unmap_virtual(dev, resp, sizeof(*resp));
|
ihk_device_unmap_virtual(dev, resp, sizeof(*resp));
|
||||||
ihk_device_unmap_memory(dev, phys, sizeof(*resp));
|
ihk_device_unmap_memory(dev, phys, sizeof(*resp));
|
||||||
|
|
||||||
|
|||||||
@ -127,6 +127,7 @@ int devobj_create(int fd, size_t len, off_t off, struct memobj **objp, int *maxp
|
|||||||
|
|
||||||
obj->memobj.ops = &devobj_ops;
|
obj->memobj.ops = &devobj_ops;
|
||||||
obj->memobj.flags = MF_HAS_PAGER;
|
obj->memobj.flags = MF_HAS_PAGER;
|
||||||
|
obj->memobj.size = len;
|
||||||
obj->handle = result.handle;
|
obj->handle = result.handle;
|
||||||
obj->ref = 1;
|
obj->ref = 1;
|
||||||
obj->pfn_pgoff = off / PAGE_SIZE;
|
obj->pfn_pgoff = off / PAGE_SIZE;
|
||||||
|
|||||||
@ -225,6 +225,7 @@ int fileobj_create(int fd, struct memobj **objp, int *maxprotp)
|
|||||||
if (!obj) {
|
if (!obj) {
|
||||||
obj_list_insert(newobj);
|
obj_list_insert(newobj);
|
||||||
obj = newobj;
|
obj = newobj;
|
||||||
|
to_memobj(obj)->size = result.size;
|
||||||
to_memobj(obj)->flags |= result.flags;
|
to_memobj(obj)->flags |= result.flags;
|
||||||
to_memobj(obj)->status = MEMOBJ_READY;
|
to_memobj(obj)->status = MEMOBJ_READY;
|
||||||
if (to_memobj(obj)->flags & MF_PREFETCH) {
|
if (to_memobj(obj)->flags & MF_PREFETCH) {
|
||||||
|
|||||||
@ -44,6 +44,7 @@ struct memobj {
|
|||||||
struct memobj_ops *ops;
|
struct memobj_ops *ops;
|
||||||
uint32_t flags;
|
uint32_t flags;
|
||||||
uint32_t status;
|
uint32_t status;
|
||||||
|
size_t size;
|
||||||
ihk_spinlock_t lock;
|
ihk_spinlock_t lock;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -31,6 +31,7 @@ struct pager_create_result {
|
|||||||
uintptr_t handle;
|
uintptr_t handle;
|
||||||
int maxprot;
|
int maxprot;
|
||||||
uint32_t flags;
|
uint32_t flags;
|
||||||
|
size_t size;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@ -2160,9 +2160,10 @@ int populate_process_memory(struct process_vm *vm, void *start, size_t len)
|
|||||||
for (addr = (uintptr_t)start; addr < end; addr += PAGE_SIZE) {
|
for (addr = (uintptr_t)start; addr < end; addr += PAGE_SIZE) {
|
||||||
error = page_fault_process_vm(vm, (void *)addr, reason);
|
error = page_fault_process_vm(vm, (void *)addr, reason);
|
||||||
if (error) {
|
if (error) {
|
||||||
ekprintf("populate_process_range:page_fault_process_vm"
|
ekprintf("%s: WARNING: page_fault_process_vm(): vm: %p, "
|
||||||
"(%p,%lx,%lx) failed %d\n",
|
"addr: %lx, reason: %lx, off: %lu, len: %lu returns %d\n",
|
||||||
vm, addr, reason, error);
|
__FUNCTION__, vm, addr, reason,
|
||||||
|
((void *)addr - start), len, error);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -179,6 +179,7 @@ int shmobj_create(struct shmid_ds *ds, struct memobj **objp)
|
|||||||
|
|
||||||
memset(obj, 0, sizeof(*obj));
|
memset(obj, 0, sizeof(*obj));
|
||||||
obj->memobj.ops = &shmobj_ops;
|
obj->memobj.ops = &shmobj_ops;
|
||||||
|
obj->memobj.size = ds->shm_segsz;
|
||||||
obj->ds = *ds;
|
obj->ds = *ds;
|
||||||
obj->ds.shm_perm.seq = the_seq++;
|
obj->ds.shm_perm.seq = the_seq++;
|
||||||
obj->ds.shm_nattch = 1;
|
obj->ds.shm_nattch = 1;
|
||||||
|
|||||||
@ -1384,8 +1384,9 @@ out:
|
|||||||
if (!error && populated_mapping && !((vrflags & VR_PROT_MASK) == VR_PROT_NONE)) {
|
if (!error && populated_mapping && !((vrflags & VR_PROT_MASK) == VR_PROT_NONE)) {
|
||||||
error = populate_process_memory(thread->vm, (void *)addr, len);
|
error = populate_process_memory(thread->vm, (void *)addr, len);
|
||||||
if (error) {
|
if (error) {
|
||||||
ekprintf("%s: error :populate_process_memory"
|
ekprintf("%s: WARNING: populate_process_memory(): "
|
||||||
"vm: %p, addr: %p, len: %d (flags: %s%s) failed %d\n", __FUNCTION__,
|
"vm: %p, addr: %p, len: %d (flags: %s%s) failed %d\n",
|
||||||
|
__FUNCTION__,
|
||||||
thread->vm, (void *)addr, len,
|
thread->vm, (void *)addr, len,
|
||||||
(flags & MAP_POPULATE) ? "MAP_POPULATE " : "",
|
(flags & MAP_POPULATE) ? "MAP_POPULATE " : "",
|
||||||
(flags & MAP_LOCKED) ? "MAP_LOCKED ": "",
|
(flags & MAP_LOCKED) ? "MAP_LOCKED ": "",
|
||||||
|
|||||||
@ -102,6 +102,7 @@ static int alloc_zeroobj(void)
|
|||||||
|
|
||||||
memset(obj, 0, sizeof(*obj));
|
memset(obj, 0, sizeof(*obj));
|
||||||
obj->memobj.ops = &zeroobj_ops;
|
obj->memobj.ops = &zeroobj_ops;
|
||||||
|
obj->memobj.size = 0;
|
||||||
page_list_init(obj);
|
page_list_init(obj);
|
||||||
ihk_mc_spinlock_init(&obj->memobj.lock);
|
ihk_mc_spinlock_init(&obj->memobj.lock);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user