1. 24 8月, 2016 3 次提交
    • Z
      gianfar: fix size of scatter-gathered frames · 6c389fc9
      Zefir Kurtisi 提交于
      The current scatter-gather logic in gianfar is flawed, since
      it does not consider the eTSEC's RxBD 'Data Length' field is
      context depening: for the last fragment it contains the full
      frame size, while fragments contain the fragment size, which
      equals the value written to register MRBLR.
      
      This causes data corruption as soon as the hardware starts
      to fragment receiving frames. As a result, the size of
      fragmented frames is increased by
      (nr_frags - 1) * MRBLR
      
      We first noticed this issue working with DSA, where an ICMP
      request sized 1472 bytes causes the scatter-gather logic to
      kick in. The full Ethernet frame (1518) gets increased by
      DSA (4), GMAC_FCB_LEN (8), and FSL_GIANFAR_DEV_HAS_TIMER
      (priv->padding=8) to a total of 1538 octets, which is
      fragmented by the hardware and reconstructed by the driver
      to a 3074 octet frame.
      
      This patch fixes the problem by adjusting the size of
      the last fragment.
      
      It was tested by setting MRBLR to different multiples of
      64, proving correct scatter-gather operation on frames
      with up to 9000 octets in size.
      Signed-off-by: NZefir Kurtisi <zefir.kurtisi@neratec.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      6c389fc9
    • Z
      gianfar: prevent fragmentation in DSA environments · b323431b
      Zefir Kurtisi 提交于
      The eTSEC register MRBLR defines the maximum space in
      the RX buffers and is set to 1536 by gianfar. This
      reasonably covers the common use case where the MTU
      is kept at default 1500. In that case, the largest
      Ethernet frame size of 1518 plus an optional
      GMAC_FCB_LEN of 8, and an additional padding of 8
      to handle FSL_GIANFAR_DEV_HAS_TIMER totals to 1534
      and nicely fit within the chosen MRBLR.
      
      Alas, if the eTSEC is attached to a DSA enabled switch,
      the (E)DSA header extension (4 or 8 bytes) causes every
      maximum sized frame to be fragmented by the hardware.
      
      This patch increases the maximum RX buffer size by 8
      and rounds up to the next multiple of 64, which the
      hardware's defines as RX buffer granularity.
      Signed-off-by: NZefir Kurtisi <zefir.kurtisi@neratec.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      b323431b
    • E
      udp: fix poll() issue with zero sized packets · e83c6744
      Eric Dumazet 提交于
      Laura tracked poll() [and friends] regression caused by commit
      e6afc8ac ("udp: remove headers from UDP packets before queueing")
      
      udp_poll() needs to know if there is a valid packet in receive queue,
      even if its payload length is 0.
      
      Change first_packet_length() to return an signed int, and use -1
      as the indication of an empty queue.
      
      Fixes: e6afc8ac ("udp: remove headers from UDP packets before queueing")
      Reported-by: NLaura Abbott <labbott@redhat.com>
      Signed-off-by: NEric Dumazet <edumazet@google.com>
      Tested-by: NLaura Abbott <labbott@redhat.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      e83c6744
  2. 23 8月, 2016 12 次提交
  3. 22 8月, 2016 1 次提交
  4. 21 8月, 2016 1 次提交
  5. 20 8月, 2016 16 次提交
  6. 19 8月, 2016 7 次提交