Loading drivers/gpu/msm/adreno_drawctxt.c +28 −5 Original line number Diff line number Diff line Loading @@ -278,6 +278,27 @@ void adreno_drawctxt_invalidate(struct kgsl_device *device, wake_up_interruptible_all(&drawctxt->wq); } /* * Set the priority of the context based on the flags passed into context * create. If the priority is not set in the flags, then the kernel can * assign any priority it desires for the context. */ #define KGSL_CONTEXT_PRIORITY_MED 0x8 static inline void _set_context_priority(struct adreno_context *drawctxt) { /* If the priority is not set by user, set it for them */ if ((drawctxt->base.flags & KGSL_CONTEXT_PRIORITY_MASK) == KGSL_CONTEXT_PRIORITY_UNDEF) drawctxt->base.flags |= (KGSL_CONTEXT_PRIORITY_MED << KGSL_CONTEXT_PRIORITY_SHIFT); /* Store the context priority */ drawctxt->base.priority = (drawctxt->base.flags & KGSL_CONTEXT_PRIORITY_MASK) >> KGSL_CONTEXT_PRIORITY_SHIFT; } /** * adreno_drawctxt_create - create a new adreno draw context * @dev_priv: the owner of the context Loading Loading @@ -312,6 +333,7 @@ adreno_drawctxt_create(struct kgsl_device_private *dev_priv, KGSL_CONTEXT_USER_GENERATED_TS | KGSL_CONTEXT_NO_FAULT_TOLERANCE | KGSL_CONTEXT_CTX_SWITCH | KGSL_CONTEXT_PRIORITY_MASK | KGSL_CONTEXT_TYPE_MASK); /* Always enable per-context timestamps */ Loading @@ -321,13 +343,14 @@ adreno_drawctxt_create(struct kgsl_device_private *dev_priv, init_waitqueue_head(&drawctxt->wq); init_waitqueue_head(&drawctxt->waiting); /* Set the context priority */ _set_context_priority(drawctxt); /* * Set up the plist node for the dispatcher. For now all contexts have * the same priority, but later the priority will be set at create time * by the user * Set up the plist node for the dispatcher. Insert the node into the * drawctxt pending list based on priority. */ plist_node_init(&drawctxt->pending, ADRENO_CONTEXT_DEFAULT_PRIORITY); plist_node_init(&drawctxt->pending, drawctxt->base.priority); if ((drawctxt->base.flags & KGSL_CONTEXT_PREAMBLE) == 0 || (drawctxt->base.flags & KGSL_CONTEXT_NO_GMEM_ALLOC) == 0) { Loading drivers/gpu/msm/adreno_drawctxt.h +0 −2 Original line number Diff line number Diff line Loading @@ -31,8 +31,6 @@ struct adreno_context_type { #define ADRENO_CONTEXT_CMDQUEUE_SIZE 128 #define ADRENO_CONTEXT_DEFAULT_PRIORITY 1 #define ADRENO_CONTEXT_STATE_ACTIVE 0 #define ADRENO_CONTEXT_STATE_INVALID 1 Loading drivers/gpu/msm/adreno_trace.h +3 −1 Original line number Diff line number Diff line Loading @@ -146,11 +146,13 @@ DECLARE_EVENT_CLASS(adreno_drawctxt_template, TP_ARGS(drawctxt), TP_STRUCT__entry( __field(unsigned int, id) __field(unsigned int, priority) ), TP_fast_assign( __entry->id = drawctxt->base.id; __entry->priority = drawctxt->base.priority; ), TP_printk("ctx=%u", __entry->id) TP_printk("ctx=%u priority=%u", __entry->id, __entry->priority) ); DEFINE_EVENT(adreno_drawctxt_template, adreno_drawctxt_sleep, Loading drivers/gpu/msm/kgsl_device.h +1 −0 Original line number Diff line number Diff line Loading @@ -375,6 +375,7 @@ struct kgsl_process_private; struct kgsl_context { struct kref refcount; uint32_t id; uint32_t priority; pid_t pid; pid_t tid; struct kgsl_device_private *dev_priv; Loading drivers/gpu/msm/kgsl_trace.h +5 −2 Original line number Diff line number Diff line Loading @@ -650,14 +650,17 @@ TRACE_EVENT(kgsl_context_create, ), TP_printk( "d_name=%s ctx=%u flags=0x%x %s", "d_name=%s ctx=%u flags=0x%x %s priority=%u", __get_str(device_name), __entry->id, __entry->flags, __entry->flags ? __print_flags(__entry->flags, "|", { KGSL_CONTEXT_NO_GMEM_ALLOC , "NO_GMEM_ALLOC" }, { KGSL_CONTEXT_PREAMBLE, "PREAMBLE" }, { KGSL_CONTEXT_TRASH_STATE, "TRASH_STATE" }, { KGSL_CONTEXT_PER_CONTEXT_TS, "PER_CONTEXT_TS" }) : "None" : "None", (__entry->flags & KGSL_CONTEXT_PRIORITY_MASK) > KGSL_CONTEXT_PRIORITY_SHIFT ) ); Loading Loading
drivers/gpu/msm/adreno_drawctxt.c +28 −5 Original line number Diff line number Diff line Loading @@ -278,6 +278,27 @@ void adreno_drawctxt_invalidate(struct kgsl_device *device, wake_up_interruptible_all(&drawctxt->wq); } /* * Set the priority of the context based on the flags passed into context * create. If the priority is not set in the flags, then the kernel can * assign any priority it desires for the context. */ #define KGSL_CONTEXT_PRIORITY_MED 0x8 static inline void _set_context_priority(struct adreno_context *drawctxt) { /* If the priority is not set by user, set it for them */ if ((drawctxt->base.flags & KGSL_CONTEXT_PRIORITY_MASK) == KGSL_CONTEXT_PRIORITY_UNDEF) drawctxt->base.flags |= (KGSL_CONTEXT_PRIORITY_MED << KGSL_CONTEXT_PRIORITY_SHIFT); /* Store the context priority */ drawctxt->base.priority = (drawctxt->base.flags & KGSL_CONTEXT_PRIORITY_MASK) >> KGSL_CONTEXT_PRIORITY_SHIFT; } /** * adreno_drawctxt_create - create a new adreno draw context * @dev_priv: the owner of the context Loading Loading @@ -312,6 +333,7 @@ adreno_drawctxt_create(struct kgsl_device_private *dev_priv, KGSL_CONTEXT_USER_GENERATED_TS | KGSL_CONTEXT_NO_FAULT_TOLERANCE | KGSL_CONTEXT_CTX_SWITCH | KGSL_CONTEXT_PRIORITY_MASK | KGSL_CONTEXT_TYPE_MASK); /* Always enable per-context timestamps */ Loading @@ -321,13 +343,14 @@ adreno_drawctxt_create(struct kgsl_device_private *dev_priv, init_waitqueue_head(&drawctxt->wq); init_waitqueue_head(&drawctxt->waiting); /* Set the context priority */ _set_context_priority(drawctxt); /* * Set up the plist node for the dispatcher. For now all contexts have * the same priority, but later the priority will be set at create time * by the user * Set up the plist node for the dispatcher. Insert the node into the * drawctxt pending list based on priority. */ plist_node_init(&drawctxt->pending, ADRENO_CONTEXT_DEFAULT_PRIORITY); plist_node_init(&drawctxt->pending, drawctxt->base.priority); if ((drawctxt->base.flags & KGSL_CONTEXT_PREAMBLE) == 0 || (drawctxt->base.flags & KGSL_CONTEXT_NO_GMEM_ALLOC) == 0) { Loading
drivers/gpu/msm/adreno_drawctxt.h +0 −2 Original line number Diff line number Diff line Loading @@ -31,8 +31,6 @@ struct adreno_context_type { #define ADRENO_CONTEXT_CMDQUEUE_SIZE 128 #define ADRENO_CONTEXT_DEFAULT_PRIORITY 1 #define ADRENO_CONTEXT_STATE_ACTIVE 0 #define ADRENO_CONTEXT_STATE_INVALID 1 Loading
drivers/gpu/msm/adreno_trace.h +3 −1 Original line number Diff line number Diff line Loading @@ -146,11 +146,13 @@ DECLARE_EVENT_CLASS(adreno_drawctxt_template, TP_ARGS(drawctxt), TP_STRUCT__entry( __field(unsigned int, id) __field(unsigned int, priority) ), TP_fast_assign( __entry->id = drawctxt->base.id; __entry->priority = drawctxt->base.priority; ), TP_printk("ctx=%u", __entry->id) TP_printk("ctx=%u priority=%u", __entry->id, __entry->priority) ); DEFINE_EVENT(adreno_drawctxt_template, adreno_drawctxt_sleep, Loading
drivers/gpu/msm/kgsl_device.h +1 −0 Original line number Diff line number Diff line Loading @@ -375,6 +375,7 @@ struct kgsl_process_private; struct kgsl_context { struct kref refcount; uint32_t id; uint32_t priority; pid_t pid; pid_t tid; struct kgsl_device_private *dev_priv; Loading
drivers/gpu/msm/kgsl_trace.h +5 −2 Original line number Diff line number Diff line Loading @@ -650,14 +650,17 @@ TRACE_EVENT(kgsl_context_create, ), TP_printk( "d_name=%s ctx=%u flags=0x%x %s", "d_name=%s ctx=%u flags=0x%x %s priority=%u", __get_str(device_name), __entry->id, __entry->flags, __entry->flags ? __print_flags(__entry->flags, "|", { KGSL_CONTEXT_NO_GMEM_ALLOC , "NO_GMEM_ALLOC" }, { KGSL_CONTEXT_PREAMBLE, "PREAMBLE" }, { KGSL_CONTEXT_TRASH_STATE, "TRASH_STATE" }, { KGSL_CONTEXT_PER_CONTEXT_TS, "PER_CONTEXT_TS" }) : "None" : "None", (__entry->flags & KGSL_CONTEXT_PRIORITY_MASK) > KGSL_CONTEXT_PRIORITY_SHIFT ) ); Loading