summaryrefslogtreecommitdiff
path: root/meta/classes/sstate.bbclass
AgeCommit message (Collapse)AuthorFiles
2014-03-11classes/sstate: don't overwrite buildhistory vardepsexcludePaul Eggleton1
This was stomping over the value added in buildhistory.bbclass, leading to task signatures *still* changing when buildhistory was added to INHERIT. Fixes [YOCTO #5897]. Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com> Signed-off-by: Saul Wold <sgw@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2014-03-05sstate: Ensure SSTATEPOSTINSTFUNCS is accounted for in signaturesRichard Purdie1
Bitbake can't interpret the python execution of these functions so include the dependency manually. [YOCTO #4507] Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2014-02-24sstate: Drop 'SafeDep' code from setscene validation functionRichard Purdie1
I have a feeling this code exists from the time before we had proper coverage of one sstate task by another task. At that time it was a "poor" persons version of that idea, we now have much better code internal to bitbake which handles this. Worse, this code actually breaks certain rebuild scenarios, e.g.: bitbake libtool-cross bitbake libtool-cross -c cleansstate rm tmp -rf bitbake libtool-cross would fail as binutils-cross wasn't installed from sstate. The easiest fix is to remove the obsolete/broken code. [YOCTO #5773] Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2014-02-24classes/sstate: fix taints being undone on execution of sstate tasksPaul Eggleton1
The code here that deletes stamps was also deleting the taint files; so forcing an sstate task with -f would force it to execute and then because the taint file was deleted in the process, the next execution would simply restore the output from sstate again. We need to exclude the taint files just like we did in bb.build.make_stamp(). Fixes [YOCTO #5805]. Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2014-02-11sstate: Exclude SSTATE_EXTRAPATH from checksumsRichard Purdie1
After the change to allow target recipes to depend on native recipes, the native checksums becomes all the more critical. Add to this that we're now accounting for pre/postfuncs and we have a cache reuse issue since the distro LSB string is getting coded in when it shouldn't be. This excludes that string and allows one set of native sstate to share checksums with another set from a different host distro. They're separated into different directories so this is fine for our use cases. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2014-02-04sstate: Improve funciton checksumsRichard Purdie1
Now that bitbake is recursing into pre/postfuncs, we need to ensure the dependencies of these functions is correct. We don't want dependencies on MACHINE or other related variables. This patch adds in appropriate variable exclusions to achieve this. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2014-01-21sstate.bbclass: remove previous version's stampRobert Yang1
There is a potential problem if we don't remove the previous version's stamp, for example: The depend chain is: libtool-native -> autoconf-native -> m4-native We have two m4-native: 1.4.9 and 1.4.7 1) Clean all of them to make a fresh build so that we can reproduce the problem $ bitbake m4-native autoconf-native libtool-native -ccleansstate 2) Build libtool-native so that the m4-native_1.4.17 will be built $ bitbake libtool-native 3) Set PREFERRED_VERSION_m4-native = "1.4.9" and build again $ bitbake libtool-native 4) Set PREFERRED_VERSION_m4-native = "1.4.17" and build again $ bitbake libtool-native -ccleansstate && bitbake libtool-native Then the build will fail: [snip] | m4: unrecognized option '--gnu' | Try `m4 --help' for more information. | autom4te: m4 failed with exit status: 1 [snip] The is because when we change m4-native to 1.4.17 and build libtool-native again: 5) libtool-native depends on autoconf-native, and autoconf-native's version isn't change, so it can remove the current stamp and mirror the sstate (the one depends on m4-native_1.4.9) from the SSTATE_DIR correctly. 6) The mirrored autoconf-native depends on m4-native_1.4.17's do_populate_sysroot, and the stamp is already there (which is made by step 2), so it would do nothing, but this is incorrect, since the one that really in the sysroot is m4-native_1.4.9, then the error happens. Remove previous version's stamp in sstate_clean() will fix the problem. [YOCTO #5422] Signed-off-by: Robert Yang <liezhi.yang@windriver.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2014-01-07sstate: add do_package to the noexec list in setscene_depvalidMing Liu1
do_package doesn't exist and are noexec anyway for native/cross/crosssdk packages. Signed-off-by: Ming Liu <ming.liu@windriver.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2014-01-06sstate: Add optimizing logic for crosssdk setscene dependenciesMing Liu1
This patch mainly aims to add optimisation for crosssdk setscene dependency validating which we haven't handled in current logic, and which I think we could have as we've already implemented to native/cross, although there are albeit not many crossdk tasks, we could still get some performance enhancement. Signed-off-by: Ming Liu <ming.liu@windriver.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2013-12-21sstate: Use datastore copies due to data changes persistingRichard Purdie1
The way the "all arch" PKGSPEC is enabled, it causes corruption of the datastore of sstate operations against other tasks. Data store copies are cheap and allow us to use that trick, resetting to a clean copy of the data afterwards. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2013-12-20sstate/sstatesig: Add populate_lic to list of arch invariant sstate tasksRichard Purdie1
Like fetch, unpack and patch, populate_lic doesn't vary between different archs so we should mark it as such. This means better sstate cache reuse with fewer duplicate files as well as less confusing sstate debugging. sstatesig also needs to account for the fact BPN is used for sstate files in these cases. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2013-12-20sstate: Convert to use ':' as a filename sperator and use SSTATE_SWSPEC globallyRichard Purdie1
Currently the code has problems differentiating between "gcc-cross" and "gcc-cross-initial" sstate files. We could add in a ton of special casing but tests show this isn't scaling well. Using a more unique separator resolves the issue. The choice of which separator to use is a hard one. We need something which isn't commonly used in PN, PV, PR, *_OS and *_ARCH which rules out '-', '_' and it needs to work ok with webservers/http which makes ';' and '%' harder. The change also sets SSTATE_SWSPEC globally since writing out differently named siginfo files for the fetch/unpack/patch tasks is a waste of diskspace, the hashes match for all PN in the majority of cases and if they don't, its not a big issue as the hash is different. This makes the results from sstate debugging more understandable. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2013-12-18sstate: Get rid of crazy name mappingRichard Purdie1
When originally developed, it was thought a task may have more than one associated sstate archive. The way the code has grown that idea is now not possible or needed. We can therefore assume one sstate archive per task and drop the crazy name mapping code. Simpler is better in this case. The downside is that various sstate archives will change name so this forces a cache rebuild. Given the other sstate changes going in at this time, this isn't really a bad thing as things would rebuild anyway. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2013-12-18sstate/gcc: Fix shared workdir handling for siginfo filesRichard Purdie1
For a shared workdir, any one of the fetch/unpack/patch tasks may run yet the PN and architecture fields in SSTATE_PKGSPEC may differ. This makes looking up the appropriate siginfo file near impossible. I've tried several different ways of resolving this and this is the neatest solution I could find, its still rather ugly. I believe the usefulness of better sstate debugging outweighs the ugliness of the code. This patch also changes the sstate_checkhashes() code to look for siginfo files rather than the actual sstate packages themselves. This means the function can be used in other contexts to find info files for tasks that may not have sstate data. It is assumed that sstate mirrors will have both files available. This is done to allow bitbake to query whether tasks have matching signatures in sstate directories or not. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2013-12-18sstate: Write out siginfo files for non-sstate tasksRichard Purdie1
Currently siginfo files are only written for sstate tasks. In order to be truly debuggable, its helpful to have the siginfo for intermediate tasks. This adds that functionality so the extra siginfo files are written out too. This will be used to add better sstate debugging in future changes. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2013-09-24sstate.bbclass: ignore the tar failure.Roy Li1
sstate_package creates hardlink from sysroot to SSTATE_BUILDDIR, and sstate_create_package stores SSTATE_BUILDDIR into a archive file by tar, these two task can be run simultaneously for different packages, and make a hardlink for a file will lead to the change of the links number of file, and if tar is reading this file, it will fail with exit code 1, and report "file changed as we read it": DEBUG: Executing shell function sstate_create_package tar: x86_64-linux/usr/share/aclocal/xorg-macros.m4: file changed as we read it 4b3e353a5[sstate.bbclass: fix parallel building issue] tries to use the tar parameter --ignore-failed-read to fix, but it does not work, and tar parameter --warning=no-file-changed can close the warning, but can not change the exit code. so close shell immediate exit, only fail if tar returns not 1 and 0. Exit codes of tar: http://www.gnu.org/software/tar/manual/html_section/Synopsis.html Signed-off-by: Roy Li <rongqing.li@windriver.com> Signed-off-by: Saul Wold <sgw@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2013-09-12sstate.bbclass: fix parallel building issueRoy.Li1
sstate_package creates hardlink from sysroot to SSTATE_BUILDDIR, then sstate_create_package will store SSTATE_BUILDDIR into a archive file by tar, but once other packages install the same file into sysroot, the creating the archive file will fail with below error: DEBUG: Executing shell function sstate_create_package tar: x86_64-linux/usr/share/aclocal/xorg-macros.m4: file changed as we read it This kind of error is harmless, use --ignore-failed-read to ignore it. The error in tar occurs when the timestamp of the file changes and this can happen when the number of symlinks change. The file will be included in the archive. [YOCTO #5122] Signed-off-by: Roy.Li <rongqing.li@windriver.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2013-09-01meta: Don't use deprecated bitbake APIRichard Purdie1
These have been deprecated for a long time, convert the remaining references to the correct modules and prepare for removal of the compatibility support from bitbake. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2013-08-23sstate: Fix the relative symlink replacement codeRichard Purdie1
ant reported on irc that the sstate absolute to relative symlink creation code wasn't working in klibc. He was correct although the level of breakage is rather surprising since it only worked for one level of symlink (usr/include) with everything else being broken. The reason is probably that nothing really uses absolute paths, we use relative paths where at all possible already. Nothing in the target sysroot should use absolute paths for a start. In this regard, the klibc-dev package is broken and needs fixing. It will currently break when building for one machine, then switching to another of the same TUNE_PKGARCH and installing from sstate but that is a separate issue. This patch fixes the symlink creation code by firstly passing in the correct value we need (where the symlink will end up) and seccondly, actually using it. I've also tweaked the debug message to contain appropriate information and got right of the double "//" value the existing code created in favour of the form './..' which looks neater. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2013-07-05sstate.bbclass: Add an extra check for sstate_mirrorsJoe MacDonald1
BB_NO_NETWORK disables any fetching, however if we're using an external sstate cache, we may want to be able to fetch those objects even if we are not fetching the upstream sources. Denote this situation by setting SSTATE_MIRROR_ALLOW_NETWORK in local.conf. When it is found, for sstate cache fetches, mask off BB_NO_NETWORK for the local function. Signed-off-by: Joe MacDonald <joe.macdonald@windriver.com> Signed-off-by: Saul Wold <sgw@linux.intel.com>
2013-06-11sstate.bbclass: fetch archive+siginfo in a single pstaging_fetchChristopher Larson1
This avoids unnecessary duplication of setup. The only visible change in behavior will be the case if siginfo exists and the archive does not, in which case it'll redownload both, but this doesn't seem unresasonable to me, particularly since the archive is downloaded first, making this case particularly unlikely. Signed-off-by: Christopher Larson <chris_larson@mentor.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2013-06-11sstate.bbclass: kill MIRRORS and FILESPATH to speed up fetchingChristopher Larson1
The default FILESPATH isn't really of use, as we don't expect to find sstate archives buried in layer recipe directories, and the default MIRRORS is intended for use for fetching SRC_URI, not sstate. Signed-off-by: Christopher Larson <chris_larson@mentor.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2013-06-07base/useradd/sstate: Ensure do_package setscene has correct fakeroot ↵Richard Purdie1
dependencies The do_package_setscene task needs to depend on fakeroot in order to correctly install its files. We can whitelist the dependency in the sstate handling code for some performance improvements since we only need this if we're installing the package from sstate. Also use an append operator in base.bbclass for clarity. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2013-06-04sstate.bbclass: fixup extra hardcoded pathsJackie Huang1
sstate has a logic to fixup hardcoded paths in scripts, but it misses in some specific cases, so add EXTRA_STAGING_FIXMES to the fixup hardcoded paths mechanism, so that we can specify what hardcoded paths need to be fixed in a recipe, e.g. EXTRA_STAGING_FIXMES = "STAGING_BINDIR_TOOLCHAIN" Signed-off-by: Jackie Huang <jackie.huang@windriver.com> Signed-off-by: Saul Wold <sgw@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2013-05-09classes/lib: Update to use print as a function callRichard Purdie1
In python 3 print is a function call. In some cases bb.note is a more appropriate call to make. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2013-05-01sstate.bbclass: make hard links for staging filesRobert Yang1
Make hard links for staging files instead of copy to save the disk space (3G will be saved for a core-image-sato build), and it doesn't affect much on the build time. The following directories are affected: 1) The sysroot 2) The DEPLOY_DIR 3) The pkgdata [YOCTO #4372] Signed-off-by: Robert Yang <liezhi.yang@windriver.com> Signed-off-by: Saul Wold <sgw@linux.intel.com>
2013-04-29sstate: Set umask to 002 before packaging runsPhil Blundell1
Otherwise we might end up creating directories under sstate-cache with whatever random umask has been selected for the task that we're trying to package. This would be a bad thing since it might result in losing group write access for newly created dirs, and/or losing group read access for the sstate files themselves. Signed-off-by: Phil Blundell <philb@gnu.org> Signed-off-by: Saul Wold <sgw@linux.intel.com>
2013-04-03classes/sstate: avoid traceback when no files have been stagedPaul Eggleton1
If no files have been staged we want to continue without error instead of showing a traceback. Fixes [YOCTO #4056]. Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2013-04-02sstate.bbclass: remove reference to gtk+-nativeAndreas Müller1
Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2013-04-02sstate: add -f to mv when moving sstate files into placeJeff Polk1
Under some conditions (ACLs enabled, NFS) mv can interactively prompt before overwriting files. Avoid hanging builds in that case by using -f which should be harmless in other cases. Signed-off-by: Jeff Polk <jeff.polk@windriver.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2013-03-05sstate.bbclass: Enclose sstate search parameter with quotesLeonardo Sandoval1
In case filenames have spaces, execution of the function sstater_install will hang, so the print parameter %s must be enclosed with quotes. Signed-off-by: Leonardo Sandoval <leonardo.sandoval@freescale.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2013-03-05sstate: Add gtk-update-icon-cache-native to postinst recipes listRichard Purdie1
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2013-03-05sstate.bbclass: consider postinstall dependencies tooLaurentiu Palcu1
When checking the dependencies in setscene_depvalid(), make sure we also consider those dependencies needed when running the postinstalls on host. [YOCTO #3918] Signed-off-by: Laurentiu Palcu <laurentiu.palcu@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2013-02-06sstate.bbclass: Ensure build directory is cleaned to start withRichard Purdie1
This directory is cleaned upon completion however if a previous build crashes, it can lead to corrpution, hence ensure its clean at the start too. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2013-02-06sstate/path.py: Add copyhardlinktree() function and use for performance ↵Richard Purdie1
optimisation Add a function which copys a tree as a set of hardlinks to the original files, then use this in sstate to reduce some of the overhead of sstate package creation since the file isn't actually copied. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2013-01-30sstate: Move debug comment to more logical placeRichard Purdie1
The same log message gets output multiple times in the log which look confusing and is rather pointless. Move the log message to the correct level. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2013-01-25sstate: Add optimisation for useradd injected dependenciesRichard Purdie1
useradd.bbclass adds sstate dependencies on base-passwd, shadow-native and shadow-sysroot. Due to the way these are injected, they interact badly with the other dependency validation logic and end up pulling in dependencies we don't actually need. This patch adds code to optimise those cases out. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2013-01-25Split do_packagedata task from do_packageRichard Purdie1
Currently, do_rootfs has a dependency on all the do_package output being present due to its usage of the pkgdata directories. This means that if you run: bitbake xxxx-image -c rootfs you end up having to fetch and unpack all the do_package data which is usually large and inefficient. It also means rm_work has to leave all the do_package data lying around so rootfs works. This patch splits the actual creation of the pkgdata directory off into a separate task, "packagedata" which happens immediately after do_package. We can then remap the dependencies so this task is depended upon, not do_package. Sstate can then be programmed not to require do_package at the appropriate times. Whilst this patch doesn't do so, it opens the possibility of rm_work wiping out the do_package output from WORKDIR as long as it also removed the do_package stamp (both normal and setscene variants) and allowing more space savings with rm_work which has been regularly requested. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2013-01-15sstate: Do not add the --no-run-if-empty arguement to xargs when on Darwin, ↵Martin Ertsaas1
as it is not supported. Signed-off-by: Saul Wold <sgw@linux.intel.com>
2013-01-09sstate.bbclass:specify function dirs to avoid raceHongxu Jia1
Specify dirs in which the shell function "sstate_create_package" and "sstate_unpack_package" are executed and don't use ${B} as default dirs to avoid possible race with task do_rootfs at deb image creation time. [YOCTO #3674] Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2012-12-17sstate.bbclass: Improve stamp-extra-info task handling to avoid warningsRichard Purdie1
If you change a machine to a different package architecture, you will see sstate errors about overwriting files as the code stands today. Instead it should clean out the files safely and correctly. This patch changes the naming of stamp-extra-info manifest files to avoid this problem. It will potentially trigger warnings during builds in existing TMPDIRs until the system adjusts to the new naming, these are harmless. [YOCTO #3521] Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2012-12-17sstate.bbclass: Remove unused/uneeded variableRichard Purdie1
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2012-12-17sstate.bbclass: Simplify overcomplicated cleanall functionRichard Purdie1
The code was written before SSTATETASKNAMES existed. Since it does exist, lets simply the code. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2012-12-06sstate: fix typoSaul Wold1
Signed-off-by: Saul Wold <sgw@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2012-12-06sstate: fix typoRichard Purdie1
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2012-12-06sstate: fetch .siginfo files from SSTATE_MIRRORSaul Wold1
This would be useful for doing siginfo compares to understand why a build is not reusing something when using SSTATE_MIRROR. No error will be reported if it fails to find the .siginfo file [YOCTO #2898] [RP: Small tweaks] Signed-off-by: Saul Wold <sgw@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2012-12-05sstate.bbclass: fix detection of owners matching sstate filesMartin Jansa1
* without this patch: Python 2.7.3 >>> sstate_search_cmd = "grep -rl /OE/jansa-test/shr-core/tmp-eglibc/pkgdata/armv7a-vfp-neon-oe-linux-gnueabi/runtime-reverse/vim-common /OE/jansa-test/shr-core/tmp-eglibc/sstate-control --exclude=master.list | sed -e 's:^.*/::' -e 's:\.populate-sysroot::'" >>> cmd_array = sstate_search_cmd.split(' ') >>> search_output = subprocess.Popen(cmd_array, stdout=subprocess.PIPE).communicate()[0] grep: |: No such file or directory grep: sed: No such file or directory * Adding shell=True and using cmd string instead of array makes it work: >>> search_output = subprocess.Popen(sstate_search_cmd, shell=True, stdout=subprocess.PIPE).communicate()[0] >>> print search_output manifest-armv7a-vfp-neon-gvim.package manifest-armv7a-vfp-neon-vim-tiny.package manifest-armv7a-vfp-neon-vim.package But still isn't 100% reliable, I guess it's caused by some other package being removed from sstate while grep is already running. So sometimes grep can show error on STDERR >>> search_output = subprocess.Popen(sstate_search_cmd, shell=True, stdout=subprocess.PIPE).communicate()[0] grep: /OE/jansa-test/shr-core/tmp-eglibc/sstate-control/manifest-armv7a-vfp-neon-systemtap.package: No such file or directory Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2012-12-05sstate.bbclass: fixed file-conflict checkEnrico Scholz1
The value of subprocess.Popen().communicate()[0] is a string. Checking for '!= None' will always match causing bogus warnings regarding already staged files. Signed-off-by: Enrico Scholz <enrico.scholz@sigma-chemnitz.de> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2012-11-26packagegroup/allarch: Convert to use allarch classRichard Purdie1
Currently there is some odd behaviour of the packagegroup class in relation to sstate since it sets PACKAGE_ARCH = "all" but does not use the allarch class leading to it being undetected by sstate. Previously it was not possible to use allarch as the recipe couldn't "undo" settings made by the allarch class. Since this no longer happens when PACKAGE_ARCH != all, we can use the allarch class. This patch also fixes up one case we need to preserve TRANSLATED_TARGET_ARCH and ensures sstate only assumes allarch when PACKAGE_ARCH is "all". Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2012-11-24sstate: Explicitly define populate_sysroot task relationshipsRichard Purdie1
Clean up and clarify the populate_sysroot task dependencies. Target sysroot packages do need their dependencies installed, as do some target/cross relationships. We can whitelist the *-initial dependencies as these are never needed indirectly. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>