31 Jul, 2015

17 commits

  • The node lock is currently grabbed and and released in the function
    tipc_disc_rcv() in the file discover.c. As a preparation for the next
    commits, we need to move this node lock handling, along with the code
    area it is covering, to node.c.

    This commit introduces this change.

    Tested-by: Ying Xue
    Signed-off-by: Jon Maloy
    Signed-off-by: David S. Miller

    Jon Paul Maloy
     
  • Until now, we have been handling link failover and synchronization
    by using an additional link state variable, "exec_mode". This variable
    is not independent of the link FSM state, something causing a risk of
    inconsistencies, apart from the fact that it clutters the code.

    The conditions are now in place to define a new link FSM that covers
    all existing use cases, including failover and synchronization, and
    eliminate the "exec_mode" field altogether. The FSM must also support
    non-atomic resetting of links, which will be introduced later.

    The new link FSM is shown below, with 7 states and 8 events.
    Only events leading to state change are shown as edges.

    +------------------------------------+
    |RESET_EVT |
    | |
    | +--------------+
    | +-----------------| SYNCHING |-----------------+
    | |FAILURE_EVT +--------------+ PEER_RESET_EVT|
    | | A | |
    | | | | |
    | | | | |
    | | |SYNCH_ |SYNCH_ |
    | | |BEGIN_EVT |END_EVT |
    | | | | |
    | V | V V
    | +-------------+ +--------------+ +------------+
    | | RESETTING || PEER_RESET |
    | +-------------+ FAILURE_ +--------------+ PEER_ +------------+
    | | EVT | A RESET_EVT |
    | | | | |
    | | | | |
    | | +--------------+ | |
    | RESET_EVT| |RESET_EVT |ESTABLISH_EVT |
    | | | | |
    | | | | |
    | V V | |
    | +-------------+ +--------------+ RESET_EVT|
    +--->| RESET |--------->| ESTABLISHING |
    Signed-off-by: Jon Maloy
    Signed-off-by: David S. Miller

    Jon Paul Maloy
     
  • The implementation of the link FSM currently takes decisions about and
    sends out link protocol messages. This is unnecessary, since such
    actions are not the result of any link state change, and are even
    decided based on non-FSM state information ("silent_intv_cnt").

    We now move the sending of unicast link protocol messages to the
    function tipc_link_timeout(), and the initial broadcast synchronization
    message to tipc_node_link_up(). The latter is done because a link
    instance should not need to know whether it is the first or second
    link to a destination. Such information is now restricted to and
    handled by the link aggregation layer in node.c

    Tested-by: Ying Xue
    Signed-off-by: Jon Maloy
    Signed-off-by: David S. Miller

    Jon Paul Maloy
     
  • Link failover and synchronization have until now been handled by the
    links themselves, forcing them to have knowledge about and to access
    parallel links in order to make the two algorithms work correctly.

    In this commit, we move the control part of this functionality to the
    link aggregation level in node.c, which is the right location for this.
    As a result, the two algorithms become easier to follow, and the link
    implementation becomes simpler.

    Tested-by: Ying Xue
    Signed-off-by: Jon Maloy
    Signed-off-by: David S. Miller

    Jon Paul Maloy
     
  • In the next commit, we will move link synch/failover orchestration to
    the link aggregation level. In order to do this, we first need to extend
    the node FSM with two more states, NODE_SYNCHING and NODE_FAILINGOVER,
    plus four new events to enter and leave those states.

    This commit introduces this change, without yet making use of it.
    The node FSM now looks as follows:

    +-----------------------------------------+
    | PEER_DOWN_EVT|
    | |
    +------------------------+----------------+ |
    |SELF_DOWN_EVT | | |
    | | | |
    | +-----------+ +-----------+ |
    | |NODE_ | |NODE_ | |
    | +----------|FAILINGOVER|| SELF_UP_ ||SELF_LEAVING|
    +------------+ SELF_ +-----------+ +-----------+ PEER_ +------------+
    | DOWN_EVT A A DOWN_EVT |
    | | | |
    | | | |
    | SELF_UP_EVT| |PEER_UP_EVT |
    | | | |
    | | | |
    |PEER_DOWN_EVT +--------------+ SELF_DOWN_EVT|
    +------------------->| SELF_DOWN_ |
    Signed-off-by: Jon Maloy
    Signed-off-by: David S. Miller

    Jon Paul Maloy
     
  • In many cases the call order when a link is reset goes as follows:
    tipc_node_xx()->tipc_link_reset()->tipc_node_link_down()

    This is not the right order if we want the node to be in control,
    so in this commit we change the order to:
    tipc_node_xx()->tipc_node_link_down()->tipc_link_reset()

    The fact that tipc_link_reset() now is called from only one
    location with a well-defined state will also facilitate later
    simplifications of tipc_link_reset() and the link FSM.

    Tested-by: Ying Xue
    Signed-off-by: Jon Maloy
    Signed-off-by: David S. Miller

    Jon Paul Maloy
     
  • In line with our effort to let the node level have full control over
    its links, we want to move all link reset calls from link.c to node.c.
    Some of the calls can be moved by simply moving the calling function,
    when this is the right thing to do. For the remaining calls we use
    the now established technique of returning a TIPC_LINK_DOWN_EVT
    flag from tipc_link_rcv(), whereafter we perform the reset call when
    the call returns.

    This change serves as a preparation for the coming commits.

    Tested-by: Ying Xue
    Signed-off-by: Jon Maloy
    Signed-off-by: David S. Miller

    Jon Paul Maloy
     
  • The function tipc_link_activate() is redundant, since it mostly performs
    settings that have already been done in a preceding tipc_link_reset().

    There are three exceptions to this:
    - The actual state change to TIPC_LINK_WORKING. This should anyway be done
    in the FSM, and not in a separate function.
    - Registration of the link with the bearer. This should be done by the
    node, since we don't want the link to have any knowledge about its
    specific bearer.
    - Call to tipc_node_link_up() for user access registration. With the new
    role distribution between link aggregation and link level this becomes
    the wrong call order; tipc_node_link_up() should instead be called
    directly as a result of a TIPC_LINK_UP event, hence by the node itself.

    This commit implements those changes.

    Tested-by: Ying Xue
    Signed-off-by: Jon Maloy
    Signed-off-by: David S. Miller

    Jon Paul Maloy
     
  • …etooth/bluetooth-next

    Johan Hedberg says:

    ====================
    pull request: bluetooth-next 2015-07-30

    Here's a set of Bluetooth & 802.15.4 patches intended for the 4.3 kernel.

    - Cleanups & fixes to mac802154
    - Refactoring of Intel Bluetooth HCI driver
    - Various coding style fixes to Bluetooth HCI drivers
    - Support for Intel Lightning Peak Bluetooth devices
    - Generic class code in interface descriptor in btusb to match more HW
    - Refactoring of Bluetooth HS code together with a new config option
    - Support for BCM4330B1 Broadcom UART controller

    Let me know if there are any issues pulling. Thanks.
    ====================

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

    David S. Miller
     
  • Commit 6fd99094de2b ("ipv6: Don't reduce hop limit for an interface")
    disabled accept hop limit from RA if it is smaller than the current hop
    limit for security stuff. But this behavior kind of break the RFC definition.

    RFC 4861, 6.3.4. Processing Received Router Advertisements
    A Router Advertisement field (e.g., Cur Hop Limit, Reachable Time,
    and Retrans Timer) may contain a value denoting that it is
    unspecified. In such cases, the parameter should be ignored and the
    host should continue using whatever value it is already using.

    If the received Cur Hop Limit value is non-zero, the host SHOULD set
    its CurHopLimit variable to the received value.

    So add sysctl option accept_ra_min_hop_limit to let user choose the minimum
    hop limit value they can accept from RA. And set default to 1 to meet RFC
    standards.

    Signed-off-by: Hangbin Liu
    Acked-by: YOSHIFUJI Hideaki
    Signed-off-by: David S. Miller

    Hangbin Liu
     
  • The change removes redundant sysfs binary file boundary checks,
    since this task is already done on caller side in fs/sysfs/file.c

    Signed-off-by: Vladimir Zapolskiy
    Signed-off-by: David S. Miller

    Vladimir Zapolskiy
     
  • Daniel Borkmann says:

    ====================
    Minor BPF updates

    Various minor misc updates.
    ====================

    Signed-off-by: David S. Miller

    David S. Miller
     
  • It can be useful for testing to see the actual process/pid who is loading
    a given filter. I was running some BPF test program and noticed unusual
    filter loads from time to time, triggered by some other application in the
    background. bpf_jit_disasm is still working after this change.

    Signed-off-by: Daniel Borkmann
    Acked-by: Alexei Starovoitov
    Signed-off-by: David S. Miller

    Daniel Borkmann
     
  • When bpf_jit_compile() got split into two functions via commit
    f3c2af7ba17a ("net: filter: x86: split bpf_jit_compile()"), bpf_jit_dump()
    was changed to always show 0 as number of compiler passes. Change it to
    dump the actual number. Also on sparc, we count passes starting from 0,
    so add 1 for the debug dump as well.

    Signed-off-by: Daniel Borkmann
    Acked-by: Alexei Starovoitov
    Signed-off-by: David S. Miller

    Daniel Borkmann
     
  • During recent discussions we had with Michael, we found that it would
    be useful to have an indicator that tells the JIT that an eBPF program
    had been migrated from classic instructions into eBPF instructions, as
    only in that case A and X need to be cleared in the prologue. Such eBPF
    programs do not set a particular type, but all have BPF_PROG_TYPE_UNSPEC.
    Thus, introduce a small helper for cde66c2d88da ("s390/bpf: Only clear
    A and X for converted BPF programs") and possibly others in future.

    Signed-off-by: Daniel Borkmann
    Cc: Michael Holzheu
    Acked-by: Alexei Starovoitov
    Signed-off-by: David S. Miller

    Daniel Borkmann
     
  • As JITs start to perform optimizations whether to clear A and X on eBPF
    programs in the prologue, we should actually assign a program type to the
    native eBPF test cases. It doesn't really matter which program type, as
    these instructions don't go through the verifier, but it needs to be a
    type != BPF_PROG_TYPE_UNSPEC. This reflects eBPF programs loaded via bpf(2)
    system call (!= type unspec) vs. classic BPF to eBPF migrations (== type
    unspec).

    Signed-off-by: Daniel Borkmann
    Cc: Michael Holzheu
    Acked-by: Alexei Starovoitov
    Signed-off-by: David S. Miller

    Daniel Borkmann
     
  • Commit 05cc5a39ddb7 ("bnx2x: add vlan filtering offload") has broken
    compilation when CONFIG_BNX2X_SRIOV is not set.

    Signed-off-by: Yuval Mintz
    Signed-off-by: Ariel Elior
    Signed-off-by: David S. Miller

    Yuval Mintz
     

30 Jul, 2015

23 commits

  • This patch fix a possible race after calling register_netdev. After
    calling netdev_register it could be possible that netdev_ops callbacks
    use the uninitialized private data of lowpan_dev. By moving the
    initialization of this data before netdev_register we can be sure that
    initialized private data is be used after netdev_register.

    Signed-off-by: Alexander Aring
    Signed-off-by: Marcel Holtmann

    Alexander Aring
     
  • When transmitting a packet via a mac802154 driver that can sleep in
    its transmit function, mac802154 defers the call to the driver's
    transmit function to a per-device workqueue.

    However, mac802154 uses a single global work_struct for this, which
    means that if you have more than one registered mac802154 interface
    in the system, and you transmit on more than one of them at the same
    time, you'll very easily cause memory corruption.

    This patch moves the deferred transmit processing state from global
    variables to struct ieee802154_local, and this seems to fix the memory
    corruption issue.

    Signed-off-by: Lennert Buytenhek
    Acked-by: Alexander Aring
    Signed-off-by: Marcel Holtmann

    Lennert Buytenhek
     
  • According Documentation/timers/timers-howto.txt the usually case for
    setting up a hrtimer takes > ~10us. So we should use udelay in this
    case so we are sure that the state change was done, before doing the
    state change assert.

    Signed-off-by: Alexander Aring
    Signed-off-by: Marcel Holtmann

    Alexander Aring
     
  • There is no need to use the safe version of list_for_each here.

    Signed-off-by: Christophe JAILLET
    Signed-off-by: Marcel Holtmann

    Christophe JAILLET
     
  • btusb currently has a generic match on USB device descriptors:
    { USB_DEVICE_INFO(0xe0, 0x01, 0x01) },

    However, http://www.usb.org/developers/defined_class states:

    Base Class E0h (Wireless Controller)
    This base class is defined for devices that are Wireless controllers.
    Values not shown in the table below are reserved. These class codes are
    to be used in Interface Descriptors, with the exception of the Bluetooth
    class code which can also be used in a Device Descriptor.

    Add a match on the interface descriptors accordingly.

    This fixes compatibility with the RTL8723AU device shown below.
    This device conforms to the USB Interface Association Descriptor
    specification, which requires the device to have class ef/02/01.
    The extra IAD descriptor then specifies that interfaces 0 and 1
    belong to the same function/driver, which is true. Provided that
    the Bluetooth device class spec accepts use of the IAD, I imagine that
    technically, all btusb devices should be configured like this.

    T: Bus=01 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#= 3 Spd=480 MxCh= 0
    D: Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs= 1
    P: Vendor=0bda ProdID=0724 Rev= 2.00
    S: Manufacturer=Realtek
    S: Product=802.11n WLAN Adapter
    S: SerialNumber=00e04c000001
    C:* #Ifs= 3 Cfg#= 1 Atr=e0 MxPwr=500mA
    A: FirstIf#= 0 IfCount= 2 Cls=e0(wlcon) Sub=01 Prot=01
    I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl=1ms
    E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E: Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 0 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 0 Ivl=1ms
    I: If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 9 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 9 Ivl=1ms
    I: If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 17 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 17 Ivl=1ms
    I: If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 25 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 25 Ivl=1ms
    I: If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 33 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 33 Ivl=1ms
    I: If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E: Ad=03(O) Atr=01(Isoc) MxPS= 49 Ivl=1ms
    E: Ad=83(I) Atr=01(Isoc) MxPS= 49 Ivl=1ms
    I:* If#= 2 Alt= 0 #EPs= 4 Cls=ff(vend.) Sub=ff Prot=ff Driver=rtl8723au
    E: Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E: Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E: Ad=06(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E: Ad=87(I) Atr=03(Int.) MxPS= 64 Ivl=500us

    Signed-off-by: Daniel Drake
    Signed-off-by: Marcel Holtmann

    Daniel Drake
     
  • To avoid amp module hooks from hci_event.c

    Signed-off-by: Arron Wang
    Signed-off-by: Marcel Holtmann

    Arron Wang
     
  • To avoid amp module hooks from hci_event.c

    Signed-off-by: Arron Wang
    Signed-off-by: Marcel Holtmann

    Arron Wang
     
  • To avoid a2mp module hooks from hci_event.c and send
    getinfo response operation only required by a2mp module,
    we can move this callback to a2mp.c

    Signed-off-by: Arron Wang
    Signed-off-by: Marcel Holtmann

    Arron Wang
     
  • Signed-off-by: Arron Wang
    Signed-off-by: Marcel Holtmann

    Arron Wang
     
  • Move A2MP Module under BT_HS config option and allow
    the user have flexible option to choose the feature only
    they need

    a2mp_discover_amp() & a2mp_channel_create() are a2mp module
    entry point for master and slave, and this is dynamic
    invoked depends on the userspace or remote request, then
    we defined their implementation depends on BT_HS config

    Signed-off-by: Arron Wang
    Signed-off-by: Marcel Holtmann

    Arron Wang
     
  • Add "waiting for configuration" address.
    Add lmp_subver and firmware name for BCM4330B1 controller.

    Signed-off-by: Frederic Danis
    Signed-off-by: Marcel Holtmann

    Frederic Danis
     
  • Jiri Pirko says:

    ====================
    Introduce Mellanox Technologies Switch ASICs switchdev drivers

    This patchset introduces Mellanox Technologies Switch driver infrastructure
    and support for SwitchX-2 ASIC.

    The driver is divided into 3 logical parts:
    1) Bus - implements switch bus interface. Currently only PCI bus is
    implemented, but more buses will be added in the future. Namely I2C
    and SGMII.
    (patch #2)
    2) Driver - implemements of ASIC-specific functions.
    Currently SwitchX-2 ASIC is supported, but a plan exists to introduce
    support for Spectrum ASIC in the near future.
    (patch #4)
    3) Core - infrastructure that glues buses and drivers together.
    It implements register access logic (EMADs) and takes care of RX traps
    and events.
    (patch #1 and #3)
    ====================

    Signed-off-by: David S. Miller

    David S. Miller
     
  • Benefit from the previously introduced Mellanox Switch infrastructure and
    add driver for SwitchX-2 ASIC. Note that this driver is very simple now.
    It implements bare minimum for getting device to work on slow-path.
    Fast-path offload functionality is going to be added soon.

    Signed-off-by: Jiri Pirko
    Signed-off-by: Ido Schimmel
    Signed-off-by: Elad Raz
    Reviewed-by: Scott Feldman
    Signed-off-by: David S. Miller

    Jiri Pirko
     
  • Ethernet Management Datagrams (EMADs) are Ethernet packets sent between
    the host and the device in order to configure the available device registers.
    Another use case is notifications sent from the device to the host,
    letting it know about certain events, such as port up / down.

    Add the ability to construct EMADs with provisions to construct and
    parse the registers' payloads. Implement EMAD transaction layer
    which is responsible for the reliable transmission of EMADs. Also, add
    an infrastructure used by the switch driver to register for particular
    events generated by the device.

    Signed-off-by: Ido Schimmel
    Signed-off-by: Jiri Pirko
    Signed-off-by: Elad Raz
    Reviewed-by: Scott Feldman
    Signed-off-by: David S. Miller

    Ido Schimmel
     
  • Add PCI bus implementation for Mellanox Technologies Switch ASICs. This
    includes firmware initialization, async queues manipulation and command
    interface implementation.

    Signed-off-by: Jiri Pirko
    Signed-off-by: Ido Schimmel
    Signed-off-by: Elad Raz
    Reviewed-by: Scott Feldman
    Signed-off-by: David S. Miller

    Jiri Pirko
     
  • Add core components of Mellanox switch driver infrastructure.
    Core infrastructure is designed so that it can be used by multiple
    bus drivers (PCI now, I2C and SGMII are planned to be implemented
    in the future). Multiple switch kind drivers can be registered as well.
    This core serves as a glue between buses and drivers.

    Signed-off-by: Jiri Pirko
    Signed-off-by: Ido Schimmel
    Signed-off-by: Elad Raz
    Reviewed-by: Scott Feldman
    Signed-off-by: David S. Miller

    Jiri Pirko
     
  • This patch adds vxlan offload specific counters to ethtool stats. We
    provide tx/rx queue counters to show the number of vxlan offload pkts
    sent/received.

    Signed-off-by: Sriharsha Basavapatna
    Signed-off-by: David S. Miller

    Sriharsha Basavapatna
     
  • Current driver always uses vlan-promisc mode, i.e., it receives both
    tagged and untagged traffic and lets the network stack drop packets
    tagged with unrequested vlan tags.

    This patch implements vlan-filtering offload in the driver -
    Unless explicitly configured to promisc mode, only untagged packets or
    packets tagged with requested vlans would reach the Rx flow.

    Signed-off-by: Yuval Mintz
    Signed-off-by: Ariel Elior
    Signed-off-by: David S. Miller

    Yuval Mintz
     
  • Amir Vadai says:

    ====================
    net/mlx5e: Driver update 29-Jul-2015

    This patchset contain bug fixes and code cleaning patches to the ConnectX-4
    Ethernet driver.

    Patchset was applied and tested over commit 8c1a91f ("Merge branch
    'mlx4-802.1ad-accel'")
    ====================

    Signed-off-by: David S. Miller

    David S. Miller
     
  • It was used to update netdev priv parameters that require stopping
    and re-opening the device in a generic way - it got the new
    parameters and did: ndo_stop(), copy new parameters into current
    parameters, ndo_open().

    We chose to remove it for two reasons:
    1) It requires additional instance of struct mlx5e_params on the
    stack and looking forward we expect this struct to grow.
    2) Sometimes we want to do additional operations (besides
    just updating the priv parameters) while the netdev is stopped.
    For example, updating netdev->mtu @mlx5e_change_mtu() should
    be done while the netdev is stopped (done in this commit).

    Signed-off-by: Achiad Shochat
    Signed-off-by: Amir Vadai
    Signed-off-by: David S. Miller

    Achiad Shochat
     
  • Introduce access functions to create/destroy RSS indrection table
    and use it in the Ethernet driver.

    Signed-off-by: Achiad Shochat
    Signed-off-by: Amir Vadai
    Signed-off-by: David S. Miller

    Achiad Shochat
     
  • Since it is un-named at this time.

    Signed-off-by: Achiad Shochat
    Signed-off-by: Amir Vadai
    Signed-off-by: David S. Miller

    Achiad Shochat
     
  • Use the already defined rq pointer directly.

    Signed-off-by: Achiad Shochat
    Signed-off-by: Amir Vadai
    Signed-off-by: David S. Miller

    Achiad Shochat