lib/dma-debug.c: fix __hash_bucket_find()
If there is only one match, the unique matched entry should be returned. Without the fix, the upcoming dma debug interfaces ("dma-debug: new interfaces to debug dma mapping errors") can't work reliably because only device and dma_addr are passed to dma_mapping_error(). Signed-off-by: Ming Lei <ming.lei@canonical.com> Reported-by: Wu Fengguang <fengguang.wu@intel.com> Cc: Joerg Roedel <joerg.roedel@amd.com> Tested-by: Shuah Khan <shuah.khan@hp.com> Cc: Paul Gortmaker <paul.gortmaker@windriver.com> Cc: Jakub Kicinski <kubakici@wp.pl> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
0db63d7e25
commit
fe73fbe1c5
|
@ -264,7 +264,7 @@ static struct dma_debug_entry *__hash_bucket_find(struct hash_bucket *bucket,
|
|||
match_fn match)
|
||||
{
|
||||
struct dma_debug_entry *entry, *ret = NULL;
|
||||
int matches = 0, match_lvl, last_lvl = 0;
|
||||
int matches = 0, match_lvl, last_lvl = -1;
|
||||
|
||||
list_for_each_entry(entry, &bucket->list, list) {
|
||||
if (!match(ref, entry))
|
||||
|
@ -293,7 +293,7 @@ static struct dma_debug_entry *__hash_bucket_find(struct hash_bucket *bucket,
|
|||
} else if (match_lvl > last_lvl) {
|
||||
/*
|
||||
* We found an entry that fits better then the
|
||||
* previous one
|
||||
* previous one or it is the 1st match.
|
||||
*/
|
||||
last_lvl = match_lvl;
|
||||
ret = entry;
|
||||
|
|
Loading…
Reference in New Issue