16 Feb, 2018

3 commits

  • …etooth/bluetooth-next

    Johan Hedberg says:

    ====================
    pull request: bluetooth-next 2018-02-15

    Here's the first bluetooth-next pull request targetting the 4.17 kernel
    release.

    - Fixes & cleanups to Atheros and Marvell drivers
    - Support for two new Realtek controllers
    - Support for new Intel Bluetooth controller
    - Fix for supporting multiple slave-role Bluetooth LE connections
    ====================

    Signed-off-by: David S. Miller <davem@davemloft.net>

    David S. Miller
     
  • Remove rt_table_id from rtable. It was added for getroute to return the
    table id that was hit in the lookup. With the changes for fibmatch the
    table id can be extracted from the fib_info returned in the fib_result
    so it no longer needs to be in rtable directly.

    Signed-off-by: David Ahern
    Signed-off-by: David S. Miller

    David Ahern
     
  • This patch adds possibility to get tun device's net namespace fd
    in the same way we allow to do that for sockets.

    Socket ioctl numbers do not intersect with tun-specific, and there
    is already SIOCSIFHWADDR used in tun code. So, SIOCGSKNS number
    is choosen instead of custom-made for this functionality.

    Note, that open_related_ns() uses plain get_net_ns() and it's safe
    (net can't be already dead at this moment):

    tun socket is allocated via sk_alloc() with zero last arg (kern = 0).
    So, each alive socket increments net::count, and the socket is definitely
    alive during ioctl syscall.

    Also, common variable net is introduced, so small cleanup in TUNSETIFF
    is made.

    Signed-off-by: Kirill Tkhai
    Signed-off-by: David S. Miller

    Kirill Tkhai
     

15 Feb, 2018

20 commits

  • Jeff Kirsher says:

    ====================
    40GbE Intel Wired LAN Driver Updates 2018-02-14

    This patch series enables the new mqprio hardware offload mechanism
    creating traffic classes on VFs for XL710 devices. The parameters
    needed to configure these traffic classes/queue channels are provides
    by the user via the tc tool. A maximum of four traffic classes can be
    created on each VF. This patch series also enables application of cloud
    filters to each of these traffic classes. The cloud filters are applied
    using the tc-flower classifier.

    Example:
    1. tc qdisc add dev vf0 root mqprio num_tc 4 map 0 0 0 0 1 2 2 3\
    queues 2@0 2@2 1@4 1@5 hw 1 mode channel
    2. tc qdisc add dev vf0 ingress
    3. ethtool -K vf0 hw-tc-offload on
    4. ip link set eth0 vf 0 spoofchk off
    5. tc filter add dev vf0 protocol ip parent ffff: prio 1 flower dst_ip\
    192.168.3.5/32 ip_proto udp dst_port 25 skip_sw hw_tc 2
    ====================

    Signed-off-by: David S. Miller

    David S. Miller
     
  • The DP83867 has a muxing option for the CLK_OUT pin. It is possible
    to set CLK_OUT for different channels.
    Create a binding to select a specific clock for CLK_OUT pin.

    Signed-off-by: Wadim Egorov
    Signed-off-by: Daniel Schultz
    Reviewed-by: Andrew Lunn
    Reviewed-by: Florian Fainelli
    Signed-off-by: David S. Miller

    Wadim Egorov
     
  • Use readq() (via t4_read_reg64()) to read 64-bits at a time.
    Read residual in 32-bit multiples.

    Signed-off-by: Rahul Lakkireddy
    Signed-off-by: Ganesh Goudar
    Signed-off-by: David S. Miller

    Rahul Lakkireddy
     
  • Rework logic to read EDC and MC. Do 32-bit reads at a time.

    Signed-off-by: Rahul Lakkireddy
    Signed-off-by: Ganesh Goudar
    Signed-off-by: David S. Miller

    Rahul Lakkireddy
     
  • 88E6341 devices default to timestamping at the PHY, but due to a
    hardware issue, timestamps via this component are unreliable. For
    this family, configure the PTP hardware to force the timestamping
    to occur at the MAC.

    Signed-off-by: Brandon Streiff
    Signed-off-by: Andrew Lunn
    Signed-off-by: David S. Miller

    Brandon Streiff
     
  • This patch implements RX/TX timestamping support.

    The Marvell PTP hardware supports RX timestamping individual message
    types, but for simplicity we only support the EVENT receive filter since
    few if any clients bother with the more specific filter types.

    checkpatch and reverse Christmas tree changes by Andrew Lunn.

    Re-factor duplicated code paths and avoid IfOk anti-pattern, use the
    common ptp worker thread from the class layer and time stamp UDP/IPv4
    frames as well as Layer-2 frame by Richard Cochran.

    Signed-off-by: Brandon Streiff
    Signed-off-by: Andrew Lunn
    Signed-off-by: Richard Cochran
    Signed-off-by: David S. Miller

    Brandon Streiff
     
  • This patch adds support for configuring mv88e6xxx GPIO lines as PTP
    pins, so that they may be used for time stamping external events or for
    periodic output.

    Checkpatch and reverse Christmas tree fixes by Andrew Lunn

    Periodic output removed by Richard Cochran, until a better abstraction
    of a VCO is added to Linux in general.

    Signed-off-by: Brandon Streiff
    Signed-off-by: Andrew Lunn
    Signed-off-by: Richard Cochran
    Signed-off-by: David S. Miller

    Brandon Streiff
     
  • MV88E6352 and later switches support GPIO control through the "Scratch
    & Misc" global2 register. (Older switches do too, though with a slightly
    different register interface. Only the 6352-style is implemented here.)

    Add a new file, global2_scratch.c, for operations in the Scratch & Misc
    space. Additionally, add a GPIO operations structure to present an
    abstract view over GPIO manipulation.

    Reverse Christmas tree and unsigned has been replaced with unsigned
    int by Andrew Lunn.

    Signed-off-by: Brandon Streiff
    Signed-off-by: Andrew Lunn
    Signed-off-by: David S. Miller

    Brandon Streiff
     
  • This patch adds basic support for exposing the 32-bit timestamp counter
    inside the mv88e6xxx switch as a ptp_clock.

    Adjfine implemented by Richard Cochran.
    Andrew Lunn: fix return value of PTP stub function.

    Signed-off-by: Brandon Streiff
    Signed-off-by: Richard Cochran
    Signed-off-by: Andrew Lunn
    Signed-off-by: David S. Miller

    Brandon Streiff
     
  • This patch implements support for accessing the Precision Time Protocol
    and Time Application Interface registers via the AVB register interface
    in the Global 2 register.

    The register interface differs slightly between different models; older
    models use a 3-bit operations field, while newer models use a 2-bit
    field. The operations values and the special "global port" values are
    different between the two. This is a similar split to the differences
    in the "Ingress Rate" register between models, so, like in that case,
    we call the two variants "6352" and "6390" and create an ops structure
    to abstract between the two.

    checkpatch fixups by Andrew Lunn

    Signed-off-by: Brandon Streiff
    Signed-off-by: Andrew Lunn
    Signed-off-by: David S. Miller

    Brandon Streiff
     
  • Let the mv88e6xxx_g2_* register accessor functions be accessible
    outside of global2.c.

    Signed-off-by: Brandon Streiff
    Signed-off-by: Andrew Lunn
    Signed-off-by: David S. Miller

    Brandon Streiff
     
  • This patch provides support to add or delete cloud filter for queue
    channels created for ADq on VF.
    We are using the HW's cloud filter feature and programming it to act
    as a TC filter applied to a group of queues.

    There are two possible modes for a VF when applying a cloud filter
    1. Basic Mode: Intended to apply filters that don't need a VF to be
    Trusted. This would include the following
    Dest MAC + L4 port
    Dest MAC + VLAN + L4 port
    2. Advanced Mode: This mode is only for filters with combination that
    requires VF to be Trusted.
    Dest IP + L4 port

    When cloud filters are applied on a trusted VF and for some reason
    the same VF is later made as untrusted then all cloud filters
    will be deleted. All cloud filters has to be re-applied in
    such a case.
    Cloud filters are also deleted when queue channel is deleted.

    Testing-Hints:
    =============
    1. Adding Basic Mode filter should be possible on a VF in
    Non-Trusted mode.
    2. In Advanced mode all filters should be able to be created.

    Steps:
    ======
    1. Enable ADq and create TCs using TC mqprio command
    2. Apply cloud filter.
    3. Turn-off the spoof check.
    4. Pass traffic.

    Example:
    ========
    1. tc qdisc add dev enp4s2 root mqprio num_tc 4 map 0 0 0 0 1 2 2 3\
    queues 2@0 2@2 1@4 1@5 hw 1 mode channel
    2. tc qdisc add dev enp4s2 ingress
    3. ethtool -K enp4s2 hw-tc-offload on
    4. ip link set ens261f0 vf 0 spoofchk off
    5. tc filter add dev enp4s2 protocol ip parent ffff: prio 1 flower\
    dst_ip 192.168.3.5/32 ip_proto udp dst_port 25 skip_sw hw_tc 2

    Signed-off-by: Avinash Dayanand
    Tested-by: Andrew Bowers
    Signed-off-by: Jeff Kirsher

    Avinash Dayanand
     
  • This patch enables a tc filter to be applied as a cloud
    filter for the VF. This patch adds functions which parse the
    tc filter, extract the necessary fields needed to configure the
    filter and package them in a virtchnl message to be sent to the
    PF to apply them.

    Signed-off-by: Harshitha Ramamurthy
    Tested-by: Andrew Bowers
    Signed-off-by: Jeff Kirsher

    Harshitha Ramamurthy
     
  • This patch handles the request from ADq enabled VF to allocate
    bandwidth to each traffic class which means for each VSI.

    Signed-off-by: Avinash Dayanand
    Tested-by: Andrew Bowers
    Signed-off-by: Jeff Kirsher

    Avinash Dayanand
     
  • This patch adds support to configure bandwidth for the traffic
    classes via tc tool. The required information is passed to the PF
    which is used in the process of setting up the traffic classes.

    Signed-off-by: Harshitha Ramamurthy
    Tested-by: Andrew Bowers
    Signed-off-by: Jeff Kirsher

    Harshitha Ramamurthy
     
  • This patch takes care of freeing up all the VSIs, queues and
    other ADq related software and hardware resources, when a user
    requests for deletion of ADq on VF.

    Example command:
    tc qdisc del dev eth0 root

    Signed-off-by: Avinash Dayanand
    Tested-by: Andrew Bowers
    Signed-off-by: Jeff Kirsher

    Avinash Dayanand
     
  • This patch allocates number of queues requested by the user as a part
    of TC command when ADq is enabled on a VF.

    In order to be consistent in design with PF implementation of ADq,
    don't allow to set channels via ethtool from VF when ADq is already
    enabled. This means the users will not be able to change the number of
    queues/channels via ethtool for a VF when ADq is ON. In order to be
    able to use set channels, users will be required to disable ADq first
    and then try setting the channels again.

    When ADq is enabled on VF, it goes through a reset during which VSIs
    and queues are re-configured. Meanwhile if we receive link status
    message from PF even before the queues are re-configured, just ignore
    this link up message.

    Signed-off-by: Avinash Dayanand
    Tested-by: Andrew Bowers
    Signed-off-by: Jeff Kirsher

    Avinash Dayanand
     
  • This patch enables ADq and creates queue channels on a VF. An ADq
    enabled VF can have up to 4 VSIs and each one of them represents
    a traffic class and this is termed as a queue channel. Each of these
    VSIs can have up to 4 queues. This patch services the request for
    enabling ADq and adds queue channel based on the TC mqprio info
    provided by the user in the VF.

    Initially a check is made to see if spoof check is OFF, if not ADq
    will not be enabled. PF notifies VF for a reset in order to complete
    the creation of ADq resources i.e. creation of additional VSIs and
    allocation of queues as per TC information, all in the reset path.

    Steps:
    ======
    1. Turn off the spoof check
    2. Enable ADq using tc mqprio command with or without rate limit.
    3. Pass traffic.

    Example:
    ========
    % ip link set dev eth0 vf 0 spoofchk off
    % tc qdisc add dev $iface root mqprio num_tc 4 map\
    0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3 queues\
    4@0 4@4 4@8 4@8 hw 1 mode channel

    Expected results:
    =================
    1. Total number of queues for the VF should be sum of queues of all TCs.
    2. Traffic flow should be normal without errors.

    Signed-off-by: Avinash Dayanand
    Tested-by: Andrew Bowers
    Signed-off-by: Jeff Kirsher

    Avinash Dayanand
     
  • This patch introduces the callback to the ndo_setup_tc function
    in the VF driver. We add a wrapper function to make room for the
    upcoming cloud filter patches which add calls to different functions
    from setup_tc.

    First, we add support for capability exchange for ADQ between the
    PF and VF. Next, we add support to take in the mqprio configuration
    and configure queues as per the traffic classes, rate limit and the
    priorities specified by the user. This is done by passing the channel
    config to the PF driver through a virtchannel message.

    The flags and bits added, track if ADq is enabled, set max number of
    traffic classes to 4 and provide ability to negotiate capability with
    the PF.

    Signed-off-by: Harshitha Ramamurthy
    Tested-by: Andrew Bowers
    Signed-off-by: Jeff Kirsher

    Harshitha Ramamurthy
     
  • One of the previous patch fixes the link up issue by ignoring it if
    i40evf is not in __I40EVF_RUNNING state. However this doesn't fix the
    race condition when queues are disabled esp for ADq on VF. Hence check
    if all queues are enabled before starting all queues.

    Signed-off-by: Avinash Dayanand
    Tested-by: Andrew Bowers
    Signed-off-by: Jeff Kirsher

    Avinash Dayanand
     

