From 5146690a6c99a2cb1b0594ceb5f6e20b13ca2dd2 Mon Sep 17 00:00:00 2001 From: Yunfei Wang Date: Fri, 17 Jun 2022 16:46:01 +0800 Subject: [PATCH] ANDROID: dma/debug: fix warning of check_sync check_sync() checks for whether device driver DMA sync sg list entry count equals to map sg list entry count, but in struct dma_buf_ops, there has below interface: int (*begin_cpu_access_partial) int (*end_cpu_access_partial) When vendor implement these interface in dma heap to support dma-buf partial cache sync for performance improvement, in dma_buf_ops of heap, we copy a sgtable from orginal sgtable but with necessary nents, it will less then nents used in map attachment, in the way, the following warning had occurred: DMA-API: device_xxx: device driver syncs DMA sg list with different entry count [map count=5] [sync count=1] Call trace: check_sync+0x6d8/0xb40 debug_dma_sync_sg_for_cpu+0x114/0x16c dma_sync_sg_for_cpu+0xa0/0xe4 So need change check conditation in check_sync to support dma-buf partial cache sync. Bug: 236343688 Signed-off-by: Mingyuan Ma Signed-off-by: Yunfei Wang Change-Id: I2f4db3b156e752eeb022927957f77a3fa534a573 (cherry picked from commit d61fe3ad4bab3f4bc040e7ac0c7ec919b50e8a43) --- kernel/dma/debug.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/kernel/dma/debug.c b/kernel/dma/debug.c index f8ae54679865..6bca5077ee71 100644 --- a/kernel/dma/debug.c +++ b/kernel/dma/debug.c @@ -1147,10 +1147,11 @@ static void check_sync(struct device *dev, dir2name[entry->direction], dir2name[ref->direction]); + /* sg list count can be less than map count when partial cache sync */ if (ref->sg_call_ents && ref->type == dma_debug_sg && - ref->sg_call_ents != entry->sg_call_ents) { + ref->sg_call_ents > entry->sg_call_ents) { err_printk(ref->dev, entry, "device driver syncs " - "DMA sg list with different entry count " + "DMA sg list count larger than map count " "[map count=%d] [sync count=%d]\n", entry->sg_call_ents, ref->sg_call_ents); }