diff options
author | Dave Airlie <airlied@redhat.com> | 2010-03-01 00:40:12 -0500 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2010-03-01 00:40:12 -0500 |
commit | 79fa9eb7396238233c327668185d28bb47fb0796 (patch) | |
tree | df91899c274005adb02a7a8ca5d9e5609bc2d05b /drivers/gpu/drm/ttm | |
parent | 60b341b778cc2929df16c0a504c91621b3c6a4ad (diff) | |
parent | 290e55056ec3d25c72088628245d8cae037b30db (diff) |
Merge remote branch 'korg/drm-core-next' into drm-next-stage
* korg/drm-core-next:
drm/ttm: handle OOM in ttm_tt_swapout
drm/radeon/kms/atom: fix shr/shl ops
drm/kms: fix spelling of "CLOCK"
drm/kms: fix fb_changed = true else statement
drivers/gpu/drm/drm_fb_helper.c: don't use private implementation of atoi()
drm: switch all GEM/KMS ioctls to unlocked ioctl status.
Use drm_gem_object_[handle_]unreference_unlocked where possible
drm: introduce drm_gem_object_[handle_]unreference_unlocked
Diffstat (limited to 'drivers/gpu/drm/ttm')
-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 | } |