On Tue, May 28, 2024 at 12:55:21PM +0300, Kirill A. Shutemov wrote:
> MADT Multiprocessor Wakeup structure version 1 brings support of CPU

s/of /for /

> offlining: BIOS provides a reset vector where the CPU has to jump to
> for offlining itself. The new TEST mailbox command can be used to test
> whether the CPU offlined itself which means the BIOS has control over
> the CPU and can online it again via the ACPI MADT wakeup method.
> 
> Add CPU offling support for the ACPI MADT wakeup method by implementing

Unknown word [offling] in commit message.

Please introduce a spellchecker into your patch creation workflow.

> custom cpu_die(), play_dead() and stop_this_cpu() SMP operations.
> 
> CPU offlining makes is possible to hand over secondary CPUs over kexec,

s/is /it /

> not limiting the second kernel to a single CPU.

...

> +/*
> + * Make sure asm_acpi_mp_play_dead() is present in the identity mapping at
> + * the same place as in the kernel page tables. asm_acpi_mp_play_dead() 
> switches
> + * to the identity mapping and the function has be present at the same spot 
> in
> + * the virtual address space before and after switching page tables.
> + */
> +static int __init init_transition_pgtable(pgd_t *pgd)

This looks like a generic helper which should be in set_memory.c. And
looking at that file, there's populate_pgd() which does pretty much the
same thing, if I squint real hard.

Let's tone down the duplication.

> +{
> +     pgprot_t prot = PAGE_KERNEL_EXEC_NOENC;
> +     unsigned long vaddr, paddr;
> +     p4d_t *p4d;
> +     pud_t *pud;
> +     pmd_t *pmd;
> +     pte_t *pte;
> +
> +     vaddr = (unsigned long)asm_acpi_mp_play_dead;
> +     pgd += pgd_index(vaddr);
> +     if (!pgd_present(*pgd)) {
> +             p4d = (p4d_t *)alloc_pgt_page(NULL);
> +             if (!p4d)
> +                     return -ENOMEM;
> +             set_pgd(pgd, __pgd(__pa(p4d) | _KERNPG_TABLE));
> +     }
> +     p4d = p4d_offset(pgd, vaddr);
> +     if (!p4d_present(*p4d)) {
> +             pud = (pud_t *)alloc_pgt_page(NULL);
> +             if (!pud)
> +                     return -ENOMEM;
> +             set_p4d(p4d, __p4d(__pa(pud) | _KERNPG_TABLE));
> +     }
> +     pud = pud_offset(p4d, vaddr);
> +     if (!pud_present(*pud)) {
> +             pmd = (pmd_t *)alloc_pgt_page(NULL);
> +             if (!pmd)
> +                     return -ENOMEM;
> +             set_pud(pud, __pud(__pa(pmd) | _KERNPG_TABLE));
> +     }
> +     pmd = pmd_offset(pud, vaddr);
> +     if (!pmd_present(*pmd)) {
> +             pte = (pte_t *)alloc_pgt_page(NULL);
> +             if (!pte)
> +                     return -ENOMEM;
> +             set_pmd(pmd, __pmd(__pa(pte) | _KERNPG_TABLE));
> +     }
> +     pte = pte_offset_kernel(pmd, vaddr);
> +
> +     paddr = __pa(vaddr);
> +     set_pte(pte, pfn_pte(paddr >> PAGE_SHIFT, prot));
> +
> +     return 0;
> +}

-- 
Regards/Gruss,
    Boris.

https://people.kernel.org/tglx/notes-about-netiquette

Reply via email to