1. 10 1月, 2017 3 次提交
  2. 05 1月, 2017 1 次提交
  3. 11 8月, 2016 1 次提交
  4. 27 4月, 2016 1 次提交
  5. 05 1月, 2016 1 次提交
  6. 23 12月, 2015 1 次提交
  7. 15 12月, 2015 1 次提交
  8. 03 11月, 2015 1 次提交
  9. 05 3月, 2015 2 次提交
  10. 27 1月, 2015 1 次提交
    • B
      sh_eth: Fix serialisation of interrupt disable with interrupt & NAPI handlers · 283e38db
      Ben Hutchings 提交于
      In order to stop the RX path accessing the RX ring while it's being
      stopped or resized, we clear the interrupt mask (EESIPR) and then call
      free_irq() or synchronise_irq().  This is insufficient because the
      interrupt handler or NAPI poller may set EESIPR again after we clear
      it.  Also, in sh_eth_set_ringparam() we currently don't disable NAPI
      polling at all.
      
      I could easily trigger a crash by running the loop:
      
         while ethtool -G eth0 rx 128 && ethtool -G eth0 rx 64; do echo -n .; done
      
      and 'ping -f' toward the sh_eth port from another machine.
      
      To fix this:
      - Add a software flag (irq_enabled) to signal whether interrupts
        should be enabled
      - In the interrupt handler, if the flag is clear then clear EESIPR
        and return
      - In the NAPI poller, if the flag is clear then don't set EESIPR
      - Set the flag before enabling interrupts in sh_eth_dev_init() and
        sh_eth_set_ringparam()
      - Clear the flag and serialise with the interrupt and NAPI
        handlers before clearing EESIPR in sh_eth_close() and
        sh_eth_set_ringparam()
      
      After this, I could run the loop for 100,000 iterations successfully.
      Signed-off-by: NBen Hutchings <ben.hutchings@codethink.co.uk>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      283e38db
  11. 16 1月, 2015 1 次提交
  12. 09 1月, 2015 1 次提交
  13. 30 11月, 2014 2 次提交
    • M
      sh_eth: Fix sleeping function called from invalid context · 7fa2955f
      Mitsuhiro Kimura 提交于
      This resolves the following bug which can be reproduced by building the
      kernel with CONFIG_DEBUG_ATOMIC_SLEEP=y and reading network statistics
      while the network interface is down.
      
      e.g.:
      
      ifconfig eth0 down
      cat /sys/class/net/eth0/statistics/tx_errors
      
      ----
      [ 1238.161349] BUG: sleeping function called from invalid context at drivers/base/power/runtime.c:952
      [ 1238.188279] in_atomic(): 1, irqs_disabled(): 0, pid: 1388, name: cat
      [ 1238.207425] CPU: 0 PID: 1388 Comm: cat Not tainted 3.10.31-ltsi-00046-gefa0b46 #1087
      [ 1238.230737] Backtrace:
      [ 1238.238123] [<c0012e64>] (dump_backtrace+0x0/0x10c) from [<c0013000>] (show_stack+0x18/0x1c)
      [ 1238.263499]  r6:000003b8 r5:c06160c0 r4:c0669e00 r3:00404000
      [ 1238.280583] [<c0012fe8>] (show_stack+0x0/0x1c) from [<c04515a4>] (dump_stack+0x20/0x28)
      [ 1238.304631] [<c0451584>] (dump_stack+0x0/0x28) from [<c004970c>] (__might_sleep+0xf8/0x118)
      [ 1238.329734] [<c0049614>] (__might_sleep+0x0/0x118) from [<c02465ac>] (__pm_runtime_resume+0x38/0x90)
      [ 1238.357170]  r7:d616f000 r6:c049c458 r5:00000004 r4:d6a17210
      [ 1238.374251] [<c0246574>] (__pm_runtime_resume+0x0/0x90) from [<c029b1c4>] (sh_eth_get_stats+0x44/0x280)
      [ 1238.402468]  r7:d616f000 r6:c049c458 r5:d5c21000 r4:d5c21000
      [ 1238.419552] [<c029b180>] (sh_eth_get_stats+0x0/0x280) from [<c03ae39c>] (dev_get_stats+0x54/0x88)
      [ 1238.446204]  r5:d5c21000 r4:d5ed7e08
      [ 1238.456980] [<c03ae348>] (dev_get_stats+0x0/0x88) from [<c03c677c>] (netstat_show.isra.15+0x54/0x9c)
      [ 1238.484413]  r6:d5c21000 r5:d5c21238 r4:00000028 r3:00000001
      [ 1238.501495] [<c03c6728>] (netstat_show.isra.15+0x0/0x9c) from [<c03c69b8>] (show_tx_errors+0x18/0x1c)
      [ 1238.529196]  r7:d5f945d8 r6:d5f945c0 r5:c049716c r4:c0650e7c
      [ 1238.546279] [<c03c69a0>] (show_tx_errors+0x0/0x1c) from [<c023963c>] (dev_attr_show+0x24/0x50)
      [ 1238.572157] [<c0239618>] (dev_attr_show+0x0/0x50) from [<c010c148>] (sysfs_read_file+0xb0/0x140)
      [ 1238.598554]  r5:c049716c r4:d5c21240
      [ 1238.609326] [<c010c098>] (sysfs_read_file+0x0/0x140) from [<c00b9ee4>] (vfs_read+0xb0/0x13c)
      [ 1238.634679] [<c00b9e34>] (vfs_read+0x0/0x13c) from [<c00ba0ac>] (SyS_read+0x44/0x74)
      [ 1238.657944]  r8:bef45bf0 r7:00000000 r6:d6ac0600 r5:00000000 r4:00000000
      [ 1238.678172] [<c00ba068>] (SyS_read+0x0/0x74) from [<c000eec0>] (ret_fast_syscall+0x0/0x30)
      ----
      Signed-off-by: NMitsuhiro Kimura <mitsuhiro.kimura.kc@renesas.com>
      Signed-off-by: NYoshihiro Kaneko <ykaneko0929@gmail.com>
      Signed-off-by: NSimon Horman <horms+renesas@verge.net.au>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      7fa2955f
    • M
      sh_eth: Fix skb alloc size and alignment adjust rule. · 4d6a949c
      Mitsuhiro Kimura 提交于
      In the current driver, allocation size of skb does not care the alignment
      adjust after allocation.
      And also, in the current implementation, buffer alignment method by
      sh_eth_set_receive_align function has a bug that this function displace
      buffer start address forcedly when the alignment is corrected.
      In the result, tail of the skb will exceed allocated area and kernel panic
      will be occurred.
      This patch fix this issue.
      Signed-off-by: NMitsuhiro Kimura <mitsuhiro.kimura.kc@renesas.com>
      Signed-off-by: NYoshihiro Kaneko <ykaneko0929@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      4d6a949c
  14. 04 6月, 2014 1 次提交
  15. 14 2月, 2014 1 次提交
  16. 18 1月, 2014 1 次提交
  17. 04 1月, 2014 1 次提交
    • S
      sh_eth: coding style fixes · 128296fc
      Sergei Shtylyov 提交于
      Running 'scripts/checkpatch.pl' on the driver files gives numerous warnings:
      
      - block comments using empty /* line;
      
      - unneeded \ at end of lines;
      
      - message string split across lines;
      
      - use of __attribute__((aligned(n))) instead of __aligned(n) macro;
      
      - use of __attribute__((packed)) instead of __packed macro.
      
      Additionally, running 'scripts/checkpatch.pl --strict' gives more complaints:
      
      - including the paragraph about writing to FSF into the heading comment;
      
      - alignment not matching open paren;
      
      - multiple assignments on one line;
      
      - use of CamelCase names;
      
      - missing {} on one of the *if* arms where another has them;
      
      - spinlock definition without a comment.
      
      While fixing these, also do some more style cleanups:
      
      - remove useless () around expressions;
      
      - add {} around multi-line *if* operator's arm;
      
      - remove space before comma;
      
      - add spaces after /* and before */;
      
      - properly align continuation lines of broken up expressions;
      
      - realign comments to the structure fields.
      Signed-off-by: NSergei Shtylyov <sergei.shtylyov@cogentembedded.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      128296fc
  18. 24 10月, 2013 1 次提交
  19. 21 8月, 2013 2 次提交
  20. 25 7月, 2013 1 次提交
  21. 24 6月, 2013 1 次提交
    • S
      sh_eth: fix unhandled RFE interrupt · ca8c3585
      Sergei Shtylyov 提交于
      EESR.RFE (receive FIFO overflow) interrupt is enabled by the driver on all SoCs
      and sh_eth_error() handles it but it's not present in any initializer/assignment
      of the 'eesr_err_check' field of 'struct sh_eth_cpu_data'. This leads to that
      interrupt not being handled and cleared, and finally to disabling IRQ and the
      driver being non-functional.
      
      Modify DEFAULT_EESR_ERR_CHECK macro and all explicit initializers of the above
      mentioned field to contain the EESR.RFE bit. Remove useless backslashes from the
      initializers, while at it.
      Signed-off-by: NSergei Shtylyov <sergei.shtylyov@cogentembedded.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      ca8c3585
  22. 20 6月, 2013 5 次提交
  23. 07 6月, 2013 2 次提交
  24. 01 4月, 2013 1 次提交
  25. 30 3月, 2013 1 次提交
  26. 22 3月, 2013 1 次提交
    • S
      sh_eth: use managed device API · d5e07e69
      Sergei Shtylyov 提交于
      Switch the driver to the managed device API by replacing ioremap() calls with
      devm_ioremap_resource() (that will also result in calling request_mem_region()
      which the driver forgot to do until now) and k[mz]alloc() with devm_kzalloc() --
      this permits to simplify driver's probe()/remove() method cleanup. We can now
      remove the ioremap() error messages since the error messages are printed by
       devm_ioremap_resource() itself. We can also remove the 'bitbang' field from
      'struct sh_eth_private' as we don't need it anymore in order to free the memory
      behind it...
      Signed-off-by: NSergei Shtylyov <sergei.shtylyov@cogentembedded.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      d5e07e69
  27. 21 3月, 2013 1 次提交
  28. 27 6月, 2012 3 次提交