Merge 5.5-rc1 into android-mainline
Linux 5.5-rc1 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com> Change-Id: I6f952ebdd40746115165a2f99bab340482f5c237
This commit is contained in:
@@ -42,6 +42,18 @@ struct dma_buf_ops {
|
||||
*/
|
||||
bool cache_sgt_mapping;
|
||||
|
||||
/**
|
||||
* @dynamic_mapping:
|
||||
*
|
||||
* If true the framework makes sure that the map/unmap_dma_buf
|
||||
* callbacks are always called with the dma_resv object locked.
|
||||
*
|
||||
* If false the framework makes sure that the map/unmap_dma_buf
|
||||
* callbacks are always called without the dma_resv object locked.
|
||||
* Mutual exclusive with @cache_sgt_mapping.
|
||||
*/
|
||||
bool dynamic_mapping;
|
||||
|
||||
/**
|
||||
* @attach:
|
||||
*
|
||||
@@ -109,6 +121,9 @@ struct dma_buf_ops {
|
||||
* any other kind of sharing that the exporter might wish to make
|
||||
* available to buffer-users.
|
||||
*
|
||||
* This is always called with the dmabuf->resv object locked when
|
||||
* the dynamic_mapping flag is true.
|
||||
*
|
||||
* Returns:
|
||||
*
|
||||
* A &sg_table scatter list of or the backing storage of the DMA buffer,
|
||||
@@ -338,14 +353,16 @@ struct dma_buf_ops {
|
||||
* struct dma_buf - shared buffer object
|
||||
* @size: size of the buffer
|
||||
* @file: file pointer used for sharing buffers across, and for refcounting.
|
||||
* @attachments: list of dma_buf_attachment that denotes all devices attached.
|
||||
* @attachments: list of dma_buf_attachment that denotes all devices attached,
|
||||
* protected by dma_resv lock.
|
||||
* @ops: dma_buf_ops associated with this buffer object.
|
||||
* @lock: used internally to serialize list manipulation, attach/detach and
|
||||
* vmap/unmap, and accesses to name
|
||||
* vmap/unmap
|
||||
* @vmapping_counter: used internally to refcnt the vmaps
|
||||
* @vmap_ptr: the current vmap ptr if vmapping_counter > 0
|
||||
* @exp_name: name of the exporter; useful for debugging.
|
||||
* @name: userspace-provided name; useful for accounting and debugging.
|
||||
* @name: userspace-provided name; useful for accounting and debugging,
|
||||
* protected by @resv.
|
||||
* @owner: pointer to exporter module; used for refcounting when exporter is a
|
||||
* kernel module.
|
||||
* @list_node: node for dma_buf accounting and debugging.
|
||||
@@ -394,10 +411,12 @@ struct dma_buf {
|
||||
* struct dma_buf_attachment - holds device-buffer attachment data
|
||||
* @dmabuf: buffer for this attachment.
|
||||
* @dev: device attached to the buffer.
|
||||
* @node: list of dma_buf_attachment.
|
||||
* @node: list of dma_buf_attachment, protected by dma_resv lock of the dmabuf.
|
||||
* @sgt: cached mapping.
|
||||
* @dir: direction of cached mapping.
|
||||
* @priv: exporter specific attachment data.
|
||||
* @dynamic_mapping: true if dma_buf_map/unmap_attachment() is called with the
|
||||
* dma_resv lock held.
|
||||
* @dma_map_attrs: DMA attributes to be used when the exporter maps the buffer
|
||||
* through dma_buf_map_attachment.
|
||||
*
|
||||
@@ -416,6 +435,7 @@ struct dma_buf_attachment {
|
||||
struct list_head node;
|
||||
struct sg_table *sgt;
|
||||
enum dma_data_direction dir;
|
||||
bool dynamic_mapping;
|
||||
void *priv;
|
||||
unsigned long dma_map_attrs;
|
||||
};
|
||||
@@ -468,10 +488,40 @@ static inline void get_dma_buf(struct dma_buf *dmabuf)
|
||||
get_file(dmabuf->file);
|
||||
}
|
||||
|
||||
/**
|
||||
* dma_buf_is_dynamic - check if a DMA-buf uses dynamic mappings.
|
||||
* @dmabuf: the DMA-buf to check
|
||||
*
|
||||
* Returns true if a DMA-buf exporter wants to be called with the dma_resv
|
||||
* locked for the map/unmap callbacks, false if it doesn't wants to be called
|
||||
* with the lock held.
|
||||
*/
|
||||
static inline bool dma_buf_is_dynamic(struct dma_buf *dmabuf)
|
||||
{
|
||||
return dmabuf->ops->dynamic_mapping;
|
||||
}
|
||||
|
||||
/**
|
||||
* dma_buf_attachment_is_dynamic - check if a DMA-buf attachment uses dynamic
|
||||
* mappinsg
|
||||
* @attach: the DMA-buf attachment to check
|
||||
*
|
||||
* Returns true if a DMA-buf importer wants to call the map/unmap functions with
|
||||
* the dma_resv lock held.
|
||||
*/
|
||||
static inline bool
|
||||
dma_buf_attachment_is_dynamic(struct dma_buf_attachment *attach)
|
||||
{
|
||||
return attach->dynamic_mapping;
|
||||
}
|
||||
|
||||
struct dma_buf_attachment *dma_buf_attach(struct dma_buf *dmabuf,
|
||||
struct device *dev);
|
||||
struct device *dev);
|
||||
struct dma_buf_attachment *
|
||||
dma_buf_dynamic_attach(struct dma_buf *dmabuf, struct device *dev,
|
||||
bool dynamic_mapping);
|
||||
void dma_buf_detach(struct dma_buf *dmabuf,
|
||||
struct dma_buf_attachment *dmabuf_attach);
|
||||
struct dma_buf_attachment *attach);
|
||||
|
||||
struct dma_buf *dma_buf_export(const struct dma_buf_export_info *exp_info);
|
||||
|
||||
@@ -483,6 +533,7 @@ struct sg_table *dma_buf_map_attachment(struct dma_buf_attachment *,
|
||||
enum dma_data_direction);
|
||||
void dma_buf_unmap_attachment(struct dma_buf_attachment *, struct sg_table *,
|
||||
enum dma_data_direction);
|
||||
void dma_buf_move_notify(struct dma_buf *dma_buf);
|
||||
int dma_buf_begin_cpu_access(struct dma_buf *dma_buf,
|
||||
enum dma_data_direction dir);
|
||||
int dma_buf_begin_cpu_access_partial(struct dma_buf *dma_buf,
|
||||
|
Reference in New Issue
Block a user