From: kernel test robot <lkp@intel.com>
To: "Adrián Larumbe" <adrian.larumbe@collabora.com>,
robh@kernel.org, tomeu.vizoso@collabora.com,
steven.price@arm.com, alyssa.rosenzweig@collabora.com,
dri-devel@lists.freedesktop.org
Cc: llvm@lists.linux.dev, kbuild-all@lists.01.org,
adrian.larumbe@collabora.com
Subject: Re: [PATCH v3 1/1] drm/panfrost: Add support for devcoredump
Date: Wed, 22 Jun 2022 20:29:48 +0800 [thread overview]
Message-ID: <202206222000.JafXnPo9-lkp@intel.com> (raw)
In-Reply-To: <20220622015420.1130814-2-adrian.larumbe@collabora.com>
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-lkp@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 <lkp@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
WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com>
To: "Adrián Larumbe" <adrian.larumbe@collabora.com>,
robh@kernel.org, tomeu.vizoso@collabora.com,
steven.price@arm.com, alyssa.rosenzweig@collabora.com,
dri-devel@lists.freedesktop.org
Cc: adrian.larumbe@collabora.com, llvm@lists.linux.dev,
kbuild-all@lists.01.org
Subject: Re: [PATCH v3 1/1] drm/panfrost: Add support for devcoredump
Date: Wed, 22 Jun 2022 20:29:48 +0800 [thread overview]
Message-ID: <202206222000.JafXnPo9-lkp@intel.com> (raw)
In-Reply-To: <20220622015420.1130814-2-adrian.larumbe@collabora.com>
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-lkp@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 <lkp@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
next prev parent reply other threads:[~2022-06-22 12:30 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-22 1:54 [PATCH v3 0/1] devcoredump support for Panfrost GPU driver Adrián Larumbe
2022-06-22 1:54 ` [PATCH v3 1/1] drm/panfrost: Add support for devcoredump Adrián Larumbe
2022-06-22 12:17 ` Alyssa Rosenzweig
2022-06-22 14:00 ` Adri??n Larumbe
2022-06-22 14:16 ` Alyssa Rosenzweig
2022-06-22 12:29 ` kernel test robot [this message]
2022-06-22 12:29 ` kernel test robot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202206222000.JafXnPo9-lkp@intel.com \
--to=lkp@intel.com \
--cc=adrian.larumbe@collabora.com \
--cc=alyssa.rosenzweig@collabora.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=kbuild-all@lists.01.org \
--cc=llvm@lists.linux.dev \
--cc=robh@kernel.org \
--cc=steven.price@arm.com \
--cc=tomeu.vizoso@collabora.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.