|
@@ -3130,8 +3130,10 @@ task_hot(struct task_struct *p, u64 now, struct sched_domain *sd)
|
|
|
}
|
|
|
|
|
|
#define LBF_ALL_PINNED 0x01
|
|
|
-#define LBF_NEED_BREAK 0x02
|
|
|
-#define LBF_ABORT 0x04
|
|
|
+#define LBF_NEED_BREAK 0x02 /* clears into HAD_BREAK */
|
|
|
+#define LBF_HAD_BREAK 0x04
|
|
|
+#define LBF_HAD_BREAKS 0x0C /* count HAD_BREAKs overflows into ABORT */
|
|
|
+#define LBF_ABORT 0x10
|
|
|
|
|
|
/*
|
|
|
* can_migrate_task - may task p from runqueue rq be migrated to this_cpu?
|
|
@@ -4508,7 +4510,9 @@ redo:
|
|
|
goto out_balanced;
|
|
|
|
|
|
if (lb_flags & LBF_NEED_BREAK) {
|
|
|
- lb_flags &= ~LBF_NEED_BREAK;
|
|
|
+ lb_flags += LBF_HAD_BREAK - LBF_NEED_BREAK;
|
|
|
+ if (lb_flags & LBF_ABORT)
|
|
|
+ goto out_balanced;
|
|
|
goto redo;
|
|
|
}
|
|
|
|