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

Commit 507d256b authored by Dave Airlie's avatar Dave Airlie Committed by Dave Airlie
Browse files

drm: ati_pcigart: simplify page_count manipulations



From: Nick Piggin <npiggin@suse.de>

Allocate a compound page for the user mapping instead of tweaking the page
refcounts.

Signed-off-by: default avatarNick Piggin <npiggin@suse.de>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarDave Airlie <airlied@linux.ie>
parent f1e5c03d
Loading
Loading
Loading
Loading
+4 −7
Original line number Diff line number Diff line
@@ -59,17 +59,16 @@ static void *drm_ati_alloc_pcigart_table(void)
	int i;
	DRM_DEBUG("%s\n", __FUNCTION__);

	address = __get_free_pages(GFP_KERNEL, ATI_PCIGART_TABLE_ORDER);
	address = __get_free_pages(GFP_KERNEL | __GFP_COMP,
				   ATI_PCIGART_TABLE_ORDER);
	if (address == 0UL) {
		return NULL;
	}

	page = virt_to_page(address);

	for (i = 0; i < ATI_PCIGART_TABLE_PAGES; i++, page++) {
		get_page(page);
	for (i = 0; i < ATI_PCIGART_TABLE_PAGES; i++, page++)
		SetPageReserved(page);
	}

	DRM_DEBUG("%s: returning 0x%08lx\n", __FUNCTION__, address);
	return (void *)address;
@@ -83,10 +82,8 @@ static void drm_ati_free_pcigart_table(void *address)

	page = virt_to_page((unsigned long)address);

	for (i = 0; i < ATI_PCIGART_TABLE_PAGES; i++, page++) {
		__put_page(page);
	for (i = 0; i < ATI_PCIGART_TABLE_PAGES; i++, page++)
		ClearPageReserved(page);
	}

	free_pages((unsigned long)address, ATI_PCIGART_TABLE_ORDER);
}