* [mmotm:master 171/351] mm/vmacache.c:14:39: error: 'PMD_SHIFT' undeclared; did you mean 'PUD_SHIFT'?
@ 2018-07-21 3:59 kbuild test robot
2018-07-23 21:57 ` David Rientjes
0 siblings, 1 reply; 2+ messages in thread
From: kbuild test robot @ 2018-07-21 3:59 UTC (permalink / raw)
To: David Rientjes
Cc: kbuild-all, Johannes Weiner, Andrew Morton, Linux Memory Management List
[-- Attachment #1: Type: text/plain, Size: 6688 bytes --]
tree: git://git.cmpxchg.org/linux-mmotm.git master
head: 51e69b1d3de18116a5dceb6b144444dfdf136dc7
commit: 77ecf9bc0e3d673d4d561cedc1d01c7a84ef90b7 [171/351] mm, vmacache: hash addresses based on pmd
config: arm-allnoconfig (attached as .config)
compiler: arm-linux-gnueabi-gcc (Debian 7.2.0-11) 7.2.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
git checkout 77ecf9bc0e3d673d4d561cedc1d01c7a84ef90b7
# save the attached .config to linux build tree
GCC_VERSION=7.2.0 make.cross ARCH=arm
All error/warnings (new ones prefixed by >>):
mm/vmacache.c: In function 'vmacache_update':
>> mm/vmacache.c:14:39: error: 'PMD_SHIFT' undeclared (first use in this function); did you mean 'PUD_SHIFT'?
#define VMACACHE_HASH(addr) ((addr >> PMD_SHIFT) & VMACACHE_MASK)
^
>> mm/vmacache.c:71:26: note: in expansion of macro 'VMACACHE_HASH'
current->vmacache.vmas[VMACACHE_HASH(addr)] = newvma;
^~~~~~~~~~~~~
mm/vmacache.c:14:39: note: each undeclared identifier is reported only once for each function it appears in
#define VMACACHE_HASH(addr) ((addr >> PMD_SHIFT) & VMACACHE_MASK)
^
>> mm/vmacache.c:71:26: note: in expansion of macro 'VMACACHE_HASH'
current->vmacache.vmas[VMACACHE_HASH(addr)] = newvma;
^~~~~~~~~~~~~
mm/vmacache.c: In function 'vmacache_find':
>> mm/vmacache.c:14:39: error: 'PMD_SHIFT' undeclared (first use in this function); did you mean 'PUD_SHIFT'?
#define VMACACHE_HASH(addr) ((addr >> PMD_SHIFT) & VMACACHE_MASK)
^
mm/vmacache.c:96:12: note: in expansion of macro 'VMACACHE_HASH'
int idx = VMACACHE_HASH(addr);
^~~~~~~~~~~~~
mm/vmacache.c: In function 'vmacache_find_exact':
>> mm/vmacache.c:127:26: error: 'addr' undeclared (first use in this function)
int idx = VMACACHE_HASH(addr);
^
mm/vmacache.c:14:31: note: in definition of macro 'VMACACHE_HASH'
#define VMACACHE_HASH(addr) ((addr >> PMD_SHIFT) & VMACACHE_MASK)
^~~~
>> mm/vmacache.c:14:39: error: 'PMD_SHIFT' undeclared (first use in this function); did you mean 'PUD_SHIFT'?
#define VMACACHE_HASH(addr) ((addr >> PMD_SHIFT) & VMACACHE_MASK)
^
mm/vmacache.c:127:12: note: in expansion of macro 'VMACACHE_HASH'
int idx = VMACACHE_HASH(addr);
^~~~~~~~~~~~~
vim +14 mm/vmacache.c
9
10 /*
11 * Hash based on the pmd of addr. Provides a good hit rate for workloads with
12 * spatial locality.
13 */
> 14 #define VMACACHE_HASH(addr) ((addr >> PMD_SHIFT) & VMACACHE_MASK)
15
16 /*
17 * Flush vma caches for threads that share a given mm.
18 *
19 * The operation is safe because the caller holds the mmap_sem
20 * exclusively and other threads accessing the vma cache will
21 * have mmap_sem held at least for read, so no extra locking
22 * is required to maintain the vma cache.
23 */
24 void vmacache_flush_all(struct mm_struct *mm)
25 {
26 struct task_struct *g, *p;
27
28 count_vm_vmacache_event(VMACACHE_FULL_FLUSHES);
29
30 /*
31 * Single threaded tasks need not iterate the entire
32 * list of process. We can avoid the flushing as well
33 * since the mm's seqnum was increased and don't have
34 * to worry about other threads' seqnum. Current's
35 * flush will occur upon the next lookup.
36 */
37 if (atomic_read(&mm->mm_users) == 1)
38 return;
39
40 rcu_read_lock();
41 for_each_process_thread(g, p) {
42 /*
43 * Only flush the vmacache pointers as the
44 * mm seqnum is already set and curr's will
45 * be set upon invalidation when the next
46 * lookup is done.
47 */
48 if (mm == p->mm)
49 vmacache_flush(p);
50 }
51 rcu_read_unlock();
52 }
53
54 /*
55 * This task may be accessing a foreign mm via (for example)
56 * get_user_pages()->find_vma(). The vmacache is task-local and this
57 * task's vmacache pertains to a different mm (ie, its own). There is
58 * nothing we can do here.
59 *
60 * Also handle the case where a kernel thread has adopted this mm via use_mm().
61 * That kernel thread's vmacache is not applicable to this mm.
62 */
63 static inline bool vmacache_valid_mm(struct mm_struct *mm)
64 {
65 return current->mm == mm && !(current->flags & PF_KTHREAD);
66 }
67
68 void vmacache_update(unsigned long addr, struct vm_area_struct *newvma)
69 {
70 if (vmacache_valid_mm(newvma->vm_mm))
> 71 current->vmacache.vmas[VMACACHE_HASH(addr)] = newvma;
72 }
73
74 static bool vmacache_valid(struct mm_struct *mm)
75 {
76 struct task_struct *curr;
77
78 if (!vmacache_valid_mm(mm))
79 return false;
80
81 curr = current;
82 if (mm->vmacache_seqnum != curr->vmacache.seqnum) {
83 /*
84 * First attempt will always be invalid, initialize
85 * the new cache for this task here.
86 */
87 curr->vmacache.seqnum = mm->vmacache_seqnum;
88 vmacache_flush(curr);
89 return false;
90 }
91 return true;
92 }
93
94 struct vm_area_struct *vmacache_find(struct mm_struct *mm, unsigned long addr)
95 {
96 int idx = VMACACHE_HASH(addr);
97 int i;
98
99 count_vm_vmacache_event(VMACACHE_FIND_CALLS);
100
101 if (!vmacache_valid(mm))
102 return NULL;
103
104 for (i = 0; i < VMACACHE_SIZE; i++) {
105 struct vm_area_struct *vma = current->vmacache.vmas[idx];
106
107 if (vma) {
108 if (WARN_ON_ONCE(vma->vm_mm != mm))
109 break;
110 if (vma->vm_start <= addr && vma->vm_end > addr) {
111 count_vm_vmacache_event(VMACACHE_FIND_HITS);
112 return vma;
113 }
114 }
115 if (++idx == VMACACHE_SIZE)
116 idx = 0;
117 }
118
119 return NULL;
120 }
121
122 #ifndef CONFIG_MMU
123 struct vm_area_struct *vmacache_find_exact(struct mm_struct *mm,
124 unsigned long start,
125 unsigned long end)
126 {
> 127 int idx = VMACACHE_HASH(addr);
---
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: 5480 bytes --]
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [mmotm:master 171/351] mm/vmacache.c:14:39: error: 'PMD_SHIFT' undeclared; did you mean 'PUD_SHIFT'?
2018-07-21 3:59 [mmotm:master 171/351] mm/vmacache.c:14:39: error: 'PMD_SHIFT' undeclared; did you mean 'PUD_SHIFT'? kbuild test robot
@ 2018-07-23 21:57 ` David Rientjes
0 siblings, 0 replies; 2+ messages in thread
From: David Rientjes @ 2018-07-23 21:57 UTC (permalink / raw)
To: kbuild test robot
Cc: kbuild-all, Johannes Weiner, Andrew Morton, Linux Memory Management List
On Sat, 21 Jul 2018, kbuild test robot wrote:
> tree: git://git.cmpxchg.org/linux-mmotm.git master
> head: 51e69b1d3de18116a5dceb6b144444dfdf136dc7
> commit: 77ecf9bc0e3d673d4d561cedc1d01c7a84ef90b7 [171/351] mm, vmacache: hash addresses based on pmd
> config: arm-allnoconfig (attached as .config)
> compiler: arm-linux-gnueabi-gcc (Debian 7.2.0-11) 7.2.0
> reproduce:
> wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> chmod +x ~/bin/make.cross
> git checkout 77ecf9bc0e3d673d4d561cedc1d01c7a84ef90b7
> # save the attached .config to linux build tree
> GCC_VERSION=7.2.0 make.cross ARCH=arm
>
I've got my cross compiler back up and working. This is occurring because
allnconfig is disabling CONFIG_MMU so we don't have PMD_SHIFT (there's
only a pgdir). I'll send patch to fix the build errors.
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2018-07-23 21:57 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-07-21 3:59 [mmotm:master 171/351] mm/vmacache.c:14:39: error: 'PMD_SHIFT' undeclared; did you mean 'PUD_SHIFT'? kbuild test robot
2018-07-23 21:57 ` David Rientjes
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox