lkml.org 
[lkml]   [2010]   [Mar]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 104/123] drm/ttm: handle OOM in ttm_tt_swapout
    2.6.33-stable review patch.  If anyone has any objections, please let me know.

    -----------------

    From: Maarten Maathuis <madman2003@gmail.com>

    commit 290e55056ec3d25c72088628245d8cae037b30db upstream.

    - Without this change I get a general protection fault.
    - Also use PTR_ERR where applicable.

    Signed-off-by: Maarten Maathuis <madman2003@gmail.com>
    Reviewed-by: Dave Airlie <airlied@redhat.com>
    Acked-by: Thomas Hellstrom <thellstrom@vmware.com>
    Signed-off-by: Dave Airlie <airlied@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    drivers/gpu/drm/ttm/ttm_tt.c | 18 +++++++++++-------
    1 file changed, 11 insertions(+), 7 deletions(-)

    --- 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 *
    void *from_virtual;
    void *to_virtual;
    int i;
    - int ret;
    + int ret = -ENOMEM;

    if (ttm->page_flags & TTM_PAGE_FLAG_USER) {
    ret = ttm_tt_set_user(ttm, ttm->tsk, ttm->start,
    @@ -499,8 +499,10 @@ static int ttm_tt_swapin(struct ttm_tt *

    for (i = 0; i < ttm->num_pages; ++i) {
    from_page = read_mapping_page(swap_space, i, NULL);
    - if (IS_ERR(from_page))
    + if (IS_ERR(from_page)) {
    + ret = PTR_ERR(from_page);
    goto out_err;
    + }
    to_page = __ttm_tt_get_page(ttm, i);
    if (unlikely(to_page == NULL))
    goto out_err;
    @@ -523,7 +525,7 @@ static int ttm_tt_swapin(struct ttm_tt *
    return 0;
    out_err:
    ttm_tt_free_alloced_pages(ttm);
    - return -ENOMEM;
    + return ret;
    }

    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, s
    void *from_virtual;
    void *to_virtual;
    int i;
    + int ret = -ENOMEM;

    BUG_ON(ttm->state != tt_unbound && ttm->state != tt_unpopulated);
    BUG_ON(ttm->caching_state != tt_cached);
    @@ -557,7 +560,7 @@ int ttm_tt_swapout(struct ttm_tt *ttm, s
    0);
    if (unlikely(IS_ERR(swap_storage))) {
    printk(KERN_ERR "Failed allocating swap storage.\n");
    - return -ENOMEM;
    + return PTR_ERR(swap_storage);
    }
    } else
    swap_storage = persistant_swap_storage;
    @@ -569,9 +572,10 @@ int ttm_tt_swapout(struct ttm_tt *ttm, s
    if (unlikely(from_page == NULL))
    continue;
    to_page = read_mapping_page(swap_space, i, NULL);
    - if (unlikely(to_page == NULL))
    + if (unlikely(IS_ERR(to_page))) {
    + ret = PTR_ERR(to_page);
    goto out_err;
    -
    + }
    preempt_disable();
    from_virtual = kmap_atomic(from_page, KM_USER0);
    to_virtual = kmap_atomic(to_page, KM_USER1);
    @@ -595,5 +599,5 @@ out_err:
    if (!persistant_swap_storage)
    fput(swap_storage);

    - return -ENOMEM;
    + return ret;
    }



    \
     
     \ /
      Last update: 2010-03-13 01:25    [W:0.024 / U:31.976 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site