[PATCH v3 19/20] coresight: add try_get_module() in coresight_grab_device()

Suzuki K Poulose suzuki.poulose at arm.com
Wed Jul 22 07:26:09 EDT 2020


On 07/22/2020 11:48 AM, Greg KH wrote:
> On Wed, Jul 22, 2020 at 11:49:48AM +0100, Suzuki K Poulose wrote:
>> Hi Tingwei,
>>
>> On 07/17/2020 06:45 AM, Tingwei Zhang wrote:
>>> When coresight device is in an active session, driver module of
>>> that device should not be removed. Use try_get_module() in
>>> coresight_grab_device() to prevent module to be unloaded.
>>>
>>
>> Is this really sufficient ? AFAIU, a device could be removed, but the
>> module may still be alive due to the refcount on the module. This
>> could imply that we have stale pointers in the _path_, which could
>> lead to corruption elsewhere. Should we do a get/put_device() instead ?
> 
> Remember there are two separate things here, code and data.  There are
> two different reference counts for them, do not confuse the two.
> 
> get/put is needed when you have a reference to the data, module stuff is
> when you are calling into code.

Exactly. In this case, we have reference to the data specific to the
device in a data structure specific to one session, which doesn't have
any link back from the device to release it. Thus we need get/put here
to make sure that data doesn't get released under our feet.

> 
> But note that you do not always need to grab a reference count to the
> module, as long as the module can properly tear the data down when it is
> asked to be removed.  Look at networking drivers as a great example of
> that.

Thanks

Suzuki



More information about the linux-arm-kernel mailing list