[iommu:arm/renesas 1/1] drivers/iommu/iommu.c:1318:2: note: in expansion of macro 'pr_debug'

2015-10-25 Thread kbuild test robot
tree:   https://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu.git 
arm/renesas
head:   bad78b13e3057b4bbfe769e21c213dca7c4d51de
commit: bad78b13e3057b4bbfe769e21c213dca7c4d51de [1/1] iommu/ipmmu-vmsa: Drop 
LPAE Kconfig dependency
config: mn10300-allyesconfig (attached as .config)
reproduce:
wget 
https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross
 -O ~/bin/make.cross
chmod +x ~/bin/make.cross
git checkout bad78b13e3057b4bbfe769e21c213dca7c4d51de
# save the attached .config to linux build tree
make.cross ARCH=mn10300 

All warnings (new ones prefixed by >>):

   drivers/iommu/iommu.c: In function 'iommu_map':
   drivers/iommu/iommu.c:1313:3: warning: format '%zx' expects argument of type 
'size_t', but argument 4 has type 'unsigned int' [-Wformat=]
  pr_err("unaligned: iova 0x%lx pa %pa size 0x%zx min_pagesz 0x%x\n",
  ^
   In file included from include/linux/printk.h:277:0,
from include/linux/kernel.h:13,
from include/linux/list.h:8,
from include/linux/kobject.h:20,
from include/linux/device.h:17,
from drivers/iommu/iommu.c:21:
   include/linux/dynamic_debug.h:64:16: warning: format '%zx' expects argument 
of type 'size_t', but argument 5 has type 'unsigned int' [-Wformat=]
 static struct _ddebug  __aligned(8)   \
   ^
   include/linux/dynamic_debug.h:76:2: note: in expansion of macro 
'DEFINE_DYNAMIC_DEBUG_METADATA'
 DEFINE_DYNAMIC_DEBUG_METADATA(descriptor, fmt);  \
 ^
   include/linux/printk.h:283:2: note: in expansion of macro 'dynamic_pr_debug'
 dynamic_pr_debug(fmt, ##__VA_ARGS__)
 ^
>> drivers/iommu/iommu.c:1318:2: note: in expansion of macro 'pr_debug'
 pr_debug("map: iova 0x%lx pa %pa size 0x%zx\n", iova, , size);
 ^
   include/linux/dynamic_debug.h:64:16: warning: format '%zx' expects argument 
of type 'size_t', but argument 5 has type 'unsigned int' [-Wformat=]
 static struct _ddebug  __aligned(8)   \
   ^
   include/linux/dynamic_debug.h:76:2: note: in expansion of macro 
'DEFINE_DYNAMIC_DEBUG_METADATA'
 DEFINE_DYNAMIC_DEBUG_METADATA(descriptor, fmt);  \
 ^
   include/linux/printk.h:283:2: note: in expansion of macro 'dynamic_pr_debug'
 dynamic_pr_debug(fmt, ##__VA_ARGS__)
 ^
   drivers/iommu/iommu.c:1323:3: note: in expansion of macro 'pr_debug'
  pr_debug("mapping: iova 0x%lx pa %pa pgsize 0x%zx\n",
  ^
   drivers/iommu/iommu.c: In function 'iommu_unmap':
   drivers/iommu/iommu.c:1367:3: warning: format '%zx' expects argument of type 
'size_t', but argument 3 has type 'unsigned int' [-Wformat=]
  pr_err("unaligned: iova 0x%lx size 0x%zx min_pagesz 0x%x\n",
  ^
   In file included from include/linux/printk.h:277:0,
from include/linux/kernel.h:13,
from include/linux/list.h:8,
from include/linux/kobject.h:20,
from include/linux/device.h:17,
from drivers/iommu/iommu.c:21:
   include/linux/dynamic_debug.h:64:16: warning: format '%zx' expects argument 
of type 'size_t', but argument 4 has type 'unsigned int' [-Wformat=]
 static struct _ddebug  __aligned(8)   \
   ^
   include/linux/dynamic_debug.h:76:2: note: in expansion of macro 
'DEFINE_DYNAMIC_DEBUG_METADATA'
 DEFINE_DYNAMIC_DEBUG_METADATA(descriptor, fmt);  \
 ^
   include/linux/printk.h:283:2: note: in expansion of macro 'dynamic_pr_debug'
 dynamic_pr_debug(fmt, ##__VA_ARGS__)
 ^
   drivers/iommu/iommu.c:1372:2: note: in expansion of macro 'pr_debug'
 pr_debug("unmap this: iova 0x%lx size 0x%zx\n", iova, size);
 ^
   include/linux/dynamic_debug.h:64:16: warning: format '%zx' expects argument 
of type 'size_t', but argument 4 has type 'unsigned int' [-Wformat=]
 static struct _ddebug  __aligned(8)   \
   ^
   include/linux/dynamic_debug.h:76:2: note: in expansion of macro 
'DEFINE_DYNAMIC_DEBUG_METADATA'
 DEFINE_DYNAMIC_DEBUG_METADATA(descriptor, fmt);  \
 ^
   include/linux/printk.h:283:2: note: in expansion of macro 'dynamic_pr_debug'
 dynamic_pr_debug(fmt, ##__VA_ARGS__)
 ^
   drivers/iommu/iommu.c:1385:3: note: in expansion of macro 'pr_debug'
  pr_debug("unmapped: iova 0x%lx size 0x%zx\n",
  ^

vim +/pr_debug +1318 drivers/iommu/iommu.c

a10315e5 drivers/iommu/iommu.c Joerg Roedel2015-03-26  1302 
return -EINVAL;
a10315e5 drivers/iommu/iommu.c Joerg Roedel2015-03-26  1303  
7d3002cc drivers/iommu/iommu.c Ohad Ben-Cohen  2011-11-10  1304 /* find 
out the minimum page size supported */
7d3002cc drivers/iommu/iommu.c Ohad Ben-Cohen  2011-11-10  1305 
min_pagesz = 1 << __ffs(domain->ops->pgsize_bitmap);
7d3002cc drivers/iommu/iommu.c Ohad Ben-Cohen  2011-11-10  1306  
7d3002cc drivers/iommu/iommu.c Ohad Ben-Cohen  2011-11-10  1307 

Re: [PATCH v5 5/6] iommu/mediatek: Add mt8173 IOMMU driver

2015-10-25 Thread Yong Wu
On Wed, 2015-10-14 at 14:53 +0200, Joerg Roedel wrote:
> On Fri, Oct 09, 2015 at 10:23:07AM +0800, Yong Wu wrote:
> > +   /*
> > +* There is a domain for each a iommu device in normal case.
> > +* But MTK only has one iommu domain called the m4u domain which all
> > +* the multimedia HW share. Here we reserve one as the m4u domain and
> > +* free the others.
> > +*
> > +* And the attach_device that from __iommu_setup_dma_ops
> > +* will be called earlier than probe.
> > +*/
> 
> Okay, with this being the case, you need to put all devices behind one
> IOMMU into the same iommu-group, because the IOMMU can't really isolate
> the devices from each other.
> 
> > +static int mtk_iommu_add_device(struct device *dev)
> > +{
> > +   struct iommu_group *group;
> > +   struct mtk_iommu_client_priv *priv;
> > +   struct mtk_iommu_domain *m4udom;
> > +   struct iommu_domain *domain;
> > +   int ret;
> > +
> > +   if (!dev->archdata.iommu) /* Not a iommu client device */
> > +   return -ENODEV;
> > +
> > +   group = iommu_group_get(dev);
> > +   if (!group) {
> > +   group = iommu_group_alloc();
> > +   if (IS_ERR(group)) {
> > +   dev_err(dev, "Failed to allocate IOMMU group\n");
> > +   return PTR_ERR(group);
> > +   }
> > +   }
> > +
> > +   ret = iommu_group_add_device(group, dev);
> > +   if (ret) {
> > +   dev_err(dev, "Failed to add IOMMU group\n");
> > +   goto err_group_put;
> > +   }
> > +
> > +   domain = iommu_get_domain_for_dev(dev);
> > +   if (!domain) {
> > +   /*
> > +* Get the m4u iommu domain from the m4u device.
> > +* Attach all the client devices into the m4u domain.
> > +*/
> > +   priv = dev->archdata.iommu;
> > +   m4udom = dev_get_drvdata(priv->m4udev);
> > +   ret = iommu_attach_group(>domain, group);
> > +   if (ret)
> > +   dev_err(dev, "Failed to attach IOMMU group\n");
> > +   }
> > +
> > +err_group_put:
> > +   iommu_group_put(group);
> > +   return ret;
> > +}
> 
> Here it looks like you are allocating one group for each device. As I
> said, all devices need to be in one group.
> 
>   Joerg
> 

Thanks for this suggestion. I have put all the iommu client devices into
the same iommu group, the code looks like below.
And I will send this in the next version after the Short descriptor is
reviewed.


static int mtk_iommu_add_device(struct device *dev)
{
struct iommu_group *group;
struct mtk_iommu_client_priv *priv;
struct mtk_iommu_domain *m4udom;
struct iommu_domain *domain;
int ret;

priv = dev->archdata.iommu;
if (!priv) /* Not a iommu client device */
return -ENODEV;
m4udom = dev_get_drvdata(priv->m4udev);

group = iommu_group_get(dev);
if (!group) {
/*
 * All the iommu client devices are in the m4u domain,
 * they all are in the same m4u iommu-group too here.
 */
if (!m4udom->m4u_group) {
group = iommu_group_alloc();
if (IS_ERR(group)) {
dev_err(dev, "Failed to allocate IOMMU 
group\n");
return PTR_ERR(group);
}
m4udom->m4u_group = group;
} else {
group = m4udom->m4u_group;
}
}

ret = iommu_group_add_device(group, dev);
if (ret) {
dev_err(dev, "Failed to add IOMMU group\n");
goto err_group_put;
}

domain = iommu_get_domain_for_dev(dev);
if (!domain)
ret = iommu_attach_group(>domain, group);

err_group_put:
iommu_group_put(group);
return ret;
}

___
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu