1. Dec 27, 2019
    • Julian Wiedmann's avatar
      s390/qeth: remove QETH_RX_PULL_LEN · 8ca8559f
      Julian Wiedmann authored
      Since commit f677fcb9
      
       ("s390/qeth: ensure linear access to packet headers"),
      the CQ-specific skbs are allocated with a slightly bigger linear part
      than necessary. Shrink it down to the maximum that's needed by
      qeth_extract_skb().
      
      Signed-off-by: default avatarJulian Wiedmann <jwi@linux.ibm.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      8ca8559f
    • Julian Wiedmann's avatar
      s390/qeth: use napi_gro_frags() for SG skbs · dcdcf867
      Julian Wiedmann authored
      
      
      For non-linear packets, get the skb for attaching the page fragments
      from napi_get_frags() so that it can be recycled during GRO.
      
      Signed-off-by: default avatarJulian Wiedmann <jwi@linux.ibm.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      dcdcf867
    • Julian Wiedmann's avatar
      s390/qeth: consolidate RX code · c04b116a
      Julian Wiedmann authored
      
      
      To reduce the path length and levels of indirection, move the RX
      processing from the sub-drivers into the core.
      
      Signed-off-by: default avatarJulian Wiedmann <jwi@linux.ibm.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      c04b116a
    • Mao Wenan's avatar
      af_packet: refactoring code for prb_calc_retire_blk_tmo · 0914d2bb
      Mao Wenan authored
      
      
      If __ethtool_get_link_ksettings() is failed and with
      non-zero value, prb_calc_retire_blk_tmo() should return
      DEFAULT_PRB_RETIRE_TOV firstly.
      
      This patch is to refactory code and make it more readable.
      
      Signed-off-by: default avatarMao Wenan <maowenan@huawei.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      0914d2bb
    • Paul Durrant's avatar
      xen-netback: support dynamic unbind/bind · 9476654b
      Paul Durrant authored
      
      
      By re-attaching RX, TX, and CTL rings during connect() rather than
      assuming they are freshly allocated (i.e. assuming the counters are zero),
      and avoiding forcing state to Closed in netback_remove() it is possible
      for vif instances to be unbound and re-bound from and to (respectively) a
      running guest.
      
      Dynamic unbind/bind is a highly useful feature for a backend module as it
      allows it to be unloaded and re-loaded (i.e. updated) without requiring
      domUs to be halted.
      
      This has been tested by running iperf as a server in the test VM and
      then running a client against it in a continuous loop, whilst also
      running:
      
      while true;
        do echo vif-$DOMID-$VIF >unbind;
        echo down;
        rmmod xen-netback;
        echo unloaded;
        modprobe xen-netback;
        cd $(pwd);
        brctl addif xenbr0 vif$DOMID.$VIF;
        ip link set vif$DOMID.$VIF up;
        echo up;
        sleep 5;
        done
      
      in dom0 from /sys/bus/xen-backend/drivers/vif to continuously unbind,
      unload, re-load, re-bind and re-plumb the backend.
      
      Clearly a performance drop was seen but no TCP connection resets were
      observed during this test and moreover a parallel SSH connection into the
      guest remained perfectly usable throughout.
      
      Signed-off-by: default avatarPaul Durrant <pdurrant@amazon.com>
      Reviewed-by: default avatarWei Liu <wei.liu@kernel.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      9476654b
    • David S. Miller's avatar
      Merge branch 'RTL8211F-RGMII-RX-TX-delay-configuration-improvements' · 8d347992
      David S. Miller authored
      Martin Blumenstingl says:
      
      ====================
      RTL8211F: RGMII RX/TX delay configuration improvements
      
      In discussion with Andrew [0] we figured out that it would be best to
      make the RX delay of the RTL8211F PHY configurable (just like the TX
      delay is already configurable).
      
      While here I took the opportunity to add some logging to the TX delay
      configuration as well.
      
      There is no public documentation for the RX and TX delay registers.
      I received this information a while ago (and created this RfC patch
      back then: [1]). Realtek gave me permission to take the information
      from the datasheet extracts and phase them in my own words and publish
      that (I am not allowed to publish the datasheet extracts).
      
      I have tested these patches on two boards:
      - Amlogic Meson8b Odroid-C1
      - Amlogic GXM Khadas VIM2
      Both still behave as before these changes (iperf3 speeds are the same
      in both directions: RX and TX), which is expected because they are
      currently using phy-mode = "rgmii" with the RX delay not being generated
      by the PHY.
      
      [0] https://patchwork.ozlabs.org/patch/1215313/
      [1] https://patchwork.ozlabs.org/patch/843946/
      
      
      ====================
      
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      8d347992
    • Martin Blumenstingl's avatar
      net: phy: realtek: add support for configuring the RX delay on RTL8211F · 1b3047b5
      Martin Blumenstingl authored
      
      
      On RTL8211F the RX and TX delays (2ns) can be configured in two ways:
      - pin strapping (RXD1 for the TX delay and RXD0 for the RX delay, LOW
        means "off" and HIGH means "on") which is read during PHY reset
      - using software to configure the TX and RX delay registers
      
      So far only the configuration using pin strapping has been supported.
      Add support for enabling or disabling the RGMII RX delay based on the
      phy-mode to be able to get the RX delay into a known state. This is
      important because the RX delay has to be coordinated between the PHY,
      MAC and the PCB design (trace length). With an invalid RX delay applied
      (for example if both PHY and MAC add a 2ns RX delay) Ethernet may not
      work at all.
      
      Also add debug logging when configuring the RX delay (just like the TX
      delay) because this is a common source of problems.
      
      Signed-off-by: default avatarMartin Blumenstingl <martin.blumenstingl@googlemail.com>
      Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      1b3047b5
    • Martin Blumenstingl's avatar
      net: phy: realtek: add logging for the RGMII TX delay configuration · 3aec743d
      Martin Blumenstingl authored
      
      
      RGMII requires a delay of 2ns between the data and the clock signal.
      There are at least three ways this can happen. One possibility is by
      having the PHY generate this delay.
      This is a common source for problems (for example with slow TX speeds or
      packet loss when sending data). The TX delay configuration of the
      RTL8211F PHY can be set either by pin-strappping the RXD1 pin (HIGH
      means enabled, LOW means disabled) or through configuring a paged
      register. The setting from the RXD1 pin is also reflected in the
      register.
      
      Add debug logging to the TX delay configuration on RTL8211F so it's
      easier to spot these issues (for example if the TX delay is enabled for
      both, the RTL8211F PHY and the MAC).
      This is especially helpful because there is no public datasheet for the
      RTL8211F PHY available with all the RX/TX delay specifics.
      
      Signed-off-by: default avatarMartin Blumenstingl <martin.blumenstingl@googlemail.com>
      Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      3aec743d
    • David S. Miller's avatar
      Merge branch 'mlxsw-spectrum_router-Cleanups' · 1f4f16fa
      David S. Miller authored
      
      
      Ido Schimmel says:
      
      ====================
      mlxsw: spectrum_router: Cleanups
      
      This patch set removes from mlxsw code that is no longer necessary after
      the simplification of the IPv4 and IPv6 route offload API.
      
      The patches eliminate unnecessary code by taking advantage of the fact
      that mlxsw no longer needs to maintain a list of identical routes,
      following recent changes in route offload API.
      ====================
      
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      1f4f16fa
    • Ido Schimmel's avatar
      mlxsw: spectrum_router: Remove FIB entry list from FIB node · 7c4a7ec8
      Ido Schimmel authored
      
      
      As explained in previous patches, the driver no longer needs to maintain
      a list of identical FIB entries (i.e, same {tb_id, prefix, prefix
      length}) and therefore each FIB node can only store one FIB entry.
      
      Remove the FIB entry list and simplify the code.
      
      Signed-off-by: default avatarIdo Schimmel <idosch@mellanox.com>
      Acked-by: default avatarJiri Pirko <jiri@mellanox.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      7c4a7ec8
    • Ido Schimmel's avatar
      mlxsw: spectrum_router: Consolidate identical functions · b04720ae
      Ido Schimmel authored
      
      
      After the last patch mlxsw_sp_fib{4,6}_node_entry_link() and
      mlxsw_sp_fib{4,6}_node_entry_unlink() are identical and can therefore be
      consolidated into the same common function.
      
      Perform the consolidation.
      
      Signed-off-by: default avatarIdo Schimmel <idosch@mellanox.com>
      Acked-by: default avatarJiri Pirko <jiri@mellanox.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      b04720ae
    • Ido Schimmel's avatar
      mlxsw: spectrum_router: Make route creation and destruction symmetric · 0705297e
      Ido Schimmel authored
      
      
      Host routes that perform decapsulation of IP in IP tunnels have a
      special adjacency entry linked to them. This entry stores information
      such as the expected underlay source IP. When the route is deleted this
      entry needs to be freed.
      
      The allocation of the adjacency entry happens in
      mlxsw_sp_fib4_entry_type_set(), but it is freed in
      mlxsw_sp_fib4_node_entry_unlink().
      
      Create a new function - mlxsw_sp_fib4_entry_type_unset() - and free the
      adjacency entry there.
      
      This will allow us to consolidate mlxsw_sp_fib{4,6}_node_entry_unlink()
      in the next patch.
      
      Signed-off-by: default avatarIdo Schimmel <idosch@mellanox.com>
      Acked-by: default avatarJiri Pirko <jiri@mellanox.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      0705297e
    • Ido Schimmel's avatar
      mlxsw: spectrum_router: Eliminate dead code · 0d2fb5aa
      Ido Schimmel authored
      
      
      Since the driver no longer maintains a list of identical routes there is
      no route to promote when a route is deleted.
      
      Remove that code that took care of it.
      
      Signed-off-by: default avatarIdo Schimmel <idosch@mellanox.com>
      Acked-by: default avatarJiri Pirko <jiri@mellanox.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      0d2fb5aa
    • Ido Schimmel's avatar
      mlxsw: spectrum_router: Remove unnecessary checks · 231c8d2b
      Ido Schimmel authored
      
      
      Now that the networking stack takes care of only notifying the routes of
      interest, we do not need to maintain a list of identical routes.
      
      Remove the check that tests if the route is the first route in the FIB
      node.
      
      Signed-off-by: default avatarIdo Schimmel <idosch@mellanox.com>
      Acked-by: default avatarJiri Pirko <jiri@mellanox.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      231c8d2b
    • Andy Roulin's avatar
      bonding: rename AD_STATE_* to LACP_STATE_* · c1e46990
      Andy Roulin authored
      As the LACP actor/partner state is now part of the uapi, rename the
      3ad state defines with LACP prefix. The LACP prefix is preferred over
      BOND_3AD as the LACP standard moved to 802.1AX.
      
      Fixes: 826f66b3
      
       ("bonding: move 802.3ad port state flags to uapi")
      Signed-off-by: default avatarAndy Roulin <aroulin@cumulusnetworks.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      c1e46990
    • Kevin Kou's avatar
      sctp: move trace_sctp_probe_path into sctp_outq_sack · f643ee29
      Kevin Kou authored
      
      
      The original patch bringed in the "SCTP ACK tracking trace event"
      feature was committed at Dec.20, 2017, it replaced jprobe usage
      with trace events, and bringed in two trace events, one is
      TRACE_EVENT(sctp_probe), another one is TRACE_EVENT(sctp_probe_path).
      The original patch intended to trigger the trace_sctp_probe_path in
      TRACE_EVENT(sctp_probe) as below code,
      
      +TRACE_EVENT(sctp_probe,
      +
      +	TP_PROTO(const struct sctp_endpoint *ep,
      +		 const struct sctp_association *asoc,
      +		 struct sctp_chunk *chunk),
      +
      +	TP_ARGS(ep, asoc, chunk),
      +
      +	TP_STRUCT__entry(
      +		__field(__u64, asoc)
      +		__field(__u32, mark)
      +		__field(__u16, bind_port)
      +		__field(__u16, peer_port)
      +		__field(__u32, pathmtu)
      +		__field(__u32, rwnd)
      +		__field(__u16, unack_data)
      +	),
      +
      +	TP_fast_assign(
      +		struct sk_buff *skb = chunk->skb;
      +
      +		__entry->asoc = (unsigned long)asoc;
      +		__entry->mark = skb->mark;
      +		__entry->bind_port = ep->base.bind_addr.port;
      +		__entry->peer_port = asoc->peer.port;
      +		__entry->pathmtu = asoc->pathmtu;
      +		__entry->rwnd = asoc->peer.rwnd;
      +		__entry->unack_data = asoc->unack_data;
      +
      +		if (trace_sctp_probe_path_enabled()) {
      +			struct sctp_transport *sp;
      +
      +			list_for_each_entry(sp, &asoc->peer.transport_addr_list,
      +					    transports) {
      +				trace_sctp_probe_path(sp, asoc);
      +			}
      +		}
      +	),
      
      But I found it did not work when I did testing, and trace_sctp_probe_path
      had no output, I finally found that there is trace buffer lock
      operation(trace_event_buffer_reserve) in include/trace/trace_events.h:
      
      static notrace void							\
      trace_event_raw_event_##call(void *__data, proto)			\
      {									\
      	struct trace_event_file *trace_file = __data;			\
      	struct trace_event_data_offsets_##call __maybe_unused __data_offsets;\
      	struct trace_event_buffer fbuffer;				\
      	struct trace_event_raw_##call *entry;				\
      	int __data_size;						\
      									\
      	if (trace_trigger_soft_disabled(trace_file))			\
      		return;							\
      									\
      	__data_size = trace_event_get_offsets_##call(&__data_offsets, args); \
      									\
      	entry = trace_event_buffer_reserve(&fbuffer, trace_file,	\
      				 sizeof(*entry) + __data_size);		\
      									\
      	if (!entry)							\
      		return;							\
      									\
      	tstruct								\
      									\
      	{ assign; }							\
      									\
      	trace_event_buffer_commit(&fbuffer);				\
      }
      
      The reason caused no output of trace_sctp_probe_path is that
      trace_sctp_probe_path written in TP_fast_assign part of
      TRACE_EVENT(sctp_probe), and it will be placed( { assign; } ) after the
      trace_event_buffer_reserve() when compiler expands Macro,
      
              entry = trace_event_buffer_reserve(&fbuffer, trace_file,        \
                                       sizeof(*entry) + __data_size);         \
                                                                              \
              if (!entry)                                                     \
                      return;                                                 \
                                                                              \
              tstruct                                                         \
                                                                              \
              { assign; }                                                     \
      
      so trace_sctp_probe_path finally can not acquire trace_event_buffer
      and return no output, that is to say the nest of tracepoint entry function
      is not allowed. The function call flow is:
      
      trace_sctp_probe()
      -> trace_event_raw_event_sctp_probe()
       -> lock buffer
       -> trace_sctp_probe_path()
         -> trace_event_raw_event_sctp_probe_path()  --nested
         -> buffer has been locked and return no output.
      
      This patch is to remove trace_sctp_probe_path from the TP_fast_assign
      part of TRACE_EVENT(sctp_probe) to avoid the nest of entry function,
      and trigger sctp_probe_path_trace in sctp_outq_sack.
      
      After this patch, you can enable both events individually,
        # cd /sys/kernel/debug/tracing
        # echo 1 > events/sctp/sctp_probe/enable
        # echo 1 > events/sctp/sctp_probe_path/enable
      
      Or, you can enable all the events under sctp.
      
        # echo 1 > events/sctp/enable
      
      Signed-off-by: default avatarKevin Kou <qdkevin.kou@gmail.com>
      Acked-by: default avatarMarcelo Ricardo Leitner <marcelo.leitner@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      f643ee29
  2. Dec 26, 2019
  3. Dec 25, 2019