On Mon, Jun 26, 2017 at 1:48 PM, Zhongping Tan (谭中平)
<[email protected]> wrote:
> Hi Arnd:
> If we can get list_add(&misc->list, &misc_list), then there is no problem at 
> all, but if the misc_register return "-EBUSY"(Maybe the same miscdevice 
> register twice ), then the deadloop will happen at list_for_each_entry(c, 
> &misc_list, list);
> So at my opinion just remove the initialization code or do initialization 
> when we need do list_add.

I think you are misinterpreting a bug you see: the pointer we pass
into misc_register() must not already be registered, which means that
nothing references misc->list at all.

If misc_register() returns success, and you then call it another time,
you will see the exact behavior that you describe, entering an endless
loop in "list_for_each_entry(c, &misc_list, list)". The correct fix for that
is in the calling code, to ensure that the same device can not get
registered multiple times.

        Arnd

Reply via email to