Skip to content

Commit b09a978

Browse files
authored
[libcpu/c906]与virt同步 (#9095)
1 parent e390290 commit b09a978

File tree

1 file changed

+23
-2
lines changed

1 file changed

+23
-2
lines changed

libcpu/risc-v/t-head/c906/riscv_mmu.h

+23-2
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,12 @@ rt_inline size_t rt_hw_mmu_attr_rm_perm(size_t attr, rt_base_t prot)
131131
{
132132
/* remove write permission for user */
133133
case RT_HW_MMU_PROT_WRITE | RT_HW_MMU_PROT_USER:
134+
attr &= ~PTE_W;
135+
break;
136+
/* remove write permission for kernel */
137+
case RT_HW_MMU_PROT_WRITE | RT_HW_MMU_PROT_KERNEL:
138+
attr &= ~PTE_W;
139+
break;
134140
default:
135141
RT_ASSERT(0);
136142
}
@@ -150,6 +156,8 @@ rt_inline size_t rt_hw_mmu_attr_add_perm(size_t attr, rt_base_t prot)
150156
{
151157
/* add write permission for user */
152158
case RT_HW_MMU_PROT_WRITE | RT_HW_MMU_PROT_USER:
159+
attr |= (PTE_R | PTE_W | PTE_U);
160+
break;
153161
default:
154162
RT_ASSERT(0);
155163
}
@@ -166,13 +174,26 @@ rt_inline size_t rt_hw_mmu_attr_add_perm(size_t attr, rt_base_t prot)
166174
rt_inline rt_bool_t rt_hw_mmu_attr_test_perm(size_t attr, rt_base_t prot)
167175
{
168176
rt_bool_t rc = 0;
169-
switch (prot)
177+
switch (prot & ~RT_HW_MMU_PROT_USER)
170178
{
171179
/* test write permission for user */
172-
case RT_HW_MMU_PROT_WRITE | RT_HW_MMU_PROT_USER:
180+
case RT_HW_MMU_PROT_WRITE:
181+
rc = ((attr & PTE_W) && (attr & PTE_R));
182+
break;
183+
case RT_HW_MMU_PROT_READ:
184+
rc = !!(attr & PTE_R);
185+
break;
186+
case RT_HW_MMU_PROT_EXECUTE:
187+
rc = !!(attr & PTE_X);
188+
break;
173189
default:
174190
RT_ASSERT(0);
175191
}
192+
193+
if (rc && (prot & RT_HW_MMU_PROT_USER))
194+
{
195+
rc = !!(attr & PTE_U);
196+
}
176197
return rc;
177198
}
178199

0 commit comments

Comments
 (0)