linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [mmotm:master 14/264] mm/zsmalloc.c:2415:27: error: 'struct zs_pool' has no member named 'migration_wait'
@ 2019-08-25  2:53 kbuild test robot
  2019-08-26 23:14 ` Andrew Morton
  0 siblings, 1 reply; 2+ messages in thread
From: kbuild test robot @ 2019-08-25  2:53 UTC (permalink / raw)
  To: Henry Burns
  Cc: kbuild-all, Johannes Weiner, Sergey Senozhatsky, Andrew Morton,
	Linux Memory Management List

[-- Attachment #1: Type: text/plain, Size: 5799 bytes --]

tree:   git://git.cmpxchg.org/linux-mmotm.git master
head:   f50a6baf25034cdc74a3c2a919c455076f776944
commit: 5e656681183d9045de7815921012f5731c16eae3 [14/264] mm/zsmalloc.c: fix race condition in zs_destroy_pool
config: i386-randconfig-c003-201934 (attached as .config)
compiler: gcc-7 (Debian 7.4.0-10) 7.4.0
reproduce:
        git checkout 5e656681183d9045de7815921012f5731c16eae3
        # save the attached .config to linux build tree
        make ARCH=i386 

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   In file included from include/linux/mmzone.h:10:0,
                    from include/linux/gfp.h:6,
                    from include/linux/umh.h:4,
                    from include/linux/kmod.h:9,
                    from include/linux/module.h:13,
                    from mm/zsmalloc.c:33:
   mm/zsmalloc.c: In function 'zs_create_pool':
>> mm/zsmalloc.c:2415:27: error: 'struct zs_pool' has no member named 'migration_wait'
     init_waitqueue_head(&pool->migration_wait);
                              ^
   include/linux/wait.h:67:26: note: in definition of macro 'init_waitqueue_head'
      __init_waitqueue_head((wq_head), #wq_head, &__key);  \
                             ^~~~~~~

vim +2415 mm/zsmalloc.c

  2388	
  2389	/**
  2390	 * zs_create_pool - Creates an allocation pool to work from.
  2391	 * @name: pool name to be created
  2392	 *
  2393	 * This function must be called before anything when using
  2394	 * the zsmalloc allocator.
  2395	 *
  2396	 * On success, a pointer to the newly created pool is returned,
  2397	 * otherwise NULL.
  2398	 */
  2399	struct zs_pool *zs_create_pool(const char *name)
  2400	{
  2401		int i;
  2402		struct zs_pool *pool;
  2403		struct size_class *prev_class = NULL;
  2404	
  2405		pool = kzalloc(sizeof(*pool), GFP_KERNEL);
  2406		if (!pool)
  2407			return NULL;
  2408	
  2409		init_deferred_free(pool);
  2410	
  2411		pool->name = kstrdup(name, GFP_KERNEL);
  2412		if (!pool->name)
  2413			goto err;
  2414	
> 2415		init_waitqueue_head(&pool->migration_wait);
  2416	
  2417		if (create_cache(pool))
  2418			goto err;
  2419	
  2420		/*
  2421		 * Iterate reversely, because, size of size_class that we want to use
  2422		 * for merging should be larger or equal to current size.
  2423		 */
  2424		for (i = ZS_SIZE_CLASSES - 1; i >= 0; i--) {
  2425			int size;
  2426			int pages_per_zspage;
  2427			int objs_per_zspage;
  2428			struct size_class *class;
  2429			int fullness = 0;
  2430	
  2431			size = ZS_MIN_ALLOC_SIZE + i * ZS_SIZE_CLASS_DELTA;
  2432			if (size > ZS_MAX_ALLOC_SIZE)
  2433				size = ZS_MAX_ALLOC_SIZE;
  2434			pages_per_zspage = get_pages_per_zspage(size);
  2435			objs_per_zspage = pages_per_zspage * PAGE_SIZE / size;
  2436	
  2437			/*
  2438			 * We iterate from biggest down to smallest classes,
  2439			 * so huge_class_size holds the size of the first huge
  2440			 * class. Any object bigger than or equal to that will
  2441			 * endup in the huge class.
  2442			 */
  2443			if (pages_per_zspage != 1 && objs_per_zspage != 1 &&
  2444					!huge_class_size) {
  2445				huge_class_size = size;
  2446				/*
  2447				 * The object uses ZS_HANDLE_SIZE bytes to store the
  2448				 * handle. We need to subtract it, because zs_malloc()
  2449				 * unconditionally adds handle size before it performs
  2450				 * size class search - so object may be smaller than
  2451				 * huge class size, yet it still can end up in the huge
  2452				 * class because it grows by ZS_HANDLE_SIZE extra bytes
  2453				 * right before class lookup.
  2454				 */
  2455				huge_class_size -= (ZS_HANDLE_SIZE - 1);
  2456			}
  2457	
  2458			/*
  2459			 * size_class is used for normal zsmalloc operation such
  2460			 * as alloc/free for that size. Although it is natural that we
  2461			 * have one size_class for each size, there is a chance that we
  2462			 * can get more memory utilization if we use one size_class for
  2463			 * many different sizes whose size_class have same
  2464			 * characteristics. So, we makes size_class point to
  2465			 * previous size_class if possible.
  2466			 */
  2467			if (prev_class) {
  2468				if (can_merge(prev_class, pages_per_zspage, objs_per_zspage)) {
  2469					pool->size_class[i] = prev_class;
  2470					continue;
  2471				}
  2472			}
  2473	
  2474			class = kzalloc(sizeof(struct size_class), GFP_KERNEL);
  2475			if (!class)
  2476				goto err;
  2477	
  2478			class->size = size;
  2479			class->index = i;
  2480			class->pages_per_zspage = pages_per_zspage;
  2481			class->objs_per_zspage = objs_per_zspage;
  2482			spin_lock_init(&class->lock);
  2483			pool->size_class[i] = class;
  2484			for (fullness = ZS_EMPTY; fullness < NR_ZS_FULLNESS;
  2485								fullness++)
  2486				INIT_LIST_HEAD(&class->fullness_list[fullness]);
  2487	
  2488			prev_class = class;
  2489		}
  2490	
  2491		/* debug only, don't abort if it fails */
  2492		zs_pool_stat_create(pool, name);
  2493	
  2494		if (zs_register_migration(pool))
  2495			goto err;
  2496	
  2497		/*
  2498		 * Not critical since shrinker is only used to trigger internal
  2499		 * defragmentation of the pool which is pretty optional thing.  If
  2500		 * registration fails we still can use the pool normally and user can
  2501		 * trigger compaction manually. Thus, ignore return code.
  2502		 */
  2503		zs_register_shrinker(pool);
  2504	
  2505		return pool;
  2506	
  2507	err:
  2508		zs_destroy_pool(pool);
  2509		return NULL;
  2510	}
  2511	EXPORT_SYMBOL_GPL(zs_create_pool);
  2512	

---
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: 30977 bytes --]

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [mmotm:master 14/264] mm/zsmalloc.c:2415:27: error: 'struct zs_pool' has no member named 'migration_wait'
  2019-08-25  2:53 [mmotm:master 14/264] mm/zsmalloc.c:2415:27: error: 'struct zs_pool' has no member named 'migration_wait' kbuild test robot
@ 2019-08-26 23:14 ` Andrew Morton
  0 siblings, 0 replies; 2+ messages in thread
