do_mmap(): simplify demand paging flags; avoid zeroobj and allocate pages directly
This commit is contained in:
@@ -1079,25 +1079,18 @@ do_mmap(const intptr_t addr0, const size_t len0, const int prot,
|
|||||||
vrflags |= PROT_TO_VR_FLAG(prot);
|
vrflags |= PROT_TO_VR_FLAG(prot);
|
||||||
vrflags |= (flags & MAP_PRIVATE)? VR_PRIVATE: 0;
|
vrflags |= (flags & MAP_PRIVATE)? VR_PRIVATE: 0;
|
||||||
vrflags |= (flags & MAP_LOCKED)? VR_LOCKED: 0;
|
vrflags |= (flags & MAP_LOCKED)? VR_LOCKED: 0;
|
||||||
|
vrflags |= VR_DEMAND_PAGING;
|
||||||
if (flags & MAP_ANONYMOUS) {
|
if (flags & MAP_ANONYMOUS) {
|
||||||
if (0) {
|
if (!anon_on_demand) {
|
||||||
/* dummy */
|
populated_mapping = 1;
|
||||||
}
|
}
|
||||||
#ifdef USE_NOCACHE_MMAP
|
#ifdef USE_NOCACHE_MMAP
|
||||||
#define X_MAP_NOCACHE MAP_32BIT
|
#define X_MAP_NOCACHE MAP_32BIT
|
||||||
else if (flags & X_MAP_NOCACHE) {
|
else if (flags & X_MAP_NOCACHE) {
|
||||||
|
vrflags &= ~VR_DEMAND_PAGING;
|
||||||
vrflags |= VR_IO_NOCACHE;
|
vrflags |= VR_IO_NOCACHE;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
else {
|
|
||||||
vrflags |= VR_DEMAND_PAGING;
|
|
||||||
if (!anon_on_demand) {
|
|
||||||
populated_mapping = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
vrflags |= VR_DEMAND_PAGING;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flags & (MAP_POPULATE | MAP_LOCKED)) {
|
if (flags & (MAP_POPULATE | MAP_LOCKED)) {
|
||||||
|
|||||||
@@ -172,6 +172,10 @@ static int zeroobj_get_page(struct memobj *memobj, off_t off, int p2align,
|
|||||||
struct zeroobj *obj = to_zeroobj(memobj);
|
struct zeroobj *obj = to_zeroobj(memobj);
|
||||||
struct page *page;
|
struct page *page;
|
||||||
|
|
||||||
|
/* Don't bother about zero page, page fault handler will
|
||||||
|
* allocate and clear pages */
|
||||||
|
return 0;
|
||||||
|
|
||||||
dkprintf("zeroobj_get_page(%p,%#lx,%d,%p)\n",
|
dkprintf("zeroobj_get_page(%p,%#lx,%d,%p)\n",
|
||||||
memobj, off, p2align, physp);
|
memobj, off, p2align, physp);
|
||||||
if (off & ~PAGE_MASK) {
|
if (off & ~PAGE_MASK) {
|
||||||
|
|||||||
Reference in New Issue
Block a user