modesetting: Avoid duplicate error messages on present-flip errors

Currently on present-flip failures we log 2 messages for each failure,
1 from ms_do_pageflip and then another one from ms_present_flip which
is the caller of ms_do_pageflip. This commit adds a log_prefix argument
to ms_do_pageflip so that its log messages can show if it is a DRI2 or
a Present flip which fails and removes the redundant error message from
ms_present_flip.

Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
This commit is contained in:
Hans de Goede 2019-07-15 14:35:49 +02:00
parent 078277e4d9
commit 12821852f0
4 changed files with 16 additions and 12 deletions

View File

@ -496,7 +496,8 @@ ms_dri2_schedule_flip(ms_dri2_frame_event_ptr info)
if (ms_do_pageflip(screen, back_priv->pixmap, event,
drmmode_crtc->vblank_pipe, FALSE,
ms_dri2_flip_handler,
ms_dri2_flip_abort)) {
ms_dri2_flip_abort,
"DRI2-flip")) {
ms->drmmode.dri2_flipping = TRUE;
return TRUE;
}

View File

@ -177,7 +177,8 @@ Bool ms_do_pageflip(ScreenPtr screen,
int ref_crtc_vblank_pipe,
Bool async,
ms_pageflip_handler_proc pageflip_handler,
ms_pageflip_abort_proc pageflip_abort);
ms_pageflip_abort_proc pageflip_abort,
const char *log_prefix);
#endif

View File

@ -231,7 +231,8 @@ ms_do_pageflip(ScreenPtr screen,
int ref_crtc_vblank_pipe,
Bool async,
ms_pageflip_handler_proc pageflip_handler,
ms_pageflip_abort_proc pageflip_abort)
ms_pageflip_abort_proc pageflip_abort,
const char *log_prefix)
{
#ifndef GLAMOR_HAS_GBM
return FALSE;
@ -250,7 +251,8 @@ ms_do_pageflip(ScreenPtr screen,
if (!new_front_bo.gbm) {
xf86DrvMsg(scrn->scrnIndex, X_ERROR,
"Failed to get GBM bo for flip to new front.\n");
"%s: Failed to get GBM BO for flip to new front.\n",
log_prefix);
return FALSE;
}
@ -258,7 +260,7 @@ ms_do_pageflip(ScreenPtr screen,
if (!flipdata) {
drmmode_bo_destroy(&ms->drmmode, &new_front_bo);
xf86DrvMsg(scrn->scrnIndex, X_ERROR,
"Failed to allocate flipdata.\n");
"%s: Failed to allocate flipdata.\n", log_prefix);
return FALSE;
}
@ -336,8 +338,8 @@ error_undo:
}
error_out:
xf86DrvMsg(scrn->scrnIndex, X_WARNING, "Page flip failed: %s\n",
strerror(errno));
xf86DrvMsg(scrn->scrnIndex, X_WARNING, "%s: Page flip failed: %s\n",
log_prefix, strerror(errno));
drmmode_bo_destroy(&ms->drmmode, &new_front_bo);
/* if only the local reference - free the structure,
* else drop the local reference and return */

View File

@ -336,10 +336,9 @@ ms_present_flip(RRCrtcPtr crtc,
event->unflip = FALSE;
ret = ms_do_pageflip(screen, pixmap, event, drmmode_crtc->vblank_pipe, !sync_flip,
ms_present_flip_handler, ms_present_flip_abort);
if (!ret)
xf86DrvMsg(scrn->scrnIndex, X_ERROR, "present flip failed\n");
else
ms_present_flip_handler, ms_present_flip_abort,
"Present-flip");
if (ret)
ms->drmmode.present_flipping = TRUE;
return ret;
@ -367,7 +366,8 @@ ms_present_unflip(ScreenPtr screen, uint64_t event_id)
if (ms_present_check_unflip(NULL, screen->root, pixmap, TRUE, NULL) &&
ms_do_pageflip(screen, pixmap, event, -1, FALSE,
ms_present_flip_handler, ms_present_flip_abort)) {
ms_present_flip_handler, ms_present_flip_abort,
"Present-unflip")) {
return;
}