参照元

説明

引数

返り値

参考

実装

struct ion_handle *ion_import_dma_buf(struct ion_client *client, int fd)
{
        struct dma_buf *dmabuf;
        struct ion_buffer *buffer;
        struct ion_handle *handle;
        int ret;
        dmabuf = dma_buf_get(fd);
        if (IS_ERR(dmabuf))
                return ERR_CAST(dmabuf);
        /* if this memory came from ion */
        if (dmabuf->ops != &dma_buf_ops) {
                pr_err("%s: can not import dmabuf from another exporter\n",
                       __func__);
                dma_buf_put(dmabuf);
                return ERR_PTR(-EINVAL);
        }
        buffer = dmabuf->priv;
        mutex_lock(&client->lock);
        /* if a handle exists for this buffer just take a reference to it */
        handle = ion_handle_lookup(client, buffer);
        if (!IS_ERR(handle)) {
                ion_handle_get(handle);
                mutex_unlock(&client->lock);
                goto end;
        }
        handle = ion_handle_create(client, buffer);
        if (IS_ERR(handle)) {
                mutex_unlock(&client->lock);
                goto end;
        }
        ret = ion_handle_add(client, handle);
        mutex_unlock(&client->lock);
        if (ret) {
                ion_handle_put(handle);
                handle = ERR_PTR(ret);
        }
end:
        dma_buf_put(dmabuf);
        return handle;
}
EXPORT_SYMBOL(ion_import_dma_buf);

コメント


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-03-30 (水) 11:26:45