diff options
author | Jérôme Glisse <jglisse@redhat.com> | 2015-07-09 14:19:30 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2015-07-17 04:18:04 -0400 |
commit | e9308884878942c618a42cab122df80fbf458dc9 (patch) | |
tree | 2f03adf139e17a71725c97f6a88a18affa5f24be | |
parent | ef2b731759b9ae6380c9728b60ce92cf32683e94 (diff) |
drm/ttm: improve uncached page deallocation.
Calls to set_memory_wb() incure heavy TLB flush and IPI cost. To
minimize those wait until pool grow beyond batch size before
draining the pool.
Signed-off-by: Jérôme Glisse <jglisse@redhat.com>
Reviewed-by: Mario Kleiner <mario.kleiner.de@gmail.com>
Reviewed-and-Tested-by: Michel Dänzer <michel@daenzer.net>
Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: Thomas Hellstrom <thellstrom@vmware.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
-rw-r--r-- | drivers/gpu/drm/ttm/ttm_page_alloc_dma.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c b/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c index af230802b90b..624d941aaad1 100644 --- a/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c +++ b/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c | |||
@@ -963,13 +963,13 @@ void ttm_dma_unpopulate(struct ttm_dma_tt *ttm_dma, struct device *dev) | |||
963 | } else { | 963 | } else { |
964 | pool->npages_free += count; | 964 | pool->npages_free += count; |
965 | list_splice(&ttm_dma->pages_list, &pool->free_list); | 965 | list_splice(&ttm_dma->pages_list, &pool->free_list); |
966 | if (pool->npages_free > _manager->options.max_size) { | 966 | /* |
967 | * Wait to have at at least NUM_PAGES_TO_ALLOC number of pages | ||
968 | * to free in order to minimize calls to set_memory_wb(). | ||
969 | */ | ||
970 | if (pool->npages_free >= (_manager->options.max_size + | ||
971 | NUM_PAGES_TO_ALLOC)) | ||
967 | npages = pool->npages_free - _manager->options.max_size; | 972 | npages = pool->npages_free - _manager->options.max_size; |
968 | /* free at least NUM_PAGES_TO_ALLOC number of pages | ||
969 | * to reduce calls to set_memory_wb */ | ||
970 | if (npages < NUM_PAGES_TO_ALLOC) | ||
971 | npages = NUM_PAGES_TO_ALLOC; | ||
972 | } | ||
973 | } | 973 | } |
974 | spin_unlock_irqrestore(&pool->lock, irq_flags); | 974 | spin_unlock_irqrestore(&pool->lock, irq_flags); |
975 | 975 | ||