04 Dec, 2015

4 commits

  • Since CHANGEUPPER can now fail, add support for it in the newly
    introduced netdev notifier error injection infrastructure.

    Signed-off-by: Ido Schimmel
    Signed-off-by: Jiri Pirko
    Acked-by: Nikolay Aleksandrov
    Signed-off-by: David S. Miller

    Ido Schimmel
     
  • switchdev drivers reflect the newly requested topology to hardware when
    CHANGEUPPER is received, after software links were already formed.
    However, the operation can fail and user will not be notified, as the
    return value of the notifier is not checked.

    Add this check and rollback software links if necessary.

    Signed-off-by: Ido Schimmel
    Signed-off-by: Jiri Pirko
    Signed-off-by: David S. Miller

    Ido Schimmel
     
  • Commit 7fd89545f337 ("i40e: remove BUG_ON from feature string building")
    added defective output when I40E_FLAG_VEB_MODE_ENABLED was set in
    function i40e_print_features.

    Fix it.

    Miscellanea:

    - Remove unnecessary string variable
    - Add space before not after fixed strings
    - Use kmalloc not kzalloc
    - Don't initialize i to 0, use result of first snprintf

    Reported-by: Sergei Shtylyov
    Signed-off-by: Joe Perches
    Signed-off-by: David S. Miller

    Joe Perches
     
  • Jeff Kirsher says:

    ====================
    Intel Wired LAN Driver Updates 2015-12-03

    This series contains updates to ixgbe and ixgbevf only.

    Mark cleans up ixgbe_init_phy_ops_x550em, since this was designed to
    initialize function pointers only and moves the KR PHY reset to the
    ixgbe_setup_internal_phy_t_x550em which was designed to detect which
    mode the PHY operates in and set it up. Added the new thermal alarm
    type support used with newer X550EM_x devices. Fixed both ixgbe and
    ixgbevf to use a private work queue to avoid hangs, which would
    possibly occur when creating and destroying many VFS repeatedly.
    Updated ixgbe PTP implementation to accommodate X550EM_x devices,
    which handle clocking differently. Fixed specification violations
    in the datasheet, which was reported by Dan Streetman. Fixed ixgbe
    to check for and handle IPv6 extended headers so that Tx checksum
    offload can be done, which was reported by Tom Herbert. Fixed ixgbe
    link issue for some systems with X540 or X550 by only inhibiting the
    turning PHY power off when manageability is present.

    Alex Duyck refactors the MAC address configuration code, which in
    turns fixes an issue where once 63 entries had been used, you could no
    longer add additional filters. Updated ixgbe to use __dev_uc_sync
    which also resolved an issue in which you could not remove an FDB
    address without having to reset the port. Updated the ixgbe driver
    to make use of all the free RAR entries for FDB use if needed.

    v2: updated patch 13 to "Alex Duyck Approved" version, in the original
    submission, I had grabbed a previous version of the patch and did not
    catch it was superseded by a later version
    ====================

    Signed-off-by: David S. Miller

    David S. Miller
     

03 Dec, 2015

36 commits

  • Check for and handle IPv6 extended headers so that Tx checksum
    offload can be done. Also use skb_checksum_help for unexpected
    cases. Thanks to Tom Herbert for noticing these problems. Thanks
    to Alexander Duyck for seeing how to coalesce the error handling
    into one location.

    Reported-by: Tom Herbert
    Signed-off-by: Mark Rustad
    Tested-by: Darin Miller
    Signed-off-by: Jeff Kirsher

    Mark Rustad
     
  • Instead of inhibiting PHY power control when manageability is
    present, only inhibit turning PHY power off when manageability
    is present. Consequently, PHY power will always be turned on when
    requested. Without this patch, some systems with X540 or X550
    devices in some conditions will never get link.

    Signed-off-by: Mark Rustad
    Tested-by: Phil Schmitt
    Signed-off-by: Jeff Kirsher

    Mark Rustad
     
  • Check for and handle IPv6 extended headers so that Tx checksum
    offload can be done. Also use skb_checksum_help for unexpected
    cases. Thanks to Tom Herbert for noticing these problems. Thanks
    to Alexander Duyck for recognizing problems with the first version
    of this patch and recognizing how to coalesce error conditions
    into a single location.

    Reported-by: Tom Herbert
    Signed-off-by: Mark Rustad
    Signed-off-by: Jeff Kirsher

    Mark Rustad
     
  • Save VF device pointers and take references to speed accesses used
    to monitor the device behavior to avoid slot resets. The saved
    information avoids lock contention during the search used to access
    each of the VFs.

    Signed-off-by: Mark Rustad
    Tested-by: Darin Miller
    Tested-by: Phil Schmitt
    Signed-off-by: Jeff Kirsher

    Mark Rustad
     
  • According to the datasheets, the driver should wait for the master
    disable bit to read as being set before checking the status
    register for master disable.

    Reported-by: Dan Streetman
    Signed-off-by: Mark Rustad
    Tested-by: Darin Miller
    Signed-off-by: Jeff Kirsher

    Mark Rustad
     
  • The ixgbe driver was violating the specification in the datasheet
    by not waiting 1ms before checking for the reset bit clearing. This
    is called out for devices supported by ixgbe, so implement the
    required delay.

    Reported-by: Dan Streetman
    Signed-off-by: Mark Rustad
    Tested-by: Darin Miller
    Signed-off-by: Jeff Kirsher

    Mark Rustad
     
  • The X550EM_x devices handle clocking differently, so update the
    PTP implementation to accommodate them. This involves significant
    changes to ixgbe's PTP code to accommodate the new range of
    behaviors including things like non-power-of-2 clock wrapping.

    Signed-off-by: Mark Rustad
    Tested-by: Darin Miller
    Signed-off-by: Jeff Kirsher

    Mark Rustad
     
  • This change makes it so that we allow the PF to make use of all free RAR
    entries for FDB use if needed.

    Previously the code limited us to 16 unicast entries, however this was
    shared between MACVLAN which wasn't limited and the FDB code which was. So
    instead of treating the FDB code as a second class citizen I have updated
    it so that it has access to just as many entries as the MACVLAN filters.

    Signed-off-by: Alexander Duyck
    Tested-by: Darin Miller
    Signed-off-by: Jeff Kirsher

    Alexander Duyck
     
  • This change replaces the ixgbe_write_uc_addr_list call in ixgbe_set_rx_mode
    with a call to __dev_uc_sync instead. This works much better with the MAC
    addr list code that was already in place and solves an issue in which you
    couldn't remove an FDB address without having to reset the port.

    Signed-off-by: Alexander Duyck
    Tested-by: Darin Miller
    Signed-off-by: Jeff Kirsher

    Alexander Duyck
     
  • In the process of tracking down a memory leak when adding/removing FDB
    entries I had to go through the MAC address configuration code for ixgbe.
    In the process of doing so I found a number of issues that impacted
    readability and performance. This change updates the code in general to
    clean it up so it becomes clear what each step is doing. From what I can
    tell there a couple of bugs cleaned up in this code.

    First is the fact that the MAC addresses were being double counted for the
    PF. As a result once entries up to 63 had been used you could no longer
    add additional filters.

    A simple test case for this:
    for i in `seq 0 96`
    do
    ip link add link ens8 name mv$i type macvlan
    ip link set dev mv$i up
    done

    Test script:
    ethregs -s 0:8.0 | grep -e "RAH" | grep 8000....$

    When things are working correctly RAL/H registers 1 - 97 will be consumed.
    In the failing case it will stop at 63 and prevent any further filters from
    being added.

    Signed-off-by: Alexander Duyck
    Tested-by: Darin Miller
    Signed-off-by: Jeff Kirsher

    Alexander Duyck
     
  • Make some minor cleanups, such as simplifying return paths, deleting
    unneeded initializations, return values more directly and so forth.

    Signed-off-by: Mark Rustad
    Tested-by: Darin Miller
    Signed-off-by: Jeff Kirsher

    Mark Rustad
     
  • Use a private workqueue to avoid hangs that were otherwise possible
    when performing stress tests, such as creating and destroying many
    VFS repeatedly.

    Signed-off-by: Mark Rustad
    Tested-by: Darin Miller
    Signed-off-by: Jeff Kirsher

    Mark Rustad
     
  • Use a private workqueue to avoid hangs that were otherwise possible
    when performing stress tests, such as creating and destroying many
    VFS repeatedly.

    Signed-off-by: Mark Rustad
    Tested-by: Darin Miller
    Signed-off-by: Jeff Kirsher

    Mark Rustad
     
  • The newer copper PHY implementation used with newer X550EM_x
    devices uses a different thermal alarm type than the earlier
    one. Make changes to support both types.

    Signed-off-by: Mark Rustad
    Tested-by: Darin Miller
    Signed-off-by: Jeff Kirsher

    Mark Rustad
     
  • This patch removes KR PHY reset from ixgbe_init_phy_ops_x550em,
    since this function is meant to initialize function pointers for
    the detected PHY type. Internal PHY reset was moved to
    ixgbe_setup_internal_phy_t_x550em which will now detect which
    mode the internal PHY operates in and set it up as required.

    Signed-off-by: Mark Rustad
    Tested-by: Darin Miller
    Signed-off-by: Jeff Kirsher

    Mark Rustad
     
  • Don't open-code it.

    CC: Solarflare linux maintainers
    CC: Shradha Shah
    CC: netdev@vger.kernel.org
    Signed-off-by: Jarod Wilson
    Acked-by: Bert Kenward
    Signed-off-by: David S. Miller

    Jarod Wilson
     
  • If tcp_send_ack() can not allocate skb, we properly handle this
    and setup a timer to try later.

    Use __GFP_NOWARN to avoid polluting syslog in the case host is
    under memory pressure, so that pertinent messages are not lost under
    a flood of useless information.

    sk_gfp_atomic() can use its gfp_mask argument (all callers currently
    were using GFP_ATOMIC before this patch)

    We rename sk_gfp_atomic() to sk_gfp_mask() to clearly express this
    function now takes into account its second argument (gfp_mask)

    Note that when tcp_transmit_skb() is called with clone_it set to false,
    we do not attempt memory allocations, so can pass a 0 gfp_mask, which
    most compilers can emit faster than a non zero or constant value.

    Signed-off-by: Eric Dumazet
    Signed-off-by: David S. Miller

    Eric Dumazet
     
  • Merge branch 'hv_netvsc-less-headroom'

    K. Y. Srinivasan says:

    ====================
    hv_netvsc: Eliminate the additional head room

    In an attempt to avoid having to allocate memory on the send path, the netvsc
    driver was requesting additional head room so that both rndis header and the
    netvsc packet (the state that had to persist) could be placed in the skb.
    Since the amount of head room requested was exceeding the default head room
    as set in LL_MAX_HEADER, we were forcing a reallocation of skb.

    With this patch-set, I have reduced the size of the netvsc packet to less
    than 20 bytes and with this reduction we don't need to ask for any additional
    headroom. We place the rndis header in the skb head room and we place the
    netvsc packet in control buffer area in the skb.

    V2: - Addressed review comments:
    - Eliminated more fields from netvsc packet structure.

    V3: - Fixed a typo in patch: hv_netvsc: Don't ask for additional head room in the skb.
    ====================

    Signed-off-by: David S. Miller

    David S. Miller
     
  • Eliminate vlan_tci from struct hv_netvsc_packet.

    Signed-off-by: K. Y. Srinivasan
    Signed-off-by: David S. Miller

    KY Srinivasan
     
  • Eliminate status from struct hv_netvsc_packet.

    Signed-off-by: K. Y. Srinivasan
    Signed-off-by: David S. Miller

    KY Srinivasan
     
  • Eliminate xmit_more from struct hv_netvsc_packet.

    Signed-off-by: K. Y. Srinivasan
    Signed-off-by: David S. Miller

    KY Srinivasan
     
  • Eliminate completion_func from struct hv_netvsc_packet.

    Signed-off-by: K. Y. Srinivasan
    Signed-off-by: David S. Miller

    KY Srinivasan
     
  • Eliminate is_data_pkt from struct hv_netvsc_packet.

    Signed-off-by: K. Y. Srinivasan
    Signed-off-by: David S. Miller

    KY Srinivasan
     
  • Eliminate send_completion_tid from struct hv_netvsc_packet.

    Signed-off-by: K. Y. Srinivasan
    Signed-off-by: David S. Miller

    KY Srinivasan
     
  • Eliminate page_buf from struct hv_netvsc_packet.

    Signed-off-by: K. Y. Srinivasan
    Reviewed-by: Haiyang Zhang
    Signed-off-by: David S. Miller

    KY Srinivasan
     
  • Packet scheduler guarantees there won't be multiple senders for the same
    queue and as we use q_idx for multi_send_data the spinlock is redundant.

    Signed-off-by: Vitaly Kuznetsov
    Signed-off-by: K. Y. Srinivasan
    Signed-off-by: David S. Miller

    Vitaly Kuznetsov
     
  • Signed-off-by: Vitaly Kuznetsov
    Signed-off-by: K. Y. Srinivasan
    Signed-off-by: David S. Miller

    Vitaly Kuznetsov
     
  • The rndis header is 116 bytes big and can be placed in the default
    head room that will be available in the skb. Since the netvsc packet
    is less than 48 bytes, we can use the skb control buffer
    for the netvsc packet. With these changes we don't need to
    ask for additional head room.

    Signed-off-by: K. Y. Srinivasan
    Reviewed-by: Haiyang Zhang
    Signed-off-by: David S. Miller

    KY Srinivasan
     
  • Eliminate send_completion_ctx from struct hv_netvsc_packet.

    Signed-off-by: K. Y. Srinivasan
    Reviewed-by: Haiyang Zhang
    Signed-off-by: David S. Miller

    KY Srinivasan
     
  • Eliminate send_completion from struct hv_netvsc_packet.

    Signed-off-by: K. Y. Srinivasan
    Reviewed-by: Haiyang Zhang
    Signed-off-by: David S. Miller

    KY Srinivasan
     
  • Eliminatte the data field from struct hv_netvsc_packet.

    Signed-off-by: K. Y. Srinivasan
    Reviewed-by: Haiyang Zhang
    Signed-off-by: David S. Miller

    KY Srinivasan
     
  • Eliminate rndis_msg pointer from hv_netvsc_packet structure.

    Signed-off-by: K. Y. Srinivasan
    Reviewed-by: Haiyang Zhang
    Signed-off-by: David S. Miller

    KY Srinivasan
     
  • Eliminate the channel field in hv_netvsc_packet structure.

    Signed-off-by: K. Y. Srinivasan
    Reviewed-by: Haiyang Zhang
    Signed-off-by: David S. Miller

    KY Srinivasan
     
  • Rearrange the elements of struct hv_negtvsc_packet for optimal layout -
    eliminate unnecessary padding.

    Signed-off-by: K. Y. Srinivasan
    Reviewed-by: Haiyang Zhang
    Signed-off-by: David S. Miller

    KY Srinivasan
     
  • As part of reducing the size of the hv_netvsc_packet, resize some of the
    variables based on their usage.

    Signed-off-by: K. Y. Srinivasan
    Reviewed-by: Haiyang Zhang
    Signed-off-by: David S. Miller

    KY Srinivasan
     
  • Jeff Kirsher says:

    ====================
    Intel Wired LAN Driver Updates 2015-12-01

    This series contains updates to i40e and i40evf only.

    Helin adds new fields to i40e_vsi to store user configured RSS config data
    and the code to use it. Also renamed RSS items to clarify functionality
    and scope to users. Fixed a confusing kernel message of enabling RSS size
    by reporting it together with the hardware maximum RSS size.

    Anjali fixes the issue of forcing writeback too often causing us to not
    benefit from NAPI.

    Jesse adds a prefetch for data early in the transmit path to help immensely
    for pktgen and forwarding workloads. Fixed the i40e driver that was
    possibly sleeping inside critical section of code.

    Carolyn fixes an issue where adminq init failures always provided a message
    that NVM was newer than expected, when this is not always the case for
    init_adminq failures. Fixed by adding a check for that specific error
    condition and a different helpful message otherwise.

    Mitch fixes error message by telling the user which VF is being naughty,
    rather than making them guess. Updated the queue_vector array from a
    statically-sized member of the adapter structure, to a dynamically-allocated
    and -sized array. This reduces the size of the adapter structure and allows
    us to support any number of queue vectors in the future without changing the
    code.
    ====================

    Signed-off-by: David S. Miller

    David S. Miller