lkml.org 
[lkml]   [2009]   [Jun]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 1/2] dma-debug: check for sg_call_ents in best-fit algorithm too
    Date
    If we don't check for sg_call_ents the hash_bucket_find function might
    still return the wrong dma_debug_entry for sg mappings.

    Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
    ---
    lib/dma-debug.c | 15 +++++++--------
    1 files changed, 7 insertions(+), 8 deletions(-)

    diff --git a/lib/dma-debug.c b/lib/dma-debug.c
    index ad65fc0..c71e2dd 100644
    --- a/lib/dma-debug.c
    +++ b/lib/dma-debug.c
    @@ -262,11 +262,12 @@ static struct dma_debug_entry *hash_bucket_find(struct hash_bucket *bucket,
    */
    matches += 1;
    match_lvl = 0;
    - entry->size == ref->size ? ++match_lvl : match_lvl;
    - entry->type == ref->type ? ++match_lvl : match_lvl;
    - entry->direction == ref->direction ? ++match_lvl : match_lvl;
    + entry->size == ref->size ? ++match_lvl : 0;
    + entry->type == ref->type ? ++match_lvl : 0;
    + entry->direction == ref->direction ? ++match_lvl : 0;
    + entry->sg_call_ents == ref->sg_call_ents ? ++match_lvl : 0;

    - if (match_lvl == 3) {
    + if (match_lvl == 4) {
    /* perfect-fit - return the result */
    return entry;
    } else if (match_lvl > last_lvl) {
    @@ -1076,16 +1077,14 @@ void debug_dma_unmap_sg(struct device *dev, struct scatterlist *sglist,
    .dev_addr = sg_dma_address(s),
    .size = sg_dma_len(s),
    .direction = dir,
    - .sg_call_ents = 0,
    + .sg_call_ents = nelems,
    };

    if (mapped_ents && i >= mapped_ents)
    break;

    - if (!i) {
    - ref.sg_call_ents = nelems;
    + if (!i)
    mapped_ents = get_nr_mapped_entries(dev, s);
    - }

    check_unmap(&ref);
    }
    --
    1.6.3.1



    \
     
     \ /
      Last update: 2009-06-16 10:55    [W:0.024 / U:119.916 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site