Moderator Control Panel ]

Possible memory leak in cx23885 module?

Possible memory leak in cx23885 module?

Postby funkyapes » Thu Sep 15, 2011 2:06 am

Hello,
I have a strange issue here. My linux system is a OpenSuse 11.3 with a 2.6.34.10-0.2-xen kernel. It has 2 TBS 6981 cards installed and the latest TBS linux driver 110818 compiles and is loaded without any problem. The vdr 1.7.20 starts also without any issue,

Code: Select All Code
dmesg | grep cx23885 shows

 cx23885 driver version 0.0.2 loaded
 cx23885 0000:00:00.0: enabling device (0000 -> 0002)
 CORE cx23885[0]: subsystem: 6981:8888, board: TurboSight TBS 6981 [card=30,autodetected]
 cx25840 2-0044: cx23885 A/V decoder found @ 0x88 (cx23885[0])
 cx25840 2-0044: firmware: requesting v4l-cx23885-avcore-01.fw
 cx25840 2-0044: loaded v4l-cx23885-avcore-01.fw firmware (16382 bytes)
 cx23885_dvb_register() allocating 1 frontend(s)
 cx23885[0]: cx23885 based dvb card
 DVB: registering new adapter (cx23885[0])
 cx23885_dvb_register() allocating 1 frontend(s)
 cx23885[0]: cx23885 based dvb card
 DVB: registering new adapter (cx23885[0])
 cx23885_dev_checkrevision() Hardware revision = 0xa5
 cx23885[0]/0: found at 0000:00:00.0, rev: 4, irq: 16, latency: 0, mmio: 0xfcc00000
 cx23885 0000:00:00.0: setting latency timer to 64
 IRQ 16/cx23885[0]: IRQF_DISABLED is not guaranteed on shared IRQs
 input: cx23885 IR (TurboSight TBS 6981) as /devices/xen/pci-0/pci0000:00/0000:00:00.0/rc/rc0/input0
 rc0: cx23885 IR (TurboSight TBS 6981) as /devices/xen/pci-0/pci0000:00/0000:00:00.0/rc/rc0
 cx23885 0000:00:01.0: enabling device (0000 -> 0002)
 CORE cx23885[1]: subsystem: 6981:8888, board: TurboSight TBS 6981 [card=30,autodetected]
 cx25840 5-0044: cx23885 A/V decoder found @ 0x88 (cx23885[1])
 cx25840 5-0044: firmware: requesting v4l-cx23885-avcore-01.fw
 cx25840 5-0044: loaded v4l-cx23885-avcore-01.fw firmware (16382 bytes)
 cx23885_dvb_register() allocating 1 frontend(s)
 cx23885[1]: cx23885 based dvb card
 DVB: registering new adapter (cx23885[1])
 cx23885_dvb_register() allocating 1 frontend(s)
 cx23885[1]: cx23885 based dvb card
 DVB: registering new adapter (cx23885[1])
 cx23885_dev_checkrevision() Hardware revision = 0xa5
 cx23885[1]/0: found at 0000:00:01.0, rev: 4, irq: 17, latency: 0, mmio: 0xfca00000
 cx23885 0000:00:01.0: setting latency timer to 64
 IRQ 17/cx23885[1]: IRQF_DISABLED is not guaranteed on shared IRQs
 input: cx23885 IR (TurboSight TBS 6981) as /devices/xen/pci-0/pci0000:00/0000:00:01.0/rc/rc1/input1
 rc1: cx23885 IR (TurboSight TBS 6981) as /devices/xen/pci-0/pci0000:00/0000:00:01.0/rc/rc1

/var/log/messages
Code: Select All Code
{--cut --}
vdr: [1677] frontend 0/0 provides DVB-S2 with QPSK ("TurboSight TBS 6981 DVBS/S2 frontend")
vdr: [1677] LNB-sharing: patch version 0.1.4
vdr: [1677] LNB-sharing: setting device 1 to use LNB 1
vdr: [1677] Device 1: will send signals (like 22kHz) to LNB nr. = 1
vdr: [1677] frontend 1/0 provides DVB-S2 with QPSK ("TurboSight TBS 6981 DVBS/S2 frontend")
vdr: [1677] LNB-sharing: patch version 0.1.4
vdr: [1677] LNB-sharing: setting device 2 to use LNB 2
vdr: [1677] Device 2: will send signals (like 22kHz) to LNB nr. = 2
vdr: [1677] frontend 2/0 provides DVB-S2 with QPSK ("TurboSight TBS 6981 DVBS/S2 frontend")
vdr: [1677] LNB-sharing: patch version 0.1.4
vdr: [1677] LNB-sharing: setting device 3 to use LNB 3
vdr: [1677] Device 3: will send signals (like 22kHz) to LNB nr. = 3
vdr: [1677] frontend 3/0 provides DVB-S2 with QPSK ("TurboSight TBS 6981 DVBS/S2 frontend")
vdr: [1677] LNB-sharing: patch version 0.1.4
vdr: [1677] LNB-sharing: setting device 4 to use LNB 4
vdr: [1677] Device 4: will send signals (like 22kHz) to LNB nr. = 4
vdr: [1677] found 4 DVB devices
vdr: [1677] initializing plugin: dummydevice (1.0.2): Output device that does nothing
vdr: [1677] initializing plugin: epgsearch (1.0.0): search the EPG for repeats and more
vdr: [1677] initializing plugin: streamdev-server (0.5.1-git): VDR Streaming Server
vdr: [1677] initializing plugin: svdrpservice (0.0.4): SVDRP client

