diff mbox series

dma_heap: enable map_attrs when (un)map_attachment

Message ID 20210810020254.103134-1-guangming.cao@mediatek.com
State New
Headers show
Series dma_heap: enable map_attrs when (un)map_attachment | expand

Commit Message

guangming.cao@mediatek.com Aug. 10, 2021, 2:02 a.m. UTC
From: Guangming Cao <Guangming.Cao@mediatek.com>

For dma-heap users, they can't bypass cache sync when (un)map
iova with dma heap. But they can do it by adding
DMA_ATTR_SKIP_CPU_SYNC into dma_alloc_attrs.

To Keep alignment, add map_attrs support for dma_heap when
(un)map_attachment.

Signed-off-by: Guangming Cao <Guangming.Cao@mediatek.com>
---
 drivers/dma-buf/heaps/cma_heap.c    | 6 ++++--
 drivers/dma-buf/heaps/system_heap.c | 6 ++++--
 2 files changed, 8 insertions(+), 4 deletions(-)

Comments

kernel test robot Aug. 10, 2021, 9:26 a.m. UTC | #1
Hi,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on linus/master]
[also build test ERROR on v5.14-rc5 next-20210809]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/guangming-cao-mediatek-com/dma_heap-enable-map_attrs-when-un-map_attachment/20210810-100452
base:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 9a73fa375d58fee5262dd16473c8e7522bdf44de
config: alpha-buildonly-randconfig-r003-20210809 (attached as .config)
compiler: alpha-linux-gcc (GCC) 10.3.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/0day-ci/linux/commit/b1a5626566cf9a73b35a742151246017ac87556b
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review guangming-cao-mediatek-com/dma_heap-enable-map_attrs-when-un-map_attachment/20210810-100452
        git checkout b1a5626566cf9a73b35a742151246017ac87556b
        # save the attached .config to linux build tree
        mkdir build_dir
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-10.3.0 make.cross O=build_dir ARCH=alpha SHELL=/bin/bash

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   drivers/dma-buf/heaps/system_heap.c: In function 'system_heap_map_dma_buf':
>> drivers/dma-buf/heaps/system_heap.c:133:24: error: 'struct dma_buf_attachment' has no member named 'dma_map_attrs'
     133 |  int attrs = attachment->dma_map_attrs;
         |                        ^~
   drivers/dma-buf/heaps/system_heap.c: In function 'system_heap_unmap_dma_buf':
   drivers/dma-buf/heaps/system_heap.c:149:24: error: 'struct dma_buf_attachment' has no member named 'dma_map_attrs'
     149 |  int attrs = attachment->dma_map_attrs;
         |                        ^~


vim +133 drivers/dma-buf/heaps/system_heap.c

   127	
   128	static struct sg_table *system_heap_map_dma_buf(struct dma_buf_attachment *attachment,
   129							enum dma_data_direction direction)
   130	{
   131		struct dma_heap_attachment *a = attachment->priv;
   132		struct sg_table *table = a->table;
 > 133		int attrs = attachment->dma_map_attrs;
   134		int ret;
   135	
   136		ret = dma_map_sgtable(attachment->dev, table, direction, attrs);
   137		if (ret)
   138			return ERR_PTR(ret);
   139	
   140		a->mapped = true;
   141		return table;
   142	}
   143	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
kernel test robot Aug. 10, 2021, 9:56 a.m. UTC | #2
Hi,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on linus/master]
[also build test ERROR on v5.14-rc5 next-20210809]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/guangming-cao-mediatek-com/dma_heap-enable-map_attrs-when-un-map_attachment/20210810-100452
base:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 9a73fa375d58fee5262dd16473c8e7522bdf44de
config: x86_64-randconfig-a016-20210810 (attached as .config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 614c7d03877fd99c2de47429b15be3f00306a3bd)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/0day-ci/linux/commit/b1a5626566cf9a73b35a742151246017ac87556b
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review guangming-cao-mediatek-com/dma_heap-enable-map_attrs-when-un-map_attachment/20210810-100452
        git checkout b1a5626566cf9a73b35a742151246017ac87556b
        # save the attached .config to linux build tree
        mkdir build_dir
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross O=build_dir ARCH=x86_64 SHELL=/bin/bash

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

