Hi Andrey,

I love your patch! Yet something to improve:

[auto build test ERROR on linus/master]
[also build test ERROR on v4.18-rc2]
[cannot apply to next-20180625]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improve the system]

url:    
https://github.com/0day-ci/linux/commits/Andrey-Ryabinin/kernel-memremap-kasan-Make-ZONE_DEVICE-with-work-with-KASAN/20180626-023131
config: arm64-allmodconfig (attached as .config)
compiler: aarch64-linux-gnu-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
        # save the attached .config to linux build tree
        GCC_VERSION=7.2.0 make.cross ARCH=arm64 

All error/warnings (new ones prefixed by >>):

   In file included from arch/arm64/include/asm/thread_info.h:30:0,
                    from include/linux/thread_info.h:38,
                    from include/asm-generic/preempt.h:5,
                    from ./arch/arm64/include/generated/asm/preempt.h:1,
                    from include/linux/preempt.h:81,
                    from include/linux/spinlock.h:51,
                    from include/linux/mmzone.h:8,
                    from include/linux/bootmem.h:8,
                    from mm/kasan/kasan_init.c:13:
   mm/kasan/kasan_init.c: In function 'kasan_pmd_table':
>> mm/kasan/kasan_init.c:63:14: error: implicit declaration of function 
>> 'pud_page_vaddr'; did you mean 'pud_page_paddr'? 
>> [-Werror=implicit-function-declaration]
     return __pa(pud_page_vaddr(pud)) == __pa_symbol(kasan_zero_pmd);
                 ^
   arch/arm64/include/asm/memory.h:270:50: note: in definition of macro '__pa'
    #define __pa(x)   __virt_to_phys((unsigned long)(x))
                                                     ^
   mm/kasan/kasan_init.c: In function 'kasan_pte_table':
>> mm/kasan/kasan_init.c:75:14: error: implicit declaration of function 
>> 'pmd_page_vaddr'; did you mean 'pmd_page_paddr'? 
>> [-Werror=implicit-function-declaration]
     return __pa(pmd_page_vaddr(pmd)) == __pa_symbol(kasan_zero_pte);
                 ^
   arch/arm64/include/asm/memory.h:270:50: note: in definition of macro '__pa'
    #define __pa(x)   __virt_to_phys((unsigned long)(x))
                                                     ^
   mm/kasan/kasan_init.c: In function 'zero_pmd_populate':
   mm/kasan/kasan_init.c:122:8: error: implicit declaration of function 
'slab_is_available'; did you mean 'si_mem_available'? 
[-Werror=implicit-function-declaration]
       if (slab_is_available())
           ^~~~~~~~~~~~~~~~~
           si_mem_available
   mm/kasan/kasan_init.c: In function 'kasan_populate_zero_shadow':
>> mm/kasan/kasan_init.c:267:9: error: implicit declaration of function 
>> 'p4d_alloc_one'; did you mean 'pmd_alloc_one'? 
>> [-Werror=implicit-function-declaration]
        p = p4d_alloc_one(&init_mm, addr);
            ^~~~~~~~~~~~~
            pmd_alloc_one
>> mm/kasan/kasan_init.c:267:7: warning: assignment makes pointer from integer 
>> without a cast [-Wint-conversion]
        p = p4d_alloc_one(&init_mm, addr);
          ^
   mm/kasan/kasan_init.c: In function 'kasan_free_pte':
>> mm/kasan/kasan_init.c:292:28: warning: cast to pointer from integer of 
>> different size [-Wint-to-pointer-cast]
     pte_free_kernel(&init_mm, (pte_t *)pmd_page_vaddr(*pmd));
                               ^
   mm/kasan/kasan_init.c: In function 'kasan_free_pmd':
   mm/kasan/kasan_init.c:307:21: warning: cast to pointer from integer of 
different size [-Wint-to-pointer-cast]
     pmd_free(&init_mm, (pmd_t *)pud_page_vaddr(*pud));
                        ^
   cc1: some warnings being treated as errors

