免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4314 | 回复: 1
打印 上一主题 下一主题

[时钟管理] get_next_timer_interrupt的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-06-04 11:27 |只看该作者 |倒序浏览
hi,all
我碰到一个get_next_timer_interrupt的死机问题,objdump看到应该是timer_list为NULL,我猜可能是mod_timer后未del_timer_sync而kfree了导致出此问题。所以做实验在setup_timer,mod_timer后 和timer到来之前kfree,想重现此现象,但实际得到的错误是:kernel BUG at kernel/timer.c:1035!
那么该问题到底是什么造成的呢?现象不好重现。

有个网页显示driver未调用del_timer_sync也有出get_next_timer_interrupt问题,lk版本不同,死机函数offset不同,不确定是否是同一类问题
http://www.gossamer-threads.com/lists/linux/kernel/886925

lk3.0.8 ARM A9 dual core

  1. [ 1554.617435@0] Unable to handle kernel NULL pointer dereference at virtual address 0000000c
  2. [ 1554.620168@0] pgd = c0004000
  3. [ 1554.623025@0] [0000000c] *pgd=00000000
  4. [ 1554.626764@0] Internal error: Oops: 17 [#1] PREEMPT SMP
  5. [ 1554.631968@0] Modules linked in: mali ump
  6. [ 1554.635966@0] CPU: 0    Tainted: G        W    (3.0.8-g556d76d-dirty #7)
  7. [ 1554.642676@0] PC is at get_next_timer_interrupt+0x134/0x284
  8. [ 1554.648202@0] LR is at 0xc0a272d4
  9. [ 1554.651499@0] pc : [<c027ae5c>]    lr : [<c0a272d4>]    psr: 00000193
  10. [ 1554.651504@0] sp : c09b1ea8  ip : 0000002a  fp : fffe1600
  11. [ 1554.663299@0] r10: 000001ea  r9 : c09b1eb8  r8 : 00000000
  12. [ 1554.668681@0] r7 : 0000002a  r6 : c0a26ac0  r5 : 0001e9ff  r4 : 00000000
  13. [ 1554.675364@0] r3 : 00000000  r2 : 00000000  r1 : c0a27424  r0 : 00000001
  14. [ 1554.682055@0] Flags: nzcv  IRQs off  FIQs on  Mode SVC_32  ISA ARM  Segment kernel
  15. [ 1554.689602@0] Control: 10c53c7d  Table: 9eb9c04a  DAC: 00000017
  16. [ 1554.695503@0]
  17. [ 1554.695507@0] PC: 0xc027addc:
  18. [ 1554.700102@0] addc  e1530000 1afffff9 e2810001 e20010ff e1520001 1afffff0 e24a4107 e3a00000
  19. [ 1554.708433@0] adfc  e3520000 e28d9010 128aac01 e2867ea1 1062a00a e286ee81 e286cec1 e2863ee1
  20. [ 1554.716765@0] ae1c  e1a0a42a e3a08000 e2871004 e28ee004 e28c2004 e2837004 e58d1014 e58d2018
  21. [ 1554.725099@0] ae3c  e58d701c e58de010 e20a703f e1a0c007 e79e318c e08e118c e1530001 0a00000a
  22. [ 1554.733431@0] ae5c  e593200c e3120001 1a000004 e5932008 e3a00001 e064b002 e35b0000 b1a04002
  23. [ 1554.741765@0] ae7c  e5933000 e1530001 1afffff4 e3500000 1a00003d e28cc001 e20cc03f e157000c
  24. [ 1554.750096@0] ae9c  1affffea e3570000 e2888004 128aa040 1067a00a e3580010 0a00000b e1a0a32a
  25. [ 1554.758429@0] aebc  e799e008 eaffffdf e2720001 33a00000 e5934008 e1520001 d1a0c000 c380c001
  26. [ 1554.766763@0]
  27. [ 1554.766766@0] LR: 0xc0a27254:
  28. [ 1554.771362@0] 7254  c0a27254 c0a27254 c0a2725c c0a2725c c0a27264 c0a27264 c0a2726c c0a2726c
  29. [ 1554.779695@0] 7274  c0a27274 c0a27274 c0a2727c c0a2727c c0a27284 c0a27284 c0a2728c c0a2728c
  30. [ 1554.788028@0] 7294  c0a27294 c0a27294 c0a2729c c0a2729c c0a272a4 c0a272a4 c0a272ac c0a272ac
  31. [ 1554.796361@0] 72b4  c0a272b4 c0a272b4 c0a272bc c0a272bc c0a272c4 c0a272c4 c0a272cc c0a272cc
  32. [ 1554.804693@0] 72d4  c0a272d4 c0a272d4 c0a272dc c0a272dc c0a272e4 c0a272e4 c0a272ec c0a272ec
  33. [ 1554.813026@0] 72f4  c0a272f4 c0a272f4 c0a272fc c0a272fc c0a27304 c0a27304 c0a2730c c0a2730c
  34. [ 1554.821359@0] 7314  c0a27314 c0a27314 c0a2731c c0a2731c c09fd438 c09fd438 c0a2732c c0a2732c
  35. [ 1554.829691@0] 7334  c0a27334 c0a27334 c0a2733c c0a2733c c0a27344 c0a27344 c0a2734c c0a2734c
  36. [ 1554.838027@0]
  37. [ 1554.838030@0] SP: 0xc09b1e28:
  38. [ 1554.842625@0] 1e28  e8ddf472 00000169 ffffffff 00000169 e975b800 c0905224 e8ddf472 00000169
  39. [ 1554.850959@0] 1e48  00000001 ffffffff c09b1e94 c0a26ac0 0000002a c02464ec 00000001 c0a27424
  40. [ 1554.859291@0] 1e68  00000000 00000000 00000000 0001e9ff c0a26ac0 0000002a 00000000 c09b1eb8
  41. [ 1554.867623@0] 1e88  000001ea fffe1600 0000002a c09b1ea8 c0a272d4 c027ae5c 00000193 ffffffff
  42. [ 1554.875956@0] 1ea8  000021c7 00000000 00000611 00000000 c0a272d4 c0a274d4 c0a276d4 c0a278d4
  43. [ 1554.884289@0] 1ec8  c09c7ce0 c13704a8 00000000 20000193 0001e9ff c09b20c0 c09b2080 c0a28230
  44. [ 1554.892622@0] 1ee8  0001e9ff c0299d0c 00000000 00000024 c09b2040 c09b20c0 e8de949a 00000169
  45. [ 1554.900955@0] 1f08  c09b2040 c1370040 60000000 000001e4 e8dd2180 00000169 e8de949a 00000169
  46. [ 1554.909288@0]
  47. [ 1554.909291@0] FP: 0xfffe1580:
  48. [ 1554.913887@0] 1580  ******** ******** ******** ******** ******** ******** ******** ********
  49. [ 1554.922222@0] 15a0  ******** ******** ******** ******** ******** ******** ******** ********
  50. [ 1554.930553@0] 15c0  ******** ******** ******** ******** ******** ******** ******** ********
  51. [ 1554.938886@0] 15e0  ******** ******** ******** ******** ******** ******** ******** ********
  52. [ 1554.947218@0] 1600  ******** ******** ******** ******** ******** ******** ******** ********
  53. [ 1554.955551@0] 1620  ******** ******** ******** ******** ******** ******** ******** ********
  54. [ 1554.963884@0] 1640  ******** ******** ******** ******** ******** ******** ******** ********
  55. [ 1554.972217@0] 1660  ******** ******** ******** ******** ******** ******** ******** ********
  56. [ 1554.980551@0]
  57. [ 1554.980553@0] R1: 0xc0a273a4:
  58. [ 1554.985150@0] 73a4  c0a273a4 c0a273a4 c0a273ac c0a273ac c0a273b4 c0a273b4 c0a273bc c0a273bc
  59. [ 1554.993483@0] 73c4  c0a273c4 c0a273c4 c0a273cc c0a273cc c0a273d4 c0a273d4 c0a273dc c0a273dc
  60. [ 1555.001816@0] 73e4  c0a273e4 c0a273e4 c0a273ec c0a273ec c0a273f4 c0a273f4 c0a273fc c0a273fc
  61. [ 1555.010148@0] 7404  c0a27404 c0a27404 c0a2740c c0a2740c c0a27414 c0a27414 c0a2741c c0a2741c
  62. [ 1555.018481@0] 7424  dfacbb34 dfacbb34 c0a3ab78 c0a3ab78 c0a27434 c0a27434 c0a2743c c0a2743c
  63. [ 1555.026814@0] 7444  c09fdd14 c09fdd14 c0a2744c c0a2744c c0a27454 c0a27454 c0a2745c c0a2745c
  64. [ 1555.035147@0] 7464  c0a27464 c0a27464 c0a2746c c0a2746c c0a27474 c0a27474 c0a2747c c0a2747c
  65. [ 1555.043480@0] 7484  c0a27484 c0a27484 c0a2748c c0a2748c c0a27494 c0a27494 c0a2749c c0a2749c
  66. [ 1555.051813@0]
  67. [ 1555.051816@0] R6: 0xc0a26a40:
  68. [ 1555.056413@0] 6a40  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
  69. [ 1555.064745@0] 6a60  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000001
  70. [ 1555.073078@0] 6a80  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
  71. [ 1555.081411@0] 6aa0  00000001 00000000 00000000 00000000 00000000 00000000 00000000 00000000
  72. [ 1555.089744@0] 6ac0  00000001 00000000 00000000 0001ea00 0001e9ff c1370d5c bf0470b4 c0a26adc
  73. [ 1555.098077@0] 6ae0  c0a26adc c0a26ae4 c0a26ae4 dfbcbab0 dfbcbab0 c0a26af4 c0a26af4 c0a26afc
  74. [ 1555.106409@0] 6b00  c0a26afc c0a26b04 c0a26b04 c0a26b0c c0a26b0c c0a26b14 c0a26b14 c0a26b1c
  75. [ 1555.114742@0] 6b20  c0a26b1c df875d90 df875d90 c0a26b2c c0a26b2c dfa07f30 dfa07f30 c0a26b3c
  76. [ 1555.123076@0]
  77. [ 1555.123078@0] R9: 0xc09b1e38:
  78. [ 1555.127676@0] 1e38  e975b800 c0905224 e8ddf472 00000169 00000001 ffffffff c09b1e94 c0a26ac0
  79. [ 1555.136008@0] 1e58  0000002a c02464ec 00000001 c0a27424 00000000 00000000 00000000 0001e9ff
  80. [ 1555.144341@0] 1e78  c0a26ac0 0000002a 00000000 c09b1eb8 000001ea fffe1600 0000002a c09b1ea8
  81. [ 1555.152674@0] 1e98  c0a272d4 c027ae5c 00000193 ffffffff 000021c7 00000000 00000611 00000000
  82. [ 1555.161007@0] 1eb8  c0a272d4 c0a274d4 c0a276d4 c0a278d4 c09c7ce0 c13704a8 00000000 20000193
  83. [ 1555.169340@0] 1ed8  0001e9ff c09b20c0 c09b2080 c0a28230 0001e9ff c0299d0c 00000000 00000024
  84. [ 1555.177672@0] 1ef8  c09b2040 c09b20c0 e8de949a 00000169 c09b2040 c1370040 60000000 000001e4
  85. [ 1555.186005@0] 1f18  e8dd2180 00000169 e8de949a 00000169 c09bac88 c09bac88 c023ecb8 0000002b
  86. [ 1555.194342@0] Process swapper (pid: 0, stack limit = 0xc09b02f0)
  87. [ 1555.200330@0] Stack: (0xc09b1ea8 to 0xc09b2000)
  88. [ 1555.204846@0] 1ea0:                   000021c7 00000000 00000611 00000000 c0a272d4 c0a274d4
  89. [ 1555.213179@0] 1ec0: c0a276d4 c0a278d4 c09c7ce0 c13704a8 00000000 20000193 0001e9ff c09b20c0
  90. [ 1555.221511@0] 1ee0: c09b2080 c0a28230 0001e9ff c0299d0c 00000000 00000024 c09b2040 c09b20c0
  91. [ 1555.229844@0] 1f00: e8de949a 00000169 c09b2040 c1370040 60000000 000001e4 e8dd2180 00000169
  92. [ 1555.238177@0] 1f20: e8de949a 00000169 c09bac88 c09bac88 c023ecb8 0000002b 00000000 00000002
  93. [ 1555.246510@0] 1f40: c09b0000 00000000 00000000 c0273db4 c09bac88 c024005c 60000013 ffffffff
  94. [ 1555.254842@0] 1f60: f2300100 0000002b 00000003 c024654c c0a04e00 20000013 00000000 f2200000
  95. [ 1555.263175@0] 1f80: c09b0000 c0a043c4 c09ba250 c07c2454 c09c2a24 413fc090 00000000 00000000
  96. [ 1555.271508@0] 1fa0: 00000000 c09b1fb8 c0248228 c07be3a0 60000013 ffffffff c09b0000 c0248228
  97. [ 1555.279840@0] 1fc0: c09bab20 c0a04320 c023a3cc c09c2a1c 8000406a c0008998 c0008464 00000000
  98. [ 1555.288174@0] 1fe0: 00000000 c023a3cc 10c53c7d c09ba24c c023a3c8 80008040 00000000 00000000
  99. [ 1555.296545@0] [<c027ae5c>] (get_next_timer_interrupt+0x134/0x284) from [<c0299d0c>] (tick_nohz_stop_sched_tick+0x34c/0x44c)
  100. [ 1555.307626@0] [<c0299d0c>] (tick_nohz_stop_sched_tick+0x34c/0x44c) from [<c0273db4>] (irq_exit+0x70/0x9c)
  101. [ 1555.317179@0] [<c0273db4>] (irq_exit+0x70/0x9c) from [<c024005c>] (asm_do_IRQ+0x5c/0xb8)
  102. [ 1555.325247@0] [<c024005c>] (asm_do_IRQ+0x5c/0xb8) from [<c024654c>] (__irq_svc+0x4c/0xe4)
  103. [ 1555.333394@0] Exception stack(0xc09b1f70 to 0xc09b1fb8)
  104. [ 1555.338603@0] 1f60:                                     c0a04e00 20000013 00000000 f2200000
  105. [ 1555.346937@0] 1f80: c09b0000 c0a043c4 c09ba250 c07c2454 c09c2a24 413fc090 00000000 00000000
  106. [ 1555.355269@0] 1fa0: 00000000 c09b1fb8 c0248228 c07be3a0 60000013 ffffffff
  107. [ 1555.362052@0] [<c024654c>] (__irq_svc+0x4c/0xe4) from [<c07be3a0>] (_raw_spin_unlock_irqrestore+0x1c/0x44)
  108. [ 1555.371682@0] [<c07be3a0>] (_raw_spin_unlock_irqrestore+0x1c/0x44) from [<c0248228>] (cpu_idle+0x90/0x110)
  109. [ 1555.381316@0] [<c0248228>] (cpu_idle+0x90/0x110) from [<c0008998>] (start_kernel+0x2e0/0x2ec)
  110. [ 1555.389821@0] [<c0008998>] (start_kernel+0x2e0/0x2ec) from [<80008040>] (0x80008040)
  111. [ 1555.397544@0] Code: e79e318c e08e118c e1530001 0a00000a (e593200c)
复制代码

  1. 00000b2c <get_next_timer_interrupt>:
  2. /**
  3. * get_next_timer_interrupt - return the jiffy of the next pending timer
  4. * @now: current time (in jiffies)
  5. */
  6. unsigned long get_next_timer_interrupt(unsigned long now)
  7. {
  8.      b2c:        e92d4ff0         push        {r4, r5, r6, r7, r8, r9, sl, fp, lr}
  9.      b30:        e24dd024         sub        sp, sp, #36        ; 0x24
  10.         struct tvec_base *base = __this_cpu_read(tvec_bases);
  11.      b34:        e3006000         movw        r6, #0
  12.      b38:        e3406000         movt        r6, #0
  13.      b3c:        e1a0100d         mov        r1, sp
  14.      b40:        e3c15d7f         bic        r5, r1, #8128        ; 0x1fc0
  15.      b44:        e3c5203f         bic        r2, r5, #63        ; 0x3f
  16. /**
  17. * get_next_timer_interrupt - return the jiffy of the next pending timer
  18. * @now: current time (in jiffies)
  19. */
  20. unsigned long get_next_timer_interrupt(unsigned long now)
  21. {
  22.      b48:        e1a05000         mov        r5, r0
  23.         struct tvec_base *base = __this_cpu_read(tvec_bases);
  24.      b4c:        e300e000         movw        lr, #0
  25.      b50:        e340e000         movt        lr, #0
  26.      b54:        e592c014         ldr        ip, [r2, #20]
  27.      b58:        e796010c         ldr        r0, [r6, ip, lsl #2]
  28.      b5c:        e79e6000         ldr        r6, [lr, r0]

  29.         /*
  30.          * Pretend that there is no timer pending if the cpu is offline.
  31.          * Possible pending timers will be migrated later to an active cpu.
  32.          */
  33.         if (cpu_is_offline(smp_processor_id()))
  34.      b60:        ebfffffe         bl        0 <debug_smp_processor_id>
  35. * @nr: bit number to test
  36. * @addr: Address to start counting from
  37. */
  38. static inline int test_bit(int nr, const volatile unsigned long *addr)
  39. {
  40.         return 1UL & (addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1)));
  41.      b64:        e3003000         movw        r3, #0
  42.      b68:        e3403000         movt        r3, #0
  43.      b6c:        e593c000         ldr        ip, [r3]
  44.      b70:        e3500000         cmp        r0, #0
  45.      b74:        e280101f         add        r1, r0, #31
  46.      b78:        a1a01000         movge        r1, r0
  47.      b7c:        e200001f         and        r0, r0, #31
  48.      b80:        e1a022c1         asr        r2, r1, #5
  49.      b84:        e79c1102         ldr        r1, [ip, r2, lsl #2]
  50.      b88:        e1a03031         lsr        r3, r1, r0
  51.      b8c:        e3130001         tst        r3, #1
  52.                 return now + NEXT_TIMER_MAX_DELTA;
  53.      b90:        02454107         subeq        r4, r5, #-1073741823        ; 0xc0000001

  54.         /*
  55.          * Pretend that there is no timer pending if the cpu is offline.
  56.          * Possible pending timers will be migrated later to an active cpu.
  57.          */
  58.         if (cpu_is_offline(smp_processor_id()))
  59.      b94:        0a000079         beq        d80 <get_next_timer_interrupt+0x254>
  60.         raw_spin_lock_init(&(_lock)->rlock);                \
  61. } while (0)

  62. static inline void spin_lock(spinlock_t *lock)
  63. {
  64.         raw_spin_lock(&lock->rlock);
  65.      b98:        e1a00006         mov        r0, r6
  66.      b9c:        ebfffffe         bl        0 <_raw_spin_lock>
  67.                 return now + NEXT_TIMER_MAX_DELTA;
  68.         spin_lock(&base->lock);
  69.         if (time_before_eq(base->next_timer, base->timer_jiffies))
  70.      ba0:        e596a00c         ldr        sl, [r6, #12]
  71.      ba4:        e5964010         ldr        r4, [r6, #16]
  72.      ba8:        e064300a         rsb        r3, r4, sl
  73.      bac:        e3530000         cmp        r3, #0
  74.      bb0:        ba00004e         blt        cf0 <get_next_timer_interrupt+0x1c4>
  75.         int index, slot, array, found = 0;
  76.         struct timer_list *nte;
  77.         struct tvec *varray[4];

  78.         /* Look for timer events in tv1. */
  79.         index = slot = timer_jiffies & TVR_MASK;
  80.      bb4:        e20a20ff         and        r2, sl, #255        ; 0xff
  81.      bb8:        e1a01002         mov        r1, r2
  82.         do {
  83.                 list_for_each_entry(nte, base->tv1.vec + slot, entry) {
  84.      bbc:        e0864181         add        r4, r6, r1, lsl #3
  85.      bc0:        e2840014         add        r0, r4, #20
  86.      bc4:        e5943014         ldr        r3, [r4, #20]
  87.      bc8:        e1530000         cmp        r3, r0
  88.      bcc:        0a000005         beq        be8 <get_next_timer_interrupt+0xbc>
  89.                         if (tbase_get_deferrable(nte->base))
  90.      bd0:        e593e00c         ldr        lr, [r3, #12]
  91.      bd4:        e31e0001         tst        lr, #1
  92.      bd8:        0a00003a         beq        cc8 <get_next_timer_interrupt+0x19c>
  93.         struct tvec *varray[4];

  94.         /* Look for timer events in tv1. */
  95.         index = slot = timer_jiffies & TVR_MASK;
  96.         do {
  97.                 list_for_each_entry(nte, base->tv1.vec + slot, entry) {
  98.      bdc:        e5933000         ldr        r3, [r3]
  99.      be0:        e1530000         cmp        r3, r0
  100.      be4:        1afffff9         bne        bd0 <get_next_timer_interrupt+0xa4>
  101.                         /* Look at the cascade bucket(s)? */
  102.                         if (!index || slot < index)
  103.                                 goto cascade;
  104.                         return expires;
  105.                 }
  106.                 slot = (slot + 1) & TVR_MASK;
  107.      be8:        e2810001         add        r0, r1, #1
  108.      bec:        e20010ff         and        r1, r0, #255        ; 0xff
  109.         } while (slot != index);
  110.      bf0:        e1520001         cmp        r2, r1
  111.      bf4:        1afffff0         bne        bbc <get_next_timer_interrupt+0x90>
  112. * This function needs to be called with interrupts disabled.
  113. */
  114. static unsigned long __next_timer_interrupt(struct tvec_base *base)
  115. {
  116.         unsigned long timer_jiffies = base->timer_jiffies;
  117.         unsigned long expires = timer_jiffies + NEXT_TIMER_MAX_DELTA;
  118.      bf8:        e24a4107         sub        r4, sl, #-1073741823        ; 0xc0000001
  119.      bfc:        e3a00000         mov        r0, #0
  120.                 slot = (slot + 1) & TVR_MASK;
  121.         } while (slot != index);

  122. cascade:
  123.         /* Calculate the next cascade event */
  124.         if (index)
  125.      c00:        e3520000         cmp        r2, #0
  126.                         slot = (slot + 1) & TVN_MASK;
  127.                 } while (slot != index);

  128.                 if (index)
  129.                         timer_jiffies += TVN_SIZE - index;
  130.                 timer_jiffies >>= TVN_BITS;
  131.      c04:        e28d9010         add        r9, sp, #16
  132.         } while (slot != index);

  133. cascade:
  134.         /* Calculate the next cascade event */
  135.         if (index)
  136.                 timer_jiffies += TVR_SIZE - index;
  137.      c08:        128aac01         addne        sl, sl, #256        ; 0x100
  138.         timer_jiffies >>= TVR_BITS;

  139.         /* Check tv2-tv5. */
  140.         varray[0] = &base->tv2;
  141.         varray[1] = &base->tv3;
  142.      c0c:        e2867ea1         add        r7, r6, #2576        ; 0xa10
  143.         } while (slot != index);

  144. cascade:
  145.         /* Calculate the next cascade event */
  146.         if (index)
  147.                 timer_jiffies += TVR_SIZE - index;
  148.      c10:        1062a00a         rsbne        sl, r2, sl
  149.         timer_jiffies >>= TVR_BITS;

  150.         /* Check tv2-tv5. */
  151.         varray[0] = &base->tv2;
  152.      c14:        e286ee81         add        lr, r6, #2064        ; 0x810
  153.         varray[1] = &base->tv3;
  154.         varray[2] = &base->tv4;
  155.      c18:        e286cec1         add        ip, r6, #3088        ; 0xc10
  156.         varray[3] = &base->tv5;
  157.      c1c:        e2863ee1         add        r3, r6, #3600        ; 0xe10

  158. cascade:
  159.         /* Calculate the next cascade event */
  160.         if (index)
  161.                 timer_jiffies += TVR_SIZE - index;
  162.         timer_jiffies >>= TVR_BITS;
  163.      c20:        e1a0a42a         lsr        sl, sl, #8

  164.         /* Check tv2-tv5. */
  165.         varray[0] = &base->tv2;
  166.         varray[1] = &base->tv3;
  167.         varray[2] = &base->tv4;
  168.         varray[3] = &base->tv5;
  169.      c24:        e3a08000         mov        r8, #0
  170.                 timer_jiffies += TVR_SIZE - index;
  171.         timer_jiffies >>= TVR_BITS;

  172.         /* Check tv2-tv5. */
  173.         varray[0] = &base->tv2;
  174.         varray[1] = &base->tv3;
  175.      c28:        e2871004         add        r1, r7, #4
  176.         if (index)
  177.                 timer_jiffies += TVR_SIZE - index;
  178.         timer_jiffies >>= TVR_BITS;

  179.         /* Check tv2-tv5. */
  180.         varray[0] = &base->tv2;
  181.      c2c:        e28ee004         add        lr, lr, #4
  182.         varray[1] = &base->tv3;
  183.         varray[2] = &base->tv4;
  184.      c30:        e28c2004         add        r2, ip, #4
  185.         varray[3] = &base->tv5;
  186.      c34:        e2837004         add        r7, r3, #4
  187.                 timer_jiffies += TVR_SIZE - index;
  188.         timer_jiffies >>= TVR_BITS;

  189.         /* Check tv2-tv5. */
  190.         varray[0] = &base->tv2;
  191.         varray[1] = &base->tv3;
  192.      c38:        e58d1014         str        r1, [sp, #20]
  193.         varray[2] = &base->tv4;
  194.      c3c:        e58d2018         str        r2, [sp, #24]
  195.         varray[3] = &base->tv5;
  196.      c40:        e58d701c         str        r7, [sp, #28]
  197.         if (index)
  198.                 timer_jiffies += TVR_SIZE - index;
  199.         timer_jiffies >>= TVR_BITS;

  200.         /* Check tv2-tv5. */
  201.         varray[0] = &base->tv2;
  202.      c44:        e58de010         str        lr, [sp, #16]
  203.         varray[3] = &base->tv5;

  204.         for (array = 0; array < 4; array++) {
  205.                 struct tvec *varp = varray[array];

  206.                 index = slot = timer_jiffies & TVN_MASK;
  207.      c48:        e20a703f         and        r7, sl, #63        ; 0x3f
  208.      c4c:        e1a0c007         mov        ip, r7
  209.                 do {
  210.                         list_for_each_entry(nte, varp->vec + slot, entry) {
  211.      c50:        e79e318c         ldr        r3, [lr, ip, lsl #3]
  212.      c54:        e08e118c         add        r1, lr, ip, lsl #3
  213.      c58:        e1530001         cmp        r3, r1
  214.      c5c:        0a00000a         beq        c8c <get_next_timer_interrupt+0x160>
  215.                                 if (tbase_get_deferrable(nte->base))
  216.      c60:        e593200c         ldr        r2, [r3, #12]
  217.      c64:        e3120001         tst        r2, #1
  218.      c68:        1a000004         bne        c80 <get_next_timer_interrupt+0x154>
  219.                                         continue;

  220.                                 found = 1;
  221.                                 if (time_before(nte->expires, expires))
  222.      c6c:        e5932008         ldr        r2, [r3, #8]
  223.      c70:        e3a00001         mov        r0, #1
  224.      c74:        e064b002         rsb        fp, r4, r2
  225.      c78:        e35b0000         cmp        fp, #0
  226.      c7c:        b1a04002         movlt        r4, r2
复制代码

论坛徽章:
0
2 [报告]
发表于 2012-06-04 12:43 |只看该作者
我更新一下,我确实在timer到来前kfree掉该timer出现了get_next_timer_interrupt错误,offset 0x134,同一个地址。
刚才做实验有误。那么大概就是这个问题,再看是哪个driver在kfree timer_list前未调用del_timer_sync了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP