15 Jan, 2020

7 commits

  • This patch moves some structure, type and identifier definitions into a
    MACsec specific header. This patch does not modify how the MACsec code
    is running and only move things around. This is a preparation for the
    future MACsec hardware offloading support, which will re-use those
    definitions outside macsec.c.

    Signed-off-by: Antoine Tenart
    Signed-off-by: David S. Miller

    Antoine Tenart
     
  • Guillaume Nault says:

    ====================
    netns: Optimise netns ID lookups

    Netns ID lookups can be easily protected by RCU, rather than by holding
    a spinlock.

    Patch 1 prepares the code, patch 2 does the RCU conversion, and finally
    patch 3 stops disabling BHs on updates (patch 2 makes that unnecessary).
    ====================

    Signed-off-by: David S. Miller

    David S. Miller
     
  • When peernet2id() had to lock "nsid_lock" before iterating through the
    nsid table, we had to disable BHs, because VXLAN can call peernet2id()
    from the xmit path:
    vxlan_xmit() -> vxlan_fdb_miss() -> vxlan_fdb_notify()
    -> __vxlan_fdb_notify() -> vxlan_fdb_info() -> peernet2id().

    Now that peernet2id() uses RCU protection, "nsid_lock" isn't used in BH
    context anymore. Therefore, we can safely use plain
    spin_lock()/spin_unlock() and let BHs run when holding "nsid_lock".

    Signed-off-by: Guillaume Nault
    Signed-off-by: David S. Miller

    Guillaume Nault
     
  • __peernet2id() can be protected by RCU as it only calls idr_for_each(),
    which is RCU-safe, and never modifies the nsid table.

    rtnl_net_dumpid() can also do lockless lookups. It does two nested
    idr_for_each() calls on nsid tables (one direct call and one indirect
    call because of rtnl_net_dumpid_one() calling __peernet2id()). The
    netnsid tables are never updated. Therefore it is safe to not take the
    nsid_lock and run within an RCU-critical section instead.

    Signed-off-by: Guillaume Nault
    Signed-off-by: David S. Miller

    Guillaume Nault
     
  • __peernet2id_alloc() was used for both plain lookups and for netns ID
    allocations (depending the value of '*alloc'). Let's separate lookups
    from allocations instead. That is, integrate the lookup code into
    __peernet2id() and make peernet2id_alloc() responsible for allocating
    new netns IDs when necessary.

    This makes it clear that __peernet2id() doesn't modify the idr and
    prepares the code for lockless lookups.

    Also, mark the 'net' argument of __peernet2id() as 'const', since we're
    modifying this line.

    Signed-off-by: Guillaume Nault
    Signed-off-by: David S. Miller

    Guillaume Nault
     
  • Convert mdiobus_register_reset() from open-coded DT-only optional reset
    handling to reset_control_get_optional_exclusive(). This not only
    simplifies the code, but also adds support for lookup-based resets on
    non-DT systems.

    Signed-off-by: Geert Uytterhoeven
    Reviewed-by: Andrew Lunn
    Reviewed-by: Philipp Zabel
    Signed-off-by: David S. Miller

    Geert Uytterhoeven
     
  • The information about the PHY attached to the PHYLINK instance is useful
    but is missing the IRQ prints that phy_attached_info() adds.
    phy_attached_info() is a bit long and it would not be possible to use
    phylink_info() anyway.

    Signed-off-by: Florian Fainelli
    Signed-off-by: David S. Miller

    Florian Fainelli
     

14 Jan, 2020

12 commits

  • Jose Abreu says:

    ====================
    net: stmmac: ETF support

    This series adds the support for ETF scheduler in stmmac.

    1) Starts adding the support by implementing Enhanced Descriptors in stmmac
    main core. This is needed for ETF feature in XGMAC and QoS cores.

    2) Integrates the ETF logic into stmmac TC core.

    3) and 4) adds the HW specific support for ETF in XGMAC and QoS cores. The
    IP feature is called TBS (Time Based Scheduling).

    5) Enables ETF in GMAC5 IPK PCI entry for all Queues except Queue 0.

    6) Adds the new TBS feature and even more information into the debugFS
    HW features file.
    ====================

    Signed-off-by: Jakub Kicinski

    Jakub Kicinski
     
  • Add a new test for TBS feature which is used in ETF scheduler. In this
    test, we send a packet with a launch time specified as now + 500ms and
    check if the packet was transmitted on that time frame.

    Changes from v2:
    - Use the TBS bitfield
    - Remove debug message

    Signed-off-by: Jose Abreu
    Signed-off-by: Jakub Kicinski

    Jose Abreu
     
  • In the upcoming commit for TBS selftest we will need to send a packet on
    a specific Queue. As stmmac fallsback to netdev_pick_tx() on the select
    Queue callback, we need to switch all selftests logic to
    dev_direct_xmit() so that we can send the given SKB on a specific Queue.

    Signed-off-by: Jose Abreu
    Signed-off-by: Jakub Kicinski

    Jose Abreu
     
  • Adds more information regarding HW Capabilities in the corresponding
    DebugFS file.

    Changes from v2:
    - Remove the TX/RX queues in use (Jakub)

    Signed-off-by: Jose Abreu
    Signed-off-by: Jakub Kicinski

    Jose Abreu
     
  • Enable TBS support on GMAC5 PCI entry for all Queues except Queue 0.

    Signed-off-by: Jose Abreu
    Signed-off-by: Jakub Kicinski

    Jose Abreu
     
  • Adds all the necessary HW hooks to support TBS feature in QoS cores.

    Changes from v1:
    - Remove unneeded LT shift as the IP already does this.

    Signed-off-by: Jose Abreu
    Signed-off-by: Jakub Kicinski

    Jose Abreu
     
  • Adds all the necessary HW hooks to support TBS feature in XGMAC cores.

    Changes from v1:
    - Remove unneeded LT shift as the IP already does this.

    Signed-off-by: Jose Abreu
    Signed-off-by: Jakub Kicinski

    Jose Abreu
     
  • Adds the support for ETF scheduler using TBS feature which is available
    in XGMAC and QoS IPs.

    Changes from v2:
    - Fix checkpatch issues (Jakub)
    - Use the TBS bitfield

    Signed-off-by: Jose Abreu
    Signed-off-by: Jakub Kicinski

    Jose Abreu
     
  • Adds the initial hooks for TBS support. This needs a 32 byte descriptor
    in order for it to work with current HW. Adds all the logic for Enhanced
    Descriptors in main core but no HW related logic for now.

    Changes from v2:
    - Use bitfield for TBS status / support (Jakub)
    - Remove unneeded cache alignment (Jakub)
    - Fix checkpatch issues

    Signed-off-by: Jose Abreu
    Signed-off-by: Jakub Kicinski

    Jose Abreu
     
  • The conversion to bool is not needed, remove it.

    Signed-off-by: Chen Zhou
    Signed-off-by: Jakub Kicinski

    Chen Zhou
     
  • Commit 0bf7800f1799 ("ptr_ring: try vmalloc() when kmalloc() fails")
    started to use kvmalloc_array and kvfree, which are defined in mm.h,
    the previous functions kcalloc and kfree, which are defined in slab.h.

    Add the missing include of linux/mm.h. This went unnoticed as other
    include files happened to include mm.h.

    Fixes: 0bf7800f1799 ("ptr_ring: try vmalloc() when kmalloc() fails")
    Signed-off-by: Jesper Dangaard Brouer
    Acked-by: Michael S. Tsirkin
    Signed-off-by: Jakub Kicinski

    Jesper Dangaard Brouer
     
  • With 'commit 44768decb7c0 ("page_pool: handle page recycle for NUMA_NO_NODE
    condition")' we can safely change nid to NUMA_NO_NODE and accommodate
    future NUMA aware hardware using mvneta network interface

    Signed-off-by: Lorenzo Bianconi
    Acked-by: Jesper Dangaard Brouer
    Signed-off-by: Jakub Kicinski

    Lorenzo Bianconi
     

