6.1 映射属性修改函数LOS_ArchMmuChangeProt
函数LOS_ArchMmuChangeProt
用于修改进程空间虚拟地址区间的映射保护属性,其中参数archMmu
为进程空间的MMU结构体,vaddr
为虚拟地址,count
为映射的页数,flags
为映射使用的新标签属性信息。其中函数名称中的Prot
是英文Protect的简写。⑴处对参数进行校验,⑵处查询虚拟地址映射的物理地址,如果没有映射,则执行⑶把虚拟地址增加1个内存页大小继续修改下一个内存页的映射保护属性。如果存在映射,则执行⑷处代码。先解除当前内存页的映射,然后执行⑸使用新的映射属性重新映射,⑹处虚拟地址增加1个内存页大小继续修改下一个内存页的属性。
STATUS_T LOS_ArchMmuChangeProt(LosArchMmu *archMmu, VADDR_T vaddr, size_t count, UINT32 flags)
{
STATUS_T status;
PADDR_T paddr = 0;
⑴ if ((archMmu == NULL) || (vaddr == 0) || (count == 0)) {
VM_ERR("invalid args: archMmu %p, vaddr %p, count %d", archMmu, vaddr, count);
return LOS_NOK;
}
while (count > 0) {
count--;
⑵ status = LOS_ArchMmuQuery(archMmu, vaddr, &paddr, NULL);
if (status != LOS_OK) {
⑶ vaddr += MMU_DESCRIPTOR_L2_SMALL_SIZE;
continue;