[mmotm:master 171/351] mm/vmacache.c:14:39: error: 'PMD_SHIFT' undeclared; did you mean 'PUD_SHIFT'?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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: .config.gz
Description: application/gzip


[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux