1. 09 3月, 2015 6 次提交
    • A
      can: kvaser_usb: Read all messages in a bulk-in URB buffer · 2fec5104
      Ahmed S. Darwish 提交于
      The Kvaser firmware can only read and write messages that are
      not crossing the USB endpoint's wMaxPacketSize boundary. While
      receiving commands from the CAN device, if the next command in
      the same URB buffer crossed that max packet size boundary, the
      firmware puts a zero-length placeholder command in its place
      then moves the real command to the next boundary mark.
      
      The driver did not recognize such behavior, leading to missing
      a good number of rx events during a heavy rx load session.
      
      Moreover, a tx URB context only gets freed upon receiving its
      respective tx ACK event. Over time, the free tx URB contexts
      pool gets depleted due to the missing ACK events. Consequently,
      the netif transmission queue gets __permanently__ stopped; no
      frames could be sent again except after restarting the CAN
      newtwork interface.
      Signed-off-by: NAhmed S. Darwish <ahmed.darwish@valeo.com>
      Cc: linux-stable <stable@vger.kernel.org>
      Signed-off-by: NMarc Kleine-Budde <mkl@pengutronix.de>
      2fec5104
    • A
      can: kvaser_usb: Avoid double free on URB submission failures · deb2701c
      Ahmed S. Darwish 提交于
      Upon a URB submission failure, the driver calls usb_free_urb()
      but then manually frees the URB buffer by itself.  Meanwhile
      usb_free_urb() has alredy freed out that transfer buffer since
      we're the only code path holding a reference to this URB.
      
      Remove two of such invalid manual free().
      Signed-off-by: NAhmed S. Darwish <ahmed.darwish@valeo.com>
      Cc: linux-stable <stable@vger.kernel.org>
      Signed-off-by: NMarc Kleine-Budde <mkl@pengutronix.de>
      deb2701c
    • S
      can: peak_usb: fix missing ctrlmode_ init for every dev · b0d4724b
      Stephane Grosjean 提交于
      Fixes a missing initialization of ctrlmode and ctrlmode_supported fields,
      for all other CAN devices than the first one. This fix only concerns
      the PCAN-USB Pro FD dual-channels CAN-FD device made by PEAK-System.
      Signed-off-by: NStephane Grosjean <s.grosjean@peak-system.com>
      Signed-off-by: NMarc Kleine-Budde <mkl@pengutronix.de>
      b0d4724b
    • O
      can: add missing initialisations in CAN related skbuffs · 96943901
      Oliver Hartkopp 提交于
      When accessing CAN network interfaces with AF_PACKET sockets e.g. by dhclient
      this can lead to a skb_under_panic due to missing skb initialisations.
      
      Add the missing initialisations at the CAN skbuff creation times on driver
      level (rx path) and in the network layer (tx path).
      Reported-by: NAustin Schuh <austin@peloton-tech.com>
      Reported-by: NDaniel Steer <daniel.steer@mclaren.com>
      Signed-off-by: NOliver Hartkopp <socketcan@hartkopp.net>
      Cc: linux-stable <stable@vger.kernel.org>
      Signed-off-by: NMarc Kleine-Budde <mkl@pengutronix.de>
      96943901
    • W
      ip: fix error queue empty skb handling · c247f053
      Willem de Bruijn 提交于
      When reading from the error queue, msg_name and msg_control are only
      populated for some errors. A new exception for empty timestamp skbs
      added a false positive on icmp errors without payload.
      
      `traceroute -M udpconn` only displayed gateways that return payload
      with the icmp error: the embedded network headers are pulled before
      sock_queue_err_skb, leaving an skb with skb->len == 0 otherwise.
      
      Fix this regression by refining when msg_name and msg_control
      branches are taken. The solutions for the two fields are independent.
      
      msg_name only makes sense for errors that configure serr->port and
      serr->addr_offset. Test the first instead of skb->len. This also fixes
      another issue. saddr could hold the wrong data, as serr->addr_offset
      is not initialized  in some code paths, pointing to the start of the
      network header. It is only valid when serr->port is set (non-zero).
      
      msg_control support differs between IPv4 and IPv6. IPv4 only honors
      requests for ICMP and timestamps with SOF_TIMESTAMPING_OPT_CMSG. The
      skb->len test can simply be removed, because skb->dev is also tested
      and never true for empty skbs. IPv6 honors requests for all errors
      aside from local errors and timestamps on empty skbs.
      
      In both cases, make the policy more explicit by moving this logic to
      a new function that decides whether to process msg_control and that
      optionally prepares the necessary fields in skb->cb[]. After this
      change, the IPv4 and IPv6 paths are more similar.
      
      The last case is rxrpc. Here, simply refine to only match timestamps.
      
      Fixes: 49ca0d8b ("net-timestamp: no-payload option")
      Reported-by: NJan Niehusmann <jan@gondor.com>
      Signed-off-by: NWillem de Bruijn <willemb@google.com>
      
      ----
      
      Changes
        v1->v2
        - fix local origin test inversion in ip6_datagram_support_cmsg
        - make v4 and v6 code paths more similar by introducing analogous
          ipv4_datagram_support_cmsg
        - fix compile bug in rxrpc
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      c247f053
    • P
      bgmac: Clean warning messages · 8edfe3b6
      Peter Senna Tschudin 提交于
      On my test environment the throughput of a file transfer drops
      from 4.4MBps to 116KBps due the number of repeated warning
      messages. This patch removes the warning messages as DMA works
      correctly with addresses using 0xC0000000 bits.
      Signed-off-by: NPeter Senna Tschudin <peter.senna@gmail.com>
      Acked-by: NRafał Miłecki <zajec5@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      8edfe3b6
  2. 06 3月, 2015 13 次提交
    • E
      tcp: align tcp_xmit_size_goal() on tcp_tso_autosize() · 6c09fa09
      Eric Dumazet 提交于
      With some mss values, it is possible tcp_xmit_size_goal() puts
      one segment more in TSO packet than tcp_tso_autosize().
      
      We send then one TSO packet followed by one single MSS.
      
      It is not a serious bug, but we can do slightly better, especially
      for drivers using netif_set_gso_max_size() to lower gso_max_size.
      
      Using same formula avoids these corner cases and makes
      tcp_xmit_size_goal() a bit faster.
      Signed-off-by: NEric Dumazet <edumazet@google.com>
      Fixes: 605ad7f1 ("tcp: refine TSO autosizing")
      Acked-by: NNeal Cardwell <ncardwell@google.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      6c09fa09
    • S
      net: fec: fix unbalanced clk disable on driver unbind · e9647d1e
      Stefan Agner 提交于
      When the driver is removed (e.g. using unbind through sysfs), the
      clocks get disabled twice, once on fec_enet_close and once on
      fec_drv_remove. Since the clocks are enabled only once, this leads
      to a warning:
      
      WARNING: CPU: 0 PID: 402 at drivers/clk/clk.c:992 clk_core_disable+0x64/0x68()
      
      Remove the call to fec_enet_clk_enable in fec_drv_remove to balance
      the clock enable/disable calls again. This has been introduce by
      e8fcfcd5 ("net: fec: optimize the clock management to save power").
      Signed-off-by: NStefan Agner <stefan@agner.ch>
      Acked-by: NFugang Duan <B38611@freescale.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      e9647d1e
    • P
      net: macb: Correct the MID field length value · d941bebf
      Punnaiah Choudary Kalluri 提交于
      The latest spec "I-IPA01-0266-USR Rev 10" limit the MID field length to 12 bit
      value. For previous versions it is 16 bit value.
      
      This change will not break the backward compatibility as the latest ID value is
      7 and with in the 12 bit value limit.
      Signed-off-by: NPunnaiah Choudary Kalluri <punnaia@xilinx.com>
      Signed-off-by: NMichal Simek <michal.simek@xilinx.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      d941bebf
    • T
      net: gianfar: correctly determine the number of queue groups · f50724cd
      Tobias Waldekranz 提交于
      eTSEC of-nodes may have children which are not queue-group nodes. For
      example new-style fixed-phy declarations. These where incorrectly
      assumed to be additional queue-groups.
      
      Change the search to filter out any nodes which are not queue-groups,
      or have been disabled.
      Signed-off-by: NTobias Waldekranz <tobias@waldekranz.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      f50724cd
    • D
      Merge git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf · 9d73b42b
      David S. Miller 提交于
      Pablo Neira Ayuso says:
      
      ====================
      Netfilter/IPVS fixes for net
      
      The following patchset contains Netfilter/IPVS fixes for your net tree,
      they are:
      
      1) Don't truncate ethernet protocol type to u8 in nft_compat, from
         Arturo Borrero.
      
      2) Fix several problems in the addition/deletion of elements in nf_tables.
      
      3) Fix module refcount leak in ip_vs_sync, from Julian Anastasov.
      
      4) Fix a race condition in the abort path in the nf_tables transaction
         infrastructure. Basically aborted rules can show up as active rules
         until changes are unrolled, oneliner from Patrick McHardy.
      
      5) Check for overflows in the data area of the rule, also from Patrick.
      
      6) Fix off-by-one in the per-rule user data size field. This introduces
         a new nft_userdata structure that is placed at the beginning of the
         user data area that contains the length to save some bits from the
         rule and we only need one bit to indicate its presence, from Patrick.
      
      7) Fix rule replacement error path, the replaced rule is deleted on
         error instead of leaving it in place. This has been fixed by relying
         on the abort path to undo the incomplete replacement.
      ====================
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      9d73b42b
    • A
      ipv4: ip_check_defrag should not assume that skb_network_offset is zero · 3e32e733
      Alexander Drozdov 提交于
      ip_check_defrag() may be used by af_packet to defragment outgoing packets.
      skb_network_offset() of af_packet's outgoing packets is not zero.
      Signed-off-by: NAlexander Drozdov <al.drozdov@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      3e32e733
    • F
      net: bcmgenet: properly disable password matching · 386668a6
      Florian Fainelli 提交于
      bcmgenet_set_wol() correctly sets MPD_PW_EN when a password is specified
      to match magic packets against, however, when we switch from a
      password-matching to a matching without password we would leave this bit
      turned on, and GENET would only match magic packets with passwords.
      
      This can be reproduced using the following sequence:
      
      ethtool -s eth0 wol g
      ethtool -s eth0 wol s sopass 00:11:22:33:44:55
      ethtool -s eth0 wol g
      
      The simple fix is to clear the MPD_PWD_EN bit when WAKE_MAGICSECURE is
      not set.
      
      Fixes: c51de7f3 ("net: bcmgenet: add Wake-on-LAN support code")
      Signed-off-by: NFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      386668a6
    • M
      net: eth: xgene: fix booting with devicetree · b0ab0afa
      Mark Salter 提交于
      Commit de7b5b3d ("net: eth: xgene: change APM X-Gene SoC platform
      ethernet to support ACPI") breaks booting with devicetree with UEFI
      firmware. In that case, I get:
      
      Unhandled fault: synchronous external abort (0x96000010) at 0xfffffc0000620010
       Internal error: : 96000010 [#1] SMP
       Modules linked in: vfat fat xfs libcrc32c ahci_xgene libahci_platform libahci
       CPU: 7 PID: 634 Comm: NetworkManager Not tainted 4.0.0-rc1+ #4
       Hardware name: AppliedMicro Mustang/Mustang, BIOS 1.1.0-rh-0.14 Mar  1 2015
       task: fffffe03d4c7e100 ti: fffffe03d4e24000 task.ti: fffffe03d4e24000
       PC is at xgene_enet_rd_mcx_mac.isra.11+0x58/0xd4
       LR is at xgene_gmac_tx_enable+0x2c/0x50
       pc : [<fffffe000069d6fc>] lr : [<fffffe000069dcc4>] pstate: 80000145
       sp : fffffe03d4e27590
       x29: fffffe03d4e27590 x28: 0000000000000000
       x27: fffffe03d4e277c0 x26: fffffe03da8fda10
       x25: fffffe03d4e2760c x24: fffffe03d49e28c0
       x23: fffffc0000620004 x22: 0000000000000000
       x21: fffffc0000620000 x20: fffffc0000620010
       x19: 000000000000000b x18: 000003ffd4a96020
       x17: 000003ff7fc1f7a0 x16: fffffe000079b9cc
       x15: 0000000000000000 x14: 0000000000000000
       x13: 0000000000000000 x12: fffffe03d4e24000
       x11: fffffe03d4e27da0 x10: 0000000000000001
       x9 : 0000000000000000 x8 : fffffe03d4e27a20
       x7 : 0000000000000000 x6 : 00000000ffffffef
       x5 : fffffe000105f7d0 x4 : fffffe00007ca8c8
       x3 : fffffe03d4e2760c x2 : 0000000000000000
       x1 : fffffc0000620000 x0 : 0000000040000000
      
       Process NetworkManager (pid: 634, stack limit = 0xfffffe03d4e24028)
       Stack: (0xfffffe03d4e27590 to 0xfffffe03d4e28000)
       ...
       Call trace:
       [<fffffe000069d6fc>] xgene_enet_rd_mcx_mac.isra.11+0x58/0xd4
       [<fffffe000069dcc0>] xgene_gmac_tx_enable+0x28/0x50
       [<fffffe00006a112c>] xgene_enet_open+0x2c/0x130
       [<fffffe00007b9254>] __dev_open+0xc8/0x148
       [<fffffe00007b956c>] __dev_change_flags+0x90/0x158
       [<fffffe00007b9664>] dev_change_flags+0x30/0x70
       [<fffffe00007c8ab8>] do_setlink+0x278/0x870
       [<fffffe00007c95bc>] rtnl_newlink+0x404/0x6a8
       [<fffffe00007c8040>] rtnetlink_rcv_msg+0x98/0x218
       [<fffffe00007e78e4>] netlink_rcv_skb+0xe0/0xf8
       [<fffffe00007c7f94>] rtnetlink_rcv+0x30/0x44
       [<fffffe00007e6f2c>] netlink_unicast+0xfc/0x210
       [<fffffe00007e75b8>] netlink_sendmsg+0x498/0x5ac
       [<fffffe00007990b8>] do_sock_sendmsg+0xa4/0xcc
       [<fffffe000079a958>] ___sys_sendmsg+0x1fc/0x208
       [<fffffe000079b984>] __sys_sendmsg+0x4c/0x94
       [<fffffe000079b9f8>] SyS_sendmsg+0x2c/0x3c
      
      The problem here is that the enet hw clocks are not getting
      initialized because of a test to avoid the initialization if
      UEFI is used to boot. This is an incorrect test. When booting
      with UEFI and devicetree, the kernel must still initialize
      the enet hw clocks. If booting with ACPI, the clock hw is
      not exposed to the kernel and it is that case where we want
      to avoid initializing clocks.
      Signed-off-by: NMark Salter <msalter@redhat.com>
      Acked-by: NFeng Kan <fkan@apm.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      b0ab0afa
    • B
      bnx2x: Force fundamental reset for EEH recovery · da293700
      Brian King 提交于
      EEH recovery for bnx2x based adapters is not reliable on all Power
      systems using the default hot reset, which can result in an
      unrecoverable EEH error. Forcing the use of fundamental reset
      during EEH recovery fixes this.
      
      Cc: stable<stable@vger.kernel.org>
      Signed-off-by: NBrian King <brking@linux.vnet.ibm.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      da293700
    • D
      Merge branch 'xen-netback' · 08c852c4
      David S. Miller 提交于
      David Vrabel says:
      
      ====================
      xen-netback: fix ethtool stats and memory leak
      
      A couple of bug fixes for netback:
      - make ethool stats to report the correct values.
      - don't leak 1 MiB every time a VIF is destroyed.
      
      Changes in v2:
      - Split 2nd patch into leak fix and refactor patches
      ====================
      Acked-by: NIan Campbell <ian.campbell@citrix.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      08c852c4
    • D
      xen-netback: refactor xenvif_handle_frag_list() · b0c21bad
      David Vrabel 提交于
      When handling a from-guest frag list, xenvif_handle_frag_list()
      replaces the frags before calling the destructor to clean up the
      original (foreign) frags.  Whilst this is safe (the destructor doesn't
      actually use the frags), it looks odd.
      
      Reorder the function to be less confusing.
      Signed-off-by: NDavid Vrabel <david.vrabel@citrix.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      b0c21bad
    • D
      xen-netback: unref frags when handling a from-guest skb with a frag list · 49d9991a
      David Vrabel 提交于
      Every time a VIF is destroyed up to 256 pages may be leaked if packets
      with more than MAX_SKB_FRAGS frags were transmitted from the guest.
      Even worse, if another user of ballooned pages allocated one of these
      ballooned pages it would not handle the unexpectedly >1 page count
      (e.g., gntdev would deadlock when unmapping a grant because the page
      count would never reach 1).
      
      When handling a from-guest skb with a frag list, unref the frags
      before releasing them so they are freed correctly when the VIF is
      destroyed.
      Signed-off-by: NDavid Vrabel <david.vrabel@citrix.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      49d9991a
    • D
      xen-netback: return correct ethtool stats · d63951d7
      David Vrabel 提交于
      Use correct pointer arithmetic to get the pointer to each stat.
      Signed-off-by: NDavid Vrabel <david.vrabel@citrix.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      d63951d7
  3. 05 3月, 2015 18 次提交
    • A
      ARM: fix typos in smc91x platform data · 04b91701
      Arnd Bergmann 提交于
      I recently did a rework of the smc91x driver and did some build-testing
      by compiling hundreds of randconfig kernels. Unfortunately, my script
      was wrong and did not actually test the configurations that mattered,
      so I introduced stupid typos in almost every file I touched.
      
      I fixed my script now, built all configurations that actually matter
      and fixed all the typos, this is the result.
      Signed-off-by: NArnd Bergmann <arnd@arndb.de>
      Fixes: b70661c7 ("net: smc91x: use run-time configuration on all ARM machines")
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      04b91701
    • J
      team: don't traverse port list using rcu in team_set_mac_address · 9215f437
      Jiri Pirko 提交于
      Currently the list is traversed using rcu variant. That is not correct
      since dev_set_mac_address can be called which eventually calls
      rtmsg_ifinfo_build_skb and there, skb allocation can sleep. So fix this
      by remove the rcu usage here.
      
      Fixes: 3d249d4c "net: introduce ethernet teaming device"
      Signed-off-by: NJiri Pirko <jiri@resnulli.us>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      9215f437
    • F
      net: fec: fix rcv is not last issue when do suspend/resume test · 61615cd2
      Fugang Duan 提交于
      When do suspend/resume stress test, some log shows "rcv is not +last".
      The issue is that enet suspend will disable phy clock, phy link down,
      after resume back, enet MAC redo initial and ready to tx/rx packet,
      but phy still is not ready which is doing auto-negotiation. When phy
      link is not up, don't schdule napi soft irq.
      
      [Peter]
      It has fixed kernel panic after long time suspend/resume test
      with nfs rootfs.
      
      [ 8864.429458] fec 2188000.ethernet eth0: rcv is not +last
      [ 8864.434799] fec 2188000.ethernet eth0: rcv is not +last
      [ 8864.440088] fec 2188000.ethernet eth0: rcv is not +last
      [ 8864.445424] fec 2188000.ethernet eth0: rcv is not +last
      [ 8864.450782] fec 2188000.ethernet eth0: rcv is not +last
      [ 8864.456111] Unable to handle kernel NULL pointer dereference at virtual address 00000000
      [ 8864.464225] pgd = 80004000
      [ 8864.466997] [00000000] *pgd=00000000
      [ 8864.470627] Internal error: Oops: 17 [#1] SMP ARM
      [ 8864.475353] Modules linked in: evbug
      [ 8864.479006] CPU: 0 PID: 3 Comm: ksoftirqd/0 Not tainted 4.0.0-rc1-00044-g7a2a1d2 #234
      [ 8864.486854] Hardware name: Freescale i.MX6 SoloX (Device Tree)
      [ 8864.492709] task: be069380 ti: be07a000 task.ti: be07a000
      [ 8864.498137] PC is at memcpy+0x80/0x330
      [ 8864.501919] LR is at gro_pull_from_frag0+0x34/0xa8
      [ 8864.506735] pc : [<802bb080>]    lr : [<8057c204>]    psr: 00000113
      [ 8864.506735] sp : be07bbd4  ip : 00000010  fp : be07bc0c
      [ 8864.518235] r10: 0000000e  r9 : 00000000  r8 : 809c7754
      [ 8864.523479] r7 : 809c7754  r6 : bb43c040  r5 : bd280cc0  r4 : 00000012
      [ 8864.530025] r3 : 00000804  r2 : fffffff2  r1 : 00000000  r0 : bb43b83c
      [ 8864.536575] Flags: nzcv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment kernel
      [ 8864.543904] Control: 10c5387d  Table: bd14c04a  DAC: 00000015
      [ 8864.549669] Process ksoftirqd/0 (pid: 3, stack limit = 0xbe07a210)
      [ 8864.555869] Stack: (0xbe07bbd4 to 0xbe07c000)
      [ 8864.560250] bbc0:                                              bd280cc0 bb43c040 809c7754
      [ 8864.568455] bbe0: 809c7754 bb43b83c 00000012 8057c204 00000000 bd280cc0 bd8a0718 00000003
      [ 8864.576658] bc00: be07bc5c be07bc10 8057ebf0 8057c1dc 00000000 00000000 8057ecc4 bef59760
      [ 8864.584863] bc20: 00000002 bd8a0000 be07bc64 809c7754 00000000 bd8a0718 bd280cc0 bd8a0000
      [ 8864.593066] bc40: 00000000 0000001c 00000000 bd8a0000 be07bc74 be07bc60 8057f148 8057eb90
      [ 8864.601268] bc60: bf0810a0 00000000 be07bcf4 be07bc78 8044e7b4 8057f12c 00000000 8007df6c
      [ 8864.609470] bc80: bd8a0718 00000040 00000000 bd280a80 00000002 00000019 bd8a0600 bd8a1214
      [ 8864.617672] bca0: bd8a0690 bf0810a0 00000000 00000000 bd8a1000 00000000 00000027 bd280cc0
      [ 8864.625874] bcc0: 80062708 800625cc 000943db bd8a0718 00000001 000d1166 00000040 be7c1ec0
      [ 8864.634077] bce0: 0000012c be07bd00 be07bd3c be07bcf8 8057fc98 8044e3ac 809c2ec0 3ddff000
      [ 8864.642280] bd00: be07bd00 be07bd00 be07bd08 be07bd08 00000000 00000020 809c608c 00000003
      [ 8864.650481] bd20: 809c6080 40000001 809c6088 00200100 be07bd84 be07bd40 8002e690 8057fac8
      [ 8864.658684] bd40: be07bd64 be07bd50 00000001 04208040 000d1165 0000000a be07bd84 809c0d7c
      [ 8864.666885] bd60: 00000000 809c6af8 00000000 00000001 be008000 00000000 be07bd9c be07bd88
      [ 8864.675087] bd80: 8002eb64 8002e564 00000125 809c0d7c be07bdc4 be07bda0 8006f100 8002eaac
      [ 8864.683291] bda0: c080e10c be07bde8 809c6c6c c080e100 00000002 00000000 be07bde4 be07bdc8
      [ 8864.691492] bdc0: 800087a0 8006f098 806f2934 20000013 ffffffff be07be1c be07be44 be07bde8
      [ 8864.699695] bde0: 800133a4 80008784 00000001 00000001 00000000 00000000 be7c1680 00000000
      [ 8864.707896] be00: be0cfe00 bd93eb40 00000002 00000000 00000000 be07be44 be07be00 be07be30
      [ 8864.716098] be20: 8006278c 806f2934 20000013 ffffffff be069380 be7c1680 be07be7c be07be48
      [ 8864.724300] be40: 80049cfc 806f2910 00000001 00000000 80049cb4 00000000 be07be7c be7c1680
      [ 8864.732502] be60: be3289c0 be069380 bd23b600 be0cfe00 be07bebc be07be80 806ed614 80049c68
      [ 8864.740706] be80: be07a000 0000020a 809c608c 00000003 00000001 8002e858 be07a000 be035740
      [ 8864.748907] bea0: 00000000 00000001 809d4598 00000000 be07bed4 be07bec0 806edd0c 806ed440
      [ 8864.757110] bec0: be07a000 be07a000 be07bee4 be07bed8 806edd68 806edcf0 be07bef4 be07bee8
      [ 8864.765311] bee0: 8002e860 806edd34 be07bf24 be07bef8 800494b0 8002e828 be069380 00000000
      [ 8864.773512] bf00: be035780 be035740 8004938c 00000000 00000000 00000000 be07bfac be07bf28
      [ 8864.781715] bf20: 80045928 80049398 be07bf44 00000001 00000000 be035740 00000000 00030003
      [ 8864.789917] bf40: dead4ead ffffffff ffffffff 80a2716c 80b59b00 00000000 8088c954 be07bf5c
      [ 8864.798120] bf60: be07bf5c 00000000 00000000 dead4ead ffffffff ffffffff 80a2716c 00000000
      [ 8864.806320] bf80: 00000000 8088c954 be07bf88 be07bf88 be035780 8004584c 00000000 00000000
      [ 8864.814523] bfa0: 00000000 be07bfb0 8000ed10 80045858 00000000 00000000 00000000 00000000
      [ 8864.822723] bfc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
      [ 8864.830925] bfe0: 00000000 00000000 00000000 00000000 00000013 00000000 5ffbb5f7 f9fcf5e7
      [ 8864.839115] Backtrace:
      [ 8864.841631] [<8057c1d0>] (gro_pull_from_frag0) from [<8057ebf0>] (dev_gro_receive+0x6c/0x3f8)
      [ 8864.850173]  r6:00000003 r5:bd8a0718 r4:bd280cc0 r3:00000000
      [ 8864.855958] [<8057eb84>] (dev_gro_receive) from [<8057f148>] (napi_gro_receive+0x28/0xac)
      [ 8864.864152]  r10:bd8a0000 r9:00000000 r8:0000001c r7:00000000 r6:bd8a0000 r5:bd280cc0
      [ 8864.872115]  r4:bd8a0718
      [ 8864.874713] [<8057f120>] (napi_gro_receive) from [<8044e7b4>] (fec_enet_rx_napi+0x414/0xc74)
      [ 8864.883167]  r5:00000000 r4:bf0810a0
      [ 8864.886823] [<8044e3a0>] (fec_enet_rx_napi) from [<8057fc98>] (net_rx_action+0x1dc/0x2ec)
      [ 8864.895016]  r10:be07bd00 r9:0000012c r8:be7c1ec0 r7:00000040 r6:000d1166 r5:00000001
      [ 8864.902982]  r4:bd8a0718
      [ 8864.905570] [<8057fabc>] (net_rx_action) from [<8002e690>] (__do_softirq+0x138/0x2c4)
      [ 8864.913417]  r10:00200100 r9:809c6088 r8:40000001 r7:809c6080 r6:00000003 r5:809c608c
      [ 8864.921382]  r4:00000020
      [ 8864.923966] [<8002e558>] (__do_softirq) from [<8002eb64>] (irq_exit+0xc4/0x138)
      [ 8864.931289]  r10:00000000 r9:be008000 r8:00000001 r7:00000000 r6:809c6af8 r5:00000000
      [ 8864.939252]  r4:809c0d7c
      [ 8864.941841] [<8002eaa0>] (irq_exit) from [<8006f100>] (__handle_domain_irq+0x74/0xe8)
      [ 8864.949688]  r4:809c0d7c r3:00000125
      [ 8864.953342] [<8006f08c>] (__handle_domain_irq) from [<800087a0>] (gic_handle_irq+0x28/0x68)
      [ 8864.961707]  r9:00000000 r8:00000002 r7:c080e100 r6:809c6c6c r5:be07bde8 r4:c080e10c
      [ 8864.969597] [<80008778>] (gic_handle_irq) from [<800133a4>] (__irq_svc+0x44/0x5c)
      [ 8864.977097] Exception stack(0xbe07bde8 to 0xbe07be30)
      [ 8864.982173] bde0:                   00000001 00000001 00000000 00000000 be7c1680 00000000
      [ 8864.990377] be00: be0cfe00 bd93eb40 00000002 00000000 00000000 be07be44 be07be00 be07be30
      [ 8864.998573] be20: 8006278c 806f2934 20000013 ffffffff
      [ 8865.003638]  r7:be07be1c r6:ffffffff r5:20000013 r4:806f2934
      [ 8865.009447] [<806f2904>] (_raw_spin_unlock_irq) from [<80049cfc>] (finish_task_switch+0xa0/0x160)
      [ 8865.018334]  r4:be7c1680 r3:be069380
      [ 8865.021993] [<80049c5c>] (finish_task_switch) from [<806ed614>] (__schedule+0x1e0/0x5dc)
      [ 8865.030098]  r8:be0cfe00 r7:bd23b600 r6:be069380 r5:be3289c0 r4:be7c1680
      [ 8865.036942] [<806ed434>] (__schedule) from [<806edd0c>] (preempt_schedule_common+0x28/0x44)
      [ 8865.045307]  r9:00000000 r8:809d4598 r7:00000001 r6:00000000 r5:be035740 r4:be07a000
      [ 8865.053197] [<806edce4>] (preempt_schedule_common) from [<806edd68>] (_cond_resched+0x40/0x48)
      [ 8865.061822]  r4:be07a000 r3:be07a000
      [ 8865.065472] [<806edd28>] (_cond_resched) from [<8002e860>] (run_ksoftirqd+0x44/0x64)
      [ 8865.073252] [<8002e81c>] (run_ksoftirqd) from [<800494b0>] (smpboot_thread_fn+0x124/0x190)
      [ 8865.081550] [<8004938c>] (smpboot_thread_fn) from [<80045928>] (kthread+0xdc/0xf8)
      [ 8865.089133]  r10:00000000 r9:00000000 r8:00000000 r7:8004938c r6:be035740 r5:be035780
      [ 8865.097097]  r4:00000000 r3:be069380
      [ 8865.100752] [<8004584c>] (kthread) from [<8000ed10>] (ret_from_fork+0x14/0x24)
      [ 8865.107990]  r7:00000000 r6:00000000 r5:8004584c r4:be035780
      [ 8865.113767] Code: e320f000 e4913004 e4914004 e4915004 (e4916004)
      [ 8865.120006] ---[ end trace b0a4c6bd499288ca ]---
      [ 8865.124697] Kernel panic - not syncing: Fatal exception in interrupt
      [ 8865.131084] ---[ end Kernel panic - not syncing: Fatal exception in interrupt
      
      Cc: [v3.19+] stable@vger.kernel.org
      Tested-by: NPeter Chen <peter.chen@freescale.com>
      Signed-off-by: NPeter Chen <peter.chen@freescale.com>
      Signed-off-by: NFugang Duan <B38611@freescale.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      61615cd2
    • D
      Merge branch 'xgene' · 485acc2c
      David S. Miller 提交于
      Iyappan Subramanian says:
      
      ====================
      drivers: net: xgene: Fix backward compatibility of newer firmware with older kernel
      
      Kernel 3.17 driver supports only RGMII ethernet interface.
      Since the Tianocore DT contains same compatibility string for RGMII,
      SGMII based 1G and XFI based 10G interfaces, crash happens when probe called
      on SGMII based 1G and XFI based 10G interface.
      
      This patch fixes the backward compatibility of the older driver with the
      newer firmware by making the binding unique so that the older driver won't
      recognize the non-supported interfaces.
      
      v2: Address comments from v1
      * updated cover letter subject line with net: xgene
      * Documentation: formatted compatible string values as list
      
      v1:
      * Initial version
      ====================
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      485acc2c
    • I
      drivers: net: xgene: fix new firmware backward compatibility with older driver · ecadf4e7
      Iyappan Subramanian 提交于
      This patch fixes the backward compatibile of the older driver with the
      newer firmware by making the binding unique so that the older driver won't
      recognize the non-supported interfaces.
      Signed-off-by: NIyappan Subramanian <isubramanian@apm.com>
      Signed-off-by: NKeyur Chudgar <kchudgar@apm.com>
      Tested-by: NMark Langsdorf <mlangsdo@redhat.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      ecadf4e7
    • I
      dtb: change binding name to match with newer firmware DT · 2a91eb72
      Iyappan Subramanian 提交于
      This patch fixes the backward compatibility of the older driver with the
      newer firmware by making the binding unique so that the older driver won't
      recognize the non-supported interfaces.
      
      The new bindings are in sync with the newer firmware.
      Signed-off-by: NIyappan Subramanian <isubramanian@apm.com>
      Signed-off-by: NKeyur Chudgar <kchudgar@apm.com>
      Tested-by: NMark Langsdorf <mlangsdo@redhat.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      2a91eb72
    • I
    • L
      net: ping: Return EAFNOSUPPORT when appropriate. · 9145736d
      Lorenzo Colitti 提交于
      1. For an IPv4 ping socket, ping_check_bind_addr does not check
         the family of the socket address that's passed in. Instead,
         make it behave like inet_bind, which enforces either that the
         address family is AF_INET, or that the family is AF_UNSPEC and
         the address is 0.0.0.0.
      2. For an IPv6 ping socket, ping_check_bind_addr returns EINVAL
         if the socket family is not AF_INET6. Return EAFNOSUPPORT
         instead, for consistency with inet6_bind.
      3. Make ping_v4_sendmsg and ping_v6_sendmsg return EAFNOSUPPORT
         instead of EINVAL if an incorrect socket address structure is
         passed in.
      4. Make IPv6 ping sockets be IPv6-only. The code does not support
         IPv4, and it cannot easily be made to support IPv4 because
         the protocol numbers for ICMP and ICMPv6 are different. This
         makes connect(::ffff:192.0.2.1) fail with EAFNOSUPPORT instead
         of making the socket unusable.
      
      Among other things, this fixes an oops that can be triggered by:
      
          int s = socket(AF_INET, SOCK_DGRAM, IPPROTO_ICMP);
          struct sockaddr_in6 sin6 = {
              .sin6_family = AF_INET6,
              .sin6_addr = in6addr_any,
          };
          bind(s, (struct sockaddr *) &sin6, sizeof(sin6));
      
      Change-Id: If06ca86d9f1e4593c0d6df174caca3487c57a241
      Signed-off-by: NLorenzo Colitti <lorenzo@google.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      9145736d
    • N
      bcm63xx_enet: fix poll callback. · cd33ccf5
      Nicolas Schichan 提交于
      In case there was some tx buffer reclaimed and not enough rx packets
      to consume the whole budget, napi_complete would not be called and
      interrupts would be kept disabled, effectively resulting in the
      network core never to call the poll callback again and no rx/tx
      interrupts to be fired either.
      
      Fix that by only accounting the rx work done in the poll callback.
      Signed-off-by: NNicolas Schichan <nschichan@freebox.fr>
      Acked-by: NEric Dumazet <edumazet@google.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      cd33ccf5
    • A
      stmmac: check IRQ availability early on probe · 8f02d8da
      Alexey Brodkin 提交于
      Currently we're getting IRQs after lots of resources are already
      allocated:
       * netdev
       * clocks
       * MDIO bus
      Also HW gets initialized by the time when checking IRQs as well.
      
      Now there's a possibility for master interrupt controller to be not
      probed yet. This will lead to exit from GMAC probe routine with "-
      EPROBE_DEFER" and so deferred probe will hapen later on.
      
      But since we exited the first GMAC probe without release of all
      allocated resources there could be conflicts on subsequent probes.
      
      For example this is what happens for me:
       --->8---
       stmmaceth e0018000.ethernet: no reset control found
       stmmac - user ID: 0x10, Synopsys ID: 0x37
        Ring mode enabled
        DMA HW capability register supported
        Normal descriptors
        RX Checksum Offload Engine supported (type 2)
        TX Checksum insertion supported
        Enable RX Mitigation via HW Watchdog Timer
       libphy: stmmac: probed
       eth0: PHY ID 20005c7a at 1 IRQ POLL (stmmac-0:01) active
       platform e0018000.ethernet: Driver stmmaceth requests probe deferral
       ...
       ...
       ...
       stmmaceth e0018000.ethernet: no reset control found
       stmmac - user ID: 0x10, Synopsys ID: 0x37
        Ring mode enabled
        DMA HW capability register supported
        Normal descriptors
        RX Checksum Offload Engine supported (type 2)
        TX Checksum insertion supported
        Enable RX Mitigation via HW Watchdog Timer
       ------------[ cut here ]------------
       WARNING: CPU: 0 PID: 6 at fs/sysfs/dir.c:31 sysfs_warn_dup+0x4e/0x68()
       sysfs: cannot create duplicate filename
      '/devices/platform/axs10x_mb/e0018000.ethernet/mdio_bus/stmmac-0'
       CPU: 0 PID: 6 Comm: kworker/u2:0 Not tainted 4.0.0-rc1-next-20150303+#8
       Workqueue: deferwq deferred_probe_work_func
      
       Stack Trace:
        arc_unwind_core+0xb8/0x114
        warn_slowpath_common+0x5a/0x8c
        warn_slowpath_fmt+0x2e/0x38
        sysfs_warn_dup+0x4e/0x68
        sysfs_create_dir_ns+0x98/0xa0
        kobject_add_internal+0x8c/0x2e8
        kobject_add+0x4a/0x8c
        device_add+0xc6/0x448
        mdiobus_register+0x6c/0x164
        stmmac_mdio_register+0x112/0x264
        stmmac_dvr_probe+0x6c0/0x85c
        stmmac_pltfr_probe+0x2e4/0x50c
        platform_drv_probe+0x26/0x5c
        really_probe+0x76/0x1dc
        bus_for_each_drv+0x42/0x7c
        device_attach+0x64/0x6c
        bus_probe_device+0x74/0xa4
        deferred_probe_work_func+0x50/0x84
        process_one_work+0xf8/0x2cc
        worker_thread+0x110/0x478
        kthread+0x8a/0x9c
        ret_from_fork+0x14/0x18
       ---[ end trace a2dfaa7d630c8be1 ]---
       ------------[ cut here ]------------
       WARNING: CPU: 0 PID: 6 at lib/kobject.c:240
      kobject_add_internal+0x218/0x2e8()
       kobject_add_internal failed for stmmac-0 with -EEXIST, don't try to
      register things with the same name in the same di.
       CPU: 0 PID: 6 Comm: kworker/u2:0 Tainted: G        W
      4.0.0-rc1-next-20150303+ #8
       Workqueue: deferwq deferred_probe_work_func
      
       Stack Trace:
        arc_unwind_core+0xb8/0x114
        warn_slowpath_common+0x5a/0x8c
        warn_slowpath_fmt+0x2e/0x38
        kobject_add_internal+0x218/0x2e8
        kobject_add+0x4a/0x8c
        device_add+0xc6/0x448
        mdiobus_register+0x6c/0x164
        stmmac_mdio_register+0x112/0x264
        stmmac_dvr_probe+0x6c0/0x85c
        stmmac_pltfr_probe+0x2e4/0x50c
        platform_drv_probe+0x26/0x5c
        really_probe+0x76/0x1dc
        bus_for_each_drv+0x42/0x7c
        device_attach+0x64/0x6c
        bus_probe_device+0x74/0xa4
        deferred_probe_work_func+0x50/0x84
        process_one_work+0xf8/0x2cc
        worker_thread+0x110/0x478
        kthread+0x8a/0x9c
        ret_from_fork+0x14/0x18
       ---[ end trace a2dfaa7d630c8be2 ]---
       libphy: mii_bus stmmac-0 failed to register
       : Cannot register as MDIO bus
       stmmac_pltfr_probe: main driver probe failed
       stmmaceth: probe of e0018000.ethernet failed with error -22
       --->8---
      
      Essential fix is to check for IRQs availability as early as possible and
      then safely go to deferred probe if IRQs are not there yet.
      Signed-off-by: NAlexey Brodkin <abrodkin@synopsys.com>
      Cc: Vineet Gupta <vgupta@synopsys.com>
      Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
      Cc: Giuseppe Cavallaro <peppe.cavallaro@st.com>
      Cc: Sonic Zhang <sonic.zhang@analog.com>
      Cc: David S. Miller <davem@davemloft.net>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      8f02d8da
    • L
      Merge tag 'dma-buf-for-4.0-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/sumits/dma-buf · 6587457b
      Linus Torvalds 提交于
      Pull dma-buf fixes from Sumit Semwal:
       "Minor timeout & other fixes on reservation/fence"
      
      * tag 'dma-buf-for-4.0-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/sumits/dma-buf:
        reservation: Remove shadowing local variable 'ret'
        dma-buf/fence: don't wait when specified timeout is zero
        reservation: wait only with non-zero timeout specified (v3)
      6587457b
    • L
      Merge git://git.kernel.org/pub/scm/virt/kvm/kvm · b8e81a3b
      Linus Torvalds 提交于
      Pull KVM fixes from Marcelo Tosatti:
       "KVM bug fixes, including a SVM interrupt injection regression fix,
        MIPS and ARM bug fixes"
      
      * git://git.kernel.org/pub/scm/virt/kvm/kvm:
        KVM: MIPS: Enable after disabling interrupt
        KVM: MIPS: Fix trace event to save PC directly
        KVM: SVM: fix interrupt injection (apic->isr_count always 0)
        KVM: emulate: fix CMPXCHG8B on 32-bit hosts
        KVM: VMX: fix build without CONFIG_SMP
        arm/arm64: KVM: Add exit reaons to kvm_exit event tracing
        ARM: KVM: Fix size check in __coherent_cache_guest_page
      b8e81a3b
    • P
      netfilter: nf_tables: fix error handling of rule replacement · 59900e0a
      Pablo Neira Ayuso 提交于
      In general, if a transaction object is added to the list successfully,
      we can rely on the abort path to undo what we've done. This allows us to
      simplify the error handling of the rule replacement path in
      nf_tables_newrule().
      
      This implicitly fixes an unnecessary removal of the old rule, which
      needs to be left in place if we fail to replace.
      Signed-off-by: NPablo Neira Ayuso <pablo@netfilter.org>
      59900e0a
    • P
      netfilter: nf_tables: fix userdata length overflow · 86f1ec32
      Patrick McHardy 提交于
      The NFT_USERDATA_MAXLEN is defined to 256, however we only have a u8
      to store its size. Introduce a struct nft_userdata which contains a
      length field and indicate its presence using a single bit in the rule.
      
      The length field of struct nft_userdata is also a u8, however we don't
      store zero sized data, so the actual length is udata->len + 1.
      Signed-off-by: NPatrick McHardy <kaber@trash.net>
      Signed-off-by: NPablo Neira Ayuso <pablo@netfilter.org>
      86f1ec32
    • P
      netfilter: nf_tables: check for overflow of rule dlen field · 9889840f
      Patrick McHardy 提交于
      Check that the space required for the expressions doesn't exceed the
      size of the dlen field, which would lead to the iterators crashing.
      Signed-off-by: NPatrick McHardy <kaber@trash.net>
      Signed-off-by: NPablo Neira Ayuso <pablo@netfilter.org>
      9889840f
    • P
      netfilter: nf_tables: fix transaction race condition · 8670c3a5
      Patrick McHardy 提交于
      A race condition exists in the rule transaction code for rules that
      get added and removed within the same transaction.
      
      The new rule starts out as inactive in the current and active in the
      next generation and is inserted into the ruleset. When it is deleted,
      it is additionally set to inactive in the next generation as well.
      
      On commit the next generation is begun, then the actions are finalized.
      For the new rule this would mean clearing out the inactive bit for
      the previously current, now next generation.
      
      However nft_rule_clear() clears out the bits for *both* generations,
      activating the rule in the current generation, where it should be
      deactivated due to being deleted. The rule will thus be active until
      the deletion is finalized, removing the rule from the ruleset.
      
      Similarly, when aborting a transaction for the same case, the undo
      of insertion will remove it from the RCU protected rule list, the
      deletion will clear out all bits. However until the next RCU
      synchronization after all operations have been undone, the rule is
      active on CPUs which can still see the rule on the list.
      
      Generally, there may never be any modifications of the current
      generations' inactive bit since this defeats the entire purpose of
      atomicity. Change nft_rule_clear() to only touch the next generations
      bit to fix this.
      Signed-off-by: NPatrick McHardy <kaber@trash.net>
      Signed-off-by: NPablo Neira Ayuso <pablo@netfilter.org>
      8670c3a5
    • L
      Merge tag 'arc-4.0-fixes-1' of git://git.kernel.org/pub/scm/linux/kernel/git/vgupta/arc · f2cb4777
      Linus Torvalds 提交于
      Pull ARC fixes from Vineet Gupta:
       - Fix for /proc/<pid>/maps "stack" vma annotation
       - sched stats not printing correct sleeping task PC
       - perf not reporting page faults
      
      * tag 'arc-4.0-fixes-1' of git://git.kernel.org/pub/scm/linux/kernel/git/vgupta/arc:
        ARC: Fix thread_saved_pc()
        ARC: Fix KSTK_ESP()
        ARC: perf: Enable generic software events
        ARC: Make arc_unwind_core accessible externally
      f2cb4777
    • L
      Merge tag 'powerpc-4.0-2' of git://git.kernel.org/pub/scm/linux/kernel/git/mpe/linux · 97754e3c
      Linus Torvalds 提交于
      Pull powerpc fixes from Michael Ellerman:
       - Fix for dynticks.
       - Fix for smpboot bug.
       - Fix for IOMMU group refcounting.
      
      * tag 'powerpc-4.0-2' of git://git.kernel.org/pub/scm/linux/kernel/git/mpe/linux:
        powerpc/iommu: Remove IOMMU device references via bus notifier
        powerpc/smp: Wait until secondaries are active & online
        powerpc: Re-enable dynticks
      97754e3c
  4. 04 3月, 2015 3 次提交
    • N
      powerpc/iommu: Remove IOMMU device references via bus notifier · 4ad04e59
      Nishanth Aravamudan 提交于
      After d905c5df ("PPC: POWERNV: move iommu_add_device earlier"), the
      refcnt on the kobject backing the IOMMU group for a PCI device is
      elevated by each call to pci_dma_dev_setup_pSeriesLP() (via
      set_iommu_table_base_and_group). When we go to dlpar a multi-function
      PCI device out:
      
              iommu_reconfig_notifier ->
                      iommu_free_table ->
                              iommu_group_put
                              BUG_ON(tbl->it_group)
      
      We trip this BUG_ON, because there are still references on the table, so
      it is not freed. Fix this by moving the powernv bus notifier to common
      code and calling it for both powernv and pseries.
      
      Fixes: d905c5df ("PPC: POWERNV: move iommu_add_device earlier")
      Signed-off-by: NNishanth Aravamudan <nacc@linux.vnet.ibm.com>
      Tested-by: NNishanth Aravamudan <nacc@linux.vnet.ibm.com>
      Signed-off-by: NMichael Ellerman <mpe@ellerman.id.au>
      4ad04e59
    • M
      powerpc/smp: Wait until secondaries are active & online · 875ebe94
      Michael Ellerman 提交于
      Anton has a busy ppc64le KVM box where guests sometimes hit the infamous
      "kernel BUG at kernel/smpboot.c:134!" issue during boot:
      
        BUG_ON(td->cpu != smp_processor_id());
      
      Basically a per CPU hotplug thread scheduled on the wrong CPU. The oops
      output confirms it:
      
        CPU: 0
        Comm: watchdog/130
      
      The problem is that we aren't ensuring the CPU active bit is set for the
      secondary before allowing the master to continue on. The master unparks
      the secondary CPU's kthreads and the scheduler looks for a CPU to run
      on. It calls select_task_rq() and realises the suggested CPU is not in
      the cpus_allowed mask. It then ends up in select_fallback_rq(), and
      since the active bit isnt't set we choose some other CPU to run on.
      
      This seems to have been introduced by 6acbfb96 "sched: Fix hotplug
      vs. set_cpus_allowed_ptr()", which changed from setting active before
      online to setting active after online. However that was in turn fixing a
      bug where other code assumed an active CPU was also online, so we can't
      just revert that fix.
      
      The simplest fix is just to spin waiting for both active & online to be
      set. We already have a barrier prior to set_cpu_online() (which also
      sets active), to ensure all other setup is completed before online &
      active are set.
      
      Fixes: 6acbfb96 ("sched: Fix hotplug vs. set_cpus_allowed_ptr()")
      Signed-off-by: NMichael Ellerman <mpe@ellerman.id.au>
      Signed-off-by: NAnton Blanchard <anton@samba.org>
      Signed-off-by: NMichael Ellerman <mpe@ellerman.id.au>
      875ebe94
    • L
      Merge branch 'for-4.0' of git://linux-nfs.org/~bfields/linux · a6c5170d
      Linus Torvalds 提交于
      Pull nfsd fixes from Bruce Fields:
       "Three miscellaneous bugfixes, most importantly the clp->cl_revoked
        bug, which we've seen several reports of people hitting"
      
      * 'for-4.0' of git://linux-nfs.org/~bfields/linux:
        sunrpc: integer underflow in rsc_parse()
        nfsd: fix clp->cl_revoked list deletion causing softlock in nfsd
        svcrpc: fix memory leak in gssp_accept_sec_context_upcall
      a6c5170d