lkml.org 
[lkml]   [2021]   [Sep]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Date
    SubjectRe: [PATCH net-next 1/7] page_pool: disable dma mapping support for 32-bit arch with 64-bit DMA
    (+cc Matthew) but this looks safe to me.

    On Wed, 22 Sept 2021 at 12:43, Yunsheng Lin <linyunsheng@huawei.com> wrote:
    >
    > As the 32-bit arch with 64-bit DMA seems to rare those days,
    > and page pool is carrying a lot of code and complexity for
    > systems that possibly don't exist.
    >
    > So disable dma mapping support for such systems, if drivers
    > really want to work on such systems, they have to implement
    > their own DMA-mapping fallback tracking outside page_pool.
    >
    > Signed-off-by: Yunsheng Lin <linyunsheng@huawei.com>
    > ---
    > include/linux/mm_types.h | 13 +------------
    > include/net/page_pool.h | 12 +-----------
    > net/core/page_pool.c | 10 ++++++----
    > 3 files changed, 8 insertions(+), 27 deletions(-)
    >
    > diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h
    > index 7f8ee09c711f..436e0946d691 100644
    > --- a/include/linux/mm_types.h
    > +++ b/include/linux/mm_types.h
    > @@ -104,18 +104,7 @@ struct page {
    > struct page_pool *pp;
    > unsigned long _pp_mapping_pad;
    > unsigned long dma_addr;
    > - union {
    > - /**
    > - * dma_addr_upper: might require a 64-bit
    > - * value on 32-bit architectures.
    > - */
    > - unsigned long dma_addr_upper;
    > - /**
    > - * For frag page support, not supported in
    > - * 32-bit architectures with 64-bit DMA.
    > - */
    > - atomic_long_t pp_frag_count;
    > - };
    > + atomic_long_t pp_frag_count;
    > };
    > struct { /* slab, slob and slub */
    > union {
    > diff --git a/include/net/page_pool.h b/include/net/page_pool.h
    > index a4082406a003..3855f069627f 100644
    > --- a/include/net/page_pool.h
    > +++ b/include/net/page_pool.h
    > @@ -216,24 +216,14 @@ static inline void page_pool_recycle_direct(struct page_pool *pool,
    > page_pool_put_full_page(pool, page, true);
    > }
    >
    > -#define PAGE_POOL_DMA_USE_PP_FRAG_COUNT \
    > - (sizeof(dma_addr_t) > sizeof(unsigned long))
    > -
    > static inline dma_addr_t page_pool_get_dma_addr(struct page *page)
    > {
    > - dma_addr_t ret = page->dma_addr;
    > -
    > - if (PAGE_POOL_DMA_USE_PP_FRAG_COUNT)
    > - ret |= (dma_addr_t)page->dma_addr_upper << 16 << 16;
    > -
    > - return ret;
    > + return page->dma_addr;
    > }
    >
    > static inline void page_pool_set_dma_addr(struct page *page, dma_addr_t addr)
    > {
    > page->dma_addr = addr;
    > - if (PAGE_POOL_DMA_USE_PP_FRAG_COUNT)
    > - page->dma_addr_upper = upper_32_bits(addr);
    > }
    >
    > static inline void page_pool_set_frag_count(struct page *page, long nr)
    > diff --git a/net/core/page_pool.c b/net/core/page_pool.c
    > index 1a6978427d6c..a65bd7972e37 100644
    > --- a/net/core/page_pool.c
    > +++ b/net/core/page_pool.c
    > @@ -49,6 +49,12 @@ static int page_pool_init(struct page_pool *pool,
    > * which is the XDP_TX use-case.
    > */
    > if (pool->p.flags & PP_FLAG_DMA_MAP) {
    > + /* DMA-mapping is not supported on 32-bit systems with
    > + * 64-bit DMA mapping.
    > + */
    > + if (sizeof(dma_addr_t) > sizeof(unsigned long))
    > + return -EINVAL;
    > +
    > if ((pool->p.dma_dir != DMA_FROM_DEVICE) &&
    > (pool->p.dma_dir != DMA_BIDIRECTIONAL))
    > return -EINVAL;
    > @@ -69,10 +75,6 @@ static int page_pool_init(struct page_pool *pool,
    > */
    > }
    >
    > - if (PAGE_POOL_DMA_USE_PP_FRAG_COUNT &&
    > - pool->p.flags & PP_FLAG_PAGE_FRAG)
    > - return -EINVAL;
    > -
    > if (ptr_ring_init(&pool->ring, ring_qsize, GFP_KERNEL) < 0)
    > return -ENOMEM;
    >
    > --
    > 2.33.0
    >

    Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>

    \
     
     \ /
      Last update: 2022-09-17 16:11    [W:4.379 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site