• Yunsheng Lin's avatar
    page_pool: introduce page_pool_alloc() API · de97502e
    Yunsheng Lin authored
    Currently page pool supports the below use cases:
    use case 1: allocate page without page splitting using
                page_pool_alloc_pages() API if the driver knows
                that the memory it need is always bigger than
                half of the page allocated from page pool.
    use case 2: allocate page frag with page splitting using
                page_pool_alloc_frag() API if the driver knows
                that the memory it need is always smaller than
                or equal to the half of the page allocated from
                page pool.
    
    There is emerging use case [1] & [2] that is a mix of the
    above two case: the driver doesn't know the size of memory it
    need beforehand, so the driver may use something like below to
    allocate memory with least memory utilization and performance
    penalty:
    
    if (size << 1 > max_size)
    	page = page_pool_alloc_pages();
    else
    	page = page_pool_alloc_frag();
    
    To avoid the driver doing something like above, add the
    page_pool_alloc() API to support the above use case, and update
    the true size of memory that is acctually allocated by updating
    '*size' back to the driver in order to avoid exacerbating
    truesize underestimate problem.
    
    Rename page_pool_free() which is used in the destroy process to
    __page_pool_destroy() to avoid confusion with the newly added
    API.
    
    1. https://lore.kernel.org/all/d3ae6bd3537fbce379382ac6a42f67e22f27ece2.1683896626.git.lorenzo@kernel.org/
    2. https://lore.kernel.org/all/20230526054621.18371-3-liangchen.linux@gmail.com/Signed-off-by: default avatarYunsheng Lin <linyunsheng@huawei.com>
    CC: Lorenzo Bianconi <lorenzo@kernel.org>
    CC: Alexander Duyck <alexander.duyck@gmail.com>
    CC: Liang Chen <liangchen.linux@gmail.com>
    CC: Alexander Lobakin <aleksander.lobakin@intel.com>
    Link: https://lore.kernel.org/r/20231020095952.11055-4-linyunsheng@huawei.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    de97502e
page_pool.c 25.2 KB