Re: [Bug? Report] kref problem

From: Greg KH
Date: Thu Mar 16 2006 - 13:17:59 EST


On Thu, Mar 16, 2006 at 09:08:56PM +0300, Artem B. Bityutskiy wrote:
> Greg KH wrote:
> >If you use decl_subsys(), you should be fine for this. Use that instead
> >of trying to roll your own subsystem kobjects please. That
> >infrastructure was written for a reason...
> Ok, I see, thanks. I just thought that this subsystem stuff will oblige
> me to use the device/driver/bus model which does not suit me.

decl_subsys() is in the sysfs.h header file, not the device.h file.
Just stay away from anything in there if you hate the driver core so
much :)

> >Data (kobjects) have a different lifespan than code (modules).
> >Seperating them is a good idea, and if not, your reference counting
> >issues can be quite nasty. See the recent EDAC fiasco for a good
> >example of how easy it is to mess things up in this manner.
>
> My logic was that the lifetime of that kobject = lifetime of my module
> because I cannot remove the module because every it's user increments
> the module's refcount. So, if refcount of my module is zero then the
> kobject's refcount is zero. Why this doesn't this work?

It "should" work in theory, but in real-life, the odds of getting all of
that lifetime logic correct... :)

You can do it, but in general, it's easier to think about kobjects as
being dynamic devices, as that is what they are. So making them dynamic
for real is a better thing to do to reinforce that principle.

Again, what are you doing that you can't use the driver core for?

thanks,

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