Re: [PATCH 5/6] fbdev: Move CFB read and write code into helper functions

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi

Am 26.04.23 um 07:16 schrieb kernel test robot:
Hi Thomas,

kernel test robot noticed the following build warnings:

FYI these errors come from systems that use volatile __iomem pointers with plain memcpy(). See my patchset at [1] for an improvement.

Best regards
Thomas

[1] https://patchwork.freedesktop.org/series/116985/


[auto build test WARNING on drm-misc/drm-misc-next]
[also build test WARNING on linus/master next-20230425]
[cannot apply to v6.3]
[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/Thomas-Zimmermann/fbdev-Return-number-of-bytes-read-or-written/20230425-223011
base:   git://anongit.freedesktop.org/drm/drm-misc drm-misc-next
patch link:    https://lore.kernel.org/r/20230425142846.730-6-tzimmermann%40suse.de
patch subject: [PATCH 5/6] fbdev: Move CFB read and write code into helper functions
config: riscv-randconfig-s033-20230423 (https://download.01.org/0day-ci/archive/20230426/202304261317.QAEwArcB-lkp@xxxxxxxxx/config)
compiler: riscv64-linux-gcc (GCC) 12.1.0
reproduce:
         wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
         chmod +x ~/bin/make.cross
         # apt-get install sparse
         # sparse version: v0.6.4-39-gce1a6720-dirty
         # https://github.com/intel-lab-lkp/linux/commit/d4a150f3dfa8e73f2e92f1c7efc9271e17632cc2
         git remote add linux-review https://github.com/intel-lab-lkp/linux
         git fetch --no-tags linux-review Thomas-Zimmermann/fbdev-Return-number-of-bytes-read-or-written/20230425-223011
         git checkout d4a150f3dfa8e73f2e92f1c7efc9271e17632cc2
         # save the config file
         mkdir build_dir && cp config build_dir/.config
         COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=riscv olddefconfig
         COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=riscv SHELL=/bin/bash drivers/video/fbdev/core/

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@xxxxxxxxx>
| Link: https://lore.kernel.org/oe-kbuild-all/202304261317.QAEwArcB-lkp@xxxxxxxxx/

sparse warnings: (new ones prefixed by >>)
    WARNING: invalid argument to '-march': '_zihintpause'
drivers/video/fbdev/core/fb_cfb_fops.c:44:39: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected void const * @@     got unsigned char [noderef] [usertype] __iomem *[assigned] src @@
    drivers/video/fbdev/core/fb_cfb_fops.c:44:39: sparse:     expected void const *
    drivers/video/fbdev/core/fb_cfb_fops.c:44:39: sparse:     got unsigned char [noderef] [usertype] __iomem *[assigned] src
drivers/video/fbdev/core/fb_cfb_fops.c:113:32: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void * @@     got unsigned char [noderef] [usertype] __iomem *[assigned] dst @@
    drivers/video/fbdev/core/fb_cfb_fops.c:113:32: sparse:     expected void *
    drivers/video/fbdev/core/fb_cfb_fops.c:113:32: sparse:     got unsigned char [noderef] [usertype] __iomem *[assigned] dst

vim +44 drivers/video/fbdev/core/fb_cfb_fops.c

      6	
      7	ssize_t fb_cfb_read(struct fb_info *info, char __user *buf, size_t count, loff_t *ppos)
      8	{
      9		unsigned long p = *ppos;
     10		u8 *buffer, *dst;
     11		u8 __iomem *src;
     12		int c, cnt = 0, err = 0;
     13		unsigned long total_size;
     14	
     15		if (!info->screen_base)
     16			return -ENODEV;
     17	
     18		total_size = info->screen_size;
     19	
     20		if (total_size == 0)
     21			total_size = info->fix.smem_len;
     22	
     23		if (p >= total_size)
     24			return 0;
     25	
     26		if (count >= total_size)
     27			count = total_size;
     28	
     29		if (count + p > total_size)
     30			count = total_size - p;
     31	
     32		buffer = kmalloc((count > PAGE_SIZE) ? PAGE_SIZE : count, GFP_KERNEL);
     33		if (!buffer)
     34			return -ENOMEM;
     35	
     36		src = (u8 __iomem *)(info->screen_base + p);
     37	
     38		if (info->fbops->fb_sync)
     39			info->fbops->fb_sync(info);
     40	
     41		while (count) {
     42			c  = (count > PAGE_SIZE) ? PAGE_SIZE : count;
     43			dst = buffer;
   > 44			fb_memcpy_fromfb(dst, src, c);
     45			dst += c;
     46			src += c;
     47	
     48			if (copy_to_user(buf, buffer, c)) {
     49				err = -EFAULT;
     50				break;
     51			}
     52			*ppos += c;
     53			buf += c;
     54			cnt += c;
     55			count -= c;
     56		}
     57	
     58		kfree(buffer);
     59	
     60		return cnt ? cnt : err;
     61	}
     62	EXPORT_SYMBOL(fb_cfb_read);
     63	
     64	ssize_t fb_cfb_write(struct fb_info *info, const char __user *buf, size_t count, loff_t *ppos)
     65	{
     66		unsigned long p = *ppos;
     67		u8 *buffer, *src;
     68		u8 __iomem *dst;
     69		int c, cnt = 0, err = 0;
     70		unsigned long total_size;
     71	
     72		if (!info->screen_base)
     73			return -ENODEV;
     74	
     75		total_size = info->screen_size;
     76	
     77		if (total_size == 0)
     78			total_size = info->fix.smem_len;
     79	
     80		if (p > total_size)
     81			return -EFBIG;
     82	
     83		if (count > total_size) {
     84			err = -EFBIG;
     85			count = total_size;
     86		}
     87	
     88		if (count + p > total_size) {
     89			if (!err)
     90				err = -ENOSPC;
     91	
     92			count = total_size - p;
     93		}
     94	
     95		buffer = kmalloc((count > PAGE_SIZE) ? PAGE_SIZE : count, GFP_KERNEL);
     96		if (!buffer)
     97			return -ENOMEM;
     98	
     99		dst = (u8 __iomem *)(info->screen_base + p);
    100	
    101		if (info->fbops->fb_sync)
    102			info->fbops->fb_sync(info);
    103	
    104		while (count) {
    105			c = (count > PAGE_SIZE) ? PAGE_SIZE : count;
    106			src = buffer;
    107	
    108			if (copy_from_user(src, buf, c)) {
    109				err = -EFAULT;
    110				break;
    111			}
    112	
  > 113			fb_memcpy_tofb(dst, src, c);


--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)

Attachment: OpenPGP_signature
Description: OpenPGP digital signature


[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux