Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 409afa44 authored by Joerg Roedel's avatar Joerg Roedel
Browse files

iommu/amd: Introduce free_sub_pt() function



The function is a more generic version of free_pagetable()
and will be used to free only specific sub-trees of a
page-table.

Signed-off-by: default avatarJoerg Roedel <jroedel@suse.de>
parent ac3a7092
Loading
Loading
Loading
Loading
+13 −5
Original line number Diff line number Diff line
@@ -1367,12 +1367,10 @@ DEFINE_FREE_PT_FN(l4, free_pt_l3)
DEFINE_FREE_PT_FN(l5, free_pt_l4)
DEFINE_FREE_PT_FN(l6, free_pt_l5)

static void free_pagetable(struct protection_domain *domain)
static struct page *free_sub_pt(unsigned long root, int mode,
				struct page *freelist)
{
	unsigned long root = (unsigned long)domain->pt_root;
	struct page *freelist = NULL;

	switch (domain->mode) {
	switch (mode) {
	case PAGE_MODE_NONE:
		break;
	case PAGE_MODE_1_LEVEL:
@@ -1397,6 +1395,16 @@ static void free_pagetable(struct protection_domain *domain)
		BUG();
	}

	return freelist;
}

static void free_pagetable(struct protection_domain *domain)
{
	unsigned long root = (unsigned long)domain->pt_root;
	struct page *freelist = NULL;

	free_sub_pt(root, domain->mode, freelist);

	free_page_list(freelist);
}