• Home
  • Raw
  • Download

Lines Matching full:region

58 STATIC STATUS_T OsVmRegionPermissionCheck(LosVmMapRegion *region, UINT32 flags)  in OsVmRegionPermissionCheck()  argument
60 if ((region->regionFlags & VM_MAP_REGION_FLAG_PERM_READ) != VM_MAP_REGION_FLAG_PERM_READ) { in OsVmRegionPermissionCheck()
61 …VM_ERR("read permission check failed operation flags %x, region flags %x", flags, region->regionFl… in OsVmRegionPermissionCheck()
66 … if ((region->regionFlags & VM_MAP_REGION_FLAG_PERM_WRITE) != VM_MAP_REGION_FLAG_PERM_WRITE) { in OsVmRegionPermissionCheck()
67 …VM_ERR("write permission check failed operation flags %x, region flags %x", flags, region->regionF… in OsVmRegionPermissionCheck()
73 … if ((region->regionFlags & VM_MAP_REGION_FLAG_PERM_EXECUTE) != VM_MAP_REGION_FLAG_PERM_EXECUTE) { in OsVmRegionPermissionCheck()
74 …VM_ERR("exec permission check failed operation flags %x, region flags %x", flags, region->regionFl… in OsVmRegionPermissionCheck()
100 STATIC STATUS_T OsDoReadFault(LosVmMapRegion *region, LosVmPgFault *vmPgFault) in OsDoReadFault() argument
106 LosVmSpace *space = region->space; in OsDoReadFault()
112 if (region->unTypeData.rf.vmFOps == NULL || region->unTypeData.rf.vmFOps->fault == NULL) { in OsDoReadFault()
113 VM_ERR("region args invalid, file path: %s", region->unTypeData.rf.vnode->filePath); in OsDoReadFault()
117 (VOID)LOS_MuxAcquire(&region->unTypeData.rf.vnode->mapping.mux_lock); in OsDoReadFault()
118 ret = region->unTypeData.rf.vmFOps->fault(region, vmPgFault); in OsDoReadFault()
127 region->regionFlags & (~VM_MAP_REGION_FLAG_PERM_WRITE)); in OsDoReadFault()
130 OsDelMapInfo(region, vmPgFault, false); in OsDoReadFault()
131 (VOID)LOS_MuxRelease(&region->unTypeData.rf.vnode->mapping.mux_lock); in OsDoReadFault()
135 (VOID)LOS_MuxRelease(&region->unTypeData.rf.vnode->mapping.mux_lock); in OsDoReadFault()
138 (VOID)LOS_MuxRelease(&region->unTypeData.rf.vnode->mapping.mux_lock); in OsDoReadFault()
144 STATIC LosVmPage *OsCowUnmapOrg(LosArchMmu *archMmu, LosVmMapRegion *region, LosVmPgFault *vmf) in OsCowUnmapOrg() argument
152 LOS_SpinLockSave(&region->unTypeData.rf.vnode->mapping.list_lock, &intSave); in OsCowUnmapOrg()
153 fpage = OsFindGetEntry(&region->unTypeData.rf.vnode->mapping, vmf->pgoff); in OsCowUnmapOrg()
166 LOS_SpinUnlockRestore(&region->unTypeData.rf.vnode->mapping.list_lock, intSave); in OsCowUnmapOrg()
172 status_t OsDoCowFault(LosVmMapRegion *region, LosVmPgFault *vmPgFault) in OsDoCowFault() argument
182 if ((vmPgFault == NULL) || (region == NULL) || in OsDoCowFault()
183 (region->unTypeData.rf.vmFOps == NULL) || (region->unTypeData.rf.vmFOps->fault == NULL)) { in OsDoCowFault()
184 VM_ERR("region args invalid"); in OsDoCowFault()
188 space = region->space; in OsDoCowFault()
191 oldPage = OsCowUnmapOrg(&space->archMmu, region, vmPgFault); in OsDoCowFault()
204 (VOID)LOS_MuxAcquire(&region->unTypeData.rf.vnode->mapping.mux_lock); in OsDoCowFault()
205 ret = region->unTypeData.rf.vmFOps->fault(region, vmPgFault); in OsDoCowFault()
207 VM_ERR("call region->vm_ops->fault fail"); in OsDoCowFault()
208 (VOID)LOS_MuxRelease(&region->unTypeData.rf.vnode->mapping.mux_lock); in OsDoCowFault()
230 …ret = LOS_ArchMmuMap(&space->archMmu, (VADDR_T)vmPgFault->vaddr, newPaddr, 1, region->regionFlags); in OsDoCowFault()
234 (VOID)LOS_MuxRelease(&region->unTypeData.rf.vnode->mapping.mux_lock); in OsDoCowFault()
237 (VOID)LOS_MuxRelease(&region->unTypeData.rf.vnode->mapping.mux_lock); in OsDoCowFault()
256 status_t OsDoSharedFault(LosVmMapRegion *region, LosVmPgFault *vmPgFault) in OsDoSharedFault() argument
262 LosVmSpace *space = region->space; in OsDoSharedFault()
266 if ((region->unTypeData.rf.vmFOps == NULL) || (region->unTypeData.rf.vmFOps->fault == NULL)) { in OsDoSharedFault()
267 VM_ERR("region args invalid"); in OsDoSharedFault()
274 ret = LOS_ArchMmuMap(&space->archMmu, vaddr, paddr, 1, region->regionFlags); in OsDoSharedFault()
280 LOS_SpinLockSave(&region->unTypeData.rf.vnode->mapping.list_lock, &intSave); in OsDoSharedFault()
281 fpage = OsFindGetEntry(&region->unTypeData.rf.vnode->mapping, vmPgFault->pgoff); in OsDoSharedFault()
283 OsMarkPageDirty(fpage, region, 0, 0); in OsDoSharedFault()
285 LOS_SpinUnlockRestore(&region->unTypeData.rf.vnode->mapping.list_lock, intSave); in OsDoSharedFault()
290 (VOID)LOS_MuxAcquire(&region->unTypeData.rf.vnode->mapping.mux_lock); in OsDoSharedFault()
291 ret = region->unTypeData.rf.vmFOps->fault(region, vmPgFault); in OsDoSharedFault()
300 ret = LOS_ArchMmuMap(&space->archMmu, vaddr, paddr, 1, region->regionFlags); in OsDoSharedFault()
303 OsDelMapInfo(region, vmPgFault, TRUE); in OsDoSharedFault()
304 (VOID)LOS_MuxRelease(&region->unTypeData.rf.vnode->mapping.mux_lock); in OsDoSharedFault()
308 (VOID)LOS_MuxRelease(&region->unTypeData.rf.vnode->mapping.mux_lock); in OsDoSharedFault()
311 (VOID)LOS_MuxRelease(&region->unTypeData.rf.vnode->mapping.mux_lock); in OsDoSharedFault()
317 * and make a read permission mmapping (region->arch_mmu_flags & (~ARCH_MMU_FLAG_PERM_WRITE)).
321 * region->arch_mmu_flags and the changes on this page will write through to the underlying file
323 STATIC STATUS_T OsDoFileFault(LosVmMapRegion *region, LosVmPgFault *vmPgFault, UINT32 flags) in OsDoFileFault() argument
328 if (region->regionFlags & VM_MAP_REGION_FLAG_SHARED) { in OsDoFileFault()
329 ret = OsDoSharedFault(region, vmPgFault); in OsDoFileFault()
331 ret = OsDoCowFault(region, vmPgFault); in OsDoFileFault()
334 ret = OsDoReadFault(region, vmPgFault); in OsDoFileFault()
342 LosVmMapRegion *region = NULL; in OsVmPageFaultHandler() local
369 region = LOS_RegionFind(space, vaddr); in OsVmPageFaultHandler()
370 if (region == NULL) { in OsVmPageFaultHandler()
371 VM_ERR("region not exists, vaddr: %#x", vaddr); in OsVmPageFaultHandler()
376 status = OsVmRegionPermissionCheck(region, flags); in OsVmPageFaultHandler()
394 if (LOS_IsRegionFileValid(region)) { in OsVmPageFaultHandler()
395 if (region->unTypeData.rf.vnode == NULL) { in OsVmPageFaultHandler()
399 vmPgFault.pgoff = ((vaddr - region->range.base) >> PAGE_SHIFT) + region->pgOff; in OsVmPageFaultHandler()
403 status = OsDoFileFault(region, &vmPgFault, flags); in OsVmPageFaultHandler()
431 status = LOS_ArchMmuMap(&space->archMmu, vaddr, newPaddr, 1, region->regionFlags); in OsVmPageFaultHandler()
443 status = LOS_ArchMmuMap(&space->archMmu, vaddr, newPaddr, 1, region->regionFlags); in OsVmPageFaultHandler()