mirror of https://gitee.com/openkylin/linux.git
drm/i915/gvt: add a fastpath for cmd parsing on MI_NOOP
MI_NOOP is a common command appearing in almost all command buffers, put it into a fastpath can improve perfomance, especially in command buffers contains lots of MI_NOOPs (0s). Take glmark2 as an example, 3% performance increase is observed after introduced this patch. Meanwhile, in case where abundant in MI_NOOPs, up to 12% performance increase is measured. v2: use lowercase for index of MI_NOOP in cmd_info (zhenyu wang) Signed-off-by: Li Weinan <weinan.z.li@intel.com> Signed-off-by: Zhao Yan <yan.y.zhao@intel.com> Signed-off-by: Zhenyu Wang <zhenyuw@linux.intel.com>
This commit is contained in:
parent
279ce5d117
commit
db47685da1
|
@ -1817,6 +1817,8 @@ static int cmd_handler_mi_batch_buffer_start(struct parser_exec_state *s)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int mi_noop_index;
|
||||
|
||||
static struct cmd_info cmd_info[] = {
|
||||
{"MI_NOOP", OP_MI_NOOP, F_LEN_CONST, R_ALL, D_ALL, 0, 1, NULL},
|
||||
|
||||
|
@ -2502,7 +2504,12 @@ static int cmd_parser_exec(struct parser_exec_state *s)
|
|||
|
||||
cmd = cmd_val(s, 0);
|
||||
|
||||
info = get_cmd_info(s->vgpu->gvt, cmd, s->ring_id);
|
||||
/* fastpath for MI_NOOP */
|
||||
if (cmd == MI_NOOP)
|
||||
info = &cmd_info[mi_noop_index];
|
||||
else
|
||||
info = get_cmd_info(s->vgpu->gvt, cmd, s->ring_id);
|
||||
|
||||
if (info == NULL) {
|
||||
gvt_vgpu_err("unknown cmd 0x%x, opcode=0x%x, addr_type=%s, ring %d, workload=%p\n",
|
||||
cmd, get_opcode(cmd, s->ring_id),
|
||||
|
@ -2904,6 +2911,8 @@ static int init_cmd_table(struct intel_gvt *gvt)
|
|||
info->name);
|
||||
return -EEXIST;
|
||||
}
|
||||
if (cmd_info[i].opcode == OP_MI_NOOP)
|
||||
mi_noop_index = i;
|
||||
|
||||
INIT_HLIST_NODE(&e->hlist);
|
||||
add_cmd_entry(gvt, e);
|
||||
|
|
Loading…
Reference in New Issue