From 1cd8ab18abca96e4ee108f80225058d875b28347 Mon Sep 17 00:00:00 2001 From: Yannick Gicquel Date: Fri, 6 Nov 2015 09:21:30 +0100 Subject: weston: workaround to avoid segfault on hotplug event This is for CES demo hardening and may be reworked or removed for a product. Change-Id: I45d708e873cbe8ce7d454ebcae31f24d51055736 Signed-off-by: Yannick Gicquel Signed-off-by: Manuel Bachmann --- ...around-to-avoid-segfault-on-hotplug-event.patch | 81 ++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 meta-rcar-gen2/recipes-graphics/wayland/weston/weston-workaround-to-avoid-segfault-on-hotplug-event.patch (limited to 'meta-rcar-gen2/recipes-graphics/wayland/weston') diff --git a/meta-rcar-gen2/recipes-graphics/wayland/weston/weston-workaround-to-avoid-segfault-on-hotplug-event.patch b/meta-rcar-gen2/recipes-graphics/wayland/weston/weston-workaround-to-avoid-segfault-on-hotplug-event.patch new file mode 100644 index 0000000..9bf5752 --- /dev/null +++ b/meta-rcar-gen2/recipes-graphics/wayland/weston/weston-workaround-to-avoid-segfault-on-hotplug-event.patch @@ -0,0 +1,81 @@ +From be437c6b27a2c6b83b2e60e30e5f0cdcbda28ad0 Mon Sep 17 00:00:00 2001 +From: Yannick Gicquel +Date: Fri, 6 Nov 2015 09:01:43 +0100 +Subject: [PATCH] weston: workaround to avoid segfault on hotplug event + +When user unplug/replug a monitor, HDMI link for example, +weston segfault while calling gbm_surface_destroy from +drm_output_destroy function. + +This workaround basically disable the output destroy +mechanism on unplug/replug event callbacks. It also force +the compositor to do a pageflip in order to refresh the +output when it is connected back. + +All this workaround is under "KEEP_OUTPUTS_ON_HOTPLUG" +compilation flag, which can be disable if required. + +Signed-off-by: Yannick Gicquel +Signed-off-by: Manuel Bachmann +--- + src/compositor-drm.c | 22 ++++++++++++++++++++++ + 1 file changed, 22 insertions(+) + +diff --git a/src/compositor-drm.c b/src/compositor-drm.c +index 2087c93..21b7776 100644 +--- a/src/compositor-drm.c ++++ b/src/compositor-drm.c +@@ -56,6 +56,12 @@ + #define DRM_CAP_TIMESTAMP_MONOTONIC 0x6 + #endif + ++/* This allow weston to keep outputs when re-attached after ++ * a previous unplug event. Comment line below to fallback ++ * to initial behavior. ++ */ ++#define KEEP_OUTPUTS_ON_HOTPLUG ++ + static int option_current_mode = 0; + + enum output_config { +@@ -2383,6 +2389,11 @@ create_outputs(struct drm_compositor *ec, uint32_t option_connector, + return 0; + } + ++#if defined(KEEP_OUTPUTS_ON_HOTPLUG) ++static void ++drm_compositor_set_modes(struct drm_compositor *compositor); ++#endif ++ + static void + update_outputs(struct drm_compositor *ec, struct udev_device *drm_device) + { +@@ -2443,14 +2454,25 @@ update_outputs(struct drm_compositor *ec, struct udev_device *drm_device) + disconnects &= ~(1 << output->connector_id); + weston_log("connector %d disconnected\n", + output->connector_id); ++#if !defined(KEEP_OUTPUTS_ON_HOTPLUG) + drm_output_destroy(&output->base); ++#endif + } + } + } + ++#if defined(KEEP_OUTPUTS_ON_HOTPLUG) ++ /* This refresh the display when connector is plugged back */ ++ wl_list_for_each_safe(output, next, &ec->base.output_list, ++ base.link) { ++ /* FIXME: following is required only on 'connected' event. */ ++ drm_compositor_set_modes(ec); ++ } ++#else + /* FIXME: handle zero outputs, without terminating */ + if (ec->connector_allocator == 0) + wl_display_terminate(ec->base.wl_display); ++#endif + } + + static int +-- +1.9.1 + -- cgit 1.2.3-korg