diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/gpu/drm/ttm/ttm_tt.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/drivers/gpu/drm/ttm/ttm_tt.c b/drivers/gpu/drm/ttm/ttm_tt.c index 3d47a2c12322..a759170763bb 100644 --- a/drivers/gpu/drm/ttm/ttm_tt.c +++ b/drivers/gpu/drm/ttm/ttm_tt.c | |||
@@ -480,7 +480,7 @@ static int ttm_tt_swapin(struct ttm_tt *ttm) | |||
480 | void *from_virtual; | 480 | void *from_virtual; |
481 | void *to_virtual; | 481 | void *to_virtual; |
482 | int i; | 482 | int i; |
483 | int ret; | 483 | int ret = -ENOMEM; |
484 | 484 | ||
485 | if (ttm->page_flags & TTM_PAGE_FLAG_USER) { | 485 | if (ttm->page_flags & TTM_PAGE_FLAG_USER) { |
486 | ret = ttm_tt_set_user(ttm, ttm->tsk, ttm->start, | 486 | ret = ttm_tt_set_user(ttm, ttm->tsk, ttm->start, |
@@ -499,8 +499,10 @@ static int ttm_tt_swapin(struct ttm_tt *ttm) | |||
499 | 499 | ||
500 | for (i = 0; i < ttm->num_pages; ++i) { | 500 | for (i = 0; i < ttm->num_pages; ++i) { |
501 | from_page = read_mapping_page(swap_space, i, NULL); | 501 | from_page = read_mapping_page(swap_space, i, NULL); |
502 | if (IS_ERR(from_page)) | 502 | if (IS_ERR(from_page)) { |
503 | ret = PTR_ERR(from_page); | ||
503 | goto out_err; | 504 | goto out_err; |
505 | } | ||
504 | to_page = __ttm_tt_get_page(ttm, i); | 506 | to_page = __ttm_tt_get_page(ttm, i); |
505 | if (unlikely(to_page == NULL)) | 507 | if (unlikely(to_page == NULL)) |
506 | goto out_err; | 508 | goto out_err; |
@@ -523,7 +525,7 @@ static int ttm_tt_swapin(struct ttm_tt *ttm) | |||
523 | return 0; | 525 | return 0; |
524 | out_err: | 526 | out_err: |
525 | ttm_tt_free_alloced_pages(ttm); | 527 | ttm_tt_free_alloced_pages(ttm); |
526 | return -ENOMEM; | 528 | return ret; |
527 | } | 529 | } |
528 | 530 | ||
529 | int ttm_tt_swapout(struct ttm_tt *ttm, struct file *persistant_swap_storage) | 531 | int ttm_tt_swapout(struct ttm_tt *ttm, struct file *persistant_swap_storage) |
@@ -535,6 +537,7 @@ int ttm_tt_swapout(struct ttm_tt *ttm, struct file *persistant_swap_storage) | |||
535 | void *from_virtual; | 537 | void *from_virtual; |
536 | void *to_virtual; | 538 | void *to_virtual; |
537 | int i; | 539 | int i; |
540 | int ret = -ENOMEM; | ||
538 | 541 | ||
539 | BUG_ON(ttm->state != tt_unbound && ttm->state != tt_unpopulated); | 542 | BUG_ON(ttm->state != tt_unbound && ttm->state != tt_unpopulated); |
540 | BUG_ON(ttm->caching_state != tt_cached); | 543 | BUG_ON(ttm->caching_state != tt_cached); |
@@ -557,7 +560,7 @@ int ttm_tt_swapout(struct ttm_tt *ttm, struct file *persistant_swap_storage) | |||
557 | 0); | 560 | 0); |
558 | if (unlikely(IS_ERR(swap_storage))) { | 561 | if (unlikely(IS_ERR(swap_storage))) { |
559 | printk(KERN_ERR "Failed allocating swap storage.\n"); | 562 | printk(KERN_ERR "Failed allocating swap storage.\n"); |
560 | return -ENOMEM; | 563 | return PTR_ERR(swap_storage); |
561 | } | 564 | } |
562 | } else | 565 | } else |
563 | swap_storage = persistant_swap_storage; | 566 | swap_storage = persistant_swap_storage; |
@@ -569,9 +572,10 @@ int ttm_tt_swapout(struct ttm_tt *ttm, struct file *persistant_swap_storage) | |||
569 | if (unlikely(from_page == NULL)) | 572 | if (unlikely(from_page == NULL)) |
570 | continue; | 573 | continue; |
571 | to_page = read_mapping_page(swap_space, i, NULL); | 574 | to_page = read_mapping_page(swap_space, i, NULL); |
572 | if (unlikely(to_page == NULL)) | 575 | if (unlikely(IS_ERR(to_page))) { |
576 | ret = PTR_ERR(to_page); | ||
573 | goto out_err; | 577 | goto out_err; |
574 | 578 | } | |
575 | preempt_disable(); | 579 | preempt_disable(); |
576 | from_virtual = kmap_atomic(from_page, KM_USER0); | 580 | from_virtual = kmap_atomic(from_page, KM_USER0); |
577 | to_virtual = kmap_atomic(to_page, KM_USER1); | 581 | to_virtual = kmap_atomic(to_page, KM_USER1); |
@@ -595,5 +599,5 @@ out_err: | |||
595 | if (!persistant_swap_storage) | 599 | if (!persistant_swap_storage) |
596 | fput(swap_storage); | 600 | fput(swap_storage); |
597 | 601 | ||
598 | return -ENOMEM; | 602 | return ret; |
599 | } | 603 | } |