vim +63 mm/kasan/kasan_init.c

  > 13  #include <linux/bootmem.h>
    14  #include <linux/init.h>
    15  #include <linux/kasan.h>
    16  #include <linux/kernel.h>
    17  #include <linux/memblock.h>
    18  #include <linux/mm.h>
    19  #include <linux/pfn.h>
    20  
    21  #include <asm/page.h>
    22  #include <asm/pgalloc.h>
    23  
    24  #include "kasan.h"
    25  
    26  /*
    27   * This page serves two purposes:
    28   *   - It used as early shadow memory. The entire shadow region 
populated
    29   *     with this page, before we will be able to setup normal shadow 
memory.
    30   *   - Latter it reused it as zero shadow to cover large ranges of 
memory
    31   *     that allowed to access, but not handled by kasan 
(vmalloc/vmemmap ...).
    32   */
    33  unsigned char kasan_zero_page[PAGE_SIZE] __page_aligned_bss;
    34  
    35  #if CONFIG_PGTABLE_LEVELS > 4
    36  p4d_t kasan_zero_p4d[MAX_PTRS_PER_P4D] __page_aligned_bss;
    37  static inline bool kasan_p4d_table(pgd_t pgd)
    38  {
    39          return __pa(pgd_page_vaddr(pgd)) == __pa_symbol(kasan_zero_p4d);
    40  }
    41  #else
    42  static inline bool kasan_p4d_table(pgd_t pgd)
    43  {
    44          return 0;
    45  }
    46  #endif
    47  #if CONFIG_PGTABLE_LEVELS > 3
    48  pud_t kasan_zero_pud[PTRS_PER_PUD] __page_aligned_bss;
    49  static inline bool kasan_pud_table(p4d_t p4d)
    50  {
    51          return __pa(p4d_page_vaddr(p4d)) == __pa_symbol(kasan_zero_pud);
    52  }
    53  #else
    54  static inline bool kasan_pud_table(p4d_t p4d)
    55  {
    56          return 0;
    57  }
    58  #endif
    59  #if CONFIG_PGTABLE_LEVELS > 2
    60  pmd_t kasan_zero_pmd[PTRS_PER_PMD] __page_aligned_bss;
    61  static inline bool kasan_pmd_table(pud_t pud)
    62  {
  > 63          return __pa(pud_page_vaddr(pud)) == __pa_symbol(kasan_zero_pmd);
    64  }
    65  #else
    66  static inline bool kasan_pmd_table(pud_t pud)
    67  {
    68          return 0;
    69  }
    70  #endif
    71  pte_t kasan_zero_pte[PTRS_PER_PTE] __page_aligned_bss;
    72  
    73  static inline bool kasan_pte_table(pmd_t pmd)
    74  {
  > 75          return __pa(pmd_page_vaddr(pmd)) == __pa_symbol(kasan_zero_pte);
    76  }
    77  
    78  static inline bool kasan_zero_page_entry(pte_t pte)
    79  {
    80          return pte_pfn(pte) == PHYS_PFN(__pa_symbol(kasan_zero_page));
    81  }
    82  
    83  static __init void *early_alloc(size_t size, int node)
    84  {
    85          return memblock_virt_alloc_try_nid(size, size, 
__pa(MAX_DMA_ADDRESS),
    86                                          BOOTMEM_ALLOC_ACCESSIBLE, node);
    87  }
    88  
    89  static void __ref zero_pte_populate(pmd_t *pmd, unsigned long addr,
    90                                  unsigned long end)
    91  {
    92          pte_t *pte = pte_offset_kernel(pmd, addr);
    93          pte_t zero_pte;
    94  
    95          zero_pte = pfn_pte(PFN_DOWN(__pa_symbol(kasan_zero_page)), 
PAGE_KERNEL);
    96          zero_pte = pte_wrprotect(zero_pte);
    97  
    98          while (addr + PAGE_SIZE <= end) {
    99                  set_pte_at(&init_mm, addr, pte, zero_pte);
   100                  addr += PAGE_SIZE;
   101                  pte = pte_offset_kernel(pmd, addr);
   102          }
   103  }
   104  
   105  static int __ref zero_pmd_populate(pud_t *pud, unsigned long addr,
   106                                  unsigned long end)
   107  {
   108          pmd_t *pmd = pmd_offset(pud, addr);
   109          unsigned long next;
   110  
   111          do {
   112                  next = pmd_addr_end(addr, end);
   113  
   114                  if (IS_ALIGNED(addr, PMD_SIZE) && end - addr >= 
PMD_SIZE) {
   115                          pmd_populate_kernel(&init_mm, pmd, 
lm_alias(kasan_zero_pte));
   116                          continue;
   117                  }
   118  
   119                  if (pmd_none(*pmd)) {
   120                          pte_t *p;
   121  
 > 122                          if (slab_is_available())
   123                                  p = pte_alloc_one_kernel(&init_mm, 
addr);
   124                          else
   125                                  p = early_alloc(PAGE_SIZE, 
NUMA_NO_NODE);
   126                          if (!p)
   127                                  return -ENOMEM;
   128  
   129                          pmd_populate_kernel(&init_mm, pmd, p);
   130                  }
   131                  zero_pte_populate(pmd, addr, next);
   132          } while (pmd++, addr = next, addr != end);
   133  
   134          return 0;
   135  }
   136  

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Attachment: .config.gz
Description: application/gzip

Reply via email to