+/*
+ * Per-mm (process) structure dynamically allocated only if autonuma
+ * is not impossible. This links the mm to scan into the
+ * knuma_scand.mm_head and it contains the NUMA memory placement
+ * statistics for the process (generated by knuma_scand).
+ */
+struct mm_autonuma {
+ /* list node to link the "mm" into the knuma_scand.mm_head */
+ struct list_head mm_node;
+ struct mm_struct *mm;
+ unsigned long mm_numa_fault_pass; /* zeroed from here during allocation */
+ unsigned long mm_numa_fault_tot;
+ unsigned long mm_numa_fault[0];
+};
+/*
+ * Per-task (thread) structure dynamically allocated only if autonuma
+ * is not impossible. This contains the preferred autonuma_node where
+ * the userland thread should be scheduled into (only relevant if
+ * tsk->mm is not null) and the per-thread NUMA accesses statistics
+ * (generated by the NUMA hinting page faults).
+ */
+struct task_autonuma {
+ int autonuma_node;
+ /* zeroed from the below field during allocation */
+ unsigned long task_numa_fault_pass;
+ unsigned long task_numa_fault_tot;
+ unsigned long task_numa_fault[0];
+};