• I
    net: sfp: initialize sfp->i2c_block_size at sfp allocation · 813c2dd7
    Ivan Bornyakov 提交于
    sfp->i2c_block_size is initialized at SFP module insertion in
    sfp_sm_mod_probe(). Because of that, if SFP module was never inserted
    since boot, sfp_read() call will lead to zero-length I2C read attempt,
    and not all I2C controllers are happy with zero-length reads.
    
    One way to issue sfp_read() on empty SFP cage is to execute ethtool -m.
    If SFP module was never plugged since boot, there will be a zero-length
    I2C read attempt.
    
      # ethtool -m xge0
      i2c i2c-3: adapter quirk: no zero length (addr 0x0050, size 0, read)
      Cannot get Module EEPROM data: Operation not supported
    
    If SFP module was plugged then removed at least once,
    sfp->i2c_block_size will be initialized and ethtool -m will fail with
    different exit code and without I2C error
    
      # ethtool -m xge0
      Cannot get Module EEPROM data: Remote I/O error
    
    Fix this by initializing sfp->i2_block_size at struct sfp allocation
    stage so no wild sfp_read() could issue zero-length I2C read.
    Signed-off-by: NIvan Bornyakov <i.bornyakov@metrotek.ru>
    Fixes: 0d035bed ("net: sfp: VSOL V2801F / CarlitoxxPro CPGOS03-0490 v2.0 workaround")
    Cc: stable@vger.kernel.org
    Reviewed-by: NAndrew Lunn <andrew@lunn.ch>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    813c2dd7
sfp.c 69.0 KB