lkml.org 
[lkml]   [2023]   [Apr]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH v3 3/6] mm: handle poisoning of pfn without struct pages
    Hi,

    kernel test robot noticed the following build errors:

    [auto build test ERROR on awilliam-vfio/for-linus]
    [also build test ERROR on kvmarm/next akpm-mm/mm-everything linus/master v6.3-rc5]
    [cannot apply to awilliam-vfio/next next-20230405]
    [If your patch is applied to the wrong git tree, kindly drop us a note.
    And when submitting patch, we suggest to use '--base' as documented in
    https://git-scm.com/docs/git-format-patch#_base_tree_information]

    url: https://github.com/intel-lab-lkp/linux/commits/ankita-nvidia-com/kvm-determine-memory-type-from-VMA/20230406-020404
    base: https://github.com/awilliam/linux-vfio.git for-linus
    patch link: https://lore.kernel.org/r/20230405180134.16932-4-ankita%40nvidia.com
    patch subject: [PATCH v3 3/6] mm: handle poisoning of pfn without struct pages
    config: x86_64-randconfig-a015-20230403 (https://download.01.org/0day-ci/archive/20230406/202304060452.tpNrPK39-lkp@intel.com/config)
    compiler: gcc-11 (Debian 11.3.0-8) 11.3.0
    reproduce (this is a W=1 build):
    # https://github.com/intel-lab-lkp/linux/commit/25466c8c2fa22d39a08721a24f0cf3bc3059417b
    git remote add linux-review https://github.com/intel-lab-lkp/linux
    git fetch --no-tags linux-review ankita-nvidia-com/kvm-determine-memory-type-from-VMA/20230406-020404
    git checkout 25466c8c2fa22d39a08721a24f0cf3bc3059417b
    # save the config file
    mkdir build_dir && cp config build_dir/.config
    make W=1 O=build_dir ARCH=x86_64 olddefconfig
    make W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash

    If you fix the issue, kindly add following tag where applicable
    | Reported-by: kernel test robot <lkp@intel.com>
    | Link: https://lore.kernel.org/oe-kbuild-all/202304060452.tpNrPK39-lkp@intel.com/

    All errors (new ones prefixed by >>):

    ld: vmlinux.o: in function `memory_failure_pfn':
    >> mm/memory-failure.c:2124: undefined reference to `interval_tree_iter_first'
    >> ld: mm/memory-failure.c:2125: undefined reference to `interval_tree_iter_next'
    ld: vmlinux.o: in function `register_pfn_address_space':
    >> mm/memory-failure.c:2087: undefined reference to `interval_tree_insert'
    ld: vmlinux.o: in function `unregister_pfn_address_space':
    >> mm/memory-failure.c:2105: undefined reference to `interval_tree_remove'


    vim +2124 mm/memory-failure.c

    2065
    2066 /**
    2067 * register_pfn_address_space - Register PA region for poison notification.
    2068 * @pfn_space: structure containing region range and callback function on
    2069 * poison detection.
    2070 *
    2071 * This function is called by a kernel module to register a PA region and
    2072 * a callback function with the kernel. On detection of poison, the
    2073 * kernel code will go through all registered regions and call the
    2074 * appropriate callback function associated with the range. The kernel
    2075 * module is responsible for tracking the poisoned pages.
    2076 *
    2077 * Return: 0 if successfully registered,
    2078 * -EBUSY if the region is already registered
    2079 */
    2080 int register_pfn_address_space(struct pfn_address_space *pfn_space)
    2081 {
    2082 if (!request_mem_region(pfn_space->node.start << PAGE_SHIFT,
    2083 (pfn_space->node.last - pfn_space->node.start + 1) << PAGE_SHIFT, ""))
    2084 return -EBUSY;
    2085
    2086 mutex_lock(&pfn_space_lock);
    > 2087 interval_tree_insert(&pfn_space->node, &pfn_space_itree);
    2088 mutex_unlock(&pfn_space_lock);
    2089
    2090 return 0;
    2091 }
    2092 EXPORT_SYMBOL_GPL(register_pfn_address_space);
    2093
    2094 /**
    2095 * unregister_pfn_address_space - Unregister a PA region from poison
    2096 * notification.
    2097 * @pfn_space: structure containing region range to be unregistered.
    2098 *
    2099 * This function is called by a kernel module to unregister the PA region
    2100 * from the kernel from poison tracking.
    2101 */
    2102 void unregister_pfn_address_space(struct pfn_address_space *pfn_space)
    2103 {
    2104 mutex_lock(&pfn_space_lock);
    > 2105 interval_tree_remove(&pfn_space->node, &pfn_space_itree);
    2106 mutex_unlock(&pfn_space_lock);
    2107 release_mem_region(pfn_space->node.start << PAGE_SHIFT,
    2108 (pfn_space->node.last - pfn_space->node.start + 1) << PAGE_SHIFT);
    2109 }
    2110 EXPORT_SYMBOL_GPL(unregister_pfn_address_space);
    2111
    2112 static int memory_failure_pfn(unsigned long pfn, int flags)
    2113 {
    2114 struct interval_tree_node *node;
    2115 int rc = -EBUSY;
    2116 LIST_HEAD(tokill);
    2117
    2118 mutex_lock(&pfn_space_lock);
    2119 /*
    2120 * Modules registers with MM the address space mapping to the device memory they
    2121 * manage. Iterate to identify exactly which address space has mapped to this
    2122 * failing PFN.
    2123 */
    > 2124 for (node = interval_tree_iter_first(&pfn_space_itree, pfn, pfn); node;
    > 2125 node = interval_tree_iter_next(node, pfn, pfn)) {
    2126 struct pfn_address_space *pfn_space =
    2127 container_of(node, struct pfn_address_space, node);
    2128 rc = 0;
    2129
    2130 /*
    2131 * Modules managing the device memory needs to be conveyed about the
    2132 * memory failure so that the poisoned PFN can be tracked.
    2133 */
    2134 pfn_space->ops->failure(pfn_space, pfn);
    2135
    2136 collect_procs_pgoff(NULL, pfn_space->mapping, pfn, &tokill);
    2137
    2138 unmap_mapping_range(pfn_space->mapping, pfn << PAGE_SHIFT,
    2139 PAGE_SIZE, 0);
    2140 }
    2141 mutex_unlock(&pfn_space_lock);
    2142
    2143 /*
    2144 * Unlike System-RAM there is no possibility to swap in a different
    2145 * physical page at a given virtual address, so all userspace
    2146 * consumption of direct PFN memory necessitates SIGBUS (i.e.
    2147 * MF_MUST_KILL)
    2148 */
    2149 flags |= MF_ACTION_REQUIRED | MF_MUST_KILL;
    2150 kill_procs(&tokill, true, false, pfn, flags);
    2151
    2152 pr_err("%#lx: recovery action for %s: %s\n",
    2153 pfn, action_page_types[MF_MSG_PFN],
    2154 action_name[rc ? MF_FAILED : MF_RECOVERED]);
    2155
    2156 return rc;
    2157 }
    2158

    --
    0-DAY CI Kernel Test Service
    https://github.com/intel/lkp-tests

    \
     
     \ /
      Last update: 2023-04-05 23:09    [W:4.660 / U:0.100 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site