All of lore.kernel.org
 help / color / mirror / Atom feed
* [android-common:android16-6.12-2025-12 3/3] drivers/staging/vc04_services/interface/vchiq_arm/vchiq_dev.c:310:65: sparse: sparse: incorrect type in argument 6 (different address spaces)
@ 2026-02-13  2:56 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2026-02-13  2:56 UTC (permalink / raw)
  To: cros-kernel-buildreports; +Cc: oe-kbuild-all

tree:   https://android.googlesource.com/kernel/common android16-6.12-2025-12
head:   1f5755895bc80de88ea2da35d97f935c2f1ad0e8
commit: 206030f6a92bd97997fba8ebb86e78058edecb97 [3/3] staging: vchiq_core: Factor out bulk transfer for blocking mode
config: arm64-randconfig-r121-20260213 (https://download.01.org/0day-ci/archive/20260213/202602131050.fi8DXOr6-lkp@intel.com/config)
compiler: aarch64-linux-gcc (GCC) 15.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260213/202602131050.fi8DXOr6-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/202602131050.fi8DXOr6-lkp@intel.com/

sparse warnings: (new ones prefixed by >>)
>> drivers/staging/vc04_services/interface/vchiq_arm/vchiq_dev.c:310:65: sparse: sparse: incorrect type in argument 6 (different address spaces) @@     expected void [noderef] __user *userdata @@     got void *[assigned] userdata @@
   drivers/staging/vc04_services/interface/vchiq_arm/vchiq_dev.c:310:65: sparse:     expected void [noderef] __user *userdata
   drivers/staging/vc04_services/interface/vchiq_arm/vchiq_dev.c:310:65: sparse:     got void *[assigned] userdata
   drivers/staging/vc04_services/interface/vchiq_arm/vchiq_dev.c:338:26: sparse: sparse: incorrect type in assignment (different address spaces) @@     expected void *[assigned] userdata @@     got void [noderef] __user *userdata @@
   drivers/staging/vc04_services/interface/vchiq_arm/vchiq_dev.c:338:26: sparse:     expected void *[assigned] userdata
   drivers/staging/vc04_services/interface/vchiq_arm/vchiq_dev.c:338:26: sparse:     got void [noderef] __user *userdata
   drivers/staging/vc04_services/interface/vchiq_arm/vchiq_dev.c:554:47: sparse: sparse: incorrect type in assignment (different address spaces) @@     expected void [noderef] __user *[addressable] [assigned] bulk_userdata @@     got void *bulk_userdata @@
   drivers/staging/vc04_services/interface/vchiq_arm/vchiq_dev.c:554:47: sparse:     expected void [noderef] __user *[addressable] [assigned] bulk_userdata
   drivers/staging/vc04_services/interface/vchiq_arm/vchiq_dev.c:554:47: sparse:     got void *bulk_userdata
--
>> drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c:972:55: sparse: sparse: incorrect type in argument 6 (different address spaces) @@     expected void [noderef] __user *userdata @@     got struct bulk_waiter * @@
   drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c:972:55: sparse:     expected void [noderef] __user *userdata
   drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c:972:55: sparse:     got struct bulk_waiter *
--
>> drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c:3130:58: sparse: sparse: incorrect type in argument 5 (different address spaces) @@     expected void *userdata @@     got void [noderef] __user *userdata @@
   drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c:3130:58: sparse:     expected void *userdata
   drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c:3130:58: sparse:     got void [noderef] __user *userdata

vim +310 drivers/staging/vc04_services/interface/vchiq_arm/vchiq_dev.c

   283	
   284	static int vchiq_irq_queue_bulk_tx_rx(struct vchiq_instance *instance,
   285					      struct vchiq_queue_bulk_transfer *args,
   286					      enum vchiq_bulk_dir dir,
   287					      enum vchiq_bulk_mode __user *mode)
   288	{
   289		struct vchiq_service *service;
   290		struct bulk_waiter_node *waiter = NULL, *iter;
   291		void *userdata;
   292		int status = 0;
   293		int ret;
   294	
   295		service = find_service_for_instance(instance, args->handle);
   296		if (!service)
   297			return -EINVAL;
   298	
   299		if (args->mode == VCHIQ_BULK_MODE_BLOCKING) {
   300			waiter = kzalloc(sizeof(*waiter), GFP_KERNEL);
   301			if (!waiter) {
   302				ret = -ENOMEM;
   303				goto out;
   304			}
   305	
   306			userdata = &waiter->bulk_waiter;
   307	
   308			status = vchiq_bulk_xfer_blocking_interruptible(instance, args->handle,
   309									NULL, args->data, args->size,
 > 310									userdata, dir);
   311	
   312			goto bulk_transfer_handled;
   313		} else if (args->mode == VCHIQ_BULK_MODE_WAITING) {
   314			mutex_lock(&instance->bulk_waiter_list_mutex);
   315			list_for_each_entry(iter, &instance->bulk_waiter_list,
   316					    list) {
   317				if (iter->pid == current->pid) {
   318					list_del(&iter->list);
   319					waiter = iter;
   320					break;
   321				}
   322			}
   323			mutex_unlock(&instance->bulk_waiter_list_mutex);
   324			if (!waiter) {
   325				dev_err(service->state->dev,
   326					"arm: no bulk_waiter found for pid %d\n", current->pid);
   327				ret = -ESRCH;
   328				goto out;
   329			}
   330			dev_dbg(service->state->dev, "arm: found bulk_waiter %pK for pid %d\n",
   331				waiter, current->pid);
   332			userdata = &waiter->bulk_waiter;
   333	
   334			status = vchiq_bulk_xfer_waiting_interruptible(instance, args->handle, userdata);
   335	
   336			goto bulk_transfer_handled;
   337		} else {
   338			userdata = args->userdata;
   339		}
   340	
   341		status = vchiq_bulk_transfer(instance, args->handle, NULL, args->data, args->size,
   342					     userdata, args->mode, dir);
   343	
   344	bulk_transfer_handled:
   345		if (!waiter) {
   346			ret = 0;
   347			goto out;
   348		}
   349	
   350		if ((status != -EAGAIN) || fatal_signal_pending(current) ||
   351		    !waiter->bulk_waiter.bulk) {
   352			if (waiter->bulk_waiter.bulk) {
   353				/* Cancel the signal when the transfer completes. */
   354				spin_lock(&service->state->bulk_waiter_spinlock);
   355				waiter->bulk_waiter.bulk->userdata = NULL;
   356				spin_unlock(&service->state->bulk_waiter_spinlock);
   357			}
   358			kfree(waiter);
   359			ret = 0;
   360		} else {
   361			const enum vchiq_bulk_mode mode_waiting =
   362				VCHIQ_BULK_MODE_WAITING;
   363			waiter->pid = current->pid;
   364			mutex_lock(&instance->bulk_waiter_list_mutex);
   365			list_add(&waiter->list, &instance->bulk_waiter_list);
   366			mutex_unlock(&instance->bulk_waiter_list_mutex);
   367			dev_dbg(service->state->dev, "arm: saved bulk_waiter %pK for pid %d\n",
   368				waiter, current->pid);
   369	
   370			ret = put_user(mode_waiting, mode);
   371		}
   372	out:
   373		vchiq_service_put(service);
   374		if (ret)
   375			return ret;
   376		else if (status == -EINVAL)
   377			return -EIO;
   378		else if (status == -EAGAIN)
   379			return -EINTR;
   380		return 0;
   381	}
   382	

-- 
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-02-13  2:57 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-02-13  2:56 [android-common:android16-6.12-2025-12 3/3] drivers/staging/vc04_services/interface/vchiq_arm/vchiq_dev.c:310:65: sparse: sparse: incorrect type in argument 6 (different address spaces) kernel test robot

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.