On 19 Nov 2021, at 10:15, Zi Yan wrote: > On 19 Nov 2021, at 7:33, Vlastimil Babka wrote: > >> On 11/15/21 20:37, Zi Yan wrote: >>> From: Zi Yan >>> >>> Hi David, >>> >>> You suggested to make alloc_contig_range() deal with pageblock_order instead of >>> MAX_ORDER - 1 and get rid of MAX_ORDER - 1 dependency in virtio_mem[1]. This >>> patchset is my attempt to achieve that. Please take a look and let me know if >>> I am doing it correctly or not. >>> >>> From what my understanding, cma required alignment of >>> max(MAX_ORDER - 1, pageblock_order), because when MIGRATE_CMA was introduced, >>> __free_one_page() does not prevent merging two different pageblocks, when >>> MAX_ORDER - 1 > pageblock_order. But current __free_one_page() implementation >>> does prevent that. >> >> But it does prevent that only for isolated pageblock, not CMA, and yout >> patchset doesn't seem to expand that to CMA? Or am I missing something. > > Yeah, you are right. Originally, I thought preventing merging isolated pageblock > with other types of pageblocks is sufficient, since MIGRATE_CMA is always > converted from MIGRATE_ISOLATE. But that is not true. I will rework the code. > Thanks for pointing this out. > I find that two pageblocks with different migratetypes, like MIGRATE_RECLAIMABLE and MIGRATE_MOVABLE can be merged into a single free page after I checked __free_one_page() in detail and printed pageblock information during buddy page merging. I am not sure what consequence it will cause. Do you have any idea? I will fix it in the next version of this patchset. >> >> >>> It should be OK to just align cma to pageblock_order. >>> alloc_contig_range() relies on MIGRATE_CMA to get free pages, so it can use >>> pageblock_order as alignment too. >>> >>> In terms of virtio_mem, if I understand correctly, it relies on >>> alloc_contig_range() to obtain contiguous free pages and offlines them to reduce >>> guest memory size. As the result of alloc_contig_range() alignment change, >>> virtio_mem should be able to just align PFNs to pageblock_order. >>> >>> Thanks. >>> >>> >>> [1] https://lore.kernel.org/linux-mm/28b57903-fae6-47ac-7e1b-a1dd41421349@redhat.com/ >>> >>> Zi Yan (3): >>> mm: cma: alloc_contig_range: use pageblock_order as the single >>> alignment. >>> drivers: virtio_mem: use pageblock size as the minimum virtio_mem >>> size. >>> arch: powerpc: adjust fadump alignment to be pageblock aligned. >>> >>> arch/powerpc/include/asm/fadump-internal.h | 4 +--- >>> drivers/virtio/virtio_mem.c | 6 ++---- >>> include/linux/mmzone.h | 5 +---- >>> kernel/dma/contiguous.c | 2 +- >>> mm/cma.c | 6 ++---- >>> mm/page_alloc.c | 12 +++++------- >>> 6 files changed, 12 insertions(+), 23 deletions(-) >>> > > -- > Best Regards, > Yan, Zi -- Best Regards, Yan, Zi