Re: [PATCH v4 5/6] x86/numa: Provide a range-to-target_node lookup facility

From: Thomas Gleixner
Date: Thu Feb 13 2020 - 06:38:02 EST


Dan Williams <dan.j.williams@xxxxxxxxx> writes:
> +/**
> + * numa_move_memblk - Move one numa_memblk from one numa_meminfo to another
> + * @dst: numa_meminfo to move block to
> + * @idx: Index of memblk to remove
> + * @src: numa_meminfo to remove memblk from
> + *
> + * If @dst is non-NULL add it at the @dst->nr_blks index and increment
> + * @dst->nr_blks, then remove it from @src.

This is not correct. It's suggesting that these operations are only
happening when @dst is non-NULL. Remove is unconditional though.

Also this is called with &numa_reserved_meminfo as @dst argument, which is:

> +static struct numa_meminfo numa_reserved_meminfo __initdata_numa;

So how would @dst ever be NULL?

> + */
> +static void __init numa_move_memblk(struct numa_meminfo *dst, int idx,
> + struct numa_meminfo *src)
> +{
> + if (dst) {
> + memcpy(&dst->blk[dst->nr_blks], &src->blk[idx],
> + sizeof(struct numa_memblk));
> + dst->nr_blks++;
> + }
> + numa_remove_memblk_from(idx, src);
> +}

...

> - /* make sure all blocks are inside the limits */
> + /* move / save reserved memory ranges */
> + if (!memblock_overlaps_region(&memblock.memory,
> + bi->start, bi->end - bi->start)) {
> + numa_move_memblk(&numa_reserved_meminfo, i--, mi);

Thanks,

tglx