All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: kernel@openeuler.org, Xianglai Li <lixianglai@loongson.cn>
Cc: oe-kbuild-all@lists.linux.dev
Subject: [openeuler:OLK-6.6 1636/1636] drivers/iommu/loongarch_iommu.c:610:6: warning: no previous prototype for 'domain_deattach_iommu'
Date: Sat, 14 Dec 2024 13:39:57 +0800	[thread overview]
Message-ID: <202412141302.zMMD8AS7-lkp@intel.com> (raw)

tree:   https://gitee.com/openeuler/kernel.git OLK-6.6
head:   d68dc6ee371ec5466be9b2d76bdca0b360940adc
commit: 72fe4978ee346c10869113410da1b61710dd8d8f [1636/1636] LoongArch: add iommu support
config: loongarch-allmodconfig (https://download.01.org/0day-ci/archive/20241214/202412141302.zMMD8AS7-lkp@intel.com/config)
compiler: loongarch64-linux-gcc (GCC) 14.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20241214/202412141302.zMMD8AS7-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202412141302.zMMD8AS7-lkp@intel.com/

All warnings (new ones prefixed by >>):

>> drivers/iommu/loongarch_iommu.c:610:6: warning: no previous prototype for 'domain_deattach_iommu' [-Wmissing-prototypes]
     610 | void domain_deattach_iommu(struct dom_info *priv, struct iommu_info *info)
         |      ^~~~~~~~~~~~~~~~~~~~~
>> drivers/iommu/loongarch_iommu.c:651:29: warning: no previous prototype for 'lookup_rlooptable' [-Wmissing-prototypes]
     651 | struct iommu_rlookup_entry *lookup_rlooptable(int pcisegment)
         |                             ^~~~~~~~~~~~~~~~~
>> drivers/iommu/loongarch_iommu.c:662:25: warning: no previous prototype for 'find_iommu_by_dev' [-Wmissing-prototypes]
     662 | struct loongarch_iommu *find_iommu_by_dev(struct pci_dev  *pdev)
         |                         ^~~~~~~~~~~~~~~~~
>> drivers/iommu/loongarch_iommu.c:684:22: warning: no previous prototype for 'iommu_init_device' [-Wmissing-prototypes]
     684 | struct iommu_device *iommu_init_device(struct device *dev)
         |                      ^~~~~~~~~~~~~~~~~
>> drivers/iommu/loongarch_iommu.c:721:22: warning: no previous prototype for 'la_iommu_probe_device' [-Wmissing-prototypes]
     721 | struct iommu_device *la_iommu_probe_device(struct device *dev)
         |                      ^~~~~~~~~~~~~~~~~~~~~
>> drivers/iommu/loongarch_iommu.c:752:20: warning: no previous prototype for 'get_iommu_info_from_dom' [-Wmissing-prototypes]
     752 | struct iommu_info *get_iommu_info_from_dom(struct dom_info *priv, struct loongarch_iommu *iommu)
         |                    ^~~~~~~~~~~~~~~~~~~~~~~
>> drivers/iommu/loongarch_iommu.c:767:20: warning: no previous prototype for 'domain_attach_iommu' [-Wmissing-prototypes]
     767 | struct iommu_info *domain_attach_iommu(struct dom_info *priv, struct loongarch_iommu *iommu)
         |                    ^~~~~~~~~~~~~~~~~~~
>> drivers/iommu/loongarch_iommu.c:1197:25: warning: no previous prototype for 'loongarch_get_iommu_by_devid' [-Wmissing-prototypes]
    1197 | struct loongarch_iommu *loongarch_get_iommu_by_devid(struct pci_dev *pdev)
         |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/iommu/loongarch_iommu.c:1215:6: warning: no previous prototype for 'check_device_compat' [-Wmissing-prototypes]
    1215 | bool check_device_compat(struct pci_dev *pdev)
         |      ^~~~~~~~~~~~~~~~~~~
>> drivers/iommu/loongarch_iommu.c:1344:29: warning: no previous prototype for 'create_rlookup_entry' [-Wmissing-prototypes]
    1344 | struct iommu_rlookup_entry *create_rlookup_entry(int pcisegment)
         |                             ^~~~~~~~~~~~~~~~~~~~
>> drivers/iommu/loongarch_iommu.c:1765:19: warning: 'la_iommu_setup' defined but not used [-Wunused-function]
    1765 | static int __init la_iommu_setup(char *str)
         |                   ^~~~~~~~~~~~~~
--
>> drivers/iommu/loongarch_iommu.c:1663: warning: Function parameter or member 'ivrs' not described in 'get_highest_supported_ivhd_type'


vim +/domain_deattach_iommu +610 drivers/iommu/loongarch_iommu.c

   609	
 > 610	void domain_deattach_iommu(struct dom_info *priv, struct iommu_info *info)
   611	{
   612		if ((priv == NULL) || (info == NULL) ||
   613			(info->dev_cnt != 0) || (info->iommu == NULL)) {
   614			pr_err("%s invalid parameter", __func__);
   615			return;
   616		}
   617		del_domain_from_list(info->iommu, priv);
   618		domain_id_free(info->iommu, info->id);
   619		spin_lock(&priv->lock);
   620		list_del(&info->list);
   621		spin_unlock(&priv->lock);
   622		kfree(info);
   623	}
   624	
   625	static void la_iommu_domain_free(struct iommu_domain *domain)
   626	{
   627		struct dom_info *priv;
   628		struct loongarch_iommu *iommu = NULL;
   629		struct iommu_info *info, *tmp;
   630	
   631		priv = to_dom_info(domain);
   632		spin_lock(&priv->lock);
   633		list_for_each_entry_safe(info, tmp, &priv->iommu_devlist, list) {
   634			if (info->dev_cnt > 0)
   635				detach_all_dev_by_domain(info);
   636			iommu = info->iommu;
   637			spin_unlock(&priv->lock);
   638			domain_deattach_iommu(priv, info);
   639			spin_lock(&priv->lock);
   640			iommu_flush_iotlb(iommu);
   641			if (!has_dom(iommu))
   642				iommu_translate_disable(iommu);
   643		}
   644		spin_unlock(&priv->lock);
   645		mutex_lock(&priv->ptl_lock);
   646		iommu_free_pagetable(priv);
   647		mutex_unlock(&priv->ptl_lock);
   648		dom_info_free(priv);
   649	}
   650	
 > 651	struct iommu_rlookup_entry *lookup_rlooptable(int pcisegment)
   652	{
   653		struct iommu_rlookup_entry *rlookupentry = NULL;
   654	
   655		list_for_each_entry(rlookupentry, &la_rlookup_iommu_list, list) {
   656			if (rlookupentry->pcisegment == pcisegment)
   657				return rlookupentry;
   658		}
   659		return NULL;
   660	}
   661	
 > 662	struct loongarch_iommu *find_iommu_by_dev(struct pci_dev  *pdev)
   663	{
   664		int pcisegment;
   665		unsigned short devid;
   666		struct iommu_rlookup_entry *rlookupentry = NULL;
   667		struct loongarch_iommu *iommu = NULL;
   668		struct pci_bus	*bus = pdev->bus;
   669	
   670		devid = PCI_DEVID(bus->number, pdev->devfn);
   671		pcisegment = pci_domain_nr(bus);
   672		rlookupentry = lookup_rlooptable(pcisegment);
   673		if (rlookupentry == NULL) {
   674			pr_info("%s find segment %d rlookupentry failed\n", __func__,
   675					pcisegment);
   676			return iommu;
   677		}
   678		iommu = rlookupentry->rlookup_table[devid];
   679		if (iommu && (!iommu->confbase))
   680			iommu = NULL;
   681		return iommu;
   682	}
   683	
 > 684	struct iommu_device *iommu_init_device(struct device *dev)
   685	{
   686		struct la_iommu_dev_data *dev_data;
   687		struct pci_dev	*pdev = to_pci_dev(dev);
   688		struct pci_bus	*bus = pdev->bus;
   689		unsigned short devid;
   690		struct loongarch_iommu *iommu = NULL;
   691		struct iommu_device *iommu_dev = ERR_PTR(-ENODEV);
   692	
   693		if (!dev_is_pci(dev))
   694			return iommu_dev;
   695	
   696		if (dev->archdata.iommu != NULL || bus == NULL) {
   697			pr_info("LA-IOMMU: bdf:0x%x has added\n", pdev->devfn);
   698			return iommu_dev;
   699		}
   700		iommu = find_iommu_by_dev(pdev);
   701		if (iommu == NULL) {
   702			pci_info(pdev, "%s find iommu failed by dev\n", __func__);
   703			return iommu_dev;
   704		}
   705		dev_data = kzalloc(sizeof(*dev_data), GFP_KERNEL);
   706		if (!dev_data)
   707			return iommu_dev;
   708		devid = PCI_DEVID(bus->number, pdev->devfn);
   709		dev_data->bdf = devid;
   710	
   711		pci_info(pdev, "%s bdf %#x iommu dev id %#x\n", __func__, dev_data->bdf, iommu->devid);
   712		/* The initial state is 0, and 1 is added only when attach dev */
   713		dev_data->count = 0;
   714		dev_data->iommu = iommu;
   715		dev_data->dev = dev;
   716		dev->archdata.iommu = dev_data;
   717		iommu_dev = &iommu->iommu_dev;
   718		return iommu_dev;
   719	}
   720	
 > 721	struct iommu_device *la_iommu_probe_device(struct device *dev)
   722	{
   723		return iommu_init_device(dev);
   724	}
   725	
   726	static struct iommu_group *la_iommu_device_group(struct device *dev)
   727	{
   728		struct iommu_group *group;
   729	
   730		/*
   731		 * We don't support devices sharing stream IDs other than PCI RID
   732		 * aliases, since the necessary ID-to-device lookup becomes rather
   733		 * impractical given a potential sparse 32-bit stream ID space.
   734		 */
   735		if (dev_is_pci(dev))
   736			group = pci_device_group(dev);
   737		else
   738			group = generic_device_group(dev);
   739		return group;
   740	}
   741	
   742	static void la_iommu_remove_device(struct device *dev)
   743	{
   744		struct la_iommu_dev_data *dev_data;
   745	
   746		iommu_group_remove_device(dev);
   747		dev_data = dev->archdata.iommu;
   748		dev->archdata.iommu = NULL;
   749		kfree(dev_data);
   750	}
   751	
 > 752	struct iommu_info *get_iommu_info_from_dom(struct dom_info *priv, struct loongarch_iommu *iommu)
   753	{
   754		struct iommu_info *info;
   755	
   756		spin_lock(&priv->lock);
   757		list_for_each_entry(info, &priv->iommu_devlist, list) {
   758			if (info->iommu == iommu) {
   759				spin_unlock(&priv->lock);
   760				return info;
   761			}
   762		}
   763		spin_unlock(&priv->lock);
   764		return NULL;
   765	}
   766	
 > 767	struct iommu_info *domain_attach_iommu(struct dom_info *priv, struct loongarch_iommu *iommu)
   768	{
   769		u32 dir_ctrl;
   770		struct iommu_info *info;
   771		unsigned long phys;
   772	
   773		info = get_iommu_info_from_dom(priv, iommu);
   774		if (info)
   775			return info;
   776	
   777		info = kzalloc(sizeof(struct iommu_info), GFP_KERNEL_ACCOUNT);
   778		if (!info)
   779			return NULL;
   780	
   781		INIT_LIST_HEAD(&info->dev_list);
   782		info->iommu = iommu;
   783		info->id = domain_id_alloc(iommu);
   784		if (info->id == -1) {
   785			pr_info("%s alloc id for domain failed\n", __func__);
   786			kfree(info);
   787			return NULL;
   788		}
   789	
   790		phys = virt_to_phys(priv->pgd);
   791		dir_ctrl = (IOMMU_LEVEL_STRIDE << 26) | (IOMMU_LEVEL_SHIFT(2) << 20);
   792		dir_ctrl |= (IOMMU_LEVEL_STRIDE <<  16) | (IOMMU_LEVEL_SHIFT(1) << 10);
   793		dir_ctrl |= (IOMMU_LEVEL_STRIDE << 6) | IOMMU_LEVEL_SHIFT(0);
   794		iommu_write_regl(iommu, LA_IOMMU_DIR_CTRL(info->id), dir_ctrl);
   795		iommu_write_regl(iommu, LA_IOMMU_PGD_HI(info->id), phys >> 32);
   796		iommu_write_regl(iommu, LA_IOMMU_PGD_LO(info->id), phys & UINT_MAX);
   797	
   798		spin_lock(&priv->lock);
   799		list_add(&info->list, &priv->iommu_devlist);
   800		spin_unlock(&priv->lock);
   801		add_domain_to_list(iommu, priv);
   802		return info;
   803	}
   804	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

                 reply	other threads:[~2024-12-14  5:40 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202412141302.zMMD8AS7-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=kernel@openeuler.org \
    --cc=lixianglai@loongson.cn \
    --cc=oe-kbuild-all@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.