Commit Graph

57 Commits

Author SHA1 Message Date
Marcin Slusarz 5c554e6b98 V4L/DVB (8100): V4L/vivi: fix possible memory leak in vivi_fillbuff
Move allocation after first check and fix memory leak.

Noticed-by: Daniel Marjamäki <danielm77@spray.se>

Signed-off-by: Marcin Slusarz <marcin.slusarz@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2008-06-26 15:58:58 -03:00
Mauro Carvalho Chehab 63b79cfa05 V4L/DVB (7732): vivi: fix a warning
some gcc versions complain that fh is used without being defined.

The error report is bogus. However, fixing it is trivial. Better to make
gcc happy.

Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2008-04-26 09:10:46 -03:00
Mauro Carvalho Chehab fbde31d54b V4L/DVB (7551): vivi: Add a missing \n
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2008-04-24 14:08:48 -03:00
Harvey Harrison 7e28adb249 V4L/DVB (7518): media/video/ replace remaining __FUNCTION__ occurrences
__FUNCTION__ is gcc-specific, use __func__

Signed-off-by: Harvey Harrison <harvey.harrison@gmail.com>
Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2008-04-24 14:07:59 -03:00
Brandon Philips 78718e5d44 V4L/DVB (7492): vivi: Simplify the vivi driver and avoid deadlocks
vivi previously had a very complex queuing system and held spinlocks while
doing copy_to_user, kmalloc, etc.  This caused the driver to easily deadlock
when a multi-threaded application used it and revealed bugs in videobuf too.

This replaces the copy_to_user with memcpy since we were never copying to user
space addresses.  And makes the kmalloc atomic.

Signed-off-by: Brandon Philips <bphilips@suse.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2008-04-24 14:07:57 -03:00
Brandon Philips aa9dbac426 V4L/DVB (7491): vivi: make vivi openable only once
vivi currently doesn't have the infrastructure to handle being opened more than
one time and will crash if it is.  So, make it openable only once.

Signed-off-by: Brandon Philips <bphilips@suse.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2008-04-24 14:07:57 -03:00
Mauro Carvalho Chehab cf8267ff10 V4L/DVB (7456): vivi: Add 32bit compatibility to the module
Thanks to Jiri Slaby <jirislaby@gmail.com> for pointing this issue.


Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2008-04-24 14:07:56 -03:00
Mauro Carvalho Chehab dfd8c04ec1 V4L/DVB (7022): Fix timestamp presentation on vivi driver
Due to date overflow, vivi were not working fine anymore.

Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2008-01-25 19:04:56 -02:00
Mauro Carvalho Chehab 6594ad829a V4L/DVB (6817): Cleanup kernel thread and provide overrun detection
The previous code were a little bit messy. Cleans it up.

Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2008-01-25 19:03:42 -02:00
Mauro Carvalho Chehab 55862ac9b2 V4L/DVB (6816): Add proper locking for buffer filling
Avoids de-alocating buffers before finishing to fill a buffer

Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2008-01-25 19:03:39 -02:00
Mauro Carvalho Chehab 6c2f990105 V4L/DVB (6815): Fix vivi internal debug messages
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2008-01-25 19:03:38 -02:00
Mauro Carvalho Chehab 8996b3f3cf V4L/DVB (6807): fix debug enable
The changes at vivi_template make debug option to not work properly.

Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2008-01-25 19:03:33 -02:00
Mauro Carvalho Chehab 784c668b24 V4L/DVB (6806): Allow emulating changes of video std by vivi
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2008-01-25 19:03:33 -02:00
Mauro Carvalho Chehab 543323bcf4 V4L/DVB (6758): Miscelaneous cleanups
Manually fixed all pertinent checkpatch.pl errors inside the source code.

Also removed some unused code at the driver and a few minor cleanups.

Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2008-01-25 19:03:22 -02:00
Mauro Carvalho Chehab 025341d4f0 V4L/DVB (6755): Avoid troubles when using multiple devices
mv_count is a counter used to move the vertical bars. Before this patch, it
where a static var. This works fine for just one device. However, when using
multiple devices, every device would increment it.

This patch moves it to its correct place: struct vivi_dev. So, now, each device
has its own data.

Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2008-01-25 19:03:22 -02:00
Mauro Carvalho Chehab 55712ff7e0 V4L/DVB (6754): Allow vivi to open multiple video devices
Now, it is possible to open multiple vivi devices, by using n_devs parameter.
This makes vivi driver closer to a real one.

Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2008-01-25 19:03:21 -02:00
Mauro Carvalho Chehab f905c442e5 V4L/DVB (6753): Fix vivi to support non-zero minor node
There were a trouble at vivi driver when using non-zero inodes. This where due
to not properly preserving the minor inode after calling video_register. Since
this driver is a reference for newer drivers, and it is possible to have more
than one video device inside the machine, this patch makes vivi to dynamically
allocate video_device struct.

