Messages in this thread Patch in this message | | | From | <> | Subject | RE: [PATCH net-next v3 6/6] net/ncsi: Configure multi-package, multi-channel modes with failover | Date | Fri, 9 Nov 2018 21:58:44 +0000 |
| |
Hi Samuel,
After running more testing, I notice that the extra patch causing failover function to fail. Also, occasionally, I will see two channels having TX enabled if I send netlink command back-to-back.
cat /sys/kernel/debug/ncsi_protocol/ncsi_device_ IFIDX IFNAME NAME PID CID RX TX MP MC WP WC PC CS PS LS RU CR NQ HA ===================================================================== 2 eth2 ncsi0 000 000 1 1 1 1 1 1 1 2 1 1 1 1 0 1 2 eth2 ncsi1 000 001 1 1 1 1 1 1 0 2 1 1 1 1 0 1 2 eth2 ncsi2 001 000 0 0 1 1 0 0 0 1 0 1 1 1 0 1 2 eth2 ncsi3 001 001 0 0 1 1 0 0 0 1 0 1 1 1 0 1 ===================================================================== MP: Multi-mode Package WP: Whitelist Package MC: Multi-mode Channel WC: Whitelist Channel PC: Primary Channel CS: Channel State IA/A/IV 1/2/3 PS: Poll Status LS: Link Status RU: Running CR: Carrier OK NQ: Queue Stopped HA: Hardware Arbitration
Thanks, Justin
> From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 > From: Samuel Mendoza-Jonas <sam@mendozajonas.com> > Date: Fri, 9 Nov 2018 13:11:03 +1100 > Subject: [PATCH] net/ncsi: Reset state fixes, single-channel LSC > > --- > net/ncsi/ncsi-aen.c | 8 +++++--- > net/ncsi/ncsi-manage.c | 19 +++++++++++++++---- > 2 files changed, 20 insertions(+), 7 deletions(-) > > diff --git a/net/ncsi/ncsi-aen.c b/net/ncsi/ncsi-aen.c > index 39c2e9eea2ba..034cb1dc5566 100644 > --- a/net/ncsi/ncsi-aen.c > +++ b/net/ncsi/ncsi-aen.c > @@ -93,14 +93,16 @@ static int ncsi_aen_handler_lsc(struct ncsi_dev_priv *ndp, > if ((had_link == has_link) || chained) > return 0; > > - if (!ndp->multi_package && !nc->package->multi_channel) { > - if (had_link) > - ndp->flags |= NCSI_DEV_RESHUFFLE; > + if (!ndp->multi_package && !nc->package->multi_channel && had_link) { > + ndp->flags |= NCSI_DEV_RESHUFFLE; > ncsi_stop_channel_monitor(nc); > spin_lock_irqsave(&ndp->lock, flags); > list_add_tail_rcu(&nc->link, &ndp->channel_queue); > spin_unlock_irqrestore(&ndp->lock, flags); > return ncsi_process_next_channel(ndp); > + } else { > + /* Configured channel came up */ > + return 0;
It is always going to else statement if multi_package and/or mutlit_channel is enabled. npcm7xx-emc f0825000.eth eth2: NCSI: ncsi_aen_handler_lsc() - pkg 0 ch 0 state down npcm7xx-emc f0825000.eth eth2: NCSI: ncsi_aen_handler_lsc() - had_link 1, has_link 0, chained 0
These codes have no chance to run. if (had_link) { ncm = &nc->modes[NCSI_MODE_TX_ENABLE]; if (ncsi_channel_is_last(ndp, nc)) { /* No channels left, reconfigure */ return ncsi_reset_dev(&ndp->ndev); } else if (ncm->enable) { /* Need to failover Tx channel */ ncsi_update_tx_channel(ndp, nc->package, nc, NULL); }
> } >
| |