net: systemport: Correclty disambiguate driver instances
authorFlorian Fainelli <f.fainelli@gmail.com>
Wed, 25 Apr 2018 23:21:51 +0000 (16:21 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 27 Apr 2018 17:14:44 +0000 (13:14 -0400)
commit1f3ccc3c3fc26468be00392ef0b2c215f9c9d054
tree18ebf5096f3245e128f803cfdefd7c8df98687bd
parent9faedd643fd9f3a53f10ca270d3bbd436b908766
net: systemport: Correclty disambiguate driver instances

While adding the DSA notifier, we will be sending DSA notifications with
info->master that is going to point to a particular net_device instance.

Our logic in bcm_sysport_map_queues() correctly disambiguates net_device
instances that are not covered by our own driver, but it will not make
sure that info->master points to a particular driver instance that we
are interested in. In a system where e.g: two or more SYSTEMPORT
instances are registered, this would lead in programming two or more
times the queue mapping, completely messing with the logic which does
the queue/port allocation and tracking.

Fix this by looking at the notifier_block pointer which is unique per
instance and allows us to go back to our driver private structure, and
in turn to the backing net_device instance.

Fixes: d156576362c0 ("net: systemport: Establish lower/upper queue mapping")
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Reviewed-by: Vivien Didelot <vivien.didelot@savoirfairelinux.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/broadcom/bcmsysport.c