14 Feb, 2018

17 commits

  • When the PF resets the VF, the VF puts out a warning message
    indicating that the VF received a reset message from the PF.
    Make this message more clear so that we do not mistakenly
    think that the PF is undergoing a reset.

    Signed-off-by: Harshitha Ramamurthy
    Tested-by: Andrew Bowers
    Signed-off-by: Jeff Kirsher

    Harshitha Ramamurthy
     
  • Similar to changes done to the PF driver in commit 6622f5cdbaf3 ("i40e:
    make use of __dev_uc_sync and __dev_mc_sync"), replace our
    home-rolled method for updating the internal status of MAC filters with
    __dev_uc_sync and __dev_mc_sync.

    These new functions use internal state within the netdev struct in order
    to efficiently break the question of "which filters in this list need to
    be added or removed" into singular "add this filter" and "delete this
    filter" requests.

    This vastly improves our handling of .set_rx_mode especially with large
    number of MAC filters being added to the device, and even results in
    a simpler .set_rx_mode handler.

    Under some circumstances, such as when attached to a bridge, we may
    receive a request to delete our own permanent address. Prevent deletion
    of this address during i40evf_addr_unsync so that we don't accidentally
    stop receiving traffic.

    Signed-off-by: Jacob Keller
    Tested-by: Andrew Bowers
    Signed-off-by: Jeff Kirsher

    Jacob Keller
     
  • The MAC, FW Version and NPAR check used to determine
    if shutting off the FW LLDP engine is supported is not
    using the usual feature check mechanism.

    This patch fixes the problem by moving the feature check
    to i40e_sw_init in order to set a flag in pf->hw_features
    that ethtool will use for priv_flags disable operation.

    Signed-off-by: Dave Ertman
    Tested-by: Andrew Bowers
    Signed-off-by: Jeff Kirsher

    Dave Ertman
     
  • Broadcast filters can now cause overflow promiscuous to trigger when
    adding "too many" VLANs to all the ports of a device and the driver
    needs a way to exit overflow promiscuous once triggered.

    Currently the driver looks to see if there are "too many" filters and/or
    we have any failed filters to determine when it is safe to exit overflow
    promiscuous. If we trigger overflow promiscuous with broadcast filters,
    any new filters added will be "auto-failed" until we exit overflow
    promiscuous. Since the user can't manually remove the failed broadcast
    filters for VLANs (nor should we expect the user to do such), there is
    no way to exit overflow promiscuous without reloading the driver.

    The easiest way to do this is to remove the shortcut to "auto-fail"
    filters in overflow promiscuous. If the user removes the VLANs, the
    failed filters will be removed and since we're no longer "auto-failing"
    new filters, we'll eventually get a good set of filters and exit
    overflow promiscuous.

    This has the side benefit of making filter state more explicit in that
    if a filter says it's failed we know for a fact it failed and not just
    assuming it will if we're in overflow promiscuous. This is nice because
    if the user removes some filters and then adds some, even if we're in
    overflow promiscuous, the filter might succeed; we were just assuming it
    won't because the user hasn't rectified other existing failed filters.

    Signed-off-by: Alan Brady
    Tested-by: Andrew Bowers
    Signed-off-by: Jeff Kirsher

    Alan Brady
     
  • This code here is quite complex and easy to screw up. Let's see if we
    can't improve the readability and maintainability a bit. This refactors
    out promisc_changed into two variables 'old_overflow' and 'new_overflow'
    which makes it a bit clearer when we're concerned about when and how
    overflow promiscuous is changed. This also makes so that we no longer
    need to pass a boolean pointer to i40e_aqc_add_filters. Instead we can
    simply check if we changed the overflow promiscuous flag since the
    function start.

    Signed-off-by: Alan Brady
    Tested-by: Andrew Bowers
    Signed-off-by: Jeff Kirsher

    Alan Brady
     
  • When iterating through the linked list of VLAN filters, make the
    iterator the same type as that of the linked list.

    Signed-off-by: Harshitha Ramamurthy
    Tested-by: Andrew Bowers
    Signed-off-by: Jeff Kirsher

    Harshitha Ramamurthy
     
  • When adding a bunch of VLANs to all the ports on a device, it's possible
    to run out of space for broadcast filters. The driver should trigger
    overflow promiscuous in this circumstance to prevent traffic from being
    unexpectedly dropped.

    Signed-off-by: Alan Brady
    Tested-by: Andrew Bowers
    Signed-off-by: Jeff Kirsher

    Alan Brady
     
  • Could a Bad Person do Bad Things to a server if they found these
    addresses printed in the log? Who knows? But let's not take that risk.

    Remove pointers from a bunch of printks. In some cases, I was able to
    adjust the message to indicate whether or not the value was null. In
    others, I just removed the entire message as there was really no hope of
    saving it.

    Signed-off-by: Mitch Williams
    Tested-by: Andrew Bowers
    Signed-off-by: Jeff Kirsher

    Mitch Williams
     
  • A spin lock is taken here so we should use GFP_ATOMIC.

    Fixes: 504398f0a78e ("i40evf: use spinlock to protect (mac|vlan)_filter_list")
    Signed-off-by: Wei Yongjun
    Acked-by: Jacob Keller
    Tested-by: Andrew Bowers
    Signed-off-by: Jeff Kirsher

    Wei Yongjun
     
  • Fixes the following sparse warning:

    drivers/net/ethernet/intel/i40e/i40e_main.c:5440:5: warning:
    symbol 'i40e_get_link_speed' was not declared. Should it be static?

    Signed-off-by: Wei Yongjun
    Tested-by: Andrew Bowers
    Signed-off-by: Jeff Kirsher

    Wei Yongjun
     
  • Use NL_SET_ERR_MSG_MOD helper which adds the module name instead
    of specifying the prefix each time.

    Signed-off-by: Arkadi Sharshevsky
    Signed-off-by: Jiri Pirko
    Signed-off-by: David S. Miller

    Arkadi Sharshevsky
     
  • For the upcoming work on SPAN, it makes sense to move the current code
    to a module of its own. It already has a well-defined API boundary to
    the mirror management (which is used from matchall and ACL code). A
    couple more functions need to be exported for the functions that
    spectrum.c needs to use for MTU handling and subsystem init/fini.

    Signed-off-by: Petr Machata
    Signed-off-by: Jiri Pirko
    Signed-off-by: David S. Miller

    Petr Machata
     
  • The member ref_count already determines whether a given SPAN entry is
    used, and is as easy to use as a dedicated boolean.

    Signed-off-by: Petr Machata
    Signed-off-by: Jiri Pirko
    Signed-off-by: David S. Miller

    Petr Machata
     
  • Signed-off-by: Petr Machata
    Signed-off-by: Jiri Pirko
    Signed-off-by: David S. Miller

    Petr Machata
     
  • struct ip_tunnel_parm, where GRE and several other tunnel types hold
    information, is IPv4-specific. The current router / ipip code in mlxsw
    however uses it as if it were generic.

    Make it clear that it's not. Rename many functions from _params_ to
    _params4_. mlxsw_sp_ipip_parms_saddr() and _daddr() take a proto
    argument to dispatch on it. Move the dispatch logic to
    mlxsw_sp_ipip_netdev_saddr() and _daddr(), and replace with
    single-protocol functions.

    In struct mlxsw_sp_ipip_entry, move the "parms" field to a (for the time
    being, singleton) union. Update users throughout.

    Signed-off-by: Petr Machata
    Signed-off-by: Jiri Pirko
    Signed-off-by: David S. Miller

    Petr Machata
     
  • struct ip_tunnel_parm, which is used in spectrum_ipip.h, is defined in
    if_tunnel.h. However, the former neglects to include the latter.

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

    Petr Machata
     
  • The comment stated that a thread was started, but
    that is not the case.

    Signed-off-by: Jake Moroni
    Signed-off-by: David S. Miller

    Jake Moroni