1. 22 4月, 2021 1 次提交
  2. 19 4月, 2021 1 次提交
    • M
      can: dev: Move device back to init netns on owning netns delete · b04a8995
      Martin Willi 提交于
      stable inclusion
      from stable-5.10.27
      commit 8dc08a2962c855f4a88923017445799474ff6446
      bugzilla: 51493
      
      --------------------------------
      
      commit 3a5ca857 upstream.
      
      When a non-initial netns is destroyed, the usual policy is to delete
      all virtual network interfaces contained, but move physical interfaces
      back to the initial netns. This keeps the physical interface visible
      on the system.
      
      CAN devices are somewhat special, as they define rtnl_link_ops even
      if they are physical devices. If a CAN interface is moved into a
      non-initial netns, destroying that netns lets the interface vanish
      instead of moving it back to the initial netns. default_device_exit()
      skips CAN interfaces due to having rtnl_link_ops set. Reproducer:
      
        ip netns add foo
        ip link set can0 netns foo
        ip netns delete foo
      
      WARNING: CPU: 1 PID: 84 at net/core/dev.c:11030 ops_exit_list+0x38/0x60
      CPU: 1 PID: 84 Comm: kworker/u4:2 Not tainted 5.10.19 #1
      Workqueue: netns cleanup_net
      [<c010e700>] (unwind_backtrace) from [<c010a1d8>] (show_stack+0x10/0x14)
      [<c010a1d8>] (show_stack) from [<c086dc10>] (dump_stack+0x94/0xa8)
      [<c086dc10>] (dump_stack) from [<c086b938>] (__warn+0xb8/0x114)
      [<c086b938>] (__warn) from [<c086ba10>] (warn_slowpath_fmt+0x7c/0xac)
      [<c086ba10>] (warn_slowpath_fmt) from [<c0629f20>] (ops_exit_list+0x38/0x60)
      [<c0629f20>] (ops_exit_list) from [<c062a5c4>] (cleanup_net+0x230/0x380)
      [<c062a5c4>] (cleanup_net) from [<c0142c20>] (process_one_work+0x1d8/0x438)
      [<c0142c20>] (process_one_work) from [<c0142ee4>] (worker_thread+0x64/0x5a8)
      [<c0142ee4>] (worker_thread) from [<c0148a98>] (kthread+0x148/0x14c)
      [<c0148a98>] (kthread) from [<c0100148>] (ret_from_fork+0x14/0x2c)
      
      To properly restore physical CAN devices to the initial netns on owning
      netns exit, introduce a flag on rtnl_link_ops that can be set by drivers.
      For CAN devices setting this flag, default_device_exit() considers them
      non-virtual, applying the usual namespace move.
      
      The issue was introduced in the commit mentioned below, as at that time
      CAN devices did not have a dellink() operation.
      
      Fixes: e008b5fc ("net: Simplfy default_device_exit and improve batching.")
      Link: https://lore.kernel.org/r/20210302122423.872326-1-martin@strongswan.orgSigned-off-by: NMartin Willi <martin@strongswan.org>
      Signed-off-by: NMarc Kleine-Budde <mkl@pengutronix.de>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NChen Jun <chenjun102@huawei.com>
      Acked-by: N  Weilong Chen <chenweilong@huawei.com>
      Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
      b04a8995
  3. 09 2月, 2021 1 次提交
  4. 08 2月, 2021 1 次提交
  5. 16 11月, 2020 1 次提交
  6. 04 11月, 2020 2 次提交
  7. 08 10月, 2020 1 次提交
  8. 21 9月, 2020 4 次提交
  9. 04 3月, 2020 1 次提交
  10. 12 11月, 2019 1 次提交
  11. 05 11月, 2019 1 次提交
  12. 04 9月, 2019 2 次提交
  13. 03 9月, 2019 7 次提交
  14. 24 7月, 2019 1 次提交
  15. 05 6月, 2019 1 次提交
  16. 22 1月, 2019 1 次提交
    • M
      can: dev: __can_get_echo_skb(): fix bogous check for non-existing skb by removing it · 7b12c818
      Manfred Schlaegl 提交于
      This patch revert commit 7da11ba5
      ("can: dev: __can_get_echo_skb(): print error message, if trying to echo non existing skb")
      
      After introduction of this change we encountered following new error
      message on various i.MX plattforms (flexcan):
      
      | flexcan 53fc8000.can can0: __can_get_echo_skb: BUG! Trying to echo non
      | existing skb: can_priv::echo_skb[0]
      
      The introduction of the message was a mistake because
      priv->echo_skb[idx] = NULL is a perfectly valid in following case: If
      CAN_RAW_LOOPBACK is disabled (setsockopt) in applications, the pkt_type
      of the tx skb's given to can_put_echo_skb is set to PACKET_LOOPBACK. In
      this case can_put_echo_skb will not set priv->echo_skb[idx]. It is
      therefore kept NULL.
      
      As additional argument for revert: The order of check and usage of idx
      was changed. idx is used to access an array element before checking it's
      boundaries.
      Signed-off-by: NManfred Schlaegl <manfred.schlaegl@ginzinger.com>
      Fixes: 7da11ba5 ("can: dev: __can_get_echo_skb(): print error message, if trying to echo non existing skb")
      Cc: linux-stable <stable@vger.kernel.org>
      Signed-off-by: NMarc Kleine-Budde <mkl@pengutronix.de>
      7b12c818
  17. 10 11月, 2018 4 次提交
  18. 27 7月, 2018 2 次提交
    • Z
      can: dev: enable multi-queue for SocketCAN devices · 03870907
      Zhu Yi 提交于
      The existing SocketCAN implementation provides alloc_candev() to
      allocate a CAN device using a single Tx and Rx queue. This can lead to
      priority inversion in case the single Tx queue is already full with low
      priority messages and a high priority message needs to be sent while the
      bus is fully loaded with medium priority messages.
      
      This problem can be solved by using the existing multi-queue support of
      the network subsytem. The commit makes it possible to use multi-queue in
      the CAN subsystem in the same way it is used in the Ethernet subsystem
      by adding an alloc_candev_mqs() call and accompanying macros. With this
      support a CAN device can use multi-queue qdisc (e.g. mqprio) to avoid
      the aforementioned priority inversion.
      
      The exisiting functionality of alloc_candev() is the same as before.
      
      CAN devices need to have prioritized multiple hardware queues or are
      able to abort waiting for arbitration to make sensible use of
      multi-queues.
      Signed-off-by: NZhu Yi <yi.zhu5@cn.bosch.com>
      Signed-off-by: NMark Jonas <mark.jonas@de.bosch.com>
      Reviewed-by: NHeiko Schocher <hs@denx.de>
      Signed-off-by: NMarc Kleine-Budde <mkl@pengutronix.de>
      03870907
    • Y
      can: dev: use skb_put_zero to simplfy code · 8551e71d
      YueHaibing 提交于
      use helper skb_put_zero to replace the pattern of skb_put() && memset()
      Signed-off-by: NYueHaibing <yuehaibing@huawei.com>
      Signed-off-by: NMarc Kleine-Budde <mkl@pengutronix.de>
      8551e71d
  19. 08 5月, 2018 1 次提交
    • J
      can: dev: increase bus-off message severity · 71c23a82
      Jakob Unterwurzacher 提交于
      bus-off is usually caused by hardware malfunction or configuration error
      (baud rate mismatch) and causes a complete loss of communication.
      
      Increase the "bus-off" message's severity from netdev_dbg() to
      netdev_info() to make it visible to the user.
      
      A can interface going into bus-off is similar in severity to ethernet's
      "Link is Down" message, which is also printed at info level.
      
      It is debatable whether the the "restarted" message should also be
      changed to netdev_info() to make the interface state changes
      comprehensible from the kernel log. I have chosen to keep the
      "restarted" message at dbg for now as the "bus-off" message should be
      enough for the user to notice and investigate the problem.
      Signed-off-by: NJakob Unterwurzacher <jakob.unterwurzacher@theobroma-systems.com>
      Cc: linux-can@vger.kernel.org
      Cc: linux-kernel@vger.kernel.org
      Signed-off-by: NMarc Kleine-Budde <mkl@pengutronix.de>
      71c23a82
  20. 26 1月, 2018 1 次提交
  21. 16 1月, 2018 1 次提交
  22. 27 6月, 2017 3 次提交
  23. 16 6月, 2017 1 次提交
    • J
      networking: make skb_put & friends return void pointers · 4df864c1
      Johannes Berg 提交于
      It seems like a historic accident that these return unsigned char *,
      and in many places that means casts are required, more often than not.
      
      Make these functions (skb_put, __skb_put and pskb_put) return void *
      and remove all the casts across the tree, adding a (u8 *) cast only
      where the unsigned char pointer was used directly, all done with the
      following spatch:
      
          @@
          expression SKB, LEN;
          typedef u8;
          identifier fn = { skb_put, __skb_put };
          @@
          - *(fn(SKB, LEN))
          + *(u8 *)fn(SKB, LEN)
      
          @@
          expression E, SKB, LEN;
          identifier fn = { skb_put, __skb_put };
          type T;
          @@
          - E = ((T *)(fn(SKB, LEN)))
          + E = fn(SKB, LEN)
      
      which actually doesn't cover pskb_put since there are only three
      users overall.
      
      A handful of stragglers were converted manually, notably a macro in
      drivers/isdn/i4l/isdn_bsdcomp.c and, oddly enough, one of the many
      instances in net/bluetooth/hci_sock.c. In the former file, I also
      had to fix one whitespace problem spatch introduced.
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      4df864c1