[libcamera-devel] [PATCH] android: Re-order out-of-order completion path
Hirokazu Honda
hiroh at chromium.org
Tue Oct 19 06:00:50 CEST 2021
Hi Jacopo, thank you for the patch.
On Fri, Oct 15, 2021 at 12:17 PM Umang Jain <umang.jain at ideasonboard.com> wrote:
>
> Hello,
>
> On 10/15/21 7:32 AM, Laurent Pinchart wrote:
> > Hi Jacopo,
> >
> > Thank you for the patch.
> >
> > On Thu, Oct 14, 2021 at 12:37:57PM +0200, Jacopo Mondi wrote:
> >> When the camera HAL detects an out-of-order completion of a request, it
> >> sends to the camera framework a CAMERA3_MSG_ERROR_DEVICE error.
> >>
> >> Such error not only forces the service to close the camera as prescribed
> >> by the camera3 specification, but in some implementation (specifically
> >> the ChromeOS one) it causes the camera service to abort and exit.
> >>
> >> This prevents any error messages to be printed by libcamera, as the
> > s/to be printed/from being printed/
> >
> >> library gets terminated before getting to that point, and also hides the
> >> printout of error messages that lead to out-of-order completion, making
> >> it impossible to get from the output log what happened.
> >>
> >> Move the call to notifyError() at the end of the error path and demote
> >> the error message to LogLevels::Error from Fatal to let the service
> >> implementation decide how to handle CAMERA3_MSG_ERROR_DEVICE errors.
> >>
> >> Before this patch, when waiting on a fence fails and the capture
> >> request is not queued to the Camera, we get an out-of-order completion
> >> but no backtrace. With this patch applied the error path is visible:
Is this a bug in libcamera? Will we need to fix this, or intended behavior?
> >>
> >> ERROR HAL camera_worker.cpp:122 Failed waiting for fence: 82: Timer expired
> >> ERROR HAL camera_device.cpp:1110 '\_SB_.PCI0.I2C2.CAM0': Out-of-order completion for request 0x00007e6de4004c70
> >>
> >> Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
> >> ---
> >> src/android/camera_device.cpp | 9 +++++----
> >> 1 file changed, 5 insertions(+), 4 deletions(-)
> >>
> >> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
> >> index 901867105085..f60297e13c8b 100644
> >> --- a/src/android/camera_device.cpp
> >> +++ b/src/android/camera_device.cpp
> >> @@ -1104,16 +1104,17 @@ void CameraDevice::requestComplete(Request *request)
> >> if (descriptor->request_->cookie() != request->cookie()) {
> >> /*
> >> * \todo Clarify if the Camera has to be closed on
> >> - * ERROR_DEVICE and possibly demote the Fatal to simple
> >> - * Error.
> >> + * ERROR_DEVICE.
> >> */
> >> - notifyError(0, nullptr, CAMERA3_MSG_ERROR_DEVICE);
> >> - LOG(HAL, Fatal)
> >> + LOG(HAL, Error)
> >> << "Out-of-order completion for request "
> >> << utils::hex(request->cookie());
> >>
> >> MutexLocker descriptorsLock(descriptorsMutex_);
> >> descriptors_.pop();
> >> +
> >> + notifyError(0, nullptr, CAMERA3_MSG_ERROR_DEVICE);
> > Given that we've removed the descriptor at the head of the queue, which
> > doesn't correspond to the request, from this point onwards all hell will
> > likely break loose, possibly even in the close() path. It's probably not
>
>
> Can we use this as an error message, " All hell broke loose, Run!!!" ;-)
>
> > worth than a Fatal though, so
> >
> > Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
>
>
> Reviewed-by: Umang Jain <umang.jain at ideasonboard.com>
>
Reviewed-by: Hirokazu Honda <hiroh at chromium.org>
> >
> >> +
> >> return;
> >> }
> >>
More information about the libcamera-devel
mailing list