From: Andrew Morton @ 2019-08-26 23:14 UTC (permalink / raw)
  To: kbuild test robot
  Cc: kbuild-all, Johannes Weiner, Sergey Senozhatsky,
	Linux Memory Management List, Henry Burns

On Sun, 25 Aug 2019 10:53:43 +0800 kbuild test robot <lkp@intel.com> wrote:

> tree:   git://git.cmpxchg.org/linux-mmotm.git master
> head:   f50a6baf25034cdc74a3c2a919c455076f776944
> commit: 5e656681183d9045de7815921012f5731c16eae3 [14/264] mm/zsmalloc.c: fix race condition in zs_destroy_pool
> config: i386-randconfig-c003-201934 (attached as .config)
> compiler: gcc-7 (Debian 7.4.0-10) 7.4.0
> reproduce:
>         git checkout 5e656681183d9045de7815921012f5731c16eae3
>         # save the attached .config to linux build tree
>         make ARCH=i386 
> 
> If you fix the issue, kindly add following tag
> Reported-by: kbuild test robot <lkp@intel.com>
> 
> All errors (new ones prefixed by >>):
> 
>    In file included from include/linux/mmzone.h:10:0,
>                     from include/linux/gfp.h:6,
>                     from include/linux/umh.h:4,
>                     from include/linux/kmod.h:9,
>                     from include/linux/module.h:13,
>                     from mm/zsmalloc.c:33:
>    mm/zsmalloc.c: In function 'zs_create_pool':
> >> mm/zsmalloc.c:2415:27: error: 'struct zs_pool' has no member named 'migration_wait'
>      init_waitqueue_head(&pool->migration_wait);
>                               ^
>    include/linux/wait.h:67:26: note: in definition of macro 'init_waitqueue_head'
>       __init_waitqueue_head((wq_head), #wq_head, &__key);  \

Thanks.

--- a/mm/zsmalloc.c~mm-zsmallocc-fix-build-when-config_compaction=n
+++ a/mm/zsmalloc.c
@@ -2412,7 +2412,9 @@ struct zs_pool *zs_create_pool(const cha
 	if (!pool->name)
 		goto err;
 
+#ifdef CONFIG_COMPACTION
 	init_waitqueue_head(&pool->migration_wait);
+#endif
 
 	if (create_cache(pool))
 		goto err;
_



^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2019-08-26 23:14 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-08-25  2:53 [mmotm:master 14/264] mm/zsmalloc.c:2415:27: error: 'struct zs_pool' has no member named 'migration_wait' kbuild test robot
2019-08-26 23:14 ` Andrew Morton

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox