dmam_pool_create

来源:互联网 发布:淘宝加盟公司靠谱吗 编辑:程序博客网 时间:2024/06/18 18:29
前面讲了用dma_pool_create申请的pool最后都要用dma_pool_free 来释放的。kernel能不能自动在driver detach的时候自动调用dma_pool_free 呢?
答案是肯定的。
这样在使用dma_pool的时候就推荐使用dmam_pool_create
struct dma_pool *dmam_pool_create(const char *name, struct device *dev,
                  size_t size, size_t align, size_t allocation)
{
    struct dma_pool **ptr, *pool;

    ptr = devres_alloc(dmam_pool_release, sizeof(*ptr), GFP_KERNEL);
    if (!ptr)
        return NULL;

    pool = *ptr = dma_pool_create(name, dev, size, align, allocation);
    if (pool)
        devres_add(dev, ptr);
    else
        devres_free(ptr);

    return pool;
}
用这个函数申请的pool在driver detach的时候会自动调用dmam_pool_release,这个是由devres_alloc 来决定的。这样在driver detach的时候就会自动调用dmam_pool_release
static void dmam_pool_release(struct device *dev, void *res)
{
    struct dma_pool *pool = *(struct dma_pool **)res;

    dma_pool_destroy(pool);
}
在dmam_pool_release 中就会自动调用dma_pool_destroy


0 0
原创粉丝点击