drm/i915/gvt: remove redundant ring id check which cause significant CPU misprediction
authorChangbin Du <changbin.du@intel.com>
Thu, 6 Apr 2017 02:55:55 +0000 (10:55 +0800)
committerZhenyu Wang <zhenyuw@linux.intel.com>
Wed, 12 Apr 2017 05:57:51 +0000 (13:57 +0800)
From perf data, found a significant overhead at ring id check in the
function get_opcode. This inline function is frequently used.

Since Intel static predictor will predict the branch to fall through
so the prediction most fail. This is wasting CPU pipeline resource.
We do not need check the engine id everywhere, it should be reliable.

Signed-off-by: Changbin Du <changbin.du@intel.com>
Signed-off-by: Zhenyu Wang <zhenyuw@linux.intel.com>
drivers/gpu/drm/i915/gvt/cmd_parser.c

index 94f2e701e4d44dd0c9fe68677f953a17e57f93e5..1abd153bec28d3af76f78a384c062707c69c2dc6 100644 (file)
@@ -616,9 +616,6 @@ static inline u32 get_opcode(u32 cmd, int ring_id)
 {
        struct decode_info *d_info;
 
-       if (ring_id >= I915_NUM_ENGINES)
-               return INVALID_OP;
-
        d_info = ring_decode_info[ring_id][CMD_TYPE(cmd)];
        if (d_info == NULL)
                return INVALID_OP;
@@ -661,9 +658,6 @@ static inline void print_opcode(u32 cmd, int ring_id)
        struct decode_info *d_info;
        int i;
 
-       if (ring_id >= I915_NUM_ENGINES)
-               return;
-
        d_info = ring_decode_info[ring_id][CMD_TYPE(cmd)];
        if (d_info == NULL)
                return;