13 Jan, 2020

14 commits

  • Fix sparse warning:

    drivers/net/ethernet/sfc/ethtool_common.c
    warning: symbol 'efx_fill_test' was not declared. Should it be static?
    warning: symbol 'efx_fill_loopback_test' was not declared.
    Should it be static?
    warning: symbol 'efx_describe_per_queue_stats' was not declared.
    Should it be static?

    Reported-by: Hulk Robot
    Signed-off-by: Zhang Xiaoxu
    Reviewed-by: Martin Habets
    Signed-off-by: Jakub Kicinski

    Zhang Xiaoxu
     
  • Use the print_hex_dump_debug() helper, instead of open-coding the same
    operations.

    Signed-off-by: Geert Uytterhoeven
    Signed-off-by: Jakub Kicinski

    Geert Uytterhoeven
     
  • Remove unused fields, copied from the Sun LANCE driver eons ago.

    Signed-off-by: Geert Uytterhoeven
    Signed-off-by: Jakub Kicinski

    Geert Uytterhoeven
     
  • Linus Walleij says:

    ====================
    IXP4xx networking cleanups

    This is a patch series which jams together Arnds and mine
    cleanups for the IXP4xx networking.

    I also have patches for device tree support but that
    requires more elaborate work, this series is some of
    mine and some of Arnds patches that is a good foundation
    for his multiplatform work and my device tree work.

    These are for application to the networking tree so
    that can be taken in one separate sweep.

    I have tested the patches for a bit using zeroday builds
    and some boots on misc IXP4xx devices and haven't run
    into any major problems. We might find some new stuff
    as a result from the new compiler coverage.

    I had to depromote enabling compiler coverage at one
    point in the v2 set because it depended on other patches
    making the code more generic.

    The change in v3 was simply dropping one offending
    patch hardcoding base addresses into the driver.

    The change in v4 drops a stable@ tag that was
    unnecessary.

    This v5 is a rebase of the v4 patch set on top of
    net-next.
    ====================

    Signed-off-by: Jakub Kicinski

    Jakub Kicinski
     
  • Use the netdevice struct device .parent field when calling
    dma_pool_create(): the .dma_coherent_mask and .dma_mask
    pertains to the bus device on the hardware (platform)
    bus in this case, not the struct device inside the network
    device. This makes the pool allocation work.

    Signed-off-by: Linus Walleij
    Signed-off-by: Jakub Kicinski

    Linus Walleij
     
  • In order to probe this ethernet interface from the device tree
    all physical MMIO regions must be passed as resources. Begin
    this rewrite by first passing the port base address as a
    resource for all platforms using this driver, remap it in
    the driver and avoid using any reference of the statically
    mapped virtual address in the driver.

    Signed-off-by: Linus Walleij
    Signed-off-by: Jakub Kicinski

    Linus Walleij
     
  • Simplify and correct a bunch of messages using printk
    directly to use the netdev_* macros. I have not changed
    all of them, just the low-hanging fruit.

    Signed-off-by: Linus Walleij
    Signed-off-by: Jakub Kicinski

    Linus Walleij
     
  • Use "ndev" for the struct net_device and "dev" for the
    struct device in probe() and remove(). Add the local
    "dev" pointer for later use in refactoring.

    Take this opportunity to fix inverse christmas tree
    coding style.

    Signed-off-by: Linus Walleij
    Signed-off-by: Jakub Kicinski

    Linus Walleij
     
  • The IXP4xx driver was initializing the MDIO bus before even
    probing, in the callbacks supposed to be used for setting up
    the module itself, and with the side effect of trying to
    register the MDIO bus as soon as this module was loaded or
    compiled into the kernel whether the device was discovered
    or not.

    This does not work with multiplatform environments.

    To get rid of this: set up the MDIO bus from the probe()
    callback and remove it in the remove() callback. Rename
    the probe() and remove() calls to reflect the most common
    conventions.

    Since there is a bit of checking for the ethernet feature
    to be present in the MDIO registering function, making the
    whole module not even be registered if we can't find an
    MDIO bus, we need something similar: register the MDIO
    bus when the corresponding ethernet is probed, and
    return -EPROBE_DEFER on the other interfaces until this
    happens. If no MDIO bus is present on any of the
    registered interfaces we will eventually bail out.

    None of the platforms I've seen has e.g. MDIO on EthB
    and only uses EthC, there is always a Ethernet hardware
    on the NPE (B, C) that has the MDIO bus, we just might
    have to wait for it.

    Signed-off-by: Linus Walleij
    Signed-off-by: Jakub Kicinski

    Linus Walleij
     
  • The platform data is needed to compile the driver as standalone,
    so move it to a global location along with similar files.

    Signed-off-by: Arnd Bergmann
    Signed-off-by: Linus Walleij
    Signed-off-by: Jakub Kicinski

    Arnd Bergmann
     
  • The ixp46x ptp driver has a somewhat unusual setup, where the ptp
    driver and the ethernet driver are in different directories but
    access the same registers that are defined a platform specific
    header file.

    Moving everything into drivers/net/ makes it look more like most
    other ptp drivers and allows compile-testing this driver on
    other targets.

    Signed-off-by: Arnd Bergmann
    Signed-off-by: Linus Walleij
    Signed-off-by: Jakub Kicinski

    Arnd Bergmann
     
  • The ixp4xx_hss driver needs the platform data definition and the
    system clock rate to be compiled. Move both into a new platform_data
    header file.

    This is a prerequisite for compile testing, but turning on compile
    testing requires further patches to isolate the SoC headers.

    Signed-off-by: Arnd Bergmann
    Signed-off-by: Linus Walleij
    Signed-off-by: Jakub Kicinski

    Arnd Bergmann
     
  • Change the driver to use portable integer types to avoid
    warnings during compile testing:

    drivers/net/wan/ixp4xx_hss.c:863:21: error: cast to 'u32 *' (aka 'unsigned int *') from smaller integer type 'int' [-Werror,-Wint-to-pointer-cast]
    memcpy_swab32(mem, (u32 *)((int)skb->data & ~3), bytes / 4);
    ^
    drivers/net/wan/ixp4xx_hss.c:979:12: error: incompatible pointer types passing 'u32 *' (aka 'unsigned int *') to parameter of type 'dma_addr_t *' (aka 'unsigned long long *') [-Werror,-Wincompatible-pointer-types]
    &port->desc_tab_phys)))
    ^~~~~~~~~~~~~~~~~~~~
    include/linux/dmapool.h:27:20: note: passing argument to parameter 'handle' here
    dma_addr_t *handle);
    ^

    Signed-off-by: Arnd Bergmann
    Signed-off-by: Linus Walleij
    Signed-off-by: Jakub Kicinski

    Arnd Bergmann
     
  • On modern hardware with a large number of cpus and using XDP,
    the current MSIX limit is insufficient. Bump the limit in
    order to allow more queues.

    Signed-off-by: Jonathan Lemon
    Reviewed-by: Jack Wang
    Reviewed-by: Tariq Toukan
    Signed-off-by: Jakub Kicinski

    Jonathan Lemon
     

12 Jan, 2020

7 commits

  • Huazhong Tan says:

    ====================
    net: hns3: add some misc update about reset issue

    This series includes some misc update relating to reset issue.
    [patch 1/7] & [patch 2/7] splits hclge_reset()/hclgevf_reset()
    into two parts: preparing and rebuilding. Since the procedure
    of FLR should be separated out from the reset task([patch 3/7 &
    patch 3/7]), then the FLR's processing can reuse these codes.

    pci_error_handlers.reset_prepare() is void type function, so
    [patch 6/7] & [patch 7/7] factor some codes related to PF
    function reset to make the preparing done before .reset_prepare()
    return.

    BTW, [patch 5/7] enlarges the waiting time of reset for matching
    the hardware's.
    ====================

    Signed-off-by: David S. Miller

    David S. Miller
     
  • hclge_reset_prepare_down() is only used to inform VF that PF is
    going to do function reset, then using hclge_func_reset_sync_vf()
    in hclge_reset_prepare_wait() to query whether VF is ready before
    asserting PF function reset. To make the code more readable,
    this patch uses a new function hclge_function_reset_notify_vf()
    to do this job.

    Signed-off-by: Huazhong Tan
    Signed-off-by: David S. Miller

    Huazhong Tan
     
  • When synchronizes with VFs fail before PF function reset,
    PF driver should go on its function reset, otherwise it
    can not run normally anymore. So, hclge_func_reset_sync_vf()
    should not affect the processing of PF reset, this patch
    modifies its return type to void.

    Signed-off-by: Huazhong Tan
    Signed-off-by: David S. Miller

    Huazhong Tan
     
  • When the load of firmware is high, its reset task may takes
    more time(which will be as long as 35 seconds). So this
    patch modifies HCLGE_RESET_WAIT_CNT to match the firmware's.

    Signed-off-by: Huazhong Tan
    Signed-off-by: David S. Miller

    Huazhong Tan
     
  • Currently, the actual work of VF FLR is handled in the reset task,
    which is asynchronous. So in some case, if the preparing and
    rebuilding are not done, then the VF FLR will trigger some problems,
    for example, makes hardware go into chaos.

    So this patch separates the process of VF FLR from reset task, and
    adds a semaphore to serialize this reset and others.

    When FLR's preparing fails, if there has other higher level reset
    pending or failing times less than the HCLGE_FLR_RETRY_CNT, this
    preparing should be retried, otherwise it will get into a wrong state.

    BTW, while the hardware reports misc interrupt during pcie_flr(),
    the driver can not receive this interrupt anymore, so disable it
    when hclgevf_flr_prepare() return, and re-enable it when enter
    hclgevf_flr_done().

    Avoid declaring internal function hclgevf_enable_vector(), this patch
    also moves its definition forward, and removes unused enum
    hnae3_flr_state.

    Signed-off-by: Huazhong Tan
    Signed-off-by: David S. Miller

    Huazhong Tan
     
  • Currently, the actual work of PF FLR is handled in the reset task,
    which is asynchronous. So in some case, if the preparing and
    rebuilding are not done, then the PF FLR will trigger some problems,
    for example, makes hardware go into chaos.

    So this patch separates the process of PF FLR from reset task, and
    adds a semaphore to serialize this reset and others.

    When FLR's preparing fails, if there has other higher level reset
    pending or failing times less than the HCLGE_FLR_RETRY_CNT, this
    preparing should be retried, otherwise PF and its VF may get into
    wrong state.

    BTW, while the hardware reports misc interrupt during pcie_flr(),
    the driver can not receive this interrupt anymore, so disable it
    when hclge_flr_prepare() return, and re-enable it when enter
    hclge_flr_done().

    Signed-off-by: Huazhong Tan
    Signed-off-by: David S. Miller

    Huazhong Tan
     
  • hclgevf_reset() is a little bloated, and the process of VF FLR will
    be separated from the reset task later. So this patch splits
    hclgevf_reset() into hclgevf_reset_prepare() and hclge_reset_rebuild(),
    then FLR can also reuse these two functions. Also moves HNAE3_UP_CLIENT
    into hclgevf_reset_stack().

    Signed-off-by: Huazhong Tan
    Signed-off-by: David S. Miller

    Huazhong Tan