From mboxrd@z Thu Jan 1 00:00:00 1970 From: Steve Longerbeam Subject: Re: [PATCH 4.19 regression fix 2/2] staging: vboxvideo: Change address of scanout buffer on page-flip Date: Mon, 10 Sep 2018 16:08:35 -0700 Message-ID: <91c20a61-8ab0-75e8-6d55-c78fb78d8686@mentor.com> References: <20180910183039.3339-1-hdegoede@redhat.com> <20180910183039.3339-2-hdegoede@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; Format="flowed" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <20180910183039.3339-2-hdegoede@redhat.com> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: driverdev-devel-bounces@linuxdriverproject.org Sender: "devel" To: Hans de Goede , Greg Kroah-Hartman Cc: devel@driverdev.osuosl.org, Michael Thayer , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org Hi Hans, On 09/10/2018 11:30 AM, Hans de Goede wrote: > Commit 2408898e3b6c ("staging: vboxvideo: Add page-flip support") only > calls vbox_crtc_do_set_base() on page-flips, but despite that function's > name it only pins the new fb, unpins the old fb and sets > vbox_crtc->fb_offset. It does not program the hardware to scan out at the > new vbox_crtc->fb_offset value. Has that always been the case of vbox_crtc_do_set_base()? Or was there a recent commit that changed that behavior? I tested this patch using a Weston EGL mock navigation test app around 4.14 time-frame, that exercises page flip and it was scanning out the new fb, but maybe what I was looking at was a scan-out of an old/now stale fb from a previous page-flip. In any case thanks for fixing. Steve > This was causing only every other frame (assuming page-flipping between 2 > buffers) to be shown since we kept scanning out of the old (now unpinned!) > buffer. > > This commit fixes this by adding code to vbox_crtc_page_flip() to tell > the hardware to scanout from the new fb_offset. > > Fixes: 2408898e3b6c ("staging: vboxvideo: Add page-flip support") > Cc: Steve Longerbeam > Signed-off-by: Hans de Goede > --- > drivers/staging/vboxvideo/vbox_mode.c | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/drivers/staging/vboxvideo/vbox_mode.c b/drivers/staging/vboxvideo/vbox_mode.c > index a83eac8668d0..79836c8fb909 100644 > --- a/drivers/staging/vboxvideo/vbox_mode.c > +++ b/drivers/staging/vboxvideo/vbox_mode.c > @@ -323,6 +323,11 @@ static int vbox_crtc_page_flip(struct drm_crtc *crtc, > if (rc) > return rc; > > + mutex_lock(&vbox->hw_mutex); > + vbox_set_view(crtc); > + vbox_do_modeset(crtc, &crtc->mode); > + mutex_unlock(&vbox->hw_mutex); > + > spin_lock_irqsave(&drm->event_lock, flags); > > if (event)