summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2021-03-24 11:00:04 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2021-04-06 09:31:24 +0100
commit9982b2c0f2a4bf6d451b532856ca6cf126985f22 (patch)
tree811590ad5eb2ab18891e2144032e879b7b775920
parent232cb7b0553f844be695d26f55aaf531029a6a9a (diff)
downloadpoky-9982b2c0f2a4bf6d451b532856ca6cf126985f22.tar.gz
bitbake: runqueue: Further fixes for confused setscene tasks
There is further evidence of tasks ending up being "covered" and "notcovered" which shouldn't happen and is bad. The code that caused this problem last time appears to have issues where stamps for tasks already exist. Split out the setscene stamp checking code to a separate function and use this when checking "hard dependencies" (like pseudo-native) so that if the stamps exist and it will be "covered", it is not put on the notcovered list. (Bitbake rev: a1848a481e36b729c8e4130c394b1d462d4b488a) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--bitbake/lib/bb/runqueue.py39
1 files changed, 26 insertions, 13 deletions
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py
index 80d7f6ca6b..cd56a55472 100644
--- a/bitbake/lib/bb/runqueue.py
+++ b/bitbake/lib/bb/runqueue.py
@@ -2457,6 +2457,9 @@ class RunQueueExecute:
2457 if dep in self.scenequeue_covered or dep in self.scenequeue_notcovered: 2457 if dep in self.scenequeue_covered or dep in self.scenequeue_notcovered:
2458 # dependency could be already processed, e.g. noexec setscene task 2458 # dependency could be already processed, e.g. noexec setscene task
2459 continue 2459 continue
2460 noexec, stamppresent = check_setscene_stamps(dep, self.rqdata, self.rq, self.stampcache)
2461 if noexec or stamppresent:
2462 continue
2460 logger.debug2("%s was unavailable and is a hard dependency of %s so skipping" % (task, dep)) 2463 logger.debug2("%s was unavailable and is a hard dependency of %s so skipping" % (task, dep))
2461 self.sq_task_failoutright(dep) 2464 self.sq_task_failoutright(dep)
2462 continue 2465 continue
@@ -2795,6 +2798,26 @@ def build_scenequeue_data(sqdata, rqdata, rq, cooker, stampcache, sqrq):
2795 event = bb.event.StaleSetSceneTasks(found[mc]) 2798 event = bb.event.StaleSetSceneTasks(found[mc])
2796 bb.event.fire(event, cooker.databuilder.mcdata[mc]) 2799 bb.event.fire(event, cooker.databuilder.mcdata[mc])
2797 2800
2801def check_setscene_stamps(tid, rqdata, rq, stampcache, noexecstamp=False):
2802
2803 (mc, fn, taskname, taskfn) = split_tid_mcfn(tid)
2804
2805 taskdep = rqdata.dataCaches[mc].task_deps[taskfn]
2806
2807 if 'noexec' in taskdep and taskname in taskdep['noexec']:
2808 bb.build.make_stamp(taskname + "_setscene", rqdata.dataCaches[mc], taskfn)
2809 return True, False
2810
2811 if rq.check_stamp_task(tid, taskname + "_setscene", cache=stampcache):
2812 logger.debug2('Setscene stamp current for task %s', tid)
2813 return False, True
2814
2815 if rq.check_stamp_task(tid, taskname, recurse = True, cache=stampcache):
2816 logger.debug2('Normal stamp current for task %s', tid)
2817 return False, True
2818
2819 return False, False
2820
2798def update_scenequeue_data(tids, sqdata, rqdata, rq, cooker, stampcache, sqrq, summary=True): 2821def update_scenequeue_data(tids, sqdata, rqdata, rq, cooker, stampcache, sqrq, summary=True):
2799 2822
2800 tocheck = set() 2823 tocheck = set()
@@ -2805,24 +2828,14 @@ def update_scenequeue_data(tids, sqdata, rqdata, rq, cooker, stampcache, sqrq, s
2805 if tid in sqdata.valid: 2828 if tid in sqdata.valid:
2806 sqdata.valid.remove(tid) 2829 sqdata.valid.remove(tid)
2807 2830
2808 (mc, fn, taskname, taskfn) = split_tid_mcfn(tid) 2831 noexec, stamppresent = check_setscene_stamps(tid, rqdata, rq, stampcache, noexecstamp=True)
2809
2810 taskdep = rqdata.dataCaches[mc].task_deps[taskfn]
2811 2832
2812 if 'noexec' in taskdep and taskname in taskdep['noexec']: 2833 if noexec:
2813 sqdata.noexec.add(tid) 2834 sqdata.noexec.add(tid)
2814 sqrq.sq_task_skip(tid) 2835 sqrq.sq_task_skip(tid)
2815 bb.build.make_stamp(taskname + "_setscene", rqdata.dataCaches[mc], taskfn)
2816 continue
2817
2818 if rq.check_stamp_task(tid, taskname + "_setscene", cache=stampcache):
2819 logger.debug2('Setscene stamp current for task %s', tid)
2820 sqdata.stamppresent.add(tid)
2821 sqrq.sq_task_skip(tid)
2822 continue 2836 continue
2823 2837
2824 if rq.check_stamp_task(tid, taskname, recurse = True, cache=stampcache): 2838 if stamppresent:
2825 logger.debug2('Normal stamp current for task %s', tid)
2826 sqdata.stamppresent.add(tid) 2839 sqdata.stamppresent.add(tid)
2827 sqrq.sq_task_skip(tid) 2840 sqrq.sq_task_skip(tid)
2828 continue 2841 continue