[RFCv2 PATCH 05/36] iommu/process: Bind and unbind process to and from devices
Yisheng Xie
xieyisheng1 at huawei.com
Wed Nov 29 17:11:58 PST 2017
Hi, Jean,
On 2017/11/29 23:01, Jean-Philippe Brucker wrote:
> On 29/11/17 06:08, Yisheng Xie wrote:
>>
>>
>> On 2017/10/6 21:31, Jean-Philippe Brucker wrote:
>>> +int iommu_process_bind_device(struct device *dev, struct task_struct *task,
>>> + int *pasid, int flags)
>>> +{
>> [..]
>>> + err = iommu_process_attach_locked(context, dev);
>>> + if (err)
>>> + iommu_process_put_locked(process);
>> one ref for a context is enough right? so also need call iommu_process_put_locked()
>> if attach ok, or will be leak if user call bind twice for the same device and task.
>
> I wasn't sure, I think I prefer taking one ref for each bind. If user
> calls bind twice, it should call unbind twice as well (in case of leak we
> free the context on process exit).
>
> Also with this implementation, user can call bind for two devices in the
> same domain, which will share the same context structure. So we have to
> take as many refs as bind() calls.
hmm, it has two ref, one for _context_ and the other for *process* (or maybe mm for
your next version), right? For each bind it will take a ref of context as present
design. but why also process ref need be taken for each bind? I mean it seems does
not break _user can call bind for two devices in the same domain_.
And if you really want to take a ref of *process* for echo bind, you should put it when
unbind, right? I just not find where you put the ref of process when unbind. But just put
the process ref when free context.
Maybe I just miss something.
Thanks
Yisheng Xie
>
> Thanks,
> Jean
>
> .
>
More information about the linux-arm-kernel
mailing list