subtree updates: openembedded poky

poky: aa6cd06a9f..fb1853c66c:
  Adrian Freihofer (1):
        bblayers/setupwriters/oe-setup-layers: create dir if not exists

  Alexander Kanavin (48):
        bblayers/makesetup: skip git repos that are submodules
        scripts/oe-setup-layers: print a note about submodules if present
        go: update 1.19.4 -> 1.20
        go-cross-canadian: use gcc-crosssdk, not gcc-native
        vim: update 9.0.1211 -> 9.0.1293 to resolve open CVEs
        gstreamer1.0: update 1.20.5 -> 1.22.0
        mesa: update 22.3.3 -> 22.3.5
        meta/conf: move default configuration templates into meta/conf/templates/default
        scripts/oe-setup-layers: correct variable names - layers should be called repos
        scripts/oe-setup-layers: do not clobber json module with a variable named 'json'
        gcr: enable vala .vapi generation only when gobject introspection is also enabled
        gstreamer1.0-python: do not require introspection during builds
        go: update 1.20 -> 1.20.1
        rust: update 1.67.0 -> 1.67.1
        freetype: update 2.12.1 -> 2.13.0
        gnutls: update 3.7.8 -> 3.8.0
        vulkan-samples: update to latest revision
        gnu-config: update to latest revision
        puzzles: upgrade to latest revision
        python3: upgrade 3.11.1 -> 3.11.2
        nghttp2: upgrade 1.51.0 -> 1.52.0
        log4cplus: upgrade 2.0.8 -> 2.1.0
        dos2unix: upgrade 7.4.3 -> 7.4.4
        webkitgtk: upgrade 2.38.4 -> 2.38.5
        man-pages: upgrade 6.02 -> 6.03
        util-macros: upgrade 1.19.3 -> 1.20.0
        dpkg: upgrade 1.21.19 -> 1.21.20
        ruby: upgrade 3.2.0 -> 3.2.1
        libwpe: upgrade 1.14.0 -> 1.14.1
        vala: upgrade 0.56.3 -> 0.56.4
        dbus: upgrade 1.14.4 -> 1.14.6
        linux-firmware: upgrade 20230117 -> 20230210
        zstd: upgrade 1.5.2 -> 1.5.4
        python3-setuptools: upgrade 67.2.0 -> 67.3.1
        mmc-utils: upgrade to latest revision
        harfbuzz: upgrade 6.0.0 -> 7.0.0
        libhandy: upgrade 1.8.0 -> 1.8.1
        diffoscope: upgrade 234 -> 235
        wireless-regdb: upgrade 2022.08.12 -> 2023.02.13
        libcap: upgrade 2.66 -> 2.67
        e2fsprogs: upgrade 1.46.5 -> 1.47.0
        git: upgrade 2.39.1 -> 2.39.2
        piglit: upgrade to latest revision
        python3-hatchling: upgrade 1.12.2 -> 1.13.0
        devtool: ignore patch-fuzz errors when extracting source
        gcr: correctly configure vala against introspection data
        selftest: do not check for dri.pc in the headless test
        scripts/runqemu: move render nodes check to runqemu from selftest

  Alexis Lothoré (8):
        oeqa/selftest/resulttooltests: fix minor typo
        scripts/oe-selftest: append metadata to tests results
        scripts/resulttool/regression: remove unused import
        scripts/resulttool/regression: add metadata filtering for oeselftest
        scripts: add new helper for regression report generation
        oeqa/selftest: add test for yocto_testresults_query.py
        scripts/yoct_testresults_query: manage base/target revision not found
        oeqa/selftest/resulttool: add test for metadata filtering on regression

  Bruce Ashfield (11):
        linux-yocto/5.19: drop recipes
        yocto-bsps: remove 5.19 bbappend
        lttng-modules: fix for kernel 6.2+
        linux-yocto-rt/6.1: fix compilation issue with per cpu stats
        linux-yocto-dev: bump to v6.2
        linux-yocto/6.1: update to v6.1.12
        linux-yocto/5.15: update to v5.15.94
        linux-yocto/6.1: update to v6.1.14
        linux-yocto/5.15: update to v5.15.96
        linux-yocto-rt/6.1: update to -rt7
        linux-yocto-rt/5.15: update to -rt59

  Caner Altinbasak (1):
        bitbake: fetch2: Add GIT_CACHE_PATH and SSL_CERT_DIR into FETCH_EXPORT_VARS

  Chee Yang Lee (2):
        tar: Fix CVE-2022-48303
        checklayer: check for patch file upstream status

  Chen Qi (1):
        gpgme: fix python setuptools invalid version issue

  Denys Zagorui (1):
        kernel-devsrc: powerpc: add missed dependency for modules_prepare

  Dmitry Baryshkov (4):
        linux-firmware: properly set license for all Qualcomm firmware
        linux-firmware: add yamato fw files to qcom-adreno-a2xx package
        mesa: provide support for packing development and testing tools
        ffmpeg: fix build failure when vulkan is enabled

  Fawzi KHABER (1):
        ref-manual: update DEV_PKG_DEPENDENCY in variables

  Federico Pellegrin (1):
        curl: fix dependencies when building with ldap/ldaps

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

  Joe Slater (1):
        tar: Update fix for CVE-2022-48303 to upstream version

  Joel Stanley (1):
        qemu: Fix building with 6.2 kernel headers

  Jose Quaresma (2):
        bluez5: refresh patches with devtool
        icecc: enable the network only when ICECC_DISABLED is not set

  Joshua Watt (4):
        classes/populate_sdk_base: Append cleandirs
        classes/create-sdpx-2.2: Remove image SPDX and index from deploydir
        classes/create-spdx-2.2: Report downloads as separate packages
        weston: Add kiosk shell

  Kai Kang (2):
        xserver-xorg: 21.1.6 -> 21.1.7
        webkitgtk: 2.38.3 -> 2.38.4

  Khem Raj (12):
        unfs3: Add missing header files
        stress-ng: Add missing header files for clock_adjtime
        gstreamer1.0-plugins-good: Fix build with musl
        elfutils: Backport fix for DW_TAG_unspecified_type handling
        tune-riscv.inc: Add riscv64nc to available tunes list
        grub: Handle R_RISCV_CALL_PLT reloc
        gdb: Upgrade to 13.1
        musl: Update to tip of trunk
        kernel: Add kernel specific OBJDUMP
        opensbi: Do not add dependencies if RISCV_SBI_FDT is not set
        opensbi: Upgrade to 1.2 release
        vte: Fix -Wenum-constexpr-conversion warning

  Lee Chee Yang (1):
        migration-guides: add release-notes for 4.0.7

  Luca Boccassi (1):
        systemd: add user for systemd-oomd if enabled

  Marek Vasut (1):
        systemd-systemctl: Create machine-id with "uninitialized" text in it

  Mark Asselstine (1):
        bitbake: fetch/npmsw: add more short forms for git operations

  Markus Volk (3):
        graphene: add a PACKAGECONFIG for arm_neon
        libportal: allow to build without gtk4 backend
        libsdl2: add missing libdecor RDEPEND

  Martin Jansa (3):
        python3-numpy: upgrade to 1.24.2
        insane.bbclass: use 4 spaces for indentation
        insane.bbclass: move Upstream-Status logic to oe.qa

  Mateusz Marciniec (1):
        sstatesig: Improve output hash calculation

  Michael Opdenacker (17):
        migration-guides/migration-4.2.rst: fix minor issues
        ref-manual: variables.rst: fix broken hyperlink
        profile-manual: update WireShark hyperlinks
        manuals: replace unnecessary uses of 'yocto_docs' by internal references
        bsp-guide: fix broken git URLs and missing word
        ref-manual: improve "devtool check-upgrade-status" explanations
        ref-manual: document Rust classes
        manuals: update patchwork instance URL
        ref-manual: classes.rst: add python-setuptools3_rust and python_pyo3 classes
        dev-manual: new-recipe.rst: restructure examples
        ref-manual: classes.rst: improvements to cmake class documentation
        ref-manual: document meson class and variables
        dev-manual: sbom.rst: add link to FOSDEM 2023 video
        manuals: document COMMERCIAL_[AUDIO|VIDEO]_PLUGINS variables
        ref-manual: system-requirements.rst: update supported distros
        dev-manual: new-recipe.rst: add Meson example recipe
        dev-manual: new-recipe.rst: add references to subsections in Examples section

  Mike Crowe (1):
        bitbake: gitsm: Fix path construction for relative submodule URI

  Mikko Rapeli (8):
        oeqa ssh.py: move output prints to new line
        oeqa ssh.py: add connection keep alive options to ssh client
        oeqa dump.py: add error counter and stop after 5 failures
        oeqa qemurunner: read more data at a time from serial
        oeqa qemurunner.py: add timeout to QMP calls
        oeqa qemurunner.py: try to avoid reading one character at a time
        oeqa ssh.py: fix hangs in run()
        runqemu: kill qemu if it hangs

  Mingli Yu (1):
        mc: set ac_cv_path_PERL_FOR_BUILD

  Narpat Mali (1):
        libseccomp: fix for the ptest result format

  Niko Mauno (1):
        ref-manual: Fix invalid feature name

  Paulo Neves (4):
        bitbake: tests/fetch: git-lfs restore _find_git_lfs
        bitbake: tests/fetch: Add real git lfs tests and decorator
        bitbake: fetch/git: Removed unused variables in _contains_lfs
        bitbake: fetch/git: Replace mkdtemp with TemporaryDirectory and avoid exception masking

  Pavel Zhukov (4):
        wic: Fix usage of fstype=none in wic
        u-boot: Map arm64 into map for u-boot dts installation
        wic: Fix populating of IMAGE_EFI_BOOT_FILES with uefi-kernel
        oeqa/selftest/wic: Add test for uefi-kernel loader

  Pedro Baptista (3):
        bitbake: action.py: add topdir in bblayers_conf path for add-layer
        bitbake: action.py: add topdir in bblayers_conf path for remove-layer
        create.py: add command arg to add layer to bblayers.conf

  Peter Kjellerstedt (1):
        devshell: Do not add scripts/git-intercept to PATH

  Peter Marko (1):
        systemd: add group sgx to udev package

  Petr Kubizňák (1):
        graphene: remove introspection from PACKAGECONFIG

  Richard Elberger (2):
        docbook-xml: Switch from debian packages to upstream docbook sources
        bitbake: documentation: bitbake: add file-checksums to varflags section

  Richard Leitner (1):
        ref-manual: variables: FIT_KERNEL_COMP_ALG: add lzo

  Richard Purdie (20):
        bitbake: cookerdata: Remove incorrect SystemExit usage
        libssh2: Clean up ptest patch/coverage
        bitbake: data: Evaluate the value of export/unexport/network flags
        poky.conf: Update SANITY_TESTED_DISTROS to match autobuilder
        bitbake: cookerdata: Improve early exception handling
        bitbake: cookerdata: Drop dubious exception handling code
        bitbake: runqueue: Drop SystemExit usage
        bitbake: cooker: Ensure lock is held with changing notifier
        bitbake: server/process: Improve idle thread exception handling
        bitbake: event/cooker/runqueue: Add ability to interrupt longer running code
        bitbake: bitbake: Bump to version 2.3.1
        sstate: Add check_for_interrupts() call functionality added in bitbake
        binutils: Fix nativesdk ld.so search
        oeqa/selftest/prservice: Improve debug output for failure
        bitbake: cooker: Fix memory resident cache invalidation issue
        bitbake: fetch2/wget: Drop unused import
        bitbake: utils: Use internal fetcher function to avoid duplication
        resulttool/regression: Ensure LTP results are only compared against other LTP runs
        resulttool/regression: Improve matching of poor ptest test names
        build-appliance-image: Update to master head revision

  Robert Joslyn (1):
        curl: Update 7.87.0 to 7.88.0

  Ross Burton (17):
        lib/buildstats: handle tasks that never finished
        cml1: remove redundant addtask
        bitbake: fetch2/wget: clean up netrc usage
        libcgroup: clean up musl DEPENDS
        pkgconfig: use system glib for nativesdk builds
        site: remove glib site values
        less: backport the fix for CVE-2022-46663
        tiff: backport fix for CVE-2022-48281
        python3-atomicwrites: add BBCLASSEXTEND
        python3-iniconfig: add BBCLASSEXTEND
        python3-pytest: set RDEPENDS globally, not just target
        bitbake: lib/bb/siggen: fix debug() call
        ptest-runner: add non-root ptest user for tests to run as
        meta-selftest/files: add ptest to static-passwd/-group
        quilt: run tests as ptest user, and let that user write into the tests
        glibc: add ignore for CVE-2023-25139
        glibc: remove obsolete CVE ignores

  Saul Wold (2):
        busybox: Fix depmod patch
        create-spdx-2.2: Add support for custom Annotations

  Siddharth Doshi (1):
        openssl: Upgrade 3.0.7 -> 3.0.8

  Tim Orling (7):
        python3-hypothesis: upgrade 6.66.0 -> 6.68.1
        python3-typing-extensions: upgrade 4.4.0 -> 4.5.0
        python3-cryptography{-vectors}: 39.0.0 -> 39.0.1
        python3-more-itertools: upgrade 9.0.0 -> 9.1.0
        python3-zipp: upgrade 3.14.0 -> 3.15.0
        python3-hypothesis: upgrade 6.68.1 -> 6.68.2
        python3-babel: upgrade 2.11.0 -> 2.12.1

  Trevor Woerner (12):
        packagegroup-self-hosted: alphabetize
        packagegroup-self-hosted: add zstd
        build-appliance-image: set TERM
        build-appliance-image kernel: linux-yocto: qemuall: add taskstats
        build-appliance-image: add /lib64 symlink
        build-appliance-image: QB_MEM: allow user config
        QB_SMP: allow user modification
        build-appliance-image: check for xattr feature
        dtc: update DESCRIPTION
        dtc: update license checks
        build-appliance-image: fix HOMEPAGE
        VOLATILE_TMP_DIR: add

  Ulrich Ölmann (5):
        dev-manual: fix old override syntax
        kernel-yocto: fix kernel-meta data detection
        kernel-dev,ref-manual: fix old override syntax
        ref-manual: refer to MACHINE variable instead of KMACHINE
        kernel-dev: harmonize example with ref-manual

  Wang Mingyu (21):
        libdrm: upgrade 2.4.114 -> 2.4.115
        libjpeg-turbo: upgrade 2.1.5 -> 2.1.5.1
        libsdl2: upgrade 2.26.2 -> 2.26.3
        lighttpd: upgrade 1.4.68 -> 1.4.69
        openssh: upgrade 9.1p1 -> 9.2p1
        python3-sphinx-rtd-theme: upgrade 1.1.1 -> 1.2.0
        python3-zipp: upgrade 3.12.0 -> 3.13.0
        xkeyboard-config: upgrade 2.37 -> 2.38
        xwayland: upgrade 22.1.7 -> 22.1.8
        libx11: 1.8.3 -> 1.8.4
        dtc: upgrade 1.6.1 -> 1.7.0
        liburcu: upgrade 0.13.2 -> 0.14.0
        curl: upgrade 7.88.0 -> 7.88.1
        harfbuzz: upgrade 7.0.0 -> 7.0.1
        libx11-compose-data: 1.8.3 -> 1.8.4
        python3-pip: update 23.0 -> 23.0.1
        python3-poetry-core: upgrade 1.5.0 -> 1.5.1
        python3-pytest-subtests: upgrade 0.9.0 -> 0.10.0
        python3-zipp: upgrade 3.13.0 -> 3.14.0
        python3-setuptools: upgrade 67.3.1 -> 67.3.3
        diffoscope: upgrade 235 -> 236

  Xiangyu Chen (1):
        dhcpcd: fix dhcpcd start failure on qemuppc64

  Yash Shinde (1):
        glibc: stable 2.37 branch updates.

  Yi Zhao (1):
        glibc: unify wordsize.h between arm and aarch64

  leimaohui (2):
        gnutls: Updated ther patch which fixes build error for fips enabled.
        nghttp2: Deleted the entries for -client and -server, and removed a dependency on them from the main package.

  yanxk (1):
        cpio: Add ptest support

meta-openembedded: cba6df61c7..a9b2d1303b:
  Alex Kiernan (1):
        ostree: Upgrade 2022.7 -> 2023.1

  Arash Partow (1):
        ExprTk: Update package to release/0.0.2

  Archana Polampalli (1):
        Nodejs: fix buildpaths warning

  Bartosz Golaszewski (5):
        libgpiod: update to v1.6.4
        libgpiod: add a recipe for libgpiod v2.0-rc2
        python3-gpiod: new package
        libgpiod: bump version to v2.0-rc3
        python3-gpiod: bump version to v2.0-rc3

  Catalin Enache (1):
        plocate: add recipe

  Changqing Li (1):
        liblockfile: fix do_install failure when ldconfig is not installed

  Chee Yang Lee (2):
        tinyproxy: fix CVE-2022-40468
        tmux: update to tmux_3.3a

  Chen Qi (1):
        nodejs: add CVE_PRODUCT

  Cook, Samuel (1):
        python-systemd: update from v234 to v235

  Craig Comstock (1):
        cfengine: upgrade to 3.21.0

  Denys Dmytriyenko (2):
        lmbench: set up /usr/bin/hello as alternative
        mbedtls: set up /usr/bin/hello as alternative

  Fabio Estevam (2):
        spice-gtk: Update to version 0.42
        glmark2: Update to 2023.01

  Jan Luebbe (5):
        add signing.bbclass as infrastructure for build artifact signing
        smemstat: add recipe
        linux-serial-test: add recipe
        atftp: upgrade from 0.7.5 to 0.8.0
        atftp: use https for git repository access

  Joe Slater (1):
        phoronix-test-suite: fix CVE-2022-40704

  Joshua Watt (2):
        libvpx: Explicitly link with pthread support
        libvpx: Enable native support

  Khem Raj (7):
        python3-cson: Make PEP440 compatible version scheme
        python3-grpcio: Add missing include for close/open APIs
        graphene: Delete recipe
        glog: Link with libatomics on mips.
        glog: Fix build with clang on 32bit platforms
        networkmanager: Fix build with musl
        liburing: Update to latest tip of tree

  Lei Maohui (1):
        libiodbc: Fix install conflict when enable multilib.

  Marek Vasut (1):
        v4l-utils: Update 1.23.0+fd544473 -> 1.23.0+9431e4b2

  Markus Volk (10):
        iwd: update 2.0 -> 2.3
        libdeflate: add recipe
        pipewire-media-session: update 0.4.1 -> 0.4.2
        gnome-software: update 43.2 -> 43.4
        fwupd: fix polkit rules.d permissions
        pipewire: update 0.3.65 -> 0.3.66
        appstream: update 0.15.5 -> 0.16.1
        flatpak: update 1.15.1 -> 1.15.3
        gparted: update 1.4.0 -> 1.5.0
        webp-pixbuf-loader: update 0.0.7 -> 0.2.0

  Martin Jansa (4):
        nodejs: fix do_install failure with 'shared' PACKAGECONFIG
        nodejs: add Upstream-Status
        openhpi, uw-imag, python3-m2crypto: replace Unknown Upstream-Status with Pending
        .patch: fix Upstream-Status formatting issues reported by patchreview tool from oe-core

  Michael Haener (1):
        usb-modeswitch: update 2.6.0 -> 2.6.1

  Michael Opdenacker (1):
        ipcalc: update to 1.0.2

  Mingli Yu (2):
        opencv: disable intel IPP
        mariadb: Upgrade to 10.11.2

  Narpat Mali (1):
        net-snmp: CVE-2022-44792 & CVE-2022-44793 Fix NULL Pointer Exception

  Pablo Saavedra (1):
        graphene: disable neon support on arm 32bits

  Petr Gotthard (5):
        libqmi: upgrade 1.30.8 -> 1.32.2
        libmbim: upgrade 1.26.4 -> 1.28.2
        modemmanager: upgrade 1.18.12 -> 1.20.4
        openvpn: upgrade 2.5.8 -> 2.6.0
        python3-scapy: upgrade 2.4.5 -> 2.5.0

  Randy MacLeod (1):
        python3-pillow: Add distutils, unixadmin for ptest

  Ross Burton (10):
        python3-simpleeval: update patch status
        nodejs: remove redundant expand=True to getVar()
        nodejs: run configure.py in verbose mode
        nodejs: use a postfunc to prune source tree
        nodejs: don't force cross-compilation in native builds
        nodejs: remove LD assignment
        nodejs: no need to stage binaries for target
        nodejs: remove redundant comment
        zchunk: upgrade to 1.2.4
        liburing: enable native/nativesdk builds

  Stefano Babic (1):
        zchunk: upgrade 1.2.4 -> 1.3.0

  Tom Hochstein (1):
        nlohmann-json: Allow empty main package for SDK

  Ulrich Ölmann (1):
        tnftp: switch to using variable flags for alternatives

  Wang Mingyu (104):
        python3-apt: upgrade 2.5.0 -> 2.5.2
        python3-aspectlib: upgrade 1.5.2 -> 2.0.0
        python3-aiohttp-jinja2: upgrade 1.5 -> 1.5.1
        python3-astroid: upgrade 2.13.2 -> 2.14.1
        python3-bitarray: upgrade 2.6.2 -> 2.7.0
        python3-cantools: upgrade 38.0.1 -> 38.0.2
        python3-coverage: upgrade 7.0.5 -> 7.1.0
        python3-cmd2: upgrade 2.4.2 -> 2.4.3
        python3-django: upgrade 4.1.3 -> 4.1.6
        python3-dateparser: upgrade 1.1.6 -> 1.1.7
        python3-elementpath: upgrade 3.0.2 -> 4.0.1
        python3-evdev: upgrade 1.6.0 -> 1.6.1
        python3-flask-wtf: upgrade 1.1.0 -> 1.1.1
        python3-fastnumbers: upgrade 3.2.1 -> 4.0.1
        python3-flask-migrate: upgrade 4.0.1 -> 4.0.4
        python3-luma-oled: upgrade 3.9.0 -> 3.11.0
        python3-google-api-python-client: upgrade 2.72.0 -> 2.77.0
        python3-ipython: upgrade 8.8.0 -> 8.9.0
        python3-icu: upgrade 2.8.1 -> 2.10.2
        python3-license-expression: upgrade 30.0.0 -> 30.1.0
        python3-meh: upgrade 0.50.1 -> 0.51
        python3-portalocker: upgrade 2.6.0 -> 2.7.0
        python3-pandas: upgrade 1.5.2 -> 1.5.3
        python3-openpyxl: upgrade 3.0.10 -> 3.1.0
        python3-paramiko: upgrade 2.12.0 -> 3.0.0
        python3-portion: Upgrade 2.3.0 -> 2.3.1
        python3-pymisp: upgrade 2.4.167 -> 2.4.168
        python3-pymodbus: upgrade 3.1.0 -> 3.1.3
        python3-pykickstart: upgrade 3.34 -> 3.43
        python3-pyscaffold: upgrade 4.3.1 -> 4.4
        python3-pywbem: upgrade 1.5.0 -> 1.6.0
        python3-sentry-sdk: upgrade 1.13.0 -> 1.15.0
        python3-qrcode: upgrade 7.3.1 -> 7.4.2
        python3-reedsolo: upgrade 1.6.1 -> 1.7.0
        python3-simplejson: upgrade 3.18.1 -> 3.18.3
        python3-traitlets: upgrade 5.8.1 -> 5.9.0
        python3-sqlalchemy: upgrade 1.4.46 -> 2.0.3
        python3-websocket-client: upgrade 1.4.2 -> 1.5.1
        python3-xlsxwriter: upgrade 3.0.7 -> 3.0.8
        python3-xmlschema: upgrade 2.1.1 -> 2.2.1
        ctags: upgrade 6.0.20230115.0 -> 6.0.20230212.0
        ddrescue: upgrade 1.26 -> 1.27
        editorconfig-core-c: upgrade 0.12.5 -> 0.12.6
        htpdate: upgrade 1.3.6 -> 1.3.7
        iscsi-initiator-utils: upgrade 2.1.7 -> 2.1.8
        geoclue: upgrade 2.6.0 -> 2.7.0
        htop: upgrade 3.2.1 -> 3.2.2
        hwdata: upgrade 0.366 -> 0.367
        glog: upgrade 0.5.0 -> 0.6.0
        libtevent: upgrade 0.13.0 -> 0.14.1
        libtdb: upgrade 1.4.7 -> 1.4.8
        libtalloc: upgrade 2.3.4 -> 2.4.0
        jack: upgrade 1.19.21 -> 1.19.22
        jsonrpc: upgrade 1.3.0 -> 1.4.1
        liburing: upgrade 2.2 -> 2.3
        libusb-compat: upgrade 0.1.7 -> 0.1.8
        networkmanager: upgrade 1.40.10 -> 1.42.0
        minicoredumper: upgrade 2.0.2 -> 2.0.3
        neon: upgrade 0.32.4 -> 0.32.5
        nano: upgrade 7.1 -> 7.2
        netplan: upgrade 0.104 -> 0.106
        rdma-core: upgrade 42.0 -> 44.0
        pcsc-tools: upgrade 1.6.1 -> 1.6.2
        poppler-data: upgrade 0.4.11 -> 0.4.12
        sshpass: upgrade 1.09 -> 1.10
        poppler: upgrade 23.01.0 -> 23.02.0
        postgresql: upgrade 14.5 -> 15.2
        sip: upgrade 6.7.5 -> 6.7.7
        uchardet: upgrade 0.0.7 -> 0.0.8
        zabbix: upgrade 6.2.6 -> 6.2.7
        uftrace: upgrade 0.13 -> 0.13.1
        krb5: Fix install conflict when enable multilib.
        libnet: Fix install conflict when enable multilib.
        imlib2: Fix install conflict when enable multilib.
        python3-aiofiles: upgrade 22.1.0 -> 23.1.0
        python3-aiohttp: upgrade 3.8.3 -> 3.8.4
        python3-alembic: upgrade 1.9.2 -> 1.9.4
        python3-antlr4-runtime: upgrade 4.11.1 -> 4.12.0
        python3-astroid: upgrade 2.14.1 -> 2.14.2
        python3-autobahn: upgrade 23.1.1 -> 23.1.2
        python3-bitstruct: upgrade 8.15.1 -> 8.17.0
        python3-bitarray: upgrade 2.7.0 -> 2.7.3
        python3-django: upgrade 4.1.6 -> 4.1.7
        python3-google-api-python-client: upgrade 2.77.0 -> 2.79.0
        python3-flask: upgrade 2.2.2 -> 2.2.3
        python3-huey: upgrade 2.4.4 -> 2.4.5
        python3-google-auth: upgrade 2.16.0 -> 2.16.1
        python3-ipython: upgrade 8.9.0 -> 8.10.0
        python3-imageio: upgrade 2.25.0 -> 2.25.1
        python3-openpyxl: upgrade 3.1.0 -> 3.1.1
        python3-pykickstart: upgrade 3.43 -> 3.44
        python3-pydantic: upgrade 1.10.4 -> 1.10.5
        python3-pytest-forked: upgrade 1.4.0 -> 1.6.0
        python3-pytest-xdist: upgrade 3.1.0 -> 3.2.0
        python3-redis: upgrade 4.4.2 -> 4.5.1
        python3-soupsieve: upgrade 2.3.2.post1 -> 2.4
        python3-simpleeval: upgrade 0.9.12 -> 0.9.13
        python3-stevedore: upgrade 4.1.1 -> 5.0.0
        python3-sqlalchemy: upgrade 2.0.3 -> 2.0.4
        python3-watchdog: upgrade 2.2.1 -> 2.3.0
        python3-werkzeug: upgrade 2.2.2 -> 2.2.3
        python3-zeroconf: upgrade 0.47.1 -> 0.47.3
        python3-coverage: upgrade 7.1.0 -> 7.2.0
        python3-eth-keyfile: upgrade 0.6.0 -> 0.6.1

  Yi Zhao (7):
        meta-python: fix Upstream-Status format
        meta-oe: fix Upstream-Status format
        meta-networking: fix Upstream-Status format
        fatresize: fix Upstream-Status format
        apache2: use /run instead of /var/run for systemd volatile config
        phpmyadmin: upgrade 5.2.0 -> 5.2.1
        ufs-utils: upgrade 1.9 -> 3.12.3

  bhargav_das@mentor.com (1):
        python3-daemon_2.3.2.bb: add python-daemon recipe for python3

