Loading drivers/gpu/msm/adreno_dispatch.c +0 −119 Original line number Diff line number Diff line Loading @@ -357,13 +357,6 @@ static inline void _pop_drawobj(struct adreno_context *drawctxt) drawctxt->queued--; } static void _retire_sparseobj(struct kgsl_drawobj_sparse *sparseobj, struct adreno_context *drawctxt) { kgsl_sparse_bind(drawctxt->base.proc_priv, sparseobj); _retire_timestamp(DRAWOBJ(sparseobj)); } static int _retire_markerobj(struct kgsl_drawobj_cmd *cmdobj, struct adreno_context *drawctxt) { Loading Loading @@ -708,76 +701,6 @@ static int sendcmd(struct adreno_device *adreno_dev, return 0; } /* * Retires all sync objs from the sparse context * queue and returns one of the below * a) next sparseobj * b) -EAGAIN for syncobj with syncpoints pending * c) -EINVAL for unexpected drawobj * d) NULL for no sparseobj */ static struct kgsl_drawobj_sparse *_get_next_sparseobj( struct adreno_context *drawctxt) { struct kgsl_drawobj *drawobj; unsigned int i = drawctxt->drawqueue_head; int ret = 0; if (drawctxt->drawqueue_head == drawctxt->drawqueue_tail) return NULL; for (i = drawctxt->drawqueue_head; i != drawctxt->drawqueue_tail; i = DRAWQUEUE_NEXT(i, ADRENO_CONTEXT_DRAWQUEUE_SIZE)) { drawobj = drawctxt->drawqueue[i]; if (drawobj == NULL) return NULL; if (drawobj->type == SYNCOBJ_TYPE) ret = _retire_syncobj(SYNCOBJ(drawobj), drawctxt); else if (drawobj->type == SPARSEOBJ_TYPE) return SPARSEOBJ(drawobj); else return ERR_PTR(-EINVAL); if (ret == -EAGAIN) return ERR_PTR(-EAGAIN); continue; } return NULL; } static int _process_drawqueue_sparse( struct adreno_context *drawctxt) { struct kgsl_drawobj_sparse *sparseobj; int ret = 0; unsigned int i; for (i = 0; i < ADRENO_CONTEXT_DRAWQUEUE_SIZE; i++) { spin_lock(&drawctxt->lock); sparseobj = _get_next_sparseobj(drawctxt); if (IS_ERR_OR_NULL(sparseobj)) { if (IS_ERR(sparseobj)) ret = PTR_ERR(sparseobj); spin_unlock(&drawctxt->lock); return ret; } _pop_drawobj(drawctxt); spin_unlock(&drawctxt->lock); _retire_sparseobj(sparseobj, drawctxt); } return 0; } /** * dispatcher_context_sendcmds() - Send commands from a context to the GPU * @adreno_dev: Pointer to the adreno device struct Loading @@ -797,9 +720,6 @@ static int dispatcher_context_sendcmds(struct adreno_device *adreno_dev, int inflight = _drawqueue_inflight(dispatch_q); unsigned int timestamp; if (drawctxt->base.flags & KGSL_CONTEXT_SPARSE) return _process_drawqueue_sparse(drawctxt); if (dispatch_q->inflight >= inflight) { spin_lock(&drawctxt->lock); _process_drawqueue_get_next_drawobj(drawctxt); Loading Loading @@ -1264,31 +1184,6 @@ static void _queue_drawobj(struct adreno_context *drawctxt, trace_adreno_cmdbatch_queued(drawobj, drawctxt->queued); } static int _queue_sparseobj(struct adreno_device *adreno_dev, struct adreno_context *drawctxt, struct kgsl_drawobj_sparse *sparseobj, uint32_t *timestamp, unsigned int user_ts) { struct kgsl_drawobj *drawobj = DRAWOBJ(sparseobj); int ret; ret = get_timestamp(drawctxt, drawobj, timestamp, user_ts); if (ret) return ret; /* * See if we can fastpath this thing - if nothing is * queued bind/unbind without queueing the context */ if (!drawctxt->queued) return 1; drawctxt->queued_timestamp = *timestamp; _queue_drawobj(drawctxt, drawobj); return 0; } static int _queue_markerobj(struct adreno_device *adreno_dev, struct adreno_context *drawctxt, struct kgsl_drawobj_cmd *markerobj, uint32_t *timestamp, unsigned int user_ts) Loading Loading @@ -1466,20 +1361,6 @@ int adreno_dispatcher_queue_cmds(struct kgsl_device_private *dev_priv, _queue_syncobj(drawctxt, SYNCOBJ(drawobj[i]), timestamp); break; case SPARSEOBJ_TYPE: ret = _queue_sparseobj(adreno_dev, drawctxt, SPARSEOBJ(drawobj[i]), timestamp, user_ts); if (ret == 1) { spin_unlock(&drawctxt->lock); _retire_sparseobj(SPARSEOBJ(drawobj[i]), drawctxt); return 0; } else if (ret) { spin_unlock(&drawctxt->lock); return ret; } break; default: spin_unlock(&drawctxt->lock); return -EINVAL; Loading drivers/gpu/msm/adreno_drawctxt.c +1 −2 Original line number Diff line number Diff line Loading @@ -328,8 +328,7 @@ adreno_drawctxt_create(struct kgsl_device_private *dev_priv, KGSL_CONTEXT_IFH_NOP | KGSL_CONTEXT_SECURE | KGSL_CONTEXT_PREEMPT_STYLE_MASK | KGSL_CONTEXT_NO_SNAPSHOT | KGSL_CONTEXT_SPARSE); KGSL_CONTEXT_NO_SNAPSHOT); /* Check for errors before trying to initialize */ Loading drivers/gpu/msm/kgsl.c +2 −789 File changed.Preview size limit exceeded, changes collapsed. Show changes drivers/gpu/msm/kgsl.h +5 −41 Original line number Diff line number Diff line Loading @@ -31,7 +31,6 @@ #define KGSL_DRAWOBJ_END_OF_FRAME KGSL_CMDBATCH_END_OF_FRAME #define KGSL_DRAWOBJ_SYNC KGSL_CMDBATCH_SYNC #define KGSL_DRAWOBJ_PWR_CONSTRAINT KGSL_CMDBATCH_PWR_CONSTRAINT #define KGSL_DRAWOBJ_SPARSE KGSL_CMDBATCH_SPARSE #define kgsl_drawobj_profiling_buffer kgsl_cmdbatch_profiling_buffer Loading Loading @@ -90,7 +89,6 @@ static inline void KGSL_STATS_ADD(uint64_t size, atomic_long_t *stat, #define KGSL_MAX_NUMIBS 100000 #define KGSL_MAX_SYNCPOINTS 32 #define KGSL_MAX_SPARSE 1000 struct kgsl_device; struct kgsl_context; Loading Loading @@ -197,7 +195,6 @@ struct kgsl_memdesc_ops { * @attrs: dma attributes for this memory * @pages: An array of pointers to allocated pages * @page_count: Total number of pages allocated * @cur_bindings: Number of sparse pages actively bound */ struct kgsl_memdesc { struct kgsl_pagetable *pagetable; Loading @@ -216,7 +213,6 @@ struct kgsl_memdesc { unsigned long attrs; struct page **pages; unsigned int page_count; unsigned int cur_bindings; }; /** Loading Loading @@ -257,8 +253,6 @@ struct kgsl_global_memdesc { * @dev_priv: back pointer to the device file that created this entry. * @metadata: String containing user specified metadata for the entry * @work: Work struct used to schedule a kgsl_mem_entry_put in atomic contexts * @bind_lock: Lock for sparse memory bindings * @bind_tree: RB Tree for sparse memory bindings */ struct kgsl_mem_entry { struct kref refcount; Loading @@ -270,8 +264,11 @@ struct kgsl_mem_entry { int pending_free; char metadata[KGSL_GPUOBJ_ALLOC_METADATA_MAX + 1]; struct work_struct work; spinlock_t bind_lock; struct rb_root bind_tree; /** * @mapped: The number of bytes in this entry that are mapped to * userspace */ u64 mapped; }; struct kgsl_device_private; Loading Loading @@ -331,24 +328,6 @@ struct kgsl_event_group { void *priv; }; /** * struct sparse_bind_object - Bind metadata * @node: Node for the rb tree * @p_memdesc: Physical memdesc bound to * @v_off: Offset of bind in the virtual entry * @p_off: Offset of bind in the physical memdesc * @size: Size of the bind * @flags: Flags for the bind */ struct sparse_bind_object { struct rb_node node; struct kgsl_memdesc *p_memdesc; uint64_t v_off; uint64_t p_off; uint64_t size; uint64_t flags; }; /** * struct submission_info - Container for submission statistics * @inflight: Number of commands that are inflight Loading Loading @@ -447,21 +426,6 @@ long kgsl_ioctl_gpu_command(struct kgsl_device_private *dev_priv, long kgsl_ioctl_gpuobj_set_info(struct kgsl_device_private *dev_priv, unsigned int cmd, void *data); long kgsl_ioctl_sparse_phys_alloc(struct kgsl_device_private *dev_priv, unsigned int cmd, void *data); long kgsl_ioctl_sparse_phys_free(struct kgsl_device_private *dev_priv, unsigned int cmd, void *data); long kgsl_ioctl_sparse_virt_alloc(struct kgsl_device_private *dev_priv, unsigned int cmd, void *data); long kgsl_ioctl_sparse_virt_free(struct kgsl_device_private *dev_priv, unsigned int cmd, void *data); long kgsl_ioctl_sparse_bind(struct kgsl_device_private *dev_priv, unsigned int cmd, void *data); long kgsl_ioctl_sparse_unbind(struct kgsl_device_private *dev_priv, unsigned int cmd, void *data); long kgsl_ioctl_gpu_sparse_command(struct kgsl_device_private *dev_priv, unsigned int cmd, void *data); void kgsl_mem_entry_destroy(struct kref *kref); void kgsl_get_egl_counts(struct kgsl_mem_entry *entry, Loading drivers/gpu/msm/kgsl_compat.c +8 −8 Original line number Diff line number Diff line // SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2013-2019, The Linux Foundation. All rights reserved. * Copyright (c) 2013-2020, The Linux Foundation. All rights reserved. */ #include "kgsl_device.h" Loading Loading @@ -339,19 +339,19 @@ static const struct kgsl_ioctl kgsl_compat_ioctl_funcs[] = { KGSL_IOCTL_FUNC(IOCTL_KGSL_GPU_COMMAND, kgsl_ioctl_gpu_command), KGSL_IOCTL_FUNC(IOCTL_KGSL_GPUOBJ_SET_INFO, kgsl_ioctl_gpuobj_set_info), NULL), KGSL_IOCTL_FUNC(IOCTL_KGSL_SPARSE_PHYS_ALLOC, kgsl_ioctl_sparse_phys_alloc), NULL), KGSL_IOCTL_FUNC(IOCTL_KGSL_SPARSE_PHYS_FREE, kgsl_ioctl_sparse_phys_free), NULL), KGSL_IOCTL_FUNC(IOCTL_KGSL_SPARSE_VIRT_ALLOC, kgsl_ioctl_sparse_virt_alloc), NULL), KGSL_IOCTL_FUNC(IOCTL_KGSL_SPARSE_VIRT_FREE, kgsl_ioctl_sparse_virt_free), NULL), KGSL_IOCTL_FUNC(IOCTL_KGSL_SPARSE_BIND, kgsl_ioctl_sparse_bind), NULL), KGSL_IOCTL_FUNC(IOCTL_KGSL_GPU_SPARSE_COMMAND, kgsl_ioctl_gpu_sparse_command), NULL), }; long kgsl_compat_ioctl(struct file *filep, unsigned int cmd, unsigned long arg) Loading Loading
drivers/gpu/msm/adreno_dispatch.c +0 −119 Original line number Diff line number Diff line Loading @@ -357,13 +357,6 @@ static inline void _pop_drawobj(struct adreno_context *drawctxt) drawctxt->queued--; } static void _retire_sparseobj(struct kgsl_drawobj_sparse *sparseobj, struct adreno_context *drawctxt) { kgsl_sparse_bind(drawctxt->base.proc_priv, sparseobj); _retire_timestamp(DRAWOBJ(sparseobj)); } static int _retire_markerobj(struct kgsl_drawobj_cmd *cmdobj, struct adreno_context *drawctxt) { Loading Loading @@ -708,76 +701,6 @@ static int sendcmd(struct adreno_device *adreno_dev, return 0; } /* * Retires all sync objs from the sparse context * queue and returns one of the below * a) next sparseobj * b) -EAGAIN for syncobj with syncpoints pending * c) -EINVAL for unexpected drawobj * d) NULL for no sparseobj */ static struct kgsl_drawobj_sparse *_get_next_sparseobj( struct adreno_context *drawctxt) { struct kgsl_drawobj *drawobj; unsigned int i = drawctxt->drawqueue_head; int ret = 0; if (drawctxt->drawqueue_head == drawctxt->drawqueue_tail) return NULL; for (i = drawctxt->drawqueue_head; i != drawctxt->drawqueue_tail; i = DRAWQUEUE_NEXT(i, ADRENO_CONTEXT_DRAWQUEUE_SIZE)) { drawobj = drawctxt->drawqueue[i]; if (drawobj == NULL) return NULL; if (drawobj->type == SYNCOBJ_TYPE) ret = _retire_syncobj(SYNCOBJ(drawobj), drawctxt); else if (drawobj->type == SPARSEOBJ_TYPE) return SPARSEOBJ(drawobj); else return ERR_PTR(-EINVAL); if (ret == -EAGAIN) return ERR_PTR(-EAGAIN); continue; } return NULL; } static int _process_drawqueue_sparse( struct adreno_context *drawctxt) { struct kgsl_drawobj_sparse *sparseobj; int ret = 0; unsigned int i; for (i = 0; i < ADRENO_CONTEXT_DRAWQUEUE_SIZE; i++) { spin_lock(&drawctxt->lock); sparseobj = _get_next_sparseobj(drawctxt); if (IS_ERR_OR_NULL(sparseobj)) { if (IS_ERR(sparseobj)) ret = PTR_ERR(sparseobj); spin_unlock(&drawctxt->lock); return ret; } _pop_drawobj(drawctxt); spin_unlock(&drawctxt->lock); _retire_sparseobj(sparseobj, drawctxt); } return 0; } /** * dispatcher_context_sendcmds() - Send commands from a context to the GPU * @adreno_dev: Pointer to the adreno device struct Loading @@ -797,9 +720,6 @@ static int dispatcher_context_sendcmds(struct adreno_device *adreno_dev, int inflight = _drawqueue_inflight(dispatch_q); unsigned int timestamp; if (drawctxt->base.flags & KGSL_CONTEXT_SPARSE) return _process_drawqueue_sparse(drawctxt); if (dispatch_q->inflight >= inflight) { spin_lock(&drawctxt->lock); _process_drawqueue_get_next_drawobj(drawctxt); Loading Loading @@ -1264,31 +1184,6 @@ static void _queue_drawobj(struct adreno_context *drawctxt, trace_adreno_cmdbatch_queued(drawobj, drawctxt->queued); } static int _queue_sparseobj(struct adreno_device *adreno_dev, struct adreno_context *drawctxt, struct kgsl_drawobj_sparse *sparseobj, uint32_t *timestamp, unsigned int user_ts) { struct kgsl_drawobj *drawobj = DRAWOBJ(sparseobj); int ret; ret = get_timestamp(drawctxt, drawobj, timestamp, user_ts); if (ret) return ret; /* * See if we can fastpath this thing - if nothing is * queued bind/unbind without queueing the context */ if (!drawctxt->queued) return 1; drawctxt->queued_timestamp = *timestamp; _queue_drawobj(drawctxt, drawobj); return 0; } static int _queue_markerobj(struct adreno_device *adreno_dev, struct adreno_context *drawctxt, struct kgsl_drawobj_cmd *markerobj, uint32_t *timestamp, unsigned int user_ts) Loading Loading @@ -1466,20 +1361,6 @@ int adreno_dispatcher_queue_cmds(struct kgsl_device_private *dev_priv, _queue_syncobj(drawctxt, SYNCOBJ(drawobj[i]), timestamp); break; case SPARSEOBJ_TYPE: ret = _queue_sparseobj(adreno_dev, drawctxt, SPARSEOBJ(drawobj[i]), timestamp, user_ts); if (ret == 1) { spin_unlock(&drawctxt->lock); _retire_sparseobj(SPARSEOBJ(drawobj[i]), drawctxt); return 0; } else if (ret) { spin_unlock(&drawctxt->lock); return ret; } break; default: spin_unlock(&drawctxt->lock); return -EINVAL; Loading
drivers/gpu/msm/adreno_drawctxt.c +1 −2 Original line number Diff line number Diff line Loading @@ -328,8 +328,7 @@ adreno_drawctxt_create(struct kgsl_device_private *dev_priv, KGSL_CONTEXT_IFH_NOP | KGSL_CONTEXT_SECURE | KGSL_CONTEXT_PREEMPT_STYLE_MASK | KGSL_CONTEXT_NO_SNAPSHOT | KGSL_CONTEXT_SPARSE); KGSL_CONTEXT_NO_SNAPSHOT); /* Check for errors before trying to initialize */ Loading
drivers/gpu/msm/kgsl.c +2 −789 File changed.Preview size limit exceeded, changes collapsed. Show changes
drivers/gpu/msm/kgsl.h +5 −41 Original line number Diff line number Diff line Loading @@ -31,7 +31,6 @@ #define KGSL_DRAWOBJ_END_OF_FRAME KGSL_CMDBATCH_END_OF_FRAME #define KGSL_DRAWOBJ_SYNC KGSL_CMDBATCH_SYNC #define KGSL_DRAWOBJ_PWR_CONSTRAINT KGSL_CMDBATCH_PWR_CONSTRAINT #define KGSL_DRAWOBJ_SPARSE KGSL_CMDBATCH_SPARSE #define kgsl_drawobj_profiling_buffer kgsl_cmdbatch_profiling_buffer Loading Loading @@ -90,7 +89,6 @@ static inline void KGSL_STATS_ADD(uint64_t size, atomic_long_t *stat, #define KGSL_MAX_NUMIBS 100000 #define KGSL_MAX_SYNCPOINTS 32 #define KGSL_MAX_SPARSE 1000 struct kgsl_device; struct kgsl_context; Loading Loading @@ -197,7 +195,6 @@ struct kgsl_memdesc_ops { * @attrs: dma attributes for this memory * @pages: An array of pointers to allocated pages * @page_count: Total number of pages allocated * @cur_bindings: Number of sparse pages actively bound */ struct kgsl_memdesc { struct kgsl_pagetable *pagetable; Loading @@ -216,7 +213,6 @@ struct kgsl_memdesc { unsigned long attrs; struct page **pages; unsigned int page_count; unsigned int cur_bindings; }; /** Loading Loading @@ -257,8 +253,6 @@ struct kgsl_global_memdesc { * @dev_priv: back pointer to the device file that created this entry. * @metadata: String containing user specified metadata for the entry * @work: Work struct used to schedule a kgsl_mem_entry_put in atomic contexts * @bind_lock: Lock for sparse memory bindings * @bind_tree: RB Tree for sparse memory bindings */ struct kgsl_mem_entry { struct kref refcount; Loading @@ -270,8 +264,11 @@ struct kgsl_mem_entry { int pending_free; char metadata[KGSL_GPUOBJ_ALLOC_METADATA_MAX + 1]; struct work_struct work; spinlock_t bind_lock; struct rb_root bind_tree; /** * @mapped: The number of bytes in this entry that are mapped to * userspace */ u64 mapped; }; struct kgsl_device_private; Loading Loading @@ -331,24 +328,6 @@ struct kgsl_event_group { void *priv; }; /** * struct sparse_bind_object - Bind metadata * @node: Node for the rb tree * @p_memdesc: Physical memdesc bound to * @v_off: Offset of bind in the virtual entry * @p_off: Offset of bind in the physical memdesc * @size: Size of the bind * @flags: Flags for the bind */ struct sparse_bind_object { struct rb_node node; struct kgsl_memdesc *p_memdesc; uint64_t v_off; uint64_t p_off; uint64_t size; uint64_t flags; }; /** * struct submission_info - Container for submission statistics * @inflight: Number of commands that are inflight Loading Loading @@ -447,21 +426,6 @@ long kgsl_ioctl_gpu_command(struct kgsl_device_private *dev_priv, long kgsl_ioctl_gpuobj_set_info(struct kgsl_device_private *dev_priv, unsigned int cmd, void *data); long kgsl_ioctl_sparse_phys_alloc(struct kgsl_device_private *dev_priv, unsigned int cmd, void *data); long kgsl_ioctl_sparse_phys_free(struct kgsl_device_private *dev_priv, unsigned int cmd, void *data); long kgsl_ioctl_sparse_virt_alloc(struct kgsl_device_private *dev_priv, unsigned int cmd, void *data); long kgsl_ioctl_sparse_virt_free(struct kgsl_device_private *dev_priv, unsigned int cmd, void *data); long kgsl_ioctl_sparse_bind(struct kgsl_device_private *dev_priv, unsigned int cmd, void *data); long kgsl_ioctl_sparse_unbind(struct kgsl_device_private *dev_priv, unsigned int cmd, void *data); long kgsl_ioctl_gpu_sparse_command(struct kgsl_device_private *dev_priv, unsigned int cmd, void *data); void kgsl_mem_entry_destroy(struct kref *kref); void kgsl_get_egl_counts(struct kgsl_mem_entry *entry, Loading
drivers/gpu/msm/kgsl_compat.c +8 −8 Original line number Diff line number Diff line // SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2013-2019, The Linux Foundation. All rights reserved. * Copyright (c) 2013-2020, The Linux Foundation. All rights reserved. */ #include "kgsl_device.h" Loading Loading @@ -339,19 +339,19 @@ static const struct kgsl_ioctl kgsl_compat_ioctl_funcs[] = { KGSL_IOCTL_FUNC(IOCTL_KGSL_GPU_COMMAND, kgsl_ioctl_gpu_command), KGSL_IOCTL_FUNC(IOCTL_KGSL_GPUOBJ_SET_INFO, kgsl_ioctl_gpuobj_set_info), NULL), KGSL_IOCTL_FUNC(IOCTL_KGSL_SPARSE_PHYS_ALLOC, kgsl_ioctl_sparse_phys_alloc), NULL), KGSL_IOCTL_FUNC(IOCTL_KGSL_SPARSE_PHYS_FREE, kgsl_ioctl_sparse_phys_free), NULL), KGSL_IOCTL_FUNC(IOCTL_KGSL_SPARSE_VIRT_ALLOC, kgsl_ioctl_sparse_virt_alloc), NULL), KGSL_IOCTL_FUNC(IOCTL_KGSL_SPARSE_VIRT_FREE, kgsl_ioctl_sparse_virt_free), NULL), KGSL_IOCTL_FUNC(IOCTL_KGSL_SPARSE_BIND, kgsl_ioctl_sparse_bind), NULL), KGSL_IOCTL_FUNC(IOCTL_KGSL_GPU_SPARSE_COMMAND, kgsl_ioctl_gpu_sparse_command), NULL), }; long kgsl_compat_ioctl(struct file *filep, unsigned int cmd, unsigned long arg) Loading