mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	drm/ttm: fix the fix for huge compound pages
We don't use compound pages at the moment. Take this into account when freeing them. Signed-off-by: Christian König <christian.koenig@amd.comd> Reviewed-and-Tested-by: Michel Dänzer <michel.daenzer@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
		
							parent
							
								
									c057c11403
								
							
						
					
					
						commit
						5c42c64f7d
					
				
					 1 changed files with 16 additions and 5 deletions
				
			
		| 
						 | 
				
			
			@ -733,22 +733,33 @@ static void ttm_put_pages(struct page **pages, unsigned npages, int flags,
 | 
			
		|||
		/* No pool for this memory type so free the pages */
 | 
			
		||||
		i = 0;
 | 
			
		||||
		while (i < npages) {
 | 
			
		||||
			unsigned order;
 | 
			
		||||
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
 | 
			
		||||
			struct page *p = pages[i];
 | 
			
		||||
#endif
 | 
			
		||||
			unsigned order = 0, j;
 | 
			
		||||
 | 
			
		||||
			if (!pages[i]) {
 | 
			
		||||
				++i;
 | 
			
		||||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
 | 
			
		||||
			for (j = 0; j < HPAGE_PMD_NR; ++j)
 | 
			
		||||
				if (p++ != pages[i + j])
 | 
			
		||||
				    break;
 | 
			
		||||
 | 
			
		||||
			if (j == HPAGE_PMD_NR)
 | 
			
		||||
				order = HPAGE_PMD_ORDER;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
			if (page_count(pages[i]) != 1)
 | 
			
		||||
				pr_err("Erroneous page count. Leaking pages.\n");
 | 
			
		||||
			order = compound_order(pages[i]);
 | 
			
		||||
			__free_pages(pages[i], order);
 | 
			
		||||
 | 
			
		||||
			order = 1 << order;
 | 
			
		||||
			while (order) {
 | 
			
		||||
			j = 1 << order;
 | 
			
		||||
			while (j) {
 | 
			
		||||
				pages[i++] = NULL;
 | 
			
		||||
				--order;
 | 
			
		||||
				--j;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue