1. 19 May, 2014 4 commits
  2. 28 Apr, 2014 1 commit
  3. 24 Apr, 2014 1 commit
  4. 23 Apr, 2014 2 commits
  5. 14 Apr, 2014 1 commit
  6. 03 Apr, 2014 1 commit
  7. 02 Apr, 2014 5 commits
  8. 01 Apr, 2014 25 commits
    • Eric W. Biederman's avatar
      netpoll: Use skb_irq_freeable to make zap_completion_queue safe. · b1586f09
      Eric W. Biederman authored
      Replace the test in zap_completion_queue to test when it is safe to
      free skbs in hard irq context with skb_irq_freeable ensuring we only
      free skbs when it is safe, and removing the possibility of subtle
      problems.
      Signed-off-by: default avatar"Eric W. Biederman" <ebiederm@xmission.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      b1586f09
    • Eric W. Biederman's avatar
      net: Add a test to see if a skb is freeable in irq context · 574f7194
      Eric W. Biederman authored
      Currently netpoll and skb_release_head_state assume that a skb is
      freeable in hard irq context except when skb->destructor is set.
      
      The reality is far from this.  So add a function skb_irq_freeable to
      compute the full test and in the process be the living documentation
      of what the requirements are of actually freeing a skb in hard irq
      context.
      Signed-off-by: default avatar"Eric W. Biederman" <ebiederm@xmission.com>
      Acked-by: default avatarEric Dumazet <edumazet@google.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      574f7194
    • David S. Miller's avatar
      Merge tag 'linux-can-fixes-for-3.15-20140401' of git://gitorious.org/linux-can/linux-can · f91ca783
      David S. Miller authored
      linux-can-fixes-for-3.15-20140401
      
      Marc Kleine-Budde says:
      
      ====================
      this is a pull request of 16 patches for the 3.15 release cycle.
      
      Bjorn Van Tilt contributes a patch which fixes a memory leak in usb_8dev's
      usb_8dev_start_xmit()s error path. A patch by Robert Schwebel fixes a typo in
      the can documentation. The remaining patches all target the c_can driver. Two
      of them are by me; they add a missing netif_napi_del() and return value
      checking. Thomas Gleixner contributes 12 patches, which address several
      shortcomings in the driver like hardware initialisation, concurrency, message
      ordering and poor performance.
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      f91ca783
    • Shahed Shaikh's avatar
      qlcnic: Fix build failure due to undefined reference to `vxlan_get_rx_port' · 7f1f6056
      Shahed Shaikh authored
      Commit 2b3d7b75("qlcnic: Add VXLAN Rx offload support") uses
      vxlan_get_rx_port() which caused build failure when VXLAN=m.
      
      This patch fixes the build failure by adding dependency on VXLAN
      in Kconfig of qlcnic module and use vxlan_get_rx_port() and support
      code accordingly.
      Signed-off-by: default avatarShahed Shaikh <shahed.shaikh@qlogic.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      7f1f6056
    • Daniel Borkmann's avatar
      net: ptp: move PTP classifier in its own file · 408eccce
      Daniel Borkmann authored
      This commit fixes a build error reported by Fengguang, that is
      triggered when CONFIG_NETWORK_PHY_TIMESTAMPING is not set:
      
        ERROR: "ptp_classify_raw" [drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe.ko] undefined!
      
      The fix is to introduce its own file for the PTP BPF classifier,
      so that PTP_1588_CLOCK and/or NETWORK_PHY_TIMESTAMPING can select
      it independently from each other. IXP4xx driver on ARM needs to
      select it as well since it does not seem to select PTP_1588_CLOCK
      or similar that would pull it in automatically.
      
      This also allows for hiding all of the internals of the BPF PTP
      program inside that file, and only exporting relevant API bits
      to drivers.
      
      This patch also adds a kdoc documentation of ptp_classify_raw()
      API to make it clear that it can return PTP_CLASS_* defines. Also,
      the BPF program has been translated into bpf_asm code, so that it
      can be more easily read and altered (extensively documented in [1]).
      
      In the kernel tree under tools/net/ we have bpf_asm and bpf_dbg
      tools, so the commented program can simply be translated via
      `./bpf_asm -c prog` where prog is a file that contains the
      commented code. This makes it easily readable/verifiable and when
      there's a need to change something, jump offsets etc do not need
      to be replaced manually which can be very error prone. Instead,
      a newly translated version via bpf_asm can simply replace the old
      code. I have checked opcode diffs before/after and it's the very
      same filter.
      
        [1] Documentation/networking/filter.txt
      
      Fixes: 164d8c66 ("net: ptp: do not reimplement PTP/BPF classifier")
      Reported-by: default avatarFengguang Wu <fengguang.wu@intel.com>
      Signed-off-by: default avatarDaniel Borkmann <dborkman@redhat.com>
      Signed-off-by: default avatarAlexei Starovoitov <ast@plumgrid.com>
      Cc: Richard Cochran <richardcochran@gmail.com>
      Cc: Jiri Benc <jbenc@redhat.com>
      Acked-by: default avatarRichard Cochran <richardcochran@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      408eccce
    • Dan Carpenter's avatar
      net: sxgbe: make "core_ops" static · 7baea6ef
      Dan Carpenter authored
      The "core_ops" variable isn't referenced outside this file and Sparse
      complains about it:
      
      	drivers/net/ethernet/samsung/sxgbe/sxgbe_core.c:239:29: warning:
      	symbol 'core_ops' was not declared. Should it be static?
      Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      7baea6ef
    • Dan Carpenter's avatar
      net: sxgbe: fix logical vs bitwise operation · 4f6ed914
      Dan Carpenter authored
      Bitwise '|' was intended here instead of logical '||'.
      
      Fixes: 1edb9ca6 ('net: sxgbe: add basic framework for Samsung 10Gb ethernet driver')
      Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      4f6ed914
    • Dan Carpenter's avatar
      net: sxgbe: sxgbe_mdio_register() frees the bus · ca231f83
      Dan Carpenter authored
      "err" is always zero at this point so we always unregister and free the
      mdio_bus before returning success.  This seems like left over code and
      I have deleted it.
      
      Fixes: 1edb9ca6 ('net: sxgbe: add basic framework for Samsung 10Gb ethernet driver')
      Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      ca231f83
    • Daniel Pieczko's avatar
      Call efx_set_channels() before efx->type->dimension_resources() · 52ad762b
      Daniel Pieczko authored
      When using the "separate_tx_channels=1" module parameter, the TX queues are
      initially numbered starting from the first TX-only channel number (after all the
      RX-only channels).  efx_set_channels() renumbers the queues so that they are
      indexed from zero.
      
      On EF10, the TX queues need to be relabelled in this way before calling the
      dimension_resources NIC type operation, otherwise the TX queue PIO buffers can be
      linked to the wrong VIs when using "separate_tx_channels=1".
      
      Added comments to explain UC/WC mappings for PIO buffers
      Signed-off-by: default avatarShradha Shah <sshah@solarflare.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      52ad762b
    • Wei Liu's avatar
      xen-netback: disable rogue vif in kthread context · e9d8b2c2
      Wei Liu authored
      When netback discovers frontend is sending malformed packet it will
      disables the interface which serves that frontend.
      
      However disabling a network interface involving taking a mutex which
      cannot be done in softirq context, so we need to defer this process to
      kthread context.
      
      This patch does the following:
      1. introduce a flag to indicate the interface is disabled.
      2. check that flag in TX path, don't do any work if it's true.
      3. check that flag in RX path, turn off that interface if it's true.
      
      The reason to disable it in RX path is because RX uses kthread. After
      this change the behavior of netback is still consistent -- it won't do
      any TX work for a rogue frontend, and the interface will be eventually
      turned off.
      
      Also change a "continue" to "break" after xenvif_fatal_tx_err, as it
      doesn't make sense to continue processing packets if frontend is rogue.
      
      This is a fix for XSA-90.
      Reported-by: default avatarTörök Edwin <edwin@etorok.net>
      Signed-off-by: default avatarWei Liu <wei.liu2@citrix.com>
      Cc: Ian Campbell <ian.campbell@citrix.com>
      Reviewed-by: default avatarDavid Vrabel <david.vrabel@citrix.com>
      Acked-by: default avatarIan Campbell <ian.campbell@citrix.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      e9d8b2c2
    • Or Gerlitz's avatar
      net/mlx4: Set proper build dependancy with vxlan · a66132f3
      Or Gerlitz authored
      Make sure that vxlan_get_rx_port() is present in the kernel build in a manner
      consistent with mlx4, else mlx4 can be made built-in where vxlan a module and
      the phase of the build linking fails. Add CONFIG_MLX4_EN_VXLAN for that.
      
      Also, #ifdef the advertizement and implementation of the mlx4 vxlan ndo
      calls and related code under this config directive.
      Signed-off-by: default avatarOr Gerlitz <ogerlitz@mellanox.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      a66132f3
    • Sathya Perla's avatar
      be2net: fix build dependency on VxLAN · c5abe7c0
      Sathya Perla authored
      Introduce a CONFIG_BE2NET_VXLAN define to control be2net's build
      dependency on the VXLAN driver.
      
      Without this fix, the kernel build fails when VxLAN driver is
      selected to be built as a module while be2net is built-in.
      
      fixes: c9c47142 ("be2net: csum, tso and rss steering offload support for VxLAN")
      Signed-off-by: default avatarSathya Perla <sathya.perla@emulex.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      c5abe7c0
    • Phoebe Buckheister's avatar
      mac802154: make csma/cca parameters per-wpan · e462ded6
      Phoebe Buckheister authored
      Commit 9b2777d6 (ieee802154: add TX power control to wpan_phy)
      and following erroneously added CSMA and CCA parameters for 802.15.4
      devices as PHY parameters, while they are actually MAC parameters and
      can differ for any two WPAN instances. Since it is now sensible to have
      multiple WPAN devices with differing CSMA/CCA parameters, make these
      parameters MAC parameters instead.
      Signed-off-by: default avatarPhoebe Buckheister <phoebe.buckheister@itwm.fraunhofer.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      e462ded6
    • Phoebe Buckheister's avatar
      mac802154: allow only one WPAN to be up at any given time · 336908f6
      Phoebe Buckheister authored
      All 802.15.4 PHY devices with drivers in tree can support only one WPAN
      at any given time, yet the stack allows arbitrarily many WPAN devices to
      be created and up at the same time. This cannot work with what the
      hardware provides, and in the current implementation, provides an easy
      DoS vector to any process on the system that may call socket() and
      sendmsg().
      
      Thus, allow only one WPAN per PHY to be up at once, just like mac80211
      does for managed devices.
      Signed-off-by: default avatarPhoebe Buckheister <phoebe.buckheister@itwm.fraunhofer.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      336908f6
    • Daniel Borkmann's avatar
      net: filter: minor: fix kdoc in __sk_run_filter · 01d32f6e
      Daniel Borkmann authored
      This minor patch fixes the following warning when doing
      a `make htmldocs`:
      
        DOCPROC Documentation/DocBook/networking.xml
      Warning(.../net/core/filter.c:135): No description found for parameter 'insn'
      Warning(.../net/core/filter.c:135): Excess function parameter 'fentry' description in '__sk_run_filter'
        HTML    Documentation/DocBook/networking.html
      Reported-by: default avatarFengguang Wu <fengguang.wu@intel.com>
      Signed-off-by: default avatarDaniel Borkmann <dborkman@redhat.com>
      Cc: Alexei Starovoitov <ast@plumgrid.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      01d32f6e
    • Pablo Neira's avatar
      netlink: don't compare the nul-termination in nla_strcmp · 8b7b9324
      Pablo Neira authored
      nla_strcmp compares the string length plus one, so it's implicitly
      including the nul-termination in the comparison.
      
       int nla_strcmp(const struct nlattr *nla, const char *str)
       {
              int len = strlen(str) + 1;
              ...
                      d = memcmp(nla_data(nla), str, len);
      
      However, if NLA_STRING is used, userspace can send us a string without
      the nul-termination. This is a problem since the string
      comparison will not match as the last byte may be not the
      nul-termination.
      
      Fix this by skipping the comparison of the nul-termination if the
      attribute data is nul-terminated. Suggested by Thomas Graf.
      
      Cc: Florian Westphal <fw@strlen.de>
      Cc: Thomas Graf <tgraf@suug.ch>
      Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      8b7b9324
    • Thomas Gleixner's avatar
      can: c_can: Avoid led toggling for every packet. · b1d8e431
      Thomas Gleixner authored
      There is no point to toggle the RX led for every packet. Especially if
      we have a full FIFO we want to avoid everything we can.
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Signed-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
      b1d8e431
    • Thomas Gleixner's avatar
      can: c_can: Simplify TX interrupt cleanup · 5a7513ad
      Thomas Gleixner authored
      The function loads the message object from the hardware to get the
      payload length. The previous patch stores that information in an
      array, so we can avoid the hardware access.
      
      Remove the hardware access and move the led toggle outside of the
      spinlocked region. Toggle the led only once when at least one packet
      has been received.
      
      Binary size shrinks along with the code
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Signed-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
      5a7513ad
    • Thomas Gleixner's avatar
      can: c_can: Store dlc private · 90247008
      Thomas Gleixner authored
      We can avoid the HW access in TX cleanup path for retrieving the DLC
      of the sent package if we store the DLC in a private array.
      
      Ideally this should be handled in the can_echo_skb functions, but I
      leave that exercise to the CAN folks.
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Signed-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
      90247008
    • Thomas Gleixner's avatar
      can: c_can: Reduce register access · c0a9f4d3
      Thomas Gleixner authored
      commit 4ce78a83 (can: c_can: Speed up rx_poll function) hyped a
      performance improvement by reducing the access to the interrupt
      pending register from a dual 16 bit to a single 16 bit access. Wow!
      
      Thereby it crippled the driver to cast the 16 msg objects in stone,
      which is completly braindead as contemporary hardware has up to 128
      message objects. Supporting larger object buffers is a major surgery,
      but it'd be definitely worth it especially as the driver does not
      support HW message filtering ....
      
      The logic of the "FIFO" implementation is to split the FIFO in half.
      
      For the lower half we read the buffers and clear the interrupt pending
      bit, but keep the newdat bit set, so the HW will queue above those
      buffers.
      
      When we read out the last low buffer then we reenable all the low half
      buffers by clearing the newdat bit.
      
      The upper half buffers clear the newdat and the interrupt pending bit
      right away as we know that the lower half bits are clear and give us a
      headstart against the hardware.
      
      Now the implementation is:
      
          transfer_message_object()
          read_object_and_put_into_skb();
      
          if (obj < END_OF_LOW_BUF)
             clear_intpending(obj)
          else if (obj > END_OF_LOW_BUF)
             clear_intpending_and_newdat(obj)
          else if (obj == END_OF_LOW_BUF)
             clear_newdat_of_all_low_objects()
      
      The hardware allows to avoid most of the mess simply because we can
      tell the transfer_message_object() function to clear bits right away.
      
      So we can be clever and do:
      
         if (obj <= END_OF_LOW_BUF)
            ctrl = TRANSFER_MSG | CLEAR_INTPND;
         else
            ctrl = TRANSFER_MSG | CLEAR_INTPND | CLEAR_NEWDAT;
      
          transfer_message_object(ctrl)
          read_object_and_put_into_skb();
      
          if (obj == END_OF_LOW_BUF)
             clear_newdat_of_all_low_objects()
      
      So we save a complete control operation on all message objects except
      the one which is the end of the low buffer. That's a few micro seconds
      per object.
      
      I'm not adding a boasting profile to that, simply because it's self
      explaining.
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      [mkl: adjusted subject and commit message]
      Signed-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
      c0a9f4d3
    • Thomas Gleixner's avatar
      can: c_can: Make the code readable · 520f570c
      Thomas Gleixner authored
      If every other line contains line breaks, that's a clear sign for
      indentation level madness. Split out the inner loop and move the code
      to a separate function. gcc creates slightly worse code for that, but
      we'll fix that in the next step.
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      [mkl: adjusted subject]
      Signed-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
      520f570c
    • Thomas Gleixner's avatar
      can: c_can: Provide protection in the xmit path · bf88a206
      Thomas Gleixner authored
      The network core does not serialize the access to the hardware. The
      xmit related code lets the following happen:
      
      CPU0 	     	       CPU1
      interrupt()
       do_poll()
         c_can_do_tx()
          Fiddle with HW and	xmit()
          internal data	  Fiddle with HW and
          	     		  internal data
      
      due the complete lack of serialization.
      
      Add proper locking.
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Signed-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
      bf88a206
    • Thomas Gleixner's avatar
      can: c_can: Remove EOB exit · 710c5610
      Thomas Gleixner authored
      The rx_poll code has the following gem:
      
      	if (msg_ctrl_save & IF_MCONT_EOB)
      		return num_rx_pkts;
      
      The EOB bit is the indicator for the hardware that this is the last
      configured FIFO object. But this object can contain valid data, if we
      manage to free up objects before the overrun case hits.
      
      Now if the code exits due to the EOB bit set, then this buffer is
      stale and the interrupt bit and NewDat bit of the buffer are still
      set. Results in a nice interrupt storm unless we come into an overrun
      situation where the MSGLST bit gets set.
      
           ksoftirqd/0-3     [000] ..s.    79.124101: c_can_poll: rx_poll: val: 00008001 pend 00008001
           ksoftirqd/0-3     [000] ..s.    79.124176: c_can_poll: rx_poll: val: 00008000 pend 00008000
           ksoftirqd/0-3     [000] ..s.    79.124187: c_can_poll: rx_poll: val: 00008002 pend 00008002
           ksoftirqd/0-3     [000] ..s.    79.124256: c_can_poll: rx_poll: val: 00008000 pend 00008000
           ksoftirqd/0-3     [000] ..s.    79.124267: c_can_poll: rx_poll: val: 00008000 pend 00008000
      
      The amazing thing is that the check of the MSGLST (aka overrun bit)
      used to be after the check of the EOB bit. That was "fixed" in commit
      5d0f801a(can: c_can: Fix RX message handling, handle lost message
      before EOB). But the author of this "fix" did not even understand that
      the EOB check is broken as well.
      
      Again a simple solution: Remove
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      [mkl: adjusted subject and commit message]
      Signed-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
      710c5610
    • Thomas Gleixner's avatar
      can: c_can: Fix the lost message handling · 07c7b6f6
      Thomas Gleixner authored
      The lost message handling is broken in several ways.
      
      1) Clearing the message lost flag is done by writing 0 to the
         message control register of the object.
      
         #define IF_MCONT_CLR_MSGLST    (0 << 14)
      
         That clears the object buffer configuration in the worst case,
         which results in a loss of the EOB flag. That leaves the FIFO chain
         without a limit and causes a complete lockup of the HW
      
      2) In case that the error skb allocation fails, the code happily
         claims that it handed down a packet. Just an accounting bug, but ....
      
      3) The code adds a lot of pointless overhead to that error case, where
         we need to get stuff done as fast as possible to avoid more packet
         loss.
      
         - printk an annoying error message
         - reread the object buffer for nothing
      
      Fix is simple again:
      
        - Use the already known MSGCTRL content and only clear the MSGLST bit
        - Fix the buffer accounting by adding a proper return code
        - Remove the pointless operations
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Signed-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
      07c7b6f6
    • Thomas Gleixner's avatar
      can: c_can: Fix buffer ordering · 64f08f2f
      Thomas Gleixner authored
      The buffer handling of c_can has been broken forever. That leads to
      message reordering:
      
      ksoftirqd/0-3     [000] ..s.    79.123776: c_can_poll: rx_poll: val: 00007fff
      ksoftirqd/0-3     [000] ..s.    79.124101: c_can_poll: rx_poll: val: 00008001
      
      What happens is:
      
      CPU				HW
      				queue new packet into obj 16 (0-15 are busy)
      read obj 1-15
      return because pending is 0
      				set pending obj 16 -> pending reg 8000
      				queue new packet into obj 1
      				set pending obj 1 -> pending reg 8001
      
      So the current algorithmus reads the newest message first, which
      violates the ordering rules of CAN.
      
      Add proper handling of that situation by analyzing the contents of the
      pending register for gaps.
      
      This does NOT fix the message object corruption which can lead to
      interrupt storms. Thats addressed in the next patches.
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      [mkl: adjusted subject]
      Signed-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
      64f08f2f