@@ -41,6 +41,8 @@ typedef uint64_t fsfilcnt_t;
#define __socklen_t uint32_t
typedef __socklen_t socklen_t;
+#define pgoff_t unsigned long
+
struct utimbuf
{
time_t actime;
@@ -131,6 +131,7 @@ struct vm_area_struct
struct vm_operations_t *vm_ops; // 操作方法
atomic_t ref_count; // 引用计数
+ pgoff_t page_offset; // 起始地址在当前VMA所占的2M物理页中的偏移量
void *private_data;
};
@@ -400,7 +400,8 @@ int mm_map_vma(struct vm_area_struct *vma, uint64_t paddr)
if (unlikely(retval != 0))
goto failed;
}
-
+ // 计算当前vma的起始地址在对应的物理页中的偏移量
+ vma->page_offset = paddr - (paddr & PAGE_2M_MASK);
flush_tlb();
return 0;
failed:;