On Tue, 16 Dec 2014, Fenghua Yu wrote:
> @@ -1,5 +1,6 @@
>  #include <linux/mm.h>
>  #include <linux/gfp.h>
> +#include <linux/slab.h>
>  #include <asm/pgalloc.h>
>  #include <asm/pgtable.h>
>  #include <asm/tlb.h>
> @@ -276,7 +277,27 @@ pgd_t *pgd_alloc(struct mm_struct *mm)
>       pgd_t *pgd;
>       pmd_t *pmds[PREALLOCATED_PMDS];
>  
> +     /*
> +      * Xen paravirt assumes pgd table should be in one page. pgd in
> +      * 64 bit also needs to be in one page.
> +      *
> +      * But PAE without Xen only needs to allocate 256 bytes for pgd.
> +      *
> +      * So if kernel is compiled as PAE model without Xen, we allocate
> +      * 256 bytes for pgd entries to save memory space.
> +      *
> +      * In other cases, one page is allocated for pgd. In theory, a kernel
> +      * in PAE mode not running in Xen could allocate 256 bytes for pgd
> +      * as well. But that will make the allocation and free more complex
> +      * but not useful in reality. To simplify the code and testing, we just
> +      * allocate one page when CONFIG_XEN is enabled regardelss kernel
> +      * is running in Xen or not.
> +      */
> +#if defined(CONFIG_X86_PAE) && !defined(CONFIG_XEN)
> +     pgd = kmalloc(sizeof(pgdval_t) * PTRS_PER_PGD, PGALLOC_GFP);
> +#else
>       pgd = (pgd_t *)__get_free_page(PGALLOC_GFP);
> +#endif
>  
>       if (pgd == NULL)
>               goto out;
> @@ -306,7 +327,11 @@ pgd_t *pgd_alloc(struct mm_struct *mm)
>  out_free_pmds:
>       free_pmds(pmds);
>  out_free_pgd:
> +#if defined(CONFIG_X86_PAE) && !defined(CONFIG_XEN)
> +     kfree(pgd);
> +#else
>       free_page((unsigned long)pgd);
> +#endif
>  out:
>       return NULL;
>  }
> @@ -316,7 +341,12 @@ void pgd_free(struct mm_struct *mm, pgd_t *pgd)
>       pgd_mop_up_pmds(mm, pgd);
>       pgd_dtor(pgd);
>       paravirt_pgd_free(mm, pgd);
> +#if defined(CONFIG_X86_PAE) && !defined(CONFIG_XEN)
> +     kfree(pgd);
> +#else
>       free_page((unsigned long)pgd);
> +#endif

Can you make that please readable with proper inline helpers? This
#ifdef maze is horrible.

Thanks,

        tglx


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to