函数源码

Linux Kernel

v5.5.9

Brick Technologies Co., Ltd

Source File:kernel\dma\direct.c Create Date:2022-07-27 11:32:53
首页 Copyright©Brick

58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
static gfp_t __dma_direct_optimal_gfp_mask(struct device *dev, u64 dma_mask,
        u64 *phys_limit)
{
    u64 dma_limit = min_not_zero(dma_mask, dev->bus_dma_limit);
 
    if (force_dma_unencrypted(dev))
        *phys_limit = __dma_to_phys(dev, dma_limit);
    else
        *phys_limit = dma_to_phys(dev, dma_limit);
 
    /*
     * Optimistically try the zone that the physical address mask falls
     * into first.  If that returns memory that isn't actually addressable
     * we will fallback to the next lower zone and try again.
     *
     * Note that GFP_DMA32 and GFP_DMA are no ops without the corresponding
     * zones.
     */
    if (*phys_limit <= DMA_BIT_MASK(zone_dma_bits))
        return GFP_DMA;
    if (*phys_limit <= DMA_BIT_MASK(32))
        return GFP_DMA32;
    return 0;
}