mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-14 21:01:29 +00:00
dma-debug: check for sg_call_ents in best-fit algorithm too
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>
This commit is contained in:
parent
92db1e6af7
commit
e5e8c5b90a
@ -262,11 +262,12 @@ static struct dma_debug_entry *hash_bucket_find(struct hash_bucket *bucket,
|
|||||||
*/
|
*/
|
||||||
matches += 1;
|
matches += 1;
|
||||||
match_lvl = 0;
|
match_lvl = 0;
|
||||||
entry->size == ref->size ? ++match_lvl : match_lvl;
|
entry->size == ref->size ? ++match_lvl : 0;
|
||||||
entry->type == ref->type ? ++match_lvl : match_lvl;
|
entry->type == ref->type ? ++match_lvl : 0;
|
||||||
entry->direction == ref->direction ? ++match_lvl : match_lvl;
|
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 */
|
/* perfect-fit - return the result */
|
||||||
return entry;
|
return entry;
|
||||||
} else if (match_lvl > last_lvl) {
|
} 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),
|
.dev_addr = sg_dma_address(s),
|
||||||
.size = sg_dma_len(s),
|
.size = sg_dma_len(s),
|
||||||
.direction = dir,
|
.direction = dir,
|
||||||
.sg_call_ents = 0,
|
.sg_call_ents = nelems,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (mapped_ents && i >= mapped_ents)
|
if (mapped_ents && i >= mapped_ents)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (!i) {
|
if (!i)
|
||||||
ref.sg_call_ents = nelems;
|
|
||||||
mapped_ents = get_nr_mapped_entries(dev, s);
|
mapped_ents = get_nr_mapped_entries(dev, s);
|
||||||
}
|
|
||||||
|
|
||||||
check_unmap(&ref);
|
check_unmap(&ref);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user