[-- cut-]

:cry: BUT after 2 hours the complete memory is used and oom-killer starts crashing the system.
The messages log shows the following once the oom-killer kicks in.

[--cut--)
Code: Select All Code
vdr: [1451] frontend 3/0 timed out while tuning to channel 15, tp 111836
kernel: [ 8108.333214] cx23885[1] dvb invoked oom-killer: gfp_mask=0xd0, order=0, oom_adj=0, oom_scor

kernel: [ 8108.333227] cx23885[1] dvb cpuset=/ mems_allowed=0
kernel: [ 8108.333237] Pid: 2690, comm: cx23885[1] dvb Tainted: P            2.6.35.6-0.7-xen #1
kernel: [ 8108.333243] Call Trace:
kernel: [ 8108.333268]  [<c00098f3>] try_stack_unwind+0x173/0x190
kernel: [ 8108.333284]  [<c0007b3f>] dump_trace+0x3f/0xe0
kernel: [ 8108.333297]  [<c000995b>] show_trace_log_lvl+0x4b/0x60
kernel: [ 8108.333307]  [<c0009988>] show_trace+0x18/0x20
kernel: [ 8108.333319]  [<c040b13c>] dump_stack+0x6d/0x72
kernel: [ 8108.333334]  [<c00bcafb>] dump_header+0x9b/0x1d0
kernel: [ 8108.333344]  [<c00bd020>] oom_kill_process+0x90/0x1b0
kernel: [ 8108.333389]  [<c00bd516>] out_of_memory+0xc6/0x1f0
kernel: [ 8108.333400]  [<c00c0671>] __alloc_pages_nodemask+0x5f1/0x610
kernel: [ 8108.333418]  [<c00e7f07>] __vmalloc_area_node+0xc7/0x170
kernel: [ 8108.333430]  [<c00e8111>] vmalloc_32+0x31/0x40
kernel: [ 8108.333445]  [<edbb96bc>] videobuf_dma_init_kernel+0x2c/0xc0 [videobuf_dma_sg]
kernel: [ 8108.333463]  [<edbba0e3>] __videobuf_iolock+0x123/0x150 [videobuf_dma_sg]
kernel: [ 8108.333485]  [<edac0331>] videobuf_iolock+0x31/0x80 [videobuf_core]
kernel: [ 8108.333506]  [<edce0d5f>] cx23885_buf_prepare+0x8f/0x170 [cx23885]
kernel: [ 8108.333546]  [<edce29f6>] dvb_buf_prepare+0x16/0x20 [cx23885]
kernel: [ 8108.333583]  [<edac17dc>] __videobuf_read_start+0xbc/0x130 [videobuf_core]
kernel: [ 8108.333599]  [<edac1ca8>] videobuf_read_start+0x18/0x30 [videobuf_core]
kernel: [ 8108.333615]  [<edb8c751>] videobuf_dvb_thread+0x31/0x194 [videobuf_dvb]
kernel: [ 8108.333627]  [<c0059084>] kthread+0x74/0x80
kernel: [ 8108.333638]  [<c0006502>] kernel_thread_helper+0x6/0x10
[--cut---]

I checked using free and ps the processes and it seems that 3 cx23885 dvb processes are terminate and starting in short intervals and with each interval the used memory increases.

ps -A output is like
Code: Select All Code
{--cut --]
 1677 ?        00:01:11 vdr
 1680 ?        00:00:01 kdvb-ad-0-fe-0
 1683 ?        00:00:01 kdvb-ad-1-fe-0
 1686 ?        00:00:01 kdvb-ad-2-fe-0
 1689 ?        00:00:01 kdvb-ad-3-fe-0
 1695 ?        00:00:28 cx23885[0] dvb
 1839 ?        00:00:00 flush-202:16
 2021 ?        00:00:00 cx23885[1] dvb
 2046 ?        00:00:00 cx23885[0] dvb
 2047 ?        00:00:00 cx23885[1] dvb
{--cut --]
and after about 2 minutes you get
{--cut --]
 1677 ?        00:01:11 vdr
 1680 ?        00:00:01 kdvb-ad-0-fe-0
 1683 ?        00:00:01 kdvb-ad-1-fe-0
 1686 ?        00:00:01 kdvb-ad-2-fe-0
 1689 ?        00:00:01 kdvb-ad-3-fe-0
 1695 ?        00:00:30 cx23885[0] dvb
 1839 ?        00:00:00 flush-202:16
 2100 ?        00:00:00 cx23885[1] dvb
 2102 ?        00:00:00 cx23885[1] dvb
 2103 ?        00:00:00 cx23885[0] dvb
{--cut --]


The same issue applies if there is just one card installed or running on a fresh OpenSuse 11.4 with 2.6.37.6-0.7 kernel.

Any idea how to solve this issue?
funkyapes
 
Posts: 1
Joined: Wed Sep 14, 2011 6:51 pm

Return to Linux

Who is online

Users browsing this forum: No registered users and 16 guests