[igt-dev] [PATCH i-g-t] lib: Handle chamelium failures gracefully
Petri Latvala
petri.latvala at intel.com
Wed Nov 11 07:52:10 UTC 2020
On Mon, Nov 09, 2020 at 03:16:58PM +0000, Chris Wilson wrote:
> Don't cause CI to abort a run if an _unrelated_ fixture checks for a
> display and chamelium is dead.
If there's a chamelium configured and it's dead, we do want to abort
though.
What's an unrelated fixture in this context?
--
Petri Latvala
>
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> ---
> lib/igt_kms.c | 54 +++++++++++++++++++++++++++++++++++----------------
> 1 file changed, 37 insertions(+), 17 deletions(-)
>
> diff --git a/lib/igt_kms.c b/lib/igt_kms.c
> index e5d8e82c9..65b36c338 100644
> --- a/lib/igt_kms.c
> +++ b/lib/igt_kms.c
> @@ -1922,6 +1922,40 @@ __get_crtc_mask_for_pipe(drmModeRes *resources, igt_pipe_t *pipe)
> return (1 << offset);
> }
>
> +static bool chamelium_ok(int drm_fd)
> +{
> + bool ok = true;
> +#ifdef HAVE_CHAMELIUM
> + struct chamelium *chamelium;
> +
> + chamelium = chamelium_init_rpc_only();
> + if (chamelium) {
> + ok = false;
> +
> + if (!chamelium_wait_reachable(chamelium, 20)) {
> + igt_debug("cannot reach the configured chamelium!\n");
> + goto out;
> + }
> +
> + if (!chamelium_plug_all(chamelium)) {
> + igt_debug("failed to plug all the chamelium ports!\n");
> + goto out;
> + }
> +
> + if (!chamelium_wait_all_configured_ports_connected(chamelium, drm_fd)) {
> + igt_debug("not all configured chamelium ports are connected!\n");
> + goto out;
> + }
> +
> + ok = true;
> +out:
> + chamelium_deinit_rpc_only(chamelium);
> + }
> +#endif
> +
> + return ok;
> +}
> +
> /**
> * igt_display_require:
> * @display: a pointer to an #igt_display_t structure
> @@ -1944,6 +1978,9 @@ void igt_display_require(igt_display_t *display, int drm_fd)
>
> LOG_INDENT(display, "init");
>
> + if (!chamelium_ok(drm_fd))
> + goto out;
> +
> display->drm_fd = drm_fd;
> is_i915_dev = is_i915_device(drm_fd);
>
> @@ -1953,23 +1990,6 @@ void igt_display_require(igt_display_t *display, int drm_fd)
> if (!resources)
> goto out;
>
> -#ifdef HAVE_CHAMELIUM
> - {
> - struct chamelium *chamelium;
> -
> - chamelium = chamelium_init_rpc_only();
> - if (chamelium) {
> - igt_abort_on_f(!chamelium_wait_reachable(chamelium, 20),
> - "cannot reach the configured chamelium!\n");
> - igt_abort_on_f(!chamelium_plug_all(chamelium),
> - "failed to plug all the chamelium ports!\n");
> - igt_abort_on_f(!chamelium_wait_all_configured_ports_connected(chamelium, drm_fd),
> - "not all configured chamelium ports are connected!\n");
> - chamelium_deinit_rpc_only(chamelium);
> - }
> - }
> -#endif
> -
> /*
> * With non-contiguous pipes display, crtc mapping is not always same
> * as pipe mapping, In i915 pipe is enum id of i915's crtc object.
> --
> 2.29.2
>
> _______________________________________________
> igt-dev mailing list
> igt-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/igt-dev
More information about the igt-dev
mailing list