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

Commit b45a6715 authored by Ben Widawsky's avatar Ben Widawsky Committed by Daniel Vetter
Browse files

drm/i915/bdw: Split up PPGTT cleanup



This will make the code more readable, and extensible which is needed
for upcoming feature work. Eventually, we'll do the same for init.

Signed-off-by: default avatarBen Widawsky <ben@bwidawsk.net>
Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent 822cdc52
Loading
Loading
Loading
Loading
+38 −21
Original line number Diff line number Diff line
@@ -319,17 +319,27 @@ static void gen8_ppgtt_insert_entries(struct i915_address_space *vm,
		kunmap_atomic(pt_vaddr);
}

static void gen8_ppgtt_cleanup(struct i915_address_space *vm)
static void gen8_ppgtt_free(struct i915_hw_ppgtt *ppgtt)
{
	struct i915_hw_ppgtt *ppgtt =
		container_of(vm, struct i915_hw_ppgtt, base);
	int i, j;
	int i;

	list_del(&vm->global_link);
	drm_mm_takedown(&vm->mm);
	for (i = 0; i < ppgtt->num_pd_pages ; i++)
		kfree(ppgtt->gen8_pt_dma_addr[i]);

	__free_pages(ppgtt->gen8_pt_pages, get_order(ppgtt->num_pt_pages << PAGE_SHIFT));
	__free_pages(ppgtt->pd_pages, get_order(ppgtt->num_pd_pages << PAGE_SHIFT));
}

static void gen8_ppgtt_unmap_pages(struct i915_hw_ppgtt *ppgtt)
{
	int i, j;

	for (i = 0; i < ppgtt->num_pd_pages; i++) {
		if (ppgtt->pd_dma_addr[i]) {
		/* TODO: In the future we'll support sparse mappings, so this
		 * will have to change. */
		if (!ppgtt->pd_dma_addr[i])
			continue;

		pci_unmap_page(ppgtt->base.dev->pdev,
			       ppgtt->pd_dma_addr[i],
			       PAGE_SIZE, PCI_DMA_BIDIRECTIONAL);
@@ -344,11 +354,18 @@ static void gen8_ppgtt_cleanup(struct i915_address_space *vm)

		}
	}
		kfree(ppgtt->gen8_pt_dma_addr[i]);
}

	__free_pages(ppgtt->gen8_pt_pages, get_order(ppgtt->num_pt_pages << PAGE_SHIFT));
	__free_pages(ppgtt->pd_pages, get_order(ppgtt->num_pd_pages << PAGE_SHIFT));
static void gen8_ppgtt_cleanup(struct i915_address_space *vm)
{
	struct i915_hw_ppgtt *ppgtt =
		container_of(vm, struct i915_hw_ppgtt, base);

	list_del(&vm->global_link);
	drm_mm_takedown(&vm->mm);

	gen8_ppgtt_unmap_pages(ppgtt);
	gen8_ppgtt_free(ppgtt);
}

/**