Stack trace using ftrace

Jungseok Lee jungseoklee85 at gmail.com
Mon Jul 6 05:04:26 PDT 2015


On Jul 6, 2015, at 4:56 PM, AKASHI Takahiro wrote:
> Hi,

Hi,

> Thank you for your bug report.

Thanks for taking care about this topic.

> This issue comes from the fact that ftrace, more specifically check_stack(),
> goes over immediate values in the stack with each function's (bl instruction's) PC
> which is returned by save_stack_trace() while save_stack_trace(), or unwind_frame(),
> decrements the saved value of PC in the stack by 4. So mismatching can happen.
> 
> We can easily fix the problem by reverting the following commit:
> 
> > commit e306dfd06fcb44d21c80acb8e5a88d55f3d1cf63
> > Author: Olof Johansson <olof at lixom.net>
> > Date:   Fri Feb 14 19:35:15 2014 +0000
> >
> >     ARM64: unwind: Fix PC calculation
> 
> But it will also resurrect the original problem.

IMHO, a current problem cannot be resolved by reverting the commit.
Please refer to the following data. The result looks much better than before,
but some entries still have 0 sizes.

        Depth    Size   Location    (47 entries)
        -----    ----   --------
  0)     4664     240   jiffies_to_timeval+0x1c/0x7c
  1)     4424       0   ftrace_graph_call+0x0/0x14
  2)     4424       0   jiffies_to_timeval+0x1c/0x7c
  3)     4424       0   __acct_update_integrals+0x4c/0xbc
  4)     4424       0   acct_account_cputime+0x28/0x34
  5)     4424       0   account_system_time+0xb4/0x1e0
  6)     4424      32   account_process_tick+0x58/0xa0
  7)     4392      48   update_process_times+0x30/0x74
  8)     4344      32   tick_sched_handle.isra.15+0x3c/0x7c
  9)     4312      48   tick_sched_timer+0x4c/0x90
 10)     4264      48   __run_hrtimer+0x64/0x258
 11)     4216      64   hrtimer_interrupt+0xec/0x260
 12)     4152     128   arch_timer_handler_virt+0x3c/0x48
 13)     4024      32   handle_percpu_devid_irq+0x88/0x188
 14)     3992      64   generic_handle_irq+0x3c/0x54
 15)     3928      32   __handle_domain_irq+0x6c/0xbc
 16)     3896      64   gic_handle_irq+0x3c/0x88
 17)     3832     336   el1_irq+0x68/0xd8
 18)     3496     112   icmp_glue_bits+0x50/0x94
 19)     3384      80   __ip_append_data.isra.40+0x894/0xb48
 20)     3304     224   ip_append_data.part.42+0x9c/0xe8
 21)     3080     112   ip_append_data+0x6c/0x7c
 22)     2968      96   icmp_push_reply+0x80/0x144
 23)     2872      96   icmp_send+0x3c4/0x3c8
 24)     2776     192   __udp4_lib_rcv+0x5bc/0x684
 25)     2584      96   udp_rcv+0x30/0x3c
 26)     2488      32   ip_local_deliver+0xa4/0x224
 27)     2456      48   ip_rcv+0x364/0x57c
 28)     2408      64   __netif_receive_skb_core+0x4d4/0x80c
 29)     2344     128   __netif_receive_skb+0x28/0x84
 30)     2216      32   process_backlog+0xa0/0x15c
 31)     2184      80   net_rx_action+0x1f0/0x32c
 32)     2104     160   __do_softirq+0x118/0x2f0
 33)     1944     128   do_softirq+0x64/0x68
 34)     1816      32   __local_bh_enable_ip+0xb4/0xd4
 35)     1784      32   ip_finish_output+0x1f8/0xabc
 36)     1752      96   ip_output+0xf4/0x120
 37)     1656      64   ip_local_out_sk+0x48/0x54
 38)     1592      32   ip_send_skb+0x28/0xbc
 39)     1560      48   udp_send_skb+0x1b8/0x2f4
 40)     1512      80   udp_sendmsg+0x2ac/0x7a0
 41)     1432     272   inet_sendmsg+0xa4/0xd0
 42)     1160      48   sock_sendmsg+0x34/0x78
 43)     1112      32   ___sys_sendmsg+0x160/0x26c
 44)     1080     400   __sys_sendmmsg+0x98/0x180
 45)      680     320   SyS_sendmmsg+0x3c/0x54
 46)      360     360   el0_svc_naked+0x24/0x28

Best Regards
Jungseok Lee


More information about the linux-arm-kernel mailing list