Re: + iommu-io-pgtable-arm-v7s-request-dma32-memory-and-improve-debugging.patch added to -mm tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Mar 20, 2019 at 2:37 AM <akpm@xxxxxxxxxxxxxxxxxxxx> wrote:
>
>
> The patch titled
>      Subject: iommu/io-pgtable-arm-v7s: request DMA32 memory, and improve debugging
> has been added to the -mm tree.  Its filename is
>      iommu-io-pgtable-arm-v7s-request-dma32-memory-and-improve-debugging.patch
>
> This patch should soon appear at
>     http://ozlabs.org/~akpm/mmots/broken-out/iommu-io-pgtable-arm-v7s-request-dma32-memory-and-improve-debugging.patch
> and later at
>     http://ozlabs.org/~akpm/mmotm/broken-out/iommu-io-pgtable-arm-v7s-request-dma32-memory-and-improve-debugging.patch
>
> Before you just go and hit "reply", please:
>    a) Consider who else should be cc'ed
>    b) Prefer to cc a suitable mailing list as well
>    c) Ideally: find the original patch on the mailing list and do a
>       reply-to-all to that, adding suitable additional cc's
>
> *** Remember to use Documentation/process/submit-checklist.rst when testing your code ***
>
> The -mm tree is included into linux-next and is updated
> there every 3-4 working days
>
> ------------------------------------------------------
> From: Nicolas Boichat <drinkcat@xxxxxxxxxxxx>
> Subject: iommu/io-pgtable-arm-v7s: request DMA32 memory, and improve debugging
>
> IOMMUs using ARMv7 short-descriptor format require page tables (level 1
> and 2) to be allocated within the first 4GB of RAM, even on 64-bit
> systems.
>
> For level 1/2 pages, ensure GFP_DMA32 is used if CONFIG_ZONE_DMA32 is
> defined (e.g.  on arm64 platforms).
>
> For level 2 pages, allocate a slab cache in SLAB_CACHE_DMA32.  Note that
> we do not explicitly pass GFP_DMA[32] to kmem_cache_zalloc, as this is not
> strictly necessary, and would cause a warning in mm/sl*b.c, as we did not
> update GFP_SLAB_BUG_MASK.
>
> Also, print an error when the physical address does not fit in
> 32-bit, to make debugging easier in the future.
>
> Link: http://lkml.kernel.org/r/20181210011504.122604-3-drinkcat@xxxxxxxxxxxx
> Fixes: ad67f5a6545f ("arm64: replace ZONE_DMA with ZONE_DMA32")
> Signed-off-by: Nicolas Boichat <drinkcat@xxxxxxxxxxxx>

This was acked (twice! ,-)) by Will
(https://patchwork.kernel.org/patch/10720489/):
Acked-by: Will Deacon <will.deacon@xxxxxxx>

> Cc: Christoph Hellwig <hch@xxxxxxxxxxxxx>
> Cc: Christoph Lameter <cl@xxxxxxxxx>
> Cc: David Rientjes <rientjes@xxxxxxxxxx>
> Cc: Hsin-Yi Wang <hsinyi@xxxxxxxxxxxx>
> Cc: Huaisheng Ye <yehs1@xxxxxxxxxx>
> Cc: Joerg Roedel <joro@xxxxxxxxxx>
> Cc: Joonsoo Kim <iamjoonsoo.kim@xxxxxxx>
> Cc: Matthew Wilcox <willy@xxxxxxxxxxxxx>
> Cc: Matthias Brugger <matthias.bgg@xxxxxxxxx>
> Cc: Mel Gorman <mgorman@xxxxxxxxxxxxxxxxxxx>
> Cc: Michal Hocko <mhocko@xxxxxxxx>
> Cc: Mike Rapoport <rppt@xxxxxxxxxxxxxxxxxx>
> Cc: Pekka Enberg <penberg@xxxxxxxxxx>
> Cc: Robin Murphy <robin.murphy@xxxxxxx>
> Cc: Sasha Levin <Alexander.Levin@xxxxxxxxxxxxx>
> Cc: Tomasz Figa <tfiga@xxxxxxxxxx>
> Cc: Vlastimil Babka <vbabka@xxxxxxx>
> Cc: Will Deacon <will.deacon@xxxxxxx>
> Cc: Yingjoe Chen <yingjoe.chen@xxxxxxxxxxxx>
> Cc: Yong Wu <yong.wu@xxxxxxxxxxxx>
> Cc: <stable@xxxxxxxxxxxxxxx>
> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
> ---
>
>  drivers/iommu/io-pgtable-arm-v7s.c |   19 +++++++++++++++----
>  1 file changed, 15 insertions(+), 4 deletions(-)
>
> --- a/drivers/iommu/io-pgtable-arm-v7s.c~iommu-io-pgtable-arm-v7s-request-dma32-memory-and-improve-debugging
> +++ a/drivers/iommu/io-pgtable-arm-v7s.c
> @@ -160,6 +160,14 @@
>
>  #define ARM_V7S_TCR_PD1                        BIT(5)
>
> +#ifdef CONFIG_ZONE_DMA32
> +#define ARM_V7S_TABLE_GFP_DMA GFP_DMA32
> +#define ARM_V7S_TABLE_SLAB_FLAGS SLAB_CACHE_DMA32
> +#else
> +#define ARM_V7S_TABLE_GFP_DMA GFP_DMA
> +#define ARM_V7S_TABLE_SLAB_FLAGS SLAB_CACHE_DMA
> +#endif
> +
>  typedef u32 arm_v7s_iopte;
>
>  static bool selftest_running;
> @@ -197,13 +205,16 @@ static void *__arm_v7s_alloc_table(int l
>         void *table = NULL;
>
>         if (lvl == 1)
> -               table = (void *)__get_dma_pages(__GFP_ZERO, get_order(size));
> +               table = (void *)__get_free_pages(
> +                       __GFP_ZERO | ARM_V7S_TABLE_GFP_DMA, get_order(size));
>         else if (lvl == 2)
> -               table = kmem_cache_zalloc(data->l2_tables, gfp | GFP_DMA);
> +               table = kmem_cache_zalloc(data->l2_tables, gfp);
>         phys = virt_to_phys(table);
> -       if (phys != (arm_v7s_iopte)phys)
> +       if (phys != (arm_v7s_iopte)phys) {
>                 /* Doesn't fit in PTE */
> +               dev_err(dev, "Page table does not fit in PTE: %pa", &phys);
>                 goto out_free;
> +       }
>         if (table && !(cfg->quirks & IO_PGTABLE_QUIRK_NO_DMA)) {
>                 dma = dma_map_single(dev, table, size, DMA_TO_DEVICE);
>                 if (dma_mapping_error(dev, dma))
> @@ -733,7 +744,7 @@ static struct io_pgtable *arm_v7s_alloc_
>         data->l2_tables = kmem_cache_create("io-pgtable_armv7s_l2",
>                                             ARM_V7S_TABLE_SIZE(2),
>                                             ARM_V7S_TABLE_SIZE(2),
> -                                           SLAB_CACHE_DMA, NULL);
> +                                           ARM_V7S_TABLE_SLAB_FLAGS, NULL);
>         if (!data->l2_tables)
>                 goto out_free_data;
>
> _
>
> Patches currently in -mm which might be from drinkcat@xxxxxxxxxxxx are
>
> mm-add-support-for-kmem-caches-in-dma32-zone.patch
> iommu-io-pgtable-arm-v7s-request-dma32-memory-and-improve-debugging.patch
> mm-add-sys-kernel-slab-cache-cache_dma32.patch
>



[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux