public inbox for linux-media@vger.kernel.org
 help / color / mirror / Atom feed
From: Mauro Carvalho Chehab <mchehab@redhat.com>
To: Hans Verkuil <hverkuil@xs4all.nl>
Cc: Pawel Osciak <p.osciak@samsung.com>,
	"linux-media@vger.kernel.org" <linux-media@vger.kernel.org>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	"kyungmin.park@samsung.com" <kyungmin.park@samsung.com>
Subject: Re: Magic in videobuf
Date: Mon, 15 Mar 2010 13:23:13 -0300	[thread overview]
Message-ID: <4B9E5EF1.2000600@redhat.com> (raw)
In-Reply-To: <b320a5b9ff16d1df8ecc6272a7fe2c14.squirrel@webmail.xs4all.nl>

Hans Verkuil wrote:
>> Hi Pawel,
>>
>> Pawel Osciak wrote:
>>> Hello,
>>>
>>> is anyone aware of any other uses for MAGIC_CHECK()s in videobuf code
>>> besides driver debugging? I intend to remove them, as we weren't able
>>> to find any particular use for them when we were discussing this at
>>> the memory handling meeting in Norway...
>> It is a sort of paranoid check to avoid the risk of mass memory corruption
>> if something goes deadly wrong with the video buffers.
>>
>> The original videobuf, written back in 2001/2002 had this code, and I've
>> kept it on the redesign I did in 2007, since I know that DMA is very badly
>> implemented on some chipsets. There are several reports of the video
>> driver
>> to corrupt the system memory and damaging the disk data when a PCI
>> transfer
>> to disk happens at the same time that a PCI2PCI data transfer happens
>> (This
>> basically affects overlay mode, where the hardware is programmed to
>> transfer
>> data from the video board to the video adapter board).
>>
>> The DMA bug is present on several VIA and SYS old chipsets. It happened
>> again
>> in some newer chips (2007?), and the fix were to add a quirk blocking
>> overlay
>> mode on the reported broken hardware. It seems that newer BIOSes for those
>> newer hardware fixed this issue.
>>
>> That's said, I never got any report from anyone explicitly saying that
>> they
>> hit the MAGIC_CHECK() logic.
>>
>> I prefer to keep this logic, but maybe we can add a CONFIG option to
>> disable it.
>> Something like:
>>
>> #ifdef CONFIG_VIDEO_DMA_PARANOID_CHECK
>> 	#define MAGIC_CHECK() ...
>> #else
>> 	#define MAGIC_CHECK()
>> #endif
> 
> What on earth does this magic check have to do with possible DMA
> overruns/memory corruption? This assumes that somehow exactly these magic
> fields are overwritten and that you didn't crash because of memory
> corruption elsewhere much earlier. 

Yes, that's the assumption. As, in general, there are more than one videobuffer,
and assuming that one buffer physical address is close to the other, if the data
got miss-aligned at the DMA, it is likely that the magic number of the next buffer
will be overwritten if something got bad. The real situation will depend on how 
fragmented is the memory.

> It pollutes the code

There are only 18 occurences of MAGIC* at a given videobuf driver:
	$ grep MAGIC ~v4l/master_hg/v4l/videobuf-dma-sg.c |wc -l
	18

So, I don't think it is too much pollution.

> for no good
> reason. All it does is oops anyway, so it really doesn't 'avoid' a crash
> (as if you could in such scenarios). And most likely the damage has been
> done already in that case.

It won't avoid the damage, but the error message could potentially help
to track the issue. It will also likely limit the damage.

> Please let us get rid of this. It makes no sense whatsoever.

I don't have a strong opinion about this subject, but if this code might help
to avoid propagating the damage and to track the issue, I don't see why we
need to remove it, especially since it is easy to disable the entire logic
by just adding a few #if's to remove this code on environments where no
problem is expected.

-- 

Cheers,
Mauro

  reply	other threads:[~2010-03-15 16:23 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-03-15  8:07 Magic in videobuf Pawel Osciak
2010-03-15 11:25 ` Mauro Carvalho Chehab
2010-03-15 13:27   ` Hans Verkuil
2010-03-15 16:23     ` Mauro Carvalho Chehab [this message]
2010-03-15 16:40       ` Hans Verkuil
2010-03-15 17:26         ` Mauro Carvalho Chehab
2010-03-15 23:30           ` Andy Walls
2010-03-16 10:13             ` Pawel Osciak
2010-03-16 16:35               ` Hans Verkuil
2010-03-16 16:45                 ` Devin Heitmueller
2010-03-17  6:50                 ` Pawel Osciak
2010-03-17  7:59                   ` Hans Verkuil
2010-03-16 14:58           ` Pawel Osciak

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4B9E5EF1.2000600@redhat.com \
    --to=mchehab@redhat.com \
    --cc=hverkuil@xs4all.nl \
    --cc=kyungmin.park@samsung.com \
    --cc=linux-media@vger.kernel.org \
    --cc=m.szyprowski@samsung.com \
    --cc=p.osciak@samsung.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox