subtree updates

meta-security: a397a38ed9..53c5cc794f:
  Anton Antonov (2):
        Fix PACKAGECONFIG check in Parsec OEQA tests
        Flush caches after OEQA tests

  Armin Kuster (6):
        checksecurity: update to 2.0.16
        krill: forced to inclued fetch hashes.
        suricata: Fixup to work within the recent crate changes.
        suricata: Missed on crate depends
        parsec-tool: update SRC_URI hash
        parsec-service: fix SRC_URI hash

  Gowtham Suresh Kumar (2):
        meta-parsec: Disable RSA-OAEP OEQA tests for Parsec PKCS11 backend
        parsec-service: Update parsec recipes to 1.2.0 and parsec-tool to 0.6.0

  Patrick Williams (1):
        libwhisker2-perl: adjust perl-version variable

meta-openembedded: 17243e70c8..c5f330bc9a:
  Alex Yao (3):
        lcov: Fix Perl Path
        lcov: Upgrade 1.14 -> 1.16
        lcov: Fix homepage

  Ari Parkkila (1):
        python3-appdirs: add native and nativesdk to BBCLASSEXTEND

  Arsalan H. Awan (1):
        meta-networking/licenses/netperf: remove unused license

  Bartosz Golaszewski (11):
        reboot-mode: put the build artifacts in ${B}
        libgpiod: enable all features for ptest
        libgpiod: drop unneeded S assignment
        libgpiod: generalize the local files directories
        libgpiod: update to v2.0.1
        python3-gpiod: don't hardcode the project version in recipe
        python3-gpiod: add missing run-time dependencies
        libgpiod: install the libgpiosim header
        python3-gpiod: fetch sources from pypi
        libgpiod: fold libgpiod-src.inc into libgpiod.inc
        libgpiod: remove test executables from ${bindir}

  Chen Qi (1):
        android-tools: fix systemd service setting

  Enrico Scholz (1):
        sox: remove ffmpeg dependency

  Etienne Cordonnier (4):
        uutils-coreutils: Add crates checksum
        uutils-coreutils: remove obsolete comment
        uutils-coreutils: upgrade 0.0.17 -> 0.0.18
        uutils-coreutils: disable musl support

  Ever ATILANO (4):
        meta-python: python3-path: Add ptest
        meta-python: python3-lorem: Add ptest
        meta-oe: recipes-support: dc: Add ptest
        meta-oe: recipes-extended: bitwise: Add ptest

  Gianfranco Costamagna (1):
        vbxguestdrivers: upgrade 7.0.4 -> 7.0.8

  Jasper Orschulko (1):
        python3-gcovr: Add missing runtime dependency

  Jayanth Othayoth (1):
        etcd-cpp-apiv3: add recipe

  Johannes Kirchmair (1):
        redirect unwanted error message in nginx install

  Johannes Pointner (1):
        python3-pyzstd: add new recipe

  Kai Kang (16):
        xfce4-taskmanager: 1.5.2 -> 1.5.5
        xfce4-terminal: 1.0.0 -> 1.0.4
        syslog-ng: not deliver syslog-ng-update-virtualenv
        xfce4-notifyd: 0.6.3 -> 0.8.2
        xfce4-screenshooter: 1.9.10 -> 1.10.3
        thunar: 4.18.0 -> 4.18.4
        thunar-media-tags-plugin: 0.3.0 -> 0.4.0
        libxfce4util: 4.18.0 -> 4.18.1
        libxfce4ui: 4.18.0 -> 4.18.3
        xfce4-settings: 4.18.0 -> 4.18.2
        xfce4-session: 4.18.0 -> 4.18.2
        xfce4-panel: 4.18.0 -> 4.18.3
        thunar-archive-plugin: 0.5.0 -> 0.5.1
        xfce4-power-manager: 4.18.0 -> 4.18.1
        garcon: 4.18.0 -> 4.18.1
        xfce4-screensaver: 4.16.0 -> 4.18.1

  Khem Raj (36):
        krb5: Fix build with autoconf 2.72
        cyrus-sasl: Fix autoconf patch to work with new autoconf 2.72
        gmime: Update to 3.2.13
        imagemagick: Update to 7.1.1
        mpv: Upgrade to 0.35.1
        fwknop: Use pkg-config instead of gpgme-config
        fwknop: Fix AS_IF configure syntax
        libstemmer: Update to 2.2.0
        libidn: Update largefile m4 macros
        emacs: Fix build with autconf 2.72+
        ptest-packagelists-meta-oe: Remove minicoredumper from PTESTS_FAST_META_OE on musl
        poco: Remove pushd/popd from run-ptest
        surf: Fix build with gtkwebkit 2.40
        libio-pty-perl: Fix build with musl/clang
        meta-gnome: Update patch status for several recipes
        libnet-ssleay-perl: Fix patch upstream status
        meta-xfce: Fix missing upstream status in patches
        meta-multimedia: Fix missing upstream status in several patches
        meta-webserver: Fix missing upstream status on patches
        babl: Drop clang10 workaround for mips/rv64
        babl: Package /usr/lib/babl-0.1/ directory
        libtinyxml2: Add ptest support
        ptest-packagelists-meta-oe: Add libtinyxml2
        minifi-cpp: Always use stat on 64bit linux
        libdnet: Upgrade to 1.16.3
        python3-pyruvate: regenerate with updated bbclass
        monkey,webmin: Fix upstream patch status
        python3-pyruvate: Upgrade to 1.2.1
        onig: Ignore .debug directories while finding ptests
        python3-h5py: Fix TMPDIR references in dbg files
        python3-pandas: Fix TMPDIR references in dbg files
        fwupd: Do not emit build time paths into generated headers
        libcereal: Fix TMPDIR leaking into debug_str section
        xmlrpc-c: Upgrade to 1.59.01
        grilo: Fix buildpaths in generated header file
        python3-click: Fix ptest failure

  Leon Anavi (2):
        libpcsc-perl: Add recipe
        pcsc-tools: Add runtime dependencies

  Linus Jacobson (1):
        khronos-cts: Replace wayland feature dependancy with vulkan

  Markus Volk (40):
        nv-codec-headers: add clean target to Makefile
        flatpak: update 1.15.3 -> 1.15.4
        libcamera: re-introduce fix for gcc-13
        polkit-gnome: add recipe
        eog: update 43.2 -> 44.0
        evince: update 43.1 -> 44.0
        gdm: update 43.0 -> 44.0
        gnome-calculator: update 43.0.1 -> 44.0
        gnome-calendar: update 43.1 -> 44.0
        gnome-desktop: update 43 -> 44.0
        gnome-disk-utility: update 43.0 -> 44.0
        gnome-font-viewer: update 43.0 -> 44.0
        gnome-online-accounts: update 3.46.0 -> 3.48.0
        gnome-photos: update 43.0 -> 44.0
        gnome-session: update 43.0 -> 44.0
        gnome-settings-daemon: update 43.0 -> 44.0
        gnome-shell-extensions: update 43.1 -> 44.0
        gnome-software: update 43.4 -> 44.0
        gnome-terminal: update 3.46.7 -> 3.48.0
        gnome-text-editor: update 43.1 -> 44.0
        tracker-miners: update 3.4.2 -> 3.5.0
        zenity: update 3.43.0 -> 3.44.0
        xdg-desktop-portal-gnome: update 43.1 -> 44.0
        gedit: update 43.2 -> 44.2
        evolution-data-server: build oauth with gtk+3
        file-roller: set cpio path manually
        libdecor: update 1.1.0 -> 1.1.99
        freerdp: set PROXY_PLUGINDIR
        libnfs: add recipe
        pipewire: update 0.3.67 -> 0.3.68
        iwd: update 2.3 -> 2.4
        mozjs: update 102.5.0 -> 102.9.0
        glibmm: fix reproducibility issues
        adw-gtk3: add recipe
        xdg-desktop-portal-wlr: update
        pipewire: remove 'inherit gsettings'
        polkit: update SRC_URI
        webp-pixbuf-loader: update 0.2.0 -> 0.2.4
        udisks2: add PACKAGECONFIGs for btrfs,lvm2 and lsm
        pipewire: update 0.3.68 -> 0.3.70

  Martin Jansa (7):
        zsh: fix installed-vs-shipped with multilib
        restinio: fix S variable in multilib builds
        mongodb: fix chown user for multilib builds
        pahole: respect libdir
        lvgl,lv-lib-png,lv-drivers: fix installed-vs-shipped QA issue with multilib
        dleyna-{server,renderer}: fix dev-so QA issue with multilib
        lirc: fix do_install with multilib

  Mingli Yu (2):
        mcelog: improve the ptest output
        php: Fix GCC 12 -Og

  Peter Johennecken (1):
        nginx: added packagegroup for webdav module

  Peter Kjellerstedt (5):
        python3-crc32c: Correct the license information
        paho-mqtt-cpp: Improve the license information
        autossh: Correct the license information
        paho-mqtt-c: Improve the license information
        recipes: Remove double protocol= from SRC_URIs

  Peter Marko (1):
        ntp: whitelist CVE-2019-11331

  Petr Gotthard (2):
        cockpit: upgrade 276 -> 289
        nftables: upgrade 1.0.6 -> 1.0.7

  Randolph Sapp (1):
        glfw: add packageconfig and wayland dependencies

  Steffen Trumtrar (3):
        openocd: 0.11->0.12
        openocd: fix jimtcl url
        openocd: enable jtag-vpi and buspirate

  Tim Orling (11):
        cli11: do not inherit ptest
        span-lite: do not inherit ptest
        ptest-packagelists-meta-oe.inc: add ptest recipes
        meta-oe-ptest*-image: enable BBCLASSEXTEND parallel execution
        ptest-packagelists-meta-python.inc: add ptest recipes
        meta-python-ptest*-image: enable BBCLASSEXTEND parallel execution
        python3-aspectlib: fix ptest
        ptest-packagelists-meta-perl.inc: add ptest recipes
        recipes-perl/packagegroups: move to recipes-core/
        recipes-perl/images: move to recipes-core
        meta-perl-ptest*-image: enable BBCLASSEXTEND parallel execution

  Ulrich Ölmann (1):
        jwt-cpp: enable usage in an SDK

  Valeria Petrov (1):
        apache2: upgrade 2.4.56 -> 2.4.57

  Virendra Thakur (2):
        p7zip: fix for CVE-2018-5996
        p7zip: Fix for CVE-2016-9296

  Wang Mingyu (117):
        abseil-cpp: upgrade 20230125.1 -> 20230125.2
        libbytesize: upgrade 2.7 -> 2.8
        gegl: upgrade 0.4.42 -> 0.4.44
        ctags: upgrade 6.0.20230319.0 -> 6.0.20230402.0
        libdeflate: upgrade 1.17 -> 1.18
        libldb: upgrade 2.7.1 -> 2.7.2
        ndisc6: upgrade 1.0.6 -> 1.0.7
        libpfm4: upgrade 4.12.0 -> 4.13.0
        libtraceevent: upgrade 1.7.1 -> 1.7.2
        nginx: upgrade 1.23.3 -> 1.23.4
        links: upgrade 2.28 -> 2.29
        python3-pyproj: upgrade 3.4.1 -> 3.5.0
        ostree: upgrade 2023.1 -> 2023.2
        openvpn: upgrade 2.6.1 -> 2.6.2
        python3-aenum: upgrade 3.1.11 -> 3.1.12
        python3-argcomplete: upgrade 3.0.0 -> 3.0.5
        python3-cassandra-driver: upgrade 3.25.0 -> 3.26.0
        python3-astroid: upgrade 2.15.0 -> 2.15.1
        python3-cmake: upgrade 3.26.0 -> 3.26.1
        python3-dateparser: upgrade 1.1.7 -> 1.1.8
        python3-google-api-python-client: upgrade 2.81.0 -> 2.83.0
        python3-elementpath: upgrade 4.0.1 -> 4.1.0
        python3-googleapis-common-protos: upgrade 1.58.0 -> 1.59.0
        python3-httplib2: upgrade 0.21.0 -> 0.22.0
        python3-google-auth: upgrade 2.16.2 -> 2.17.1
        python3-ipython: upgrade 8.11.0 -> 8.12.0
        python3-imageio: upgrade 2.26.0 -> 2.27.0
        python3-pychromecast: upgrade 13.0.4 -> 13.0.6
        python3-jdatetime: upgrade 4.1.0 -> 4.1.1
        python3-luma-oled: upgrade 3.11.0 -> 3.12.0
        python3-pydantic: upgrade 1.10.6 -> 1.10.7
        python3-pymodbus: upgrade 3.2.1 -> 3.2.2
        python3-pymisp: upgrade 2.4.169.2 -> 2.4.169.3
        python3-pywbemtools: upgrade 1.1.1 -> 1.2.0
        python3-redis: upgrade 4.5.1 -> 4.5.4
        python3-regex: upgrade 2022.10.31 -> 2023.3.23
        python3-typeguard: upgrade 3.0.1 -> 3.0.2
        python3-sentry-sdk: upgrade 1.17.0 -> 1.18.0
        python3-rich: upgrade 13.3.2 -> 13.3.3
        python3-watchdog: upgrade 2.3.1 -> 3.0.0
        feh: upgrade 3.9.1 -> 3.10
        c-periphery: upgrade 2.3.1 -> 2.4.0
        grilo-plugins: upgrade 0.3.15 -> 0.3.16
        hwdata: upgrade 0.368 -> 0.369
        hwloc: upgrade 2.9.0 -> 2.9.1
        libconfig-tiny-perl: upgrade 2.28 -> 2.29
        mg: upgrade 20221112 -> 20230406
        python3-pillow: upgrade 9.4.0 -> 9.5.0
        python3-websockets: upgrade 10.4 -> 11.0.1
        poppler: upgrade 23.03.0 -> 23.04.0
        python3-alembic: upgrade 1.10.2 -> 1.10.3
        python3-astroid: upgrade 2.15.1 -> 2.15.2
        python3-coverage: upgrade 7.2.2 -> 7.2.3
        python3-google-api-python-client: upgrade 2.83.0 -> 2.84.0
        python3-google-auth: upgrade 2.17.1 -> 2.17.2
        python3-imgtool: upgrade 1.9.0 -> 1.10.0
        python3-pychromecast: upgrade 13.0.6 -> 13.0.7
        python3-simplejson: upgrade 3.18.4 -> 3.19.1
        python3-networkx: upgrade 3.0 -> 3.1
        tesseract: upgrade 5.3.0 -> 5.3.1
        python3-zeroconf: upgrade 0.47.4 -> 0.55.0
        python3-web3: upgrade 6.0.0 -> 6.1.0
        python3-sqlalchemy: upgrade 2.0.7 -> 2.0.9
        python3-sentry-sdk: upgrade 1.18.0 -> 1.19.1
        hdf5: Fix install conflict when enable multilib.
        capnproto: upgrade 0.10.3 -> 0.10.4
        ctags: upgrade 6.0.20230402.0 -> 6.0.20230416.0
        mctp: upgrade 1.0 -> 1.1
        php: upgrade 8.2.4 -> 8.2.5
        openvpn: upgrade 2.6.2 -> 2.6.3
        python3-croniter: upgrade 1.3.8 -> 1.3.14
        python3-diskcache: upgrade 5.4.0 -> 5.5.1
        python3-cmake: upgrade 3.26.1 -> 3.26.3
        python3-elementpath: upgrade 4.1.0 -> 4.1.1
        python3-google-api-python-client: upgrade 2.84.0 -> 2.85.0
        python3-google-auth: upgrade 2.17.2 -> 2.17.3
        python3-protobuf: upgrade 4.22.1 -> 4.22.3
        python3-web3: upgrade 6.1.0 -> 6.2.0
        python3-rich: upgrade 13.3.3 -> 13.3.4
        python3-pymisp: upgrade 2.4.169.3 -> 2.4.170
        python3-xlsxwriter: upgrade 3.0.9 -> 3.1.0
        python3-zeroconf: upgrade 0.55.0 -> 0.56.0
        remmina: upgrade 1.4.29 -> 1.4.30
        tbb: upgrade 2021.8.0 -> 2021.9.0
        sip: upgrade 6.7.7 -> 6.7.8
        tcpdump: upgrade 4.99.3 -> 4.99.4
        tcsh: upgrade 6.24.07 -> 6.24.10
        evolution-data-server: upgrade 3.48.0 -> 3.48.1
        babl: upgrade 0.1.102 -> 0.1.104
        gensio: upgrade 2.6.2 -> 2.6.4
        libopus: upgrade 1.3.1 -> 1.4
        network-manager-applet: upgrade 1.30.0 -> 1.32.0
        networkmanager: upgrade 1.42.4 -> 1.42.6
        opencl-headers: upgrade 2023.02.06 -> 2023.04.17
        c-periphery: upgrade 2.4.0 -> 2.4.1
        mbw: upgrade 1.5 -> 2.0
        libmodule-build-tiny-perl: upgrade 0.039 -> 0.043
        python3-periphery: upgrade 2.3.0 -> 2.4.1
        python3-astroid: upgrade 2.15.2 -> 2.15.3
        python3-diskcache: upgrade 5.5.1 -> 5.6.1
        python3-engineio: upgrade 4.4.0 -> 4.4.1
        python3-soupsieve: upgrade 2.4 -> 2.4.1
        python3-google-api-python-client: upgrade 2.85.0 -> 2.86.0
        python3-mock: upgrade 5.0.1 -> 5.0.2
        python3-pyalsaaudio: upgrade 0.9.2 -> 0.10.0
        python3-icu: upgrade 2.10.2 -> 2.11
        python3-pymisp: upgrade 2.4.170 -> 2.4.170.1
        python3-python-vlc: upgrade 3.0.18121 -> 3.0.18122
        python3-sentry-sdk: upgrade 1.19.1 -> 1.20.0
        python3-pyscaffold: upgrade 4.4 -> 4.4.1
        python3-websockets: upgrade 11.0.1 -> 11.0.2
        python3-tornado: upgrade 6.2 -> 6.3
        redis: upgrade 7.0.10 -> 7.0.11
        python3-xmlschema: upgrade 2.2.2 -> 2.2.3
        samba: upgrade 4.18.1 -> 4.18.2
        ser2net: upgrade 4.3.11 -> 4.3.12
        sip: upgrade 6.7.8 -> 6.7.9

  Wentao Zhang (2):
        jemalloc: include the missing shell scripts and source the corresponds shell scripts for some test cases.
        nss: fix failed test of nss.

  Wolfgang Meyer (2):
        qrencode: add PACKAGECONFIG for command line tools
        qrencode: enable native build

  Yi Zhao (1):
        samba: upgrade 4.18.0 -> 4.18.1

  Yogita Urade (1):
        dlt-daemon: fix CVE-2023-26257

  Zoltán Böszörményi (2):
        hplip: Fix installation and QA
        libgusb: Allow building in native mode

poky: 0907793d5e..cce6db2a59:
  Alex Kiernan (2):
        cargo_common.bbclass: Support local github repos
        rust: Upgrade 1.68.1 -> 1.68.2

  Alexander Kanavin (5):
        rust: do not run separate build/install steps
        rust: install llvm item only once
        rust: update 1.67.1 -> 1.68.1
        ffmpeg: update 5.1.2 -> 6.0
        meta/recipes: ensure all recipes have a SUMMARY

  Arslan Ahmad (1):
        kernel-fitimage: Fix the default dtb config check

  Bartosz Golaszewski (5):
        python3-pyproject-hooks: add missing run-time dependencies
        python3-packaging: add missing run-time dependencies
        python3-manifest: add tomllib
        python3-manifest: add ensurepip
        python3-build: add missing run-time dependencies

  Bruce Ashfield (7):
        kernel: improve initramfs bundle processing time
        linux-yocto/6.1: update to v6.1.23
        linux-yocto/5.15: update to v5.15.106
        linux-yocto/6.1: update to v6.1.24
        linux-yocto/5.15: update to v5.15.107
        linux-yocto/6.1: update to v6.1.25
        linux-yocto/5.15: update to v5.15.108

  Chen Qi (1):
        bitbake: runqueue: fix PSI check calculation

  Chris Elledge (1):
        busybox: move hwclock init earlier in startup

  Denys Dmytriyenko (2):
        xz: upgrade 5.4.1 -> 5.4.2
        grep: upgrade 3.9 -> 3.10

  Dit Kozmaj (2):
        wic: use part_name when defined
        selftest: wic: Add test for --part-name argument

  Dmitry Baryshkov (1):
        linux-firmware: upgrade 20230210 -> 20230404

  Enrico Jörns (10):
        oeqa/selftest/cases/runqemu: update imports
        oeqa/targetcontrol: fix misspelled RuntimeError
        oeqa/targetcontrol: do not set dump_host_cmds redundantly
        oeqa/targetcontrol: remove unused imports
        oeqa/utils/commands: fix usage of undefined EPIPE
        oeqa/utils/commands: remove unused imports
        oeqa/utils/qemurunner: replace hard-coded user 'root' in debug output
        oeqa/utils/qemurunner: limit precision of timing debugging output
        oeqa/utils/qemurunner: fix undefined TimeoutExpired
        oeqa: whitespace and indentation cleanups

  Enrico Scholz (2):
        bitbake: fetch2/crate: create versioned 'name' entries
        bitbake: cooker: do not abort on single ctrl-c

  Fabio Estevam (1):
        u-boot: Upgrade to 2023.04

  Frank WOLFF (1):
        logrotate: add ptest support

  Frederic Martinsons (6):
        cargo_common.bbclass: add support of user in url for patch
        devtool: add support for multiple git url inside a cargo based recipe
        patch: support of git patches when the source uri contained subpath parameter
        meta-selftest: provide a recipe for zvariant
        cargo-update-recipe-crates: force name overrides
        bitbake: fetch2: Display all missing checksum at once

  Geoffrey GIRY (1):
        cve-extra-exclusions: ignore inapplicable linux-yocto CVEs

  Jan Vermaete (1):
        cve-update-nvd2-native: added the missing http import

  Kai Kang (2):
        libnotify: remove dependency dbus
        bitbake: bitbake: ConfHandler: Allow variable flag name with a single character

  Khem Raj (16):
        e2fsprogs: Define 64bit off_t on rv32
        ffmpeg: Disable asm and rvv on riscv32
        cargo: Fix build on musl/riscv
        musl: Update to latest trunk
        systemd: Refresh a musl patch to remove patch-fuzz with 253.3
        musl-locales: Add Canadian French (fr_CA) locale support
        gawk: Disable known ptest fails on musl
        gawk: Remove redundant patch
        gawk: Add skipped.txt to emit test to ignore
        libxml2: Disable icu tests on musl
        apt-util: Fix ptest on musl
        lua: Disable locale dependent tests on musl
        attr: Disable attr.test on musl
        acl: Disable misc.test on musl
        fts: Fix typo in summary
        m4: Do not munge locale in ptests for musl

  Lee Chee Yang (2):
        migration-guides: add release-notes for 4.0.9
        release-notes-4.2: update RC3 changes

  Luca Ceresoli (1):
        devicetree.bbclass: fix typo

  Marek Vasut (1):
        cpio: Fix wrong CRC with ASCII CRC for large files

  Mark Asselstine (2):
        oeqa/selftest/bblogging: uncomment python stdout checks
        python3-psutil: fix-up -tests runtime dependencies

  Mark Hatle (1):
        sanity.bbclass: Update minimum gcc version to 8.0

  Markus Volk (1):
        at-spi2-core: update 2.46.0 -> 2.48.0

  Marta Rybczynska (1):
        cve-update-nvd2-native: new CVE database fetcher

  Martin Jansa (8):
        selftest: imagefeatures.py: don't mix tabs and spaces for indentation
        selftest: runqemu: better check for ROOTFS: in the log
        selftest: runqemu: use better error message when asserts fail
        runqemu: respect IMAGE_LINK_NAME
        python3-cryptography-crates.inc: regenerate with updated bbclass
        python3-bcrypt-crates.inc: regenerate with updated bbclass
        selftest: efibootpartition.py: fix QEMU_USE_KVM usage
        populate_sdk_ext.bbclass: set METADATA_REVISION with an DISTRO override

  Michael Opdenacker (20):
        manuals: update disk space requirements
        manuals: add rm_work disk space data
        manuals: add minimum RAM requirements
        ref-manual: release-process.rst: update testing section
        ref-manual: release-process.rst: major updates
        manuals: add "LTS" term
        manuals: improve and fix target for supported distros
        ref-manual: variables: document VOLATILE_TMP_DIR
        migration-guides: update 4.2 migration and release notes
        ref-manual: classes.rst: document devicetree.bbclass
        ref-manual: remove unused and obsolete file
        ref-manual: variables.rst: add wikipedia shortcut for "getty"
        overview-manual: update section about source archives
        manuals: document SPDX_CUSTOM_ANNOTATION_VARS
        overview-manual: development-environment: update text and screenshots
        ref-manual: add "Mixin" term
        migration-guides: release-notes-4.0.9.rst: add missing SPDX info
        migration-guides: fixes and improvements to 4.2 release notes
        manuals: expand init manager documentation
        ref-manual: variables.rst: document KERNEL_DANGLING_FEATURES_WARN_ONLY

  Mikko Rapeli (2):
        oeqa ping.py: avoid busylooping failing ping command
        oeqa ping.py: fail test if target IP address has not been set

  Mingli Yu (3):
        report-error: catch Nothing PROVIDES error
        bitbake: event: add bb.event.ParseError
        report-error: make it catch ParseError error

  Ola x Nilsson (2):
        patch.py: Use shlex instead of deprecated pipe
        package: Use shlex instead of deprecated pipe

  Pascal Bach (1):
        cmake: add CMAKE_SYSROOT to generated toolchain file

  Paul Eggleton (20):
        bitbake: bitbake-user-manual: document BB_CACHEDIR
        bitbake: bitbake-user-manual: add addpylib and BB_GLOBAL_PYMODULES
        bitbake: bitbake-user-manual: add BB_HASH_CODEPARSER_VALS
        ref-manual: add new SDK_ZIP_OPTIONS variable
        ref-manual: Add new RUST_CHANNEL variable
        ref-manual: update for IMAGE_MACHINE_SUFFIX addition
        dev/ref-manual: Remove references to INC_PR
        ref-manual: add BB_CACHEDIR
        migration-guides: Add coverage of addpylib directive
        ref-manual: Remove references to package_tar class
        ref-manual: add missing QA checks from previous releases
        ref-manual: document new patch-status-* QA checks
        ref-manual: add FIT_CONF_DEFAULT_DTB
        ref-manual: add section link also to buildtools-extended entry
        ref-manual: add SDK_ARCHIVE_TYPE
        ref-manual: move Initramfs entry from variables to terms
        dev/ref-manual: Document INIT_MANAGER
        migration-guides: extend migration guide for 4.2
        release-notes-4.1: fix some CVE links
        release-notes-4.2: add release notes

  Pavel Zhukov (2):
        scripts/rpm2cpio.sh: Use bzip2 instead of bunzip2
        scripts/runqemu: Add possibility to disable network

  Pawan Badganchi (1):
        tiff: Add fix for CVE-2022-4645

  Peter Kjellerstedt (1):
        cargo-update-recipe-crates.bbclass: Do not add name= to crate:// URIs

  Petr Kubizňák (12):
        harfbuzz: depend on glib-2.0-native
        json-glib: depend on glib-2.0-native
        libgudev: depend on glib-2.0-native
        at-spi2-core: depend on glib-2.0-native
        avahi: add missing dependencies
        graphene: add gobject-types PACKAGECONFIG
        python3-pygobject: depend on gobject-introspection
        gconf: add missing dependencies
        webkitgtk: add missing dependencies
        libnotify: depend on glib-2.0-native
        vte: depend on glib-2.0-native
        gobject-introspection: reduce dependencies

  Piotr Łobacz (1):
        libarchive: Enable acls, xattr for native as well as target

  Qiu Tingting (1):
        coreutils: Delete gcc sysroot parameter for ptest on target

  Randolph Sapp (1):
        wic/bootimg-efi: if fixed-size is set then use that for mkdosfs

  Richard Purdie (11):
        oeqa/loader: Ensure module names don't contain uppercase characters
        zvariant: Exclude from world for now to avoid reproducibility issues
        xdg-utils: Add a patch for CVE-2020-27748
        cve-extra-exclusions.inc: Exclude some issues not present in linux-yocto
        xdg-utils: Fix CVE number
        bitbake: bitbake: Bump to version 2.4.0
        build-appliance-image: Update to master head revision
        poky.conf: Bump version for 4.2 mickledore release
        build-appliance-image: Update to master head revision
        build-appliance-image: Update to master head revision
        cve-exclusions: Document some further linux-yocto CVE statuses

  Ross Burton (11):
        llvm: remove redundant CMake variables
        libgit2: clean up CMake variables
        webkitgtk: clean up Python variables
        oeqa/runtime: clean up deprecated backslash expansion
        classes-recipe/setuptools3-base: clean up FILES assignments
        bind: don't package non-existant .la files into -staticdev
        gstreamer1.0-plugins: package the internal libraries explicitly
        Increase minimum GCC version to 8.0
        machine/qemuarm*: don't explicitly set vmalloc
        screen: backport fix for CVE-2023-24626
        go: backport fix for CVE-2023-24537

  Soumya (1):
        shadow: Fix can not print full login timeout message

  Svend Meyland Nicolaisen (1):
        bitbake: npmsw fetcher: Avoid instantiating Fetch class if url list is empty

  Thomas De Schampheleire (3):
        qemu: make tracetool-generated output reproducible
        qemu: retain default trace backend if 'ust' is not enabled
        qemu: rename deprecated --enable-trace-backend configure option

  Thomas Roos (2):
        oeqa/selftest: Use SSTATE_DIR of parent build dir
        oeqa/utils/metadata.py: Fix running oe-selftest running with no distro set

  Tobias Hagelborn (1):
        lib/oe/gpg_sign.py: Avoid race when creating .sig files in detach_sign

  Ulrich Ölmann (3):
        kernel-dev: fix typos
        ref-manual: classes.rst: fix typo
        bitbake: bitbake-user-manual: fix BB_RUNFMT's default value

  Wang Mingyu (46):
        apr: upgrade 1.7.2 -> 1.7.3
        bind: upgrade 9.18.12 -> 9.18.13
        cracklib: upgrade 2.9.10 -> 2.9.11
        libhandy: upgrade 1.8.1 -> 1.8.2
        libpcap: upgrade 1.10.3 -> 1.10.4
        libsdl2: upgrade 2.26.3 -> 2.26.5
        libsoup: upgrade 3.2.2 -> 3.4.0
        mpg123: upgrade 1.31.2 -> 1.31.3
        acpica: upgrade 20220331 -> 20230331
        ccache: upgrade 4.7.4 -> 4.8
        libcap: upgrade 2.67 -> 2.68
        man-pages: upgrade 6.03 -> 6.04
        mtools: upgrade 4.0.42 -> 4.0.43
        pango: upgrade 1.50.13 -> 1.50.14
        ruby: upgrade 3.2.1 -> 3.2.2
        spirv-headers: upgrade 1.3.239.0 -> 1.3.243.0
        spirv-tools: upgrade 1.3.239.0 -> 1.3.243.0
        sqlite3: upgrade 3.41.0 -> 3.41.2
        texinfo: upgrade 7.0.2 -> 7.0.3
        wayland: upgrade 1.21.0 -> 1.22.0
        wpebackend-fdo: upgrade 1.14.0 -> 1.14.2
        xserver-xorg: upgrade 21.1.7 -> 21.1.8
        xwayland: upgrade 22.1.8 -> 23.1.1
        vala: upgrade 0.56.4 -> 0.56.6
        python3-cython: upgrade 0.29.33 -> 0.29.34
        python3-hypothesis: upgrade 6.68.2 -> 6.71.0
        python3-importlib-metadata: upgrade 6.0.0 -> 6.2.0
        python3-installer: upgrade 0.6.0 -> 0.7.0
        python3-markdown: upgrade 3.4.1 -> 3.4.3
        python3-pathspec: upgrade 0.11.0 -> 0.11.1
        python3-pygobject: upgrade 3.42.2 -> 3.44.1
        python3-pyopenssl: upgrade 23.0.0 -> 23.1.1
        python3-pytz: upgrade 2022.7.1 -> 2023.3
        python3-setuptools: upgrade 67.6.0 -> 67.6.1
        mesa: upgrade 23.0.0 -> 23.0.2
        systemd: upgrade 253.1 -> 253.3
        libgit2: upgrade 1.6.3 -> 1.6.4
        libsolv: upgrade 0.7.23 -> 0.7.24
        libxml2: upgrade 2.10.3 -> 2.10.4
        boost: upgrade 1.81.0 -> 1.82.0
        ofono: upgrade 2.0 -> 2.1
        python3-dtschema: upgrade 2023.1 -> 2023.4
        python3-packaging: upgrade 23.0 -> 23.1
        python3-pytest: upgrade 7.2.2 -> 7.3.1
        stress-ng: upgrade 0.15.06 -> 0.15.07
        gdb: Fix conflict of sframe-spec.info

  Wentao Zhang (1):
        python3: Fix failing sysconfig.py test on x86(64 bit) using lib64 as baselib by updating test_sysconfig for posix_user purelib

  Xiangyu Chen (1):
        shadow: backport patch to fix CVE-2023-29383

  Yoann Congal (4):
        cve-extra-exclusions: ignore inapplicable linux-yocto CVEs
        cve-exclusions_6.1: ignore patched CVE-2022-38457 & CVE-2022-40133
        cve-extra-exclusion: ignore disputed CVE-2023-23005
        cve-extra-exclusions: linux-yocto: ignore fixed CVE-2023-1652 & CVE-2023-1829

  Zhixiong Chi (1):
        libpam: Fix the xtests/tst-pam_motd[1|3] failures

  bkylerussell@gmail.com (1):
        kernel-devsrc: depend on python3-core instead of python3

meta-raspberrypi: 3afdbbf782..bf948e0aa8:
  Jesse Visser (2):
        recipe-bsp: Add support for Raspberry Pi Camera Module v3
        docs: Update extra build config Raspberry Pi Camera Module section

  Rodrigo M. Duarte (1):
        python3-adafruit-blinka: Fix the correct python recipes path in dynamic-layer sub-dir

meta-arm: 9b6c8c95e4..c60d7865dd:
  Adam Johnston (3):
        arm-bsp/optee: Update OP-TEE TA devkit to 3.20 for N1SDP
        CI: Remove ts-smm-gateway from N1SDP
        arm-bsp/trusted-firmware-a: Update N1SDP to v2.8.0

  Denys Dmytriyenko (4):
        optee-os-tadevkit: remove old unused patches
        optee-client: add 3.20.0 version
        optee-test: add 3.20.0 version
        optee-examples: add 3.20.0 version

  Emekcan Aras (4):
        arm-bsp/trusted-firmware-m: apply patches correctly from external repos
        arm-bsp/trusted-firmware-m: Switch to TF-M BL1 in Corstone1000
        arm-bsp/corstone1000: add OTP config for fvp
        arm-bsp/trusted-firmware-m: Increase assets number for corstone1000

  Jon Mason (8):
        CI: dev kernel allow failure
        arm/linux-yocto: remove IP_VS config fragment
        CI: update to the latest kas version
        CI: track mickledore branch
        arm-bsp/tc1: Fix signed u-boot
        arm-bsp/tc1: Add FVP support
        arm/trusted-firmware-m-scripts: relocate to tfm directory
        arm-bsp/tc1: disable signed kernel image

  Peter Hoyes (1):
        arm/scp-firmware: Add support for components other than SCP, MCP

  Ross Burton (8):
        arm/scp-firmware: add recipe for 2.11
        arm-bsp/scp-firmware: move all machines to SCP 2.11
        arm/scp-firmware: remove 2.10 recipe
        arm/trusted-firmware-m: add the tf-m-extras repository that some machines need
        arm/trusted-firmware-m: clean up environment flags
        arm/trusted-firmware-m: package .elf files in PN-dbg
        arm-bsp/trusted-firmware-m: enable for Total Compute on RSS
        CI: add TF-M to TC build

  Rui Miguel Silva (1):
        arm-bsp/corstone1000: tf-m set/get fwu, private metadata using gpt

  Xueliang Zhong (3):
        arm-bsp/n1sdp-board-firmware: update to newer SHA
        arm-bsp/optee-os: N1SDP support for optee-os 3.20
        arm-bsp/n1sdp: use edk2-firmware 202211 version

Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
Change-Id: I68eb48f27b781da34c4a7636f9b3bb1507b46416
diff --git a/poky/meta/lib/oe/gpg_sign.py b/poky/meta/lib/oe/gpg_sign.py
index 613dab8..ede6186 100644
--- a/poky/meta/lib/oe/gpg_sign.py
+++ b/poky/meta/lib/oe/gpg_sign.py
@@ -5,11 +5,12 @@
 #
 
 """Helper module for GPG signing"""
-import os
 
 import bb
-import subprocess
+import os
 import shlex
+import subprocess
+import tempfile
 
 class LocalSigner(object):
     """Class for handling local (on the build host) signing"""
@@ -73,8 +74,6 @@
             cmd += ['--homedir', self.gpg_path]
         if armor:
             cmd += ['--armor']
-        if output_suffix:
-            cmd += ['-o', input_file + "." + output_suffix]
         if use_sha256:
             cmd += ['--digest-algo', "SHA256"]
 
@@ -83,19 +82,27 @@
         if self.gpg_version > (2,1,):
             cmd += ['--pinentry-mode', 'loopback']
 
-        cmd += [input_file]
-
         try:
             if passphrase_file:
                 with open(passphrase_file) as fobj:
                     passphrase = fobj.readline();
 
-            job = subprocess.Popen(cmd, stdin=subprocess.PIPE, stderr=subprocess.PIPE)
-            (_, stderr) = job.communicate(passphrase.encode("utf-8"))
+            if not output_suffix:
+                output_suffix = 'asc' if armor else 'sig'
+            output_file = input_file + "." + output_suffix
+            with tempfile.TemporaryDirectory(dir=os.path.dirname(output_file)) as tmp_dir:
+                tmp_file = os.path.join(tmp_dir, os.path.basename(output_file))
+                cmd += ['-o', tmp_file]
 
-            if job.returncode:
-                bb.fatal("GPG exited with code %d: %s" % (job.returncode, stderr.decode("utf-8")))
+                cmd += [input_file]
 
+                job = subprocess.Popen(cmd, stdin=subprocess.PIPE, stderr=subprocess.PIPE)
+                (_, stderr) = job.communicate(passphrase.encode("utf-8"))
+
+                if job.returncode:
+                    bb.fatal("GPG exited with code %d: %s" % (job.returncode, stderr.decode("utf-8")))
+
+                os.rename(tmp_file, output_file)
         except IOError as e:
             bb.error("IO error (%s): %s" % (e.errno, e.strerror))
             raise Exception("Failed to sign '%s'" % input_file)
diff --git a/poky/meta/lib/oe/package.py b/poky/meta/lib/oe/package.py
index 7a6b319..edb70da 100644
--- a/poky/meta/lib/oe/package.py
+++ b/poky/meta/lib/oe/package.py
@@ -8,7 +8,7 @@
 import fnmatch
 import itertools
 import os
-import pipes
+import shlex
 import re
 import glob
 import stat
@@ -41,7 +41,7 @@
 
     stripcmd = [strip]
     skip_strip = False
-    # kernel module    
+    # kernel module
     if elftype & 16:
         if is_kernel_module_signed(file):
             bb.debug(1, "Skip strip on signed module %s" % file)
@@ -1556,7 +1556,7 @@
         sonames = set()
         renames = []
         ldir = os.path.dirname(file).replace(pkgdest + "/" + pkg, '')
-        cmd = d.getVar('OBJDUMP') + " -p " + pipes.quote(file) + " 2>/dev/null"
+        cmd = d.getVar('OBJDUMP') + " -p " + shlex.quote(file) + " 2>/dev/null"
         fd = os.popen(cmd)
         lines = fd.readlines()
         fd.close()
@@ -2012,4 +2012,3 @@
                 for dep in bb.utils.explode_deps(d.getVar('RDEPENDS:' + base) or ""):
                     add_dep(rdeps, dep)
                 pkg_addrrecs(pkg, base, suffix, func, rdeps, d)
-
diff --git a/poky/meta/lib/oe/patch.py b/poky/meta/lib/oe/patch.py
index b2dc8d0..5990896 100644
--- a/poky/meta/lib/oe/patch.py
+++ b/poky/meta/lib/oe/patch.py
@@ -4,9 +4,11 @@
 # SPDX-License-Identifier: GPL-2.0-only
 #
 
+import os
+import shlex
+import subprocess
 import oe.path
 import oe.types
-import subprocess
 
 class NotFoundError(bb.BBHandledException):
     def __init__(self, path):
@@ -27,8 +29,6 @@
 
 
 def runcmd(args, dir = None):
-    import pipes
-
     if dir:
         olddir = os.path.abspath(os.curdir)
         if not os.path.exists(dir):
@@ -37,7 +37,7 @@
         # print("cwd: %s -> %s" % (olddir, dir))
 
     try:
-        args = [ pipes.quote(str(arg)) for arg in args ]
+        args = [ shlex.quote(str(arg)) for arg in args ]
         cmd = " ".join(args)
         # print("cmd: %s" % cmd)
         proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
@@ -217,7 +217,7 @@
         with open(self.seriespath, 'w') as f:
             for p in patches:
                 f.write(p)
-         
+
     def Import(self, patch, force = None):
         """"""
         PatchSet.Import(self, patch, force)
@@ -499,6 +499,36 @@
         finally:
             shutil.rmtree(tempdir)
 
+    def _need_dirty_check(self):
+        fetch = bb.fetch2.Fetch([], self.d)
+        check_dirtyness = False
+        for url in fetch.urls:
+            url_data = fetch.ud[url]
+            parm = url_data.parm
+            # a git url with subpath param will surely be dirty
+            # since the git tree from which we clone will be emptied
+            # from all files that are not in the subpath
+            if url_data.type == 'git' and parm.get('subpath'):
+                check_dirtyness = True
+        return check_dirtyness
+
+    def _commitpatch(self, patch, patchfilevar):
+        output = ""
+        # Add all files
+        shellcmd = ["git", "add", "-f", "-A", "."]
+        output += runcmd(["sh", "-c", " ".join(shellcmd)], self.dir)
+        # Exclude the patches directory
+        shellcmd = ["git", "reset", "HEAD", self.patchdir]
+        output += runcmd(["sh", "-c", " ".join(shellcmd)], self.dir)
+        # Commit the result
+        (tmpfile, shellcmd) = self.prepareCommit(patch['file'], self.commituser, self.commitemail)
+        try:
+            shellcmd.insert(0, patchfilevar)
+            output += runcmd(["sh", "-c", " ".join(shellcmd)], self.dir)
+        finally:
+            os.remove(tmpfile)
+        return output
+
     def _applypatch(self, patch, force = False, reverse = False, run = True):
         import shutil
 
@@ -534,6 +564,19 @@
         shutil.copy2(commithook, applyhook)
         try:
             patchfilevar = 'PATCHFILE="%s"' % os.path.basename(patch['file'])
+            if self._need_dirty_check():
+                # Check dirtyness of the tree
+                try:
+                    output = runcmd(["git", "--work-tree=%s" % reporoot, "status", "--short"])
+                except CmdError:
+                    pass
+                else:
+                    if output:
+                        # The tree is dirty, not need to try to apply patches with git anymore
+                        # since they fail, fallback directly to patch
+                        output = PatchTree._applypatch(self, patch, force, reverse, run)
+                        output += self._commitpatch(patch, patchfilevar)
+                        return output
             try:
                 shellcmd = [patchfilevar, "git", "--work-tree=%s" % reporoot]
                 self.gitCommandUserOptions(shellcmd, self.commituser, self.commitemail)
@@ -560,19 +603,7 @@
                 except CmdError:
                     # Fall back to patch
                     output = PatchTree._applypatch(self, patch, force, reverse, run)
-                # Add all files
-                shellcmd = ["git", "add", "-f", "-A", "."]
-                output += runcmd(["sh", "-c", " ".join(shellcmd)], self.dir)
-                # Exclude the patches directory
-                shellcmd = ["git", "reset", "HEAD", self.patchdir]
-                output += runcmd(["sh", "-c", " ".join(shellcmd)], self.dir)
-                # Commit the result
-                (tmpfile, shellcmd) = self.prepareCommit(patch['file'], self.commituser, self.commitemail)
-                try:
-                    shellcmd.insert(0, patchfilevar)
-                    output += runcmd(["sh", "-c", " ".join(shellcmd)], self.dir)
-                finally:
-                    os.remove(tmpfile)
+                output += self._commitpatch(patch, patchfilevar)
                 return output
         finally:
             shutil.rmtree(hooks_dir)
@@ -921,4 +952,3 @@
             return False, "applies to later version"
 
     return True, None
-
diff --git a/poky/meta/lib/oeqa/core/loader.py b/poky/meta/lib/oeqa/core/loader.py
index f25b597..d12d5a0 100644
--- a/poky/meta/lib/oeqa/core/loader.py
+++ b/poky/meta/lib/oeqa/core/loader.py
@@ -316,6 +316,9 @@
                                   module_name_small in self.modules) \
                                else False
 
+        if any(c.isupper() for c in module.__name__):
+            raise SystemExit("Module '%s' contains uppercase characters and this isn't supported. Please fix the module name." % module.__name__)
+
         return (load_module, load_underscore)
 
 
diff --git a/poky/meta/lib/oeqa/runtime/cases/apt.py b/poky/meta/lib/oeqa/runtime/cases/apt.py
index 4e09374..8000645 100644
--- a/poky/meta/lib/oeqa/runtime/cases/apt.py
+++ b/poky/meta/lib/oeqa/runtime/cases/apt.py
@@ -39,9 +39,9 @@
         self.target.run('cd %s; echo deb [ allow-insecure=yes ] %s/all ./ > sources.list' % (apt_get_sourceslist_dir, apt_get_source_server))
 
     def setup_source_config_for_package_install_signed(self):
-        apt_get_source_server = 'http:\/\/%s:%s' % (self.tc.target.server_ip, self.repo_server.port)
+        apt_get_source_server = 'http://%s:%s' % (self.tc.target.server_ip, self.repo_server.port)
         apt_get_sourceslist_dir = '/etc/apt/'
-        self.target.run("cd %s; cp sources.list sources.list.bak; sed -i 's/\[trusted=yes\] http:\/\/bogus_ip:bogus_port/%s/g' sources.list" % (apt_get_sourceslist_dir, apt_get_source_server))
+        self.target.run("cd %s; cp sources.list sources.list.bak; sed -i 's|\[trusted=yes\] http://bogus_ip:bogus_port|%s|g' sources.list" % (apt_get_sourceslist_dir, apt_get_source_server))
 
     def cleanup_source_config_for_package_install(self):
         apt_get_sourceslist_dir = '/etc/apt/'
diff --git a/poky/meta/lib/oeqa/runtime/cases/buildcpio.py b/poky/meta/lib/oeqa/runtime/cases/buildcpio.py
index bd3b46d..3728855 100644
--- a/poky/meta/lib/oeqa/runtime/cases/buildcpio.py
+++ b/poky/meta/lib/oeqa/runtime/cases/buildcpio.py
@@ -29,7 +29,10 @@
     @OEHasPackage(['autoconf'])
     def test_cpio(self):
         self.project.download_archive()
-        self.project.run_configure('--disable-maintainer-mode',
-                                   'sed -i -e "/char \*program_name/d" src/global.c;')
+        self.project.run_configure('--disable-maintainer-mode')
+        # This sed is needed until
+        # https://git.savannah.gnu.org/cgit/cpio.git/commit/src/global.c?id=641d3f489cf6238bb916368d4ba0d9325a235afb
+        # is in a release.
+        self.project._run(r'sed -i -e "/char \*program_name/d" %s/src/global.c' % self.project.targetdir)
         self.project.run_make()
         self.project.run_install()
diff --git a/poky/meta/lib/oeqa/runtime/cases/ping.py b/poky/meta/lib/oeqa/runtime/cases/ping.py
index 967b441..f72460e 100644
--- a/poky/meta/lib/oeqa/runtime/cases/ping.py
+++ b/poky/meta/lib/oeqa/runtime/cases/ping.py
@@ -5,6 +5,7 @@
 #
 
 from subprocess import Popen, PIPE
+from time import sleep
 
 from oeqa.runtime.case import OERuntimeTestCase
 from oeqa.core.decorator.oetimeout import OETimeout
@@ -16,6 +17,7 @@
     def test_ping(self):
         output = ''
         count = 0
+        self.assertNotEqual(len(self.target.ip), 0, msg="No target IP address set")
         try:
             while count < 5:
                 cmd = 'ping -c 1 %s' % self.target.ip
@@ -25,6 +27,7 @@
                     count += 1
                 else:
                     count = 0
+                    sleep(1)
         except OEQATimeoutError:
             self.fail("Ping timeout error for address %s, count %s, output: %s" % (self.target.ip, count, output))
         msg = ('Expected 5 consecutive, got %d.\n'
diff --git a/poky/meta/lib/oeqa/runtime/cases/systemd.py b/poky/meta/lib/oeqa/runtime/cases/systemd.py
index 720b4b5..37f2954 100644
--- a/poky/meta/lib/oeqa/runtime/cases/systemd.py
+++ b/poky/meta/lib/oeqa/runtime/cases/systemd.py
@@ -154,7 +154,7 @@
         """
 
         # The expression chain that uniquely identifies the time boot message.
-        expr_items=['Startup finished', 'kernel', 'userspace','\.$']
+        expr_items=['Startup finished', 'kernel', 'userspace', r'\.$']
         try:
             output = self.journalctl(args='-o cat --reverse')
         except AssertionError:
diff --git a/poky/meta/lib/oeqa/selftest/cases/bblogging.py b/poky/meta/lib/oeqa/selftest/cases/bblogging.py
index 1534a36..040c6db 100644
--- a/poky/meta/lib/oeqa/selftest/cases/bblogging.py
+++ b/poky/meta/lib/oeqa/selftest/cases/bblogging.py
@@ -105,16 +105,14 @@
         self.write_config('BBINCLUDELOGS = ""')
         result = bitbake("logging-test -c pythontest_exit -f -v", ignore_status = True)
         self.assertIn("ERROR: Logfile of failure stored in:", result.output)
-        # python tasks don't log output with -v currently
-        #self.assertCount(result.output, "This is python stdout", 1)
+        self.assertCount(result.output, "This is python stdout", 1)
 
     def test_python_exit_loggingD(self):
         # logs, verbose
         self.write_config('BBINCLUDELOGS = "yes"')
         result = bitbake("logging-test -c pythontest_exit -f -v", ignore_status = True)
         self.assertIn("ERROR: Logfile of failure stored in:", result.output)
-        # python tasks don't log output with -v currently
-        #self.assertCount(result.output, "This is python stdout", 1)
+        self.assertCount(result.output, "This is python stdout", 1)
 
     def test_python_exec_func_python_loggingA(self):
         # no logs, no verbose
@@ -139,8 +137,7 @@
         result = bitbake("logging-test -c pythontest_exec_func_python -f -v",
                          ignore_status = True)
         self.assertIn("ERROR: Logfile of failure stored in:", result.output)
-        # python tasks don't log output with -v currently
-        #self.assertCount(result.output, "This is python stdout", 1)
+        self.assertCount(result.output, "This is python stdout", 1)
 
     def test_python_exec_func_python_loggingD(self):
         # logs, verbose
@@ -148,8 +145,7 @@
         result = bitbake("logging-test -c pythontest_exec_func_python -f -v",
                          ignore_status = True)
         self.assertIn("ERROR: Logfile of failure stored in:", result.output)
-        # python tasks don't log output with -v currently
-        #self.assertCount(result.output, "This is python stdout", 1)
+        self.assertCount(result.output, "This is python stdout", 1)
 
     def test_python_fatal_loggingA(self):
         # no logs, no verbose
@@ -173,8 +169,7 @@
         self.write_config('BBINCLUDELOGS = ""')
         result = bitbake("logging-test -c pythontest_fatal -f -v", ignore_status = True)
         self.assertIn("ERROR: Logfile of failure stored in:", result.output)
-        # python tasks don't log output with -v currently
-        #self.assertCount(result.output, "This is python fatal test stdout", 1)
+        self.assertCount(result.output, "This is python fatal test stdout", 1)
         self.assertCount(result.output, "This is a fatal error", 1)
 
     def test_python_fatal_loggingD(self):
@@ -182,7 +177,6 @@
         self.write_config('BBINCLUDELOGS = "yes"')
         result = bitbake("logging-test -c pythontest_fatal -f -v", ignore_status = True)
         self.assertIn("ERROR: Logfile of failure stored in:", result.output)
-        # python tasks don't log output with -v currently
-        #self.assertCount(result.output, "This is python fatal test stdout", 1)
+        self.assertCount(result.output, "This is python fatal test stdout", 1)
         self.assertCount(result.output, "This is a fatal error", 1)
 
diff --git a/poky/meta/lib/oeqa/selftest/cases/devtool.py b/poky/meta/lib/oeqa/selftest/cases/devtool.py
index 81d0201..94873fd 100644
--- a/poky/meta/lib/oeqa/selftest/cases/devtool.py
+++ b/poky/meta/lib/oeqa/selftest/cases/devtool.py
@@ -848,6 +848,99 @@
         # Try building
         bitbake(testrecipe)
 
+    def test_devtool_modify_git_crates_subpath(self):
+        # This tests two things in devtool context:
+        #   - that we support local git dependencies for cargo based recipe
+        #   - that we support patches in SRC_URI when git url contains subpath parameter
+
+        # Check preconditions:
+        #    recipe inherits cargo
+        #    git:// uri with a subpath as the main package
+        #    some crate:// in SRC_URI
+        #    others git:// in SRC_URI
+        #    cointains a patch
+        testrecipe = 'zvariant'
+        bb_vars = get_bb_vars(['SRC_URI', 'FILE', 'WORKDIR', 'CARGO_HOME'], testrecipe)
+        recipefile = bb_vars['FILE']
+        workdir = bb_vars['WORKDIR']
+        cargo_home = bb_vars['CARGO_HOME']
+        src_uri = bb_vars['SRC_URI'].split()
+        self.assertTrue(src_uri[0].startswith('git://'),
+                        'This test expects the %s recipe to have a git repo has its main uri' % testrecipe)
+        self.assertIn(';subpath=', src_uri[0],
+                      'This test expects the %s recipe to have a git uri with subpath' % testrecipe)
+        self.assertTrue(any([uri.startswith('crate://') for uri in src_uri]),
+                        'This test expects the %s recipe to have some crates in its src uris' % testrecipe)
+        self.assertGreater(sum(map(lambda x:x.startswith('git://'), src_uri)), 2,
+                           'This test expects the %s recipe to have several git:// uris' % testrecipe)
+        self.assertTrue(any([uri.startswith('file://') and '.patch' in uri for uri in src_uri]),
+                        'This test expects the %s recipe to have a patch in its src uris' % testrecipe)
+
+        self._test_recipe_contents(recipefile, {}, ['cargo'])
+
+        # Clean up anything in the workdir/sysroot/sstate cache
+        bitbake('%s -c cleansstate' % testrecipe)
+        # Try modifying a recipe
+        tempdir = tempfile.mkdtemp(prefix='devtoolqa')
+        self.track_for_cleanup(tempdir)
+        self.track_for_cleanup(self.workspacedir)
+        self.add_command_to_tearDown('bitbake -c clean %s' % testrecipe)
+        self.add_command_to_tearDown('bitbake-layers remove-layer */workspace')
+        result = runCmd('devtool modify %s -x %s' % (testrecipe, tempdir))
+        self.assertExists(os.path.join(tempdir, 'Cargo.toml'), 'Extracted source could not be found')
+        self.assertExists(os.path.join(self.workspacedir, 'conf', 'layer.conf'), 'Workspace directory not created. devtool output: %s' % result.output)
+        matches = glob.glob(os.path.join(self.workspacedir, 'appends', 'zvariant_*.bbappend'))
+        self.assertTrue(matches, 'bbappend not created')
+        # Test devtool status
+        result = runCmd('devtool status')
+        self.assertIn(testrecipe, result.output)
+        self.assertIn(tempdir, result.output)
+        # Check git repo
+        self._check_src_repo(tempdir)
+        # Check that the patch is correctly applied
+        # last commit message in the tree must contain
+        # %% original patch: <patchname>
+        # ..
+        patchname = None
+        for uri in src_uri:
+            if uri.startswith('file://') and '.patch' in uri:
+                patchname = uri.replace("file://", "").partition('.patch')[0] + '.patch'
+        self.assertIsNotNone(patchname)
+        result = runCmd('git -C %s log -1' % tempdir)
+        self.assertIn("%%%% original patch: %s" % patchname, result.output)
+
+        # Configure the recipe to check that the git dependencies are correctly patched in cargo config
+        bitbake('-c configure %s' % testrecipe)
+
+        cargo_config_path = os.path.join(cargo_home, 'config')
+        with open(cargo_config_path, "r") as f:
+            cargo_config_contents = [line.strip('\n') for line in f.readlines()]
+
+        # Get back git dependencies of the recipe (ignoring the main one)
+        # and check that they are all correctly patched to be fetched locally
+        git_deps = [uri for uri in src_uri if uri.startswith("git://")][1:]
+        for git_dep in git_deps:
+            raw_url, _, raw_parms = git_dep.partition(";")
+            parms = {}
+            for parm in raw_parms.split(";"):
+                name_parm, _, value_parm = parm.partition('=')
+                parms[name_parm]=value_parm
+            self.assertIn('protocol', parms, 'git dependencies uri should contain the "protocol" parameter')
+            self.assertIn('name', parms, 'git dependencies uri should contain the "name" parameter')
+            self.assertIn('destsuffix', parms, 'git dependencies uri should contain the "destsuffix" parameter')
+            self.assertIn('type', parms, 'git dependencies uri should contain the "type" parameter')
+            self.assertEqual(parms['type'], 'git-dependency', 'git dependencies uri should have "type=git-dependency"')
+            raw_url = raw_url.replace("git://", '%s://' % parms['protocol'])
+            patch_line = '[patch."%s"]' % raw_url
+            path_patched = os.path.join(workdir, parms['destsuffix'])
+            path_override_line = '%s = { path = "%s" }' % (parms['name'], path_patched)
+            # Would have been better to use tomllib to read this file :/
+            self.assertIn(patch_line, cargo_config_contents)
+            self.assertIn(path_override_line, cargo_config_contents)
+
+        # Try to package the recipe
+        bitbake('-c package_qa %s' % testrecipe)
+
     def test_devtool_modify_localfiles(self):
         # Check preconditions
         testrecipe = 'lighttpd'
diff --git a/poky/meta/lib/oeqa/selftest/cases/efibootpartition.py b/poky/meta/lib/oeqa/selftest/cases/efibootpartition.py
index e17da9f..fa74103 100644
--- a/poky/meta/lib/oeqa/selftest/cases/efibootpartition.py
+++ b/poky/meta/lib/oeqa/selftest/cases/efibootpartition.py
@@ -15,7 +15,7 @@
     @skipIfNotMachine("qemux86-64", "test is qemux86-64 specific currently")
     def test_boot_efi(self):
         cmd = "runqemu nographic serial wic ovmf"
-        if oe.types.qemu_use_kvm(self.td['QEMU_USE_KVM'], self.td["TARGET_ARCH"]):
+        if oe.types.qemu_use_kvm(self.td.get('QEMU_USE_KVM', 0), self.td["TARGET_ARCH"]):
             cmd += " kvm"
         image = "core-image-minimal"
 
diff --git a/poky/meta/lib/oeqa/selftest/cases/imagefeatures.py b/poky/meta/lib/oeqa/selftest/cases/imagefeatures.py
index d31b43d..0292c88 100644
--- a/poky/meta/lib/oeqa/selftest/cases/imagefeatures.py
+++ b/poky/meta/lib/oeqa/selftest/cases/imagefeatures.py
@@ -229,10 +229,10 @@
                     self.assertTrue(os.path.exists(image_path),
                                     "%s image %s doesn't exist" % (itype, image_path))
             else:
-            	image_path = os.path.join(bb_vars['DEPLOY_DIR_IMAGE'], "%s.%s" % (bb_vars['IMAGE_LINK_NAME'], itype))
-            	# check if result image is in deploy directory
-            	self.assertTrue(os.path.exists(image_path),
-                            "%s image %s doesn't exist" % (itype, image_path))
+                image_path = os.path.join(bb_vars['DEPLOY_DIR_IMAGE'], "%s.%s" % (bb_vars['IMAGE_LINK_NAME'], itype))
+                # check if result image is in deploy directory
+                self.assertTrue(os.path.exists(image_path),
+                                "%s image %s doesn't exist" % (itype, image_path))
 
     def test_useradd_static(self):
         config = """
diff --git a/poky/meta/lib/oeqa/selftest/cases/runqemu.py b/poky/meta/lib/oeqa/selftest/cases/runqemu.py
index e72ff52..f01e1ee 100644
--- a/poky/meta/lib/oeqa/selftest/cases/runqemu.py
+++ b/poky/meta/lib/oeqa/selftest/cases/runqemu.py
@@ -4,14 +4,15 @@
 # SPDX-License-Identifier: MIT
 #
 
+import os
 import re
-import tempfile
 import time
 import oe.types
 from oeqa.core.decorator import OETestTag
 from oeqa.core.decorator.data import skipIfNotArch, skipIfNotMachine
 from oeqa.selftest.case import OESelftestTestCase
-from oeqa.utils.commands import bitbake, runqemu, get_bb_var, runCmd
+from oeqa.utils.commands import bitbake, runqemu, get_bb_var
+
 
 @OETestTag("runqemu")
 class RunqemuTests(OESelftestTestCase):
@@ -23,8 +24,8 @@
     def setUpLocal(self):
         super(RunqemuTests, self).setUpLocal()
         self.recipe = 'core-image-minimal'
-        self.machine =  self.td['MACHINE']
-        self.image_link_name =  get_bb_var('IMAGE_LINK_NAME', self.recipe)
+        self.machine = self.td['MACHINE']
+        self.image_link_name = get_bb_var('IMAGE_LINK_NAME', self.recipe)
 
         self.fstypes = "ext4"
         if self.td["HOST_ARCH"] in ('i586', 'i686', 'x86_64'):
@@ -61,7 +62,8 @@
         cmd = "%s %s ext4" % (self.cmd_common, self.machine)
         with runqemu(self.recipe, ssh=False, launch_cmd=cmd) as qemu:
             with open(qemu.qemurunnerlog) as f:
-                self.assertIn('rootfs.ext4', f.read(), "Failed: %s" % cmd)
+                regexp = r'\nROOTFS: .*\.ext4]\n'
+                self.assertRegex(f.read(), regexp, "Failed to find '%s' in '%s' after running '%s'" % (regexp, qemu.qemurunnerlog, cmd))
 
     @skipIfNotArch(['i586', 'i686', 'x86_64'])
     def test_boot_machine_iso(self):
@@ -69,7 +71,8 @@
         cmd = "%s %s iso" % (self.cmd_common, self.machine)
         with runqemu(self.recipe, ssh=False, launch_cmd=cmd) as qemu:
             with open(qemu.qemurunnerlog) as f:
-                self.assertIn('media=cdrom', f.read(), "Failed: %s" % cmd)
+                text_in = 'media=cdrom'
+                self.assertIn(text_in, f.read(), "Failed to find '%s' in '%s' after running '%s'" % (text_in, qemu.qemurunnerlog, cmd))
 
     def test_boot_recipe_image(self):
         """Test runqemu recipe-image"""
@@ -85,7 +88,8 @@
         cmd = "%s %s wic.vmdk" % (self.cmd_common, self.recipe)
         with runqemu(self.recipe, ssh=False, launch_cmd=cmd) as qemu:
             with open(qemu.qemurunnerlog) as f:
-                self.assertIn('format=vmdk', f.read(), "Failed: %s" % cmd)
+                text_in = 'format=vmdk'
+                self.assertIn(text_in, f.read(), "Failed to find '%s' in '%s' after running '%s'" % (text_in, qemu.qemurunnerlog, cmd))
 
     @skipIfNotMachine("qemux86-64", "tests are qemux86-64 specific currently")
     def test_boot_recipe_image_vdi(self):
@@ -93,7 +97,8 @@
         cmd = "%s %s wic.vdi" % (self.cmd_common, self.recipe)
         with runqemu(self.recipe, ssh=False, launch_cmd=cmd) as qemu:
             with open(qemu.qemurunnerlog) as f:
-                self.assertIn('format=vdi', f.read(), "Failed: %s" % cmd)
+                text_in = 'format=vdi'
+                self.assertIn(text_in, f.read(), "Failed to find '%s' in '%s' after running '%s'" % (text_in, qemu.qemurunnerlog, cmd))
 
     def test_boot_deploy(self):
         """Test runqemu deploy_dir_image"""
@@ -102,7 +107,6 @@
             with open(qemu.qemurunnerlog) as f:
                 self.assertTrue(qemu.runner.logged, "Failed: %s, %s" % (cmd, f.read()))
 
-
     @skipIfNotArch(['i586', 'i686', 'x86_64'])
     def test_boot_deploy_hddimg(self):
         """Test runqemu deploy_dir_image hddimg"""
@@ -166,9 +170,9 @@
     def setUpClass(cls):
         super(QemuTest, cls).setUpClass()
         cls.recipe = 'core-image-minimal'
-        cls.machine =  get_bb_var('MACHINE')
-        cls.deploy_dir_image =  get_bb_var('DEPLOY_DIR_IMAGE')
-        cls.image_link_name =  get_bb_var('IMAGE_LINK_NAME', cls.recipe)
+        cls.machine = get_bb_var('MACHINE')
+        cls.deploy_dir_image = get_bb_var('DEPLOY_DIR_IMAGE')
+        cls.image_link_name = get_bb_var('IMAGE_LINK_NAME', cls.recipe)
         cls.cmd_common = "runqemu nographic"
         cls.qemuboot_conf = "%s.qemuboot.conf" % (cls.image_link_name)
         cls.qemuboot_conf = os.path.join(cls.deploy_dir_image, cls.qemuboot_conf)
diff --git a/poky/meta/lib/oeqa/selftest/cases/wic.py b/poky/meta/lib/oeqa/selftest/cases/wic.py
index b26b649..0b0ca90 100644
--- a/poky/meta/lib/oeqa/selftest/cases/wic.py
+++ b/poky/meta/lib/oeqa/selftest/cases/wic.py
@@ -1348,6 +1348,29 @@
             if os.path.exists(image_path + '.bak'):
                 os.rename(image_path + '.bak', image_path)
 
+    def test_gpt_partition_name(self):
+        """Test --part-name argument to set partition name in GPT table"""
+        config = 'IMAGE_FSTYPES += "wic"\nWKS_FILE = "test_gpt_partition_name.wks"\n'
+        self.append_config(config)
+        bitbake('core-image-minimal')
+        self.remove_config(config)
+        deploy_dir = get_bb_var('DEPLOY_DIR_IMAGE')
+        machine = self.td['MACHINE']
+
+        image_path = os.path.join(deploy_dir, 'core-image-minimal-%s.wic' % machine)
+        # Image is created
+        self.assertTrue(os.path.exists(image_path))
+
+        # Check the names of the three partitions
+        # as listed in test_gpt_partition_name.wks
+        result = runCmd("sfdisk --part-label %s 1" % image_path)
+        self.assertEqual('boot-A', result.output)
+        result = runCmd("sfdisk --part-label %s 2" % image_path)
+        self.assertEqual('root-A', result.output)
+        # When the --part-name is not defined, the partition name is equal to the --label
+        result = runCmd("sfdisk --part-label %s 3" % image_path)
+        self.assertEqual('ext-space', result.output)
+
 class ModifyTests(WicTestCase):
     def test_wic_ls(self):
         """Test listing image content using 'wic ls'"""
diff --git a/poky/meta/lib/oeqa/selftest/context.py b/poky/meta/lib/oeqa/selftest/context.py
index 0a7a9da..f2a5ba7 100644
--- a/poky/meta/lib/oeqa/selftest/context.py
+++ b/poky/meta/lib/oeqa/selftest/context.py
@@ -16,6 +16,7 @@
 import oeqa
 import oe
 import bb.utils
+import bb.tinfoil
 
 from oeqa.core.context import OETestContext, OETestContextExecutor
 from oeqa.core.exception import OEQAPreRun, OEQATestNotFound
@@ -79,6 +80,12 @@
             self.removebuilddir = removebuilddir
 
     def setup_builddir(self, suffix, selftestdir, suite):
+        # Get SSTATE_DIR from the parent build dir
+        with bb.tinfoil.Tinfoil(tracking=True) as tinfoil:
+            tinfoil.prepare(quiet=2, config_only=True)
+            d = tinfoil.config_data
+            sstatedir = str(d.getVar('SSTATE_DIR'))
+
         builddir = os.environ['BUILDDIR']
         if not selftestdir:
             selftestdir = get_test_layer()
@@ -118,6 +125,9 @@
             if os.environ[e].endswith(builddir):
                 os.environ[e] = os.environ[e].replace(builddir, newbuilddir)
 
+        # Set SSTATE_DIR to match the parent SSTATE_DIR
+        subprocess.check_output("echo 'SSTATE_DIR ?= \"%s\"' >> %s/conf/local.conf" % (sstatedir, newbuilddir), cwd=newbuilddir, shell=True)
+
         os.chdir(newbuilddir)
 
         def patch_test(t):
diff --git a/poky/meta/lib/oeqa/targetcontrol.py b/poky/meta/lib/oeqa/targetcontrol.py
index 1fdff82..d686fe0 100644
--- a/poky/meta/lib/oeqa/targetcontrol.py
+++ b/poky/meta/lib/oeqa/targetcontrol.py
@@ -7,18 +7,14 @@
 # This module is used by testimage.bbclass for setting up and controlling a target machine.
 
 import os
-import shutil
 import subprocess
 import bb
-import traceback
-import sys
 import logging
 from oeqa.utils.sshcontrol import SSHControl
 from oeqa.utils.qemurunner import QemuRunner
 from oeqa.utils.qemutinyrunner import QemuTinyRunner
 from oeqa.utils.dump import TargetDumper
 from oeqa.utils.dump import MonitorDumper
-from oeqa.controllers.testtargetloader import TestTargetLoader
 from abc import ABCMeta, abstractmethod
 
 class BaseTarget(object, metaclass=ABCMeta):
@@ -42,7 +38,7 @@
         if os.path.islink(sshloglink):
             os.unlink(sshloglink)
         os.symlink(self.sshlog, sshloglink)
-        self.logger.info("SSH log file: %s" %  self.sshlog)
+        self.logger.info("SSH log file: %s" % self.sshlog)
 
     @abstractmethod
     def start(self, params=None, ssh=True, extra_bootparams=None):
@@ -145,7 +141,7 @@
                             boottime = int(d.getVar("TEST_QEMUBOOT_TIMEOUT")),
                             use_kvm = use_kvm,
                             dump_dir = dump_dir,
-                            dump_host_cmds = d.getVar("testimage_dump_host"),
+                            dump_host_cmds = dump_host_cmds,
                             logger = logger,
                             tmpfsdir = d.getVar("RUNQEMU_TMPFS_DIR"),
                             serial_ports = len(d.getVar("SERIAL_CONSOLES").split()))
@@ -163,7 +159,7 @@
             os.unlink(qemuloglink)
         os.symlink(self.qemulog, qemuloglink)
 
-        self.logger.info("rootfs file: %s" %  self.rootfs)
+        self.logger.info("rootfs file: %s" % self.rootfs)
         self.logger.info("Qemu log file: %s" % self.qemulog)
         super(QemuTarget, self).deploy()
 
@@ -205,7 +201,7 @@
             self.server_ip = self.runner.server_ip
             self.connection = SSHControl(ip=self.ip, logfile=self.sshlog)
         else:
-            raise RuntimError("%s - FAILED to re-start qemu - check the task log and the boot log" % self.pn)
+            raise RuntimeError("%s - FAILED to re-start qemu - check the task log and the boot log" % self.pn)
 
     def run_serial(self, command, timeout=60):
         return self.runner.run_serial(command, timeout=timeout)
diff --git a/poky/meta/lib/oeqa/utils/commands.py b/poky/meta/lib/oeqa/utils/commands.py
index f4daea2..c1f5338 100644
--- a/poky/meta/lib/oeqa/utils/commands.py
+++ b/poky/meta/lib/oeqa/utils/commands.py
@@ -8,11 +8,8 @@
 # This module is mainly used by scripts/oe-selftest and modules under meta/oeqa/selftest
 # It provides a class and methods for running commands on the host in a convienent way for tests.
 
-
-
 import os
 import sys
-import signal
 import subprocess
 import threading
 import time
@@ -21,6 +18,7 @@
 from oeqa.utils import ftools
 import re
 import contextlib
+import errno
 # Export test doesn't require bb
 try:
     import bb
@@ -85,7 +83,7 @@
             except OSError as ex:
                 # It's not an error when the command does not consume all
                 # of our data. subprocess.communicate() also ignores that.
-                if ex.errno != EPIPE:
+                if ex.errno != errno.EPIPE:
                     raise
 
         # We write in a separate thread because then we can read
@@ -117,7 +115,7 @@
             else:
                 deadline = time.time() + self.timeout
                 for thread in self.threads:
-                    timeout = deadline - time.time() 
+                    timeout = deadline - time.time()
                     if timeout < 0:
                         timeout = 0
                     thread.join(timeout)
diff --git a/poky/meta/lib/oeqa/utils/metadata.py b/poky/meta/lib/oeqa/utils/metadata.py
index 8013aa6..15ec190 100644
--- a/poky/meta/lib/oeqa/utils/metadata.py
+++ b/poky/meta/lib/oeqa/utils/metadata.py
@@ -27,9 +27,9 @@
     data_dict = get_bb_vars()
 
     # Distro information
-    info_dict['distro'] = {'id': data_dict['DISTRO'],
-                           'version_id': data_dict['DISTRO_VERSION'],
-                           'pretty_name': '%s %s' % (data_dict['DISTRO'], data_dict['DISTRO_VERSION'])}
+    info_dict['distro'] = {'id': data_dict.get('DISTRO', 'NODISTRO'),
+                                'version_id': data_dict.get('DISTRO_VERSION', 'NO_DISTRO_VERSION'),
+                                'pretty_name': '%s %s' % (data_dict.get('DISTRO', 'NODISTRO'), data_dict.get('DISTRO_VERSION', 'NO_DISTRO_VERSION'))}
 
     # Host distro information
     os_release = get_os_release()
diff --git a/poky/meta/lib/oeqa/utils/qemurunner.py b/poky/meta/lib/oeqa/utils/qemurunner.py
index 0538576..6734cee 100644
--- a/poky/meta/lib/oeqa/utils/qemurunner.py
+++ b/poky/meta/lib/oeqa/utils/qemurunner.py
@@ -238,7 +238,7 @@
         self.origchldhandler = signal.getsignal(signal.SIGCHLD)
         signal.signal(signal.SIGCHLD, self.handleSIGCHLD)
 
-        self.logger.debug('launchcmd=%s'%(launch_cmd))
+        self.logger.debug('launchcmd=%s' % (launch_cmd))
 
         # FIXME: We pass in stdin=subprocess.PIPE here to work around stty
         # blocking at the end of the runqemu script when using this within
@@ -275,7 +275,7 @@
             os._exit(0)
 
         self.logger.debug("runqemu started, pid is %s" % self.runqemu.pid)
-        self.logger.debug("waiting at most %s seconds for qemu pid (%s)" %
+        self.logger.debug("waiting at most %d seconds for qemu pid (%s)" %
                           (self.runqemutime, time.strftime("%D %H:%M:%S")))
         endtime = time.time() + self.runqemutime
         while not self.is_alive() and time.time() < endtime:
@@ -299,7 +299,7 @@
             self.logger.warning('runqemu exited with code %d' % self.runqemu.returncode)
 
         if not self.is_alive():
-            self.logger.error("Qemu pid didn't appear in %s seconds (%s)" %
+            self.logger.error("Qemu pid didn't appear in %d seconds (%s)" %
                               (self.runqemutime, time.strftime("%D %H:%M:%S")))
 
             qemu_pid = None
@@ -332,8 +332,8 @@
         try:
             os.chdir(os.path.dirname(qmp_port))
             try:
-               from qmp.legacy import QEMUMonitorProtocol
-               self.qmp = QEMUMonitorProtocol(os.path.basename(qmp_port))
+                from qmp.legacy import QEMUMonitorProtocol
+                self.qmp = QEMUMonitorProtocol(os.path.basename(qmp_port))
             except OSError as msg:
                 self.logger.warning("Failed to initialize qemu monitor socket: %s File: %s" % (msg, msg.filename))
                 return False
@@ -343,8 +343,8 @@
                 self.logger.debug("QMP Port does not exist waiting for it to be created")
                 endtime = time.time() + self.runqemutime
                 while not os.path.exists(qmp_port) and self.is_alive() and time.time() < endtime:
-                   self.logger.info("QMP port does not exist yet!")
-                   time.sleep(0.5)
+                    self.logger.info("QMP port does not exist yet!")
+                    time.sleep(0.5)
                 if not os.path.exists(qmp_port) and self.is_alive():
                     self.logger.warning("QMP Port still does not exist but QEMU is alive")
                     return False
@@ -354,7 +354,7 @@
                 self.qmp.settimeout(self.runqemutime)
                 self.qmp.connect()
                 connect_time = time.time()
-                self.logger.info("QMP connected to QEMU at %s and took %s seconds" %
+                self.logger.info("QMP connected to QEMU at %s and took %.2f seconds" %
                                   (time.strftime("%D %H:%M:%S"),
                                    time.time() - launch_time))
             except OSError as msg:
@@ -388,14 +388,14 @@
 
         # Release the qemu process to continue running
         self.run_monitor('cont')
-        self.logger.info("QMP released QEMU at %s and took %s seconds from connect" %
+        self.logger.info("QMP released QEMU at %s and took %.2f seconds from connect" %
                           (time.strftime("%D %H:%M:%S"),
                            time.time() - connect_time))
 
         # We are alive: qemu is running
         out = self.getOutput(output)
         netconf = False # network configuration is not required by default
-        self.logger.debug("qemu started in %s seconds - qemu procces pid is %s (%s)" %
+        self.logger.debug("qemu started in %.2f seconds - qemu procces pid is %s (%s)" %
                           (time.time() - (endtime - self.runqemutime),
                            self.qemupid, time.strftime("%D %H:%M:%S")))
         cmdline = ''
@@ -419,7 +419,7 @@
             except (IndexError, ValueError):
                 # Try to get network configuration from runqemu output
                 match = re.match(r'.*Network configuration: (?:ip=)*([0-9.]+)::([0-9.]+):([0-9.]+).*',
-                                 out, re.MULTILINE|re.DOTALL)
+                                 out, re.MULTILINE | re.DOTALL)
                 if match:
                     self.ip, self.server_ip, self.netmask = match.groups()
                     # network configuration is required as we couldn't get it
@@ -486,9 +486,9 @@
                             self.server_socket = qemusock
                             stopread = True
                             reachedlogin = True
-                            self.logger.debug("Reached login banner in %s seconds (%s, %s)" %
+                            self.logger.debug("Reached login banner in %.2f seconds (%s)" %
                                               (time.time() - (endtime - self.boottime),
-                                              time.strftime("%D %H:%M:%S"), time.time()))
+                                              time.strftime("%D %H:%M:%S")))
                     else:
                         # no need to check if reachedlogin unless we support multiple connections
                         self.logger.debug("QEMU socket disconnected before login banner reached. (%s)" %
@@ -516,7 +516,7 @@
             (status, output) = self.run_serial(self.boot_patterns['send_login_user'], raw=True, timeout=120)
             if re.search(self.boot_patterns['search_login_succeeded'], output):
                 self.logged = True
-                self.logger.debug("Logged as root in serial console")
+                self.logger.debug("Logged in as %s in serial console" % self.boot_patterns['send_login_user'].replace("\n", ""))
                 if netconf:
                     # configure guest networking
                     cmd = "ifconfig eth0 %s netmask %s up\n" % (self.ip, self.netmask)
@@ -527,7 +527,7 @@
                         self.logger.debug("Couldn't configure guest networking")
             else:
                 self.logger.warning("Couldn't login into serial console"
-                            " as root using blank password")
+                            " as %s using blank password" % self.boot_patterns['send_login_user'].replace("\n", ""))
                 self.logger.warning("The output:\n%s" % output)
         except:
             self.logger.warning("Serial console failed while trying to login")
@@ -548,12 +548,12 @@
                     if e.errno != errno.ESRCH:
                         raise
             try:
-                outs, errs = self.runqemu.communicate(timeout = self.runqemutime)
+                outs, errs = self.runqemu.communicate(timeout=self.runqemutime)
                 if outs:
                     self.logger.info("Output from runqemu:\n%s", outs.decode("utf-8"))
                 if errs:
                     self.logger.info("Stderr from runqemu:\n%s", errs.decode("utf-8"))
-            except TimeoutExpired:
+            except subprocess.TimeoutExpired:
                 self.logger.debug("Sending SIGKILL to runqemu")
                 os.killpg(os.getpgid(self.runqemu.pid), signal.SIGKILL)
             if not self.runqemu.stdout.closed: