From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753233AbcEJWC6 (ORCPT ); Tue, 10 May 2016 18:02:58 -0400 Received: from mout.web.de ([212.227.15.14]:62607 "EHLO mout.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752268AbcEJWC4 (ORCPT ); Tue, 10 May 2016 18:02:56 -0400 Subject: Re: [PATCH] media: dvb_ringbuffer: Add memory barriers To: Mauro Carvalho Chehab References: <1451248920-4935-1-git-send-email-smoch@web.de> <56B7997C.1070503@web.de> <20160507102235.22e096d8@recife.lan> <20160507102606.73e86c0d@recife.lan> Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Antti Palosaari From: Soeren Moch Message-ID: <57325AB7.7020304@web.de> Date: Wed, 11 May 2016 00:03:35 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.6.0 MIME-Version: 1.0 In-Reply-To: <20160507102606.73e86c0d@recife.lan> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit X-Provags-ID: V03:K0:l67Ck4AeJtIhsURrhSO/NtqsQMRv1rwAanzbzz6HrF7IMbbqGBZ FGxoD9uT0CZomReMZxkyXGWvtZhHeaFSvGkRb5evjsQnp+kbUUOe0ds+g4JWzAavrzcl0g/ kvGBEV4yxfyc83GQIchXJAKPDYVhrx7zK5yI+LFbt3InDxGNJ+Zd9Lvyhn3axOtUh7OG6X/ UducEhXwB1oRwsCe0JxIQ== X-UI-Out-Filterresults: notjunk:1;V01:K0:weAmHOA05KY=:Qvazfq9xDDTur6MR9TBJsM fs6yc/F7LSCTX+HcfRPXWrOXMo120pYDB+N8qNPQGNi5IeE41KE4WB3FXef9ic/aqtSVZIhEd q+wwfiKQ0UG2swUgh6/Hhi/gwJbFmZcQvOtbg0zeDkFS85cGmodmQXYLDwQxph13lyVojTB8h 48iCY9J+qTpCHl0H9oMWp3Vl38AzTW/5pf1+dkF8lIvDox1TpgYanki5S/n5KDwukXJjR7Ex0 WS6ZfdJasjQb3js3byehQx/wiZ8rwsIqokRBxy/AyXzoUXba3GLgJUfGm98Hh0NelcW3fo8Sc qQS5NcoMCowhasEULN9+NEx7hd/Es3ZHgaUaXCV90M0pr8bmb5xEfaAQX2wMLP0JAr9wz8bTM MDokWhsavLVu1JPD3BLEHxSbjKJoFHNcLrB5CQw46cyXHiA5I7b6CKQq9wDdMGaEvRyTA32WG l4Wm0EwnAWI6U31MwcpLVM8ES+xiENKX+/6v23CvonL5k6w47AQR+qffd1qhDVHQO+FuoChY6 /V4EQBXCvc7ghbL2gcqYgpnc3CI87/7VRQtxCOu8SrpoWkolDB2I4hMKsAigmYD++Qeh5rvuj jJLDikSaqnHk8/4/SJ9XCp8O7dLcwgf+o1CquvcGV2RNYZuhPxmCL+F/2TX4w5AElFl48bNeq KLj9PVrHHaclVt7fnPb3HqFNSzrhlONa2DYKYqq83j5PywXKYmFLy4QyOZsqtG1LWPSpQPtPQ Pq/WI1imvyQZNyd4s7Kvv2tAm5BKO7hDuGwU5riP4lRxHfqPmQn71Hg9thshpHRJQHJX/vbDb rmRyY3b Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 05/07/16 15:26, Mauro Carvalho Chehab wrote: > Em Sat, 7 May 2016 10:22:35 -0300 > Mauro Carvalho Chehab escreveu: > >> Hi Soeren, >> >> Em Sun, 7 Feb 2016 20:22:36 +0100 >> Soeren Moch escreveu: >> >>> On 27.12.2015 21:41, Soeren Moch wrote: >>>> Implement memory barriers according to Documentation/circular-buffers.txt: >>>> - use smp_store_release() to update ringbuffer read/write pointers >>>> - use smp_load_acquire() to load write pointer on reader side >>>> - use ACCESS_ONCE() to load read pointer on writer side >>>> >>>> This fixes data stream corruptions observed e.g. on an ARM Cortex-A9 >>>> quad core system with different types (PCI, USB) of DVB tuners. >>>> >>>> Signed-off-by: Soeren Moch >>>> Cc: stable@vger.kernel.org # 3.14+ >>> >>> Mauro, >>> >>> any news or comments on this? >>> Since this is a real fix for broken behaviour, can you pick this up, please? >> >> The problem here is that I'm very reluctant to touch at the DVB core >> without doing some tests myself, as things like locking can be >> very sensible. > > In addition, it is good if other DVB developers could also test it. > Even being sent for some time, until now, nobody else tested it. I know that people from the german vdrportal.de also use this patch for quite some time now. Unfortunately they are not active on the linux-media mailing list. >> >> I'll try to find some time to take a look on it for Kernel 4.8, >> but I'd like to reproduce the bug locally. >> >> Could you please provide me enough info to reproduce it (and >> eventually some test MPEG-TS where you know this would happen)? >> >> I have two DekTek RF generators here, so I should be able to >> play such TS and see what happens with and without the patch >> on x86, arm32 and arm64. > > Ah, forgot to mention, but checkpatch.pl wants comments for the memory > barriers: > OK, when I wrote this patch (linux-4.4-rc6) checkpatch.pl did not complain about missing comments. I will send a version 2 of this patch to address these warnings. Regards, Soeren > WARNING: memory barrier without comment > #52: FILE: drivers/media/dvb-core/dvb_ringbuffer.c:58: > + return (rbuf->pread == smp_load_acquire(&rbuf->pwrite)); > > WARNING: memory barrier without comment > #70: FILE: drivers/media/dvb-core/dvb_ringbuffer.c:79: > + avail = smp_load_acquire(&rbuf->pwrite) - rbuf->pread; > > WARNING: memory barrier without comment > #79: FILE: drivers/media/dvb-core/dvb_ringbuffer.c:89: > + smp_store_release(&rbuf->pread, smp_load_acquire(&rbuf->pwrite)); > > WARNING: memory barrier without comment > #87: FILE: drivers/media/dvb-core/dvb_ringbuffer.c:96: > + smp_store_release(&rbuf->pread, 0); > > WARNING: memory barrier without comment > #88: FILE: drivers/media/dvb-core/dvb_ringbuffer.c:97: > + smp_store_release(&rbuf->pwrite, 0); > > WARNING: memory barrier without comment > #97: FILE: drivers/media/dvb-core/dvb_ringbuffer.c:123: > + smp_store_release(&rbuf->pread, 0); > > WARNING: memory barrier without comment > #103: FILE: drivers/media/dvb-core/dvb_ringbuffer.c:128: > + smp_store_release(&rbuf->pread, (rbuf->pread + todo) % rbuf->size); > > WARNING: memory barrier without comment > #112: FILE: drivers/media/dvb-core/dvb_ringbuffer.c:143: > + smp_store_release(&rbuf->pread, 0); > > WARNING: memory barrier without comment > #117: FILE: drivers/media/dvb-core/dvb_ringbuffer.c:147: > + smp_store_release(&rbuf->pread, (rbuf->pread + todo) % rbuf->size); > > WARNING: memory barrier without comment > #126: FILE: drivers/media/dvb-core/dvb_ringbuffer.c:162: > + smp_store_release(&rbuf->pwrite, 0); > > WARNING: memory barrier without comment > #130: FILE: drivers/media/dvb-core/dvb_ringbuffer.c:165: > + smp_store_release(&rbuf->pwrite, (rbuf->pwrite + todo) % rbuf->size); > > WARNING: memory barrier without comment > #139: FILE: drivers/media/dvb-core/dvb_ringbuffer.c:185: > + smp_store_release(&rbuf->pwrite, 0); > > WARNING: memory barrier without comment > #145: FILE: drivers/media/dvb-core/dvb_ringbuffer.c:190: > + smp_store_release(&rbuf->pwrite, (rbuf->pwrite + todo) % rbuf->size); > > Thanks, > Mauro >