Signed-off-by: Andrew Geissler <geissonator@yahoo.com>
Change-Id: I826d53d70744bc80ebe8b60203241dfddce7d5fe
diff --git a/poky/meta/lib/oeqa/core/target/ssh.py b/poky/meta/lib/oeqa/core/target/ssh.py
index 7a10ba9..5107907 100644
--- a/poky/meta/lib/oeqa/core/target/ssh.py
+++ b/poky/meta/lib/oeqa/core/target/ssh.py
@@ -34,6 +34,8 @@
         self.timeout = timeout
         self.user = user
         ssh_options = [
+                '-o', 'ServerAliveCountMax=2',
+                '-o', 'ServerAliveInterval=30',
                 '-o', 'UserKnownHostsFile=/dev/null',
                 '-o', 'StrictHostKeyChecking=no',
                 '-o', 'LogLevel=ERROR'
@@ -224,27 +226,33 @@
     def run():
         nonlocal output
         nonlocal process
+        output_raw = b''
         starttime = time.time()
         process = subprocess.Popen(command, **options)
         if timeout:
             endtime = starttime + timeout
             eof = False
+            os.set_blocking(process.stdout.fileno(), False)
             while time.time() < endtime and not eof:
-                logger.debug('time: %s, endtime: %s' % (time.time(), endtime))
                 try:
+                    logger.debug('Waiting for process output: time: %s, endtime: %s' % (time.time(), endtime))
                     if select.select([process.stdout], [], [], 5)[0] != []:
-                        reader = codecs.getreader('utf-8')(process.stdout, 'ignore')
-                        data = reader.read(1024, 4096)
+                        # wait a bit for more data, tries to avoid reading single characters
+                        time.sleep(0.2)
+                        data = process.stdout.read()
                         if not data:
-                            process.stdout.close()
                             eof = True
                         else:
-                            output += data
-                            logger.debug('Partial data from SSH call: %s' % data)
+                            output_raw += data
+                            # ignore errors to capture as much as possible
+                            logger.debug('Partial data from SSH call:\n%s' % data.decode('utf-8', errors='ignore'))
                             endtime = time.time() + timeout
                 except InterruptedError:
+                    logger.debug('InterruptedError')
                     continue
 
+            process.stdout.close()
+
             # process hasn't returned yet
             if not eof:
                 process.terminate()
@@ -252,16 +260,30 @@
                 try:
                     process.kill()
                 except OSError:
+                    logger.debug('OSError when killing process')
                     pass
                 endtime = time.time() - starttime
                 lastline = ("\nProcess killed - no output for %d seconds. Total"
                             " running time: %d seconds." % (timeout, endtime))
-                logger.debug('Received data from SSH call %s ' % lastline)
+                logger.debug('Received data from SSH call:\n%s ' % lastline)
                 output += lastline
 
         else:
-            output = process.communicate()[0].decode('utf-8', errors='ignore')
-            logger.debug('Data from SSH call: %s' % output.rstrip())
+            output_raw = process.communicate()[0]
+
+        output = output_raw.decode('utf-8', errors='ignore')
+        logger.debug('Data from SSH call:\n%s' % output.rstrip())
+
+        # timout or not, make sure process exits and is not hanging
+        if process.returncode == None:
+            try:
+                process.wait(timeout=5)
+            except TimeoutExpired:
+                try:
+                    process.kill()
+                except OSError:
+                    logger.debug('OSError')
+                    pass
 
     options = {
         "stdout": subprocess.PIPE,
@@ -290,4 +312,5 @@
             process.kill()
         logger.debug('Something went wrong, killing SSH process')
         raise
-    return (process.wait(), output.rstrip())
+
+    return (process.returncode, output.rstrip())
diff --git a/poky/meta/lib/oeqa/selftest/cases/prservice.py b/poky/meta/lib/oeqa/selftest/cases/prservice.py
index cb95503..9fe3b80 100644
--- a/poky/meta/lib/oeqa/selftest/cases/prservice.py
+++ b/poky/meta/lib/oeqa/selftest/cases/prservice.py
@@ -77,7 +77,7 @@
         exported_db_path = os.path.join(self.builddir, 'export.inc')
         export_result = runCmd("bitbake-prserv-tool export %s" % exported_db_path, ignore_status=True)
         self.assertEqual(export_result.status, 0, msg="PR Service database export failed: %s" % export_result.output)
-        self.assertTrue(os.path.exists(exported_db_path))
+        self.assertTrue(os.path.exists(exported_db_path), msg="%s didn't exist, tool output %s" % (exported_db_path, export_result.output))
 
         if replace_current_db:
             current_db_path = os.path.join(get_bb_var('PERSISTENT_DIR'), 'prserv.sqlite3')
diff --git a/poky/meta/lib/oeqa/selftest/cases/resulttooltests.py b/poky/meta/lib/oeqa/selftest/cases/resulttooltests.py
index c2e76f1..f059991 100644
--- a/poky/meta/lib/oeqa/selftest/cases/resulttooltests.py
+++ b/poky/meta/lib/oeqa/selftest/cases/resulttooltests.py
@@ -71,7 +71,7 @@
         self.assertTrue('target_result1' in results['runtime/mydistro/qemux86/image'], msg="Pair not correct:%s" % results)
         self.assertTrue('target_result3' in results['runtime/mydistro/qemux86-64/image'], msg="Pair not correct:%s" % results)
 
-    def test_regrresion_can_get_regression_result(self):
+    def test_regression_can_get_regression_result(self):
         base_result_data = {'result': {'test1': {'status': 'PASSED'},
                                        'test2': {'status': 'PASSED'},
                                        'test3': {'status': 'FAILED'},
@@ -98,3 +98,246 @@
         resultutils.append_resultsdata(results, ResultToolTests.target_results_data, configmap=resultutils.flatten_map)
         self.assertEqual(len(results[''].keys()), 5, msg="Flattened results not correct %s" % str(results))
 
+    def test_results_without_metadata_can_be_compared(self):
+        base_configuration = {"configuration": {
+            "TEST_TYPE": "oeselftest",
+            "TESTSERIES": "series1",
+            "IMAGE_BASENAME": "image",
+            "IMAGE_PKGTYPE": "ipk",
+            "DISTRO": "mydistro",
+            "MACHINE": "qemux86",
+            "STARTTIME": 1672527600
+        }, "result": {}}
+        target_configuration = {"configuration": {
+                                "TEST_TYPE": "oeselftest",
+                                "TESTSERIES": "series1",
+                                "IMAGE_BASENAME": "image",
+                                "IMAGE_PKGTYPE": "ipk",
+                                "DISTRO": "mydistro",
+                                "MACHINE": "qemux86",
+                                "STARTTIME": 1672527600
+                                }, "result": {}}
+        self.assertTrue(regression.can_be_compared(self.logger, base_configuration, target_configuration),
+                        msg="incorrect metadata filtering, tests without metadata should be compared")
+
+    def test_target_result_with_missing_metadata_can_not_be_compared(self):
+        base_configuration = {"configuration": {
+            "TEST_TYPE": "oeselftest",
+            "TESTSERIES": "series1",
+            "IMAGE_BASENAME": "image",
+            "IMAGE_PKGTYPE": "ipk",
+            "DISTRO": "mydistro",
+            "MACHINE": "qemux86",
+            "OESELFTEST_METADATA": {
+                "run_all_tests": True,
+                "run_tests": None,
+                "skips": None,
+                "machine": None,
+                "select_tags": ["toolchain-user", "toolchain-system"],
+                "exclude_tags": None
+            }}, "result": {}}
+        target_configuration = {"configuration": {"TEST_TYPE": "oeselftest",
+                                "TESTSERIES": "series1",
+                                                  "IMAGE_BASENAME": "image",
+                                                  "IMAGE_PKGTYPE": "ipk",
+                                                  "DISTRO": "mydistro",
+                                                  "MACHINE": "qemux86",
+                                                  "STARTTIME": 1672527600
+                                                  }, "result": {}}
+        self.assertFalse(regression.can_be_compared(self.logger, base_configuration, target_configuration),
+                         msg="incorrect metadata filtering, tests should not be compared")
+
+    def test_results_with_matching_metadata_can_be_compared(self):
+        base_configuration = {"configuration": {
+            "TEST_TYPE": "oeselftest",
+            "TESTSERIES": "series1",
+            "IMAGE_BASENAME": "image",
+            "IMAGE_PKGTYPE": "ipk",
+                             "DISTRO": "mydistro",
+                             "MACHINE": "qemux86",
+            "STARTTIME": 1672527600,
+                             "OESELFTEST_METADATA": {"run_all_tests": True,
+                                                     "run_tests": None,
+                                                     "skips": None,
+                                                     "machine": None,
+                                                     "select_tags": ["toolchain-user", "toolchain-system"],
+                                                     "exclude_tags": None}
+        }, "result": {}}
+        target_configuration = {"configuration": {
+            "TEST_TYPE": "oeselftest",
+            "TESTSERIES": "series1",
+            "IMAGE_BASENAME": "image",
+            "IMAGE_PKGTYPE": "ipk",
+            "DISTRO": "mydistro",
+            "MACHINE": "qemux86",
+                                "STARTTIME": 1672527600,
+                                "OESELFTEST_METADATA": {"run_all_tests": True,
+                                                        "run_tests": None,
+                                                        "skips": None,
+                                                        "machine": None,
+                                                        "select_tags": ["toolchain-user", "toolchain-system"],
+                                                        "exclude_tags": None}
+                                }, "result": {}}
+        self.assertTrue(regression.can_be_compared(self.logger, base_configuration, target_configuration),
+                        msg="incorrect metadata filtering, tests with matching metadata should be compared")
+
+    def test_results_with_mismatching_metadata_can_not_be_compared(self):
+        base_configuration = {"configuration": {
+            "TEST_TYPE": "oeselftest",
+            "TESTSERIES": "series1",
+            "IMAGE_BASENAME": "image",
+            "IMAGE_PKGTYPE": "ipk",
+            "DISTRO": "mydistro",
+            "MACHINE": "qemux86",
+            "STARTTIME": 1672527600,
+            "OESELFTEST_METADATA": {"run_all_tests": True,
+                                    "run_tests": None,
+                                    "skips": None,
+                                    "machine": None,
+                                    "select_tags": ["toolchain-user", "toolchain-system"],
+                                    "exclude_tags": None}
+        }, "result": {}}
+        target_configuration = {"configuration": {
+            "TEST_TYPE": "oeselftest",
+            "TESTSERIES": "series1",
+            "IMAGE_BASENAME": "image",
+            "IMAGE_PKGTYPE": "ipk",
+            "DISTRO": "mydistro",
+            "MACHINE": "qemux86",
+                                "STARTTIME": 1672527600,
+                                "OESELFTEST_METADATA": {"run_all_tests": True,
+                                                        "run_tests": None,
+                                                        "skips": None,
+                                                        "machine": None,
+                                                        "select_tags": ["machine"],
+                                                        "exclude_tags": None}
+                                }, "result": {}}
+        self.assertFalse(regression.can_be_compared(self.logger, base_configuration, target_configuration),
+                         msg="incorrect metadata filtering, tests with mismatching metadata should not be compared")
+
+    def test_metadata_matching_is_only_checked_for_relevant_test_type(self):
+        base_configuration = {"configuration": {"TEST_TYPE": "runtime",
+                              "TESTSERIES": "series1",
+                                                "IMAGE_BASENAME": "image",
+                                                "IMAGE_PKGTYPE": "ipk",
+                                                "DISTRO": "mydistro",
+                                                "MACHINE": "qemux86",
+                                                "STARTTIME": 1672527600,
+                                                "OESELFTEST_METADATA": {"run_all_tests": True,
+                                                                        "run_tests": None,
+                                                                        "skips": None,
+                                                                        "machine": None,
+                                                                        "select_tags": ["toolchain-user", "toolchain-system"],
+                                                                        "exclude_tags": None}}, "result": {}}
+        target_configuration = {"configuration": {"TEST_TYPE": "runtime",
+                                "TESTSERIES": "series1",
+                                                  "IMAGE_BASENAME": "image",
+                                                  "IMAGE_PKGTYPE": "ipk",
+                                                  "DISTRO": "mydistro",
+                                                  "MACHINE": "qemux86",
+                                                  "STARTTIME": 1672527600,
+                                                  "OESELFTEST_METADATA": {"run_all_tests": True,
+                                                                          "run_tests": None,
+                                                                          "skips": None,
+                                                                          "machine": None,
+                                                                          "select_tags": ["machine"],
+                                                                          "exclude_tags": None}}, "result": {}}
+        self.assertTrue(regression.can_be_compared(self.logger, base_configuration, target_configuration),
+                        msg="incorrect metadata filtering, %s tests should be compared" % base_configuration['configuration']['TEST_TYPE'])
+
+    def test_machine_matches(self):
+        base_configuration = {"configuration": {
+            "TEST_TYPE": "runtime",
+            "MACHINE": "qemux86"}, "result": {}}
+        target_configuration = {"configuration": {
+            "TEST_TYPE": "runtime",
+            "MACHINE": "qemux86"
+        }, "result": {}}
+        self.assertTrue(regression.can_be_compared(self.logger, base_configuration, target_configuration),
+                        msg="incorrect machine filtering, identical machine tests should be compared")
+
+    def test_machine_mismatches(self):
+        base_configuration = {"configuration": {
+            "TEST_TYPE": "runtime",
+            "MACHINE": "qemux86"
+        }, "result": {}}
+        target_configuration = {"configuration": {
+            "TEST_TYPE": "runtime",
+            "MACHINE": "qemux86_64"
+        }, "result": {}}
+        self.assertFalse(regression.can_be_compared(self.logger, base_configuration, target_configuration),
+                         msg="incorrect machine filtering, mismatching machine tests should not be compared")
+
+    def test_can_not_compare_non_ltp_tests(self):
+        base_configuration = {"configuration": {
+            "TEST_TYPE": "runtime",
+            "MACHINE": "qemux86"
+        }, "result": {
+            "ltpresult_foo": {
+                "STATUS": "PASSED"
+            }}}
+        target_configuration = {"configuration": {
+            "TEST_TYPE": "runtime",
+            "MACHINE": "qemux86_64"
+        }, "result": {
+            "bar": {
+                "STATUS": "PASSED"
+            }}}
+        self.assertFalse(regression.can_be_compared(self.logger, base_configuration, target_configuration),
+                         msg="incorrect ltpresult filtering, mismatching ltpresult content should not be compared")
+
+    def test_can_compare_ltp_tests(self):
+        base_configuration = {"configuration": {
+            "TEST_TYPE": "runtime",
+            "MACHINE": "qemux86"
+        }, "result": {
+            "ltpresult_foo": {
+                "STATUS": "PASSED"
+            }}}
+        target_configuration = {"configuration": {
+            "TEST_TYPE": "runtime",
+            "MACHINE": "qemux86"
+        }, "result": {
+            "ltpresult_foo": {
+                "STATUS": "PASSED"
+            }}}
+        self.assertTrue(regression.can_be_compared(self.logger, base_configuration, target_configuration),
+                        msg="incorrect ltpresult filtering, matching ltpresult content should be compared")
+
+    def test_can_match_non_static_ptest_names(self):
+        base_configuration = {"configuration": {
+            "TEST_TYPE": "runtime",
+            "MACHINE": "qemux86"
+        }, "result": {
+            "ptestresult.lttng-tools.foo_-_bar_-_moo": {
+                "STATUS": "PASSED"
+            },
+            "ptestresult.babeltrace.bar_-_moo_-_foo": {
+                "STATUS": "PASSED"
+            },
+            "ptestresult.babletrace2.moo_-_foo_-_bar": {
+                "STATUS": "PASSED"
+            },
+            "ptestresult.curl.test_0000__foo_out_of_bar": {
+                "STATUS": "PASSED"
+            }
+        }}
+        target_configuration = {"configuration": {
+            "TEST_TYPE": "runtime",
+            "MACHINE": "qemux86"
+        }, "result": {
+            "ptestresult.lttng-tools.xxx_-_yyy_-_zzz": {
+                "STATUS": "PASSED"
+            },
+            "ptestresult.babeltrace.yyy_-_zzz_-_xxx": {
+                "STATUS": "PASSED"
+            },
+            "ptestresult.babletrace2.zzz_-_xxx_-_yyy": {
+                "STATUS": "PASSED"
+            },
+            "ptestresult.curl.test_0000__xxx_out_of_yyy": {
+                "STATUS": "PASSED"
+            }
+            }}
+        self.assertTrue(regression.can_be_compared(self.logger, base_configuration, target_configuration),
+                        msg="incorrect ptests filtering, tests shoould be compared if prefixes match")
diff --git a/poky/meta/lib/oeqa/selftest/cases/runtime_test.py b/poky/meta/lib/oeqa/selftest/cases/runtime_test.py
index 7d99c15..e32c4af 100644
--- a/poky/meta/lib/oeqa/selftest/cases/runtime_test.py
+++ b/poky/meta/lib/oeqa/selftest/cases/runtime_test.py
@@ -260,17 +260,6 @@
         if distro and (distro in ['debian-9', 'debian-10', 'centos-7', 'centos-8', 'ubuntu-16.04', 'ubuntu-18.04'] or distro.startswith('almalinux')):
             self.skipTest('virgl headless cannot be tested with %s' %(distro))
 
-        render_hint = """If /dev/dri/renderD* is absent due to lack of suitable GPU, 'modprobe vgem' will create one suitable for mesa llvmpipe software renderer."""
-        try:
-            content = os.listdir("/dev/dri")
-            if len([i for i in content if i.startswith('render')]) == 0:
-                self.fail("No render nodes found in /dev/dri: %s. %s" %(content, render_hint))
-        except FileNotFoundError:
-            self.fail("/dev/dri directory does not exist; no render nodes available on this machine. %s" %(render_hint))
-        try:
-            dripath = subprocess.check_output("PATH=/bin:/usr/bin:$PATH pkg-config --variable=dridriverdir dri", shell=True)
-        except subprocess.CalledProcessError as e:
-            self.fail("Could not determine the path to dri drivers on the host via pkg-config.\nPlease install Mesa development files (particularly, dri.pc) on the host machine.")
         qemu_distrofeatures = get_bb_var('DISTRO_FEATURES', 'qemu-system-native')
         features = 'IMAGE_CLASSES += "testimage"\n'
         if 'opengl' not in qemu_distrofeatures:
diff --git a/poky/meta/lib/oeqa/selftest/cases/wic.py b/poky/meta/lib/oeqa/selftest/cases/wic.py
index ca1abb9..b9430cd 100644
--- a/poky/meta/lib/oeqa/selftest/cases/wic.py
+++ b/poky/meta/lib/oeqa/selftest/cases/wic.py
@@ -1151,6 +1151,26 @@
             out = glob(os.path.join(self.resultdir, "%s-*.direct" % wksname))
             self.assertEqual(1, len(out))
 
+    @skipIfNotArch(['i586', 'i686', 'x86_64', 'aarch64'])
+    def test_uefi_kernel(self):
+        """ Test uefi-kernel in wic """
+        config = 'IMAGE_EFI_BOOT_FILES="/etc/fstab;testfile"\nIMAGE_FSTYPES = "wic"\nWKS_FILE = "test_uefikernel.wks"\nMACHINE_FEATURES:append = " efi"\n'
+        self.append_config(config)
+        bitbake('core-image-minimal')
+        self.remove_config(config)
+
+        img = 'core-image-minimal'
+        with NamedTemporaryFile("w", suffix=".wks") as wks:
+            wks.writelines(['part /boot --source bootimg-efi --sourceparams="loader=uefi-kernel"\n'
+                            'part / --source rootfs --fstype=ext4 --align 1024 --use-uuid\n'\
+                            'bootloader --timeout=0 --append="console=ttyS0,115200n8"\n'])
+            wks.flush()
+            cmd = "wic create %s -e %s -o %s" % (wks.name, img, self.resultdir)
+            runCmd(cmd)
+            wksname = os.path.splitext(os.path.basename(wks.name))[0]
+            out = glob(os.path.join(self.resultdir, "%s-*.direct" % wksname))
+            self.assertEqual(1, len(out))
+
     # TODO this test could also work on aarch64
     @skipIfNotArch(['i586', 'i686', 'x86_64'])
     @OETestTag("runqemu")
diff --git a/poky/meta/lib/oeqa/selftest/cases/yoctotestresultsquerytests.py b/poky/meta/lib/oeqa/selftest/cases/yoctotestresultsquerytests.py
new file mode 100644
index 0000000..312edb6
--- /dev/null
+++ b/poky/meta/lib/oeqa/selftest/cases/yoctotestresultsquerytests.py
@@ -0,0 +1,39 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+import os
+import sys
+import subprocess
+import shutil
+from oeqa.selftest.case import OESelftestTestCase
+from yocto_testresults_query import get_sha1, create_workdir
+basepath = os.path.abspath(os.path.dirname(__file__) + '/../../../../../')
+lib_path = basepath + '/scripts/lib'
+sys.path = sys.path + [lib_path]
+
+
+class TestResultsQueryTests(OESelftestTestCase):
+    def test_get_sha1(self):
+        test_data_get_sha1 = [
+            {"input": "yocto-4.0", "expected": "00cfdde791a0176c134f31e5a09eff725e75b905"},
+            {"input": "4.1_M1", "expected": "95066dde6861ee08fdb505ab3e0422156cc24fae"},
+        ]
+        for data in test_data_get_sha1:
+            test_name = data["input"]
+            with self.subTest(f"Test SHA1 from {test_name}"):
+                self.assertEqual(
+                    get_sha1(basepath, data["input"]), data["expected"])
+
+    def test_create_workdir(self):
+        workdir = create_workdir()
+        try:
+            url = subprocess.check_output(
+                ["git", "-C", workdir, "remote", "get-url", "origin"]).strip().decode("utf-8")
+        except:
+            shutil.rmtree(workdir, ignore_errors=True)
+            self.fail(f"Can not execute git commands in {workdir}")
+        shutil.rmtree(workdir)
+        self.assertEqual(url, "git://git.yoctoproject.org/yocto-testresults")
diff --git a/poky/meta/lib/oeqa/selftest/context.py b/poky/meta/lib/oeqa/selftest/context.py
index c7dd03c..ab13131 100644
--- a/poky/meta/lib/oeqa/selftest/context.py
+++ b/poky/meta/lib/oeqa/selftest/context.py
@@ -22,6 +22,17 @@
 
 from oeqa.utils.commands import runCmd, get_bb_vars, get_test_layer
 
+OESELFTEST_METADATA=["run_all_tests", "run_tests", "skips", "machine", "select_tags", "exclude_tags"]
+
+def get_oeselftest_metadata(args):
+    result = {}
+    raw_args = vars(args)
+    for metadata in OESELFTEST_METADATA:
+        if metadata in raw_args:
+            result[metadata] = raw_args[metadata]
+
+    return result
+
 class NonConcurrentTestSuite(unittest.TestSuite):
     def __init__(self, suite, processes, setupfunc, removefunc):
         super().__init__([suite])
@@ -334,12 +345,14 @@
         import platform
         from oeqa.utils.metadata import metadata_from_bb
         metadata = metadata_from_bb()
+        oeselftest_metadata = get_oeselftest_metadata(args)
         configuration = {'TEST_TYPE': 'oeselftest',
                         'STARTTIME': args.test_start_time,
                         'MACHINE': self.tc.td["MACHINE"],
                         'HOST_DISTRO': oe.lsb.distro_identifier().replace(' ', '-'),
                         'HOST_NAME': metadata['hostname'],
-                        'LAYERS': metadata['layers']}
+                        'LAYERS': metadata['layers'],
+                        'OESELFTEST_METADATA': oeselftest_metadata}
         return configuration
 
     def get_result_id(self, configuration):
diff --git a/poky/meta/lib/oeqa/utils/dump.py b/poky/meta/lib/oeqa/utils/dump.py
index bcee03b..d420b49 100644
--- a/poky/meta/lib/oeqa/utils/dump.py
+++ b/poky/meta/lib/oeqa/utils/dump.py
@@ -93,37 +93,55 @@
             self._write_dump(cmd.split()[0], result.output)
 
 class TargetDumper(BaseDumper):
-    """ Class to get dumps from target, it only works with QemuRunner """
+    """ Class to get dumps from target, it only works with QemuRunner.
+        Will give up permanently after 5 errors from running commands over
+        serial console. This helps to end testing when target is really dead, hanging
+        or unresponsive.
+    """
 
     def __init__(self, cmds, parent_dir, runner):
         super(TargetDumper, self).__init__(cmds, parent_dir)
         self.runner = runner
+        self.errors = 0
 
     def dump_target(self, dump_dir=""):
+        if self.errors >= 5:
+                print("Too many errors when dumping data from target, assuming it is dead! Will not dump data anymore!")
+                return
         if dump_dir:
             self.dump_dir = dump_dir
         for cmd in self.cmds:
             # We can continue with the testing if serial commands fail
             try:
                 (status, output) = self.runner.run_serial(cmd)
+                if status == 0:
+                    self.errors = self.errors + 1
                 self._write_dump(cmd.split()[0], output)
             except:
+                self.errors = self.errors + 1
                 print("Tried to dump info from target but "
                         "serial console failed")
                 print("Failed CMD: %s" % (cmd))
 
 class MonitorDumper(BaseDumper):
-    """ Class to get dumps via the Qemu Monitor, it only works with QemuRunner """
+    """ Class to get dumps via the Qemu Monitor, it only works with QemuRunner
+        Will stop completely if there are more than 5 errors when dumping monitor data.
+        This helps to end testing when target is really dead, hanging or unresponsive.
+    """
 
     def __init__(self, cmds, parent_dir, runner):
         super(MonitorDumper, self).__init__(cmds, parent_dir)
         self.runner = runner
+        self.errors = 0
 
     def dump_monitor(self, dump_dir=""):
         if self.runner is None:
             return
         if dump_dir:
             self.dump_dir = dump_dir
+        if self.errors >= 5:
+                print("Too many errors when dumping data from qemu monitor, assuming it is dead! Will not dump data anymore!")
+                return
         for cmd in self.cmds:
             cmd_name = cmd.split()[0]
             try:
@@ -137,4 +155,5 @@
                     output = self.runner.run_monitor(cmd_name)
                 self._write_dump(cmd_name, output)
             except Exception as e:
+                self.errors = self.errors + 1
                 print("Failed to dump QMP CMD: %s with\nException: %s" % (cmd_name, e))
diff --git a/poky/meta/lib/oeqa/utils/qemurunner.py b/poky/meta/lib/oeqa/utils/qemurunner.py
index 8b89360..0538576 100644
--- a/poky/meta/lib/oeqa/utils/qemurunner.py
+++ b/poky/meta/lib/oeqa/utils/qemurunner.py
@@ -202,7 +202,7 @@
         qmp_file = "." + next(tempfile._get_candidate_names())
         qmp_param = ' -S -qmp unix:./%s,server,wait' % (qmp_file)
         qmp_port = self.tmpdir + "/" + qmp_file
-        # Create a second socket connection for debugging use, 
+        # Create a second socket connection for debugging use,
         # note this will NOT cause qemu to block waiting for the connection
         qmp_file2 = "." + next(tempfile._get_candidate_names())
         qmp_param += ' -qmp unix:./%s,server,nowait' % (qmp_file2)
@@ -350,6 +350,8 @@
                     return False
 
             try:
+                # set timeout value for all QMP calls
+                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" %
@@ -468,6 +470,8 @@
                     socklist.remove(self.server_socket)
                     self.logger.debug("Connection from %s:%s" % addr)
                 else:
+                    # try to avoid reading only a single character at a time
+                    time.sleep(0.1)
                     data = data + sock.recv(1024)
                     if data:
                         bootlog += data
@@ -626,6 +630,7 @@
 
     def run_monitor(self, command, args=None, timeout=60):
         if hasattr(self, 'qmp') and self.qmp:
+            self.qmp.settimeout(timeout)
             if args is not None:
                 return self.qmp.cmd(command, args)
             else:
@@ -653,6 +658,8 @@
             except InterruptedError:
                 continue
             if sread:
+                # try to avoid reading single character at a time
+                time.sleep(0.1)
                 answer = self.server_socket.recv(1024)
                 if answer:
                     data += answer.decode('utf-8')