Hi "Adrián,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on drm/drm-next]
[also build test WARNING on linus/master v5.19-rc3 next-20220622]
[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]

url:    
https://github.com/intel-lab-lkp/linux/commits/Adri-n-Larumbe/devcoredump-support-for-Panfrost-GPU-driver/20220622-095645
base:   git://anongit.freedesktop.org/drm/drm drm-next
config: s390-buildonly-randconfig-r004-20220622 
(https://download.01.org/0day-ci/archive/20220622/202206222000.jafxnpo9-...@intel.com/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 
8b8d126598ce7bd5243da7f94f69fa1104288bee)
reproduce (this is a W=1 build):
        wget 
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O 
~/bin/make.cross
        chmod +x ~/bin/make.cross
        # install s390 cross compiling tool for clang build
        # apt-get install binutils-s390x-linux-gnu
        # 
https://github.com/intel-lab-lkp/linux/commit/966f660f30dc5a9ff854e61d189b81e92f3453fa
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review 
Adri-n-Larumbe/devcoredump-support-for-Panfrost-GPU-driver/20220622-095645
        git checkout 966f660f30dc5a9ff854e61d189b81e92f3453fa
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 
O=build_dir ARCH=s390 SHELL=/bin/bash drivers/gpu/drm/amd/display/dc/ 
drivers/gpu/drm/panfrost/

If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <l...@intel.com>

All warnings (new ones prefixed by >>):

   In file included from drivers/gpu/drm/panfrost/panfrost_dump.c:6:
   In file included from include/linux/devcoredump.h:12:
   In file included from include/linux/scatterlist.h:9:
   In file included from arch/s390/include/asm/io.h:75:
   include/asm-generic/io.h:464:31: warning: performing pointer arithmetic on a 
null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           val = __raw_readb(PCI_IOBASE + addr);
                             ~~~~~~~~~~ ^
   include/asm-generic/io.h:477:61: warning: performing pointer arithmetic on a 
null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           val = __le16_to_cpu((__le16 __force)__raw_readw(PCI_IOBASE + addr));
                                                           ~~~~~~~~~~ ^
   include/uapi/linux/byteorder/big_endian.h:37:59: note: expanded from macro 
'__le16_to_cpu'
   #define __le16_to_cpu(x) __swab16((__force __u16)(__le16)(x))
                                                             ^
   include/uapi/linux/swab.h:102:54: note: expanded from macro '__swab16'
   #define __swab16(x) (__u16)__builtin_bswap16((__u16)(x))
                                                        ^
   In file included from drivers/gpu/drm/panfrost/panfrost_dump.c:6:
   In file included from include/linux/devcoredump.h:12:
   In file included from include/linux/scatterlist.h:9:
   In file included from arch/s390/include/asm/io.h:75:
   include/asm-generic/io.h:490:61: warning: performing pointer arithmetic on a 
null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr));
                                                           ~~~~~~~~~~ ^
   include/uapi/linux/byteorder/big_endian.h:35:59: note: expanded from macro 
'__le32_to_cpu'
   #define __le32_to_cpu(x) __swab32((__force __u32)(__le32)(x))
                                                             ^
   include/uapi/linux/swab.h:115:54: note: expanded from macro '__swab32'
   #define __swab32(x) (__u32)__builtin_bswap32((__u32)(x))
                                                        ^
   In file included from drivers/gpu/drm/panfrost/panfrost_dump.c:6:
   In file included from include/linux/devcoredump.h:12:
   In file included from include/linux/scatterlist.h:9:
   In file included from arch/s390/include/asm/io.h:75:
   include/asm-generic/io.h:501:33: warning: performing pointer arithmetic on a 
null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           __raw_writeb(value, PCI_IOBASE + addr);
                               ~~~~~~~~~~ ^
   include/asm-generic/io.h:511:59: warning: performing pointer arithmetic on a 
null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           __raw_writew((u16 __force)cpu_to_le16(value), PCI_IOBASE + addr);
                                                         ~~~~~~~~~~ ^
   include/asm-generic/io.h:521:59: warning: performing pointer arithmetic on a 
