net/ncsi: Choose hot channel as active one if necessary
authorGavin Shan <gwshan@linux.vnet.ibm.com>
Thu, 20 Oct 2016 00:45:51 +0000 (11:45 +1100)
committerDavid S. Miller <davem@davemloft.net>
Thu, 20 Oct 2016 15:23:07 +0000 (11:23 -0400)
commitbbc7c01e95ceef4e23e343f8cbb6edca887121a5
tree72f1831b284bfe9d3dd163d6eaf70a42e2231a39
parent008a424a24a904ed12c03b203f6f257bcaf12358
net/ncsi: Choose hot channel as active one if necessary

The issue was found on BCM5718 which has two NCSI channels in one
package: C0 and C1. C0 is in link-up state while C1 is in link-down
state. C0 is chosen as active channel until unplugging and plugging
C0's cable:  On unplugging C0's cable, LSC (Link State Change) AEN
packet received on C0 to report link-down event. After that, C1 is
chosen as active channel. LSC AEN for link-up event is lost on C0
when plugging C0's cable back. We lose the network even C0 is usable.

This resolves the issue by recording the (hot) channel that was ever
chosen as active one. The hot channel is chosen to be active one
if none of available channels in link-up state. With this, C0 is still
the active one after unplugging C0's cable. LSC AEN packet received
on C0 when plugging its cable back.

Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ncsi/internal.h
net/ncsi/ncsi-manage.c