* [mmotm:master 122/211] mm/hmm.c:1129:15: note: in expansion of macro 'MIGRATE_PFN_ERROR'
@ 2017-03-17 1:30 kbuild test robot
0 siblings, 0 replies; only message in thread
From: kbuild test robot @ 2017-03-17 1:30 UTC (permalink / raw)
To: Jérôme Glisse
Cc: kbuild-all, Johannes Weiner, Evgeny Baskakov, John Hubbard,
Mark Hairgrove, Sherry Cheung, Subhash Gutti, Andrew Morton,
Linux Memory Management List
[-- Attachment #1: Type: text/plain, Size: 12247 bytes --]
tree: git://git.cmpxchg.org/linux-mmotm.git master
head: 8276ddb3c638602509386f1a05f75326dbf5ce09
commit: 025037cced8bcc78327e8920df22c815e6d4d626 [122/211] mm/hmm/devmem: device memory hotplug using ZONE_DEVICE
config: blackfin-allmodconfig (attached as .config)
compiler: bfin-uclinux-gcc (GCC) 6.2.0
reproduce:
wget https://raw.githubusercontent.com/01org/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
git checkout 025037cced8bcc78327e8920df22c815e6d4d626
# save the attached .config to linux build tree
make.cross ARCH=blackfin
All warnings (new ones prefixed by >>):
pmd = pmd_read_atomic(pmdp);
^~~~~~~~~~~~~~~
mm/hmm.c:417:7: error: incompatible types when assigning to type 'pmd_t {aka struct <anonymous>}' from type 'int'
pmd = pmd_read_atomic(pmdp);
^
mm/hmm.c:439:7: error: implicit declaration of function 'pmd_trans_huge' [-Werror=implicit-function-declaration]
if (pmd_trans_huge(pmd) || pmd_devmap(pmd)) {
^~~~~~~~~~~~~~
mm/hmm.c:440:24: error: implicit declaration of function 'pmd_pfn' [-Werror=implicit-function-declaration]
unsigned long pfn = pmd_pfn(pmd) + pte_index(addr);
^~~~~~~
mm/hmm.c:440:39: error: implicit declaration of function 'pte_index' [-Werror=implicit-function-declaration]
unsigned long pfn = pmd_pfn(pmd) + pte_index(addr);
^~~~~~~~~
mm/hmm.c:443:8: error: implicit declaration of function 'pmd_protnone' [-Werror=implicit-function-declaration]
if (pmd_protnone(pmd)) {
^~~~~~~~~~~~
mm/hmm.c:449:13: error: implicit declaration of function 'pmd_write' [-Werror=implicit-function-declaration]
flags |= pmd_write(*pmdp) ? HMM_PFN_WRITE : 0;
^~~~~~~~~
mm/hmm.c:458:10: error: implicit declaration of function 'pte_offset_map' [-Werror=implicit-function-declaration]
ptep = pte_offset_map(pmdp, addr);
^~~~~~~~~~~~~~
mm/hmm.c:458:8: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
ptep = pte_offset_map(pmdp, addr);
^
mm/hmm.c:463:8: error: implicit declaration of function 'pte_none' [-Werror=implicit-function-declaration]
if (pte_none(pte)) {
^~~~~~~~
mm/hmm.c:465:6: error: implicit declaration of function 'pte_unmap' [-Werror=implicit-function-declaration]
pte_unmap(ptep);
^~~~~~~~~
mm/hmm.c:473:9: error: implicit declaration of function 'pte_present' [-Werror=implicit-function-declaration]
if (!pte_present(pte) && !non_swap_entry(entry)) {
^~~~~~~~~~~
mm/hmm.c:483:32: error: implicit declaration of function 'pte_pfn' [-Werror=implicit-function-declaration]
pfns[i] = hmm_pfn_from_pfn(pte_pfn(pte))|flag;
^~~~~~~
mm/hmm.c:484:16: error: implicit declaration of function 'pte_write' [-Werror=implicit-function-declaration]
pfns[i] |= pte_write(pte) ? HMM_PFN_WRITE : 0;
^~~~~~~~~
mm/hmm.c: In function 'hmm_devmem_radix_release':
mm/hmm.c:809:30: error: 'PA_SECTION_SHIFT' undeclared (first use in this function)
#define SECTION_SIZE (1UL << PA_SECTION_SHIFT)
^
mm/hmm.c:815:36: note: in expansion of macro 'SECTION_SIZE'
align_start = resource->start & ~(SECTION_SIZE - 1);
^~~~~~~~~~~~
mm/hmm.c: In function 'hmm_devmem_release':
mm/hmm.c:809:30: error: 'PA_SECTION_SHIFT' undeclared (first use in this function)
#define SECTION_SIZE (1UL << PA_SECTION_SHIFT)
^
mm/hmm.c:837:36: note: in expansion of macro 'SECTION_SIZE'
align_start = resource->start & ~(SECTION_SIZE - 1);
^~~~~~~~~~~~
mm/hmm.c:839:2: error: implicit declaration of function 'arch_remove_memory' [-Werror=implicit-function-declaration]
arch_remove_memory(align_start, align_size, devmem->pagemap.flags);
^~~~~~~~~~~~~~~~~~
mm/hmm.c: In function 'hmm_devmem_find':
mm/hmm.c:848:54: error: 'PA_SECTION_SHIFT' undeclared (first use in this function)
return radix_tree_lookup(&hmm_devmem_radix, phys >> PA_SECTION_SHIFT);
^~~~~~~~~~~~~~~~
mm/hmm.c: In function 'hmm_devmem_pages_create':
mm/hmm.c:809:30: error: 'PA_SECTION_SHIFT' undeclared (first use in this function)
#define SECTION_SIZE (1UL << PA_SECTION_SHIFT)
^
mm/hmm.c:859:44: note: in expansion of macro 'SECTION_SIZE'
align_start = devmem->resource->start & ~(SECTION_SIZE - 1);
^~~~~~~~~~~~
In file included from include/linux/cache.h:4:0,
from include/linux/printk.h:8,
from include/linux/kernel.h:13,
from include/asm-generic/bug.h:13,
from arch/blackfin/include/asm/bug.h:71,
from include/linux/bug.h:4,
from include/linux/mmdebug.h:4,
from include/linux/mm.h:8,
from mm/hmm.c:20:
mm/hmm.c: In function 'hmm_devmem_add':
mm/hmm.c:809:30: error: 'PA_SECTION_SHIFT' undeclared (first use in this function)
#define SECTION_SIZE (1UL << PA_SECTION_SHIFT)
^
include/uapi/linux/kernel.h:10:47: note: in definition of macro '__ALIGN_KERNEL_MASK'
#define __ALIGN_KERNEL_MASK(x, mask) (((x) + (mask)) & ~(mask))
^~~~
include/linux/kernel.h:49:22: note: in expansion of macro '__ALIGN_KERNEL'
#define ALIGN(x, a) __ALIGN_KERNEL((x), (a))
^~~~~~~~~~~~~~
mm/hmm.c:1002:9: note: in expansion of macro 'ALIGN'
size = ALIGN(size, SECTION_SIZE);
^~~~~
mm/hmm.c:1002:21: note: in expansion of macro 'SECTION_SIZE'
size = ALIGN(size, SECTION_SIZE);
^~~~~~~~~~~~
In file included from include/linux/hmm.h:82:0,
from mm/hmm.c:21:
mm/hmm.c: In function 'hmm_devmem_fault_range':
include/linux/migrate.h:134:32: warning: left shift count >= width of type [-Wshift-count-overflow]
#define MIGRATE_PFN_ERROR (1UL << (BITS_PER_LONG_LONG - 7))
^
>> mm/hmm.c:1129:15: note: in expansion of macro 'MIGRATE_PFN_ERROR'
if (dst[i] & MIGRATE_PFN_ERROR)
^~~~~~~~~~~~~~~~~
mm/hmm.c: In function 'hmm_devmem_find':
mm/hmm.c:849:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
In file included from include/linux/hmm.h:82:0,
from mm/hmm.c:21:
include/linux/migrate.h: In function 'migrate_pfn_size':
>> include/linux/migrate.h:147:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
cc1: some warnings being treated as errors
vim +/MIGRATE_PFN_ERROR +1129 mm/hmm.c
996 goto error_percpu_ref;
997
998 ret = devm_add_action(device, hmm_devmem_ref_exit, &devmem->ref);
999 if (ret)
1000 goto error_devm_add_action;
1001
> 1002 size = ALIGN(size, SECTION_SIZE);
1003 addr = (iomem_resource.end + 1ULL) - size;
1004
1005 /*
1006 * FIXME add a new helper to quickly walk resource tree and find free
1007 * range
1008 *
1009 * FIXME what about ioport_resource resource ?
1010 */
1011 for (; addr > size && addr >= iomem_resource.start; addr -= size) {
1012 ret = region_intersects(addr, size, 0, IORES_DESC_NONE);
1013 if (ret != REGION_DISJOINT)
1014 continue;
1015
1016 devmem->resource = devm_request_mem_region(device, addr, size,
1017 dev_name(device));
1018 if (!devmem->resource) {
1019 ret = -ENOMEM;
1020 goto error_no_resource;
1021 }
1022 devmem->resource->desc = IORES_DESC_UNADDRESSABLE_MEMORY;
1023 break;
1024 }
1025 if (!devmem->resource) {
1026 ret = -ERANGE;
1027 goto error_no_resource;
1028 }
1029
1030 devmem->pfn_first = devmem->resource->start >> PAGE_SHIFT;
1031 devmem->pfn_last = devmem->pfn_first +
1032 (resource_size(devmem->resource) >> PAGE_SHIFT);
1033
1034 ret = hmm_devmem_pages_create(devmem);
1035 if (ret)
1036 goto error_pages;
1037
1038 devres_add(device, devmem);
1039
1040 ret = devm_add_action(device, hmm_devmem_ref_kill, &devmem->ref);
1041 if (ret) {
1042 hmm_devmem_remove(devmem);
1043 return ERR_PTR(ret);
1044 }
1045
1046 return devmem;
1047
1048 error_pages:
1049 devm_release_mem_region(device, devmem->resource->start,
1050 resource_size(devmem->resource));
1051 error_no_resource:
1052 error_devm_add_action:
1053 hmm_devmem_ref_kill(&devmem->ref);
1054 hmm_devmem_ref_exit(&devmem->ref);
1055 error_percpu_ref:
1056 devres_free(devmem);
1057 return ERR_PTR(ret);
1058 }
1059 EXPORT_SYMBOL(hmm_devmem_add);
1060
1061 /*
1062 * hmm_devmem_remove() - remove device memory (kill and free ZONE_DEVICE)
1063 *
1064 * @devmem: hmm_devmem struct use to track and manage the ZONE_DEVICE memory
1065 *
1066 * This will hot-unplug memory that was hotplugged by hmm_devmem_add on behalf
1067 * of the device driver. It will free struct page and remove the resource that
1068 * reserve the physical address range for this device memory.
1069 */
1070 void hmm_devmem_remove(struct hmm_devmem *devmem)
1071 {
1072 resource_size_t start, size;
1073 struct device *device;
1074
1075 if (!devmem)
1076 return;
1077
1078 device = devmem->device;
1079 start = devmem->resource->start;
1080 size = resource_size(devmem->resource);
1081
1082 hmm_devmem_ref_kill(&devmem->ref);
1083 hmm_devmem_ref_exit(&devmem->ref);
1084 hmm_devmem_pages_remove(devmem);
1085
1086 devm_release_mem_region(device, start, size);
1087 }
1088 EXPORT_SYMBOL(hmm_devmem_remove);
1089
1090 /*
1091 * hmm_devmem_fault_range() - migrate back a virtual range of memory
1092 *
1093 * @devmem: hmm_devmem struct use to track and manage the ZONE_DEVICE memory
1094 * @vma: virtual memory area containing the range to be migrated
1095 * @ops: migration callback for allocating destination memory and copying
1096 * @mentry: maximum number of entries in src or dst array
1097 * @src: array of unsigned long containing source pfns
1098 * @dst: array of unsigned long containing destination pfns
1099 * @start: start address of the range to migrate (inclusive)
1100 * @addr: fault address (must be inside the range)
1101 * @end: end address of the range to migrate (exclusive)
1102 * @private: pointer passed back to each of the callback
1103 * Returns: 0 on success, VM_FAULT_SIGBUS on error
1104 *
1105 * This is a wrapper around migrate_vma() which check the migration status
1106 * for a given fault address and return corresponding page fault handler status
1107 * ie 0 on success or VM_FAULT_SIGBUS if migration failed for fault address.
1108 *
1109 * This is a helper intendend to be used by ZONE_DEVICE fault handler.
1110 */
1111 int hmm_devmem_fault_range(struct hmm_devmem *devmem,
1112 struct vm_area_struct *vma,
1113 const struct migrate_vma_ops *ops,
1114 unsigned long mentry,
1115 unsigned long *src,
1116 unsigned long *dst,
1117 unsigned long start,
1118 unsigned long addr,
1119 unsigned long end,
1120 void *private)
1121 {
1122 unsigned long i, size, tmp;
1123 if (migrate_vma(ops, vma, mentry, start, end, src, dst, private))
1124 return VM_FAULT_SIGBUS;
1125
1126 for (i = 0, tmp = start; tmp < addr; i++, tmp += size) {
1127 size = migrate_pfn_size(src[i]);
1128 }
> 1129 if (dst[i] & MIGRATE_PFN_ERROR)
1130 return VM_FAULT_SIGBUS;
1131
1132 return 0;
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 43910 bytes --]
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2017-03-17 1:31 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-03-17 1:30 [mmotm:master 122/211] mm/hmm.c:1129:15: note: in expansion of macro 'MIGRATE_PFN_ERROR' kbuild test robot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox