lkml.org 
[lkml]   [2003]   [Jul]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [RFC/PATCH] sysfs'ify video4linux
On Wed, Jul 16, 2003 at 10:20:18PM +0200, Gerd Knorr wrote:
> > It looks like the video drivers include a "struct video_device"
> > structure within their own structures, right?
>
> Yes, it is allocated/freed by the driver, most seem to simply include
> one ore more "struct video_device" somewhere in the per-device struct.

So you CAN NOT just blindly put a kobject (meaning a class_device)
structure inside of there.

> > That will have to be changed to a pointer to that structure in order
> > for the lifetime rules to work properly.
>
> Hmm. I doubt it will be that simple. struct video_device has a priv
> field which can be used by the drivers to hook in some driver-private
> data. That may point into nowhere if struct video_device has a longer
> live time due to some kobject still being referenced. Wouldn't be a
> issue for videodev.o itself, but might become a problem for drivers
> which want add private properties and rely on video_device->priv
> for finding the per-device data. Problem isn't solved but justed
> moved to the next corner ...

No, just have the video drivers have a release callback to do the
freeing. It's pretty simple, look at usb_host_release() in
drivers/usb/core/hcd.c. That's exactly what that is for. Hm, I
shouldn't have to check for bus->release() there, as release is now
required...

> Maybe let video_unregister sleep on a semaphore which gets woken up
> by the release function? That should make sure the sysfs objects are
> not referenced any more if video_unregister() returns. I use a similar
> method in some places when shutting down kernel threads, to make sure it
> is really stopped before rmmod frees the memory.

Ick, no. Try doing what I did for usb hosts, it's much simpler.

> > Look at the dev file in /sys/class/tty/*, or in /sys/block/hd* or in
> > /sys/class/usb/*, and so on...
>
> I've found the code in drivers/block/genhd.c in the meantime :)

genhd.c uses "raw" kobjects. It might be easier to look at a
class_device example like the above mentioned usb_host one.

If you have any other questions/problems, feel free to ask.

thanks,

greg k-h
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 13:46    [W:0.121 / U:0.144 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site