kobj->state_initialized is never set to 0

Helen Koike helen at koikeco.de
Fri Aug 10 12:39:22 EDT 2018


On Fri, Jul 20, 2018 at 3:39 PM, Greg KH <greg at kroah.com> wrote:
> On Fri, Jul 20, 2018 at 03:33:22PM -0300, Helen Koike wrote:
>> Hi,
>>
>> I am simulating hotplugging a platform device (to the
>> media/platform/vimc driver), so I register it using
>> platform_device_register, then I unregister it with
>> platform_device_unregister, then I register it again, but the code
>> doesn't allow me to register something that was registered before due
>> to this line:
>>
>>     https://github.com/torvalds/linux/blob/master/lib/kobject.c#L334
>>
>> The variable kobj->state_initialized is set to 1 at
>>
>>     https://github.com/torvalds/linux/blob/master/lib/kobject.c#L194
>>
>> but it is never set to 0 again.
>
> Yes, do not do that, that is why we wrote that code.  Never "recycle" a
> struct device, or a kobject, as you never really know if it is still in
> use or not.  That is why it needs to be dynamically created, not
> statically created.
>
>> Is this how it is supposed to work? Or kobj->state_initialized is set
>> to 0 somewhere else I couldn't find?
>
> Nope, don't do this please.  Again, never recycle these objects, bad
> things will happen as the code is not designed to do that for good
> reasons (think object lifetimes, you do not control them fully, other
> things do which you have no control over.)
>
> hope this helps,
>
> greg k-h

Yes, this helps a lot, thank you!

Helen



More information about the Kernelnewbies mailing list