From 9a810343abebf69f668d5d132d48ecd2b475cb08 Mon Sep 17 00:00:00 2001 From: Nicolas Boichat Date: Fri, 16 Mar 2018 10:15:30 +0800 Subject: hammer: Add stack analysis annotations make BOARD=staff SECTION=RO analyzestack | grep Task Task: RWSIG, Max size: 780 (716 + 64), Allocated size: 1280 Task: HOOKS, Max size: 960 (896 + 64), Allocated size: 2048 Task: CONSOLE, Max size: 840 (776 + 64), Allocated size: 1024 make BOARD=staff SECTION=RW analyzestack | grep Task Task: HOOKS, Max size: 1216 (1152 + 64), Allocated size: 2048 Task: TOUCHPAD, Max size: 548 (484 + 64), Allocated size: 640 Task: CONSOLE, Max size: 468 (404 + 64), Allocated size: 1024 Task: KEYSCAN, Max size: 408 (344 + 64), Allocated size: 488 BRANCH=poppy BUG=b:75234264 TEST=See results above. No more (or few) missing annotations in full results. No task stack overflow. Change-Id: Iaae99e0129f5eac3f0ed3bcacd89fffbceca7a7f Signed-off-by: Nicolas Boichat Reviewed-on: https://chromium-review.googlesource.com/966043 Reviewed-by: Vincent Palatin --- board/hammer/analyzestack.yaml | 96 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 board/hammer/analyzestack.yaml diff --git a/board/hammer/analyzestack.yaml b/board/hammer/analyzestack.yaml new file mode 100644 index 0000000000..1294546b17 --- /dev/null +++ b/board/hammer/analyzestack.yaml @@ -0,0 +1,96 @@ +# Size of extra stack frame needed by exception context switch. +exception_frame_size: 64 +# Add some missing calls. +add: + # usb_ep_event: grep ep_._evt -A 1 build/hammer/RW/ec.RW.smap + usb_reset[chip/stm32/usb.c:370]: + - hid_touchpad_event + - hid_keyboard_event + - usb_update_ep_event + - i2c_usb__ep_event + usb_interrupt_handle_wake[chip/stm32/usb.c:608]: + - hid_touchpad_event + - hid_keyboard_event + - usb_update_ep_event + - i2c_usb__ep_event + # usb_ep_tx/rx: grep ep_._[rt]x -B 1 -A 1 build/hammer/RW/ec.RW.smap + usb_interrupt[chip/stm32/usb.c:640]: + - ep0_rx + - hid_keyboard_rx + - usb_update_ep_rx + - i2c_usb__ep_rx + - ep0_tx + - hid_touchpad_tx + - hid_keyboard_tx + - usb_update_ep_tx + - i2c_usb__ep_tx + # usb_interface_request + ep0_tx[chip/stm32/usb.c:337]: + - hid_touchpad_iface_request + - hid_keyboard_iface_request + ep0_rx[chip/stm32/usb.c:193]: + - hid_touchpad_iface_request + - hid_keyboard_iface_request + # Queue functions + queue_advance_tail[common/queue.c:116]: + - queue_add_direct + queue_add_memcpy[common/queue.c:152]: + - memcpy + queue_add_memcpy[common/queue.c:157]: + - memcpy + queue_read_safe.lto_priv.98[common/queue.c:174]: + - memcpy + queue_read_safe.lto_priv.98[common/queue.c:179]: + - memcpy + queue_advance_head[common/queue.c:105]: + - queue_remove_direct + queue_add_direct[common/queue_policies.c:18]: + - usb_i2c_written + - usb_written + - update_out_handler + queue_remove_direct[common/queue_policies.c:27]: + - usb_read + vfnprintf: + # This covers all the addchar in vfnprintf, but stackanalyzer does not + # realize that... + - __tx_char +# gpio_interrupt[chip/stm32/gpio.c:146]: +# TODO: All GPIO interrupt handlers should follow here + handle_command[common/console.c:248]: + - { name: __cmds, stride: 16, offset: 4 } + hook_task[common/hooks.c:197]: + - { name: __deferred_funcs, stride: 4, offset: 0 } + - { name: __hooks_second, stride: 8, offset: 0 } + - { name: __hooks_tick, stride: 8, offset: 0 } + # Note: This assumes worse case, where all hook functions can be called from + # any hook_notify call + hook_notify[common/hooks.c:127]: + - { name: __hooks_pre_freq_change, stride: 8, offset: 0 } + - { name: __hooks_freq_change, stride: 8, offset: 0 } + - { name: __hooks_chipset_pre_init, stride: 8, offset: 0 } + - { name: __hooks_chipset_resume, stride: 8, offset: 0 } + - { name: __hooks_chipset_startup, stride: 8, offset: 0 } + - { name: __hooks_chipset_suspend, stride: 8, offset: 0 } + - { name: __hooks_sysjump, stride: 8, offset: 0 } + - { name: __hooks_chipset_shutdown, stride: 8, offset: 0 } + - { name: __hooks_ac_change, stride: 8, offset: 0 } + - { name: __hooks_battery_soc_change, stride: 8, offset: 0 } + - { name: __hooks_chipset_reset, stride: 8, offset: 0 } + - { name: __hooks_lid_change, stride: 8, offset: 0 } + - { name: __hooks_pwrbtn_change, stride: 8, offset: 0 } + - { name: __hooks_tablet_mode_change, stride: 8, offset: 0 } + - { name: __hooks_usb_change, stride: 8, offset: 0 } + jump_to_image.lto_priv.135[common/system.c:568]: + - None + irq_4_handler[core/cortex-m0/init.S:165]: + - exception_panic +remove: + - panic_assert_fail + - [queue_add_direct, update_out_handler, [queue_add_unit, queue_add_memcpy], queue_add_direct, update_out_handler] + # set_touchpad_report/keyboard_state_changed add elements to a queue, but + # _not_ the queue that would call update_out handler + - [ touchpad_task, queue_add_unit, queue_add_direct, update_out_handler] + - [ keyboard_scan_task, queue_add_unit, queue_add_direct, update_out_handler] + # keyboard_raw_drive_column can't recurse more than once + - [keyboard_raw_drive_column, keyboard_raw_drive_column, keyboard_raw_drive_column] + - [system_common_shutdown, system_run_image_copy, jump_to_image.lto_priv.135, hook_notify, system_common_shutdown] -- cgit v1.2.1