tree:
git://git.infradead.org/users/hch/misc.git hmm-headers
head: eacffa71b75f2486263f460f97583c2198f9a830
commit: eacffa71b75f2486263f460f97583c2198f9a830 [1/1] hmm: remove unneeded #includes
config: powerpc-allyesconfig (attached as .config)
compiler: powerpc64-linux-gcc (GCC) 9.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
git checkout eacffa71b75f2486263f460f97583c2198f9a830
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=powerpc
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
All error/warnings (new ones prefixed by >>):
> drivers/gpu/drm/nouveau/nouveau_dmem.c:141:32: warning:
'struct migrate_vma' declared inside parameter list will not be visible outside of
this definition or declaration
141 | struct vm_fault *vmf, struct migrate_vma
*args,
| ^~~~~~~~~~~
drivers/gpu/drm/nouveau/nouveau_dmem.c: In function
'nouveau_dmem_fault_copy_one':
> drivers/gpu/drm/nouveau/nouveau_dmem.c:148:10: error: implicit
declaration of function 'migrate_pfn_to_page'; did you mean
'hmm_pfn_to_page'? [-Werror=implicit-function-declaration]
148 | spage
= migrate_pfn_to_page(args->src[0]);
| ^~~~~~~~~~~~~~~~~~~
| hmm_pfn_to_page
> drivers/gpu/drm/nouveau/nouveau_dmem.c:148:34: error:
dereferencing pointer to incomplete type 'struct migrate_vma'
148 |
spage = migrate_pfn_to_page(args->src[0]);
| ^~
> drivers/gpu/drm/nouveau/nouveau_dmem.c:149:33: error:
'MIGRATE_PFN_MIGRATE' undeclared (first use in this function)
149 | if
(!spage || !(args->src[0] & MIGRATE_PFN_MIGRATE))
| ^~~~~~~~~~~~~~~~~~~
drivers/gpu/drm/nouveau/nouveau_dmem.c:149:33: note: each undeclared identifier is
reported only once for each function it appears in
> drivers/gpu/drm/nouveau/nouveau_dmem.c:169:17: error: implicit
declaration of function 'migrate_pfn' [-Werror=implicit-function-declaration]
169 | args->dst[0] = migrate_pfn(page_to_pfn(dpage)) | MIGRATE_PFN_LOCKED;
| ^~~~~~~~~~~
> drivers/gpu/drm/nouveau/nouveau_dmem.c:169:51: error:
'MIGRATE_PFN_LOCKED' undeclared (first use in this function)
169 |
args->dst[0] = migrate_pfn(page_to_pfn(dpage)) | MIGRATE_PFN_LOCKED;
| ^~~~~~~~~~~~~~~~~~
drivers/gpu/drm/nouveau/nouveau_dmem.c: In function
'nouveau_dmem_migrate_to_ram':
> drivers/gpu/drm/nouveau/nouveau_dmem.c:188:9: error: variable
'args' has initializer but incomplete type
188 | struct migrate_vma
args = {
| ^~~~~~~~~~~
> drivers/gpu/drm/nouveau/nouveau_dmem.c:189:4: error: 'struct
migrate_vma' has no member named 'vma'
189 | .vma =
vmf->vma,
| ^~~
> drivers/gpu/drm/nouveau/nouveau_dmem.c:189:11: warning: excess
elements in struct initializer
189 | .vma = vmf->vma,
| ^~~
drivers/gpu/drm/nouveau/nouveau_dmem.c:189:11: note: (near initialization for
'args')
> drivers/gpu/drm/nouveau/nouveau_dmem.c:190:4: error: 'struct
migrate_vma' has no member named 'start'
190 | .start =
vmf->address,
| ^~~~~
drivers/gpu/drm/nouveau/nouveau_dmem.c:190:13: warning: excess elements in struct
initializer
190 | .start = vmf->address,
| ^~~
drivers/gpu/drm/nouveau/nouveau_dmem.c:190:13: note: (near initialization for
'args')
> drivers/gpu/drm/nouveau/nouveau_dmem.c:191:4: error: 'struct
migrate_vma' has no member named 'end'
191 | .end =
vmf->address + PAGE_SIZE,
| ^~~
drivers/gpu/drm/nouveau/nouveau_dmem.c:191:11: warning: excess elements in struct
initializer
191 | .end = vmf->address + PAGE_SIZE,
| ^~~
drivers/gpu/drm/nouveau/nouveau_dmem.c:191:11: note: (near initialization for
'args')
> drivers/gpu/drm/nouveau/nouveau_dmem.c:192:4: error: 'struct
migrate_vma' has no member named 'src'
192 | .src = &src,
| ^~~
drivers/gpu/drm/nouveau/nouveau_dmem.c:192:11: warning: excess elements in struct
initializer
192 | .src = &src,
| ^
drivers/gpu/drm/nouveau/nouveau_dmem.c:192:11: note: (near initialization for
'args')
> drivers/gpu/drm/nouveau/nouveau_dmem.c:193:4: error: 'struct
migrate_vma' has no member named 'dst'
193 | .dst = &dst,
| ^~~
drivers/gpu/drm/nouveau/nouveau_dmem.c:193:11: warning: excess elements in struct
initializer
193 | .dst = &dst,
| ^
drivers/gpu/drm/nouveau/nouveau_dmem.c:193:11: note: (near initialization for
'args')
> drivers/gpu/drm/nouveau/nouveau_dmem.c:194:4: error: 'struct
migrate_vma' has no member named 'pgmap_owner'
194 | .pgmap_owner
= drm->dev,
| ^~~~~~~~~~~
drivers/gpu/drm/nouveau/nouveau_dmem.c:194:18: warning: excess elements in struct
initializer
194 | .pgmap_owner = drm->dev,
| ^~~
drivers/gpu/drm/nouveau/nouveau_dmem.c:194:18: note: (near initialization for
'args')
> drivers/gpu/drm/nouveau/nouveau_dmem.c:195:4: error: 'struct
migrate_vma' has no member named 'flags'
195 | .flags =
MIGRATE_VMA_SELECT_DEVICE_PRIVATE,
| ^~~~~
> drivers/gpu/drm/nouveau/nouveau_dmem.c:195:13: error:
'MIGRATE_VMA_SELECT_DEVICE_PRIVATE' undeclared (first use in this function)
195 | .flags = MIGRATE_VMA_SELECT_DEVICE_PRIVATE,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/gpu/drm/nouveau/nouveau_dmem.c:195:13: warning: excess elements in struct
initializer
drivers/gpu/drm/nouveau/nouveau_dmem.c:195:13: note: (near initialization for
'args')
> drivers/gpu/drm/nouveau/nouveau_dmem.c:188:21: error: storage
size of 'args' isn't known
188 | struct migrate_vma args = {
| ^~~~
> drivers/gpu/drm/nouveau/nouveau_dmem.c:203:6: error: implicit
declaration of function 'migrate_vma_setup'
[-Werror=implicit-function-declaration]
203 | if (migrate_vma_setup(&args)
< 0)
| ^~~~~~~~~~~~~~~~~
> drivers/gpu/drm/nouveau/nouveau_dmem.c:213:2: error: implicit
declaration of function 'migrate_vma_pages'; did you mean
'is_migrate_cma_page'? [-Werror=implicit-function-declaration]
213 |
migrate_vma_pages(&args);
| ^~~~~~~~~~~~~~~~~
| is_migrate_cma_page
> drivers/gpu/drm/nouveau/nouveau_dmem.c:217:2: error: implicit
declaration of function 'migrate_vma_finalize'
[-Werror=implicit-function-declaration]
217 |
migrate_vma_finalize(&args);
| ^~~~~~~~~~~~~~~~~~~~
drivers/gpu/drm/nouveau/nouveau_dmem.c:188:21: warning: unused variable 'args'
[-Wunused-variable]
188 | struct migrate_vma args = {
| ^~~~
drivers/gpu/drm/nouveau/nouveau_dmem.c: In function
'nouveau_dmem_migrate_copy_one':
drivers/gpu/drm/nouveau/nouveau_dmem.c:575:8: warning: assignment to 'struct page
*' from 'int' makes pointer from integer without a cast [-Wint-conversion]
575 | spage = migrate_pfn_to_page(src);
| ^
drivers/gpu/drm/nouveau/nouveau_dmem.c:576:14: error: 'MIGRATE_PFN_MIGRATE'
undeclared (first use in this function)
576 | if (!(src & MIGRATE_PFN_MIGRATE))
| ^~~~~~~~~~~~~~~~~~~
drivers/gpu/drm/nouveau/nouveau_dmem.c:602:12: error: 'MIGRATE_PFN_WRITE'
undeclared (first use in this function)
602 | if (src & MIGRATE_PFN_WRITE)
| ^~~~~~~~~~~~~~~~~
drivers/gpu/drm/nouveau/nouveau_dmem.c:604:43: error: 'MIGRATE_PFN_LOCKED'
undeclared (first use in this function)
604 | return migrate_pfn(page_to_pfn(dpage)) | MIGRATE_PFN_LOCKED;
| ^~~~~~~~~~~~~~~~~~
drivers/gpu/drm/nouveau/nouveau_dmem.c: At top level:
drivers/gpu/drm/nouveau/nouveau_dmem.c:616:37: warning: 'struct migrate_vma'
declared inside parameter list will not be visible outside of this definition or
declaration
616 | struct nouveau_svmm *svmm, struct migrate_vma *args,
| ^~~~~~~~~~~
drivers/gpu/drm/nouveau/nouveau_dmem.c: In function
'nouveau_dmem_migrate_chunk':
drivers/gpu/drm/nouveau/nouveau_dmem.c:620:27: error: dereferencing pointer to
incomplete type 'struct migrate_vma'
620 | unsigned long addr = args->start, nr_dma = 0, i;
| ^~
drivers/gpu/drm/nouveau/nouveau_dmem.c: In function
'nouveau_dmem_migrate_vma':
drivers/gpu/drm/nouveau/nouveau_dmem.c:652:9: error: variable 'args' has
initializer but incomplete type
652 | struct migrate_vma args = {
| ^~~~~~~~~~~
drivers/gpu/drm/nouveau/nouveau_dmem.c:653:4: error: 'struct migrate_vma' has
no member named 'vma'
653 | .vma = vma,
| ^~~
drivers/gpu/drm/nouveau/nouveau_dmem.c:653:11: warning: excess elements in struct
initializer
653 | .vma = vma,
| ^~~
drivers/gpu/drm/nouveau/nouveau_dmem.c:653:11: note: (near initialization for
'args')
drivers/gpu/drm/nouveau/nouveau_dmem.c:654:4: error: 'struct migrate_vma' has
no member named 'start'
654 | .start = start,
| ^~~~~
drivers/gpu/drm/nouveau/nouveau_dmem.c:654:13: warning: excess elements in struct
initializer
654 | .start = start,
| ^~~~~
drivers/gpu/drm/nouveau/nouveau_dmem.c:654:13: note: (near initialization for
'args')
drivers/gpu/drm/nouveau/nouveau_dmem.c:655:4: error: 'struct migrate_vma' has
no member named 'pgmap_owner'
655 | .pgmap_owner = drm->dev,
| ^~~~~~~~~~~
drivers/gpu/drm/nouveau/nouveau_dmem.c:655:18: warning: excess elements in struct
initializer
655 | .pgmap_owner = drm->dev,
| ^~~
drivers/gpu/drm/nouveau/nouveau_dmem.c:655:18: note: (near initialization for
'args')
drivers/gpu/drm/nouveau/nouveau_dmem.c:656:4: error: 'struct migrate_vma' has
no member named 'flags'
656 | .flags = MIGRATE_VMA_SELECT_SYSTEM,
| ^~~~~
drivers/gpu/drm/nouveau/nouveau_dmem.c:656:13: error:
'MIGRATE_VMA_SELECT_SYSTEM' undeclared (first use in this function)
656 | .flags = MIGRATE_VMA_SELECT_SYSTEM,
| ^~~~~~~~~~~~~~~~~~~~~~~~~
drivers/gpu/drm/nouveau/nouveau_dmem.c:656:13: warning: excess elements in struct
initializer
drivers/gpu/drm/nouveau/nouveau_dmem.c:656:13: note: (near initialization for
'args')
drivers/gpu/drm/nouveau/nouveau_dmem.c:652:21: error: storage size of 'args'
isn't known
652 | struct migrate_vma args = {
| ^~~~
drivers/gpu/drm/nouveau/nouveau_dmem.c:652:21: warning: unused variable 'args'
[-Wunused-variable]
cc1: some warnings being treated as errors
git remote add hch-misc
git://git.infradead.org/users/hch/misc.git
git fetch --no-tags hch-misc hmm-headers
git checkout eacffa71b75f2486263f460f97583c2198f9a830
vim +148 drivers/gpu/drm/nouveau/nouveau_dmem.c
2ab2bda53c986a9 Christoph Hellwig 2019-08-14 139
bfe69ef94aeeae7 Christoph Hellwig 2019-08-14 140 static vm_fault_t
nouveau_dmem_fault_copy_one(struct nouveau_drm *drm,
bfe69ef94aeeae7 Christoph Hellwig 2019-08-14 @141 struct vm_fault *vmf, struct
migrate_vma *args,
bfe69ef94aeeae7 Christoph Hellwig 2019-08-14 142 dma_addr_t *dma_addr)
5be73b690875f7e Jérôme Glisse 2018-07-26 143 {
a788ade4f6e0302 Ben Skeggs 2019-02-15 144 struct device *dev =
drm->dev->dev;
5be73b690875f7e Jérôme Glisse 2018-07-26 145 struct page *dpage, *spage;
f8477ce6b5923ef Ralph Campbell 2020-07-23 146 struct nouveau_svmm *svmm;
5be73b690875f7e Jérôme Glisse 2018-07-26 147
bfe69ef94aeeae7 Christoph Hellwig 2019-08-14 @148 spage =
migrate_pfn_to_page(args->src[0]);
bfe69ef94aeeae7 Christoph Hellwig 2019-08-14 @149 if (!spage || !(args->src[0] &
MIGRATE_PFN_MIGRATE))
bfe69ef94aeeae7 Christoph Hellwig 2019-08-14 150 return 0;
5be73b690875f7e Jérôme Glisse 2018-07-26 151
bfe69ef94aeeae7 Christoph Hellwig 2019-08-14 152 dpage = alloc_page_vma(GFP_HIGHUSER,
vmf->vma, vmf->address);
bfe69ef94aeeae7 Christoph Hellwig 2019-08-14 153 if (!dpage)
bfe69ef94aeeae7 Christoph Hellwig 2019-08-14 154 return VM_FAULT_SIGBUS;
721be868142cb95 Christoph Hellwig 2019-06-26 155 lock_page(dpage);
5be73b690875f7e Jérôme Glisse 2018-07-26 156
bfe69ef94aeeae7 Christoph Hellwig 2019-08-14 157 *dma_addr = dma_map_page(dev, dpage,
0, PAGE_SIZE, DMA_BIDIRECTIONAL);
bfe69ef94aeeae7 Christoph Hellwig 2019-08-14 158 if (dma_mapping_error(dev,
*dma_addr))
bfe69ef94aeeae7 Christoph Hellwig 2019-08-14 159 goto error_free_page;
5be73b690875f7e Jérôme Glisse 2018-07-26 160
f8477ce6b5923ef Ralph Campbell 2020-07-23 161 svmm = spage->zone_device_data;
f8477ce6b5923ef Ralph Campbell 2020-07-23 162 mutex_lock(&svmm->mutex);
f8477ce6b5923ef Ralph Campbell 2020-07-23 163 nouveau_svmm_invalidate(svmm,
args->start, args->end);
bfe69ef94aeeae7 Christoph Hellwig 2019-08-14 164 if
(drm->dmem->migrate.copy_func(drm, 1, NOUVEAU_APER_HOST, *dma_addr,
bfe69ef94aeeae7 Christoph Hellwig 2019-08-14 165 NOUVEAU_APER_VRAM,
nouveau_dmem_page_addr(spage)))
bfe69ef94aeeae7 Christoph Hellwig 2019-08-14 166 goto error_dma_unmap;
f8477ce6b5923ef Ralph Campbell 2020-07-23 167 mutex_unlock(&svmm->mutex);
5be73b690875f7e Jérôme Glisse 2018-07-26 168
bfe69ef94aeeae7 Christoph Hellwig 2019-08-14 @169 args->dst[0] =
migrate_pfn(page_to_pfn(dpage)) | MIGRATE_PFN_LOCKED;
bfe69ef94aeeae7 Christoph Hellwig 2019-08-14 170 return 0;
a788ade4f6e0302 Ben Skeggs 2019-02-15 171
bfe69ef94aeeae7 Christoph Hellwig 2019-08-14 172 error_dma_unmap:
f8477ce6b5923ef Ralph Campbell 2020-07-23 173 mutex_unlock(&svmm->mutex);
bfe69ef94aeeae7 Christoph Hellwig 2019-08-14 174 dma_unmap_page(dev, *dma_addr,
PAGE_SIZE, DMA_BIDIRECTIONAL);
bfe69ef94aeeae7 Christoph Hellwig 2019-08-14 175 error_free_page:
5be73b690875f7e Jérôme Glisse 2018-07-26 176 __free_page(dpage);
bfe69ef94aeeae7 Christoph Hellwig 2019-08-14 177 return VM_FAULT_SIGBUS;
5be73b690875f7e Jérôme Glisse 2018-07-26 178 }
5be73b690875f7e Jérôme Glisse 2018-07-26 179
4239f267e3cd31e Christoph Hellwig 2019-06-26 180 static vm_fault_t
nouveau_dmem_migrate_to_ram(struct vm_fault *vmf)
5be73b690875f7e Jérôme Glisse 2018-07-26 181 {
1d7f940c3a16623 Ralph Campbell 2020-04-21 182 struct nouveau_drm *drm =
page_to_drm(vmf->page);
1d7f940c3a16623 Ralph Campbell 2020-04-21 183 struct nouveau_dmem *dmem =
drm->dmem;
bfe69ef94aeeae7 Christoph Hellwig 2019-08-14 184 struct nouveau_fence *fence;
bfe69ef94aeeae7 Christoph Hellwig 2019-08-14 185 unsigned long src = 0, dst = 0;
bfe69ef94aeeae7 Christoph Hellwig 2019-08-14 186 dma_addr_t dma_addr = 0;
bfe69ef94aeeae7 Christoph Hellwig 2019-08-14 187 vm_fault_t ret;
a7d1f22bb74f32c Christoph Hellwig 2019-08-14 @188 struct migrate_vma args = {
a7d1f22bb74f32c Christoph Hellwig 2019-08-14 @189 .vma = vmf->vma,
a7d1f22bb74f32c Christoph Hellwig 2019-08-14 @190 .start = vmf->address,
a7d1f22bb74f32c Christoph Hellwig 2019-08-14 @191 .end = vmf->address + PAGE_SIZE,
bfe69ef94aeeae7 Christoph Hellwig 2019-08-14 @192 .src = &src,
bfe69ef94aeeae7 Christoph Hellwig 2019-08-14 @193 .dst = &dst,
5143192cd410c4f Ralph Campbell 2020-07-23 @194 .pgmap_owner = drm->dev,
5143192cd410c4f Ralph Campbell 2020-07-23 @195 .flags =
MIGRATE_VMA_SELECT_DEVICE_PRIVATE,
a7d1f22bb74f32c Christoph Hellwig 2019-08-14 196 };
5be73b690875f7e Jérôme Glisse 2018-07-26 197
5be73b690875f7e Jérôme Glisse 2018-07-26 198 /*
5be73b690875f7e Jérôme Glisse 2018-07-26 199 * FIXME what we really want is to
find some heuristic to migrate more
5be73b690875f7e Jérôme Glisse 2018-07-26 200 * than just one page on CPU fault.
When such fault happens it is very
5be73b690875f7e Jérôme Glisse 2018-07-26 201 * likely that more surrounding page
will CPU fault too.
5be73b690875f7e Jérôme Glisse 2018-07-26 202 */
a7d1f22bb74f32c Christoph Hellwig 2019-08-14 @203 if (migrate_vma_setup(&args) <
0)
5be73b690875f7e Jérôme Glisse 2018-07-26 204 return VM_FAULT_SIGBUS;
a7d1f22bb74f32c Christoph Hellwig 2019-08-14 205 if (!args.cpages)
a7d1f22bb74f32c Christoph Hellwig 2019-08-14 206 return 0;
a7d1f22bb74f32c Christoph Hellwig 2019-08-14 207
bfe69ef94aeeae7 Christoph Hellwig 2019-08-14 208 ret = nouveau_dmem_fault_copy_one(drm,
vmf, &args, &dma_addr);
bfe69ef94aeeae7 Christoph Hellwig 2019-08-14 209 if (ret || dst == 0)
bfe69ef94aeeae7 Christoph Hellwig 2019-08-14 210 goto done;
5be73b690875f7e Jérôme Glisse 2018-07-26 211
bfe69ef94aeeae7 Christoph Hellwig 2019-08-14 212
nouveau_fence_new(dmem->migrate.chan, false, &fence);
bfe69ef94aeeae7 Christoph Hellwig 2019-08-14 @213 migrate_vma_pages(&args);
bfe69ef94aeeae7 Christoph Hellwig 2019-08-14 214 nouveau_dmem_fence_done(&fence);
bfe69ef94aeeae7 Christoph Hellwig 2019-08-14 215 dma_unmap_page(drm->dev->dev,
dma_addr, PAGE_SIZE, DMA_BIDIRECTIONAL);
bfe69ef94aeeae7 Christoph Hellwig 2019-08-14 216 done:
a7d1f22bb74f32c Christoph Hellwig 2019-08-14 @217 migrate_vma_finalize(&args);
bfe69ef94aeeae7 Christoph Hellwig 2019-08-14 218 return ret;
5be73b690875f7e Jérôme Glisse 2018-07-26 219 }
5be73b690875f7e Jérôme Glisse 2018-07-26 220
:::::: The code at line 148 was first introduced by commit
:::::: bfe69ef94aeeae76531b8f37799b8ac6fca56957 nouveau: simplify
nouveau_dmem_migrate_to_ram
:::::: TO: Christoph Hellwig <hch(a)lst.de>
:::::: CC: Jason Gunthorpe <jgg(a)mellanox.com>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org