All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: cros-kernel-buildreports@googlegroups.com
Cc: oe-kbuild-all@lists.linux.dev
Subject: [android-common:android16-6.12-desktop 44/44] drivers/iommu/intel/pasid.c:762:18: error: 'struct pkvm_sm_context_param' has no member named 'pasid_dir_gpa'
Date: Wed, 25 Mar 2026 14:56:03 +0800	[thread overview]
Message-ID: <202603251408.0tpAwQTu-lkp@intel.com> (raw)

Hi Aashish,

FYI, the error/warning still remains.

tree:   https://android.googlesource.com/kernel/common android16-6.12-desktop
head:   bb47b925bb600e95cd776d4ab19d2b6c2ae342c7
commit: 4c2bcf42320837fc0b98fbce77c764de4d905644 [44/44] ANDROID: iommu/vt-d: Paravirtualize scalable mode context updates
config: x86_64-defconfig (https://download.01.org/0day-ci/archive/20260325/202603251408.0tpAwQTu-lkp@intel.com/config)
compiler: gcc-14 (Debian 14.2.0-19) 14.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260325/202603251408.0tpAwQTu-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/202603251408.0tpAwQTu-lkp@intel.com/

All error/warnings (new ones prefixed by >>):

         |                    ^
   drivers/iommu/intel/iommu_pkvm.h:31:16: note: in expansion of macro 'pkvm_iommu_hypercall'
      31 |         return pkvm_iommu_hypercall(iommu_clear_ce, clear_translation_param, param);
         |                ^~~~~~~~~~~~~~~~~~~~
   drivers/iommu/intel/iommu_pkvm.h:18:28: error: invalid use of undefined type 'struct pkvm_clear_translation_param'
      18 |                 *(param) = *p;                                                  \
         |                            ^
   drivers/iommu/intel/iommu_pkvm.h:31:16: note: in expansion of macro 'pkvm_iommu_hypercall'
      31 |         return pkvm_iommu_hypercall(iommu_clear_ce, clear_translation_param, param);
         |                ^~~~~~~~~~~~~~~~~~~~
   drivers/iommu/intel/iommu_pkvm.h:18:26: error: invalid use of undefined type 'struct pkvm_clear_translation_param'
      18 |                 *(param) = *p;                                                  \
         |                          ^
   drivers/iommu/intel/iommu_pkvm.h:31:16: note: in expansion of macro 'pkvm_iommu_hypercall'
      31 |         return pkvm_iommu_hypercall(iommu_clear_ce, clear_translation_param, param);
         |                ^~~~~~~~~~~~~~~~~~~~
   arch/x86/include/asm/kvm_pkvm.h:314:38: error: invalid application of 'sizeof' to incomplete type 'struct pkvm_clear_translation_param'
     314 |                 memset(ptr, 0, sizeof(*ptr));   \
         |                                      ^
   drivers/iommu/intel/iommu_pkvm.h:19:17: note: in expansion of macro 'put_this_pv_param'
      19 |                 put_this_pv_param(p, f);                                        \
         |                 ^~~~~~~~~~~~~~~~~
   drivers/iommu/intel/iommu_pkvm.h:31:16: note: in expansion of macro 'pkvm_iommu_hypercall'
      31 |         return pkvm_iommu_hypercall(iommu_clear_ce, clear_translation_param, param);
         |                ^~~~~~~~~~~~~~~~~~~~
   drivers/iommu/intel/iommu_pkvm.h: In function 'pkvm_hc_iommu_set_lm_ce':
   drivers/iommu/intel/iommu_pkvm.h:16:22: error: invalid use of undefined type 'struct pkvm_lm_context_param'
      16 |                 *p = *(param);                                                  \
         |                      ^
   drivers/iommu/intel/iommu_pkvm.h:36:16: note: in expansion of macro 'pkvm_iommu_hypercall'
      36 |         return pkvm_iommu_hypercall(iommu_set_lm_ce, lm_context_param, param);
         |                ^~~~~~~~~~~~~~~~~~~~
   drivers/iommu/intel/iommu_pkvm.h:16:20: error: invalid use of undefined type 'struct pkvm_lm_context_param'
      16 |                 *p = *(param);                                                  \
         |                    ^
   drivers/iommu/intel/iommu_pkvm.h:36:16: note: in expansion of macro 'pkvm_iommu_hypercall'
      36 |         return pkvm_iommu_hypercall(iommu_set_lm_ce, lm_context_param, param);
         |                ^~~~~~~~~~~~~~~~~~~~
   drivers/iommu/intel/iommu_pkvm.h:18:28: error: invalid use of undefined type 'struct pkvm_lm_context_param'
      18 |                 *(param) = *p;                                                  \
         |                            ^
   drivers/iommu/intel/iommu_pkvm.h:36:16: note: in expansion of macro 'pkvm_iommu_hypercall'
      36 |         return pkvm_iommu_hypercall(iommu_set_lm_ce, lm_context_param, param);
         |                ^~~~~~~~~~~~~~~~~~~~
   drivers/iommu/intel/iommu_pkvm.h:18:26: error: invalid use of undefined type 'struct pkvm_lm_context_param'
      18 |                 *(param) = *p;                                                  \
         |                          ^
   drivers/iommu/intel/iommu_pkvm.h:36:16: note: in expansion of macro 'pkvm_iommu_hypercall'
      36 |         return pkvm_iommu_hypercall(iommu_set_lm_ce, lm_context_param, param);
         |                ^~~~~~~~~~~~~~~~~~~~
   arch/x86/include/asm/kvm_pkvm.h:314:38: error: invalid application of 'sizeof' to incomplete type 'struct pkvm_lm_context_param'
     314 |                 memset(ptr, 0, sizeof(*ptr));   \
         |                                      ^
   drivers/iommu/intel/iommu_pkvm.h:19:17: note: in expansion of macro 'put_this_pv_param'
      19 |                 put_this_pv_param(p, f);                                        \
         |                 ^~~~~~~~~~~~~~~~~
   drivers/iommu/intel/iommu_pkvm.h:36:16: note: in expansion of macro 'pkvm_iommu_hypercall'
      36 |         return pkvm_iommu_hypercall(iommu_set_lm_ce, lm_context_param, param);
         |                ^~~~~~~~~~~~~~~~~~~~
   drivers/iommu/intel/iommu_pkvm.h: In function 'pkvm_hc_iommu_set_sm_ce':
   drivers/iommu/intel/iommu_pkvm.h:16:22: error: invalid use of undefined type 'struct pkvm_sm_context_param'
      16 |                 *p = *(param);                                                  \
         |                      ^
   drivers/iommu/intel/iommu_pkvm.h:41:16: note: in expansion of macro 'pkvm_iommu_hypercall'
      41 |         return pkvm_iommu_hypercall(iommu_set_sm_ce, sm_context_param, param);
         |                ^~~~~~~~~~~~~~~~~~~~
   drivers/iommu/intel/iommu_pkvm.h:16:20: error: invalid use of undefined type 'struct pkvm_sm_context_param'
      16 |                 *p = *(param);                                                  \
         |                    ^
   drivers/iommu/intel/iommu_pkvm.h:41:16: note: in expansion of macro 'pkvm_iommu_hypercall'
      41 |         return pkvm_iommu_hypercall(iommu_set_sm_ce, sm_context_param, param);
         |                ^~~~~~~~~~~~~~~~~~~~
   drivers/iommu/intel/iommu_pkvm.h:18:28: error: invalid use of undefined type 'struct pkvm_sm_context_param'
      18 |                 *(param) = *p;                                                  \
         |                            ^
   drivers/iommu/intel/iommu_pkvm.h:41:16: note: in expansion of macro 'pkvm_iommu_hypercall'
      41 |         return pkvm_iommu_hypercall(iommu_set_sm_ce, sm_context_param, param);
         |                ^~~~~~~~~~~~~~~~~~~~
   drivers/iommu/intel/iommu_pkvm.h:18:26: error: invalid use of undefined type 'struct pkvm_sm_context_param'
      18 |                 *(param) = *p;                                                  \
         |                          ^
   drivers/iommu/intel/iommu_pkvm.h:41:16: note: in expansion of macro 'pkvm_iommu_hypercall'
      41 |         return pkvm_iommu_hypercall(iommu_set_sm_ce, sm_context_param, param);
         |                ^~~~~~~~~~~~~~~~~~~~
   arch/x86/include/asm/kvm_pkvm.h:314:38: error: invalid application of 'sizeof' to incomplete type 'struct pkvm_sm_context_param'
     314 |                 memset(ptr, 0, sizeof(*ptr));   \
         |                                      ^
   drivers/iommu/intel/iommu_pkvm.h:19:17: note: in expansion of macro 'put_this_pv_param'
      19 |                 put_this_pv_param(p, f);                                        \
         |                 ^~~~~~~~~~~~~~~~~
   drivers/iommu/intel/iommu_pkvm.h:41:16: note: in expansion of macro 'pkvm_iommu_hypercall'
      41 |         return pkvm_iommu_hypercall(iommu_set_sm_ce, sm_context_param, param);
         |                ^~~~~~~~~~~~~~~~~~~~
   drivers/iommu/intel/pasid.c: In function 'pv_pasid_table_teardown':
   drivers/iommu/intel/pasid.c:647:16: error: variable 'param' has initializer but incomplete type
     647 |         struct pkvm_clear_translation_param param = {
         |                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/iommu/intel/pasid.c:648:18: error: 'struct pkvm_clear_translation_param' has no member named 'phys'
     648 |                 .phys = info->iommu->reg_phys,
         |                  ^~~~
>> drivers/iommu/intel/pasid.c:648:25: warning: excess elements in struct initializer
     648 |                 .phys = info->iommu->reg_phys,
         |                         ^~~~
   drivers/iommu/intel/pasid.c:648:25: note: (near initialization for 'param')
   drivers/iommu/intel/pasid.c:649:18: error: 'struct pkvm_clear_translation_param' has no member named 'bdf'
     649 |                 .bdf = PCI_DEVID(bus, devfn),
         |                  ^~~
   In file included from drivers/iommu/intel/pasid.c:17:
   include/linux/pci.h:72:33: warning: excess elements in struct initializer
      72 | #define PCI_DEVID(bus, devfn)   ((((u16)(bus)) << 8) | (devfn))
         |                                 ^
   drivers/iommu/intel/pasid.c:649:24: note: in expansion of macro 'PCI_DEVID'
     649 |                 .bdf = PCI_DEVID(bus, devfn),
         |                        ^~~~~~~~~
   include/linux/pci.h:72:33: note: (near initialization for 'param')
      72 | #define PCI_DEVID(bus, devfn)   ((((u16)(bus)) << 8) | (devfn))
         |                                 ^
   drivers/iommu/intel/pasid.c:649:24: note: in expansion of macro 'PCI_DEVID'
     649 |                 .bdf = PCI_DEVID(bus, devfn),
         |                        ^~~~~~~~~
   drivers/iommu/intel/pasid.c:650:18: error: 'struct pkvm_clear_translation_param' has no member named 'ats_qdep'
     650 |                 .ats_qdep = info->ats_qdep,
         |                  ^~~~~~~~
   drivers/iommu/intel/pasid.c:650:29: warning: excess elements in struct initializer
     650 |                 .ats_qdep = info->ats_qdep,
         |                             ^~~~
   drivers/iommu/intel/pasid.c:650:29: note: (near initialization for 'param')
   drivers/iommu/intel/pasid.c:647:45: error: storage size of 'param' isn't known
     647 |         struct pkvm_clear_translation_param param = {
         |                                             ^~~~~
>> drivers/iommu/intel/pasid.c:647:45: warning: unused variable 'param' [-Wunused-variable]
   drivers/iommu/intel/pasid.c: In function 'pv_device_pasid_table_setup':
   drivers/iommu/intel/pasid.c:759:16: error: variable 'param' has initializer but incomplete type
     759 |         struct pkvm_sm_context_param param = {
         |                ^~~~~~~~~~~~~~~~~~~~~
   drivers/iommu/intel/pasid.c:760:18: error: 'struct pkvm_sm_context_param' has no member named 'phys'
     760 |                 .phys = iommu->reg_phys,
         |                  ^~~~
   drivers/iommu/intel/pasid.c:760:25: warning: excess elements in struct initializer
     760 |                 .phys = iommu->reg_phys,
         |                         ^~~~~
   drivers/iommu/intel/pasid.c:760:25: note: (near initialization for 'param')
   drivers/iommu/intel/pasid.c:761:18: error: 'struct pkvm_sm_context_param' has no member named 'bdf'
     761 |                 .bdf = PCI_DEVID(info->bus, info->devfn),
         |                  ^~~
   include/linux/pci.h:72:33: warning: excess elements in struct initializer
      72 | #define PCI_DEVID(bus, devfn)   ((((u16)(bus)) << 8) | (devfn))
         |                                 ^
   drivers/iommu/intel/pasid.c:761:24: note: in expansion of macro 'PCI_DEVID'
     761 |                 .bdf = PCI_DEVID(info->bus, info->devfn),
         |                        ^~~~~~~~~
   include/linux/pci.h:72:33: note: (near initialization for 'param')
      72 | #define PCI_DEVID(bus, devfn)   ((((u16)(bus)) << 8) | (devfn))
         |                                 ^
   drivers/iommu/intel/pasid.c:761:24: note: in expansion of macro 'PCI_DEVID'
     761 |                 .bdf = PCI_DEVID(info->bus, info->devfn),
         |                        ^~~~~~~~~
>> drivers/iommu/intel/pasid.c:762:18: error: 'struct pkvm_sm_context_param' has no member named 'pasid_dir_gpa'
     762 |                 .pasid_dir_gpa = virt_to_phys(info->pasid_table->table),
         |                  ^~~~~~~~~~~~~
   In file included from include/linux/io.h:14,
                    from include/acpi/acpi_io.h:5,
                    from include/linux/acpi.h:39,
                    from include/linux/dmar.h:12,
                    from drivers/iommu/intel/pasid.c:14:
   arch/x86/include/asm/io.h:155:22: warning: excess elements in struct initializer
     155 | #define virt_to_phys virt_to_phys
         |                      ^~~~~~~~~~~~
   drivers/iommu/intel/pasid.c:762:34: note: in expansion of macro 'virt_to_phys'
     762 |                 .pasid_dir_gpa = virt_to_phys(info->pasid_table->table),
         |                                  ^~~~~~~~~~~~
   arch/x86/include/asm/io.h:155:22: note: (near initialization for 'param')
     155 | #define virt_to_phys virt_to_phys
         |                      ^~~~~~~~~~~~
   drivers/iommu/intel/pasid.c:762:34: note: in expansion of macro 'virt_to_phys'
     762 |                 .pasid_dir_gpa = virt_to_phys(info->pasid_table->table),
         |                                  ^~~~~~~~~~~~
   drivers/iommu/intel/pasid.c:763:18: error: 'struct pkvm_sm_context_param' has no member named 'ats_supported'
     763 |                 .ats_supported = info->ats_supported,
         |                  ^~~~~~~~~~~~~
   drivers/iommu/intel/pasid.c:763:34: warning: excess elements in struct initializer
     763 |                 .ats_supported = info->ats_supported,
         |                                  ^~~~
   drivers/iommu/intel/pasid.c:763:34: note: (near initialization for 'param')
   drivers/iommu/intel/pasid.c:764:18: error: 'struct pkvm_sm_context_param' has no member named 'max_pasid'
     764 |                 .max_pasid = info->pasid_table->max_pasid,
         |                  ^~~~~~~~~
   drivers/iommu/intel/pasid.c:764:30: warning: excess elements in struct initializer
     764 |                 .max_pasid = info->pasid_table->max_pasid,
         |                              ^~~~
   drivers/iommu/intel/pasid.c:764:30: note: (near initialization for 'param')
   drivers/iommu/intel/pasid.c:759:38: error: storage size of 'param' isn't known
     759 |         struct pkvm_sm_context_param param = {
         |                                      ^~~~~
   drivers/iommu/intel/pasid.c:759:38: warning: unused variable 'param' [-Wunused-variable]


vim +762 drivers/iommu/intel/pasid.c

   644	
   645	static void pv_pasid_table_teardown(struct device_domain_info *info, u8 bus, u8 devfn)
   646	{
 > 647		struct pkvm_clear_translation_param param = {
 > 648			.phys = info->iommu->reg_phys,
   649			.bdf = PCI_DEVID(bus, devfn),
 > 650			.ats_qdep = info->ats_qdep,
   651		};
   652		int ret = pkvm_hc_iommu_clear_ce(&param);
   653	
   654		if (ret)
   655			pr_warn("%s: pkvm failed to clear sm context entry for device[%x] (err=%d)\n",
   656				__func__, param.bdf, ret);
   657	}
   658	
   659	/*
   660	 * Interfaces to setup or teardown a pasid table to the scalable-mode
   661	 * context table entry:
   662	 */
   663	
   664	static void device_pasid_table_teardown(struct device *dev, u8 bus, u8 devfn)
   665	{
   666		struct device_domain_info *info = dev_iommu_priv_get(dev);
   667		struct intel_iommu *iommu = info->iommu;
   668		struct context_entry *context;
   669		u16 did;
   670	
   671		if (pkvm_pviommu_enabled()) {
   672			pv_pasid_table_teardown(info, bus, devfn);
   673			return;
   674		}
   675	
   676		spin_lock(&iommu->lock);
   677		context = iommu_context_addr(iommu, bus, devfn, false);
   678		if (!context) {
   679			spin_unlock(&iommu->lock);
   680			return;
   681		}
   682	
   683		did = context_domain_id(context);
   684		context_clear_entry(context);
   685		__iommu_flush_cache(iommu, context, sizeof(*context));
   686		spin_unlock(&iommu->lock);
   687		intel_context_flush_present(info, context, did, false);
   688	}
   689	
   690	static int pci_pasid_table_teardown(struct pci_dev *pdev, u16 alias, void *data)
   691	{
   692		struct device *dev = data;
   693	
   694		if (dev == &pdev->dev)
   695			device_pasid_table_teardown(dev, PCI_BUS_NUM(alias), alias & 0xff);
   696	
   697		return 0;
   698	}
   699	
   700	void intel_pasid_teardown_sm_context(struct device *dev)
   701	{
   702		struct device_domain_info *info = dev_iommu_priv_get(dev);
   703	
   704		if (!dev_is_pci(dev)) {
   705			device_pasid_table_teardown(dev, info->bus, info->devfn);
   706			return;
   707		}
   708	
   709		pci_for_each_dma_alias(to_pci_dev(dev), pci_pasid_table_teardown, dev);
   710	}
   711	
   712	/*
   713	 * Get the PASID directory size for scalable mode context entry.
   714	 * Value of X in the PDTS field of a scalable mode context entry
   715	 * indicates PASID directory with 2^(X + 7) entries.
   716	 */
   717	static unsigned long context_get_sm_pds(struct pasid_table *table)
   718	{
   719		unsigned long pds, max_pde;
   720	
   721		max_pde = table->max_pasid >> PASID_PDE_SHIFT;
   722		pds = find_first_bit(&max_pde, MAX_NR_PASID_BITS);
   723		if (pds < 7)
   724			return 0;
   725	
   726		return pds - 7;
   727	}
   728	
   729	static int context_entry_set_pasid_table(struct context_entry *context,
   730						 struct device *dev)
   731	{
   732		struct device_domain_info *info = dev_iommu_priv_get(dev);
   733		struct pasid_table *table = info->pasid_table;
   734		struct intel_iommu *iommu = info->iommu;
   735		unsigned long pds;
   736	
   737		context_clear_entry(context);
   738	
   739		pds = context_get_sm_pds(table);
   740		context->lo = (u64)virt_to_phys(table->table) | context_pdts(pds);
   741		context_set_sm_rid2pasid(context, IOMMU_NO_PASID);
   742	
   743		if (info->ats_supported)
   744			context_set_sm_dte(context);
   745		if (info->pasid_supported)
   746			context_set_pasid(context);
   747	
   748		context_set_fault_enable(context);
   749		context_set_present(context);
   750		__iommu_flush_cache(iommu, context, sizeof(*context));
   751	
   752		return 0;
   753	}
   754	
   755	static int pv_device_pasid_table_setup(struct device_domain_info *info)
   756	{
   757		struct intel_iommu *iommu = info->iommu;
   758		struct context_entry *context;
   759		struct pkvm_sm_context_param param = {
   760			.phys = iommu->reg_phys,
   761			.bdf = PCI_DEVID(info->bus, info->devfn),
 > 762			.pasid_dir_gpa = virt_to_phys(info->pasid_table->table),
   763			.ats_supported = info->ats_supported,
   764			.max_pasid = info->pasid_table->max_pasid,
   765		};
   766		int ret;
   767	
   768		spin_lock(&iommu->lock);
   769		ret = pkvm_hc_iommu_set_sm_ce(&param);
   770		if (ret == -ENOMEM) {
   771			context = iommu_alloc_page_node(iommu->node, GFP_ATOMIC);
   772			if (!context) {
   773				spin_unlock(&iommu->lock);
   774				pr_err("%s: failed to allocate context page for iommu: %d\n",
   775				       __func__, iommu->seq_id);
   776				return -ENOMEM;
   777			}
   778	
   779			param.context_gpa = virt_to_phys(context);
   780			ret = pkvm_hc_iommu_set_sm_ce(&param);
   781	
   782			/* Free the page if pkvm did not use it. */
   783			if (param.context_gpa)
   784				iommu_free_page(context);
   785		}
   786		spin_unlock(&iommu->lock);
   787	
   788		return ret;
   789	}
   790	

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

                 reply	other threads:[~2026-03-25  6:57 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=202603251408.0tpAwQTu-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=cros-kernel-buildreports@googlegroups.com \
    --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.