null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           __raw_writel((u32 __force)cpu_to_le32(value), PCI_IOBASE + addr);
                                                         ~~~~~~~~~~ ^
   include/asm-generic/io.h:609:20: warning: performing pointer arithmetic on a 
null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           readsb(PCI_IOBASE + addr, buffer, count);
                  ~~~~~~~~~~ ^
   include/asm-generic/io.h:617:20: warning: performing pointer arithmetic on a 
null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           readsw(PCI_IOBASE + addr, buffer, count);
                  ~~~~~~~~~~ ^
   include/asm-generic/io.h:625:20: warning: performing pointer arithmetic on a 
null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           readsl(PCI_IOBASE + addr, buffer, count);
                  ~~~~~~~~~~ ^
   include/asm-generic/io.h:634:21: warning: performing pointer arithmetic on a 
null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           writesb(PCI_IOBASE + addr, buffer, count);
                   ~~~~~~~~~~ ^
   include/asm-generic/io.h:643:21: warning: performing pointer arithmetic on a 
null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           writesw(PCI_IOBASE + addr, buffer, count);
                   ~~~~~~~~~~ ^
   include/asm-generic/io.h:652:21: warning: performing pointer arithmetic on a 
null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           writesl(PCI_IOBASE + addr, buffer, count);
                   ~~~~~~~~~~ ^
>> drivers/gpu/drm/panfrost/panfrost_dump.c:235:27: warning: implicit 
>> conversion from '__le64' (aka 'unsigned long long') to '__le32' (aka 
>> 'unsigned int') changes value from 72057594037927936 to 0 
>> [-Wconstant-conversion]
                   iter.hdr->bomap.valid = cpu_to_le64(1);
                                         ~ ^~~~~~~~~~~~~~
   include/linux/byteorder/generic.h:86:21: note: expanded from macro 
'cpu_to_le64'
   #define cpu_to_le64 __cpu_to_le64
                       ^
   include/uapi/linux/byteorder/big_endian.h:32:27: note: expanded from macro 
'__cpu_to_le64'
   #define __cpu_to_le64(x) ((__force __le64)__swab64((x)))
                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   13 warnings generated.


