__entry->pfn, __entry->rmap_item, __entry->mm)
 );
 
+/**
+ * ksm_advisor - called after the advisor has run
+ *
+ * @scan_time:         scan time in seconds
+ * @pages_to_scan:     new pages_to_scan value
+ * @cpu_percent:       cpu usage in percent
+ *
+ * Allows to trace the ksm advisor.
+ */
+TRACE_EVENT(ksm_advisor,
+
+       TP_PROTO(s64 scan_time, unsigned long pages_to_scan,
+                unsigned int cpu_percent),
+
+       TP_ARGS(scan_time, pages_to_scan, cpu_percent),
+
+       TP_STRUCT__entry(
+               __field(s64,            scan_time)
+               __field(unsigned long,  pages_to_scan)
+               __field(unsigned int,   cpu_percent)
+       ),
+
+       TP_fast_assign(
+               __entry->scan_time      = scan_time;
+               __entry->pages_to_scan  = pages_to_scan;
+               __entry->cpu_percent    = cpu_percent;
+       ),
+
+       TP_printk("ksm scan time %lld pages_to_scan %lu cpu percent %u",
+                       __entry->scan_time, __entry->pages_to_scan,
+                       __entry->cpu_percent)
+);
+
 #endif /* _TRACE_KSM_H */
 
 /* This part must be outside protection */
 
        advisor_ctx.cpu_time = cpu_time;
 
        ksm_thread_pages_to_scan = pages;
+       trace_ksm_advisor(scan_time, pages, cpu_percent);
 }
 
 static void advisor_stop_scan(void)