>> drivers/dma-buf/heaps/cma_heap.c:102:26: error: no member named 'dma_map_attrs' in 'struct dma_buf_attachment'
           int attrs = attachment->dma_map_attrs;
                       ~~~~~~~~~~  ^
   drivers/dma-buf/heaps/cma_heap.c:117:26: error: no member named 'dma_map_attrs' in 'struct dma_buf_attachment'
           int attrs = attachment->dma_map_attrs;
                       ~~~~~~~~~~  ^
   2 errors generated.


vim +102 drivers/dma-buf/heaps/cma_heap.c

    96	
    97	static struct sg_table *cma_heap_map_dma_buf(struct dma_buf_attachment *attachment,
    98						     enum dma_data_direction direction)
    99	{
   100		struct dma_heap_attachment *a = attachment->priv;
   101		struct sg_table *table = &a->table;
 > 102		int attrs = attachment->dma_map_attrs;
   103		int ret;
   104	
   105		ret = dma_map_sgtable(attachment->dev, table, direction, attrs);
   106		if (ret)
   107			return ERR_PTR(-ENOMEM);
   108		a->mapped = true;
   109		return table;
   110	}
   111	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
diff mbox series

Patch

diff --git a/drivers/dma-buf/heaps/cma_heap.c b/drivers/dma-buf/heaps/cma_heap.c
index 0c05b79870f9..2c9feb3bfc3e 100644
--- a/drivers/dma-buf/heaps/cma_heap.c
+++ b/drivers/dma-buf/heaps/cma_heap.c
@@ -99,9 +99,10 @@  static struct sg_table *cma_heap_map_dma_buf(struct dma_buf_attachment *attachme
 {
 	struct dma_heap_attachment *a = attachment->priv;
 	struct sg_table *table = &a->table;
+	int attrs = attachment->dma_map_attrs;
 	int ret;
 
-	ret = dma_map_sgtable(attachment->dev, table, direction, 0);
+	ret = dma_map_sgtable(attachment->dev, table, direction, attrs);
 	if (ret)
 		return ERR_PTR(-ENOMEM);
 	a->mapped = true;
@@ -113,9 +114,10 @@  static void cma_heap_unmap_dma_buf(struct dma_buf_attachment *attachment,
 				   enum dma_data_direction direction)
 {
 	struct dma_heap_attachment *a = attachment->priv;
+	int attrs = attachment->dma_map_attrs;
 
 	a->mapped = false;
-	dma_unmap_sgtable(attachment->dev, table, direction, 0);
+	dma_unmap_sgtable(attachment->dev, table, direction, attrs);
 }
 
 static int cma_heap_dma_buf_begin_cpu_access(struct dma_buf *dmabuf,
diff --git a/drivers/dma-buf/heaps/system_heap.c b/drivers/dma-buf/heaps/system_heap.c
index 23a7e74ef966..fc7b1e02988e 100644
--- a/drivers/dma-buf/heaps/system_heap.c
+++ b/drivers/dma-buf/heaps/system_heap.c
@@ -130,9 +130,10 @@  static struct sg_table *system_heap_map_dma_buf(struct dma_buf_attachment *attac
 {
 	struct dma_heap_attachment *a = attachment->priv;
 	struct sg_table *table = a->table;
+	int attrs = attachment->dma_map_attrs;
 	int ret;
 
-	ret = dma_map_sgtable(attachment->dev, table, direction, 0);
+	ret = dma_map_sgtable(attachment->dev, table, direction, attrs);
 	if (ret)
 		return ERR_PTR(ret);
 
@@ -145,9 +146,10 @@  static void system_heap_unmap_dma_buf(struct dma_buf_attachment *attachment,
 				      enum dma_data_direction direction)
 {
 	struct dma_heap_attachment *a = attachment->priv;
+	int attrs = attachment->dma_map_attrs;
 
 	a->mapped = false;
-	dma_unmap_sgtable(attachment->dev, table, direction, 0);
+	dma_unmap_sgtable(attachment->dev, table, direction, attrs);
 }
 
 static int system_heap_dma_buf_begin_cpu_access(struct dma_buf *dmabuf,