1. 27 Mar, 2014 18 commits
    • David S. Miller's avatar
      Revert "ptp: Fix compiler warnings in the testptp utility" · 031fe792
      David S. Miller authored
      This reverts commit 203191c3.
      
      A better version of this fix is forthcoming.
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      031fe792
    • Yuval Mintz's avatar
      bnx2x: Fix compilation when CONFIG_BNX2X_SRIOV is not set · 19915f53
      Yuval Mintz authored
      Commit 370d4a26 "bnx2x: Create workqueue for IOV related tasks" breaks bnx2x
      compilation when CONFIG_BNX2X_SRIOV is not set - "multiple definition of
      `bnx2x_schedule_iov_task'".
      Reported-by: default avatarkbuild test robot <fengguang.wu@intel.com>
      Signed-off-by: default avatarYuval Mintz <Yuval.Mintz@qlogic.com>
      Acked-by: default avatarEric Dumazet <edumazet@google.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      19915f53
    • David S. Miller's avatar
      Merge branch 'tipc-next' · b5b6bc32
      David S. Miller authored
      Ying Xue says:
      
      ====================
      tipc: clean up bearer and node layer
      
      This is another commit series which aims at facilitating future
      changes to the locking policy around nodes, links and bearers.
      
      Currently, the tipc routing hierarchy comprises the structures 'node',
      'link' and 'bearer'. The whole hierarchy is protected by a big
      read/write lock (tipc_net_lock), to ensure that nothing is added or
      removed while any of these structures is being accessed. Obviously
      the locking policy makes node, link and bearer components closely
      bound together so that their relationship becomes extremely complex.
      In the worst case, such locking policy not only has a negative
      influence on performance, but also it's prone to lead to deadlock
      occasionally.
      
      In order to decouple the complex relationship between bearer and node
      as well as link, the locking policy is adjusted as follows:
      
      - Bearer level
        RTNL lock is used on update side, and RCU is used on read side.
        Meanwhile, all bearer instances including broadcast bearer are
        saved into bearer_list array.
      
      - Node and link level
        All node instances are saved into two tipc_node_list and node_htable
        lists. The two lists are protected by node_list_lock on write side,
        and they are guarded with RCU lock on read side. All members in node
        structure including link instances are protected by node spin lock.
      
      - The relationship between bearer and node
        When link accesses bearer, it first needs to find the bearer with
        its bearer identity from the bearer_list array. When bearer accesses
        node, it can iterate the node_htable hash list with the node address
        to find the corresponding node.
      
      In the new locking policy, every component has its private locking
      solution and the relationship between bearer and node is very simple,
      that is, they can find each other with node address or bearer identity
      from node_htable hash list or bearer_list array.
      
      But, prior to these changes, we need to do some necessary cleanup and
      code consolidation. This is what we do with this commit series. In a
      later series we will replace net_lock with RTNL as well as RCU lock
      to deploy the new locking policy.
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      b5b6bc32
    • Ying Xue's avatar
      tipc: use node list lock to protect tipc_num_links variable · dde20266
      Ying Xue authored
      Without properly implicit or explicit read memory barrier, it's
      unsafe to read an atomic variable with atomic_read() from another
      thread which is different with the thread of changing the atomic
      variable with atomic_inc() or atomic_dec(). So a stale tipc_num_links
      may be got with atomic_read() in tipc_node_get_links(). If the
      tipc_num_links variable type is converted from atomic to unsigned
      integer and node list lock is used to protect it, the issue would
      be avoided.
      Signed-off-by: default avatarYing Xue <ying.xue@windriver.com>
      Reviewed-by: default avatarErik Hugne <erik.hugne@ericsson.com>
      Reviewed-by: default avatarJon Maloy <jon.maloy@ericsson.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      dde20266
    • Ying Xue's avatar
      tipc: use node_list_lock to protect tipc_num_nodes variable · 2220646a
      Ying Xue authored
      As tipc_node_list is protected by rcu read lock on read side, it's
      unnecessary to hold node_list_lock to protect tipc_node_list in
      tipc_node_get_links(). Instead, node_list_lock should just protects
      tipc_num_nodes in the function.
      Signed-off-by: default avatarYing Xue <ying.xue@windriver.com>
      Reviewed-by: default avatarErik Hugne <erik.hugne@ericsson.com>
      Reviewed-by: default avatarJon Maloy <jon.maloy@ericsson.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      2220646a
    • Ying Xue's avatar
      tipc: tipc: convert node list and node hlist to RCU lists · 6c7a762e
      Ying Xue authored
      Convert tipc_node_list list and node_htable hash list to RCU lists.
      On read side, the two lists are protected with RCU read lock, and
      on update side, node_list_lock is applied to them.
      Signed-off-by: default avatarYing Xue <ying.xue@windriver.com>
      Reviewed-by: default avatarErik Hugne <erik.hugne@ericsson.com>
      Reviewed-by: default avatarJon Maloy <jon.maloy@ericsson.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      6c7a762e
    • Ying Xue's avatar
      tipc: rename node create lock to protect node list and hlist · 46651c59
      Ying Xue authored
      When a node is created, tipc_net_lock read lock is first held and
      then node_create_lock is grabbed in order to prevent the same node
      from being created and inserted into both node list and hlist twice.
      But when we query node from the two node lists, we only hold
      tipc_net_lock read lock without grabbing node_create_lock. Obviously
      this locking policy is unable to guarantee that the two node lists
      are always synchronized especially when the operation of changing
      and accessing them occurs in different contexts like currently doing.
      
      Therefore, rename node_create_lock to node_list_lock to protect the
      two node lists, that is, whenever node is inserted into them or node
      is queried from them, the node_list_lock should be always held. As a
      result, tipc_net_lock read lock becomes redundant and then can be
      removed from the node query functions.
      Signed-off-by: default avatarYing Xue <ying.xue@windriver.com>
      Reviewed-by: default avatarErik Hugne <erik.hugne@ericsson.com>
      Reviewed-by: default avatarJon Maloy <jon.maloy@ericsson.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      46651c59
    • Ying Xue's avatar
      tipc: make broadcast bearer store in bearer_list array · 987b58be
      Ying Xue authored
      Now unicast bearer is dynamically allocated and placed into its
      identity specified slot of bearer_list array. When we search
      bearer_list array with a bearer identity, the corresponding bearer
      instance can be found. But broadcast bearer is statically allocated
      and it is not located in the bearer_list array yet. So we decide to
      enlarge bearer_list array into MAX_BEARERS + 1 slots, and its last
      slot stores the broadcast bearer so that the broadcast bearer can
      be found from bearer_list array with MAX_BEARERS as index. The
      change will help us reduce the complex relationship between bearer
      and link in the future.
      Signed-off-by: default avatarYing Xue <ying.xue@windriver.com>
      Reviewed-by: default avatarErik Hugne <erik.hugne@ericsson.com>
      Reviewed-by: default avatarJon Maloy <jon.maloy@ericsson.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      987b58be
    • Ying Xue's avatar
      tipc: remove active flag from tipc_bearer structure · f47de12b
      Ying Xue authored
      After the allocation of tipc_bearer structure instance is converted
      from statical way to dynamical way, we identify whether a certain
      tipc_bearer structure pointer is valid by checking whether the pointer
      is NULL or not. So the active flag in tipc_bearer structure becomes
      redundant.
      Signed-off-by: default avatarYing Xue <ying.xue@windriver.com>
      Reviewed-by: default avatarErik Hugne <erik.hugne@ericsson.com>
      Reviewed-by: default avatarJon Maloy <jon.maloy@ericsson.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      f47de12b
    • Ying Xue's avatar
      tipc: convert tipc_bearers array to pointer list · 3874ccbb
      Ying Xue authored
      As part of the effort to introduce RCU protection for the bearer
      list, we first need to change it to a list of pointers.
      Signed-off-by: default avatarYing Xue <ying.xue@windriver.com>
      Reviewed-by: default avatarErik Hugne <erik.hugne@ericsson.com>
      Reviewed-by: default avatarJon Maloy <jon.maloy@ericsson.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      3874ccbb
    • Ying Xue's avatar
      tipc: acquire necessary locks in named_cluster_distribute routine · 78dfb789
      Ying Xue authored
      The 'tipc_node_list' is guarded by tipc_net_lock and 'links' array
      defined in 'tipc_node' structure is protected by node lock as well.
      Without acquiring the two locks in named_cluster_distribute() a fatal
      oops may happen in case that a destroyed link might be got and then
      accessed. Therefore, above mentioned two locks must be held in
      named_cluster_distribute() to prevent the issue from happening
      accidentally.
      
      As 'links' array in node struct must be protected by node lock,
      we have to move the code of selecting an active link from
      tipc_link_xmit() to named_cluster_distribute() and then call
      __tipc_link_xmit() with the selected link to deliver name messages.
      Signed-off-by: default avatarYing Xue <ying.xue@windriver.com>
      Reviewed-by: default avatarErik Hugne <erik.hugne@ericsson.com>
      Reviewed-by: default avatarJon Maloy <jon.maloy@ericsson.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      78dfb789
    • Ying Xue's avatar
      tipc: obsolete the remote management feature · 5902385a
      Ying Xue authored
      Due to the lacking of any credential, it's allowed to accept commands
      requested from remote nodes to query the local node status, which is
      prone to involve potential security risks. Instead, if we login to
      a remote node with ssh command, this approach is not only more safe
      than the remote management feature, but also it can give us more
      permissions like changing the remote node configuration. So it's
      reasonable for us to obsolete the remote management feature now.
      Signed-off-by: default avatarYing Xue <ying.xue@windriver.com>
      Reviewed-by: default avatarErik Hugne <erik.hugne@ericsson.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      5902385a
    • Ying Xue's avatar
      tipc: remove unnecessary checking for node object · 76d78824
      Ying Xue authored
      tipc_node_create routine doesn't need to check whether a node
      object specified with a node address exists or not because its
      caller(ie, tipc_disc_recv_msg routine) has checked this before
      calling it.
      Signed-off-by: default avatarYing Xue <ying.xue@windriver.com>
      Reviewed-by: default avatarErik Hugne <erik.hugne@ericsson.com>
      Reviewed-by: default avatarJon Maloy <jon.maloy@ericsson.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      76d78824
    • David S. Miller's avatar
      Merge branch 'sxgbe' · 1dbe1369
      David S. Miller authored
      Byungho An says:
      
      ====================
      This is 14th posting for SAMSUNG SXGBE driver.
      
      Changes since v1:
      - changed name of driver to SXGbE as per Ben's comment
      - squashed Joe's neatening for many stuff in original patches
      
      Changes since v2:
      - updated and split binding document as per Mark's comment
      - clean up codes as per Joe's comment
      - removed unused fields and clean up codes as per Francois's comment
      - removed module parameters as per Dave's comment
      - moved driver directory to samsung/sxgbe/
      
      Changes since v3:
      - fixed Missing a blank line after declarations as per Dave's comment
      - clean up codes as per Joe's comment
      - removed reference of net_device.{irq, base_addr} as per Francois's comment
      
      Changes since v4:
      - updated binding document and DT related function as per Mark's comment
      
      Changes since v5:
      - updated binding document and DT related function as per Florian's comment
      - fixed typo and shortened code as per Joe's comment
      
      Changes since v6:
      - updated TSO related functions as per Rayagond's comment
      - updated binding document as per Mark's comment
      - removed WoL patch from this patch set
      
      Changes since v7:
      - updated TSO related functions as per Rayagond's comment
      
      Changes since v8:
      - removed select and depends statement from vendor sub-section as per
        Dave's comment
      
      Changes since v9:
      - removed adv-add-map, force-sf-dma-modei and force-thresh-dma-mode from
        binding documnet as per Mark's comment
      
      Changes since v10:
      - clean up codes as per Francois's comment
      
      Changes since v11:
      - clean up mdio_read/write codes as per Francois's comment
      - changed irq acquisition error path as per Francois's comment
      - updated mdio and platform related codes as per Tomasz'comment
      - clean up dma related codes as per Vince's comment
      
      Changes since v12:
      - fixed typo
      
      Changes since v13:
      - clean up error path codes for irqs as per Francois's comment
      - removed unsupported functions for ehttoolirq as per Ben's comment
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      1dbe1369
    • Monam Agarwal's avatar
      net/core: Use RCU_INIT_POINTER(x, NULL) in netpoll.c · fcb144b5
      Monam Agarwal authored
      This patch replaces rcu_assign_pointer(x, NULL) with RCU_INIT_POINTER(x, NULL)
      
      The rcu_assign_pointer() ensures that the initialization of a structure
      is carried out before storing a pointer to that structure.
      And in the case of the NULL pointer, there is no structure to initialize.
      So, rcu_assign_pointer(p, NULL) can be safely converted to RCU_INIT_POINTER(p, NULL)
      Signed-off-by: default avatarMonam Agarwal <monamagarwal123@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      fcb144b5
    • Monam Agarwal's avatar
      net/bridge: Use RCU_INIT_POINTER(x, NULL) in br_vlan.c · cd18721e
      Monam Agarwal authored
      This patch replaces rcu_assign_pointer(x, NULL) with RCU_INIT_POINTER(x, NULL)
      
      The rcu_assign_pointer() ensures that the initialization of a structure
      is carried out before storing a pointer to that structure.
      And in the case of the NULL pointer, there is no structure to initialize.
      So, rcu_assign_pointer(p, NULL) can be safely converted to RCU_INIT_POINTER(p, NULL)
      Signed-off-by: default avatarMonam Agarwal <monamagarwal123@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      cd18721e
    • Monam Agarwal's avatar
      drivers/net: Use RCU_INIT_POINTER(x, NULL) in tun.c · c956674b
      Monam Agarwal authored
      This patch replaces rcu_assign_pointer(x, NULL) with RCU_INIT_POINTER(x, NULL)
      
      The rcu_assign_pointer() ensures that the initialization of a structure
      is carried out before storing a pointer to that structure.
      And in the case of the NULL pointer, there is no structure to initialize.
      So, rcu_assign_pointer(p, NULL) can be safely converted to RCU_INIT_POINTER(p, NULL)
      Signed-off-by: default avatarMonam Agarwal <monamagarwal123@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      c956674b
    • Monam Agarwal's avatar
      drivers/net: Use RCU_INIT_POINTER(x, NULL) in bonding/bond_options.c · 8800a244
      Monam Agarwal authored
      This patch replaces rcu_assign_pointer(x, NULL) with RCU_INIT_POINTER(x, NULL)
      
      The rcu_assign_pointer() ensures that the initialization of a structure
      is carried out before storing a pointer to that structure.
      And in the case of the NULL pointer, there is no structure to initialize.
      So, rcu_assign_pointer(p, NULL) can be safely converted to RCU_INIT_POINTER(p, NULL)
      Signed-off-by: default avatarMonam Agarwal <monamagarwal123@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      8800a244
  2. 26 Mar, 2014 22 commits