diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 481f11a67e29..9291b284d482 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -297,3 +297,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_ctl_dirty_rate); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_check_hibernation_swap); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_save_cpu_resume); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_save_hib_resume_bdev); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_encrypt_page); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_init_aes_encrypt); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_skip_swap_map_write); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_post_image_save); diff --git a/include/trace/hooks/bl_hib.h b/include/trace/hooks/bl_hib.h index f47f3760ffe4..7a5dd310a6aa 100644 --- a/include/trace/hooks/bl_hib.h +++ b/include/trace/hooks/bl_hib.h @@ -23,6 +23,22 @@ DECLARE_HOOK(android_vh_save_hib_resume_bdev, TP_PROTO(struct block_device *hib_resume_bdev), TP_ARGS(hib_resume_bdev)); +DECLARE_HOOK(android_vh_encrypt_page, + TP_PROTO(void *buf), + TP_ARGS(buf)); + +DECLARE_HOOK(android_vh_init_aes_encrypt, + TP_PROTO(void *unused), + TP_ARGS(unused)); + +DECLARE_HOOK(android_vh_skip_swap_map_write, + TP_PROTO(bool *skip), + TP_ARGS(skip)); + +DECLARE_HOOK(android_vh_post_image_save, + TP_PROTO(unsigned short root_swap), + TP_ARGS(root_swap)); + #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 d55b2c949c94..c03931d19679 100644 --- a/kernel/power/swap.c +++ b/kernel/power/swap.c @@ -454,6 +454,7 @@ static int swap_write_page(struct swap_map_handle *handle, void *buf, { int error = 0; sector_t offset; + bool skip = false; if (!handle->cur) return -EINVAL; @@ -467,9 +468,12 @@ static int swap_write_page(struct swap_map_handle *handle, void *buf, if (!offset) return -ENOSPC; handle->cur->next_swap = offset; - error = write_page(handle->cur, handle->cur_swap, hb); - if (error) - goto out; + trace_android_vh_skip_swap_map_write(&skip); + if (!skip) { + error = write_page(handle->cur, handle->cur_swap, hb); + if (error) + goto out; + } clear_page(handle->cur); handle->cur_swap = offset; handle->k = 0; @@ -564,6 +568,7 @@ static int save_image(struct swap_map_handle *handle, ret = snapshot_read_next(snapshot); if (ret <= 0) break; + trace_android_vh_encrypt_page(data_of(*snapshot)); ret = swap_write_page(handle, data_of(*snapshot), &hb); if (ret) break; @@ -580,6 +585,7 @@ static int save_image(struct swap_map_handle *handle, if (!ret) pr_info("Image saving done\n"); swsusp_show_speed(start, stop, nr_to_write, "Wrote"); + trace_android_vh_post_image_save(root_swap); return ret; } @@ -923,6 +929,7 @@ int swsusp_write(unsigned int flags) pr_err("Cannot get swap writer\n"); return error; } + trace_android_vh_init_aes_encrypt(NULL); if (flags & SF_NOCOMPRESS_MODE) { if (!enough_swap(pages)) { pr_err("Not enough free swap\n");