ttm: Clear the ttm page allocated from high memory zone correctly
authorZhao Yakui <yakui.zhao@intel.com>
Tue, 13 Nov 2012 18:31:55 +0000 (18:31 +0000)
committerBen Hutchings <ben@decadent.org.uk>
Thu, 6 Dec 2012 11:20:07 +0000 (11:20 +0000)
commit ac207ed2471150e06af0afc76e4becc701fa2733 upstream.

The TTM page can be allocated from high memory. In such case it is
wrong to use the page_address(page) as the virtual address for the high memory
page.

bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=50241

Signed-off-by: Zhao Yakui <yakui.zhao@intel.com>
Reviewed-by: Thomas Hellstrom <thellstrom@vmware.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
[bwh: Backported to 3.2: adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
drivers/gpu/drm/ttm/ttm_page_alloc.c

index 727e93d..9e4313e 100644 (file)
@@ -708,7 +708,10 @@ int ttm_get_pages(struct list_head *pages, int flags,
        /* clear the pages coming from the pool if requested */
        if (flags & TTM_PAGE_FLAG_ZERO_ALLOC) {
                list_for_each_entry(p, pages, lru) {
-                       clear_page(page_address(p));
+                       if (PageHighMem(p))
+                               clear_highpage(p);
+                       else
+                               clear_page(page_address(p));
                }
        }