[OE-core] [PATCH] kernel/rm_work: Improve interaction

ChenQi Qi.Chen at windriver.com
Wed May 20 06:01:10 UTC 2015


Hi Richard,

I've observed a side effect of this patch.
The problem is sstate reuse.

Steps to reproduce:
1) bitbake core-image-minimal
2) Change TMPDIR in local.conf
      TMPDIR = "${TOPDIR}/tmp-test"
3) bitbake core-image-minimal

In theory, sstate objects are all reused in step 3. But currently the 
do_populate_sysroot sstate object of the kernel is not reused. In 
addition, other kernel tasks like do_fetch, do_patch, do_compile, etc, 
are rerun.

Best Regards,
Chen Qi

On 05/14/2015 05:31 PM, Richard Purdie wrote:
> The do_shared_workdir task does leave behind the necessary information in
> shared-work after it completes. We don't make this a "full" sstate task
> however since that means tarring up and copying what is usually a large
> amount of data which would be better extracted straight from the original
> SCM.
>
> The issue with rm_work occurs since it removes the do_shared_workdir stamp
> meaning subsequent builds will add it back if they need to touch any kernel
> modules for example. This ends up triggering a near enough complete kernerl
> rebuild since if configure reruns, populate_sysroot has to rerun.
>
> This change promotes the task to have a "setscene" variant but it doesn't use
> any of the sstate class lifting to generate the sstate file. The sstate function
> will therefore never get called since the sstate object will never exist.
>
> We can add the task to the list of tasks rm_work promotes to a setscene variant
> and unwanted rebuilds of the kernel should be avoided.
>
> Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>
>
> diff --git a/meta/classes/kernel.bbclass b/meta/classes/kernel.bbclass
> index 74092e9..54725ba 100644
> --- a/meta/classes/kernel.bbclass
> +++ b/meta/classes/kernel.bbclass
> @@ -235,6 +235,11 @@ kernel_do_install() {
>   do_install[prefuncs] += "package_get_auto_pr"
>   
>   addtask shared_workdir after do_compile before do_compile_kernelmodules
> +addtask shared_workdir_setscene
> +
> +do_shared_workdir_setscene () {
> +	exit 1
> +}
>   
>   emit_depmod_pkgdata() {
>   	# Stash data for depmod
> diff --git a/meta/classes/rm_work.bbclass b/meta/classes/rm_work.bbclass
> index e68d02a..5e9efc1 100644
> --- a/meta/classes/rm_work.bbclass
> +++ b/meta/classes/rm_work.bbclass
> @@ -49,7 +49,7 @@ do_rm_work () {
>       cd `dirname ${STAMP}`
>       for i in `basename ${STAMP}`*
>       do
> -        for j in ${SSTATETASKS}
> +        for j in ${SSTATETASKS} do_shared_workdir
>           do
>               case $i in
>               *do_setscene*)
>
>




More information about the Openembedded-core mailing list