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

Commit 590dfe2f authored by Michal Kubecek's avatar Michal Kubecek Committed by Dave Airlie
Browse files

agp: fix scratch page cleanup



In error cleanup of agp_backend_initialize() and in agp_backend_cleanup(),
agp_destroy_page() is passed virtual address of the scratch page. This
leads to a kernel warning if the initialization fails (or upon regular
cleanup) as pointer to struct page should be passed instead.

Signed-off-by: default avatarMichal Kubecek <mkubecek@suse.cz>
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent c8fe74ae
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -194,10 +194,10 @@ static int agp_backend_initialize(struct agp_bridge_data *bridge)

err_out:
	if (bridge->driver->needs_scratch_page) {
		void *va = page_address(bridge->scratch_page_page);
		struct page *page = bridge->scratch_page_page;

		bridge->driver->agp_destroy_page(va, AGP_PAGE_DESTROY_UNMAP);
		bridge->driver->agp_destroy_page(va, AGP_PAGE_DESTROY_FREE);
		bridge->driver->agp_destroy_page(page, AGP_PAGE_DESTROY_UNMAP);
		bridge->driver->agp_destroy_page(page, AGP_PAGE_DESTROY_FREE);
	}
	if (got_gatt)
		bridge->driver->free_gatt_table(bridge);
@@ -221,10 +221,10 @@ static void agp_backend_cleanup(struct agp_bridge_data *bridge)

	if (bridge->driver->agp_destroy_page &&
	    bridge->driver->needs_scratch_page) {
		void *va = page_address(bridge->scratch_page_page);
		struct page *page = bridge->scratch_page_page;

		bridge->driver->agp_destroy_page(va, AGP_PAGE_DESTROY_UNMAP);
		bridge->driver->agp_destroy_page(va, AGP_PAGE_DESTROY_FREE);
		bridge->driver->agp_destroy_page(page, AGP_PAGE_DESTROY_UNMAP);
		bridge->driver->agp_destroy_page(page, AGP_PAGE_DESTROY_FREE);
	}
}