diff options
| author | Jiri Kosina <jkosina@suse.cz> | 2011-04-26 04:22:15 -0400 |
|---|---|---|
| committer | Jiri Kosina <jkosina@suse.cz> | 2011-04-26 04:22:59 -0400 |
| commit | 07f9479a40cc778bc1462ada11f95b01360ae4ff (patch) | |
| tree | 0676cf38df3844004bb3ebfd99dfa67a4a8998f5 /drivers/gpu/drm/ttm | |
| parent | 9d5e6bdb3013acfb311ab407eeca0b6a6a3dedbf (diff) | |
| parent | cd2e49e90f1cae7726c9a2c54488d881d7f1cd1c (diff) | |
Merge branch 'master' into for-next
Fast-forwarded to current state of Linus' tree as there are patches to be
applied for files that didn't exist on the old branch.
Diffstat (limited to 'drivers/gpu/drm/ttm')
| -rw-r--r-- | drivers/gpu/drm/ttm/ttm_bo.c | 10 | ||||
| -rw-r--r-- | drivers/gpu/drm/ttm/ttm_page_alloc.c | 26 | ||||
| -rw-r--r-- | drivers/gpu/drm/ttm/ttm_tt.c | 16 |
3 files changed, 16 insertions, 36 deletions
diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c index 0b6a55ac2f8..2e618b5ac46 100644 --- a/drivers/gpu/drm/ttm/ttm_bo.c +++ b/drivers/gpu/drm/ttm/ttm_bo.c | |||
| @@ -1168,7 +1168,7 @@ int ttm_bo_init(struct ttm_bo_device *bdev, | |||
| 1168 | uint32_t page_alignment, | 1168 | uint32_t page_alignment, |
| 1169 | unsigned long buffer_start, | 1169 | unsigned long buffer_start, |
| 1170 | bool interruptible, | 1170 | bool interruptible, |
| 1171 | struct file *persistant_swap_storage, | 1171 | struct file *persistent_swap_storage, |
| 1172 | size_t acc_size, | 1172 | size_t acc_size, |
| 1173 | void (*destroy) (struct ttm_buffer_object *)) | 1173 | void (*destroy) (struct ttm_buffer_object *)) |
| 1174 | { | 1174 | { |
| @@ -1211,7 +1211,7 @@ int ttm_bo_init(struct ttm_bo_device *bdev, | |||
| 1211 | bo->priv_flags = 0; | 1211 | bo->priv_flags = 0; |
| 1212 | bo->mem.placement = (TTM_PL_FLAG_SYSTEM | TTM_PL_FLAG_CACHED); | 1212 | bo->mem.placement = (TTM_PL_FLAG_SYSTEM | TTM_PL_FLAG_CACHED); |
| 1213 | bo->seq_valid = false; | 1213 | bo->seq_valid = false; |
| 1214 | bo->persistant_swap_storage = persistant_swap_storage; | 1214 | bo->persistent_swap_storage = persistent_swap_storage; |
| 1215 | bo->acc_size = acc_size; | 1215 | bo->acc_size = acc_size; |
| 1216 | atomic_inc(&bo->glob->bo_count); | 1216 | atomic_inc(&bo->glob->bo_count); |
| 1217 | 1217 | ||
| @@ -1260,7 +1260,7 @@ int ttm_bo_create(struct ttm_bo_device *bdev, | |||
| 1260 | uint32_t page_alignment, | 1260 | uint32_t page_alignment, |
| 1261 | unsigned long buffer_start, | 1261 | unsigned long buffer_start, |
| 1262 | bool interruptible, | 1262 | bool interruptible, |
| 1263 | struct file *persistant_swap_storage, | 1263 | struct file *persistent_swap_storage, |
| 1264 | struct ttm_buffer_object **p_bo) | 1264 | struct ttm_buffer_object **p_bo) |
| 1265 | { | 1265 | { |
| 1266 | struct ttm_buffer_object *bo; | 1266 | struct ttm_buffer_object *bo; |
| @@ -1282,7 +1282,7 @@ int ttm_bo_create(struct ttm_bo_device *bdev, | |||
| 1282 | 1282 | ||
| 1283 | ret = ttm_bo_init(bdev, bo, size, type, placement, page_alignment, | 1283 | ret = ttm_bo_init(bdev, bo, size, type, placement, page_alignment, |
| 1284 | buffer_start, interruptible, | 1284 | buffer_start, interruptible, |
| 1285 | persistant_swap_storage, acc_size, NULL); | 1285 | persistent_swap_storage, acc_size, NULL); |
| 1286 | if (likely(ret == 0)) | 1286 | if (likely(ret == 0)) |
| 1287 | *p_bo = bo; | 1287 | *p_bo = bo; |
| 1288 | 1288 | ||
| @@ -1863,7 +1863,7 @@ static int ttm_bo_swapout(struct ttm_mem_shrink *shrink) | |||
| 1863 | if (bo->bdev->driver->swap_notify) | 1863 | if (bo->bdev->driver->swap_notify) |
| 1864 | bo->bdev->driver->swap_notify(bo); | 1864 | bo->bdev->driver->swap_notify(bo); |
| 1865 | 1865 | ||
| 1866 | ret = ttm_tt_swapout(bo->ttm, bo->persistant_swap_storage); | 1866 | ret = ttm_tt_swapout(bo->ttm, bo->persistent_swap_storage); |
| 1867 | out: | 1867 | out: |
| 1868 | 1868 | ||
| 1869 | /** | 1869 | /** |
diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc.c b/drivers/gpu/drm/ttm/ttm_page_alloc.c index 737a2a2e46a..9d9d92945f8 100644 --- a/drivers/gpu/drm/ttm/ttm_page_alloc.c +++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c | |||
| @@ -683,22 +683,14 @@ int ttm_get_pages(struct list_head *pages, int flags, | |||
| 683 | gfp_flags |= GFP_HIGHUSER; | 683 | gfp_flags |= GFP_HIGHUSER; |
| 684 | 684 | ||
| 685 | for (r = 0; r < count; ++r) { | 685 | for (r = 0; r < count; ++r) { |
| 686 | if ((flags & TTM_PAGE_FLAG_DMA32) && dma_address) { | 686 | p = alloc_page(gfp_flags); |
| 687 | void *addr; | ||
| 688 | addr = dma_alloc_coherent(NULL, PAGE_SIZE, | ||
| 689 | &dma_address[r], | ||
| 690 | gfp_flags); | ||
| 691 | if (addr == NULL) | ||
| 692 | return -ENOMEM; | ||
| 693 | p = virt_to_page(addr); | ||
| 694 | } else | ||
| 695 | p = alloc_page(gfp_flags); | ||
| 696 | if (!p) { | 687 | if (!p) { |
| 697 | 688 | ||
| 698 | printk(KERN_ERR TTM_PFX | 689 | printk(KERN_ERR TTM_PFX |
| 699 | "Unable to allocate page."); | 690 | "Unable to allocate page."); |
| 700 | return -ENOMEM; | 691 | return -ENOMEM; |
| 701 | } | 692 | } |
| 693 | |||
| 702 | list_add(&p->lru, pages); | 694 | list_add(&p->lru, pages); |
| 703 | } | 695 | } |
| 704 | return 0; | 696 | return 0; |
| @@ -746,24 +738,12 @@ void ttm_put_pages(struct list_head *pages, unsigned page_count, int flags, | |||
| 746 | unsigned long irq_flags; | 738 | unsigned long irq_flags; |
| 747 | struct ttm_page_pool *pool = ttm_get_pool(flags, cstate); | 739 | struct ttm_page_pool *pool = ttm_get_pool(flags, cstate); |
| 748 | struct page *p, *tmp; | 740 | struct page *p, *tmp; |
| 749 | unsigned r; | ||
| 750 | 741 | ||
| 751 | if (pool == NULL) { | 742 | if (pool == NULL) { |
| 752 | /* No pool for this memory type so free the pages */ | 743 | /* No pool for this memory type so free the pages */ |
| 753 | 744 | ||
| 754 | r = page_count-1; | ||
| 755 | list_for_each_entry_safe(p, tmp, pages, lru) { | 745 | list_for_each_entry_safe(p, tmp, pages, lru) { |
| 756 | if ((flags & TTM_PAGE_FLAG_DMA32) && dma_address) { | 746 | __free_page(p); |
| 757 | void *addr = page_address(p); | ||
| 758 | WARN_ON(!addr || !dma_address[r]); | ||
| 759 | if (addr) | ||
| 760 | dma_free_coherent(NULL, PAGE_SIZE, | ||
| 761 | addr, | ||
| 762 | dma_address[r]); | ||
| 763 | dma_address[r] = 0; | ||
| 764 | } else | ||
| 765 | __free_page(p); | ||
| 766 | r--; | ||
| 767 | } | 747 | } |
| 768 | /* Make the pages list empty */ | 748 | /* Make the pages list empty */ |
| 769 | INIT_LIST_HEAD(pages); | 749 | INIT_LIST_HEAD(pages); |
diff --git a/drivers/gpu/drm/ttm/ttm_tt.c b/drivers/gpu/drm/ttm/ttm_tt.c index 86d5b1745a4..90e23e0bfad 100644 --- a/drivers/gpu/drm/ttm/ttm_tt.c +++ b/drivers/gpu/drm/ttm/ttm_tt.c | |||
| @@ -332,7 +332,7 @@ void ttm_tt_destroy(struct ttm_tt *ttm) | |||
| 332 | ttm_tt_free_page_directory(ttm); | 332 | ttm_tt_free_page_directory(ttm); |
| 333 | } | 333 | } |
| 334 | 334 | ||
| 335 | if (!(ttm->page_flags & TTM_PAGE_FLAG_PERSISTANT_SWAP) && | 335 | if (!(ttm->page_flags & TTM_PAGE_FLAG_PERSISTENT_SWAP) && |
| 336 | ttm->swap_storage) | 336 | ttm->swap_storage) |
| 337 | fput(ttm->swap_storage); | 337 | fput(ttm->swap_storage); |
| 338 | 338 | ||
| @@ -503,7 +503,7 @@ static int ttm_tt_swapin(struct ttm_tt *ttm) | |||
| 503 | page_cache_release(from_page); | 503 | page_cache_release(from_page); |
| 504 | } | 504 | } |
| 505 | 505 | ||
| 506 | if (!(ttm->page_flags & TTM_PAGE_FLAG_PERSISTANT_SWAP)) | 506 | if (!(ttm->page_flags & TTM_PAGE_FLAG_PERSISTENT_SWAP)) |
| 507 | fput(swap_storage); | 507 | fput(swap_storage); |
| 508 | ttm->swap_storage = NULL; | 508 | ttm->swap_storage = NULL; |
| 509 | ttm->page_flags &= ~TTM_PAGE_FLAG_SWAPPED; | 509 | ttm->page_flags &= ~TTM_PAGE_FLAG_SWAPPED; |
| @@ -514,7 +514,7 @@ out_err: | |||
| 514 | return ret; | 514 | return ret; |
| 515 | } | 515 | } |
| 516 | 516 | ||
| 517 | int ttm_tt_swapout(struct ttm_tt *ttm, struct file *persistant_swap_storage) | 517 | int ttm_tt_swapout(struct ttm_tt *ttm, struct file *persistent_swap_storage) |
| 518 | { | 518 | { |
| 519 | struct address_space *swap_space; | 519 | struct address_space *swap_space; |
| 520 | struct file *swap_storage; | 520 | struct file *swap_storage; |
| @@ -540,7 +540,7 @@ int ttm_tt_swapout(struct ttm_tt *ttm, struct file *persistant_swap_storage) | |||
| 540 | return 0; | 540 | return 0; |
| 541 | } | 541 | } |
| 542 | 542 | ||
| 543 | if (!persistant_swap_storage) { | 543 | if (!persistent_swap_storage) { |
| 544 | swap_storage = shmem_file_setup("ttm swap", | 544 | swap_storage = shmem_file_setup("ttm swap", |
| 545 | ttm->num_pages << PAGE_SHIFT, | 545 | ttm->num_pages << PAGE_SHIFT, |
| 546 | 0); | 546 | 0); |
| @@ -549,7 +549,7 @@ int ttm_tt_swapout(struct ttm_tt *ttm, struct file *persistant_swap_storage) | |||
| 549 | return PTR_ERR(swap_storage); | 549 | return PTR_ERR(swap_storage); |
| 550 | } | 550 | } |
| 551 | } else | 551 | } else |
| 552 | swap_storage = persistant_swap_storage; | 552 | swap_storage = persistent_swap_storage; |
| 553 | 553 | ||
| 554 | swap_space = swap_storage->f_path.dentry->d_inode->i_mapping; | 554 | swap_space = swap_storage->f_path.dentry->d_inode->i_mapping; |
| 555 | 555 | ||
| @@ -577,12 +577,12 @@ int ttm_tt_swapout(struct ttm_tt *ttm, struct file *persistant_swap_storage) | |||
| 577 | ttm_tt_free_alloced_pages(ttm); | 577 | ttm_tt_free_alloced_pages(ttm); |
| 578 | ttm->swap_storage = swap_storage; | 578 | ttm->swap_storage = swap_storage; |
| 579 | ttm->page_flags |= TTM_PAGE_FLAG_SWAPPED; | 579 | ttm->page_flags |= TTM_PAGE_FLAG_SWAPPED; |
| 580 | if (persistant_swap_storage) | 580 | if (persistent_swap_storage) |
| 581 | ttm->page_flags |= TTM_PAGE_FLAG_PERSISTANT_SWAP; | 581 | ttm->page_flags |= TTM_PAGE_FLAG_PERSISTENT_SWAP; |
| 582 | 582 | ||
| 583 | return 0; | 583 | return 0; |
| 584 | out_err: | 584 | out_err: |
| 585 | if (!persistant_swap_storage) | 585 | if (!persistent_swap_storage) |
| 586 | fput(swap_storage); | 586 | fput(swap_storage); |
| 587 | 587 | ||
| 588 | return ret; | 588 | return ret; |
