[PATCH weston 15/21] compositor-fbdev: simplify FB destroy/unmap/disable
Ray, Ian (GE Healthcare)
ian.ray at ge.com
Tue Sep 26 06:24:56 UTC 2017
On 22/09/2017, 17.33, "wayland-devel on behalf of Pekka Paalanen" <wayland-devel-bounces at lists.freedesktop.org on behalf of ppaalanen at gmail.com> wrote:
>
> From: Pekka Paalanen <pekka.paalanen at collabora.co.uk>
>
> Rename fbdev_frame_buffer_destroy() to fbdev_frame_buffer_unmap()
> because that is what it does. Adding the destruction of hw_surface in it
> makes it the perfect counterpart to fbdev_frame_buffer_map() which
> simplifies the code.
>
> fbdev_frame_buffer_map() can no longer call that, so just open-code the
> munmap() there. It is an error path, we don't really care about
> failures in an error path.
>
> The error path of fbdev_output_enable() is converted to call
> buffer_unmap() since that is exactly what it did.
>
> fbdev_output_disable() became redundant, being identical to
> fbdev_frame_buffer_unmap().
>
> Invariant: output->hw_surface cannot be non-NULL without output->fb
> being non-NULL. hw_surface wraps the mmapped memory so cannot exist
> without the mmap.
>
> Signed-off-by: Pekka Paalanen <pekka.paalanen at collabora.co.uk>
> ---
> libweston/compositor-fbdev.c | 52 ++++++++++++++++++--------------------------
> 1 file changed, 21 insertions(+), 31 deletions(-)
>
> diff --git a/libweston/compositor-fbdev.c b/libweston/compositor-fbdev.c
> index 402648d0..22100f98 100644
> --- a/libweston/compositor-fbdev.c
> +++ b/libweston/compositor-fbdev.c
> @@ -40,6 +40,7 @@
> #include <unistd.h>
> #include <linux/fb.h>
> #include <linux/input.h>
> +#include <assert.h>
>
> #include <libudev.h>
>
> @@ -335,8 +336,6 @@ fbdev_set_screen_info(int fd, struct fbdev_screeninfo *info)
> return 1;
> }
>
> -static void fbdev_frame_buffer_destroy(struct fbdev_output *output);
> -
> /* Returns an FD for the frame buffer device. */
> static int
> fbdev_frame_buffer_open(const char *fb_dev,
> @@ -401,8 +400,10 @@ fbdev_frame_buffer_map(struct fbdev_output *output, int fd)
> retval = 0;
>
> out_unmap:
> - if (retval != 0 && output->fb != NULL)
> - fbdev_frame_buffer_destroy(output);
> + if (retval != 0 && output->fb != NULL) {
> + munmap(output->fb, output->fb_info.buffer_length);
> + output->fb = NULL;
> + }
>
> out_close:
> if (fd >= 0)
> @@ -412,9 +413,18 @@ out_close:
> }
>
> static void
> -fbdev_frame_buffer_destroy(struct fbdev_output *output)
> +fbdev_frame_buffer_unmap(struct fbdev_output *output)
> {
> - weston_log("Destroying fbdev frame buffer.\n");
> + if (!output->fb) {
> + assert(!output->hw_surface);
> + return;
> + }
> +
> + weston_log("Unmapping fbdev frame buffer.\n");
> +
> + if (output->hw_surface)
> + pixman_image_unref(output->hw_surface);
> + output->hw_surface = NULL;
nitpick: hw_surface need only be set NULL if it was non-NULL (which
seems to be the pattern elsewhere). But, in any case:
Reviewed-by: Ian Ray <ian.ray at ge.com>
<snip>
More information about the wayland-devel
mailing list