[U-Boot] [PATCH] net: eth-uclass: call stop only for active devices

Keerthy j-keerthy at ti.com
Fri Mar 29 09:52:19 UTC 2019



On 27/02/19 11:17 AM, Keerthy wrote:
> 
> 
> On 22/02/19 12:08 AM, Joe Hershberger wrote:
>> On Wed, Feb 20, 2019 at 6:33 AM Keerthy <j-keerthy at ti.com> wrote:
>>>
>>> Currently stop is being called unconditionally without even
>>> checking if start is called. In case of multiple instances eth
>>> being present many devices might just be initialized without
>>> a start call in such cases stop might lead unpredictable behaviors
>>> including aborts and crashes. Hence add a check before calling stop.
>>>
>>> Signed-off-by: Keerthy <j-keerthy at ti.com>
>>> ---
>>>   net/eth-uclass.c | 3 ++-
>>>   1 file changed, 2 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/net/eth-uclass.c b/net/eth-uclass.c
>>> index 2ef20df192..26f7e0b8cd 100644
>>> --- a/net/eth-uclass.c
>>> +++ b/net/eth-uclass.c
>>> @@ -531,7 +531,8 @@ static int eth_pre_remove(struct udevice *dev)
>>>   {
>>>          struct eth_pdata *pdata = dev->platdata;
>>>
>>> -       eth_get_ops(dev)->stop(dev);
>>> +       if (eth_is_active(dev))
>>> +               eth_get_ops(dev)->stop(dev);
>>
>> This seems reasonable... What was the case that provoked an issue?
>> Which driver was having trouble?
> 
> I am trying to implement pru based ethernet driver(multiple instances) 
> with cpsw driver on top on am654-evm. I observed that even though i had 
> not started
> a particular instance of my pru based device stop was getting called and 
> it was crashing right at the end.

Joe,

I am yet to implement a test case for this. Can this patch be applied 
independently?

Regards,
Keerthy

> 
>>
>>>
>>>          /* clear the MAC address */
>>>          memset(pdata->enetaddr, 0, ARP_HLEN);
>>> -- 
>>> 2.17.1
>>>
>>> _______________________________________________
>>> U-Boot mailing list
>>> U-Boot at lists.denx.de
>>> https://lists.denx.de/listinfo/u-boot


More information about the U-Boot mailing list