16 Oct, 2014

3 commits

  • iMX6SX IEEE 1588 module has one hw issue in capturing the ATVR register.
    The current SW flow is:
    ENET0->ATCR |= ENET_ATCR_CAPTURE_MASK;
    ts_counter_ns = ENET0->ATVR;
    The ATVR value is not expected value that cause LinuxPTP stack cannot be convergent.

    ENET Block Guide/ Chapter for the iMX6SX (PELE) address the issue:
    After set ENET_ATCR[Capture], there need some time cycles before the counter
    value is capture in the register clock domain. The wait-time-cycles is at least
    6 clock cycles of the slower clock between the register clock and the 1588 clock.
    So need something like:
    ENET0->ATCR |= ENET_ATCR_CAPTURE_MASK;
    wait();
    ts_counter_ns = ENET0->ATVR;

    For iMX6SX, the 1588 ts_clk is fixed to 25Mhz, register clock is 66Mhz, so the
    wait-time-cycles must be greater than 240ns (40ns * 6). The patch add 1us delay
    before cpu read ATVR register.

    Changes V2:
    Modify the commit/comments log to describe the issue clearly.

    Signed-off-by: Fugang Duan
    Acked-by: Richard Cochran
    Signed-off-by: David S. Miller

    Nimrod Andy
     
  • Identified by kbuild test robot. csk family is always set to be AF_INET or
    AF_INET6, so skb will always be initialized to some value but there is no harm
    in silencing the warning anyways.

    Signed-off-by: Anish Bhatt
    Fixes : f42bb57c61fd ('cxgb4i : Fix -Wunused-function warning')
    Signed-off-by: David S. Miller

    Anish Bhatt
     
  • Add ndo_gso_check which a device can define to indicate whether is
    is capable of doing GSO on a packet. This funciton would be called from
    the stack to determine whether software GSO is needed to be done. A
    driver should populate this function if it advertises GSO types for
    which there are combinations that it wouldn't be able to handle. For
    instance a device that performs UDP tunneling might only implement
    support for transparent Ethernet bridging type of inner packets
    or might have limitations on lengths of inner headers.

    Signed-off-by: Tom Herbert
    Signed-off-by: David S. Miller

    Tom Herbert
     

15 Oct, 2014

37 commits

  • this patch is to fix the stmmac data compatibilities for
    all the SoCs inside the platform file.

    Reported-by: Stephen Rothwell
    Signed-off-by: Giuseppe Cavallaro
    Signed-off-by: David S. Miller

    Giuseppe CAVALLARO
     
  • Anish Bhatt says:

    ====================
    ipv6 and related cleanup for cxgb4/cxgb4i

    This patch set removes some duplicated/extraneous code from cxgb4i, guards
    cxgb4 against compilation failure based on ipv6 tristate, make ipv6 related
    code no longer be enabled by default irrespective of ipv6 tristate and fixes
    a refcnt issue.
    -Anish

    v2 : Provide more detailed commit messages, make subject more concise as
    recommended by Dave Miller.
    ====================

    Signed-off-by: David S. Miller

    David S. Miller
     
  • There is an extra call to dst_neigh_lookup() leftover in cxgb4i that can cause
    an unreleased refcnt issue. Remove extraneous call.

    Signed-off-by: Anish Bhatt

    Fixes : 759a0cc5a3e1b ('cxgb4i: Add ipv6 code to driver, call into libcxgbi ipv6 api')
    Signed-off-by: David S. Miller

    Anish Bhatt
     
  • A bunch of ipv6 related code is left on by default. While this causes no
    compilation issues, there is no need to have this enabled by default. Guard
    with an ipv6 check, which also takes care of a -Wunused-function warning.

    Signed-off-by: Anish Bhatt
    Signed-off-by: David S. Miller

    Anish Bhatt
     
  • cxgb4 ipv6 does not guard against ipv6 being disabled, or the standard
    ipv6 module vs inbuilt tri-state issue. This was fixed for cxgb4i & iw_cxgb4
    but missed for cxgb4.

    Signed-off-by: Anish Bhatt
    Signed-off-by: David S. Miller

    Anish Bhatt
     
  • cxgb4 already handles CLIP updates from a previous changeset for iw_cxgb4,
    there is no need to have this functionality in cxgb4i. Remove duplicated code

    Signed-off-by: Anish Bhatt
    Signed-off-by: David S. Miller

    Anish Bhatt
     
  • TCP Small queues tries to keep number of packets in qdisc
    as small as possible, and depends on a tasklet to feed following
    packets at TX completion time.
    Choice of tasklet was driven by latencies requirements.

    Then, TCP stack tries to avoid reorders, by locking flows with
    outstanding packets in qdisc in a given TX queue.

    What can happen is that many flows get attracted by a low performing
    TX queue, and cpu servicing TX completion has to feed packets for all of
    them, making this cpu 100% busy in softirq mode.

    This became particularly visible with latest skb->xmit_more support

    Strategy adopted in this patch is to detect when tcp_wfree() is called
    from ksoftirqd and let the outstanding queue for this flow being drained
    before feeding additional packets, so that skb->ooo_okay can be set
    to allow select_queue() to select the optimal queue :

    Incoming ACKS are normally handled by different cpus, so this patch
    gives more chance for these cpus to take over the burden of feeding
    qdisc with future packets.

    Tested:

    lpaa23:~# ./super_netperf 1400 --google-pacing-rate 3028000 -H lpaa24 -l 3600 &

    lpaa23:~# sar -n DEV 1 10 | grep eth1
    06:16:18 AM eth1 595448.00 1190564.00 38381.09 1760253.12 0.00 0.00 1.00
    06:16:19 AM eth1 594858.00 1189686.00 38340.76 1758952.72 0.00 0.00 0.00
    06:16:20 AM eth1 597017.00 1194019.00 38480.79 1765370.29 0.00 0.00 1.00
    06:16:21 AM eth1 595450.00 1190936.00 38380.19 1760805.05 0.00 0.00 0.00
    06:16:22 AM eth1 596385.00 1193096.00 38442.56 1763976.29 0.00 0.00 1.00
    06:16:23 AM eth1 598155.00 1195978.00 38552.97 1768264.60 0.00 0.00 0.00
    06:16:24 AM eth1 594405.00 1188643.00 38312.57 1757414.89 0.00 0.00 1.00
    06:16:25 AM eth1 593366.00 1187154.00 38252.16 1755195.83 0.00 0.00 0.00
    06:16:26 AM eth1 593188.00 1186118.00 38232.88 1753682.57 0.00 0.00 1.00
    06:16:27 AM eth1 596301.00 1192241.00 38440.94 1762733.09 0.00 0.00 0.00
    Average: eth1 595457.30 1190843.50 38381.69 1760664.84 0.00 0.00 0.50
    lpaa23:~# ./tc -s -d qd sh dev eth1 | grep backlog
    backlog 7606336b 2513p requeues 167982
    backlog 224072b 74p requeues 566
    backlog 581376b 192p requeues 5598
    backlog 181680b 60p requeues 1070
    backlog 5305056b 1753p requeues 110166 // Here, this TX queue is attracting flows
    backlog 157456b 52p requeues 1758
    backlog 672216b 222p requeues 3025
    backlog 60560b 20p requeues 24541
    backlog 448144b 148p requeues 21258

    lpaa23:~# echo 1 >/proc/sys/net/ipv4/tcp_tsq_enable_tcp_wfree_ksoftirqd_detect

    Immediate jump to full bandwidth, and traffic is properly
    shard on all tx queues.

    lpaa23:~# sar -n DEV 1 10 | grep eth1
    06:16:46 AM eth1 1397632.00 2795397.00 90081.87 4133031.26 0.00 0.00 1.00
    06:16:47 AM eth1 1396874.00 2793614.00 90032.99 4130385.46 0.00 0.00 0.00
    06:16:48 AM eth1 1395842.00 2791600.00 89966.46 4127409.67 0.00 0.00 1.00
    06:16:49 AM eth1 1395528.00 2791017.00 89946.17 4126551.24 0.00 0.00 0.00
    06:16:50 AM eth1 1397891.00 2795716.00 90098.74 4133497.39 0.00 0.00 1.00
    06:16:51 AM eth1 1394951.00 2789984.00 89908.96 4125022.51 0.00 0.00 0.00
    06:16:52 AM eth1 1394608.00 2789190.00 89886.90 4123851.36 0.00 0.00 1.00
    06:16:53 AM eth1 1395314.00 2790653.00 89934.33 4125983.09 0.00 0.00 0.00
    06:16:54 AM eth1 1396115.00 2792276.00 89984.25 4128411.21 0.00 0.00 1.00
    06:16:55 AM eth1 1396829.00 2793523.00 90030.19 4130250.28 0.00 0.00 0.00
    Average: eth1 1396158.40 2792297.00 89987.09 4128439.35 0.00 0.00 0.50

    lpaa23:~# tc -s -d qd sh dev eth1 | grep backlog
    backlog 7900052b 2609p requeues 173287
    backlog 878120b 290p requeues 589
    backlog 1068884b 354p requeues 5621
    backlog 996212b 329p requeues 1088
    backlog 984100b 325p requeues 115316
    backlog 956848b 316p requeues 1781
    backlog 1080996b 357p requeues 3047
    backlog 975016b 322p requeues 24571
    backlog 990156b 327p requeues 21274

    (All 8 TX queues get a fair share of the traffic)

    Signed-off-by: Eric Dumazet
    Signed-off-by: David S. Miller

    Eric Dumazet
     
  • Rajesh Borundia says:

    ====================
    qlcnic: Bug fixes

    This series fixes following issues.

    * We were programming maximum number of arguments supported by
    adapter instead of required in a command.
    * Destroy tx command requires three arguments instead of two.

    Please apply these patches to net.
    ====================

    Signed-off-by: David S. Miller

    David S. Miller
     
  • o Number of arguments taken by destroy tx command is three
    instead of two.

    Signed-off-by: Rajesh Borundia
    Signed-off-by: David S. Miller

    Rajesh Borundia
     
  • o Initially we were programming maximum number of arguments.
    Instead we should program number of arguments required in
    a command.
    o Maximum number of arguments for 82xx adapter is four. Fix it
    for GET_ESWITCH_STATS command.

    Signed-off-by: Rajesh Borundia
    Signed-off-by: David S. Miller

    Rajesh Borundia
     
  • Resolve "logical 'and' applied to non-boolean constant" warnings"
    that appear in W=2 builds by adding !! to a bit test.

    Signed-off-by: Mark Rustad
    Signed-off-by: Jeff Kirsher
    Signed-off-by: David S. Miller

    Mark Rustad
     
  • Unlike normal kfree() it is never right to call sock_kfree_s() with
    a NULL pointer, because sock_kfree_s() also has the side effect of
    discharging the memory from the sockets quota.

    Signed-off-by: David S. Miller

    David S. Miller
     
  • It is okay to free a NULL pointer but not okay to mischarge the socket optmem
    accounting. Compile test only.

    Reported-by: rucsoftsec@gmail.com
    Cc: Chien Yen
    Cc: Stephen Hemminger
    Signed-off-by: Cong Wang
    Signed-off-by: Cong Wang
    Signed-off-by: David S. Miller

    Cong Wang
     
  • Use t4_fw_upgrade instead of t4_load_fw to write firmware into FLASH, since
    t4_load_fw doesn't co-ordinate with the firmware and the adapter can get hosed
    enough to require a power cycle of the system.

    Based on original work by Casey Leedom

    Signed-off-by: Hariprasad Shenai
    Signed-off-by: David S. Miller

    Hariprasad Shenai
     
  • Giuseppe Cavallaro says:

    ====================
    stmmac: review and fix the dwmac-sti glue-logic

    This patch is to review the whole glue logic adopted on STi SoCs that
    was bugged.
    In the old glue-logic there was a lot of confusion when setup the
    retiming especially for STiD127 where, for example, the bits 6 and 7
    (in the GMAC control register) have a different meaning of what is
    used for STiH4xx SoCs. So we cannot adopt the same glue for all these
    SoCs.
    Moreover, GiGa on STiD127 didn't work and, for all the SoCs, the RGMII
    couldn't run when the speed was 10Mbps (because the clock was not properly
    managed).
    Note that the phy clock needs to be provided by the platform as well as
    documented in the related binding file (updated as consequence).

    The old code supported too many configurations never adopted and validated.
    This made the code very complex to maintain and debug in case of issues.

    The patch simplifies all the configurations as commented in the tables
    inside the file and obviously it has been tested on all the boards
    based on the SoCs mentioned.

    With this patch, the dwmac-sti is also ready to support new configurations that
    will be available on next SoC generations.
    ====================

    Signed-off-by: David S. Miller

    David S. Miller
     
  • This patch is to review the whole glue logic adopted on STi SoCs that
    was bugged.

    In the old glue-logic there was a lot of confusion when setup the
    retiming especially for STiD127 where, for example, the bits 6 and 7
    (in the GMAC control register) have a different meaning of what is
    used for STiH4xx SoCs. So we cannot adopt the same glue for all these
    SoCs.
    Moreover, GiGa on STiD127 didn't work and, for all the SoCs, the RGMII
    couldn't run when the speed was 10Mbps (because the clock was not properly
    managed).
    Note that the phy clock needs to be provided by the platform as well as
    documented in the related binding file (updated as consequence).

    The old code supported too many configurations never adopted and validated.
    This made the code very complex to maintain and debug in case of issues.

    The patch simplifies all the configurations as commented in the tables
    inside the file and obviously it has been tested on all the boards
    based on the SoCs mentioned.

    With this patch, the dwmac-sti is also ready to support new configurations that
    will be available on next SoC generations.

    Signed-off-by: Giuseppe Cavallaro
    Cc: Srinivas Kandagatla
    Signed-off-by: David S. Miller

    Giuseppe CAVALLARO
     
  • This adds the missing compatibility to the STiH407 SoC.

    Signed-off-by: Giuseppe Cavallaro
    Signed-off-by: David S. Miller

    Giuseppe CAVALLARO
     
  • On several STi platforms: e.g. stihxxx-b2120 an Ethernet switch is
    embedded and connected to the stmmac via RGMII mode. So this is managed
    by using the FIXED_PHY. In that case, the support in the platform needs
    to be fixed to allow the stmmac to dialog with the switch via fixed-link
    by using phy_bus_name property.

    Signed-off-by: Giuseppe Cavallaro
    Signed-off-by: David S. Miller

    Giuseppe CAVALLARO
     
  • tag_protocol is now an enum, so drivers have to check against it.

    Cc: Andrew Lunn
    Signed-off-by: Guenter Roeck
    Acked-by: Florian Fainelli
    Acked-by: Andrew Lunn
    Signed-off-by: David S. Miller

    Guenter Roeck
     
  • Iyappan Subramanian says:

    ====================
    Adding SGMII based 1GbE basic support to APM X-Gene SoC ethernet driver.

    v2: Address comments from v1
    * Split the patchset into two, the first one being preparatory patch
    * Added link_state function pointer to the xgene_mac_ops structure
    * Added xgene_indirect_ctl structure for indirect read/write arguments

    v1:
    * Initial version
    ====================

    Signed-off-by: David S. Miller

    David S. Miller
     
  • Signed-off-by: Iyappan Subramanian
    Signed-off-by: Keyur Chudgar
    Signed-off-by: David S. Miller

    Iyappan Subramanian
     
  • Signed-off-by: Iyappan Subramanian
    Signed-off-by: Keyur Chudgar
    Signed-off-by: David S. Miller

    Iyappan Subramanian
     
  • - Added link_state function pointer to the xgene__mac_ops structure
    - Moved ring manager (pdata->rm) assignment to xgene_enet_setup_ops
    - Removed unused variable (pdata->phy_addr) and macro (FULL_DUPLEX)

    Signed-off-by: Iyappan Subramanian
    Signed-off-by: Keyur Chudgar
    Signed-off-by: David S. Miller

    Iyappan Subramanian
     
  • Signed-off-by: Iyappan Subramanian
    Signed-off-by: Keyur Chudgar
    Signed-off-by: David S. Miller

    Iyappan Subramanian
     
  • userspace programs that use eBPF instruction macros need to include two files:
    uapi/linux/filter.h and uapi/linux/bpf.h
    Move common macro definitions that are shared between classic BPF and eBPF
    into uapi/linux/bpf_common.h, so that user app can include only one bpf.h file

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

    Alexei Starovoitov
     
  • parent cfusbl was used instead of first structure member 'layer'

    Suggested-by: Joe Perches
    Signed-off-by: Fabian Frederick
    Signed-off-by: David S. Miller

    Fabian Frederick
     
  • Let MM subsystem display out of memory messages.

    Signed-off-by: Fabian Frederick
    Signed-off-by: David S. Miller

    Fabian Frederick
     
  • Also add blank line after declaration

    Signed-off-by: Fabian Frederick
    Signed-off-by: David S. Miller

    Fabian Frederick
     
  • remove all the child devices from the system to make sure that re-insert of
    cpsw module doesn't fail on child device populated by of_platform_populate().

    Signed-off-by: Mugunthan V N
    Signed-off-by: David S. Miller

    Mugunthan V N
     
  • remove spinlock in cpdma_desc_pool_destroy() as there is no active cpdma
    channel and iounmap should be called without auquiring lock.

    root@dra7xx-evm:~# modprobe -r ti_cpsw
    [ 50.539743]
    [ 50.541312] ======================================================
    [ 50.547796] [ INFO: SOFTIRQ-safe -> SOFTIRQ-unsafe lock order detected ]
    [ 50.554826] 3.14.19-02124-g95c5b7b #308 Not tainted
    [ 50.559939] ------------------------------------------------------
    [ 50.566416] modprobe/1921 [HC0[0]:SC0[0]:HE0:SE1] is trying to acquire:
    [ 50.573347] (vmap_area_lock){+.+...}, at: [] find_vmap_area+0x10/0x6c
    [ 50.581132]
    [ 50.581132] and this task is already holding:
    [ 50.587249] (&(&pool->lock)->rlock#2){..-...}, at: [] cpdma_ctlr_destroy+0x5c/0x114 [davinci_cpdma]
    [ 50.597766] which would create a new lock dependency:
    [ 50.603048] (&(&pool->lock)->rlock#2){..-...} -> (vmap_area_lock){+.+...}
    [ 50.610296]
    [ 50.610296] but this new dependency connects a SOFTIRQ-irq-safe lock:
    [ 50.618601] (&(&pool->lock)->rlock#2){..-...}
    ... which became SOFTIRQ-irq-safe at:
    [ 50.626829] [] _raw_spin_lock_irqsave+0x38/0x4c
    [ 50.632677] [] cpdma_desc_free.constprop.7+0x28/0x58 [davinci_cpdma]
    [ 50.640437] [] __cpdma_chan_free+0x7c/0xa8 [davinci_cpdma]
    [ 50.647289] [] __cpdma_chan_process+0xf4/0x134 [davinci_cpdma]
    [ 50.654512] [] cpdma_chan_process+0x3c/0x54 [davinci_cpdma]
    [ 50.661455] [] cpsw_poll+0x14/0xa8 [ti_cpsw]
    [ 50.667038] [] net_rx_action+0xc0/0x1e8
    [ 50.672150] [] __do_softirq+0xcc/0x304
    [ 50.677183] [] irq_exit+0xa8/0xfc
    [ 50.681751] [] handle_IRQ+0x50/0xb0
    [ 50.686513] [] gic_handle_irq+0x28/0x5c
    [ 50.691628] [] __irq_svc+0x44/0x5c
    [ 50.696289] [] _raw_spin_unlock_irqrestore+0x34/0x44
    [ 50.702591] [] do_page_fault.part.9+0x144/0x3c4
    [ 50.708433] [] do_page_fault+0x74/0x84
    [ 50.713453] [] do_DataAbort+0x34/0x98
    [ 50.718391] [] __dabt_usr+0x3c/0x40
    [ 50.723148]
    [ 50.723148] to a SOFTIRQ-irq-unsafe lock:
    [ 50.728893] (vmap_area_lock){+.+...}
    ... which became SOFTIRQ-irq-unsafe at:
    [ 50.736476] ... [] _raw_spin_lock+0x28/0x38
    [ 50.741876] [] alloc_vmap_area.isra.28+0xb8/0x300
    [ 50.747908] [] __get_vm_area_node.isra.29+0x90/0x134
    [ 50.754210] [] get_vm_area_caller+0x3c/0x48
    [ 50.759692] [] vmap+0x40/0x78
    [ 50.763900] [] check_writebuffer_bugs+0x54/0x1a0
    [ 50.769835] [] start_kernel+0x320/0x388
    [ 50.774952] [] 0x80008074
    [ 50.778793]
    [ 50.778793] other info that might help us debug this:
    [ 50.778793]
    [ 50.787181] Possible interrupt unsafe locking scenario:
    [ 50.787181]
    [ 50.794295] CPU0 CPU1
    [ 50.799042] ---- ----
    [ 50.803785] lock(vmap_area_lock);
    [ 50.807446] local_irq_disable();
    [ 50.813652] lock(&(&pool->lock)->rlock#2);
    [ 50.820782] lock(vmap_area_lock);
    [ 50.827086]
    [ 50.829823] lock(&(&pool->lock)->rlock#2);
    [ 50.834490]
    [ 50.834490] *** DEADLOCK ***
    [ 50.834490]
    [ 50.840695] 4 locks held by modprobe/1921:
    [ 50.844981] #0: (&__lockdep_no_validate__){......}, at: [] driver_detach+0x44/0xb8
    [ 50.854038] #1: (&__lockdep_no_validate__){......}, at: [] driver_detach+0x50/0xb8
    [ 50.863102] #2: (&(&ctlr->lock)->rlock){......}, at: [] cpdma_ctlr_destroy+0x1c/0x114 [davinci_cpdma]
    [ 50.873890] #3: (&(&pool->lock)->rlock#2){..-...}, at: [] cpdma_ctlr_destroy+0x5c/0x114 [davinci_cpdma]
    [ 50.884871]
    the dependencies between SOFTIRQ-irq-safe lock and the holding lock:
    [ 50.892827] -> (&(&pool->lock)->rlock#2){..-...} ops: 167 {
    [ 50.898703] IN-SOFTIRQ-W at:
    [ 50.901995] [] _raw_spin_lock_irqsave+0x38/0x4c
    [ 50.909476] [] cpdma_desc_free.constprop.7+0x28/0x58 [davinci_cpdma]
    [ 50.918878] [] __cpdma_chan_free+0x7c/0xa8 [davinci_cpdma]
    [ 50.927366] [] __cpdma_chan_process+0xf4/0x134 [davinci_cpdma]
    [ 50.936218] [] cpdma_chan_process+0x3c/0x54 [davinci_cpdma]
    [ 50.944794] [] cpsw_poll+0x14/0xa8 [ti_cpsw]
    [ 50.952009] [] net_rx_action+0xc0/0x1e8
    [ 50.958765] [] __do_softirq+0xcc/0x304
    [ 50.965432] [] irq_exit+0xa8/0xfc
    [ 50.971635] [] handle_IRQ+0x50/0xb0
    [ 50.978035] [] gic_handle_irq+0x28/0x5c
    [ 50.984788] [] __irq_svc+0x44/0x5c
    [ 50.991085] [] _raw_spin_unlock_irqrestore+0x34/0x44
    [ 50.999023] [] do_page_fault.part.9+0x144/0x3c4
    [ 51.006510] [] do_page_fault+0x74/0x84
    [ 51.013171] [] do_DataAbort+0x34/0x98
    [ 51.019738] [] __dabt_usr+0x3c/0x40
    [ 51.026129] INITIAL USE at:
    [ 51.029335] [] _raw_spin_lock_irqsave+0x38/0x4c
    [ 51.036729] [] cpdma_chan_submit+0x4c/0x2f0 [davinci_cpdma]
    [ 51.045225] [] cpsw_ndo_open+0x378/0x6bc [ti_cpsw]
    [ 51.052897] [] __dev_open+0x9c/0x104
    [ 51.059287] [] __dev_change_flags+0x88/0x160
    [ 51.066420] [] dev_change_flags+0x18/0x48
    [ 51.073270] [] devinet_ioctl+0x61c/0x6e0
    [ 51.080029] [] sock_ioctl+0x5c/0x298
    [ 51.086418] [] do_vfs_ioctl+0x78/0x61c
    [ 51.092993] [] SyS_ioctl+0x64/0x74
    [ 51.099200] [] ret_fast_syscall+0x0/0x48
    [ 51.105956] }
    [ 51.107696] ... key at: [] __key.21312+0x0/0xfffff650 [davinci_cpdma]
    [ 51.115912] ... acquired at:
    [ 51.119019] [] lock_acquire+0x9c/0x104
    [ 51.124138] [] _raw_spin_lock+0x28/0x38
    [ 51.129341] [] find_vmap_area+0x10/0x6c
    [ 51.134547] [] remove_vm_area+0x8/0x6c
    [ 51.139659] [] __vunmap+0x20/0xf8
    [ 51.144318] [] __arm_iounmap+0x10/0x18
    [ 51.149440] [] cpdma_ctlr_destroy+0xf0/0x114 [davinci_cpdma]
    [ 51.156560] [] cpsw_remove+0x48/0x8c [ti_cpsw]
    [ 51.162407] [] platform_drv_remove+0x18/0x1c
    [ 51.168063] [] __device_release_driver+0x70/0xc8
    [ 51.174094] [] driver_detach+0xb4/0xb8
    [ 51.179212] [] bus_remove_driver+0x4c/0x90
    [ 51.184693] [] SyS_delete_module+0x10c/0x198
    [ 51.190355] [] ret_fast_syscall+0x0/0x48
    [ 51.195661]
    [ 51.197217]
    the dependencies between the lock to be acquired and SOFTIRQ-irq-unsafe lock:
    [ 51.205986] -> (vmap_area_lock){+.+...} ops: 520 {
    [ 51.211032] HARDIRQ-ON-W at:
    [ 51.214321] [] _raw_spin_lock+0x28/0x38
    [ 51.221090] [] alloc_vmap_area.isra.28+0xb8/0x300
    [ 51.228750] [] __get_vm_area_node.isra.29+0x90/0x134
    [ 51.236690] [] get_vm_area_caller+0x3c/0x48
    [ 51.243811] [] vmap+0x40/0x78
    [ 51.249654] [] check_writebuffer_bugs+0x54/0x1a0
    [ 51.257239] [] start_kernel+0x320/0x388
    [ 51.263994] [] 0x80008074
    [ 51.269474] SOFTIRQ-ON-W at:
    [ 51.272769] [] _raw_spin_lock+0x28/0x38
    [ 51.279525] [] alloc_vmap_area.isra.28+0xb8/0x300
    [ 51.287190] [] __get_vm_area_node.isra.29+0x90/0x134
    [ 51.295126] [] get_vm_area_caller+0x3c/0x48
    [ 51.302245] [] vmap+0x40/0x78
    [ 51.308094] [] check_writebuffer_bugs+0x54/0x1a0
    [ 51.315669] [] start_kernel+0x320/0x388
    [ 51.322423] [] 0x80008074
    [ 51.327906] INITIAL USE at:
    [ 51.331112] [] _raw_spin_lock+0x28/0x38
    [ 51.337775] [] alloc_vmap_area.isra.28+0xb8/0x300
    [ 51.345352] [] __get_vm_area_node.isra.29+0x90/0x134
    [ 51.353197] [] get_vm_area_caller+0x3c/0x48
    [ 51.360224] [] vmap+0x40/0x78
    [ 51.365977] [] check_writebuffer_bugs+0x54/0x1a0
    [ 51.373464] [] start_kernel+0x320/0x388
    [ 51.380131] [] 0x80008074
    [ 51.385517] }
    [ 51.387260] ... key at: [] vmap_area_lock+0x10/0x20
    [ 51.393841] ... acquired at:
    [ 51.396945] [] lock_acquire+0x9c/0x104
    [ 51.402060] [] _raw_spin_lock+0x28/0x38
    [ 51.407266] [] find_vmap_area+0x10/0x6c
    [ 51.412478] [] remove_vm_area+0x8/0x6c
    [ 51.417592] [] __vunmap+0x20/0xf8
    [ 51.422252] [] __arm_iounmap+0x10/0x18
    [ 51.427369] [] cpdma_ctlr_destroy+0xf0/0x114 [davinci_cpdma]
    [ 51.434487] [] cpsw_remove+0x48/0x8c [ti_cpsw]
    [ 51.440336] [] platform_drv_remove+0x18/0x1c
    [ 51.446000] [] __device_release_driver+0x70/0xc8
    [ 51.452031] [] driver_detach+0xb4/0xb8
    [ 51.457147] [] bus_remove_driver+0x4c/0x90
    [ 51.462628] [] SyS_delete_module+0x10c/0x198
    [ 51.468289] [] ret_fast_syscall+0x0/0x48
    [ 51.473584]
    [ 51.475140]
    [ 51.475140] stack backtrace:
    [ 51.479703] CPU: 0 PID: 1921 Comm: modprobe Not tainted 3.14.19-02124-g95c5b7b #308
    [ 51.487744] [] (unwind_backtrace) from [] (show_stack+0x10/0x14)
    [ 51.495865] [] (show_stack) from [] (dump_stack+0x78/0x94)
    [ 51.503444] [] (dump_stack) from [] (check_usage+0x408/0x594)
    [ 51.511293] [] (check_usage) from [] (check_irq_usage+0x54/0xb0)
    [ 51.519416] [] (check_irq_usage) from [] (__lock_acquire+0xe54/0x1b90)
    [ 51.528077] [] (__lock_acquire) from [] (lock_acquire+0x9c/0x104)
    [ 51.536291] [] (lock_acquire) from [] (_raw_spin_lock+0x28/0x38)
    [ 51.544417] [] (_raw_spin_lock) from [] (find_vmap_area+0x10/0x6c)
    [ 51.552726] [] (find_vmap_area) from [] (remove_vm_area+0x8/0x6c)
    [ 51.560935] [] (remove_vm_area) from [] (__vunmap+0x20/0xf8)
    [ 51.568693] [] (__vunmap) from [] (__arm_iounmap+0x10/0x18)
    [ 51.576362] [] (__arm_iounmap) from [] (cpdma_ctlr_destroy+0xf0/0x114 [davinci_cpdma])
    [ 51.586494] [] (cpdma_ctlr_destroy [davinci_cpdma]) from [] (cpsw_remove+0x48/0x8c [ti_cpsw])
    [ 51.597261] [] (cpsw_remove [ti_cpsw]) from [] (platform_drv_remove+0x18/0x1c)
    [ 51.606659] [] (platform_drv_remove) from [] (__device_release_driver+0x70/0xc8)
    [ 51.616237] [] (__device_release_driver) from [] (driver_detach+0xb4/0xb8)
    [ 51.625264] [] (driver_detach) from [] (bus_remove_driver+0x4c/0x90)
    [ 51.633749] [] (bus_remove_driver) from [] (SyS_delete_module+0x10c/0x198)
    [ 51.642781] [] (SyS_delete_module) from [] (ret_fast_syscall+0x0/0x48)

    Signed-off-by: Mugunthan V N
    Signed-off-by: David S. Miller

    Mugunthan V N
     
  • memories allocated with devm_* apis must not be freed with kfree apis,
    so removing the kfree calls

    Fixes: e194312854ed ('drivers: net: davinci_cpdma: Convert kzalloc() to devm_kzalloc().')

    Signed-off-by: Mugunthan V N
    Signed-off-by: David S. Miller

    Mugunthan V N
     
  • Ring TX doorbell only if xmit_more is not set or the queue is stopped.

    Suggested-by: Daniel Borkmann
    Signed-off-by: Prashant Sreedharan
    Signed-off-by: Michael Chan
    Signed-off-by: David S. Miller

    Prashant Sreedharan
     
  • fib_nh_match does not match nexthops correctly. Example:

    ip route add 172.16.10/24 nexthop via 192.168.122.12 dev eth0 \
    nexthop via 192.168.122.13 dev eth0
    ip route del 172.16.10/24 nexthop via 192.168.122.14 dev eth0 \
    nexthop via 192.168.122.15 dev eth0

    Del command is successful and route is removed. After this patch
    applied, the route is correctly matched and result is:
    RTNETLINK answers: No such process

    Please consider this for stable trees as well.

    Fixes: 4e902c57417c4 ("[IPv4]: FIB configuration using struct fib_config")
    Signed-off-by: Jiri Pirko
    Acked-by: Eric Dumazet
    Signed-off-by: David S. Miller

    Jiri Pirko
     
  • We worked hard to improve tcp_ack() performance, by not accessing
    skb_shinfo() in fast path (cd7d8498c9a5 tcp: change tcp_skb_pcount()
    location)

    We still have one spurious access because of ACK timestamping,
    added in commit e1c8a607b281 ("net-timestamp: ACK timestamp for
    bytestreams")

    By checking if sk_tsflags has SOF_TIMESTAMPING_TX_ACK set,
    we can avoid two cache line misses for the common case.

    While we are at it, add two prefetchw() :

    One in tcp_ack() to bring skb at the head of write queue.

    One in tcp_clean_rtx_queue() loop to bring following skb,
    as we will delete skb from the write queue and dirty skb->next->prev.

    Add a couple of [un]likely() clauses.

    After this patch, tcp_ack() is no longer the most consuming
    function in tcp stack.

    Signed-off-by: Eric Dumazet
    Cc: Willem de Bruijn
    Cc: Neal Cardwell
    Cc: Yuchung Cheng
    Cc: Van Jacobson
    Signed-off-by: David S. Miller

    Eric Dumazet
     
  • Tilman Schmidt says:

    ====================
    Coverity patches for drivers/isdn

    Here's a series of patches for the ISDN CAPI subsystem and the
    Gigaset ISDN driver.
    Patches 1 to 7 are specific fixes for Coverity warnings.
    Patches 8 to 11 fix related problems with the handling of invalid
    CAPI command codes I noticed while working on this.
    Patch 12 fixes an unrelated problem I noticed during the subsequent
    regression tests.
    It would be great if these could still be merged.
    ====================

    Signed-off-by: David S. Miller

    David S. Miller
     
  • In usb_gigaset function gigaset_write_cmd(), the length field of
    the command buffer structure could be cleared by the transmit
    tasklet before it was used for the function's return value.
    Fix by copying to a local variable before scheduling the tasklet.

    Signed-off-by: Tilman Schmidt
    Signed-off-by: David S. Miller

    Tilman Schmidt
     
  • capi_cmd2str() is used in many places to build log messages.
    None of them is prepared to handle NULL as a result.
    Change the function to return printable string "INVALID_COMMAND"
    instead.

    Signed-off-by: Tilman Schmidt
    Signed-off-by: David S. Miller

    Tilman Schmidt