[airlied:drm-intel-display-refactor 7/9] drivers/gpu/drm/i915/display/intel_fbdev.c:251:60: sparse: sparse: incorrect type in argument 3 (different address spaces)

kernel test robot lkp at intel.com
Sun Oct 10 07:04:20 UTC 2021


tree:   git://people.freedesktop.org/~airlied/linux.git drm-intel-display-refactor
head:   57c0bb98bd7351cfb13403dd854cc9a0fc9ad5df
commit: 0f3c35589c8c2924d384164482aa273def8aaf1a [7/9] drm/i915/display: refactor fbdev pin/unpin out into functions.
config: i386-randconfig-s001-20211010 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
reproduce:
        # apt-get install sparse
        # sparse version: v0.6.4-dirty
        git remote add airlied git://people.freedesktop.org/~airlied/linux.git
        git fetch --no-tags airlied drm-intel-display-refactor
        git checkout 0f3c35589c8c2924d384164482aa273def8aaf1a
        # save the attached .config to linux build tree
        make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=i386 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp at intel.com>


sparse warnings: (new ones prefixed by >>)
   drivers/gpu/drm/i915/display/intel_fbdev.c:188:16: sparse: sparse: incorrect type in assignment (different address spaces) @@     expected void * @@     got void [noderef] __iomem * @@
   drivers/gpu/drm/i915/display/intel_fbdev.c:188:16: sparse:     expected void *
   drivers/gpu/drm/i915/display/intel_fbdev.c:188:16: sparse:     got void [noderef] __iomem *
>> drivers/gpu/drm/i915/display/intel_fbdev.c:251:60: sparse: sparse: incorrect type in argument 3 (different address spaces) @@     expected void **vaddr @@     got void [noderef] __iomem ** @@
   drivers/gpu/drm/i915/display/intel_fbdev.c:251:60: sparse:     expected void **vaddr
   drivers/gpu/drm/i915/display/intel_fbdev.c:251:60: sparse:     got void [noderef] __iomem **

