22 Sep, 2017

22 commits

  • Usually socket closing is delayed if there is still data available in
    the send buffer to be transmitted. If a process is killed, the delay
    should be avoided.

    Signed-off-by: Ursula Braun
    Signed-off-by: David S. Miller

    Ursula Braun
     
  • The number of outstanding work requests is limited. If all work
    requests are in use, tx processing is postponed to another scheduling
    of the tx worker. Switch to a delayed worker to have a gap for tx
    completion queue events before the next retry.

    Signed-off-by: Ursula Braun
    Signed-off-by: David S. Miller

    Ursula Braun
     
  • An out-of-sync condition can just be detected by the client.
    If the server receives a CLC DECLINE message indicating an out-of-sync
    condition for the link groups, the server must clean up the out-of-sync
    link group.
    There is no need for an extra third parameter in smc_clc_send_decline().

    Signed-off-by: Ursula Braun
    Signed-off-by: David S. Miller

    Ursula Braun
     
  • Client link group creation always follows the server linkgroup creation.
    If peer creates a new server link group, client has to create a new
    client link group. If peer reuses a server link group for a new
    connection, client has to reuse its client link group as well. This
    patch introduces a longer delay for client link group removal to make
    sure this link group still exists, once the peer decides to reuse a
    server link group. This avoids out-of-sync conditions for link groups.
    If already scheduled, modify the delay.

    Signed-off-by: Ursula Braun
    Signed-off-by: David S. Miller

    Ursula Braun
     
  • The solicited flag is meaningful for the receive completion queue.
    Ask for next work completion of any type on the send queue.

    Signed-off-by: Ursula Braun
    Signed-off-by: David S. Miller

    Ursula Braun
     
  • smc_pnet_fill_entry() uses dev_get_by_name() adding a refcount to ndev.
    The following smc_pnet_enter() has to reduce the refcount if the entry
    to be added exists already in the pnet table.

    Signed-off-by: Ursula Braun
    Signed-off-by: David S. Miller

    Ursula Braun
     
  • smc_netinfo_by_tcpsk() looks up the routing cache. Such a lookup requires
    protection by an RCU read lock.

    Signed-off-by: Ursula Braun
    Signed-off-by: David S. Miller

    Ursula Braun
     
  • The SMC receive function currently lacks a timeout check under the
    condition that no data were received and no data are available. This
    patch adds such a check.

    Signed-off-by: Hans Wippel
    Signed-off-by: Ursula Braun
    Signed-off-by: David S. Miller

    Hans Wippel
     
  • In the infiniband part, SMC currently uses get_netdev which calls
    dev_hold on the returned net device. However, the SMC code never calls
    dev_put on that net device resulting in a wrong reference count.

    This patch adds a dev_put after the usage of the net device to fix the
    issue.

    Signed-off-by: Hans Wippel
    Signed-off-by: Ursula Braun
    Signed-off-by: David S. Miller

    Hans Wippel
     
  • Make sure (of/i2c/platform)_device_id tables are NULL terminated.
    Found by coccinelle spatch "misc/of_table.cocci"

    Signed-off-by: Thomas Meyer
    Signed-off-by: David S. Miller

    Thomas Meyer
     
  • Nisar Sayed says:

    ====================
    lan78xx: This series of patches are for lan78xx driver.

    This series of patches are for lan78xx driver.

    These patches fixes potential issues associated with lan78xx driver.

    v5
    - Updated changes as per comments

    v4
    - Updated changes to handle return values as per comments
    - Updated EEPROM write handling as per comments

    v3
    - Updated chagnes as per comments

    v2
    - Added patch version information
    - Added fixes tag
    - Updated patch description
    - Updated chagnes as per comments

    v1
    - Splitted patches as per comments
    - Dropped "fixed_phy device support" and "Fix for system suspend" changes
    ====================

    Signed-off-by: David S. Miller

    David S. Miller
     
  • Use default value of auto duplex and auto speed values loaded
    from EEPROM/OTP after reset. The LAN78xx allows platform
    configurations to be loaded from EEPROM/OTP.
    Ex: When external phy is connected, the MAC can be configured to
    have correct auto speed, auto duplex, auto polarity configured
    from the EEPROM/OTP.

    Fixes: 55d7de9de6c3 ("Microchip's LAN7800 family USB 2/3 to 10/100/1000 Ethernet device driver")
    Signed-off-by: Nisar Sayed
    Signed-off-by: David S. Miller

    Nisar Sayed
     
  • Allow EEPROM write for less than MAX_EEPROM_SIZE

    Fixes: 55d7de9de6c3 ("Microchip's LAN7800 family USB 2/3 to 10/100/1000 Ethernet device driver")
    Signed-off-by: Nisar Sayed
    Signed-off-by: David S. Miller

    Nisar Sayed
     
  • Fix for eeprom read/write when device auto suspend

    Fixes: 55d7de9de6c3 ("Microchip's LAN7800 family USB 2/3 to 10/100/1000 Ethernet device driver")
    Signed-off-by: Nisar Sayed
    Signed-off-by: David S. Miller

    Nisar Sayed
     
  • Florian Fainelli says:

    ====================
    net: Bring back transceiver type for PHYLIB

    With the introduction of the xLINKSETTINGS ethtool APIs, the transceiver type
    was deprecated, but in that process we lost some useful information that PHYLIB
    was consistently reporting about internal vs. external PHYs.

    This brings back transceiver as a read-only field that is only consumed in the
    legacy path where ETHTOOL_GET is called but the underlying drivers implement the
    new style klink_settings API.
    ====================

    Signed-off-by: David S. Miller

    David S. Miller
     
  • With commit 2d55173e71b0 ("phy: add generic function to support
    ksetting support"), we lost the ability to report the transceiver type
    like we used to. Now that we have added back the transceiver type to
    ethtool_link_settings, we can report it back like we used to and have no
    loss of information.

    Fixes: 3f1ac7a700d0 ("net: ethtool: add new ETHTOOL_xLINKSETTINGS API")
    Fixes: 2d55173e71b0 ("phy: add generic function to support ksetting support")
    Signed-off-by: Florian Fainelli
    Signed-off-by: David S. Miller

    Florian Fainelli
     
  • Commit 3f1ac7a700d0 ("net: ethtool: add new ETHTOOL_xLINKSETTINGS API")
    deprecated the ethtool_cmd::transceiver field, which was fine in
    premise, except that the PHY library was actually using it to report the
    type of transceiver: internal or external.

    Use the first word of the reserved field to put this __u8 transceiver
    field back in. It is made read-only, and we don't expect the
    ETHTOOL_xLINKSETTINGS API to be doing anything with this anyway, so this
    is mostly for the legacy path where we do:

    ethtool_get_settings()
    -> dev->ethtool_ops->get_link_ksettings()
    -> convert_link_ksettings_to_legacy_settings()

    to have no information loss compared to the legacy get_settings API.

    Fixes: 3f1ac7a700d0 ("net: ethtool: add new ETHTOOL_xLINKSETTINGS API")
    Signed-off-by: Florian Fainelli
    Signed-off-by: David S. Miller

    Florian Fainelli
     
  • The EMAC has the option of sending only a single pause frame when
    flow control is enabled and the RX queue is full. Although sending
    only one pause frame has little value, this would allow admins to
    enable automatic flow control without having to worry about the EMAC
    flooding nearby switches with pause frames if the kernel hangs.

    The option is enabled by using the single-pause-mode private flag.

    Signed-off-by: Timur Tabi
    Signed-off-by: David S. Miller

    Timur Tabi
     
  • If MTU is changed the host would reject the send buffer change.
    This problem is result of recent change to allow changing send
    buffer size.

    Every time we change the MTU, we store the previous net_device section
    count before destroying the buffer, but we don’t store the previous
    section size. When we reinitialize the buffer, its size is calculated
    by multiplying the previous count and previous size. Since we
    continuously increase the MTU, the host returns us a decreasing count
    value while the section size is reinitialized to 1728 bytes every
    time.

    This eventually leads to a condition where the calculated buf_size is
    so small that the host rejects it.

    Fixes: 8b5327975ae1 ("netvsc: allow controlling send/recv buffer size")
    Signed-off-by: Alex Ng
    Signed-off-by: Stephen Hemminger
    Signed-off-by: David S. Miller

    Alex Ng
     
  • Fixes: c15ab236d69d ("net/sched: Change cls_flower to use IDR")
    Cc: Chris Mi
    Cc: Jiri Pirko
    Signed-off-by: Cong Wang
    Acked-by: Jiri Pirko
    Signed-off-by: David S. Miller

    Cong Wang
     
  • If real-time or fair-share curves are enabled in hfsc_change_class()
    class isn't inserted into rb-trees yet. Thus init_ed() and init_vf()
    must be called in place of update_ed() and update_vf().

    Remove isn't required because for now curves cannot be disabled.

    Signed-off-by: Konstantin Khlebnikov
    Signed-off-by: David S. Miller

    Konstantin Khlebnikov
     
  • SKB stored in qdisc->gso_skb also counted into backlog.

    Some qdiscs don't reset backlog to zero in ->reset(),
    for example sfq just dequeue and free all queued skb.

    Signed-off-by: Konstantin Khlebnikov
    Fixes: 2ccccf5fb43f ("net_sched: update hierarchical backlog too")
    Signed-off-by: David S. Miller

    Konstantin Khlebnikov
     

21 Sep, 2017

18 commits

  • Yunsheng Lin says:

    ====================
    TM related bugfixes for the HNS3 Ethernet Driver

    This patch set contains a few bugfixes related to hclge_tm module.
    ====================

    Signed-off-by: David S. Miller

    David S. Miller
     
  • Current mapping between pri and tc is one to one,
    so user can't map multi priorities to the same tc.
    This patch changes the mapping to many to one.

    Fixes: 848440544b41f ("net: hns3: Add support of TX Scheduler & Shaper to HNS3 driver")
    Signed-off-by: Yunsheng Lin
    Signed-off-by: David S. Miller

    Yunsheng Lin
     
  • rss_size is 1, 2, 4, 8, 16, 32, 64, 128, but acutal tc queue
    size can be any u16 less than 128. If tc queue size is 5, we
    set the rss_size to 8, indirection table will be used to limit
    the size of actual queue size.
    It may cause dropping of receiving packet in hardware if
    rss_size is not set correctly.
    For now, each TC has the same rss size.

    Fixes: 46a3df9f9718 ("net: hns3: Add HNS3 Acceleration Engine & Compatibility Layer Support")
    Signed-off-by: Yunsheng Lin
    Signed-off-by: David S. Miller

    Yunsheng Lin
     
  • This patch fixes a typo error for feild, which should be field.

    Fixes: 848440544b41f ("net: hns3: Add support of TX Scheduler & Shaper to HNS3 driver")
    Signed-off-by: Yunsheng Lin
    Signed-off-by: David S. Miller

    Yunsheng Lin
     
  • When hdev doesn't support DCB, rx private buffer is not allocated,
    otherwise there is not enough buffer for rx shared buffer, causing
    buffer allocation process to fail.
    This patch fixes by checking the dcb capability in
    hclge_rx_buffer_calc.

    Fixes: 46a3df9f9718 ("net: hns3: Add HNS3 Acceleration Engine & Compatibility Layer Support")
    Signed-off-by: Yunsheng Lin
    Signed-off-by: David S. Miller

    Yunsheng Lin
     
  • rx_priv_buf_alloc is used to tell hardware how much buffer is
    used for rx direction, right now only the private buffer is
    assigned.
    For ae_dev that doesn't support DCB, private rx buffer is assigned
    to zero, only shared rx buffer is used. So not setting the shared
    rx buffer cause dropping of packet in SSU.

    Fixes: 46a3df9f9718 ("net: hns3: Add HNS3 Acceleration Engine & Compatibility Layer Support")
    Signed-off-by: Yunsheng Lin
    Signed-off-by: David S. Miller

    Yunsheng Lin
     
  • When rx private buffer is disabled, there may be some case that
    the rx private buffer is not set to zero, which may cause buffer
    allocation process to fail.
    This patch fixes this problem by setting priv->enable to 0 and
    priv->buf_size to zero when rx private buffer is disabled.

    Fixes: 46a3df9f9718 ("net: hns3: Add HNS3 Acceleration Engine & Compatibility Layer Support")
    Signed-off-by: Yunsheng Lin
    Signed-off-by: David S. Miller

    Yunsheng Lin
     
  • When ae_dev doesn't support DCB, DEFAULT_DV must be set to
    a lower value, otherwise the buffer allocation process will
    fail.
    This patch fix it by setting it to 30K bytes.

    Fixes: 46a3df9f9718 ("net: hns3: Add HNS3 Acceleration Engine & Compatibility Layer Support")
    Signed-off-by: Yunsheng Lin
    Signed-off-by: David S. Miller

    Yunsheng Lin
     
  • When ae_dev doesn't support DCB, rx_priv_wl_config,
    common_thrd_config and tm_qs_bp_cfg can't be called, otherwise
    cmd return fail, which causes the hclge module initialization
    process to fail.
    This patch fix it by adding a DCB capability flag to check if
    the ae_dev support DCB.

    Fixes: 46a3df9f9718 ("net: hns3: Add HNS3 Acceleration Engine & Compatibility Layer Support")
    Signed-off-by: Yunsheng Lin
    Signed-off-by: David S. Miller

    Yunsheng Lin
     
  • This patch add the ROCE supported flag in the driver_data
    field of pci_device_id, delete roce_pci_tbl and change
    HNAE_DEV_SUPPORT_ROCE_B to HNAE3_DEV_SUPPORT_ROCE_B.
    This cleanup is done in order to support adding capability
    in pci_device_id and to fix initialization failure when
    cmd is not supported.

    Signed-off-by: Yunsheng Lin
    Signed-off-by: David S. Miller

    Yunsheng Lin
     
  • Pablo Neira Ayuso says:

    ====================
    Netfilter fixes for net

    The following patchset contains two Netfilter fixes for your net tree,
    they are:

    1) Fix NAt compilation with UP, from Geert Uytterhoeven.

    2) Fix incorrect number of entries when dumping a set, from
    Vishwanath Pai.
    ====================

    Signed-off-by: David S. Miller

    David S. Miller
     
  • In isdn_ppp_write(), the header (i.e., protobuf) of the buffer is
    fetched twice from userspace. The first fetch is used to peek at the
    protocol of the message and reset the huptimer if necessary; while the
    second fetch copies in the whole buffer. However, given that buf resides
    in userspace memory, a user process can race to change its memory content
    across fetches. By doing so, we can either avoid resetting the huptimer
    for any type of packets (by first setting proto to PPP_LCP and later
    change to the actual type) or force resetting the huptimer for LCP
    packets.

    This patch changes this double-fetch behavior into two single fetches
    decided by condition (lp->isdn_device < 0 || lp->isdn_channel
    Signed-off-by: David S. Miller

    Meng Xu
     
  • fec_ptp_check_pps_event will return 1 if FEC_T_TF_MASK caused
    an interrupt. Don't return IRQ_NONE in this case.

    Signed-off-by: Troy Kisky
    Acked-by: Fugang Duan
    Signed-off-by: David S. Miller

    Troy Kisky
     
  • FEC_ENET_TS_TIMER is not checked in the interrupt routine
    so there is no need to enable it.

    Signed-off-by: Troy Kisky
    Acked-by: Fugang Duan
    Signed-off-by: David S. Miller

    Troy Kisky
     
  • Before queue 0 was always checked if any queue caused an interrupt.
    It is better to just mark queue 0 if queue 0 has caused an interrupt.

    Signed-off-by: Troy Kisky
    Acked-by: Fugang Duan
    Signed-off-by: David S. Miller

    Troy Kisky
     
  • Since XDP's view of the packet includes the MAC header, moving the start-
    of-packet with bpf_xdp_adjust_head needs to also update the offset of the
    MAC header (which is relative to skb->head, not to the skb->data that was
    changed).
    Without this, tcpdump sees packets starting from the old MAC header rather
    than the new one, at least in my tests on the loopback device.

    Fixes: b5cdae3291f7 ("net: Generic XDP")
    Signed-off-by: Edward Cree
    Signed-off-by: David S. Miller

    Edward Cree
     
  • The actual length of cmsg fetched in during the second loop
    (i.e., kcmsg - kcmsg_base) could be different from what we
    get from the first loop (i.e., kcmlen).

    The main reason is that the two get_user() calls in the two
    loops (i.e., get_user(ucmlen, &ucmsg->cmsg_len) and
    __get_user(ucmlen, &ucmsg->cmsg_len)) could cause ucmlen
    to have different values even they fetch from the same userspace
    address, as user can race to change the memory content in
    &ucmsg->cmsg_len across fetches.

    Although in the second loop, the sanity check
    if ((char *)kcmsg_base + kcmlen - (char *)kcmsg < CMSG_ALIGN(tmp))
    is inplace, it only ensures that the cmsg fetched in during the
    second loop does not exceed the length of kcmlen, but not
    necessarily equal to kcmlen. But indicated by the assignment
    kmsg->msg_controllen = kcmlen, we should enforce that.

    This patch adds this additional sanity check and ensures that
    what is recorded in kmsg->msg_controllen is the actual cmsg length.

    Signed-off-by: Meng Xu
    Signed-off-by: David S. Miller

    Meng Xu
     
  • This patch fixes a bug exhibited by the following scenario:
    1. fd1 = perf_event_open with attr.config = ID1
    2. attach bpf program prog1 to fd1
    3. fd2 = perf_event_open with attr.config = ID1

    4. user program closes fd2 and prog1 is detached from the tracepoint.
    5. user program with fd1 does not work properly as tracepoint
    no output any more.

    The issue happens at step 4. Multiple perf_event_open can be called
    successfully, but only one bpf prog pointer in the tp_event. In the
    current logic, any fd release for the same tp_event will free
    the tp_event->prog.

    The fix is to free tp_event->prog only when the closing fd
    corresponds to the one which registered the program.

    Signed-off-by: Yonghong Song
    Signed-off-by: David S. Miller

    Yonghong Song