diff mbox series

[v2,3/9] ACPI: APEI: EINJ: Fix kernel test robot sparse warning

Message ID 20241205211854.43215-4-zaidal@os.amperecomputing.com
State New
Headers show
Series Enable EINJv2 support | expand

Commit Message

Zaid Alali Dec. 5, 2024, 9:18 p.m. UTC
This patch fixes the kernel test robot warning reported here:
https://lore.kernel.org/all/202410241620.oApALow5-lkp@intel.com/

Signed-off-by: Zaid Alali <zaidal@os.amperecomputing.com>
---
 drivers/acpi/apei/einj-core.c | 41 +++++++++++++++++++++--------------
 1 file changed, 25 insertions(+), 16 deletions(-)

Comments

kernel test robot Dec. 6, 2024, 3:21 a.m. UTC | #1
Hi Zaid,

kernel test robot noticed the following build warnings:

[auto build test WARNING on rafael-pm/linux-next]
[also build test WARNING on rafael-pm/bleeding-edge linus/master v6.13-rc1 next-20241205]
[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#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Zaid-Alali/ACPICA-Update-values-to-hex-to-follow-ACPI-specs/20241206-052420
base:   https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git linux-next
patch link:    https://lore.kernel.org/r/20241205211854.43215-4-zaidal%40os.amperecomputing.com
patch subject: [PATCH v2 3/9] ACPI: APEI: EINJ: Fix kernel test robot sparse warning
config: i386-buildonly-randconfig-005-20241206 (https://download.01.org/0day-ci/archive/20241206/202412061152.Zar8cGxV-lkp@intel.com/config)
compiler: clang version 19.1.3 (https://github.com/llvm/llvm-project ab51eccf88f5321e7c60591c5546b254b6afab99)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20241206/202412061152.Zar8cGxV-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/202412061152.Zar8cGxV-lkp@intel.com/

All warnings (new ones prefixed by >>):

   In file included from drivers/acpi/apei/einj-core.c:23:
   In file included from include/linux/mm.h:2223:
   include/linux/vmstat.h:518:36: warning: arithmetic between different enumeration types ('enum node_stat_item' and 'enum lru_list') [-Wenum-enum-conversion]
     518 |         return node_stat_name(NR_LRU_BASE + lru) + 3; // skip "nr_"
         |                               ~~~~~~~~~~~ ^ ~~~
>> drivers/acpi/apei/einj-core.c:338:6: warning: variable 'p' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized]
     338 |         if (!r) {
         |             ^~
   drivers/acpi/apei/einj-core.c:436:6: note: uninitialized use occurs here
     436 |         if (p)
         |             ^
   drivers/acpi/apei/einj-core.c:338:2: note: remove the 'if' if its condition is always false
     338 |         if (!r) {
         |         ^~~~~~~~~
     339 |                 pr_err("Can not request [mem %#010llx-%#010llx] for Trigger table\n",
         |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     340 |                        (unsigned long long)trigger_paddr,
         |                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     341 |                        (unsigned long long)trigger_paddr +
         |                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     342 |                             sizeof(*trigger_tab) - 1);
         |                             ~~~~~~~~~~~~~~~~~~~~~~~~~~
     343 |                 goto out;
         |                 ~~~~~~~~~
     344 |         }
         |         ~
   drivers/acpi/apei/einj-core.c:334:17: note: initialize the variable 'p' to silence this warning
     334 |         void __iomem *p;
         |                        ^
         |                         = NULL
   2 warnings generated.


vim +338 drivers/acpi/apei/einj-core.c

e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  301  
b4e008dc53a31cb drivers/acpi/apei/einj.c      Xiao, Hui        2011-12-08  302  static struct acpi_generic_address *einj_get_trigger_parameter_region(
b4e008dc53a31cb drivers/acpi/apei/einj.c      Xiao, Hui        2011-12-08  303  	struct acpi_einj_trigger *trigger_tab, u64 param1, u64 param2)
b4e008dc53a31cb drivers/acpi/apei/einj.c      Xiao, Hui        2011-12-08  304  {
b4e008dc53a31cb drivers/acpi/apei/einj.c      Xiao, Hui        2011-12-08  305  	int i;
b4e008dc53a31cb drivers/acpi/apei/einj.c      Xiao, Hui        2011-12-08  306  	struct acpi_whea_header *entry;
b4e008dc53a31cb drivers/acpi/apei/einj.c      Xiao, Hui        2011-12-08  307  
b4e008dc53a31cb drivers/acpi/apei/einj.c      Xiao, Hui        2011-12-08  308  	entry = (struct acpi_whea_header *)
b4e008dc53a31cb drivers/acpi/apei/einj.c      Xiao, Hui        2011-12-08  309  		((char *)trigger_tab + sizeof(struct acpi_einj_trigger));
b4e008dc53a31cb drivers/acpi/apei/einj.c      Xiao, Hui        2011-12-08  310  	for (i = 0; i < trigger_tab->entry_count; i++) {
b4e008dc53a31cb drivers/acpi/apei/einj.c      Xiao, Hui        2011-12-08  311  		if (entry->action == ACPI_EINJ_TRIGGER_ERROR &&
1d5d820b8fe83b5 drivers/acpi/apei/einj.c      Yazen Ghannam    2017-08-28  312  		entry->instruction <= ACPI_EINJ_WRITE_REGISTER_VALUE &&
b4e008dc53a31cb drivers/acpi/apei/einj.c      Xiao, Hui        2011-12-08  313  		entry->register_region.space_id ==
b4e008dc53a31cb drivers/acpi/apei/einj.c      Xiao, Hui        2011-12-08  314  			ACPI_ADR_SPACE_SYSTEM_MEMORY &&
b4e008dc53a31cb drivers/acpi/apei/einj.c      Xiao, Hui        2011-12-08  315  		(entry->register_region.address & param2) == (param1 & param2))
b4e008dc53a31cb drivers/acpi/apei/einj.c      Xiao, Hui        2011-12-08  316  			return &entry->register_region;
b4e008dc53a31cb drivers/acpi/apei/einj.c      Xiao, Hui        2011-12-08  317  		entry++;
b4e008dc53a31cb drivers/acpi/apei/einj.c      Xiao, Hui        2011-12-08  318  	}
b4e008dc53a31cb drivers/acpi/apei/einj.c      Xiao, Hui        2011-12-08  319  
b4e008dc53a31cb drivers/acpi/apei/einj.c      Xiao, Hui        2011-12-08  320  	return NULL;
b4e008dc53a31cb drivers/acpi/apei/einj.c      Xiao, Hui        2011-12-08  321  }
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  322  /* Execute instructions in trigger error action table */
fdea163d8c17ba0 drivers/acpi/apei/einj.c      Huang Ying       2011-12-08  323  static int __einj_error_trigger(u64 trigger_paddr, u32 type,
fdea163d8c17ba0 drivers/acpi/apei/einj.c      Huang Ying       2011-12-08  324  				u64 param1, u64 param2)
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  325  {
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  326  	struct acpi_einj_trigger *trigger_tab = NULL;
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  327  	struct apei_exec_context trigger_ctx;
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  328  	struct apei_resources trigger_resources;
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  329  	struct acpi_whea_header *trigger_entry;
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  330  	struct resource *r;
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  331  	u32 table_size;
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  332  	int rc = -EIO;
b4e008dc53a31cb drivers/acpi/apei/einj.c      Xiao, Hui        2011-12-08  333  	struct acpi_generic_address *trigger_param_region = NULL;
37dbc95939d19c3 drivers/acpi/apei/einj-core.c Zaid Alali       2024-12-05  334  	void __iomem *p;
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  335  
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  336  	r = request_mem_region(trigger_paddr, sizeof(*trigger_tab),
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  337  			       "APEI EINJ Trigger Table");
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18 @338  	if (!r) {
b2f740baa421525 drivers/acpi/apei/einj.c      Borislav Petkov  2016-05-23  339  		pr_err("Can not request [mem %#010llx-%#010llx] for Trigger table\n",
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  340  		       (unsigned long long)trigger_paddr,
46b91e379f7180b drivers/acpi/apei/einj.c      Bjorn Helgaas    2011-12-08  341  		       (unsigned long long)trigger_paddr +
46b91e379f7180b drivers/acpi/apei/einj.c      Bjorn Helgaas    2011-12-08  342  			    sizeof(*trigger_tab) - 1);
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  343  		goto out;
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  344  	}
37dbc95939d19c3 drivers/acpi/apei/einj-core.c Zaid Alali       2024-12-05  345  	p = ioremap_cache(trigger_paddr, sizeof(*trigger_tab));
37dbc95939d19c3 drivers/acpi/apei/einj-core.c Zaid Alali       2024-12-05  346  	if (!p) {
b2f740baa421525 drivers/acpi/apei/einj.c      Borislav Petkov  2016-05-23  347  		pr_err("Failed to map trigger table!\n");
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  348  		goto out_rel_header;
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  349  	}
37dbc95939d19c3 drivers/acpi/apei/einj-core.c Zaid Alali       2024-12-05  350  	trigger_tab = __io_virt(p);
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  351  	rc = einj_check_trigger_header(trigger_tab);
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  352  	if (rc) {
933ca4e323de777 drivers/acpi/apei/einj.c      Kefeng Wang      2019-10-18  353  		pr_warn(FW_BUG "Invalid trigger error action table.\n");
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  354  		goto out_rel_header;
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  355  	}
4c40aed869a200a drivers/acpi/apei/einj.c      Niklas Söderlund 2012-01-09  356  
4c40aed869a200a drivers/acpi/apei/einj.c      Niklas Söderlund 2012-01-09  357  	/* No action structures in the TRIGGER_ERROR table, nothing to do */
4c40aed869a200a drivers/acpi/apei/einj.c      Niklas Söderlund 2012-01-09  358  	if (!trigger_tab->entry_count)
4c40aed869a200a drivers/acpi/apei/einj.c      Niklas Söderlund 2012-01-09  359  		goto out_rel_header;
4c40aed869a200a drivers/acpi/apei/einj.c      Niklas Söderlund 2012-01-09  360  
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  361  	rc = -EIO;
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  362  	table_size = trigger_tab->table_size;
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  363  	r = request_mem_region(trigger_paddr + sizeof(*trigger_tab),
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  364  			       table_size - sizeof(*trigger_tab),
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  365  			       "APEI EINJ Trigger Table");
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  366  	if (!r) {
b2f740baa421525 drivers/acpi/apei/einj.c      Borislav Petkov  2016-05-23  367  		pr_err("Can not request [mem %#010llx-%#010llx] for Trigger Table Entry\n",
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  368  		       (unsigned long long)trigger_paddr + sizeof(*trigger_tab),
46b91e379f7180b drivers/acpi/apei/einj.c      Bjorn Helgaas    2011-12-08  369  		       (unsigned long long)trigger_paddr + table_size - 1);
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  370  		goto out_rel_header;
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  371  	}
37dbc95939d19c3 drivers/acpi/apei/einj-core.c Zaid Alali       2024-12-05  372  	iounmap(p);
37dbc95939d19c3 drivers/acpi/apei/einj-core.c Zaid Alali       2024-12-05  373  	p = ioremap_cache(trigger_paddr, table_size);
37dbc95939d19c3 drivers/acpi/apei/einj-core.c Zaid Alali       2024-12-05  374  	if (!p) {
b2f740baa421525 drivers/acpi/apei/einj.c      Borislav Petkov  2016-05-23  375  		pr_err("Failed to map trigger table!\n");
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  376  		goto out_rel_entry;
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  377  	}
37dbc95939d19c3 drivers/acpi/apei/einj-core.c Zaid Alali       2024-12-05  378  	trigger_tab = __io_virt(p);
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  379  	trigger_entry = (struct acpi_whea_header *)
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  380  		((char *)trigger_tab + sizeof(struct acpi_einj_trigger));
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  381  	apei_resources_init(&trigger_resources);
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  382  	apei_exec_ctx_init(&trigger_ctx, einj_ins_type,
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  383  			   ARRAY_SIZE(einj_ins_type),
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  384  			   trigger_entry, trigger_tab->entry_count);
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  385  	rc = apei_exec_collect_resources(&trigger_ctx, &trigger_resources);
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  386  	if (rc)
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  387  		goto out_fini;
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  388  	rc = apei_resources_sub(&trigger_resources, &einj_resources);
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  389  	if (rc)
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  390  		goto out_fini;
fdea163d8c17ba0 drivers/acpi/apei/einj.c      Huang Ying       2011-12-08  391  	/*
fdea163d8c17ba0 drivers/acpi/apei/einj.c      Huang Ying       2011-12-08  392  	 * Some firmware will access target address specified in
fdea163d8c17ba0 drivers/acpi/apei/einj.c      Huang Ying       2011-12-08  393  	 * param1 to trigger the error when injecting memory error.
fdea163d8c17ba0 drivers/acpi/apei/einj.c      Huang Ying       2011-12-08  394  	 * This will cause resource conflict with regular memory.  So
fdea163d8c17ba0 drivers/acpi/apei/einj.c      Huang Ying       2011-12-08  395  	 * remove it from trigger table resources.
fdea163d8c17ba0 drivers/acpi/apei/einj.c      Huang Ying       2011-12-08  396  	 */
c5a130325f13b21 drivers/acpi/apei/einj.c      Chen Gong        2013-06-06  397  	if ((param_extension || acpi5) && (type & MEM_ERROR_MASK) && param2) {
fdea163d8c17ba0 drivers/acpi/apei/einj.c      Huang Ying       2011-12-08  398  		struct apei_resources addr_resources;
37ea9693869627d drivers/acpi/apei/einj.c      Jay Lu           2022-12-06  399  
fdea163d8c17ba0 drivers/acpi/apei/einj.c      Huang Ying       2011-12-08  400  		apei_resources_init(&addr_resources);
b4e008dc53a31cb drivers/acpi/apei/einj.c      Xiao, Hui        2011-12-08  401  		trigger_param_region = einj_get_trigger_parameter_region(
b4e008dc53a31cb drivers/acpi/apei/einj.c      Xiao, Hui        2011-12-08  402  			trigger_tab, param1, param2);
b4e008dc53a31cb drivers/acpi/apei/einj.c      Xiao, Hui        2011-12-08  403  		if (trigger_param_region) {
fdea163d8c17ba0 drivers/acpi/apei/einj.c      Huang Ying       2011-12-08  404  			rc = apei_resources_add(&addr_resources,
b4e008dc53a31cb drivers/acpi/apei/einj.c      Xiao, Hui        2011-12-08  405  				trigger_param_region->address,
b4e008dc53a31cb drivers/acpi/apei/einj.c      Xiao, Hui        2011-12-08  406  				trigger_param_region->bit_width/8, true);
fdea163d8c17ba0 drivers/acpi/apei/einj.c      Huang Ying       2011-12-08  407  			if (rc)
fdea163d8c17ba0 drivers/acpi/apei/einj.c      Huang Ying       2011-12-08  408  				goto out_fini;
b4e008dc53a31cb drivers/acpi/apei/einj.c      Xiao, Hui        2011-12-08  409  			rc = apei_resources_sub(&trigger_resources,
b4e008dc53a31cb drivers/acpi/apei/einj.c      Xiao, Hui        2011-12-08  410  					&addr_resources);
b4e008dc53a31cb drivers/acpi/apei/einj.c      Xiao, Hui        2011-12-08  411  		}
fdea163d8c17ba0 drivers/acpi/apei/einj.c      Huang Ying       2011-12-08  412  		apei_resources_fini(&addr_resources);
fdea163d8c17ba0 drivers/acpi/apei/einj.c      Huang Ying       2011-12-08  413  		if (rc)
fdea163d8c17ba0 drivers/acpi/apei/einj.c      Huang Ying       2011-12-08  414  			goto out_fini;
fdea163d8c17ba0 drivers/acpi/apei/einj.c      Huang Ying       2011-12-08  415  	}
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  416  	rc = apei_resources_request(&trigger_resources, "APEI EINJ Trigger");
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  417  	if (rc)
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  418  		goto out_fini;
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  419  	rc = apei_exec_pre_map_gars(&trigger_ctx);
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  420  	if (rc)
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  421  		goto out_release;
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  422  
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  423  	rc = apei_exec_run(&trigger_ctx, ACPI_EINJ_TRIGGER_ERROR);
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  424  
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  425  	apei_exec_post_unmap_gars(&trigger_ctx);
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  426  out_release:
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  427  	apei_resources_release(&trigger_resources);
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  428  out_fini:
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  429  	apei_resources_fini(&trigger_resources);
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  430  out_rel_entry:
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  431  	release_mem_region(trigger_paddr + sizeof(*trigger_tab),
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  432  			   table_size - sizeof(*trigger_tab));
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  433  out_rel_header:
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  434  	release_mem_region(trigger_paddr, sizeof(*trigger_tab));
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  435  out:
37dbc95939d19c3 drivers/acpi/apei/einj-core.c Zaid Alali       2024-12-05  436  	if (p)
37dbc95939d19c3 drivers/acpi/apei/einj-core.c Zaid Alali       2024-12-05  437  		iounmap(p);
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  438  
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  439  	return rc;
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  440  }
e40213450b53157 drivers/acpi/apei/einj.c      Huang Ying       2010-05-18  441
diff mbox series

Patch

diff --git a/drivers/acpi/apei/einj-core.c b/drivers/acpi/apei/einj-core.c
index 04731a5b01fa..74dfb3daba50 100644
--- a/drivers/acpi/apei/einj-core.c
+++ b/drivers/acpi/apei/einj-core.c
@@ -215,20 +215,22 @@  static void check_vendor_extension(u64 paddr,
 {
 	int	offset = v5param->vendor_extension;
 	struct	vendor_error_type_extension *v;
+	void __iomem *p;
 	u32	sbdf;
 
 	if (!offset)
 		return;
-	v = acpi_os_map_iomem(paddr + offset, sizeof(*v));
-	if (!v)
+	p = acpi_os_map_iomem(paddr + offset, sizeof(*v));
+	if (!p)
 		return;
+	v = __io_virt(p);
 	get_oem_vendor_struct(paddr, offset, v);
 	sbdf = v->pcie_sbdf;
 	sprintf(vendor_dev, "%x:%x:%x.%x vendor_id=%x device_id=%x rev_id=%x\n",
 		sbdf >> 24, (sbdf >> 16) & 0xff,
 		(sbdf >> 11) & 0x1f, (sbdf >> 8) & 0x7,
 		 v->vendor_id, v->device_id, v->rev_id);
-	acpi_os_unmap_iomem(v, sizeof(*v));
+	acpi_os_unmap_iomem(p, sizeof(*v));
 }
 
 static void *einj_get_parameter_address(void)
@@ -253,9 +255,11 @@  static void *einj_get_parameter_address(void)
 	}
 	if (pa_v5) {
 		struct set_error_type_with_address *v5param;
+		void __iomem *p;
 
-		v5param = acpi_os_map_iomem(pa_v5, sizeof(*v5param));
-		if (v5param) {
+		p = acpi_os_map_iomem(pa_v5, sizeof(*v5param));
+		if (p) {
+			v5param = __io_virt(p);
 			acpi5 = 1;
 			check_vendor_extension(pa_v5, v5param);
 			return v5param;
@@ -263,12 +267,14 @@  static void *einj_get_parameter_address(void)
 	}
 	if (param_extension && pa_v4) {
 		struct einj_parameter *v4param;
+		void __iomem *p;
 
-		v4param = acpi_os_map_iomem(pa_v4, sizeof(*v4param));
-		if (!v4param)
+		p = acpi_os_map_iomem(pa_v4, sizeof(*v4param));
+		if (!p)
 			return NULL;
+		v4param = __io_virt(p);
 		if (v4param->reserved1 || v4param->reserved2) {
-			acpi_os_unmap_iomem(v4param, sizeof(*v4param));
+			acpi_os_unmap_iomem(p, sizeof(*v4param));
 			return NULL;
 		}
 		return v4param;
@@ -325,6 +331,7 @@  static int __einj_error_trigger(u64 trigger_paddr, u32 type,
 	u32 table_size;
 	int rc = -EIO;
 	struct acpi_generic_address *trigger_param_region = NULL;
+	void __iomem *p;
 
 	r = request_mem_region(trigger_paddr, sizeof(*trigger_tab),
 			       "APEI EINJ Trigger Table");
@@ -335,11 +342,12 @@  static int __einj_error_trigger(u64 trigger_paddr, u32 type,
 			    sizeof(*trigger_tab) - 1);
 		goto out;
 	}
-	trigger_tab = ioremap_cache(trigger_paddr, sizeof(*trigger_tab));
-	if (!trigger_tab) {
+	p = ioremap_cache(trigger_paddr, sizeof(*trigger_tab));
+	if (!p) {
 		pr_err("Failed to map trigger table!\n");
 		goto out_rel_header;
 	}
+	trigger_tab = __io_virt(p);
 	rc = einj_check_trigger_header(trigger_tab);
 	if (rc) {
 		pr_warn(FW_BUG "Invalid trigger error action table.\n");
@@ -361,12 +369,13 @@  static int __einj_error_trigger(u64 trigger_paddr, u32 type,
 		       (unsigned long long)trigger_paddr + table_size - 1);
 		goto out_rel_header;
 	}
-	iounmap(trigger_tab);
-	trigger_tab = ioremap_cache(trigger_paddr, table_size);
-	if (!trigger_tab) {
+	iounmap(p);
+	p = ioremap_cache(trigger_paddr, table_size);
+	if (!p) {
 		pr_err("Failed to map trigger table!\n");
 		goto out_rel_entry;
 	}
+	trigger_tab = __io_virt(p);
 	trigger_entry = (struct acpi_whea_header *)
 		((char *)trigger_tab + sizeof(struct acpi_einj_trigger));
 	apei_resources_init(&trigger_resources);
@@ -424,8 +433,8 @@  static int __einj_error_trigger(u64 trigger_paddr, u32 type,
 out_rel_header:
 	release_mem_region(trigger_paddr, sizeof(*trigger_tab));
 out:
-	if (trigger_tab)
-		iounmap(trigger_tab);
+	if (p)
+		iounmap(p);
 
 	return rc;
 }
@@ -860,7 +869,7 @@  static void __exit einj_remove(struct platform_device *pdev)
 			sizeof(struct set_error_type_with_address) :
 			sizeof(struct einj_parameter);
 
-		acpi_os_unmap_iomem(einj_param, size);
+		acpi_os_unmap_iomem((void __iomem *)einj_param, size);
 		if (vendor_errors.size)
 			acpi_os_unmap_memory(vendor_errors.data, vendor_errors.size);
 	}