diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 9322df8ce828..f742029f9086 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -406,3 +406,5 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_delayacct_wpcopy_end); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_usb_dev_suspend); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_usb_dev_resume); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sound_usb_support_cpu_suspend); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_hibernated_do_mem_alloc); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_hibernate_save_cmp_len); diff --git a/include/trace/hooks/bl_hib.h b/include/trace/hooks/bl_hib.h index 7a5dd310a6aa..f334e2b61320 100644 --- a/include/trace/hooks/bl_hib.h +++ b/include/trace/hooks/bl_hib.h @@ -39,6 +39,15 @@ DECLARE_HOOK(android_vh_post_image_save, TP_PROTO(unsigned short root_swap), TP_ARGS(root_swap)); +DECLARE_HOOK(android_vh_hibernated_do_mem_alloc, + TP_PROTO(unsigned long nr_pages, unsigned int swsusp_header_flags, + int *ret), + TP_ARGS(nr_pages, swsusp_header_flags, ret)); + +DECLARE_HOOK(android_vh_hibernate_save_cmp_len, + TP_PROTO(size_t cmp_len), + TP_ARGS(cmp_len)); + #endif /* _TRACE_HOOK_BL_HIB_H */ /* This part must be outside protection */ #include diff --git a/kernel/power/swap.c b/kernel/power/swap.c index 017a55966411..f4f7f8d03cd4 100644 --- a/kernel/power/swap.c +++ b/kernel/power/swap.c @@ -883,6 +883,7 @@ static int save_compressed_image(struct swap_map_handle *handle, if (ret) goto out_finish; } + trace_android_vh_hibernate_save_cmp_len(data[thr].cmp_len + CMP_HEADER); } wait_event(crc->done, atomic_read(&crc->stop)); @@ -955,9 +956,20 @@ int swsusp_write(unsigned int flags) struct snapshot_handle snapshot; struct swsusp_info *header; unsigned long pages; - int error; + int error = 0; pages = snapshot_get_image_size(); + + /* + * The memory allocated by this vendor hook is later freed as part of + * PM_POST_HIBERNATION notifier call. + */ + trace_android_vh_hibernated_do_mem_alloc(pages, flags, &error); + if (error < 0) { + pr_err("Failed to allocate required memory\n"); + return error; + } + error = get_swap_writer(&handle); if (error) { pr_err("Cannot get swap writer\n");