Linux EFI development
 help / color / mirror / Atom feed
* [efi:next 27/27] drivers/firmware/efi/runtime-wrappers.c:350:51: error: passing argument 1 of 'efi.runtime-><U4280>.get_time' from incompatible pointer type
@ 2026-10-16  9:05 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2026-10-16  9:05 UTC (permalink / raw)
  To: Ard Biesheuvel; +Cc: oe-kbuild-all, linux-efi, Kees Cook

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/efi/efi.git next
head:   0d950fa5f7bfd3c9e7760a83b4970dc31603b043
commit: 0d950fa5f7bfd3c9e7760a83b4970dc31603b043 [27/27] lkdtm: Add more EFI runtime tests
config: loongarch-randconfig-2000-20261016 (https://download.01.org/0day-ci/archive/20261016/202610161027.zTUj3RVZ-lkp@intel.com/config)
compiler: loongarch64-linux-gcc (GCC) 16.1.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20261016/202610161027.zTUj3RVZ-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/202610161027.zTUj3RVZ-lkp@intel.com/

All errors (new ones prefixed by >>):

   In file included from drivers/firmware/efi/runtime-wrappers.c:28:
   drivers/firmware/efi/runtime-wrappers.c: In function 'efi_call_rts':
>> drivers/firmware/efi/runtime-wrappers.c:350:51: error: passing argument 1 of 'efi.runtime-><U4280>.get_time' from incompatible pointer type [-Wincompatible-pointer-types]
     350 |                                        efi.runtime->set_virtual_address_map,
         |                                        ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
         |                                                   |
         |                                                   efi_status_t (*)(long unsigned int,  long unsigned int,  u32,  efi_memory_desc_t *) {aka long unsigned int (*)(long unsigned int,  long unsigned int,  unsigned int,  efi_memory_desc_t *)}
   include/linux/efi.h:1178:57: note: in definition of macro 'arch_efi_call_virt'
    1178 | #define arch_efi_call_virt(p, f, args...)       ((p)->f(args))
         |                                                         ^~~~
   drivers/firmware/efi/runtime-wrappers.c:349:26: note: in expansion of macro 'efi_call_virt'
     349 |                 status = efi_call_virt(get_time,
         |                          ^~~~~~~~~~~~~
   drivers/firmware/efi/runtime-wrappers.c:350:51: note: expected 'efi_time_t *' but argument is of type 'efi_status_t (*)(long unsigned int,  long unsigned int,  u32,  efi_memory_desc_t *)' {aka 'long unsigned int (*)(long unsigned int,  long unsigned int,  unsigned int,  efi_memory_desc_t *)'}
   include/linux/efi.h:1178:57: note: in definition of macro 'arch_efi_call_virt'
    1178 | #define arch_efi_call_virt(p, f, args...)       ((p)->f(args))
         |                                                         ^~~~
   drivers/firmware/efi/runtime-wrappers.c:349:26: note: in expansion of macro 'efi_call_virt'
     349 |                 status = efi_call_virt(get_time,
         |                          ^~~~~~~~~~~~~


vim +350 drivers/firmware/efi/runtime-wrappers.c

   240	
   241	/*
   242	 * Calls the appropriate efi_runtime_service() with the appropriate
   243	 * arguments.
   244	 */
   245	static void __nocfi efi_call_rts(struct work_struct *work)
   246	{
   247		const union efi_rts_args *args = efi_rts_work.args;
   248		efi_status_t status = EFI_NOT_FOUND;
   249		unsigned long flags;
   250	
   251		if (!efi_enabled(EFI_RUNTIME_SERVICES))
   252			efi_rts_park_worker();
   253	
   254		efi_runtime_lock_owner = current;
   255	
   256		arch_efi_call_virt_setup();
   257		flags = efi_call_virt_save_flags();
   258	
   259		switch (efi_rts_work.efi_rts_id) {
   260		case EFI_GET_TIME:
   261			status = efi_call_virt(get_time,
   262					       args->GET_TIME.time,
   263					       args->GET_TIME.capabilities);
   264			break;
   265		case EFI_SET_TIME:
   266			status = efi_call_virt(set_time,
   267					       args->SET_TIME.time);
   268			break;
   269		case EFI_GET_WAKEUP_TIME:
   270			status = efi_call_virt(get_wakeup_time,
   271					       args->GET_WAKEUP_TIME.enabled,
   272					       args->GET_WAKEUP_TIME.pending,
   273					       args->GET_WAKEUP_TIME.time);
   274			break;
   275		case EFI_SET_WAKEUP_TIME:
   276			status = efi_call_virt(set_wakeup_time,
   277					       args->SET_WAKEUP_TIME.enable,
   278					       args->SET_WAKEUP_TIME.time);
   279			break;
   280		case EFI_GET_VARIABLE:
   281			status = efi_call_virt(get_variable,
   282					       args->GET_VARIABLE.name,
   283					       args->GET_VARIABLE.vendor,
   284					       args->GET_VARIABLE.attr,
   285					       args->GET_VARIABLE.data_size,
   286					       args->GET_VARIABLE.data);
   287			break;
   288		case EFI_GET_NEXT_VARIABLE:
   289			status = efi_call_virt(get_next_variable,
   290					       args->GET_NEXT_VARIABLE.name_size,
   291					       args->GET_NEXT_VARIABLE.name,
   292					       args->GET_NEXT_VARIABLE.vendor);
   293			break;
   294		case EFI_SET_VARIABLE:
   295			status = efi_call_virt(set_variable,
   296					       args->SET_VARIABLE.name,
   297					       args->SET_VARIABLE.vendor,
   298					       args->SET_VARIABLE.attr,
   299					       args->SET_VARIABLE.data_size,
   300					       args->SET_VARIABLE.data);
   301			break;
   302		case EFI_QUERY_VARIABLE_INFO:
   303			status = efi_call_virt(query_variable_info,
   304					       args->QUERY_VARIABLE_INFO.attr,
   305					       args->QUERY_VARIABLE_INFO.storage_space,
   306					       args->QUERY_VARIABLE_INFO.remaining_space,
   307					       args->QUERY_VARIABLE_INFO.max_variable_size);
   308			break;
   309		case EFI_GET_NEXT_HIGH_MONO_COUNT:
   310			status = efi_call_virt(get_next_high_mono_count,
   311					       args->GET_NEXT_HIGH_MONO_COUNT.high_count);
   312			break;
   313		case EFI_UPDATE_CAPSULE:
   314			status = efi_call_virt(update_capsule,
   315					       args->UPDATE_CAPSULE.capsules,
   316					       args->UPDATE_CAPSULE.count,
   317					       args->UPDATE_CAPSULE.sg_list);
   318			break;
   319		case EFI_QUERY_CAPSULE_CAPS:
   320			status = efi_call_virt(query_capsule_caps,
   321					       args->QUERY_CAPSULE_CAPS.capsules,
   322					       args->QUERY_CAPSULE_CAPS.count,
   323					       args->QUERY_CAPSULE_CAPS.max_size,
   324					       args->QUERY_CAPSULE_CAPS.reset_type);
   325			break;
   326		case EFI_ACPI_PRM_HANDLER:
   327	#ifdef CONFIG_ACPI_PRMT
   328			status = arch_efi_call_virt(args, ACPI_PRM_HANDLER.acpi_prm_handler,
   329						    args->ACPI_PRM_HANDLER.param_buffer_addr,
   330						    args->ACPI_PRM_HANDLER.context);
   331			break;
   332	#endif
   333		default:
   334			/*
   335			 * Ideally, we should never reach here because a caller of this
   336			 * function should have put the right efi_runtime_service()
   337			 * function identifier into efi_rts_work->efi_rts_id
   338			 */
   339			pr_err("Requested executing invalid EFI Runtime Service.\n");
   340			break;
   341	
   342	#if IS_ENABLED(CONFIG_LKDTM)
   343		case EFI_LKDTM_RUNTIME_RO_TEST:
   344			/*
   345			 * Call GetTime() with the output argument pointing to
   346			 * executable memory, which should be mapped read-only in the
   347			 * EFI page tables.
   348			 */
   349			status = efi_call_virt(get_time,
 > 350					       efi.runtime->set_virtual_address_map,
   351					       NULL);
   352			break;
   353		case EFI_LKDTM_RUNTIME_NX_TEST:
   354			/*
   355			 * Call efi.runtime, which points to a data object in a EFI
   356			 * runtime region, as if it were a function pointer.
   357			 */
   358			struct { efi_status_t (__efiapi *fn)(int); } s = { (void *)efi.runtime };
   359	
   360			status = arch_efi_call_virt((&s), fn, 0);
   361			break;
   362	#endif
   363		}
   364	
   365		efi_call_virt_check_flags(flags, efi_rts_work.caller);
   366		arch_efi_call_virt_teardown();
   367	
   368		/*
   369		 * EFI runtime services may also have been disabled because the
   370		 * firmware faulted, but the caller is still waiting for us in that
   371		 * case. Only park the worker if the caller has given up on it.
   372		 */
   373		if (READ_ONCE(efi_rts_abandoned))
   374			efi_rts_park_worker();
   375	
   376		efi_rts_work.status = status;
   377		complete(&efi_rts_work.efi_rts_comp);
   378		efi_runtime_lock_owner = NULL;
   379	}
   380	

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

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2026-10-16  9:06 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-16  9:05 [efi:next 27/27] drivers/firmware/efi/runtime-wrappers.c:350:51: error: passing argument 1 of 'efi.runtime-><U4280>.get_time' from incompatible pointer type kernel test robot

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox