[PATCH 01/10] ARM: change ARM_DMA_ZONE_SIZE into a variable

Barry Song 21cnbao at gmail.com
Tue Jul 5 22:48:40 EDT 2011


2011/7/6 Nicolas Pitre <nicolas.pitre at linaro.org>:
> Having this value defined at compile time prevents multiple machines with
> conflicting definitions to coexist.  Move it to a variable in preparation
> for having a per machine value selected at run time.  This is relevant
> only when CONFIG_ZONE_DMA is selected.
>
> Signed-off-by: Nicolas Pitre <nicolas.pitre at linaro.org>

that is definitely good. i am not sure whether it will be better if
dma zone becomes a property in memory node of DT.

        memory {
                reg = <0x00000000 0x20000000>;
                dma_zone = <0x00000000 0x10000000>;
        };

> ---
>  arch/arm/include/asm/dma.h    |    7 ++++---
>  arch/arm/include/asm/memory.h |    7 +++++--
>  arch/arm/mm/init.c            |   20 +++++++++++++-------
>  3 files changed, 22 insertions(+), 12 deletions(-)
>
> diff --git a/arch/arm/include/asm/dma.h b/arch/arm/include/asm/dma.h
> index 4200554..1d34c11 100644
> --- a/arch/arm/include/asm/dma.h
> +++ b/arch/arm/include/asm/dma.h
> @@ -6,10 +6,11 @@
>  /*
>  * This is the maximum virtual address which can be DMA'd from.
>  */
> -#ifndef ARM_DMA_ZONE_SIZE
> -#define MAX_DMA_ADDRESS        0xffffffff
> +#ifndef CONFIG_ZONE_DMA
> +#define MAX_DMA_ADDRESS        0xffffffffUL
>  #else
> -#define MAX_DMA_ADDRESS        (PAGE_OFFSET + ARM_DMA_ZONE_SIZE)
> +extern unsigned long arm_dma_zone_size;
> +#define MAX_DMA_ADDRESS        (PAGE_OFFSET + arm_dma_zone_size)
>  #endif
>
>  #ifdef CONFIG_ISA_DMA_API
> diff --git a/arch/arm/include/asm/memory.h b/arch/arm/include/asm/memory.h
> index af44a8f..deb2eaa 100644
> --- a/arch/arm/include/asm/memory.h
> +++ b/arch/arm/include/asm/memory.h
> @@ -209,10 +209,13 @@ static inline unsigned long __phys_to_virt(unsigned long x)
>  * allocations.  This must be the smallest DMA mask in the system,
>  * so a successful GFP_DMA allocation will always satisfy this.
>  */
> -#ifndef ARM_DMA_ZONE_SIZE
> +#ifndef CONFIG_ZONE_DMA
>  #define ISA_DMA_THRESHOLD      (0xffffffffULL)
>  #else
> -#define ISA_DMA_THRESHOLD      (PHYS_OFFSET + ARM_DMA_ZONE_SIZE - 1)
> +#define ISA_DMA_THRESHOLD      ({ \
> +       extern unsigned long arm_dma_zone_size; \
> +       arm_dma_zone_size ? \
> +               (PHYS_OFFSET + arm_dma_zone_size - 1) : 0xffffffffULL; })
>  #endif
>
>  /*
> diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c
> index c19571c..a14caff 100644
> --- a/arch/arm/mm/init.c
> +++ b/arch/arm/mm/init.c
> @@ -34,6 +34,15 @@
>
>  #include "mm.h"
>
> +#ifdef CONFIG_ZONE_DMA
> +#ifdef ARM_DMA_ZONE_SIZE
> +unsigned long arm_dma_zone_size = ARM_DMA_ZONE_SIZE;
> +#else
> +unsigned long arm_dma_zone_size __read_mostly;
> +#endif
> +EXPORT_SYMBOL(arm_dma_zone_size);
> +#endif
> +
>  static unsigned long phys_initrd_start __initdata = 0;
>  static unsigned long phys_initrd_size __initdata = 0;
>
> @@ -267,17 +276,14 @@ static void __init arm_bootmem_free(unsigned long min, unsigned long max_low,
>  #endif
>        }
>
> -#ifdef ARM_DMA_ZONE_SIZE
> -#ifndef CONFIG_ZONE_DMA
> -#error ARM_DMA_ZONE_SIZE set but no DMA zone to limit allocations
> -#endif
> -
> +#ifdef CONFIG_ZONE_DMA
>        /*
>         * Adjust the sizes according to any special requirements for
>         * this machine type.
>         */
> -       arm_adjust_dma_zone(zone_size, zhole_size,
> -               ARM_DMA_ZONE_SIZE >> PAGE_SHIFT);
> +       if (arm_dma_zone_size)
> +               arm_adjust_dma_zone(zone_size, zhole_size,
> +                       arm_dma_zone_size >> PAGE_SHIFT);
>  #endif
>
>        free_area_init_node(0, zone_size, min, zhole_size);
> --
> 1.7.4
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
>



More information about the linux-arm-kernel mailing list