vim +235 drivers/gpu/drm/panfrost/panfrost_dump.c

   102  
   103  void panfrost_core_dump(struct panfrost_job *job)
   104  {
   105          struct panfrost_device *pfdev = job->pfdev;
   106          struct panfrost_dump_iterator iter;
   107          struct drm_gem_object *dbo;
   108          unsigned int n_obj, n_bomap_pages;
   109          __le64 *bomap, *bomap_start;
   110          size_t file_size;
   111          u32 as_nr;
   112          int slot;
   113          int ret, i;
   114  
   115          as_nr = job->mmu->as;
   116          slot = panfrost_job_get_slot(job);
   117          slot = slot ? slot : 0;
   118  
   119          /* Only catch the first event, or when manually re-armed */
   120          if (!panfrost_dump_core)
   121                  return;
   122          panfrost_dump_core = false;
   123  
   124          /* At least, we dump registers and end marker */
   125          n_obj = 2;
   126          n_bomap_pages = 0;
   127          file_size = ARRAY_SIZE(panfrost_dump_registers) *
   128                          sizeof(struct panfrost_dump_registers);
   129  
   130          /* Add in the active buffer objects */
   131          for (i = 0; i < job->bo_count; i++) {
   132                  /*
   133                   * Even though the CPU could be configured to use 16K 
or 64K pages, this
   134                   * is a very unusual situation for most kernel setups 
on SoCs that have
   135                   * a Panfrost device. Also many places across the 
driver make the somewhat
   136                   * arbitrary assumption that Panfrost's MMU page size 
is the same as the CPU's,
   137                   * so let's have a sanity check to ensure that's always 
the case
   138                   */
   139                  WARN_ON(!IS_ALIGNED(dbo->size, PAGE_SIZE));
   140  
   141                  dbo = job->bos[i];
   142                  file_size += dbo->size;
   143                  n_bomap_pages += dbo->size >> PAGE_SHIFT;
   144                  n_obj++;
   145          }
   146  
   147          /* If we have any buffer objects, add a bomap object */
   148          if (n_bomap_pages) {
   149                  file_size += n_bomap_pages * sizeof(*bomap);
   150                  n_obj++;
   151          }
   152  
   153          /* Add the size of the headers */
   154          file_size += sizeof(*iter.hdr) * n_obj;
   155  
   156          /* Allocate the file in vmalloc memory, it's likely to be big */
   157          iter.start = __vmalloc(file_size, GFP_KERNEL | __GFP_NOWARN |
   158                          __GFP_NORETRY);
   159          if (!iter.start) {
   160                  dev_warn(pfdev->dev, "failed to allocate devcoredump 
file\n");
   161                  return;
   162          }
   163  
   164          /* Point the data member after the headers */
   165          iter.hdr = iter.start;
   166          iter.data = &iter.hdr[n_obj];
   167  
   168          memset(iter.hdr, 0, iter.data - iter.start);
   169  
   170          /*
   171           * For now, we write the job identifier in the register dump 
header,
   172           * so that we can decode the entire dump later with pandecode
   173           */
   174          iter.hdr->reghdr.jc = cpu_to_le64(job->jc);
   175          iter.hdr->reghdr.major = cpu_to_le32(PANFROSTDUMP_MAJOR);
   176          iter.hdr->reghdr.minor = cpu_to_le32(PANFROSTDUMP_MINOR);
   177          iter.hdr->reghdr.gpu_id = cpu_to_le32(pfdev->features.id);
   178          iter.hdr->reghdr.nbos = cpu_to_le64(job->bo_count);
   179  
   180          panfrost_core_dump_registers(&iter, pfdev, as_nr, slot);
   181  
   182          /* Reserve space for the bomap */
   183          if (job->bo_count) {
   184                  bomap_start = bomap = iter.data;
   185                  memset(bomap, 0, sizeof(*bomap) * n_bomap_pages);
   186                  panfrost_core_dump_header(&iter, PANFROSTDUMP_BUF_BOMAP,
   187                                            bomap + n_bomap_pages);
   188          }
   189  
   190          for (i = 0; i < job->bo_count; i++) {
   191                  struct iosys_map map;
   192                  struct panfrost_gem_mapping *mapping;
   193                  struct panfrost_gem_object *bo;
   194                  struct sg_page_iter page_iter;
   195                  void *vaddr;
   196  
   197                  bo = to_panfrost_bo(job->bos[i]);
   198                  mapping = job->mappings[i];
   199  
   200                  if (!bo->base.sgt) {
   201                          dev_err(pfdev->dev, "Panfrost Dump: BO has no 
sgt, cannot dump\n");
   202                          iter.hdr->bomap.valid = 0;
   203                          goto dump_header;
   204                  }
   205  
   206                  ret = drm_gem_shmem_vmap(&bo->base, &map);
   207                  if (ret) {
   208                          dev_err(pfdev->dev, "Panfrost Dump: couldn't 
map Buffer Object\n");
   209                          iter.hdr->bomap.valid = 0;
   210                          goto dump_header;
   211                  }
   212  
   213                  WARN_ON(!mapping->active);
   214  
   215                  iter.hdr->bomap.data[0] = cpu_to_le32((bomap - 
bomap_start));
   216  
   217                  for_each_sgtable_page(bo->base.sgt, &page_iter, 0) {
   218                          struct page *page = 
sg_page_iter_page(&page_iter);
   219  
   220                          if (!IS_ERR(page))
   221                                  *bomap++ = 
cpu_to_le64(page_to_phys(page));
   222                          else {
   223                                  dev_err(pfdev->dev, "Panfrost Dump: 
wrong page\n");
   224                                  *bomap++ = ~cpu_to_le64(0);
   225                          }
   226                  }
   227  
   228                  iter.hdr->bomap.iova = 
cpu_to_le64(mapping->mmnode.start << PAGE_SHIFT);
   229  
   230                  vaddr = map.vaddr;
   231                  memcpy(iter.data, vaddr, bo->base.base.size);
   232  
   233                  drm_gem_shmem_vunmap(&bo->base, &map);
   234  
 > 235                  iter.hdr->bomap.valid = cpu_to_le64(1);
   236  

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp

Reply via email to