[bug report] [PATCH] chelsio: add support for other 10G boards

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



[ Hey Stephen, I know this code is a million years old, but I figured
  it can't hurt to ask.  -dan ]

Hello Stephen Hemminger,

The patch f1d3d38af757: "[PATCH] chelsio: add support for other 10G
boards" from Dec 1, 2006, leads to the following static checker
warning:

	drivers/net/ethernet/chelsio/cxgb/subr.c:630 t1_link_start()
	warn: was shift intended here '(mac.adapter.params.nports < 2)'

drivers/net/ethernet/chelsio/cxgb/subr.c
   623  int t1_link_start(struct cphy *phy, struct cmac *mac, struct link_config *lc)
   624  {
   625          unsigned int fc = lc->requested_fc & (PAUSE_RX | PAUSE_TX);
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
PAUSE_RX is BIT(0) and PAUSE_TX is BIT(1).

   626  
   627          if (lc->supported & SUPPORTED_Autoneg) {
   628                  lc->advertising &= ~(ADVERTISED_ASYM_PAUSE | ADVERTISED_PAUSE);
   629                  if (fc) {
   630                          if (fc == ((PAUSE_RX | PAUSE_TX) &
   631                                     (mac->adapter->params.nports < 2)))

This is a weird condition because (mac->adapter->params.nports < 2) is
0-1 so we could leave the (PAUSE_RX | PAUSE_TX) out:

		if (fc == (mac->adapter->params.nports < 2))

Obviously << 2 isn't intended because that would be equivalent of:

		if (rc == 0)

Maybe a cleaner way to write this would be:

			if ((fc == PAUSE_RX &&
			     mac->adapter->params.nports < 2) ||
			    fc == 0)

Or maybe that's just really weird looking...

   632                                  lc->advertising |= ADVERTISED_PAUSE;
   633                          else {
   634                                  lc->advertising |= ADVERTISED_ASYM_PAUSE;
   635                                  if (fc == PAUSE_RX)
   636                                          lc->advertising |= ADVERTISED_PAUSE;
   637                          }
   638                  }
   639                  phy->ops->advertise(phy, lc->advertising);
   640  
   641                  if (lc->autoneg == AUTONEG_DISABLE) {
   642                          lc->speed = lc->requested_speed;
   643                          lc->duplex = lc->requested_duplex;
   644                          lc->fc = (unsigned char)fc;
   645                          mac->ops->set_speed_duplex_fc(mac, lc->speed,
   646                                                        lc->duplex, fc);
   647                          /* Also disables autoneg */
   648                          phy->state = PHY_AUTONEG_RDY;
   649                          phy->ops->set_speed_duplex(phy, lc->speed, lc->duplex);
   650                          phy->ops->reset(phy, 0);
   651                  } else {
   652                          phy->state = PHY_AUTONEG_EN;
   653                          phy->ops->autoneg_enable(phy); /* also resets PHY */
   654                  }
   655          } else {
   656                  phy->state = PHY_AUTONEG_RDY;
   657                  mac->ops->set_speed_duplex_fc(mac, -1, -1, fc);
   658                  lc->fc = (unsigned char)fc;
   659                  phy->ops->reset(phy, 0);
   660          }
   661          return 0;
   662  }

regards,
dan carpenter



[Index of Archives]     [Kernel Development]     [Kernel Announce]     [Kernel Newbies]     [Linux Networking Development]     [Share Photos]     [IDE]     [Security]     [Git]     [Netfilter]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Device Mapper]

  Powered by Linux