Page MenuHomeFreeBSD

D38949.id118471.diff
No OneTemporary

D38949.id118471.diff

diff --git a/sys/arm64/iommu/iommu_pmap.c b/sys/arm64/iommu/iommu_pmap.c
--- a/sys/arm64/iommu/iommu_pmap.c
+++ b/sys/arm64/iommu/iommu_pmap.c
@@ -388,8 +388,8 @@
smmu_pmap_add_delayed_free_list(m, free, TRUE);
}
-static int
-smmu_pmap_pinit_levels(pmap_t pmap, int levels)
+int
+smmu_pmap_pinit(pmap_t pmap)
{
vm_page_t m;
@@ -404,31 +404,12 @@
vm_radix_init(&pmap->pm_root);
bzero(&pmap->pm_stats, sizeof(pmap->pm_stats));
- MPASS(levels == 3 || levels == 4);
- pmap->pm_levels = levels;
-
- /*
- * Allocate the level 1 entry to use as the root. This will increase
- * the refcount on the level 1 page so it won't be removed until
- * pmap_release() is called.
- */
- if (pmap->pm_levels == 3) {
- PMAP_LOCK(pmap);
- m = _pmap_alloc_l3(pmap, NUL2E + NUL1E);
- PMAP_UNLOCK(pmap);
- }
+ pmap->pm_levels = 4;
pmap->pm_ttbr = VM_PAGE_TO_PHYS(m);
return (1);
}
-int
-smmu_pmap_pinit(pmap_t pmap)
-{
-
- return (smmu_pmap_pinit_levels(pmap, 4));
-}
-
/*
* This routine is called if the desired page table page does not exist.
*
@@ -567,26 +548,8 @@
void
smmu_pmap_release(pmap_t pmap)
{
- boolean_t rv __diagused;
- struct spglist free;
vm_page_t m;
- if (pmap->pm_levels != 4) {
- KASSERT(pmap->pm_stats.resident_count == 1,
- ("pmap_release: pmap resident count %ld != 0",
- pmap->pm_stats.resident_count));
- KASSERT((pmap->pm_l0[0] & ATTR_DESCR_VALID) == ATTR_DESCR_VALID,
- ("pmap_release: Invalid l0 entry: %lx", pmap->pm_l0[0]));
-
- SLIST_INIT(&free);
- m = PHYS_TO_VM_PAGE(pmap->pm_ttbr);
- PMAP_LOCK(pmap);
- rv = smmu_pmap_unwire_l3(pmap, 0, m, &free);
- PMAP_UNLOCK(pmap);
- MPASS(rv == TRUE);
- vm_page_free_pages_toq(&free, true);
- }
-
KASSERT(pmap->pm_stats.resident_count == 0,
("pmap_release: pmap resident count %ld != 0",
pmap->pm_stats.resident_count));

File Metadata

Mime Type
text/plain
Expires
Wed, Oct 9, 11:16 AM (18 h, 31 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
13861542
Default Alt Text
D38949.id118471.diff (1 KB)

Event Timeline