[PATCH v2 1/1] drm/panfrost: Add support for devcoredump
kernel test robot
lkp at intel.com
Tue Jun 21 04:37:49 UTC 2022
Hi "Adrián,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on drm/drm-next]
[also build test ERROR on linus/master v5.19-rc2 next-20220617]
[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/20220621-103431
base: git://anongit.freedesktop.org/drm/drm drm-next
config: alpha-buildonly-randconfig-r003-20220619 (https://download.01.org/0day-ci/archive/20220621/202206211114.PJcD2pJh-lkp@intel.com/config)
compiler: alpha-linux-gcc (GCC) 11.3.0
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
# https://github.com/intel-lab-lkp/linux/commit/297bd4948ab1f4eeb78389d57adc1edc819cb6f2
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/20220621-103431
git checkout 297bd4948ab1f4eeb78389d57adc1edc819cb6f2
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.3.0 make.cross W=1 O=build_dir ARCH=alpha SHELL=/bin/bash drivers/gpu/drm/panfrost/
If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp at intel.com>
All errors (new ones prefixed by >>):
drivers/gpu/drm/panfrost/panfrost_dump.c: In function 'panfrost_core_dump':
>> drivers/gpu/drm/panfrost/panfrost_dump.c:115:20: error: 'struct panfrost_job' has no member named 'file_priv'
115 | as_nr = job->file_priv->mmu->as;
| ^~
vim +115 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->file_priv->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 dbo = job->bos[i];
133 file_size += dbo->size;
134 n_bomap_pages += dbo->size >> PAGE_SHIFT;
135 n_obj++;
136 }
137
138 /* If we have any buffer objects, add a bomap object */
139 if (n_bomap_pages) {
140 file_size += n_bomap_pages * sizeof(*bomap);
141 n_obj++;
142 }
143
144 /* Add the size of the headers */
145 file_size += sizeof(*iter.hdr) * n_obj;
146
147 /* Allocate the file in vmalloc memory, it's likely to be big */
148 iter.start = __vmalloc(file_size, GFP_KERNEL | __GFP_NOWARN |
149 __GFP_NORETRY);
150 if (!iter.start) {
151 dev_warn(pfdev->dev, "failed to allocate devcoredump file\n");
152 return;
153 }
154
155 /* Point the data member after the headers */
156 iter.hdr = iter.start;
157 iter.data = &iter.hdr[n_obj];
158
159 memset(iter.hdr, 0, iter.data - iter.start);
160
161 /*
162 * For now, we write the job identifier in the register dump header,
163 * so that we can decode the entire dump later with pandecode
164 */
165 iter.hdr->reghdr.jc = cpu_to_le64(job->jc);
166 iter.hdr->reghdr.version = cpu_to_le32(PANFROSTDUMP_VERSION_1);
167 iter.hdr->reghdr.gpu_id = cpu_to_le32(pfdev->features.id);
168 iter.hdr->reghdr.nbos = cpu_to_le64(job->bo_count);
169
170 panfrost_core_dump_registers(&iter, pfdev, as_nr, slot);
171
172 /* Reserve space for the bomap */
173 if (job->bo_count) {
174 bomap_start = bomap = iter.data;
175 memset(bomap, 0, sizeof(*bomap) * n_bomap_pages);
176 panfrost_core_dump_header(&iter, PANFROSTDUMP_BUF_BOMAP,
177 bomap + n_bomap_pages);
178 }
179
180 for (i = 0; i < job->bo_count; i++) {
181 struct iosys_map map;
182 struct panfrost_gem_mapping *mapping;
183 struct panfrost_gem_object *bo;
184 struct sg_page_iter page_iter;
185 void *vaddr;
186
187 bo = to_panfrost_bo(job->bos[i]);
188 mapping = job->mappings[i];
189
190 if (!bo->base.sgt) {
191 dev_err(pfdev->dev, "Panfrost Dump: BO has no sgt, cannot dump\n");
192 iter.hdr->bomap.valid = 0;
193 goto dump_header;
194 }
195
196 ret = drm_gem_shmem_vmap(&bo->base, &map);
197 if (ret) {
198 dev_err(pfdev->dev, "Panfrost Dump: couldn't map Buffer Object\n");
199 iter.hdr->bomap.valid = 0;
200 goto dump_header;
201 }
202
203 WARN_ON(!mapping->active);
204
205 iter.hdr->bomap.data[0] = cpu_to_le32((bomap - bomap_start));
206
207 for_each_sgtable_page(bo->base.sgt, &page_iter, 0) {
208 struct page *page = sg_page_iter_page(&page_iter);
209
210 if (!IS_ERR(page))
211 *bomap++ = cpu_to_le64(page_to_phys(page));
212 else {
213 dev_err(pfdev->dev, "Panfrost Dump: wrong page\n");
214 *bomap++ = ~cpu_to_le64(0);
215 }
216 }
217
218 iter.hdr->bomap.iova = cpu_to_le64(mapping->mmnode.start << PAGE_SHIFT);
219
220 vaddr = map.vaddr;
221 memcpy(iter.data, vaddr, bo->base.base.size);
222
223 drm_gem_shmem_vunmap(&bo->base, &map);
224
225 iter.hdr->bomap.valid = cpu_to_le64(1);
226
--
0-DAY CI Kernel Test Service
https://01.org/lkp
More information about the dri-devel
mailing list