diff options
author | Kunal Joshi <kunal1.joshi@intel.com> | 2021-05-10 23:29:46 +0530 |
---|---|---|
committer | Kunal Joshi <kunal1.joshi@intel.com> | 2021-05-11 10:13:26 +0530 |
commit | 355269577baef0c5d8114e8851acaeac657e4fe6 (patch) | |
tree | 61d70d6ba451668728777d0f954417bf5fd64610 /lib | |
parent | fdff4bba7abf9cb7c8ea21abf14e36d344ebb8c1 (diff) |
lib/igt_chamelium: Retry DP FSM on Failure
We have a thread called chamelium_fsm_mon which monitors HPD events
triggered by chamelium, Unfortunately not always the HPD event arrives
in a fixed interval (mostly does), Quick fix to this is to retry.
v2: Remove redundant assert (Bhanu)
v3: Cleanup (Petri)
Fixes :- https://gitlab.freedesktop.org/drm/intel/-/issues/262
Cc: Petri Latvala <petri.latvala@intel.com>
Cc: Modem Bhanuprakash <bhanuprakash.modem@intel.com>
Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
Reviewed-by: Petri Latvala <petri.latvala@intel.com>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/igt_chamelium.c | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/lib/igt_chamelium.c b/lib/igt_chamelium.c index 7085122a..b4d838bb 100644 --- a/lib/igt_chamelium.c +++ b/lib/igt_chamelium.c @@ -522,12 +522,29 @@ static xmlrpc_value *chamelium_rpc(struct chamelium *chamelium, { xmlrpc_value *res; va_list va_args; + int fsm_trials_left = 5; + + if (strcmp(method_name, "CaptureVideo") == 0 + || strcmp(method_name, "StartCapturingVideo") == 0) { + while (fsm_trials_left) { + va_start(va_args, format_str); + res = __chamelium_rpc_va(chamelium, fsm_port, + method_name, format_str, + va_args); + va_end(va_args); + + if (!chamelium->env.fault_occurred) + break; - va_start(va_args, format_str); - res = __chamelium_rpc_va(chamelium, fsm_port, method_name, - format_str, va_args); - va_end(va_args); - + igt_debug("DP FSM failed retrying, tries left %d\n", fsm_trials_left); + --fsm_trials_left; + } + } else { + va_start(va_args, format_str); + res = __chamelium_rpc_va(chamelium, fsm_port, method_name, + format_str, va_args); + va_end(va_args); + } igt_assert_f(!chamelium->env.fault_occurred, "Chamelium RPC call failed: %s\n", chamelium->env.fault_string); |