Thanks to Gregor Jasny <jasny@vidsoft.de> for pointing the issue.

Also, this patch removes a very anoying (but useless) message of not having a
proper release call.

CC: Gregor Jasny <jasny@vidsoft.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2008-01-25 19:03:21 -02:00
Brandon Philips 0fc0686e64 V4L/DVB (6600): V4L: videobuf: don't chew up namespace STATE_.*, convert to VIDEOBUF_
s/STATE_NEEDS_INIT/VIDEOBUF_NEEDS_INIT/g
s/STATE_PREPARED/VIDEOBUF_PREPARED/g
s/STATE_QUEUED/VIDEOBUF_QUEUED/g
s/STATE_ACTIVE/VIDEOBUF_ACTIVE/g
s/STATE_DONE/VIDEOBUF_DONE/g
s/STATE_ERROR/VIDEOBUF_ERROR/g
s/STATE_IDLE/VIDEOBUF_IDLE/g

Signed-off-by: Brandon Philips <bphilips@suse.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2008-01-25 19:02:11 -02:00
Brandon Philips 053fcb6014 V4L/DVB (6602): V4L: Convert videobuf drivers to videobuf_stop
Drivers were using cookie cutter code for stopping the read/stream.  Use the
new videobuf_stop function which is lock safe.

Signed-off-by: Brandon Philips <bphilips@suse.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-12-11 18:08:09 -02:00
Mauro Carvalho Chehab 22c4a4e98e V4L/DVB (6320): v4l core: remove the unused .hardware V4L1 field
struct video_device used to define a .hardware field. While
initialized on severl drivers, this field is never used inside V4L.
However, drivers using it need to include the old V4L1 header.

This seems to cause compilation troubles with some random configs.
Better just to remove it from all drivers.

Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-10-22 12:01:24 -02:00
Trent Piepho a991f44b79 V4L/DVB (6316): Change list_for_each+list_entry to list_for_each_entry
The rest of V4L files.

There is one list_for_each+list_entry in cpia_pp.c that
wasn't changed because it expects the loop iterator to remain NULL if
the list is empty.

A bug in vivi is fixed; the 'safe' version needs to be used because the loop
deletes the list entries.

Simplify a second loop in vivi and get rid if an un-used variable in that loop.

Signed-off-by: Trent Piepho <xyzzy@speakeasy.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-10-10 13:35:29 -03:00
Mauro Carvalho Chehab 14f37aee29 V4L/DVB (6277): vivi cleanup: remove the unused vars
Vivi driver is now simpler. This patch removes the now unused vars.

Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-10-10 00:03:08 -03:00
Brandon Philips ba32bd95d4 V4L/DVB (6275): V4L: vivi.c remove the "resource" locking
The "resource" locking in vivi isn't needed since
streamon/streamoff/read_stream do mutual exclusion using
q->reading/q->streaming.

Plus it is sort of broken:

a) res_locked() use in vivi_read() is racey.
b) res_free() calls mutex_lock twice causing streamoff to break

Signed-off-by: Brandon Philips <bphilips@suse.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-10-10 00:03:05 -03:00
Brandon Philips 85c7c70bc2 V4L/DVB (6274): V4L: vivi.c replace logic in vivi_poll with videobuf_poll_stream
Since vivi is using videobuf_read_stream() it can use videobuf_poll_stream()
now.

Signed-off-by: Brandon Philips <bphilips@suse.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-10-10 00:03:05 -03:00
Brandon Philips a326ae1126 V4L/DVB (6273): V4L: vivi.c vidioc_try_fmt_cap() negotiate a valid field
If the client provides V4L2_FIELD_ANY vivi should return a valid field :)

Signed-off-by: Brandon Philips <bphilips@suse.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-10-10 00:03:00 -03:00
Mauro Carvalho Chehab 3bef5e4a1f V4L/DVB (6264): Make the vertical lines to move
While this is not the standard color bar behaviour, having some movement
there allows to check if buffers are being properly handled.

Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-10-10 00:02:54 -03:00
Mauro Carvalho Chehab 40558dafff V4L/DVB (6259): Fix vivi poll() method
Due to the replace of videobuf_read_one to videobuf_read_stream, poll()
method implementation is wrong. This fixes poll() implementation, making
read of /dev/video? to work again.

With this method, an USB driver can use video-buf, without needing to
request memory from the DMA-safe area.

Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-10-10 00:02:49 -03:00
Mauro Carvalho Chehab 5a0377060e V4L/DVB (6255): Convert vivi to use videobuf-vmalloc
This patch removes the usage of videobuf-dma-sg from vivi driver, using
instead videobuf-vmalloc. This way, vivi will be useful for testing the
newer method. Reverting this patch won't hurt vivi, since both methods
work fine.

Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-10-09 22:14:56 -03:00
Mauro Carvalho Chehab 6bb2790f8a V4L/DVB (6253): Convert vivi to use the newer videobuf-dma-sg module
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-10-09 22:14:56 -03:00
Mauro Carvalho Chehab acb09af4e3 V4L/DVB (6014): vivi: use videobuf_read_stream()
videobuf_read_stream is more efficient than videobuf_read_one

Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-10-09 22:05:10 -03:00
Matthias Kaehlcke 51b540292a V4L/DVB (5811): Use mutex instead of semaphore in Virtual Video driver
The Virtual Video driver uses a semaphore as mutex. Use the mutex API
instead of the (binary) semaphore.

Signed-off-by: Matthias Kaehlcke <matthias.kaehlcke@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-07-18 14:24:29 -03:00
Mauro Carvalho Chehab 74fa39e590 V4L/DVB (5727): Remove VIVI_SCATTER
vivi scatter method were used as a proof of concept. It can be
safelly removed from mainstream, since the current method is
faster and better than the previous solution.

Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-07-18 14:23:49 -03:00
Rafael J. Wysocki 8314418629 Freezer: make kernel threads nonfreezable by default
Currently, the freezer treats all tasks as freezable, except for the kernel
threads that explicitly set the PF_NOFREEZE flag for themselves.  This
approach is problematic, since it requires every kernel thread to either
set PF_NOFREEZE explicitly, or call try_to_freeze(), even if it doesn't
care for the freezing of tasks at all.

It seems better to only require the kernel threads that want to or need to
be frozen to use some freezer-related code and to remove any
freezer-related code from the other (nonfreezable) kernel threads, which is
done in this patch.

The patch causes all kernel threads to be nonfreezable by default (ie.  to
have PF_NOFREEZE set by default) and introduces the set_freezable()
function that should be called by the freezable kernel threads in order to
unset PF_NOFREEZE.  It also makes all of the currently freezable kernel
threads call set_freezable(), so it shouldn't cause any (intentional)
change of behaviour to appear.  Additionally, it updates documentation to
describe the freezing of tasks more accurately.

[akpm@linux-foundation.org: build fixes]
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Acked-by: Nigel Cunningham <nigel@nigel.suspend2.net>
Cc: Pavel Machek <pavel@ucw.cz>
Cc: Oleg Nesterov <oleg@tv-sign.ru>
Cc: Gautham R Shenoy <ego@in.ibm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2007-07-17 10:23:02 -07:00
Marcel Siegert 4acf26703e V4L/DVB (5249): Fix compiler warning in vivi.c
The result of copy_to_user was not used, so the compiler complained
now a warning will be issued if copy_to_user fails.

Signed-off-by: Marcel Siegert <mws@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-02-21 13:35:32 -02:00
Mauro Carvalho Chehab b50e7fe993 V4L/DVB (5147): Make vivi driver to use vmalloced pointers
Before this patch, vivi were simulating a scatter gather DMA transfer.
While this is academic, showing how stuff really works on a real PCI 
device, this means a non-optimized code. 
There are only two memory models that vivi implements:
	1) kernel alloced memory. This is also used by read() method.
	   On this case, a vmalloc32 buffer is allocated at kernel;
	2) userspace allocated memory. This is used by most userspace apps.
	   video-buf will store this pointer.
	   a simple copy_to_user is enough to transfer data.
The third memory model scenario supported by video-buf is overlay mode. 
This model is not implemented on vivi and unlikely to be implemented on 
newer drivers, since now, most userspace apps do some post-processing 
(like de-interlacing).
After this patch, some cleanups may be done at video-buf.c to avoid 
allocating pages, when the driver doesn't need a PCI buffer. This is the 
case of vivi and usb drivers.

Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-02-21 13:34:55 -02:00
Mauro Carvalho Chehab 0b60051286 V4L/DVB (5074): Some fixes at stream waitqueue on vivi
There are several potential troubles on vivi waitqueue code:
- Watchdog timer should be reset at every received frame;
- Watchdog timer should be reset at the beginning of vivi_thread();
- Checks for errors when creating a newer thread with kernel_thread();
- Wake up vivi_thread() after creating it.

Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-02-21 13:34:21 -02:00
Mauro Carvalho Chehab df3a710458 V4L/DVB (5073): Fix OOPS on some waitqueue conditions
If for some reason vivi_thread() fails, vivi will suffer an OOPS at
thread stop code, since waitqueue wouldn't be properly initializated.

Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-02-21 13:34:21 -02:00
Arjan van de Ven fa027c2a0a [PATCH] mark struct file_operations const 4
Many struct file_operations in the kernel can be "const".  Marking them const
moves these to the .rodata section, which avoids false sharing with potential
dirty data.  In addition it'll catch accidental writes at compile time to
these shared resources.

