Subject: Re: octeon dev_addrs list usage

From: David Daney <[email-masked]>
Date: Wed, 24 Feb 2010 10:10:15 -0800

On 02/23/2010 12:41 PM, Jiri Pirko wrote:
> Hello David.
>
> Lookin at octeon driver, drivers/net/octeon/octeon_mgmt.c,
> octeon_mgmt_set_rx_filtering function and following code:
>
> 503         if (cam_mode == 1) {
> 504                 /* Add primary address. */
> 505                 octeon_mgmt_cam_state_add(&cam_state, netdev->dev_addr);
> 506                 list_for_each(pos,&netdev->dev_addrs.list) {
> 507                         struct netdev_hw_addr *hw_addr;
> 508                         hw_addr = list_entry(pos, struct netdev_hw_addr, list);
> 509                         octeon_mgmt_cam_state_add(&cam_state, hw_addr->addr);
> 510                         list = list->next;
> 511                 }
> 512         }
>
> besides netdev->dev_addr is first entry in netdev->dev_addrs.list and

Ok.

> "list = list->next;" makes no sense here (I posted a patch correcting
> these earlier),

Right, that does look wrong.

> are you sure you are traversing the right list? This list is
> currently not filled in anywhere (besides ixgbe driver). Don't you want
> to traverse through unicast_list instead? Maybe I'm missing something...
>

You are likely right. I will revisit this code, but it could be a couple 
of days.

Thanks for looking at it,
David Daney