vim +251 drivers/gpu/drm/i915/display/intel_fbdev.c

   173	
   174	static int intel_fbdev_pin_and_fence(struct drm_i915_private *dev_priv,
   175					     struct intel_fbdev *ifbdev,
   176					     void **vaddr)
   177	{
   178		const struct i915_ggtt_view view = {
   179			.type = I915_GGTT_VIEW_NORMAL,
   180		};
   181		ifbdev->vma = intel_pin_and_fence_fb_obj(&ifbdev->fb->base, false,
   182							 &view, false, &ifbdev->vma_flags);
   183	
   184		if (IS_ERR(ifbdev->vma)) {
   185			return PTR_ERR(ifbdev->vma);
   186		}
   187	
 > 188		*vaddr = i915_vma_pin_iomap(ifbdev->vma);
   189		if (IS_ERR(*vaddr)) {
   190			drm_err(&dev_priv->drm,
   191				"Failed to remap framebuffer into virtual memory\n");
   192			return PTR_ERR(vaddr);
   193		}
   194		return 0;
   195	}
   196	
   197	static void intel_fbdev_unpin(struct intel_fbdev *ifbdev)
   198	{
   199		if (ifbdev->vma)
   200			intel_unpin_fb_vma(ifbdev->vma, ifbdev->vma_flags);
   201	}
   202	
   203	static int intelfb_create(struct drm_fb_helper *helper,
   204				  struct drm_fb_helper_surface_size *sizes)
   205	{
   206		struct intel_fbdev *ifbdev =
   207			container_of(helper, struct intel_fbdev, helper);
   208		struct intel_framebuffer *intel_fb = ifbdev->fb;
   209		struct drm_device *dev = helper->dev;
   210		struct drm_i915_private *dev_priv = to_i915(dev);
   211		struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
   212		struct i915_ggtt *ggtt = &dev_priv->ggtt;
   213		intel_wakeref_t wakeref;
   214		struct fb_info *info;
   215		bool prealloc = false;
   216		void __iomem *vaddr;
   217		struct drm_i915_gem_object *obj;
   218		int ret;
   219	
   220		if (intel_fb &&
   221		    (sizes->fb_width > intel_fb->base.width ||
   222		     sizes->fb_height > intel_fb->base.height)) {
   223			drm_dbg_kms(&dev_priv->drm,
   224				    "BIOS fb too small (%dx%d), we require (%dx%d),"
   225				    " releasing it\n",
   226				    intel_fb->base.width, intel_fb->base.height,
   227				    sizes->fb_width, sizes->fb_height);
   228			drm_framebuffer_put(&intel_fb->base);
   229			intel_fb = ifbdev->fb = NULL;
   230		}
   231		if (!intel_fb || drm_WARN_ON(dev, !intel_fb_obj(&intel_fb->base))) {
   232			drm_dbg_kms(&dev_priv->drm,
   233				    "no BIOS fb, allocating a new one\n");
   234			ret = intelfb_alloc(helper, sizes);
   235			if (ret)
   236				return ret;
   237			intel_fb = ifbdev->fb;
   238		} else {
   239			drm_dbg_kms(&dev_priv->drm, "re-using BIOS fb\n");
   240			prealloc = true;
   241			sizes->fb_width = intel_fb->base.width;
   242			sizes->fb_height = intel_fb->base.height;
   243		}
   244	
   245		wakeref = intel_runtime_pm_get(&dev_priv->runtime_pm);
   246	
   247		/* Pin the GGTT vma for our access via info->screen_base.
   248		 * This also validates that any existing fb inherited from the
   249		 * BIOS is suitable for own access.
   250		 */
 > 251		ret = intel_fbdev_pin_and_fence(dev_priv, ifbdev, &vaddr);
   252		if (ret) {
   253			goto out_unlock;
   254		}
   255	
   256		info = drm_fb_helper_alloc_fbi(helper);
   257		if (IS_ERR(info)) {
   258			drm_err(&dev_priv->drm, "Failed to allocate fb_info\n");
   259			ret = PTR_ERR(info);
   260			goto out_unpin;
   261		}
   262	
   263		ifbdev->helper.fb = &ifbdev->fb->base;
   264	
   265		info->fbops = &intelfb_ops;
   266	
   267		/* setup aperture base/size for vesafb takeover */
   268		obj = intel_fb_obj(&intel_fb->base);
   269		if (i915_gem_object_is_lmem(obj)) {
   270			struct intel_memory_region *mem = obj->mm.region;
   271	
   272			info->apertures->ranges[0].base = mem->io_start;
   273			info->apertures->ranges[0].size = mem->total;
   274	
   275			/* Use fbdev's framebuffer from lmem for discrete */
   276			info->fix.smem_start =
   277				(unsigned long)(mem->io_start +
   278						i915_gem_object_get_dma_address(obj, 0));
   279			info->fix.smem_len = obj->base.size;
   280		} else {
   281			info->apertures->ranges[0].base = ggtt->gmadr.start;
   282			info->apertures->ranges[0].size = ggtt->mappable_end;
   283	
   284			/* Our framebuffer is the entirety of fbdev's system memory */
   285			info->fix.smem_start =
   286				(unsigned long)(ggtt->gmadr.start + ifbdev->vma->node.start);
   287			info->fix.smem_len = ifbdev->vma->node.size;
   288		}
   289	
   290		info->screen_base = vaddr;
   291		info->screen_size = ifbdev->vma->node.size;
   292	
   293		drm_fb_helper_fill_info(info, &ifbdev->helper, sizes);
   294	
   295		/* If the object is shmemfs backed, it will have given us zeroed pages.
   296		 * If the object is stolen however, it will be full of whatever
   297		 * garbage was left in there.
   298		 */
   299		if (!i915_gem_object_is_shmem(ifbdev->vma->obj) && !prealloc)
   300			memset_io(info->screen_base, 0, info->screen_size);
   301	
   302		/* Use default scratch pixmap (info->pixmap.flags = FB_PIXMAP_SYSTEM) */
   303	
   304		drm_dbg_kms(&dev_priv->drm, "allocated %dx%d fb: 0x%08x\n",
   305			    ifbdev->fb->base.width, ifbdev->fb->base.height,
   306			    i915_ggtt_offset(ifbdev->vma));
   307	
   308		intel_runtime_pm_put(&dev_priv->runtime_pm, wakeref);
   309		vga_switcheroo_client_fb_set(pdev, info);
   310		return 0;
   311	
   312	out_unpin:
   313		intel_fbdev_unpin(ifbdev);
   314	out_unlock:
   315		intel_runtime_pm_put(&dev_priv->runtime_pm, wakeref);
   316		return ret;
   317	}
   318	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 33170 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20211010/73584700/attachment-0001.gz>


More information about the dri-devel mailing list