Unsolved QML Camera method stop() error 127 pages are still in use! Driver ISL79987
-
How to solve?
In the moment the camera is stopped, I'm getting error:------------[ cut here ]------------
WARNING: CPU: 0 PID: 746 at mm/page_alloc.c:7392 free_contig_range+0x94/0x98
127 pages are still in use!
Modules linked in:
CPU: 0 PID: 746 Comm: camera_source:s Tainted: G W 4.9.144-2.8.5-ga2a5d39-dirty #291
Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree)
Backtrace:
[<8010cd88>] (dump_backtrace) from [<8010d060>] (show_stack+0x18/0x1c)
r7:00000009 r6:60000013 r5:00000000 r4:80f5ff88
[<8010d048>] (show_stack) from [<80473e84>] (dump_stack+0x90/0xa4)
[<80473df4>] (dump_stack) from [<80139e1c>] (__warn+0xf0/0x108)
r7:00000009 r6:80c7aa9c r5:00000000 r4:e328fc20
[<80139d2c>] (__warn) from [<80139e74>] (warn_slowpath_fmt+0x40/0x48)
r9:80b95c50 r8:8103b480 r7:80f06704 r6:0007c1ff r5:0000007f r4:80c7b220
[<80139e38>] (warn_slowpath_fmt) from [<80207604>] (free_contig_range+0x94/0x98)
r3:0000007f r2:80c7b220
r4:0007c1ff
[<80207570>] (free_contig_range) from [<8024a474>] (cma_release+0x88/0x148)
r9:80b95c50 r8:80d1235c r7:0000007f r6:e657a000 r5:8103c1c4 r4:0007c180
[<8024a3ec>] (cma_release) from [<805abe60>] (dma_release_from_contiguous+0x38/0x40)
r9:80b95c50 r8:80d1235c r7:80c7e460 r6:00000000 r5:0007f000 r4:e657a000
[<805abe28>] (dma_release_from_contiguous) from [<80115c3c>] (cma_allocator_free+0x58/0x7c)
[<80115be4>] (cma_allocator_free) from [<80116618>] (__arm_dma_free.constprop.2+0x124/0x138)
r7:80c7e460 r6:80f0866c r5:f2c6a000 r4:e2d34d00
[<801164f4>] (__arm_dma_free.constprop.2) from [<80116648>] (arm_dma_free+0x1c/0x24)
r5:00000000 r4:e246b084
[<8011662c>] (arm_dma_free) from [<8078af88>] (mxc_free_frame_buf+0x180/0x1ac)
[<8078ae08>] (mxc_free_frame_buf) from [<8078f478>] (mxc_v4l_close+0x1cc/0x318)
r10:e28140c0 r9:e2445c00 r8:e246b008 r7:00000000 r6:00000000 r5:00000000
r4:e246b000
[<8078f2ac>] (mxc_v4l_close) from [<80764214>] (v4l2_release+0x3c/0x80)
r10:e269cc70 r9:00000008 r8:00000000 r7:e002bf68 r6:e27f2910 r5:e2662800
r4:e28140c0
[<807641d8>] (v4l2_release) from [<8024f908>] (__fput+0x90/0x1dc)
r5:e269cc70 r4:e28140c0
[<8024f878>] (__fput) from [<8024fab4>] (____fput+0x10/0x14)
r10:e2e9403c r9:00000009 r8:e291bf00 r7:e2805d80 r6:e2806194 r5:80fed378
r4:e2806178
[<8024faa4>] (____fput) from [<801582ec>] (task_work_run+0xc4/0xe8)
[<80158228>] (task_work_run) from [<8013d8e8>] (do_exit+0x34c/0xa3c)
r9:00000009 r8:00000000 r7:e328fe30 r6:e2e94000 r5:e2806190 r4:e2805d80
[<8013d59c>] (do_exit) from [<8013f224>] (do_group_exit+0x48/0xd8)
r7:ffffe000
[<8013f1dc>] (do_group_exit) from [<8014a37c>] (get_signal+0x2fc/0x708)
r7:ffffe000 r6:e28d2f40 r5:76428678 r4:00418004
[<8014a080>] (get_signal) from [<8010c1c0>] (do_signal+0x6c/0x40c)
r10:00000036 r9:e328e000 r8:7642867c r7:fffffe00 r6:e328fec8 r5:76428678
r4:e328ffb0
[<8010c154>] (do_signal) from [<8010c72c>] (do_work_pending+0xac/0xbc)
r10:00000036 r9:e328e000 r8:80108c04 r7:00000036 r6:e328ffb0 r5:80108c04
r4:ffffe000
[<8010c680>] (do_work_pending) from [<80108a80>] (slow_work_pending+0xc/0x20)
r7:00000036 r6:60df8b8c r5:00000001 r4:6a33a070
---[ end trace e123636a04f76a1b ]--- -
@Dioneva-M.-Krolow Is a warning not error and looks like memory leak.
Does this happen if you use same camera with some other application (not Qt/QML based)? -
Hi @jsulm
With gst-launch-1.0 this doesn't happen.gst-launch-1.0 imxv4l2videosrc device=/dev/video0 ! imxipuvideosink
The video is stopped normally without returning this warning.
-
Hi,
The GStreamer backend doesn't use that source. You might want to modify it and fix the source for that.
-
Where do I make this modification?
-
You'll have to do that in Qt's sources and build the plugin (just the plugin, no need to rebuild all of Qt)
-
Right, that's exactly what I did, I changed the qtmultimedia, camerabin module, but the problem persists.
See changes below:diff --git a/src/plugins/gstreamer/camerabin/camerabinsession.cpp b/src/plugins/gstreamer/camerabin/camerabinsession.cpp
index ab0bea2..6660995 100644
--- a/src/plugins/gstreamer/camerabin/camerabinsession.cpp
+++ b/src/plugins/gstreamer/camerabin/camerabinsession.cpp
@@ -153,7 +153,7 @@ CameraBinSession::CameraBinSession(GstElementFactory *sourceFactory, QObject *pa
{
if (m_sourceFactory)
gst_object_ref(GST_OBJECT(m_sourceFactory));
-- m_camerabin = gst_element_factory_make(QT_GSTREAMER_CAMERABIN_ELEMENT_NAME, "camerabin");
++ m_camerabin = gst_element_factory_make(QT_GSTREAMER_CAMERABIN_ELEMENT_NAME, "imxv4l2videosrc");//camerabing_signal_connect(G_OBJECT(m_camerabin), "notify::idle", G_CALLBACK(updateBusyStatus), this);
g_signal_connect(G_OBJECT(m_camerabin), "element-added", G_CALLBACK(elementAdded), this);
@@ -520,7 +520,7 @@ GstElement *CameraBinSession::buildCameraSource()
}if (!m_videoSrc)
-- m_videoSrc = gst_element_factory_make("v4l2src", "camera_source");
++ m_videoSrc = gst_element_factory_make("imxv4l2videosrc", "camera_source");if (m_videoSrc)
g_object_set(G_OBJECT(m_cameraSrc), "video-source", m_videoSrc, NULL); -
is it after you call stop()? Can the camera be usable after the error?