[akpm@sdl.org: dvb fix]
Signed-off-by: Arjan van de Ven <arjan@linux.intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2007-02-12 09:48:45 -08:00
Mauro Carvalho Chehab 35d6270b80 V4L/DVB (5020): Fix: disable interrupts while at KM_BOUNCE_READ
vivi.c uses the KM_BOUNCE_READ with local interrupts enabled. 
This means that if a disk interrupt occurs while vivi.c is using this
fixmap slot, the vivi.c driver will, upon return from that interrupt, find
that the fixmap slot now points at a different physical page.
The net result will probably be rare corruption of disk file contents,
because viv.c will now be altering the page which the disk code was
recently using. 

Thanks to Andrew Morton for pointing this.
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2007-01-15 16:25:28 -02:00
Akinobu Mita 054afee473 V4L/DVB (4995): Vivi: fix kthread_run() error check
The return value of kthread_run() should be checked by IS_ERR().

Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2006-12-27 14:20:12 -02:00
Akinobu Mita 72f678c301 V4L/DVB (4994): Vivi: fix use after free in list_for_each()
Freeing data including list_head in list_for_each() is not safe.

Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2006-12-27 14:20:07 -02:00
Mauro Carvalho Chehab e75f9cee32 V4L/DVB (4861): Remove the need of a STD array for drivers using video_ioctl2
video_ioctl2 will auto-generate standard entries at ENUM_FMT.
Also, now, a driver may return a subset of the video array at
the return, to be stored as the current_norm.
For example, a driver may ask for V4L2_STD_PAL. At return,
driver may change it to V4L2_STD_PAL_B. This way, a futher call
to G_STD will return the exact detected video std.

Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2006-12-10 09:05:01 -02:00
Nigel Cunningham 7dfb71030f [PATCH] Add include/linux/freezer.h and move definitions from sched.h
Move process freezing functions from include/linux/sched.h to freezer.h, so
that modifications to the freezer or the kernel configuration don't require
recompiling just about everything.

[akpm@osdl.org: fix ueagle driver]
Signed-off-by: Nigel Cunningham <nigel@suspend2.net>
Cc: "Rafael J. Wysocki" <rjw@sisk.pl>
Cc: Pavel Machek <pavel@ucw.cz>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2006-12-07 08:39:27 -08:00
Matthew Wilcox 7844d75613 V4L/DVB (4725): Fix vivi compile on parisc
parisc (and several other architectures) don't have a dma_address in their
sg list.  Use the macro instead.

Signed-off-by: Matthew Wilcox <matthew@wil.cx>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2006-10-14 00:43:51 -03:00
Sascha Hauer d7fbefe06d V4L/DVB (4627): Vivi crashes with mplayer
The vivi.current_norm field is not initialized in vivi.c, so a
VIDIOC_G_STD ioctl without a prior call to VIDIOC_S_STD gives
unpredictable results. mplayer does exactly this.

Signed-off-by Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2006-09-26 12:30:36 -03:00
Eric Sesterhenn d084aa7067 V4L/DVB (4510): Fix signedness error in drivers/media/video/vivi.c
when checking the -Wextra signedness warnings issued by gcc 4.1
I came across this one:
drivers/media/video/vivi.c:1001: warning: comparison of unsigned expression < 0 is always false
Since videobuf_reqbufs() returns negative values on errors the current
code does no real error checking since gcc removes the comparison.
This patch fixes this issue by making ret a normal, signed integer.

Signed-off-by: Eric Sesterhenn <snakebyte@gmx.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2006-09-26 12:30:32 -03:00
Mauro Carvalho Chehab 0dfa9abd6b V4L/DVB (4399): Fix a typo that caused some compat stuff to not work
Config option typo:
-#ifdef CONFIG_V4L1_COMPAT
+#ifdef CONFIG_VIDEO_V4L1_COMPAT

Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2006-08-08 13:55:07 -03:00
Mauro Carvalho Chehab 985bc96e27 V4L/DVB (4343): Fix for compilation without V4L1 or V4L1_COMPAT
Removed usage of HAVE_V4L1
Including videodev.h will just include videodev2.h if V4L1 is not supported
V4L1 code at core drivers will honor CONFIG_V4L1_COMPAT stuff

Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2006-07-29 17:22:30 -03:00
Adrian Bunk dc46ace15e V4L/DVB (4146): Drivers/media/video/vivi.c: make 2 functions static
Make two needlessly global functions static.

Signed-off-by: Adrian Bunk <bunk@stusta.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2006-06-25 02:05:13 -03:00
Mauro Carvalho Chehab 4ceb04e1b1 V4L/DVB (4112): Fix: videodev.c were cleaning the pointer, not the values
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
2006-06-25 02:05:09 -03:00