subtree updates

poky: 8d0ba08aa6..2696bf8cf3:
  Adam Johnston (1):
        useradd_base: Fix sed command line for passwd-expire

  Adrian Freihofer (1):
        vscode: add minimal configuration

  Alassane Yattara (44):
        bitbake: Update toaster-requirements to add django-log-viewer==1.1.7
        bitbake: toaster: bug-fix on tests.browser.test_most_recent_builds_states
        bitbake: Toaster: Bug-fix failure on tests.browser.test_layerdetails_page
        bitbake: Toaster: Fixed javascript issue on tests.browser.test_js_unit_tests
        bitbake: Toaster: bug-fix on /toastermain/logs.py
        bitbake: Toaster: bug-fix on custom image test cases
        bitbake: Toaster: bug-fix on tests/views/test_views.py
        bitbake: Toaster: bug-fix on tests.views.test_views.py
        bitbake: toaster: Write logs to BUILDDIR/toaster_logs
        bitbake: toaster: Add toaster-tests-requirements.txt to add pytest and some plugins
        bitbake: toaster: Update orm.models to catch error ProcessLookupError
        bitbake: toaster: Bug-fix pytest and Failed: Database access not allowed
        bitbake: toaster: fixed pytest error: Database access not allowed, use the "django_db"
        bitbake: toaster: Bug-fix django.db.utils.IntegrityError: Problem installing fixture
        bitbake: toaster: fixed: Tests fail when executed one after the other out of sequence
        bitbake: toaster: Added pytest.ini file
        bitbake: toaster: Check info_sign is visible and clickable in landing page
        bitbake: toaster: Test documentation link in landing header is displayed
        bitbake: toaster: Test jumbotron links visible and clickable
        bitbake: toaster: Bug-fix webdriver No parameter named options
        bitbake: Toaster: Write UI TestCase create new project
        bitbake: Toaster: Test create new project without project name
        bitbake: Toaster: Write UI TestCase import new project using
        bitbake: toaster/tests: Add UI TestCase to test if 'no build' message is shown
        bitbake: toaster/tests: Add UI TestCase to test search box on all build page
        bitbake: toaster/tests: Add UI TestCase to test the filtering feature on 'failure tasks' column
        bitbake: toaster/tests: Add UI TestCase to test filtering feature on 'completed_on' column
        bitbake: toaster/tests: Add UI TestCase to test "edit column" feature show/hide column
        bitbake: toaster/tests: Add UI TestCase to test "show rows" feature, change displaying rows in table
        bitbake: toaster/tests: Add UI TestCase for deleting project
        bitbake: toaster/tests: Add UI TestCase for Visualize all projects
        bitbake: toaster/tests: Add UI TestCase for visualize all projects edit column
        bitbake: toaster/tests: Add UI TestCase for visualize all projects show rows
        bitbake: toaster/tests/create_new_project: Code cleanup
        bitbake: toaster/tests: Add UI TestCase - Check project header contains right items
        bitbake: toaster/tests: Add UI TestCase - Test edit project name on project page
        bitbake: toaster/tests: Add UI TestCase - Test project page has right tabs displayed
        bitbake: toaster/tests: Add UI TestCase - Test project config tab navigation:
        bitbake: toaster/tests: Add UI TestCase - Test project config tab
        bitbake: toaster/tests: Add UI TestCase - Test project page tab import layer
        bitbake: toaster/tests: Add UI TestCase - Test project page tab "New custom image"
        bitbake: toaster/tests: Add UI TestCase - Test project page section images
        bitbake: toaster/tests: Add UI TestCase for the edit column feature in image recipe
        bitbake: toaster/tests: Add UI TestCase - Test the show rows feature in image recipe

  Alberto Pianon (1):
        bitbake: fetch2: Add API for upstream source tracing

  Alejandro Hernandez Samaniego (2):
        qemuarmv5: Drop QB_DTB conditional for older kernels
        baremetal-helloworld: Pull in fix for race condition on x86-64

  Alex Stewart (1):
        libsndfile1: fix CVE-2022-33065

  Alexander Kanavin (10):
        scripts/bitbake-whatchanged: remove
        selftest/buildoptions: tag the download mirror test with 'yocto-mirrors'
        bitbake: runqueue.py: clarify that 'closest' signature means 'most recent' (and not closest in its content)
        selftest/sstatetests: add tests for 'bitbake -S printdiff'
        lib/oe/sstatesig.py: dump locked.sigs.inc only when explicitly asked via -S lockedsigs
        selftest/sstatetests: add a test for CDN sstate cache
        populate_sdk_ext.bbclass: do not symlink unfsd from sdk image sysroot into eSDK tools path
        meta/lib/oe/copy_buildsystem.py: do not derefence symlinks
        scripts/esdk-tools: use a dedicated, static directory for esdk tools
        populate_sdk_ext: split copy_buildsystem() into logical steps defined as functions

  Alexander Lussier-Cullen (2):
        bitbake: toaster/tests: add passthroughs for relevant build environment variables
        bitbake: toaster: make django temp directory configurable

  Alexandre Belloni (1):
        strace: further clean up of ptest folders

  Alexis Lothoré (5):
        scripts/resulttool: limit the number of changes displayed per test
        scripts/resulttool: rearrange regressions report order
        scripts/resulttool: make additional info more compact
        scripts/yocto_testresults_query: add option to change display limit
        scripts/resulttool: group all regressions in regression report

  Anuj Mittal (9):
        gstreamer1.0: upgrade 1.22.6 -> 1.22.7
        gsettings-desktop-schemas: upgrade 44.0 -> 45.0
        harfbuzz: upgrade 8.2.2 -> 8.3.0
        libnotify: upgrade 0.8.2 -> 0.8.3
        libtirpc: upgrade 1.3.3 -> 1.3.4
        mmc-utils: upgrade to latest revision
        puzzles: upgrade to latest revision
        sqlite3: upgrade 3.43.2 -> 3.44.0
        vulkan: upgrade 1.3.261.1 -> 1.3.268.0

  Archana Polampalli (1):
        vim: Upgrade 9.0.2048 -> 9.0.2068

  Arne Schwerdt (1):
        ref-manual: Warn about COMPATIBLE_MACHINE skipping native recipes

  BELHADJ SALEM Talel (8):
        bitbake.conf: Drop DEPLOY_DIR_TAR
        ref-manual: Fix PACKAGECONFIG term and add an example
        dev-manual: layers: Add notes about layer.conf
        ref-manual: variables: add RECIPE_SYSROOT and RECIPE_SYSROOT_NATIVE
        ref-manual: variables: add TOOLCHAIN_OPTIONS variable
        ref-manual: variables: add example for SYSROOT_DIRS variable
        bitbake: Fix find_bbfiles string endswith call
        overview-manual: concepts: Add Bitbake Tasks Map

  Bastian Krause (1):
        linux-firmware: add new fw file to ${PN}-rtl8821

  Bruce Ashfield (22):
        linux-yocto/6.1: update to v6.1.56
        linux-yocto/6.5: update to v6.5.6
        linux-yocto/6.1: tiny: fix arm 32 boot
        linux-yocto/6.5: tiny: fix arm 32 boot
        linux-yocto/6.5: update to v6.5.7
        linux-yocto/6.1: update to v6.1.57
        linux-yocto/6.4: drop recipes
        linux-yocto/6.5: avoid serial port suspend issues
        linux-yocto/6.5: config: remove VIDEO_STK1160_COMMON
        linux-yocto/6.5: serial: core: integrate upstream fixes
        linux-yocto/6.5: update to v6.5.8
        linux-yocto/6.1: update to v6.1.59
        linux-yocto/6.5: update to v6.5.9
        linux-yocto/6.1: update to v6.1.60
        kern-tools: make lower context patches reproducible
        kern-tools: bump SRCREV for queue processing changes
        kern-tools: update SRCREV to include SECURITY.md file
        kernel-yocto: improve metadata patching
        linux-yocto/6.1: cfg: restore CONFIG_DEVMEM
        linux-yocto/6.1: update to v6.1.61
        linux-yocto/6.5: cfg: restore CONFIG_DEVMEM
        linux-yocto/6.5: update to v6.5.10

  Chen Qi (2):
        kernel.bbclass: add preceding space in appendVar setting
        systemd: fix DynamicUser issue

  Chris Laplante (4):
        bitbake: codeparser: replace deprecated ast.Str and 's'
        bitbake: runqueue: set has 'add', not 'append' method
        bitbake: codeparser: add missing 'import os'
        bitbake: codegen: cleanup deprecated AST usages

  Deepthi Hemraj (1):
        binutils: Fix CVE-2022-47007

  Desone Burns (1):
        bitbake: bitbake: fetch2: git: Update Git-LFS download and tests

  Dmitry Baryshkov (11):
        kernel-arch: drop CCACHE from KERNEL_STRIP definition
        meson: use correct targets for rust binaries
        linux-firmware: upgrade 20230804 -> 20231030
        linux-firmware: add missing depenencies on license packages
        linux-firmware: add notice file to sdm845 modem firmware
        linux-firmware: add audio topology symlink to the X13's audio package
        linux-firmware: package firmware for Qualcomm Adreno a702
        linux-firmware: package firmware for Qualcomm QCM2290 / QRB4210
        linux-firmware: package Qualcomm Venus 6.0 firmware
        linux-firmware: package Robotics RB5 sensors DSP firmware
        libdrm: upgrade 2.4.116 -> 2.4.117

  Eero Aaltonen (3):
        base-files, systemd: add nss-resolve plugin
        systemd: add option to use stub-resolv.conf
        ref-manual: add systemd-resolved to distro features

  Etienne Cordonnier (1):
        bitbake: bitbake-worker: add header with length of message

  Fabio Estevam (1):
        packagegroup-core-tools-profile: Remove PROFILE_TOOLS_X

  Fahad Arslan (1):
        linux-firmware: create separate packages

  Felix Moessbauer (1):
        bitbake: fetch2/aws: forward env-vars used in gitlab-ci K8s

  Florian Wickert (1):
        systemd: fix libnss-mymachines packaging

  Glenn Strauss (3):
        lighttpd: upgrade 1.4.71 -> 1.4.72
        lighttpd: update init script
        lighttpd: modernize lighttpd.conf

  Javier Tia (1):
        kernel-arch: use ccache only for compiler

  Jermain Horsman (3):
        lib/oe/buildcfg.py: Include missing import
        lib/oe/buildcfg.py: Remove unused parameter
        lib/bblayers/setupwriters/oe-setup-layers.py: Fix indentation

  Joakim Tjernlund (1):
        sed -i destroys symlinks

  Johannes Schneider (1):
        base-files: profile: allow profile.d to set EDITOR

  Jon Mason (2):
        qemu: drop unreferenced patch
        linux-yocto: Update dtb path for qemuarmv5

  Jose Quaresma (5):
        sstatesig: be more precise and show the full path in exceptions
        systemd: sort packages before pn
        systemd: add systemd-crypt package
        systemd: add cryptsetup-plugins package config
        systemd: add p11kit package config

  Joshua Watt (24):
        goarch: Move Go architecture mapping to a library
        bitbake: asyncrpc: Abstract sockets
        bitbake: hashserv: Add websocket connection implementation
        bitbake: asyncrpc: Add context manager API
        bitbake: hashserv: tests: Add external database tests
        bitbake: asyncrpc: Prefix log messages with client info
        bitbake: bitbake-hashserv: Allow arguments from environment
        bitbake: hashserv: Abstract database
        bitbake: hashserv: Add SQLalchemy backend
        bitbake: hashserv: Implement read-only version of "report" RPC
        bitbake: asyncrpc: Add InvokeError
        bitbake: asyncrpc: client: Prevent double closing of loop
        bitbake: asyncrpc: client: Add disconnect API
        bitbake: hashserv: Add user permissions
        bitbake: hashserv: Add become-user API
        bitbake: hashserv: Add db-usage API
        bitbake: hashserv: Add database column query API
        bitbake: hashserv: test: Add bitbake-hashclient tests
        bitbake: bitbake-hashclient: Output stats in JSON format
        bitbake: bitbake-hashserver: Allow anonymous permissions to be space separated
        bitbake: hashserv: tests: Allow authentication for external server tests
        bitbake: hashserv: Allow self-service deletion
        bitbake: hashserv: server: Add owner if user is logged in
        bitbake: asyncrpc: Add option to set log level when running as a process

  Julien Stephan (10):
        oeqa/selftest/devtool: abort if a local workspace already exist
        oeqa/selftest/devtool: remove spaces on empty line
        recipetool/create_buildsys_python: fix license note
        recipetool/create_buildsys_python: prefix created recipes with python3-
        recipetool/create_buildsys_python: refactor code for futur PEP517 addition
        recipetool/create_buildsys_python: add PEP517 support
        oeqa/selftest/recipetool: add selftest for PEP-517 recipe creation
        oeqa/selftest/devtool: fix test_devtool_modify_overrides test
        bitbake: bitbake: utils: remove spaces on empty lines
        bitbake: fetch2: git: add missing destsuffix and subpath parameters in docstrings

  Jérémy Rosen (5):
        insane: Add unimplemented-ptest infrastructure
        insane: Detect python and perl based tests
        insane: Detect build-system test harnesses
        insane: Add a naive heuristic to detect test subdirectories
        ref-manual: Add documentation for the unimplemented-ptest QA warning

  Jörg Sommer (3):
        libtirpc: Support ipv6 in DISTRO_FEATURES
        base-files: Remove localhost ::1 from hosts if ipv6 missing
        package_qa_check_rdepends: Allow /usr/bin/sh if usrmerge

  Khem Raj (23):
        gcompat: Add fcntl64 wrapper
        gcompat: Upgrade to 1.1.0 release
        python3-urllib3: Update to 2.0.6
        llvm: Upgrade to 17.0.3
        shared-mime-info: Fix missing sentinel warning
        openssl: Match target name for riscv64/riscv32
        openssl: Inherit riscv32 config from latomic config on linux
        kernel.bbclass: Use strip utility used for kernel build in do_package
        python3-urllib3: Upgrade to 2.0.7
        qemuriscv: Add to common MACHINE_FEATURES instead of overriding them
        meson: Add check for riscv64 in link template
        machine-sdk: Add SDK_ARCH for riscv64
        uninative.bbclass: Add ldso information for riscv64
        rust-cross-canadian: Add riscv64 to cross-canadian hosts
        cdrtools: Fix build on riscv64
        llvm: Upgrade to 17.0.4 release
        systemd: Make libnss-mymachines conditional upon packageconfig
        ptest-packagelists: Remove strace/valgrind/lttng-tools on riscv32
        libarchive: Add packageconfig knob for libb2
        librsvg: Fix build for riscv32
        librsvg: Enable 64bit atomics in crossbeam again for riscv32
        libsoup: Upgrade to 3.4.2 -> 3.4.4
        llvm: Upgrade to 17.0.5

  Lee Chee Yang (6):
        qemu: ignore RHEL specific CVE-2023-2680
        machine: drop obsolete SERIAL_CONSOLES_CHECK
        documentation.conf: drop SERIAL_CONSOLES_CHECK
        release-notes-4.3: add Repositories / Downloads section
        migration-guide: add release notes for 4.0.14
        migration-guide: add release notes for 4.2.4

  Logan Gunthorpe (1):
        runqemu: Add squashfs filesystem types

  Lukas Funke (5):
        classes: go-vendor: Add go-vendor class
        selftest: recipetool: Add test for go recipe handler
        recipetool: Ignore *.go files while scanning for licenses
        recipetool: Add handler to create go recipes
        udev-extraconf: mount.sh: check if filesystem is supported before mounting

  Malte Schmidt (3):
        systemd: use nonarch libdir for tmpfiles.d
        pam: use nonarch libdir for tmpfiles.d
        sysstat: use nonarch libdir for tmpfiles.d

  Marcus Folkesson (1):
        qemuboot.bbclass: fix typos in documentation

  Markus Fuchs (1):
        systemd: Add 'no-ntp-fallback' PACKAGECONFIG option

  Markus Volk (6):
        libcroco: drop recipe
        gnomebase.bbclass: Use meson as default buildsystem
        ghostscript: Build and install shared lib
        cups: Upgrade 2.4.6 -> 2.4.7
        gtk: Add rdepend on printbackend for cups
        ffmpeg: Upgrade 6.0 -> 6.1

  Marlon Rodriguez Garcia (6):
        bitbake: toaster: updated bootstrap version 3.3.6 -> 3.3.7
        bitbake: toaster: Update bootstrap version to 3.4.1
        bitbake: toaster: update jquery version 2.0.3 -> 3.7.1
        bitbake: toaster: fixed functional test
        bitbake: toaster: add tox.ini file to execute test suite
        bitbake: toaster: replace deprecated tags ifequal and ifnotequal

  Marta Rybczynska (6):
        SECURITY.md: add file
        bitbake: SECURITY.md: add file
        dev-manual: add security team processes
        python3-beartype: upgrade 0.16.2 -> 0.16.4
        python3-spdx-tools: upgrade 0.8.1 -> 0.8.2
        dev-manual: extend the description of CVE patch preparation

  Martin Jansa (13):
        staging.bbclass: process installed dependencies in deterministic order as well
        bitbake.conf: drop ${PE} and ${PR} from -f{file,macro,debug}-prefix-map
        ovmf: drop PE, PR from /usr/src/debug paths
        go-cross-canadian.inc: drop PE, PR from /usr/src/debug paths
        acpica: drop PE, PR from /usr/src/debug paths
        libjpeg-turbo: drop PE, PR from /usr/src/debug paths
        ffmpeg: drop PE, PR from /usr/src/debug paths
        perf: drop PE, PR from /usr/src/debug paths
        rust: drop PE, PR from /usr/src/debug paths
        vulkan-samples: drop PE, PR from /usr/src/debug paths
        valgrind: drop PE, PR from /usr/src/debug paths
        python3-cython: drop PE, PR from /usr/src/debug paths
        igt-gpu-tools: drop PR from /usr/src/debug paths

  Massimiliano Minella (1):
        systemd: update LICENSE statement

  Max Krummenacher (2):
        Revert "bin_package.bbclass: Inhibit the default dependencies"
        perf: fix build with latest kernel

  Meenali Gupta (5):
        avahi: fix CVE-2023-38469
        avahi: fix CVE-2023-38470
        avahi: fix CVE-2023-38471
        avahi: fix CVE-2023-38472
        avahi: fix CVE-2023-38473

  Michael Halstead (1):
        docs: add support for nanbield (4.3) release

  Michael Opdenacker (29):
        manuals: update linux-yocto append examples
        dev-manual: wic: update "wic list images" output
        sdk-manual: appendix-obtain: improve and update descriptions
        manuals: update list of supported machines
        bsp-guide: bsp: skip Intel machines no longer supported in Poky
        brief-yoctoprojectqs: use new CDN mirror for sstate
        dev-manual: start.rst: remove obsolete reference
        local.conf.sample: remove mips edgerouter machine
        oeqa/runtime/cases/parselogs: remove "edgerouter" case
        manuals: correct "yocto-linux" by "linux-yocto"
        test-manual: reproducible-builds: stop mentioning LTO bug
        ref-manual: document KERNEL_LOCALVERSION
        ref-manual: variables: document OEQA_REPRODUCIBLE_TEST_PACKAGE
        migration-guides: updates for 4.3
        migration-guides: mention runqemu change in serial port management
        ref-manual: document KERNEL_STRIP
        migration-guides: further updates for 4.3
        manuals: improve description of CVE_STATUS and CVE_STATUS_GROUPS
        ref-manual: document MESON_TARGET
        ref-manual: document cargo_c class
        ref-manual: variables: mention new CDN for SSTATE_MIRRORS
        ref-manual: variables: add RECIPE_MAINTAINER
        ref-manual: variables: remove SERIAL_CONSOLES_CHECK
        migration-guides: further updates for release 4.3
        bsp-guide: bsp.rst: update beaglebone example
        ref-manual: classes: explain cml1 class name
        migration-guides: fix empty sections
        manuals: fix URL
        ref-manual: releases.svg: update nanbield release status

  Mickael RAMILISON (1):
        scripts/patchreview: Add a custom pattern for finding recipe patches

  Mingli Yu (2):
        openssh: Add sshd.service
        openssh: Don't hardcode the dir in sshd.service

  Niko Mauno (6):
        package_rpm: Fix some pycodestyle issues
        package_rpm: Minor cosmetic and style fixes
        package_rpm: Remove unused definitions
        package_rpm: Allow compression mode override
        image_types.bbclass: Use xz default compression preset level
        ccache.conf: Remove obsolete configuration option

  Paul Barker (1):
        ref-manual: Fix reference to MIRRORS/PREMIRRORS defaults

  Paul Eggleton (12):
        Remove references to apm in MACHINE_FEATURES
        ref-manual: update SDK_NAME variable documentation
        ref-manual: remove semicolons from *PROCESS_COMMAND variables
        release-notes-4.3: fix some typos
        release-notes-4.3: tweaks to existing text
        release-notes-4.3: add CVEs, recipe upgrades, license changes, contributors
        release-notes-4.3: remove the Distribution section
        release-notes-4.3: move new classes to Rust section
        release-notes-4.3: feature additions
        migration-4.3: remove some unnecessary items
        migration-4.3: adjustments to existing text
        migration-4.3: additional migration items

  Pavel Zhukov (1):
        bitbake: tests/fetch.py: Add tests to cover multiple branch/name parameters

  Peter Kjellerstedt (5):
        bb-matrix-plot.sh: Show underscores correctly in labels
        bitbake: command: Make parseRecipeFile() handle virtual recipes correctly
        bitbake: cookerdata: Be consistent with what type bb_data represents
        bitbake: cache: Simplify virtualfn2realfn()
        oeqa/selftest/tinfoil: Add tests that parse virtual recipes

  Peter Marko (1):
        openssl: Upgrade 3.1.3 -> 3.1.4

  Quentin Schulz (2):
        recipes-rt: update README to match newer override syntax
        ref-manual: variables: provide no-match example for COMPATIBLE_MACHINE

  Ragesh Nair (1):
        bitbake: fetch2/git: fix lfs fetch with destsuffix param

  Randy MacLeod (2):
        strace: backport fix for so_peerpidfd-test
        strace: upgrade 6.5 -> 6.6

  Rasmus Villemoes (3):
        perf: lift TARGET_CC_ARCH modification out of security_flags.inc
        valgrind: split helper scripts to separate packages, update dependencies
        perf: add jevents PACKAGECONFIG item

  Richard Purdie (34):
        reproducible: Exclude rust for now again
        linux/cve-exclusion6.1/6.5: Update to latest kernel point releases
        oeqa/qemurunner: Drop newlines serial workaround
        local.conf.sample: Document new CDN mirror for sstate
        poky.conf: Bump version for 4.3 nanbield release
        build-appliance-image: Update to master head revision
        poky.conf: Update to post release versioning
        base: Ensure recipes using mercurial-native have certificates
        qemu: Upgrade 8.1.0 -> 8.1.2
        oeqa/selftest: Drop machines support
        sstate: Ensure sstate searches update file mtime
        insane: Move unpack tests to do_recipe_qa
        go-vendor: Minor style tweaks
        package/package_write: Improve packagedata code location
        debianutils: Fix warnings
        bitbake: runqueue: Fix runall option for setscene tasks
        bitbake: runqueue: Fix errors when using -S printdiff
        oeqa/selftest/sstatetests: Fix intermitttent errors and improve performance
        layer.conf: Switch layer to nanbield series only
        libdnf: Fix arm arch mapping issues for qemuarmv5
        linux/cve-exclusion6.1/6.5: Update to latest kernel point releases
        bitbake: Revert "toaster: Bug-fix webdriver No parameter named options"
        vim: Improve locale handling
        selftest/reproducible: Allow packages exclusion via config
        bitbake: runqueue: Move 'cantskip' into sqdata
        bitbake: runqueue: Refactor StaleSetSceneTasks event out of build_scenequeue_data
        bitbake: toaster/tox.ini: Add py 3.11 and 3.12
        bitbake.conf: Drop oldincludedir
        bitbake: cooker: Add support for BB_DEFAULT_EVENTLOG
        bitbake: cooker: Avoid sideeffects for autorev from getAllKeysWithFlags
        oeqa/selftest/sstatetests: Re-enable CDN tests
        bitbake.conf: Log events by default using BB_DEFAULT_EVENTLOG
        package_ipk: Fix Source: field variable dependency
        Revert "binutils: Fix CVE-2022-47007"

  Robert P. J. Day (2):
        dev-manual: new-recipe.rst: add missing parenthesis to "Patching Code" section
        profile-manual: aesthetic cleanups

  Ross Burton (36):
        man-db: add RRECOMMENDS on glibc-utils for iconv
        man-db: remove inexplicable man_db.conf patch
        patchtest: remove unused imports
        patchtest: sort when reading patches from a directory
        linux-yocto: update CVE exclusions
        libxml2: ignore disputed CVE-2023-45322
        zlib: ignore CVE-2023-45853
        cve-check: sort the package list in the JSON report
        cve-check: slightly more verbose warning when adding the same package twice
        pixman: ignore CVE-2023-37769
        scripts/patchreview: rework patch detection
        scripts/contrib/patchreview: add commit and recipe count fields to JSON
        scripts/contrib/patchreview: consolidate imports
        scripts/contrib/patchreview: fix commit identification
        cve-check: don't warn if a patch is remote
        migration-guides: add debian 12 to newly supported distros
        migration-guides: edgerouter machine removed
        migration-guides: QEMU_USE_SLIRP variable removed
        migration-guides: remove non-notable change
        migration-guides: mention LLVM 17
        migration-guides: mention CDN
        migration-guides: add kernel notes
        migration-guides: remove SERIAL_CONSOLES_CHECK
        migration-guides: enabling SPDX only for Poky, not a global default
        migration-guides: add testing notes
        migration-guides: add utility notes
        migration-guides: add BitBake changes
        migration-guides: packaging changes
        migration-guides: git recipes reword
        poky-tiny: fix PACKAGE_EXCLUDE
        Revert "xserver-xorg: Fix for CVE-2023-5574"
        xwayland: upgrade to 23.2.2
        lib/oe/patch: ensure os.chdir restoring always happens
        oeqa/selftest/debuginfod: improve selftest
        shared-mime-info: embed PV in the filename
        rust-llvm: remove python3native dependency

  Rouven Czerwinski (1):
        glib-2.0: Remove unnecessary assignement

  Sean Nyekjaer (3):
        rust-cross-canadian: set CARGO_TARGET_<triple>_RUSTFLAGS
        rust-cross-canadian: set CARGO_TARGET_<triple>_RUNNER for nativesdk
        oeqa/sdk/rust: Add build and run test of rust binary with SDK host

  Sergei Zhmylev (1):
        classes: Move package RDEPENDS processing out of debian.bbclass

  Siddharth Doshi (2):
        vim: Upgrade 9.0.1894 -> 9.0.2009
        vim: Upgrade 9.0.2009 -> 9.0.2048

  Stefan Herbrechtsmeier (2):
        glibc: use nonarch libdir for tmpfiles.d
        classes: go-mod: do not pack go mod cache

  Steve Sakoman (1):
        vim: use upstream generated .po files

  Stéphane Veyret (2):
        volatile-binds: Allow creation of subdirectories
        volatile-binds: Calculate the name of the /var/lib service

  Thomas Perrot (1):
        opensbi: Upgrade to 1.3.1 release

  Thomas Wolber (1):
        kea: drop unused directory

  Tim Orling (9):
        recipetool: add python_hatchling support
        lsb-release: use https for UPSTREAM_CHECK_URI
        bitbake: toaster: drop deprecated USE_L10N from settings
        bitbake: toaster: use docs for BitBake link on landing page
        bitbake: toaster: fix obsolete use of find_element_by_link_text
        bitbake: toaster: test_create_new_project typos, whitespace
        python3-hypothesis: upgrade 6.88.3 -> 6.89.0
        python3-setuptools-scm: upgrade 7.1.0 -> 8.0.4
        python3-poetry-core: upgrade 1.7.0 -> 1.8.1

  Trevor Gamblin (30):
        patchtest: improve test issue messages
        patchtest: clean up test suite
        patchtest/requirements.txt: update
        patchtest: add supporting modules
        patchtest: add scripts to oe-core
        patchtest: set default repo and testdir targets
        patchtest: update SPDX identifiers
        patchtest/selftest: fix command arguments
        patchtest: check for untracked changes
        patchtest: test regardless of mergeability
        patchtest: skip merge test if not targeting master
        contributor-guide: add patchtest section
        contributor-guide: clarify patchtest usage
        patchtest: fix lic_files_chksum test regex
        patchtest-send-results: improve subject line
        patchtest: disable merge test
        patchtest-send-results: check max line length, simplify responses
        patchtest/selftest: add XSKIP, update test files
        patchtest: simplify test directory structure
        patchtest: reduce checksum test output length
        patchtest: shorten test result outputs
        patchtest-send-results: send results to submitter
        patchtest-send-results: add In-Reply-To
        patchtest: make pylint tests compatible with 3.x
        patchtest: remove test for CVE tag in mbox
        patchtest-send-results: fix sender parsing
        patchtest: rework license checksum tests
        python3-mako: upgrade 1.2.4 -> 1.3.0
        python3-trove-classifiers: upgrade 2023.10.18 -> 2023.11.14
        python3-numpy: upgrade 1.26.0 -> 1.26.2

  Vijay Anusuri (1):
        xserver-xorg: Fix for CVE-2023-5574

  Vincent Davis Jr (1):
        acpica: add nativesdk to BBCLASSEXTEND

  Vyacheslav Yurkov (1):
        lib/oe/path: Deploy files can start only with a dot

  Wang Mingyu (79):
        openssh: upgrade 9.4p1 -> 9.5p1
        bluez5: upgrade 5.69 -> 5.70
        btrfs-tools: upgrade 6.5.1 -> 6.5.2
        createrepo-c: upgrade 1.0.0 -> 1.0.1
        dhcpcd: upgrade 10.0.2 -> 10.0.3
        ell: upgrade 0.58 -> 0.59
        kmod: upgrade 30 -> 31
        libcomps: upgrade 0.1.19 -> 0.1.20
        libsdl2: upgrade 2.28.3 -> 2.28.4
        libubootenv: upgrade 0.3.4 -> 0.3.5
        ltp: upgrade 20230516 -> 20230929
        libva: upgrade 2.19.0 -> 2.20.0
        python3-git: upgrade 3.1.36 -> 3.1.37
        python3-babel: upgrade 2.12.1 -> 2.13.0
        python3-beartype: upgrade 0.15.0 -> 0.16.2
        python3-cffi: upgrade 1.15.1 -> 1.16.0
        python3-hypothesis: upgrade 6.86.2 -> 6.87.4
        python3-iso8601: upgrade 2.0.0 -> 2.1.0
        python3-markdown: upgrade 3.4.4 -> 3.5
        python3-packaging: upgrade 23.1 -> 23.2
        python3-pycairo: upgrade 1.24.0 -> 1.25.0
        python3-ruamel-yaml: upgrade 0.17.32 -> 0.17.35
        xkeyboard-config: upgrade 2.39 -> 2.40
        python3-wcwidth: upgrade 0.2.6 -> 0.2.8
        repo: upgrade 2.36.1 -> 2.37
        shared-mime-info: upgrade 2.2 -> 2.3
        sqlite3: upgrade 3.43.1 -> 3.43.2
        stress-ng: upgrade 0.16.05 -> 0.17.00
        base-passwd: upgrade 3.6.1 -> 3.6.2
        createrepo-c: upgrade 1.0.1 -> 1.0.2
        cronie: upgrade 1.6.1 -> 1.7.0
        dhcpcd: upgrade 10.0.3 -> 10.0.4
        enchant2: upgrade 2.6.1 -> 2.6.2
        btrfs-tools: upgrade 6.5.2 -> 6.5.3
        debianutils: upgrade 5.13 -> 5.14
        gpgme: upgrade 1.22.0 -> 1.23.1
        harfbuzz: upgrade 8.2.1 -> 8.2.2
        libdnf: upgrade 0.71.0 -> 0.72.0
        libical: upgrade 3.0.16 -> 3.0.17
        libjpeg-turbo: upgrade 3.0.0 -> 3.0.1
        libnewt: upgrade 0.52.23 -> 0.52.24
        libnsl2: upgrade 2.0.0 -> 2.0.1
        lighttpd: upgrade 1.4.72 -> 1.4.73
        msmtp: upgrade 1.8.24 -> 1.8.25
        ghostscript: upgrade 10.02.0 -> 10.02.1
        glib-2.0: upgrade 2.78.0 -> 2.78.1
        python3-pyrsistent: upgrade 0.19.3 -> 0.20.0
        python3-babel: upgrade 2.13.0 -> 2.13.1
        python3-gitdb: upgrade 4.0.10 -> 4.0.11
        python3-git: upgrade 3.1.37 -> 3.1.40
        python3-hypothesis: upgrade 6.87.4 -> 6.88.1
        python3-pip: upgrade 23.2.1 -> 23.3.1
        python3-psutil: upgrade 5.9.5 -> 5.9.6
        python3-pycairo: upgrade 1.25.0 -> 1.25.1
        python3-pyopenssl: upgrade 23.2.0 -> 23.3.0
        python3-pytest: upgrade 7.4.2 -> 7.4.3
        python3-setuptools-rust: upgrade 1.7.0 -> 1.8.1
        python3-testtools: upgrade 2.6.0 -> 2.7.0
        python3-trove-classifiers: upgrade 2023.9.19 -> 2023.10.18
        python3-wcwidth: upgrade 0.2.8 -> 0.2.9
        python3-wheel: upgrade 0.41.2 -> 0.41.3
        shaderc: upgrade 2023.6 -> 2023.7
        xserver-xorg: upgrade 21.1.8 -> 21.1.9
        python3-cryptography(-vectors): upgrade 41.0.4 -> 41.0.5
        dhcpcd: upgrade 10.0.4 -> 10.0.5
        diffoscope: upgrade 249 -> 251
        git: upgrade 2.42.0 -> 2.42.1
        iproute2: upgrade 6.5.0 -> 6.6.0
        libsdl2: upgrade 2.28.4 -> 2.28.5
        libsolv: upgrade 0.7.25 -> 0.7.26
        libuv: upgrade 1.46.0 -> 1.47.0
        bash: upgrade 5.2.15 -> 5.2.21
        dnf: upgrade 4.17.0 -> 4.18.1
        python3-hatch-vcs: upgrade 0.3.0 -> 0.4.0
        python3-hypothesis: upgrade 6.88.1 -> 6.88.3
        python3-pbr: upgrade 5.11.1 -> 6.0.0
        python3-testtools: upgrade 2.7.0 -> 2.7.1
        shared-mime-info: upgrade 2.3 -> 2.4
        stress-ng: upgrade 0.17.00 -> 0.17.01

  William A. Kennington III (1):
        kernel: Commit without running hooks

  William Lyu (2):
        perl: fix intermittent test failure
        openssl: improve handshake test error reporting

  Xiangyu Chen (4):
        linux-yocto: make sure the pahole-native available before do_kernel_configme
        grub: Fix for CVE-2023-4692 and CVE-2023-4693
        sudo: upgrade 1.9.14p3 -> 1.9.15p2
        openssh: add systemd readiness notification support

  Yoann Congal (4):
        insane: skip unimplemented-ptest on S=WORKDIR recipes
        insane: unimplemented-ptest: ignore source file errors
        selftest/reproducible: Split a long line
        meta-selftest/files: add xuser to static-passwd/-group

  david d zuhn (1):
        bitbake.conf: remove ${CCACHE} from FORTRAN compiler

  luca fancellu (1):
        oeqa/ssh: Handle SSHCall timeout error code

meta-arm: e914891eee..1dff3300fb:
  Abdellatif El Khlifi (6):
        arm-bsp/linux-yocto: corstone1000: bump to v6.5%
        arm-bsp/documentation: corstone1000: enable debug-tweaks
        arm-bsp/documentation: corstone1000: update the release note
        arm-bsp/documentation: corstone1000: update the change log
        arm-bsp/documentation: corstone1000: update the user guide
        kas: corstone1000: pin the SHAs

  Ali Can Ozaslan (1):
        arm-bsp/documentation: corstone1000: Update the user guide

  Debbie Martin (10):
        arm-bsp/u-boot: Divide the U-boot configuration by machine
        arm-bsp/fvp-base: Merge fvp-common.inc into fvp-base.conf
        arm-bsp/trusted-firmware-a/fvp-base: Add stdout path and virtio net and rng
        arm-bsp/u-boot/fvp-base: Configure FVP base U-boot machine and enable U-boot sysreset, CRC-32 and virtio RNG
        arm-bsp/fvp-base: Configure grub as the EFI provider
        arm/fvp-base: Update the default testsuites
        arm-systemready: Introduce the Arm SystemReady layer
        arm-bsp/systemready: Bring up the Arm SystemReady IR ACS 2.0 suite on FVP base
        kas: Add kas configuration for Arm SystemReady and fvp-base
        ci: Add fvpboot to IMAGE_CLASSES

  Delane Brandy (1):
        arm-bsp/documentation: corstone1000: Update the user guide

  Drew Reed (2):
        arm-bsp: Enable TF-A test building for the N1SDP
        CI: Enable TF-A TFTF test builds

  Emekcan Aras (17):
        arm-bsp/u-boot: corstone1000: enable on-disk capsule update
        arm-bsp/u-boot: corstone1000: fix runtime capsule update flag checks
        arm-bsp/trusted-firmware-m: fix capsule update alignment
        arm-bsp/trusted-firmware-m: update the upstream status of the out-of-tree patches
        arm-bsp/u-boot: corstone1000: scatter gather list workaround for ondisk capsule update
        arm-bsp/trusted-services: enable signaled handling interrupts for SPs
        arm-bsp/corstone1000: fix synchronization issue on openamp notification
        arm/fvp-corstone1000: upgrade to 11.23_25
        arm-bsp/corstone1000-fvp: Add virtio-net configuration
        arm-bsp/corstone1000-fvp: add unpadded image support for MMC card config
        arm-bsp/corstone1000-fvp: Disable Time Annotation
        arm-bsp/u-boot: corstone1000: enable virtio-net support for FVP
        arm-bsp/documentation: corstone1000: update the architecture document
        arm-bsp/documentation: corstone1000: Add EFI system partition section
        arm-bsp/documentation: corstone1000: add a note and fix instructions
        arm-bsp/documentation: corstone1000: add readthedocs.yaml file
        arm-bsp/documentation: corstone1000: fix the requirements.txt and conf.py path

  Harsimran Singh Tungal (4):
        arm-bsp/u-boot: corstone1000: Remove External system patches
        arm-bsp/linux: corstone1000: update the defconfig
        arm-bsp/linux: corstone1000: Remove External system patches
        arm-bsp/images: corstone1000: Remove the external system test package

  Javier Tia (1):
        trusted-firmware-a: fix build error when using ccache

  Jon Mason (10):
        arm-bsp/linux-yocto: add recipe for v6.4 kernel
        arm/linux-yocto: remove defconfig patch
        CI: add sbsa-acs to recipe report
        arm/linux-yocto: remove PHYS_VIRT config frag
        arm-bsp/optee: remove 3.18 recipes and patches
        arm-bsp/edk2: remove 202211
        arm/hafnium: update to v2.9
        arm/optee: update to 4.0.0
        arm/optee: cleanups from code review
        arm/toolchains: update to 13.2.Rel1

  Mariam Elshakfy (3):
        arm-bsp/n1sdp: Move OP-TEE to DDR4
        arm-bsp/n1sdp: Enable OP-TEE cache in N1SDP
        arm-bsp/corstone1000: Remove inappropriate kernel delay patch

  Ross Burton (24):
        arm/oeqa/selftest: tag all tests with "meta-arm"
        CI: don't hardcode the selftest tests to run
        CI: also run the _qemutiny testcase for poky-tiny
        CI: track nanbield branches
        arm/fvp-corstone1000: upgrade to 11.22.35, add aarch64 binaries
        kas/corstone1000: don't limit the FVP use to x86-64
        CI: don't pin corstone1000-fvp to x86-64
        CI: build both aarch64 and x86-64 packages for as many FVPs as possible
        arm-bsp/u-boot: remove 2023.01
        arm/trusted-firmware-a: update mbedtls to recommended release
        CI: Add meta-secure-core to pending-upgrades for corstone1000
        arm-bsp: corstone1000 depends on meta-efi-secure-boot
        arm/generic-arm64: remove obsolete SERIAL_CONSOLES_CHECK
        arm/lib/fvp/runner: don't pass '' as cwd
        scripts/runfvp: exit code should be the FVP exit code
        arm/selftest: add test that DISPLAY is forwarded into the runfvp child
        CI: use nanbield branch for meta-virtualization
        CI: use nanbield branch of meta-clang
        arm/optee: handle CVE-2021-36133 as disputed
        arm-bsp/optee-os: backport fix for CVE-2023-41325
        arm/fvp-base-a-aem: upgrade to 11.23.9
        arm-bsp/fvp-base: upgrade tune to v8.4
        arm-bsp/trusted-firmware-a: use v8.4 instructions on fvp-base
        arm-bsp/optee-os: update Upstream-Status tags

  Vikas Katariya (1):
        arm-bsp/corstone1000: Fix RSA key generation issue

  Xueliang Zhong (2):
        Update Corstone-1000 doc with security issue reporting guideline
        arm-bsp/n1sdp: update to linux yocto kernel 6.5

meta-raspberrypi: 482d864b8f..8231f97534:
  Andrei Gherzan (1):
        docs: Fix ReadTheDocs builds.os requirement

  Carlos Alberto Lopez Perez (1):
        linux-raspberrypi: stop setting powersave as the default CPU governor

  Jose Quaresma (2):
        linux-raspberrypi/linux-raspberrypi-v7: drop 5.10 version
        rpi-base: Adds EXTRA_IMAGEDEPENDS to fix the image task do_populate_lic_deploy

  Khem Raj (1):
        linux-raspberrypi_6.1.bb: Update to 6.1.61 release

  Leon Anavi (2):
        rpi-config: Upgrade to tip of tree
        rpi-config: reintroduce start_x

  Matthew Draws (1):
        rpi-eeprom: Update to 2023.10.18-2712

  Vincent Davis Jr (1):
        rpidistro-vlc: add new patch po-Fix-typos-in-oc

meta-openembedded: 62039a2c33..991e6852a5:
  Akash Hadke (1):
        libeigen: Update GPL-3.0-only to GPL-2.0-only

  Alex Kiernan (2):
        reptyr: Add 0.10.0
        mdns: Upgrade 2200.0.8 -> 2200.40.37.0.1

  Alper Ak (1):
        unionfs-fuse: upgrade 2.2 --> 3.4

  Andrew Jeffery (1):
        mdio-tools: Add virtual/kernel dependency to avoid stale SPDX reference

  Armin Kuster (4):
        netkit: Drop old and no upstream
        MAINTANERS: drop netkit
        README: drop netkit maintainer
        pkggrp: drop netkit

  Arthur Oliveira (5):
        python3-objectpath: Add ObjectPath Python Recipe
        python3-flask-restx: Add Flask-RestX Python Recipe
        python3-zopeevent: Add Zope.Event Python Recipe
        python3-aniso8601: Add ISO 8601 parsing library
        python3-flask-restx: Switch dependency from isodate to aniso8601

  Bartosz Golaszewski (5):
        shunit2: new recipe
        libgpiod: update to v2.1
        python3-gpiod: update to v2.1.3
        python3-gpiod: setup target config in ptest compile
        python3-gpiod: fix the required version of libgpiod

  Beniamin Sandu (2):
        mbedtls: upgrade 3.4.1 -> 3.5.0
        unbound: upgrade 1.18.0 -> 1.19.0

  Benjamin Bouvier (1):
        libsmi: enable native build

  Carlos Alberto Lopez Perez (1):
        libbacktrace: Update version and enable shared library.

  Charles Perry (4):
        libosip2: add recipe
        libexosip2: add recipe
        libexosip2: add c-ares and openssl PACKAGECONFIG
        libexosip2: package binaries in a separate package

  Chi Xu (1):
        re2: Add ptest support

  Christian Eggers (1):
        python3-gcovr: switch to main branch

  Christophe Vu-Brugier (1):
        exfatprogs: upgrade 1.2.1 -> 1.2.2

  Clément Péron (2):
        proj: Upgrade to 9.3.0 release
        pcapplusplus: Add recipe for 23.09 release

  Daiane Angolini (1):
        wireguard-tools: Use PACKAGECONFIG to select wg-quick and bash-completion

  Daniel McGregor (1):
        python3-pylint: allow native build

  Daniel Semkowicz (2):
        cockpit: Fix cockpit-askpass path
        cockpit: Bump to version 304

  David Pierret (3):
        libtext: add ptest
        cjson: Add ptest
        python3-rapidjson: add missing ptest dependency

  Edi Feschiyan (1):
        libbytesize: update SRC_URI

  Etienne Cordonnier (1):
        uutils-coreutils: upgrade 0.0.21 -> 0.0.22

  Fabien Thomas (2):
        klibc/klibc.inc : Add DEBUG_PREFIX_MAP flag.
        samba.bb : Disable ad-dc by default

  Fabio Estevam (5):
        edid-decode: Upgrade to latest master
        openocd: Use https for github
        python3-piccata: Use https for github
        multipath-tools: Use https for github
        crucible: Upgrade to 2023.11.02

  Gianfranco Costamagna (3):
        vbxguestdrivers: upgrade 7.0.10 -> 7.0.12
        cpulimit: add DESCRIPTION field
        dlt-daemon: cherry-pick another upstream-proposed patch

  Hains van den Bosch (1):
        libebml: Enable shared libraries

  Jamin Lin (1):
        Brotli: fix build failed if the path includes "-static"

  Jan Claußen (1):
        btop: Add recipe

  Jan Vermaete (3):
        netdata: chown in systemd service with ':' iso '.'
        netdata: version bump 1.43.0 -> 1.43.2
        README.md: was a Markdown paragraph and should be a list

  Jeffrey Pautler (1):
        apache2: add vendor to product name used for CVE checking

  Joe Slater (2):
        python3-pynacl: add RCONFLICTS with python3-nacl
        python3-django: move to version 4.2.5

  Johannes Kauffmann (1):
        open62541: update to v1.3.8

  Johnathan Mantey (1):
        ipmitool: Update and eliminate unneeded patch

  Jonas Gorski (1):
        frr: fix CVEs CVE-2023-4675{2,3} and CVE-2023-4723{4,5}

  Jose Quaresma (4):
        ostree: Upgrade 2023.5 -> 2023.6
        ostree: drop trivial-httpd-cmdline
        ostree: add ed25519-openssl
        ostree: Upgrade 2023.6 -> 2023.7

  Kai Kang (4):
        xfce4-panel-profiles: 1.0.13 -> 1.0.14
        python3-nacl: drop duplicate recipe
        python3-blivet: 3.4.3 -> 3.8.2
        python3-blivetgui: 2.3.0 -> 2.4.2

  Khem Raj (209):
        libnet-idn-encode: Fix build with perl 2.38 and gcc13
        poco: Fix data race when create POSIX thread
        static-group: Match nogroup id to base-passwd from core.
        gutenprint: Upgrade to 5.3.4
        meta-perl: Add libtext-diff-perl to fast ptest list
        leveldb: Upgrade to 1.23 plus latest git
        meta-python: Add python3-rapidjson to PTESTS_FAST_META_PYTHON
        leveldb: Print uint64_t with PRI64
        network-manager-applet,networkmanager-openvpn, networkmanager: Apply linker versioning patch when using lld only
        emlog: Add PV
        ccid: upgrade 1.5.2 -> 1.5.4
        jack: upgrade 1.19.22 -> 2
        abseil-cpp: upgrade 20230802.0 -> 20230802.1
        xterm: upgrade 387 -> 388
        toybox: upgrade 0.8.8 -> 0.8.10
        pahole: upgrade 1.24 -> 1.25
        gcab: upgrade 1.4 -> 1.6
        feh: upgrade 3.10 -> 3.10.1
        xmlsec1: upgrade 1.2.37 -> 1.3.2
        xmlsec1: Fix the key name in verify2 test
        ctags: upgrade 6.0.20231001.0 -> 6.0.20231029.0
        googlebenchmark: upgrade 1.8.0 -> 1.8.3
        opencl-headers: upgrade 04.17 -> 2023.04.17
        thingsboard-gateway: upgrade 3.4.1 -> 3.4.2
        neatvnc: upgrade 0.6.0 -> 0.7.0
        lastlog2: upgrade 1.1.0 -> 1.2.0
        libmbim: upgrade 1.30.0 -> 1.31.1
        ser2net: upgrade 4.3.13 -> 4.5.0
        fio: upgrade 3.32 -> 2022
        libosinfo: upgrade 1.10 -> 1.11.0
        webkitgtk3: upgrade 2.42.0 -> 2.42.1
        mstpd: upgrade 0.1 -> 0.05
        smarty: upgrade 4.3.0 -> 4.3.4
        geos: upgrade 3.12.0 -> 3.12.0beta2
        wtmpdb: upgrade 0.7.1 -> 0.9.3
        lsscsi: upgrade 0.32 -> 030
        glibmm-2.68: upgrade 2.74.0 -> 2.78.0
        mcelog: upgrade 194 -> 196
        libfastjson: upgrade 0.99.9 -> 1.2304.0
        libraw: upgrade 0.20.2 -> 0.21.1
        cairomm-1.16: upgrade 1.16.2 -> 1.18.0
        libbpf: upgrade 1.2.0 -> 1.2.2
        libtorrent: upgrade 0.13.8 -> 1
        modemmanager: upgrade 1.22.0 -> 1.23.1
        c-ares: upgrade 1.20.1 -> 1.21.0
        pmdk: upgrade 1.12.1 -> 2.0.0
        hwdata: upgrade 0.370 -> 0.375
        mksh: upgrade 59 -> R59c
        sdbus-c++: upgrade 1.3.0 -> 1.4.0
        cjson: upgrade 1.7.15 -> 1.7.16
        uftrace: upgrade 0.13.1 -> 0.14
        python3-trustme: upgrade 0.9.0 -> 1.1.0
        python3-eth-utils: upgrade 2.2.2 -> 2.3.0
        python3-xstatic-font-awesome: upgrade 4.7.0.0 -> 6.2.1.1
        python3-process-tests: upgrade 2.1.2 -> 3.0.0
        python3-pyperf: upgrade 2.6.1 -> 2.6.2
        python3-sentry-sdk: upgrade 1.26.0 -> 1.34.0
        python3-websockets: upgrade 11.0.3 -> 12.0
        python3-alembic: upgrade 1.12.0 -> 1.12.1
        python3-pymisp: upgrade 2.4.176 -> 2.4.178
        python3-traitlets: upgrade 5.11.2 -> 5.13.0
        python3-pytest-mock: upgrade 3.11.1 -> 3.12.0
        python3-kivy: upgrade 2.1.0 -> 2.2.1
        python3-web3: upgrade 6.11.1 -> 6.11.2
        python3-m2crypto: upgrade 0.39.0 -> 0.40.1
        python3-rapidjson: upgrade 1.12 -> 1.13
        python3-eth-typing: upgrade 3.5.0 -> 3.5.1
        python3-email-validator: upgrade 2.0.0 -> 2.1.0
        python3-icu: upgrade 2.11 -> 2.12
        python3-virtualenv: upgrade 20.24.5 -> 20.24.6
        python3-tzlocal: upgrade 5.1 -> 5.2
        python3-cantools: upgrade 39.2.0 -> 39.3.0
        python3-flask-login: upgrade 0.6.2 -> 0.6.3
        python3-argcomplete: upgrade 3.1.2 -> 3.1.4
        python3-wxgtk4: upgrade 4.2.0 -> 4.2.1
        python3-meson-python: upgrade 0.14.0 -> 0.15.0
        python3-pymongo: upgrade 4.5.0 -> 4.6.0
        python3-imgtool: upgrade 1.10.0 -> 2.0.0
        python3-google-api-python-client: upgrade 2.104.0 -> 2.106.0
        python3-tornado: upgrade 6.3 -> 6.3.3
        python3-imageio: upgrade 2.31.5 -> 2.31.6
        python3-blinker: upgrade 1.6.3 -> 1.7.0
        python3-pyhamcrest: upgrade 2.0.4 -> 2.1.0
        python3-pytest-asyncio: upgrade 0.21.1 -> 0.22.0
        python3-pyjwt: upgrade 2.7.0 -> 2.8.0
        python3-bitstruct: upgrade 8.18.0 -> 8.19.0
        python3-filelock: upgrade 3.12.4 -> 3.13.1
        python3-sqlalchemy: upgrade 2.0.22 -> 2.0.23
        python3-greenlet: upgrade 2.0.2 -> 3.0.1
        python3-charset-normalizer: upgrade 3.3.0 -> 3.3.2
        python3-cbor2: upgrade 5.4.6 -> 5.5.1
        python3-cbor2: Add missing hypothesis rdep for ptests
        python3-asttokens: upgrade 2.4.0 -> 2.4.1
        python3-xlsxwriter: upgrade 3.1.8 -> 3.1.9
        python3-cachetools: upgrade 5.3.1 -> 5.3.2
        python3-paramiko: upgrade 3.2.0 -> 3.3.1
        python3-tomlkit: upgrade 0.12.1 -> 0.12.2
        python3-eth-account: upgrade 0.9.0 -> 0.10.0
        python3-reedsolo: upgrade 1.7.0 -> 2.0.13
        python3-shellingham: upgrade 1.5.3 -> 1.5.4
        python3-ipython: upgrade 8.16.1 -> 8.17.2
        python3-argh: upgrade 0.29.4 -> 0.30.3
        python3-executing: upgrade 2.0.0 -> 2.0.1
        python3-pylint: upgrade 3.0.1 -> 3.0.2
        python3-google-auth: upgrade 2.23.3 -> 2.23.4
        libtest-harness-perl: upgrade 3.47 -> 3.48
        libmodule-build-tiny-perl: upgrade 0.046 -> 0.047
        libdbd-sqlite-perl: upgrade 1.72 -> 1.74
        libconfig-tiny-perl: upgrade 2.29 -> 2.30
        libcgi-perl: upgrade 4.57 -> 4.60
        ipset: upgrade 7.15 -> 7.19
        openvpn: upgrade 2.6.3 -> 2.6.6
        nng: upgrade 1.5.2 -> 12
        usrsctp: upgrade to latest revision
        python3-scapy: upgrade to latest revision
        wolfssl: upgrade 5.5.4 -> 5.6.4
        tnftp: upgrade 20210827 -> 20230507
        fluidsynth: upgrade 2.3.2 -> 2.3.4
        libuvc: upgrade 0.0.6 -> 0.0.7
        libdc1394: upgrade 2.2.6 -> 2.2.7
        ncmpc: upgrade 0.47 -> 0.49
        gerbera: upgrade 1.11.0 -> 1.12.1
        gst-shark: upgrade 0.7.3.1 -> 0.8.1
        gupnp-av: upgrade 0.14.0 -> 0.14.1
        libmediaart-2.0: upgrade 1.9.5 -> 1.9.6
        libdvbpsi: upgrade 1.3.0 -> 1.3.3
        fdk-aac: upgrade 2.0.1 -> 2.0.2
        libavif: upgrade 0.11.1 -> 1.0.1
        libdvdcss: upgrade 1.4.2 -> 1.4.3
        aom: upgrade 3.6.1 -> 3.7.0
        aom: Disable neon when building on arm
        dav1d: upgrade 1.2.0 -> 1.3.0
        network-manager-applet: upgrade 1.32.0 -> 1.34.0
        gvfs: upgrade 1.52.0 -> 1.52.1
        gnome-text-editor: upgrade 45.0 -> 45.1
        libwacom: upgrade 2.6.0 -> 2.8.0
        evolution-data-server: upgrade 3.50.0 -> 3.50.1
        orage: upgrade 4.16.0 -> 4.18.0
        xfce4-systemload-plugin: upgrade 1.3.1 -> 1.3.2
        xfce4-screenshooter: upgrade 1.10.3 -> 1.10.4
        xfce4-appfinder: upgrade 4.18.0 -> 4.19.1
        xfce4-netload-plugin: upgrade 1.4.0 -> 1.4.1
        thunar-shares-plugin: upgrade 0.3.1 -> 0.3.2
        xfce4-battery-plugin: upgrade 1.1.4 -> 1.1.5
        xfce4-places-plugin: upgrade 1.8.1 -> 1.8.3
        libxfce4util: upgrade 4.18.1 -> 4.19.2
        xfce4-notes-plugin: upgrade 1.9.0 -> 1.10.0
        xfce4-weather-plugin: upgrade 0.11.0 -> 0.11.1
        thunar: upgrade 4.18.4 -> 4.19.0
        catfish: upgrade 4.16.3 -> 4.18.0
        xfce4-time-out-plugin: upgrade 1.1.2 -> 1.1.3
        thunar-archive-plugin: upgrade 0.5.1 -> 0.5.2
        xfce4-timer-plugin: upgrade 1.7.1 -> 1.7.2
        xfce4-calculator-plugin: upgrade 0.7.1 -> 0.7.2
        xfmpc: upgrade 0.3.0 -> 0.3.1
        garcon: upgrade 4.18.1 -> 4.19.0
        xfce4-genmon-plugin: upgrade 4.1.1 -> 4.2.0
        xfce4-fsguard-plugin: upgrade 1.1.2 -> 1.1.3
        xfce4-cpugraph-plugin: upgrade 1.2.7 -> 1.2.8
        parole: upgrade 4.16.0 -> 4.18.0
        xfce4-datetime-plugin: upgrade 0.8.1 -> 0.8.3
        menulibre: upgrade 2.2.3 -> 2.3.2
        xfce4-pulseaudio-plugin: upgrade 0.4.3 -> 0.4.8
        libxfce4ui: upgrade 4.18.3 -> 4.19.3
        xfce4-taskmanager: upgrade 1.5.5 -> 1.5.6
        xfce4-mpc-plugin: upgrade 0.5.2 -> 0.5.3
        mousepad: upgrade 0.5.9 -> 0.6.1
        gigolo: upgrade 0.5.2 -> 0.5.3
        xfce4-verve-plugin: upgrade 2.0.1 -> 2.0.3
        exo: upgrade 4.18.0 -> 4.19.0
        xfce4-mailwatch-plugin: upgrade 1.3.0 -> 1.3.1
        xarchiver: upgrade 0.5.4.17 -> 0.5.4.21
        xfsprogs: upgrade 6.1.1 -> 6.5.0
        xfstests: upgrade 2023.03.05 -> 2023.10.29
        xfstests: Fix build with clang17
        xfstests: Fix build on musl
        ufs-utils: upgrade to latest revision
        xfce4-systemload-plugin: Fix build on 32bit machines
        libsodium: upgrade 1.0.18 -> 1.0.19
        libsodium: Fix build with clang on aarch64
        Revert "modemmanager: upgrade 1.22.0 -> 1.23.1"
        modemmanager: inherit upstream-version-is-even
        Revert "geos: upgrade 3.12.0 -> 3.12.0beta2"
        emlog: Drop SRCPV
        makedumpfile: Change COMPATIBLE_HOST check to exclude unsupported arches
        packagegroup-meta-oe: Update makedumpfile architecture support list
        gupnp: Add missing rdep on python3-core
        vte9: Upgrade to 0.74.1
        rygel: Upgrade to 0.40.4 -> 0.42.4
        vte9: Add knob for enabling systemd
        meta-networking: Use autotools make system
        meta-oe: Use autotools make system
        toscoterm: Skip recipe, slated for removal
        loudmouth: Upgrade to 1.5.4
        toscoterm: Delete recipe
        librest: Use autotools make system
        cannelloni: Fix build with clang and libc++ runtime
        gnome-console: Add missing dependency on gtk4-native
        gnome-terminal: Add missing dependency on libhandy
        dleyna-core: Update to tip of master
        dleyna: Skip all dleyna recipes, slated for removal
        packagegroup-meta-multimedia: Remove dleyna recipes
        beep: Upgrade to 1.4.12
        yelp: Use autotools for build system
        gstd: Upgrade to 0.15.0
        gimp: Update to 2.10.36
        projucer: Refresh patch to apply cleanly
        ledmon: Fix systemd unit install
        libxml++-5.0: Make use of gnomebase bbclass

  LI Qingwu (1):
        kmsxx: Add recipe

  Lei Maohui (1):
        gexiv2: Fix do_package QA issue when usrmerge enabled.

  Leon Anavi (32):
        sip: upgrade 6.7.11 -> 6.7.12
        python3-rarfile: add recipe
        python3-colorclass: add recipe
        python3-inflate64: add recipe
        python3-jsbeautifier: add recipe
        python3-pymemcache: add recipe
        python3-multivolumefile: add recipe
        python3-oletools: add recipe
        python3-olefile: add recipe
        python3-pcodedmp: add recipe
        python3-screeninfo: add recipe
        python3-unoconv: add recipe
        python3-pybcj: add recipe
        python3-pyppmd: add recipe
        python3-py7zr: add recipe
        python3-wand: add recipe
        python3-pdm-backend: add recipe
        python3-pdm: add recipe
        python3-jsonref: Upgrade 1.0.1 -> 1.1.0
        imlib2: Upgrade 1.7.1 -> 1.12.1
        libblockdev: Upgrade 3.0.3 -> 3.0.4
        exiftool: add recipe
        bindfs: add recipe
        qpdf: Update 10.6.3 -> 11.6.3
        python3-file-magic: add recipe
        python3-wrapt: Upgrade 1.15.0 -> 1.16.0
        python3-bitarray: Upgrade 2.8.2 -> 2.8.3
        python3-pillow: Upgrade 10.0.1 -> 10.1.0
        python3-polyline: upgrade 1.4.0 -> 2.0.1
        python3-py7zr: Upgrade 0.20.7 -> 0.20.8
        python3-zeroconf: upgrade 0.120.0 -> 0.126.0
        python3-pystemd: upgrade 0.10.0 -> 0.13.2

  Luca Fancellu (5):
        linuxptp: update linuxptp recipe to 4.1
        linuxptp: install default configuration file in sysconfdir
        linuxptp: add systemd services
        linuxptp: Drop unneeded downstream patches
        linuxptp: Use templates for the systemd services

  Marek Vasut (2):
        lvgl: lv-drivers: Allow empty package
        lvgl: Allow empty package

  Markus Fuchs (1):
        remove unused AUTHOR variable

  Markus Volk (52):
        libdecor: Upgrade 0.1.99 -> 0.2.0
        wireplumber: Upgrade 0.4.14 -> 0.4.15
        pipewire: Update 0.3.81 -> 0.3.83
        gnome-software: Update 45.0 -> 45.1
        gnome-calendar: Update 45.0 -> 45.1
        gnome-disk-utility: Update 44.0 -> 45.0
        gnome-control-center: Update 45.0 -> 45.1
        eog: Update 45.0 -> 45.1
        gnome-remote-desktop: Update 45.0 -> 45.1
        gnome-shell: Add missing dependency on pipewire
        gnome-shell: Remove deprecated libcroco dependency
        openbox: Drop deprecated libcroco dependency
        pipewire: Update 0.3.83 -> 0.3.84
        tracker-miners: Upgrade 3.6.0 -> 3.6.2
        libgweather4: Upgrade 4.2.0 -> 4.4.0
        gtksourceview5: Upgrade 5.7.1 -> 5.10.0
        openal-soft: Upgrade 1.20.1 -> 1.23.1
        gnome-shell: Upgrade 45.0 -> 45.1
        mutter: Upgrade 45.0 -> 45.1
        dconf-editor: Upgrade 43 -> 45.0.1
        libgsf: Upgrade 1.14.50 -> 1.14.51
        xdg-desktop-portal: Upgrade 1.18.0 -> 1.18.1
        xdg-desktop-portal-gtk: Upgrade 1.14.1 -> 1.15.1
        rest: Upgrade 0.9.0 -> 0.9.1
        nv-codec-headers: Upgrade 12.0.16.0 -> 12.1.14.0
        webp-pixbuf-loader: Upgrade 0.2.4 -> 0.2.5
        libchamplain: Upgrade 0.12.20 -> 0.12.21
        rest: Add packageconfigs for examples and tests
        gssdp: Fix build with api-documentation enabled
        gupnp: Upgrade 0.10.2 -> 0.12.1
        Gupnp-tools upgrade 0.10.2 -> 0.12.1
        gupnp-idg: Upgrade 1.2.0 -> 1.6.0
        gssdp: Upgrade 1.4.0.1 -> 1.6.3
        ghex: Upgrade 3.18.4 -> 45.0
        Adjust vala build according to changes in vala.bbclass
        drop GNOMEBASEBUILDCLASS = "meson"
        gnome-shell-extensions: Upgrade 44.1 -> 45.1
        cups-filters: Fix for current gcc
        gnome-console: Add recipe
        vte9: Fix build with api-documentation enabled
        gnome-terminal: Upgrade 3.48.1 -> 3.50.1
        cups-filters: Upgrade 1.28.17 -> 2.0.0
        gnome-terminal: Remove recommendation on vte-prompt
        ghex: backport patch to fix build for clang
        qpdf: cleanup
        gtksourceview4: Upgrade 4.8.2 -> 4.8.4
        gnome-control-center: Add rdepends
        system-config-printer: Add cups to rdepends
        pipewire: Upgrade 0.3.84 -> 0.3.85
        flatpak: Upgrade 1.15.4 -> 1.15.6
        flatpak: Add packageconfigs for man and docbook docs
        musicpd: unbreak build with ffmpeg 6.1

  Martin Jansa (12):
        nodejs: update to latest v20 version 20.8.1
        nodejs: Revert io_uring support from bundled libuv-1.46.0
        opencv: refresh protobuf-v22 compatibility patch with backported version
        leveldb: prevent installing gtest
        android-tools: drop ${PE}, ${PR} from /usr/src/debug paths
        minifi-cpp: drop ${PE}, ${PR} from /usr/src/debug paths
        xmlrcp-c: drop ${PE}, ${PR} from /usr/src/debug paths
        fluentbit: drop ${PE}, ${PR} from /usr/src/debug paths
        ntpsec, net-snmp: drop ${PE}, ${PR} from /usr/src/debug paths
        aom, x265: drop ${PE}, ${PR} from /usr/src/debug paths
        python3-{h5py,pandas}: drop ${PE}, ${PR} from /usr/src/debug paths
        evince, gnome-calendar, tracker: drop ${PE}, ${PR} from /usr/src/debug paths

  Martin Maurer (1):
        libqmi: Upgrade 1.32.4 -> 1.34.0

  Matthias Klein (1):
        paho-mqtt-c: upgrade 1.3.12 -> 1.3.13

  Mingli Yu (3):
        vboxguestdrivers: Remove the buildpath
        nlohmann-json: Add ptest support
        ptest-packagelists-meta-oe.inc: Add nlohmann-json

  Peter Kjellerstedt (18):
        libwebsockets: Support building for native
        mosquitto: Support building for native again
        jack: Revert to 1.9.22
        pahole: Correct the version in the recipe file name
        neatvnc: Specify the version in the recipe file name
        mstpd: Update to 0.1.0+
        Revert "libtorrent: upgrade 0.13.8 -> 1"
        libtorrent: Add UPSTREAM_CHECK_GITTAGREGEX
        mksh: Update to 59c properly
        fluidsynth: Specify the version in the recipe file name
        libuvc: Specify the version in the recipe file name
        gst-shark: Update to 0.8.1 properly
        xarchiver: Specify the version in the recipe file name
        python3-kivy: Move a comment so it makes more sense
        python3-greenlet: Avoid duplicate URI in SRC_URI
        python3-pylint: Only set SRCREV once
        python3-pytest-mock: Only set SRCREV once
        zeromq: Update to 4.3.5

  Peter Marko (1):
        grpc: Upgrade 1.56.2 -> 1.59.2

  Petr Gotthard (2):
        libmbim: upgrade 1.28.4 -> 1.30.0
        modemmanager: upgrade 1.20.6 -> 1.22.0

  Poonam Jadhav (1):
        sdbus-c++: Update ptest path

  Potin Lai (2):
        libplist: Upgrade to latest master
        idevicerestore: Upgrade to latest master

  Richard Purdie (4):
        meta-python: Drop broken BBCLASSEXTEND variants
        meta-oe: Drop broken BBCLASSEXTEND variants
        meta-networking: Drop broken BBCLASSEXTEND variants
        meta-perl: Drop broken BBCLASSEXTEND variants

  Ross Burton (1):
        yajl: fix CVE-2017-16516, CVE-2022-24795, CVE-2023-33460

  Sam Van Den Berge (1):
        netdata: Upgrade 1.36.1 -> 1.43.0

  Samuli Piippo (2):
        abseil-cpp: fix mingw build
        protobuf: stage protoc binary to sysroot

  Thomas Gessler (1):
        influxdb: Add start script used by systemd service

  Tim Orling (2):
        po4a: remove old recipe
        debsums: remove old recipe

  Trevor Gamblin (5):
        python-git-pw: add from meta-patchtest
        python3-py-cpuinfo: disable broken ptests
        python3-arrow: add from meta-patchtest
        python3-pytest-mock: disable broken ptests
        meta-python: update ptests status for py-cpuinfo, pytest-mock

  Wang Mingyu (149):
        dnf-plugin-tui: create symlinks from /usr/ to /.
        c-ares: upgrade 1.19.1 -> 1.20.1
        adw-gtk3: upgrade 4.9 -> 5.1
        ctags: upgrade 6.0.20230917.0 -> 6.0.20231001.0
        dialog: upgrade 1.3-20230209 -> 1.3-20231002
        freerdp: upgrade 2.11.1 -> 2.11.2
        gnome-backgrounds: upgrade 44.0 -> 45.0
        gnome-calculator: upgrade 45.0 -> 45.0.2
        gnome-font-viewer: upgrade 44.0 -> 45.0
        ipc-run: upgrade 20220807.0 -> 20231003.0
        libbytesize: upgrade 2.9 -> 2.10
        libcoap: upgrade 4.3.3 -> 4.3.4
        libyang: upgrade 2.1.111 -> 2.1.128
        lvgl: upgrade 8.3.9 -> 8.3.10
        metacity: upgrade 3.46.1 -> 3.50.0
        nautilus: upgrade 45.0 -> 45.1
        ceres-solver: upgrade 2.1.0 -> 2.2.0
        python3-eth-abi: upgrade 3.0.1 -> 4.2.1
        python3-mypy: upgrade 1.5.1 -> 1.6.1
        python3-pylint: upgrade 3.0.0 -> 3.0.1
        python3-aiodns: upgrade 3.0.0 -> 3.1.1
        python3-aiohttp: upgrade 3.8.5 -> 3.8.6
        python3-astroid: upgrade 3.0.0 -> 3.0.1
        python3-bitarray: upgrade 2.8.1 -> 2.8.2
        python3-bitstruct: upgrade 8.17.0 -> 8.18.0
        python3-blinker: upgrade 1.6.2 -> 1.6.3
        python3-charset-normalizer: upgrade 3.2.0 -> 3.3.0
        python3-cmake: upgrade 3.27.5 -> 3.27.7
        python3-coverage: upgrade 7.3.1 -> 7.3.2
        python3-croniter: upgrade 1.4.1 -> 2.0.1
        python3-dbus-fast: upgrade 1.85.0 -> 2.12.0
        python3-email-validator: upgrade 1.3.1 -> 2.0.0
        python3-engineio: upgrade 4.7.1 -> 4.8.0
        python3-eth-typing: upgrade 3.4.0 -> 3.5.0
        python3-eth-utils: upgrade 2.2.1 -> 2.2.2
        python3-executing: upgrade 1.2.0 -> 2.0.0
        python3-flask-babel: upgrade 3.1.0 -> 4.0.0
        python3-flask-jwt-extended: upgrade 4.5.2 -> 4.5.3
        python3-google-api-python-client: upgrade 2.101.0 -> 2.104.0
        python3-googleapis-common-protos: upgrade 1.60.0 -> 1.61.0
        python3-google-auth: upgrade 2.23.1 -> 2.23.3
        python3-h5py: upgrade 3.9.0 -> 3.10.0
        python3-huey: upgrade 2.4.5 -> 2.5.0
        python3-imageio: upgrade 2.31.3 -> 2.31.5
        python3-ipython: upgrade 8.15.0 -> 8.16.1
        python3-jedi: upgrade 0.19.0 -> 0.19.1
        python3-meson-python: upgrade 0.13.1 -> 0.14.0
        python3-msgpack: upgrade 1.0.6 -> 1.0.7
        python3-platformdirs: upgrade 3.10.0 -> 3.11.0
        python3-prompt-toolkit: upgrade 3.0.36 -> 3.0.39
        python3-protobuf: upgrade 4.24.3 -> 4.24.4
        python3-pycares: upgrade 4.3.0 -> 4.4.0
        python3-pycodestyle: upgrade 2.11.0 -> 2.11.1
        python3-pydantic: upgrade 2.4.1 -> 2.4.2
        python3-pyephem: upgrade 4.1.4 -> 4.1.5
        python3-pytest-timeout: upgrade 2.1.0 -> 2.2.0
        python3-rapidjson: upgrade 1.11 -> 1.12
        python3-regex: upgrade 2023.8.8 -> 2023.10.3
        python3-rich: upgrade 13.5.3 -> 13.6.0
        python3-schedule: upgrade 1.2.0 -> 1.2.1
        python3-semver: upgrade 3.0.1 -> 3.0.2
        python3-simplejson: upgrade 3.19.1 -> 3.19.2
        python3-socketio: upgrade 5.9.0 -> 5.10.0
        python3-sqlalchemy: upgrade 2.0.21 -> 2.0.22
        python3-stack-data: upgrade 0.6.2 -> 0.6.3
        python3-texttable: upgrade 1.6.7 -> 1.7.0
        python3-traitlets: upgrade 5.10.1 -> 5.11.2
        python3-types-psutil: upgrade 5.9.5.16 -> 5.9.5.17
        python3-tzlocal: upgrade 5.0.1 -> 5.1
        python3-web3: upgrade 6.10.0 -> 6.11.1
        python3-websocket-client: upgrade 1.6.3 -> 1.6.4
        python3-xlsxwriter: upgrade 3.1.3 -> 3.1.8
        python3-xxhash: upgrade 3.3.0 -> 3.4.1
        python3-zeroconf: upgrade 0.112.0 -> 0.119.0
        python3-zopeinterface: upgrade 6.0 -> 6.1
        rdma-core: upgrade 47.0 -> 48.0
        redis: upgrade 7.2.1 -> 7.2.2
        remmina: upgrade 1.4.32 -> 1.4.33
        tesseract: upgrade 5.3.2 -> 5.3.3
        thingsboard-gateway: upgrade 3.3 -> 3.4.1
        tio: upgrade 2.6 -> 2.7
        wireshark: upgrade 4.0.8 -> 4.0.10
        xterm: upgrade 384 -> 387
        zchunk: upgrade 1.3.1 -> 1.3.2
        hdf5: Fix install conflict when enable multilib.
        dnf-plugin-tui: Recover BBCLASSEXTEND variants
        gensio: upgrade 2.7.6 -> 2.7.7
        hwdata: upgrade 0.375 -> 0.376
        libio-socket-ssl-perl: upgrade 2.083 -> 2.084
        makedumpfile: upgrade 1.7.3 -> 1.7.4
        gnome-remote-desktop: move from meta-virtualization to meta-security
        ctags: upgrade 6.0.20231029.0 -> 6.0.20231105.0
        function2: upgrade 4.2.3 -> 4.2.4
        neatvnc: upgrade 0.7.0 -> 0.7.1
        python3-argh: upgrade 0.30.3 -> 0.30.4
        python3-geojson: upgrade 3.0.1 -> 3.1.0
        python3-imageio: upgrade 2.31.6 -> 2.32.0
        python3-inflate64: upgrade 0.3.1 -> 1.0.0
        python3-jsbeautifier: upgrade 1.14.9 -> 1.14.11
        python3-lru-dict: upgrade 1.2.0 -> 1.3.0
        python3-python-vlc: upgrade 3.0.18122 -> 3.0.20123
        python3-zeroconf: upgrade 0.119.0 -> 0.120.0
        c-ares: upgrade 1.21.0 -> 1.22.0
        ctags: upgrade 6.0.20231105.0 -> 6.0.20231112.0
        libencode-perl: upgrade 3.19 -> 3.20
        bindfs: upgrade 1.17.5 -> 1.17.6
        python3-hexbytes: upgrade 0.3.1 -> 1.0.0
        python3-linux-procfs: upgrade 0.7.1 -> 0.7.3
        openvpn: upgrade 2.6.6 -> 2.6.7
        python3-argcomplete: upgrade 3.1.4 -> 3.1.6
        python3-awesomeversion: upgrade 23.8.0 -> 23.11.0
        python3-dbus-fast: upgrade 2.12.0 -> 2.14.0
        python3-eth-typing: upgrade 3.5.1 -> 3.5.2
        python3-eth-utils: upgrade 2.3.0 -> 2.3.1
        python3-geomet: upgrade 1.0.0 -> 1.1.0
        python3-google-api-core: upgrade 2.12.0 -> 2.14.0
        python3-google-api-python-client: upgrade 2.106.0 -> 2.108.0
        python3-mypy: upgrade 1.6.1 -> 1.7.0
        python3-platformdirs: upgrade 3.11.0 -> 4.0.0
        python3-prompt-toolkit: upgrade 3.0.39 -> 3.0.41
        python3-pyaudio: upgrade 0.2.13 -> 0.2.14
        python3-pydantic: upgrade 2.4.2 -> 2.5.0
        python3-pymetno: upgrade 0.11.0 -> 0.12.0
        python3-pytest-xdist: upgrade 3.3.1 -> 3.4.0
        python3-sentry-sdk: upgrade 1.34.0 -> 1.35.0
        python3-tomlkit: upgrade 0.12.2 -> 0.12.3
        python3-types-setuptools: upgrade 68.2.0.0 -> 68.2.0.1
        python3-web3: upgrade 6.11.2 -> 6.11.3
        python3-zeroconf: upgrade 0.126.0 -> 0.127.0
        ser2net: upgrade 4.5.0 -> 4.5.1
        uftp: upgrade 5.0.1 -> 5.0.2
        webkitgtk3: upgrade 2.42.1 -> 2.42.2
        imlib2: delete non-existent file
        c-ares: upgrade 1.22.0 -> 1.22.1
        ctags: upgrade 6.0.20231112.0 -> 6.0.20231119.0
        exiftool: upgrade 12.69 -> 12.70
        gnome-bluetooth: upgrade 42.6 -> 42.7
        libextutils-cppguess-perl: upgrade 0.26 -> 0.27
        libwebsockets: upgrade 4.3.2 -> 4.3.3
        python3-aiohttp: upgrade 3.8.6 -> 3.9.0
        python3-dateparser: upgrade 1.1.8 -> 1.2.0
        python3-django: upgrade 4.2.5 -> 4.2.7
        python3-imageio: upgrade 2.32.0 -> 2.33.0
        python3-ldap: upgrade 3.4.3 -> 3.4.4
        python3-pastedeploy: upgrade 3.0.1 -> 3.1.0
        python3-pdm: upgrade 2.10.1 -> 2.10.3
        python3-pydantic: upgrade 2.5.0 -> 2.5.1
        python3-rich: upgrade 13.6.0 -> 13.7.0
        strongswan: upgrade 5.9.11 -> 5.9.12

  Yi Zhao (6):
        samba: upgrade 4.18.6 -> 4.18.8
        samba: use external cmocka instead of bundled cmocka
        libtevent: fix ptest
        libldb: add ptest
        conntrack-tools: upgrade 1.4.7 -> 1.4.8
        nftables: upgrade 1.0.8 -> 1.0.9

  Yoann Congal (5):
        emlog: ignore CVE-2022-3968 & CVE-2023-43291
        juce/projucer: Backport a fix for the compilation under recent GCC
        meta-oe/static-ids: Change postgres to 28 to match forced id in recipe
        static-id: add missing netdata group
        python3-soupsieve: Break circular dependency with beautifulsoup4

  Zoltán Böszörményi (3):
        python3-ninja-syntax: Set BBCLASSEXTEND = "native nativesdk"
        python3-ninja: Set BBCLASSEXTEND = "native nativesdk"
        geos: Fix packaging

  alperak (39):
        xdebug: upgrade 3.2.0 -> 3.2.2
        catch2: upgrade 2.13.7 -> 2.13.10
        tuna: upgrade 0.18 -> 0.19
        libsrtp: upgrade 2.4.2 -> 2.5.0
        libupnp: upgrade 1.14.6 -> 1.14.18
        libisofs: upgrade 1.5.4 -> 1.5.6
        libisoburn: 1.5.4 -> 1.5.6
        fuse-exfat: upgrade 1.3.0 -> 1.4.0
        fuse3: upgrade 3.15.1 -> 3.16.2
        ufs-utils: upgrade 3.12.3 -> 4.13.5
        libebml: upgrade 1.3.0 -> 1.4.4
        libmatroska: upgrade 1.4.1 -> 1.7.1
        libde265: upgrade 1.0.5 -> 1.0.12
        libopenmpt: upgrade 0.6.2 -> 0.7.3
        mpd: upgrade 0.23.12 -> 0.23.14
        opencore-amr: upgrade 0.1.3 -> 0.1.6
        tinyalsa: upgrade 1.1.1 -> 2.0.0
        cannelloni: upgrade 1.0.0 -> 1.1.0
        civetweb: upgrade 1.12 -> 1.16
        libdnet: upgrade 1.16.3 -> 1.17.0
        openfortivpn: upgrade 1.20.5 -> 1.21.0
        fuse-exfat: Dropped md5sum
        libopenmpt: Added license change reason and dropped md5sum
        bolt: upgrade 0.9.5 -> 0.9.6
        irssi: upgrade 1.4.4 -> 1.4.5
        libmtp: upgrade 1.1.20 -> 1.1.21
        libsigc++-2.0: upgrade 2.10.7 -> 2.12.1
        libsigc++-3: upgrade 3.2.0 -> 3.6.0
        ocl-icd: upgrade 2.3.1 -> 2.3.2
        opencl-icd-loader: upgrade v2022.01.04 -> v2023.04.17
        uutils-coreutils: upgrade 0.0.22 -> 0.0.23
        botan: upgrade 2.19.3 -> 3.2.0
        capnproto: upgrade 0.10.4 -> 1.0.1
        cloc: upgrade 1.94 -> 1.98
        cpuid: upgrade 20211129 -> 20230614
        gst-editing-services: upgrade 1.20.5 -> 1.22.7
        luaposix: upgrade 35.1 -> 36.2.1
        mercurial: upgrade 6.1 -> 6.5
        ledmon: upgrade 0.93 -> 0.97

  skandigraun (1):
        libvpx: don't specify armv5 and armv6 toolchains explicitly

meta-security: 3f7d40b0fc..070a1e82cc:
  Gowtham Suresh Kumar (1):
        Update parsec recipes

  Mingli Yu (1):
        samhain: remove the buildpath

  Stefan Berger (1):
        ima,evm: Add two variables to write filenames and signatures into

Change-Id: Ib809aa0df4162c50a06c542a94a0b06cdc149a2d
Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
diff --git a/meta-openembedded/meta-oe/conf/include/ptest-packagelists-meta-oe.inc b/meta-openembedded/meta-oe/conf/include/ptest-packagelists-meta-oe.inc
index a2b2ce4..33aff7f 100644
--- a/meta-openembedded/meta-oe/conf/include/ptest-packagelists-meta-oe.inc
+++ b/meta-openembedded/meta-oe/conf/include/ptest-packagelists-meta-oe.inc
@@ -28,6 +28,7 @@
     lmdb \
     minicoredumper \
     neon \
+    nlohmann-json \
     nodejs \
     onig \
     poco \
@@ -36,6 +37,7 @@
     uthash \
     xmlsec1 \
     zeromq \
+    cjson \
 "
 PTESTS_FAST_META_OE:append:x86 = " mcelog"
 PTESTS_FAST_META_OE:append:x86-64 = " mcelog"
@@ -49,6 +51,7 @@
     libusb-compat \
     rsyslog \
     mariadb \
+    re2 \
 "
 PTESTS_SLOW_META_OE:append:x86 = " kernel-selftest"
 PTESTS_SLOW_META_OE:append:x86-64 = " kernel-selftest"
diff --git a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/thingsboard-gateway/thingsboard-gateway_3.3.bb b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/thingsboard-gateway/thingsboard-gateway_3.4.2.bb
similarity index 95%
rename from meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/thingsboard-gateway/thingsboard-gateway_3.3.bb
rename to meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/thingsboard-gateway/thingsboard-gateway_3.4.2.bb
index 0987522..52bcffe 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/thingsboard-gateway/thingsboard-gateway_3.3.bb
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/thingsboard-gateway/thingsboard-gateway_3.4.2.bb
@@ -7,7 +7,7 @@
 LICENSE = "Apache-2.0"
 LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
 
-SRC_URI[sha256sum] = "4d27661113c54e3b0998328f15ca7fd9e4837d1975c7c213595cb940f4b11484"
+SRC_URI[sha256sum] = "a54953c53c0ee72a1aa270bc018db7cc853f56ca29e2c98938ff4138109fd41a"
 
 inherit pypi setuptools3
 
diff --git a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-multimedia/kmsxx/kmsxx_git.bb b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-multimedia/kmsxx/kmsxx_git.bb
new file mode 100644
index 0000000..cdba1a2
--- /dev/null
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-multimedia/kmsxx/kmsxx_git.bb
@@ -0,0 +1,35 @@
+# SPDX-License-Identifier: MIT
+#
+# Copyright Leica Geosystems AG
+#
+
+SUMMARY = "C++ library for kernel mode setting"
+HOMEPAGE = "https://github.com/tomba/kmsxx"
+LICENSE = "MPL-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=815ca599c9df247a0c7f619bab123dad"
+
+BRANCH = "master"
+SRC_URI = "git://github.com/tomba/kmsxx.git;protocol=https;branch=${BRANCH}"
+SRCREV = "412935a47b762c33e54a464243f2d789b065bbb6"
+PACKAGES =+ "${PN}-python"
+
+PACKAGECONFIG ?= "utils python "
+PACKAGECONFIG[omap] += "-Domap=enabled, -Domap=disabled"
+PACKAGECONFIG[python] += "-Dpykms=enabled, -Dpykms=disabled, python3 python3-pybind11"
+PACKAGECONFIG[utils] += "-Dutils=true, -Dutils=false"
+
+DEPENDS += "libdrm libevdev fmt"
+
+S = "${WORKDIR}/git"
+
+inherit meson pkgconfig
+
+do_install:append() {
+    if ${@bb.utils.contains('PACKAGECONFIG', 'utils', 'true', 'false', d)}; then
+        # kmstest already provided by libdrm-tests
+        mv ${D}${bindir}/kmstest ${D}${bindir}/kmsxxtest
+    fi
+}
+
+FILES:${PN} ="${bindir} ${libdir}"
+FILES:${PN}-python += "${PYTHON_SITEPACKAGES_DIR}/*"
diff --git a/meta-openembedded/meta-oe/dynamic-layers/perl-layer/recipes-core/packagegroups/packagegroup-meta-oe.bbappend b/meta-openembedded/meta-oe/dynamic-layers/perl-layer/recipes-core/packagegroups/packagegroup-meta-oe.bbappend
index 8cb8d22..5c48fd5 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/perl-layer/recipes-core/packagegroups/packagegroup-meta-oe.bbappend
+++ b/meta-openembedded/meta-oe/dynamic-layers/perl-layer/recipes-core/packagegroups/packagegroup-meta-oe.bbappend
@@ -1 +1 @@
-RDEPENDS:packagegroup-meta-oe-support += "debsums rasdaemon"
+RDEPENDS:packagegroup-meta-oe-support += "rasdaemon"
diff --git a/meta-openembedded/meta-oe/dynamic-layers/perl-layer/recipes-support/debsums/debsums_2.2.2.bb b/meta-openembedded/meta-oe/dynamic-layers/perl-layer/recipes-support/debsums/debsums_2.2.2.bb
deleted file mode 100644
index 252db19..0000000
--- a/meta-openembedded/meta-oe/dynamic-layers/perl-layer/recipes-support/debsums/debsums_2.2.2.bb
+++ /dev/null
@@ -1,56 +0,0 @@
-SUMMARY = "Miscellaneous utilities specific to Debian"
-SUMMARY:${PN}-cron = "Cron scripts to control automatic debsum checking"
-DESCRIPTION = "A tool for verification of installed package files against \
-MD5 checksums debsums can verify the integrity of installed package files \
-against MD5 checksums installed by the package, or generated from a .deb \
-archive."
-DESCRIPTION:${PN}-cron = "Cron scripts to control automatic system integrity \
-checking via debsums."
-SECTION = "base"
-LICENSE = "GPL-2.0-only"
-LIC_FILES_CHKSUM = "file://debian/copyright;md5=770d751553e6559e9eaefd2e11ccf7e9"
-
-SRC_URI = "http://snapshot.debian.org/archive/debian/20170530T212108Z/pool/main/d/debsums/debsums_2.2.2.tar.xz"
-SRC_URI[md5sum] = "82b0710855a7e5212d4358163a269e79"
-SRC_URI[sha256sum] = "aa61896f93a6bbfe0161c21dcd67529ae8e1ec8c3ccf244523c52c4ad8253d97"
-
-# the package is taken from snapshots.debian.org; that source is static and goes stale
-# so we check the latest upstream from a directory that does get updated
-UPSTREAM_CHECK_URI = "${DEBIAN_MIRROR}/main/d/${BPN}/"
-
-inherit perlnative gettext
-
-DEPENDS += "po4a-native"
-
-do_install() {
-        install -d ${D}/${sysconfdir}/cron.daily ${D}/${sysconfdir}/cron.weekly
-        install -d ${D}/${sysconfdir}/cron.monthly ${D}${sbindir} ${D}${bindir}
-        install -d ${D}${mandir}/man1 ${D}${mandir}/man8
-        install -m 0755 debsums ${D}${bindir}/
-        install -m 0755 rdebsums ${D}${bindir}/
-        install -m 0755 debsums_init ${D}${sbindir}
-        install -m 0644 man/debsums.1 ${D}${mandir}/man1/
-        install -m 0644 man/rdebsums.1 ${D}${mandir}/man1/
-        install -m 0644 man/debsums_init.8 ${D}${mandir}/man8/
-        install -m 0644 debian/cron.daily \
-                ${D}/${sysconfdir}/cron.daily/debsums
-        install -m 0644 debian/cron.weekly \
-                ${D}/${sysconfdir}/cron.weekly/debsums
-        install -m 0644 debian/cron.monthly \
-                ${D}/${sysconfdir}/cron.monthly/debsums
-        # Must exist, defaults to empty.
-        touch ${D}/${sysconfdir}/debsums-ignore
-}
-
-PACKAGES =+ "${PN}-cron"
-
-RDEPENDS:${PN} = "dpkg dpkg-perl libfile-fnmatch-perl perl \
-                  perl-module-constant perl-module-digest-md5 \
-                  perl-module-errno perl-module-fcntl \
-                  perl-module-file-basename perl-module-file-copy \
-                  perl-module-file-find perl-module-file-glob \
-                  perl-module-file-path perl-module-file-spec \
-                  perl-module-file-temp perl-module-getopt-long \
-                  perl-module-posix"
-
-FILES:${PN}-cron = "${sysconfdir}/cron.*"
diff --git a/meta-openembedded/meta-oe/files/static-group-meta-oe b/meta-openembedded/meta-oe/files/static-group-meta-oe
index 79c9bb6..f20c86f 100644
--- a/meta-openembedded/meta-oe/files/static-group-meta-oe
+++ b/meta-openembedded/meta-oe/files/static-group-meta-oe
@@ -2,7 +2,7 @@
 xrdp:x:601:
 sanlock:x:602:
 mysql:x:603:
-postgres:x:604:
+postgres:x:28:
 zabbix:x:605:
 mail:x:606:
-nogroup:x:607:
\ No newline at end of file
+nogroup:x:65534:
diff --git a/meta-openembedded/meta-oe/files/static-passwd-meta-oe b/meta-openembedded/meta-oe/files/static-passwd-meta-oe
index 4c312b7..00f3e10 100644
--- a/meta-openembedded/meta-oe/files/static-passwd-meta-oe
+++ b/meta-openembedded/meta-oe/files/static-passwd-meta-oe
@@ -2,7 +2,7 @@
 xrdp:x:601:601::/:/bin/nologin
 sanlock:x:602:602::/:/bin/nologin
 mysql:x:603:603::/:/bin/nologin
-postgres:x:604:604::/:/bin/nologin
+postgres:x:28:28::/:/bin/nologin
 zabbix:x:605:605::/:/bin/nologin
 cyrus:x:606:nogroup::/:/bin/nologin
 pcp:x:620:nogroup::/:/bin/nologin
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0001-Fio-3.31.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0001-Fio-3.31.patch
new file mode 100644
index 0000000..9b8b7d0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0001-Fio-3.31.patch
@@ -0,0 +1,23 @@
+From 6cafe8445fd1e04e5f7d67bbc73029a538d1b253 Mon Sep 17 00:00:00 2001
+From: Jens Axboe <axboe@kernel.dk>
+Date: Tue, 9 Aug 2022 14:41:25 -0600
+Subject: [PATCH] Fio 3.31
+
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+---
+ FIO-VERSION-GEN | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/FIO-VERSION-GEN b/FIO-VERSION-GEN
+index fa64f50f..72630dd0 100755
+--- a/FIO-VERSION-GEN
++++ b/FIO-VERSION-GEN
+@@ -1,7 +1,7 @@
+ #!/bin/sh
+ 
+ GVF=FIO-VERSION-FILE
+-DEF_VER=fio-3.30
++DEF_VER=fio-3.31
+ 
+ LF='
+ '
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0002-lib-rand-Enhance-__fill_random_buf-using-the-multi-r.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0002-lib-rand-Enhance-__fill_random_buf-using-the-multi-r.patch
new file mode 100644
index 0000000..1650656
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0002-lib-rand-Enhance-__fill_random_buf-using-the-multi-r.patch
@@ -0,0 +1,136 @@
+From 40ba7a05de6a08cfd382b116f76dbeaa7237df45 Mon Sep 17 00:00:00 2001
+From: Sungup Moon <sungup.moon@samsung.com>
+Date: Mon, 8 Aug 2022 17:21:46 +0900
+Subject: [PATCH] lib/rand: Enhance __fill_random_buf using the multi random
+ seed
+
+The __fill_random_buf fills a buffer using the random 8byte integer to
+write. But, this mechanism is depend on the CPU performance and could
+not reach the max performance on the PCIe Gen5 devices. I have tested
+128KB single worker sequential write on PCIe Gen5 NVMe, but it cannot
+reach write throughput 6.0GB/s.
+
+So, I have reviewed the __fill_random_buf and focused the multiplier
+dependency to generate the random number. So, I have changed
+__fill_random_buf using the multiple-random-seed to reduce the
+dependencies in the small data filling loop.
+
+I'll attach detail analysis result in the PR of this branch.
+
+Signed-off-by: Sungup Moon <sungup.moon@samsung.com>
+---
+ configure  | 17 +++++++++++++++++
+ lib/rand.c | 37 ++++++++++++++++++++++++++++++++++++-
+ 2 files changed, 53 insertions(+), 1 deletion(-)
+
+diff --git a/configure b/configure
+index 36450df8..a2b9bd4c 100755
+--- a/configure
++++ b/configure
+@@ -116,6 +116,10 @@ has() {
+   type "$1" >/dev/null 2>&1
+ }
+ 
++num() {
++  echo "$1" | grep -P -q "^[0-9]+$"
++}
++
+ check_define() {
+   cat > $TMPC <<EOF
+ #if !defined($1)
+@@ -174,6 +178,7 @@ libnfs=""
+ xnvme=""
+ libzbc=""
+ dfs=""
++seed_buckets=""
+ dynamic_engines="no"
+ prefix=/usr/local
+ 
+@@ -255,6 +260,8 @@ for opt do
+   ;;
+   --enable-asan) asan="yes"
+   ;;
++  --seed-buckets=*) seed_buckets="$optarg"
++  ;;
+   --help)
+     show_help="yes"
+     ;;
+@@ -302,6 +309,7 @@ if test "$show_help" = "yes" ; then
+   echo "--dynamic-libengines    Lib-based ioengines as dynamic libraries"
+   echo "--disable-dfs           Disable DAOS File System support even if found"
+   echo "--enable-asan           Enable address sanitizer"
++  echo "--seed-buckets=         Number of seed buckets for the refill-buffer"
+   exit $exit_val
+ fi
+ 
+@@ -3273,6 +3281,15 @@ if test "$disable_tcmalloc" != "yes"; then
+   fi
+ fi
+ print_config "TCMalloc support" "$tcmalloc"
++if ! num "$seed_buckets"; then
++  seed_buckets=4
++elif test "$seed_buckets" -lt 2; then
++  seed_buckets=2
++elif test "$seed_buckets" -gt 16; then
++  seed_buckets=16
++fi
++echo "#define CONFIG_SEED_BUCKETS $seed_buckets" >> $config_host_h
++print_config "seed_buckets" "$seed_buckets"
+ 
+ echo "LIBS+=$LIBS" >> $config_host_mak
+ echo "GFIO_LIBS+=$GFIO_LIBS" >> $config_host_mak
+diff --git a/lib/rand.c b/lib/rand.c
+index 1e669116..1ce4a849 100644
+--- a/lib/rand.c
++++ b/lib/rand.c
+@@ -95,7 +95,7 @@ void init_rand_seed(struct frand_state *state, uint64_t seed, bool use64)
+ 		__init_rand64(&state->state64, seed);
+ }
+ 
+-void __fill_random_buf(void *buf, unsigned int len, uint64_t seed)
++void __fill_random_buf_small(void *buf, unsigned int len, uint64_t seed)
+ {
+ 	uint64_t *b = buf;
+ 	uint64_t *e = b  + len / sizeof(*b);
+@@ -110,6 +110,41 @@ void __fill_random_buf(void *buf, unsigned int len, uint64_t seed)
+ 		__builtin_memcpy(e, &seed, rest);
+ }
+ 
++void __fill_random_buf(void *buf, unsigned int len, uint64_t seed)
++{
++#define MAX_SEED_BUCKETS 16
++	static uint64_t prime[MAX_SEED_BUCKETS] = {1,  2,  3,  5,
++						   7,  11, 13, 17,
++						   19, 23, 29, 31,
++						   37, 41, 43, 47};
++
++	uint64_t *b, *e, s[CONFIG_SEED_BUCKETS];
++	unsigned int rest;
++	int p;
++
++	/*
++	 * Calculate the max index which is multiples of the seed buckets.
++	 */
++	rest = (len / sizeof(*b) / CONFIG_SEED_BUCKETS) * CONFIG_SEED_BUCKETS;
++
++	b = buf;
++	e = b + rest;
++
++	rest = len - (rest * sizeof(*b));
++
++	for (p = 0; p < CONFIG_SEED_BUCKETS; p++)
++		s[p] = seed * prime[p];
++
++	for (; b != e; b += CONFIG_SEED_BUCKETS) {
++		for (p = 0; p < CONFIG_SEED_BUCKETS; ++p) {
++			b[p] = s[p];
++			s[p] = __hash_u64(s[p]);
++		}
++	}
++
++	__fill_random_buf_small(b, rest, s[0]);
++}
++
+ uint64_t fill_random_buf(struct frand_state *fs, void *buf,
+ 			 unsigned int len)
+ {
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0003-lib-rand-get-rid-of-unused-MAX_SEED_BUCKETS.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0003-lib-rand-get-rid-of-unused-MAX_SEED_BUCKETS.patch
new file mode 100644
index 0000000..fc4af0a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0003-lib-rand-get-rid-of-unused-MAX_SEED_BUCKETS.patch
@@ -0,0 +1,31 @@
+From f4dd3f2ad435a75862ad3f34a661b169f72c7885 Mon Sep 17 00:00:00 2001
+From: Jens Axboe <axboe@kernel.dk>
+Date: Wed, 10 Aug 2022 09:51:49 -0600
+Subject: [PATCH] lib/rand: get rid of unused MAX_SEED_BUCKETS
+
+It's only used to size the array, we don't need it.
+
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+---
+ lib/rand.c | 8 ++------
+ 1 file changed, 2 insertions(+), 6 deletions(-)
+
+diff --git a/lib/rand.c b/lib/rand.c
+index 1ce4a849..0e787a62 100644
+--- a/lib/rand.c
++++ b/lib/rand.c
+@@ -112,12 +112,8 @@ void __fill_random_buf_small(void *buf, unsigned int len, uint64_t seed)
+ 
+ void __fill_random_buf(void *buf, unsigned int len, uint64_t seed)
+ {
+-#define MAX_SEED_BUCKETS 16
+-	static uint64_t prime[MAX_SEED_BUCKETS] = {1,  2,  3,  5,
+-						   7,  11, 13, 17,
+-						   19, 23, 29, 31,
+-						   37, 41, 43, 47};
+-
++	static uint64_t prime[] = {1, 2, 3, 5, 7, 11, 13, 17,
++				   19, 23, 29, 31, 37, 41, 43, 47};
+ 	uint64_t *b, *e, s[CONFIG_SEED_BUCKETS];
+ 	unsigned int rest;
+ 	int p;
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0004-ioengines-merge-filecreate-filestat-filedelete-engin.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0004-ioengines-merge-filecreate-filestat-filedelete-engin.patch
new file mode 100644
index 0000000..1b59ad3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0004-ioengines-merge-filecreate-filestat-filedelete-engin.patch
@@ -0,0 +1,800 @@
+From 1cfbaff9806f17c2afbabe79c1c87b96eba7f35a Mon Sep 17 00:00:00 2001
+From: "Friendy.Su@sony.com" <Friendy.Su@sony.com>
+Date: Mon, 8 Aug 2022 08:35:50 +0000
+Subject: [PATCH] ioengines: merge filecreate, filestat, filedelete engines to
+ fileoperations.c
+
+file operation engines have similar structure, implement them
+in one file.
+
+Signed-off-by: friendy-su <friendy.su@sony.com>
+---
+ Makefile                 |   2 +-
+ engines/filecreate.c     | 118 ---------------
+ engines/filedelete.c     | 115 --------------
+ engines/fileoperations.c | 318 +++++++++++++++++++++++++++++++++++++++
+ engines/filestat.c       | 190 -----------------------
+ 5 files changed, 319 insertions(+), 424 deletions(-)
+ delete mode 100644 engines/filecreate.c
+ delete mode 100644 engines/filedelete.c
+ create mode 100644 engines/fileoperations.c
+ delete mode 100644 engines/filestat.c
+
+diff --git a/Makefile b/Makefile
+index 188a74d7..634d2c93 100644
+--- a/Makefile
++++ b/Makefile
+@@ -56,7 +56,7 @@ SOURCE :=	$(sort $(patsubst $(SRCDIR)/%,%,$(wildcard $(SRCDIR)/crc/*.c)) \
+ 		pshared.c options.c \
+ 		smalloc.c filehash.c profile.c debug.c engines/cpu.c \
+ 		engines/mmap.c engines/sync.c engines/null.c engines/net.c \
+-		engines/ftruncate.c engines/filecreate.c engines/filestat.c engines/filedelete.c \
++		engines/ftruncate.c engines/fileoperations.c \
+ 		engines/exec.c \
+ 		server.c client.c iolog.c backend.c libfio.c flow.c cconv.c \
+ 		gettime-thread.c helpers.c json.c idletime.c td_error.c \
+diff --git a/engines/filecreate.c b/engines/filecreate.c
+deleted file mode 100644
+index 7884752d..00000000
+--- a/engines/filecreate.c
++++ /dev/null
+@@ -1,118 +0,0 @@
+-/*
+- * filecreate engine
+- *
+- * IO engine that doesn't do any IO, just creates files and tracks the latency
+- * of the file creation.
+- */
+-#include <stdio.h>
+-#include <fcntl.h>
+-#include <errno.h>
+-
+-#include "../fio.h"
+-
+-struct fc_data {
+-	enum fio_ddir stat_ddir;
+-};
+-
+-static int open_file(struct thread_data *td, struct fio_file *f)
+-{
+-	struct timespec start;
+-	int do_lat = !td->o.disable_lat;
+-
+-	dprint(FD_FILE, "fd open %s\n", f->file_name);
+-
+-	if (f->filetype != FIO_TYPE_FILE) {
+-		log_err("fio: only files are supported\n");
+-		return 1;
+-	}
+-	if (!strcmp(f->file_name, "-")) {
+-		log_err("fio: can't read/write to stdin/out\n");
+-		return 1;
+-	}
+-
+-	if (do_lat)
+-		fio_gettime(&start, NULL);
+-
+-	f->fd = open(f->file_name, O_CREAT|O_RDWR, 0600);
+-
+-	if (f->fd == -1) {
+-		char buf[FIO_VERROR_SIZE];
+-		int e = errno;
+-
+-		snprintf(buf, sizeof(buf), "open(%s)", f->file_name);
+-		td_verror(td, e, buf);
+-		return 1;
+-	}
+-
+-	if (do_lat) {
+-		struct fc_data *data = td->io_ops_data;
+-		uint64_t nsec;
+-
+-		nsec = ntime_since_now(&start);
+-		add_clat_sample(td, data->stat_ddir, nsec, 0, 0, 0, 0);
+-	}
+-
+-	return 0;
+-}
+-
+-static enum fio_q_status queue_io(struct thread_data *td,
+-				  struct io_u fio_unused *io_u)
+-{
+-	return FIO_Q_COMPLETED;
+-}
+-
+-/*
+- * Ensure that we at least have a block size worth of IO to do for each
+- * file. If the job file has td->o.size < nr_files * block_size, then
+- * fio won't do anything.
+- */
+-static int get_file_size(struct thread_data *td, struct fio_file *f)
+-{
+-	f->real_file_size = td_min_bs(td);
+-	return 0;
+-}
+-
+-static int init(struct thread_data *td)
+-{
+-	struct fc_data *data;
+-
+-	data = calloc(1, sizeof(*data));
+-
+-	if (td_read(td))
+-		data->stat_ddir = DDIR_READ;
+-	else if (td_write(td))
+-		data->stat_ddir = DDIR_WRITE;
+-
+-	td->io_ops_data = data;
+-	return 0;
+-}
+-
+-static void cleanup(struct thread_data *td)
+-{
+-	struct fc_data *data = td->io_ops_data;
+-
+-	free(data);
+-}
+-
+-static struct ioengine_ops ioengine = {
+-	.name		= "filecreate",
+-	.version	= FIO_IOOPS_VERSION,
+-	.init		= init,
+-	.cleanup	= cleanup,
+-	.queue		= queue_io,
+-	.get_file_size	= get_file_size,
+-	.open_file	= open_file,
+-	.close_file	= generic_close_file,
+-	.flags		= FIO_DISKLESSIO | FIO_SYNCIO | FIO_FAKEIO |
+-				FIO_NOSTATS | FIO_NOFILEHASH,
+-};
+-
+-static void fio_init fio_filecreate_register(void)
+-{
+-	register_ioengine(&ioengine);
+-}
+-
+-static void fio_exit fio_filecreate_unregister(void)
+-{
+-	unregister_ioengine(&ioengine);
+-}
+diff --git a/engines/filedelete.c b/engines/filedelete.c
+deleted file mode 100644
+index df388ac9..00000000
+--- a/engines/filedelete.c
++++ /dev/null
+@@ -1,115 +0,0 @@
+-/*
+- * file delete engine
+- *
+- * IO engine that doesn't do any IO, just delete files and track the latency
+- * of the file deletion.
+- */
+-#include <stdio.h>
+-#include <fcntl.h>
+-#include <errno.h>
+-#include <sys/types.h>
+-#include <unistd.h>
+-#include "../fio.h"
+-
+-struct fc_data {
+-	enum fio_ddir stat_ddir;
+-};
+-
+-static int delete_file(struct thread_data *td, struct fio_file *f)
+-{
+-	struct timespec start;
+-	int do_lat = !td->o.disable_lat;
+-	int ret;
+-
+-	dprint(FD_FILE, "fd delete %s\n", f->file_name);
+-
+-	if (f->filetype != FIO_TYPE_FILE) {
+-		log_err("fio: only files are supported\n");
+-		return 1;
+-	}
+-	if (!strcmp(f->file_name, "-")) {
+-		log_err("fio: can't read/write to stdin/out\n");
+-		return 1;
+-	}
+-
+-	if (do_lat)
+-		fio_gettime(&start, NULL);
+-
+-	ret = unlink(f->file_name);
+-
+-	if (ret == -1) {
+-		char buf[FIO_VERROR_SIZE];
+-		int e = errno;
+-
+-		snprintf(buf, sizeof(buf), "delete(%s)", f->file_name);
+-		td_verror(td, e, buf);
+-		return 1;
+-	}
+-
+-	if (do_lat) {
+-		struct fc_data *data = td->io_ops_data;
+-		uint64_t nsec;
+-
+-		nsec = ntime_since_now(&start);
+-		add_clat_sample(td, data->stat_ddir, nsec, 0, 0, 0, 0);
+-	}
+-
+-	return 0;
+-}
+-
+-
+-static enum fio_q_status queue_io(struct thread_data *td, struct io_u fio_unused *io_u)
+-{
+-	return FIO_Q_COMPLETED;
+-}
+-
+-static int init(struct thread_data *td)
+-{
+-	struct fc_data *data;
+-
+-	data = calloc(1, sizeof(*data));
+-
+-	if (td_read(td))
+-		data->stat_ddir = DDIR_READ;
+-	else if (td_write(td))
+-		data->stat_ddir = DDIR_WRITE;
+-
+-	td->io_ops_data = data;
+-	return 0;
+-}
+-
+-static int delete_invalidate(struct thread_data *td, struct fio_file *f)
+-{
+-    /* do nothing because file not opened */
+-    return 0;
+-}
+-
+-static void cleanup(struct thread_data *td)
+-{
+-	struct fc_data *data = td->io_ops_data;
+-
+-	free(data);
+-}
+-
+-static struct ioengine_ops ioengine = {
+-	.name		= "filedelete",
+-	.version	= FIO_IOOPS_VERSION,
+-	.init		= init,
+-	.invalidate	= delete_invalidate,
+-	.cleanup	= cleanup,
+-	.queue		= queue_io,
+-	.get_file_size	= generic_get_file_size,
+-	.open_file	= delete_file,
+-	.flags		=  FIO_SYNCIO | FIO_FAKEIO |
+-				FIO_NOSTATS | FIO_NOFILEHASH,
+-};
+-
+-static void fio_init fio_filedelete_register(void)
+-{
+-	register_ioengine(&ioengine);
+-}
+-
+-static void fio_exit fio_filedelete_unregister(void)
+-{
+-	unregister_ioengine(&ioengine);
+-}
+diff --git a/engines/fileoperations.c b/engines/fileoperations.c
+new file mode 100644
+index 00000000..1db60da1
+--- /dev/null
++++ b/engines/fileoperations.c
+@@ -0,0 +1,318 @@
++/*
++ * fileoperations engine
++ *
++ * IO engine that doesn't do any IO, just operates files and tracks the latency
++ * of the file operation.
++ */
++#include <stdio.h>
++#include <stdlib.h>
++#include <fcntl.h>
++#include <errno.h>
++#include <sys/types.h>
++#include <sys/stat.h>
++#include <unistd.h>
++#include "../fio.h"
++#include "../optgroup.h"
++#include "../oslib/statx.h"
++
++
++struct fc_data {
++	enum fio_ddir stat_ddir;
++};
++
++struct filestat_options {
++	void *pad;
++	unsigned int stat_type;
++};
++
++enum {
++	FIO_FILESTAT_STAT	= 1,
++	FIO_FILESTAT_LSTAT	= 2,
++	FIO_FILESTAT_STATX	= 3,
++};
++
++static struct fio_option options[] = {
++	{
++		.name	= "stat_type",
++		.lname	= "stat_type",
++		.type	= FIO_OPT_STR,
++		.off1	= offsetof(struct filestat_options, stat_type),
++		.help	= "Specify stat system call type to measure lookup/getattr performance",
++		.def	= "stat",
++		.posval = {
++			  { .ival = "stat",
++			    .oval = FIO_FILESTAT_STAT,
++			    .help = "Use stat(2)",
++			  },
++			  { .ival = "lstat",
++			    .oval = FIO_FILESTAT_LSTAT,
++			    .help = "Use lstat(2)",
++			  },
++			  { .ival = "statx",
++			    .oval = FIO_FILESTAT_STATX,
++			    .help = "Use statx(2) if exists",
++			  },
++		},
++		.category = FIO_OPT_C_ENGINE,
++		.group	= FIO_OPT_G_FILESTAT,
++	},
++	{
++		.name	= NULL,
++	},
++};
++
++
++static int open_file(struct thread_data *td, struct fio_file *f)
++{
++	struct timespec start;
++	int do_lat = !td->o.disable_lat;
++
++	dprint(FD_FILE, "fd open %s\n", f->file_name);
++
++	if (f->filetype != FIO_TYPE_FILE) {
++		log_err("fio: only files are supported\n");
++		return 1;
++	}
++	if (!strcmp(f->file_name, "-")) {
++		log_err("fio: can't read/write to stdin/out\n");
++		return 1;
++	}
++
++	if (do_lat)
++		fio_gettime(&start, NULL);
++
++	f->fd = open(f->file_name, O_CREAT|O_RDWR, 0600);
++
++	if (f->fd == -1) {
++		char buf[FIO_VERROR_SIZE];
++		int e = errno;
++
++		snprintf(buf, sizeof(buf), "open(%s)", f->file_name);
++		td_verror(td, e, buf);
++		return 1;
++	}
++
++	if (do_lat) {
++		struct fc_data *data = td->io_ops_data;
++		uint64_t nsec;
++
++		nsec = ntime_since_now(&start);
++		add_clat_sample(td, data->stat_ddir, nsec, 0, 0, 0, 0);
++	}
++
++	return 0;
++}
++
++static int stat_file(struct thread_data *td, struct fio_file *f)
++{
++	struct filestat_options *o = td->eo;
++	struct timespec start;
++	int do_lat = !td->o.disable_lat;
++	struct stat statbuf;
++#ifndef WIN32
++	struct statx statxbuf;
++	char *abspath;
++#endif
++	int ret;
++
++	dprint(FD_FILE, "fd stat %s\n", f->file_name);
++
++	if (f->filetype != FIO_TYPE_FILE) {
++		log_err("fio: only files are supported\n");
++		return 1;
++	}
++	if (!strcmp(f->file_name, "-")) {
++		log_err("fio: can't read/write to stdin/out\n");
++		return 1;
++	}
++
++	if (do_lat)
++		fio_gettime(&start, NULL);
++
++	switch (o->stat_type) {
++	case FIO_FILESTAT_STAT:
++		ret = stat(f->file_name, &statbuf);
++		break;
++	case FIO_FILESTAT_LSTAT:
++		ret = lstat(f->file_name, &statbuf);
++		break;
++	case FIO_FILESTAT_STATX:
++#ifndef WIN32
++		abspath = realpath(f->file_name, NULL);
++		if (abspath) {
++			ret = statx(-1, abspath, 0, STATX_ALL, &statxbuf);
++			free(abspath);
++		} else
++			ret = -1;
++#else
++		ret = -1;
++#endif
++		break;
++	default:
++		ret = -1;
++		break;
++	}
++
++	if (ret == -1) {
++		char buf[FIO_VERROR_SIZE];
++		int e = errno;
++
++		snprintf(buf, sizeof(buf), "stat(%s) type=%u", f->file_name,
++			o->stat_type);
++		td_verror(td, e, buf);
++		return 1;
++	}
++
++	if (do_lat) {
++		struct fc_data *data = td->io_ops_data;
++		uint64_t nsec;
++
++		nsec = ntime_since_now(&start);
++		add_clat_sample(td, data->stat_ddir, nsec, 0, 0, 0, 0);
++	}
++
++	return 0;
++}
++
++
++static int delete_file(struct thread_data *td, struct fio_file *f)
++{
++	struct timespec start;
++	int do_lat = !td->o.disable_lat;
++	int ret;
++
++	dprint(FD_FILE, "fd delete %s\n", f->file_name);
++
++	if (f->filetype != FIO_TYPE_FILE) {
++		log_err("fio: only files are supported\n");
++		return 1;
++	}
++	if (!strcmp(f->file_name, "-")) {
++		log_err("fio: can't read/write to stdin/out\n");
++		return 1;
++	}
++
++	if (do_lat)
++		fio_gettime(&start, NULL);
++
++	ret = unlink(f->file_name);
++
++	if (ret == -1) {
++		char buf[FIO_VERROR_SIZE];
++		int e = errno;
++
++		snprintf(buf, sizeof(buf), "delete(%s)", f->file_name);
++		td_verror(td, e, buf);
++		return 1;
++	}
++
++	if (do_lat) {
++		struct fc_data *data = td->io_ops_data;
++		uint64_t nsec;
++
++		nsec = ntime_since_now(&start);
++		add_clat_sample(td, data->stat_ddir, nsec, 0, 0, 0, 0);
++	}
++
++	return 0;
++}
++
++static int invalidate_do_nothing(struct thread_data *td, struct fio_file *f)
++{
++	/* do nothing because file not opened */
++	return 0;
++}
++
++static enum fio_q_status queue_io(struct thread_data *td, struct io_u *io_u)
++{
++	return FIO_Q_COMPLETED;
++}
++
++/*
++ * Ensure that we at least have a block size worth of IO to do for each
++ * file. If the job file has td->o.size < nr_files * block_size, then
++ * fio won't do anything.
++ */
++static int get_file_size(struct thread_data *td, struct fio_file *f)
++{
++	f->real_file_size = td_min_bs(td);
++	return 0;
++}
++
++static int init(struct thread_data *td)
++{
++	struct fc_data *data;
++
++	data = calloc(1, sizeof(*data));
++
++	if (td_read(td))
++		data->stat_ddir = DDIR_READ;
++	else if (td_write(td))
++		data->stat_ddir = DDIR_WRITE;
++
++	td->io_ops_data = data;
++	return 0;
++}
++
++static void cleanup(struct thread_data *td)
++{
++	struct fc_data *data = td->io_ops_data;
++
++	free(data);
++}
++
++static struct ioengine_ops ioengine_filecreate = {
++	.name		= "filecreate",
++	.version	= FIO_IOOPS_VERSION,
++	.init		= init,
++	.cleanup	= cleanup,
++	.queue		= queue_io,
++	.get_file_size	= get_file_size,
++	.open_file	= open_file,
++	.close_file	= generic_close_file,
++	.flags		= FIO_DISKLESSIO | FIO_SYNCIO | FIO_FAKEIO |
++				FIO_NOSTATS | FIO_NOFILEHASH,
++};
++
++static struct ioengine_ops ioengine_filestat = {
++	.name		= "filestat",
++	.version	= FIO_IOOPS_VERSION,
++	.init		= init,
++	.cleanup	= cleanup,
++	.queue		= queue_io,
++	.invalidate	= invalidate_do_nothing,
++	.get_file_size	= generic_get_file_size,
++	.open_file	= stat_file,
++	.flags		=  FIO_SYNCIO | FIO_FAKEIO |
++				FIO_NOSTATS | FIO_NOFILEHASH,
++	.options	= options,
++	.option_struct_size = sizeof(struct filestat_options),
++};
++
++static struct ioengine_ops ioengine_filedelete = {
++	.name		= "filedelete",
++	.version	= FIO_IOOPS_VERSION,
++	.init		= init,
++	.invalidate	= invalidate_do_nothing,
++	.cleanup	= cleanup,
++	.queue		= queue_io,
++	.get_file_size	= generic_get_file_size,
++	.open_file	= delete_file,
++	.flags		=  FIO_SYNCIO | FIO_FAKEIO |
++				FIO_NOSTATS | FIO_NOFILEHASH,
++};
++
++
++static void fio_init fio_fileoperations_register(void)
++{
++	register_ioengine(&ioengine_filecreate);
++	register_ioengine(&ioengine_filestat);
++	register_ioengine(&ioengine_filedelete);
++}
++
++static void fio_exit fio_fileoperations_unregister(void)
++{
++	unregister_ioengine(&ioengine_filecreate);
++	unregister_ioengine(&ioengine_filestat);
++	unregister_ioengine(&ioengine_filedelete);
++}
+diff --git a/engines/filestat.c b/engines/filestat.c
+deleted file mode 100644
+index e587eb54..00000000
+--- a/engines/filestat.c
++++ /dev/null
+@@ -1,190 +0,0 @@
+-/*
+- * filestat engine
+- *
+- * IO engine that doesn't do any IO, just stat files and tracks the latency
+- * of the file stat.
+- */
+-#include <stdio.h>
+-#include <stdlib.h>
+-#include <fcntl.h>
+-#include <errno.h>
+-#include <sys/types.h>
+-#include <sys/stat.h>
+-#include <unistd.h>
+-#include "../fio.h"
+-#include "../optgroup.h"
+-#include "../oslib/statx.h"
+-
+-struct fc_data {
+-	enum fio_ddir stat_ddir;
+-};
+-
+-struct filestat_options {
+-	void *pad;
+-	unsigned int stat_type;
+-};
+-
+-enum {
+-	FIO_FILESTAT_STAT	= 1,
+-	FIO_FILESTAT_LSTAT	= 2,
+-	FIO_FILESTAT_STATX	= 3,
+-};
+-
+-static struct fio_option options[] = {
+-	{
+-		.name	= "stat_type",
+-		.lname	= "stat_type",
+-		.type	= FIO_OPT_STR,
+-		.off1	= offsetof(struct filestat_options, stat_type),
+-		.help	= "Specify stat system call type to measure lookup/getattr performance",
+-		.def	= "stat",
+-		.posval = {
+-			  { .ival = "stat",
+-			    .oval = FIO_FILESTAT_STAT,
+-			    .help = "Use stat(2)",
+-			  },
+-			  { .ival = "lstat",
+-			    .oval = FIO_FILESTAT_LSTAT,
+-			    .help = "Use lstat(2)",
+-			  },
+-			  { .ival = "statx",
+-			    .oval = FIO_FILESTAT_STATX,
+-			    .help = "Use statx(2) if exists",
+-			  },
+-		},
+-		.category = FIO_OPT_C_ENGINE,
+-		.group	= FIO_OPT_G_FILESTAT,
+-	},
+-	{
+-		.name	= NULL,
+-	},
+-};
+-
+-static int stat_file(struct thread_data *td, struct fio_file *f)
+-{
+-	struct filestat_options *o = td->eo;
+-	struct timespec start;
+-	int do_lat = !td->o.disable_lat;
+-	struct stat statbuf;
+-#ifndef WIN32
+-	struct statx statxbuf;
+-	char *abspath;
+-#endif
+-	int ret;
+-
+-	dprint(FD_FILE, "fd stat %s\n", f->file_name);
+-
+-	if (f->filetype != FIO_TYPE_FILE) {
+-		log_err("fio: only files are supported\n");
+-		return 1;
+-	}
+-	if (!strcmp(f->file_name, "-")) {
+-		log_err("fio: can't read/write to stdin/out\n");
+-		return 1;
+-	}
+-
+-	if (do_lat)
+-		fio_gettime(&start, NULL);
+-
+-	switch (o->stat_type){
+-	case FIO_FILESTAT_STAT:
+-		ret = stat(f->file_name, &statbuf);
+-		break;
+-	case FIO_FILESTAT_LSTAT:
+-		ret = lstat(f->file_name, &statbuf);
+-		break;
+-	case FIO_FILESTAT_STATX:
+-#ifndef WIN32
+-		abspath = realpath(f->file_name, NULL);
+-		if (abspath) {
+-			ret = statx(-1, abspath, 0, STATX_ALL, &statxbuf);
+-			free(abspath);
+-		} else
+-			ret = -1;
+-#else
+-		ret = -1;
+-#endif
+-		break;
+-	default:
+-		ret = -1;
+-		break;
+-	}
+-
+-	if (ret == -1) {
+-		char buf[FIO_VERROR_SIZE];
+-		int e = errno;
+-
+-		snprintf(buf, sizeof(buf), "stat(%s) type=%u", f->file_name,
+-			o->stat_type);
+-		td_verror(td, e, buf);
+-		return 1;
+-	}
+-
+-	if (do_lat) {
+-		struct fc_data *data = td->io_ops_data;
+-		uint64_t nsec;
+-
+-		nsec = ntime_since_now(&start);
+-		add_clat_sample(td, data->stat_ddir, nsec, 0, 0, 0, 0);
+-	}
+-
+-	return 0;
+-}
+-
+-static enum fio_q_status queue_io(struct thread_data *td, struct io_u fio_unused *io_u)
+-{
+-	return FIO_Q_COMPLETED;
+-}
+-
+-static int init(struct thread_data *td)
+-{
+-	struct fc_data *data;
+-
+-	data = calloc(1, sizeof(*data));
+-
+-	if (td_read(td))
+-		data->stat_ddir = DDIR_READ;
+-	else if (td_write(td))
+-		data->stat_ddir = DDIR_WRITE;
+-
+-	td->io_ops_data = data;
+-	return 0;
+-}
+-
+-static void cleanup(struct thread_data *td)
+-{
+-	struct fc_data *data = td->io_ops_data;
+-
+-	free(data);
+-}
+-
+-static int stat_invalidate(struct thread_data *td, struct fio_file *f)
+-{
+-	/* do nothing because file not opened */
+-	return 0;
+-}
+-
+-static struct ioengine_ops ioengine = {
+-	.name		= "filestat",
+-	.version	= FIO_IOOPS_VERSION,
+-	.init		= init,
+-	.cleanup	= cleanup,
+-	.queue		= queue_io,
+-	.invalidate	= stat_invalidate,
+-	.get_file_size	= generic_get_file_size,
+-	.open_file	= stat_file,
+-	.flags		=  FIO_SYNCIO | FIO_FAKEIO |
+-				FIO_NOSTATS | FIO_NOFILEHASH,
+-	.options	= options,
+-	.option_struct_size = sizeof(struct filestat_options),
+-};
+-
+-static void fio_init fio_filestat_register(void)
+-{
+-	register_ioengine(&ioengine);
+-}
+-
+-static void fio_exit fio_filestat_unregister(void)
+-{
+-	unregister_ioengine(&ioengine);
+-}
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0005-engines-http-Add-storage-class-option-for-s3.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0005-engines-http-Add-storage-class-option-for-s3.patch
new file mode 100644
index 0000000..587df1a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0005-engines-http-Add-storage-class-option-for-s3.patch
@@ -0,0 +1,87 @@
+From 5b0b5247f0770a89084964274bb951f5a4393299 Mon Sep 17 00:00:00 2001
+From: "Feng, Hualong" <hualong.feng@intel.com>
+Date: Wed, 20 Jul 2022 12:01:35 +0800
+Subject: [PATCH] engines/http: Add storage class option for s3
+
+Amazon S3 offers a range of storage classes that you can choose from
+based on the data access, resiliency, and cost requirements of your
+workloads. (https://aws.amazon.com/s3/storage-classes/)
+
+For example, we have **STANDARD** storage class to test normal
+workload, and have **COLD** storage class to test the workload
+with gzip compression. It is convenient to select which
+storage class to access for different kinds data.
+
+Signed-off-by: Feng, Hualong <hualong.feng@intel.com>
+---
+ engines/http.c | 25 +++++++++++++++++++------
+ 1 file changed, 19 insertions(+), 6 deletions(-)
+
+diff --git a/engines/http.c b/engines/http.c
+index 1de9e66c..dbcde287 100644
+--- a/engines/http.c
++++ b/engines/http.c
+@@ -57,6 +57,7 @@ struct http_options {
+ 	char *s3_key;
+ 	char *s3_keyid;
+ 	char *s3_region;
++	char *s3_storage_class;
+ 	char *swift_auth_token;
+ 	int verbose;
+ 	unsigned int mode;
+@@ -161,6 +162,16 @@ static struct fio_option options[] = {
+ 		.category = FIO_OPT_C_ENGINE,
+ 		.group    = FIO_OPT_G_HTTP,
+ 	},
++	{
++		.name     = "http_s3_storage_class",
++		.lname    = "S3 Storage class",
++		.type     = FIO_OPT_STR_STORE,
++		.help     = "S3 Storage Class",
++		.off1     = offsetof(struct http_options, s3_storage_class),
++		.def	  = "STANDARD",
++		.category = FIO_OPT_C_ENGINE,
++		.group    = FIO_OPT_G_HTTP,
++	},
+ 	{
+ 		.name     = "http_mode",
+ 		.lname    = "Request mode to use",
+@@ -335,8 +346,8 @@ static void _add_aws_auth_header(CURL *curl, struct curl_slist *slist, struct ht
+ 	char date_iso[32];
+ 	char method[8];
+ 	char dkey[128];
+-	char creq[512];
+-	char sts[256];
++	char creq[4096];
++	char sts[512];
+ 	char s[512];
+ 	char *uri_encoded = NULL;
+ 	char *dsha = NULL;
+@@ -373,11 +384,12 @@ static void _add_aws_auth_header(CURL *curl, struct curl_slist *slist, struct ht
+ 	"host:%s\n"
+ 	"x-amz-content-sha256:%s\n"
+ 	"x-amz-date:%s\n"
++	"x-amz-storage-class:%s\n"
+ 	"\n"
+-	"host;x-amz-content-sha256;x-amz-date\n"
++	"host;x-amz-content-sha256;x-amz-date;x-amz-storage-class\n"
+ 	"%s"
+ 	, method
+-	, uri_encoded, o->host, dsha, date_iso, dsha);
++	, uri_encoded, o->host, dsha, date_iso, o->s3_storage_class, dsha);
+ 
+ 	csha = _gen_hex_sha256(creq, strlen(creq));
+ 	snprintf(sts, sizeof(sts), "AWS4-HMAC-SHA256\n%s\n%s/%s/%s/%s\n%s",
+@@ -400,9 +412,10 @@ static void _add_aws_auth_header(CURL *curl, struct curl_slist *slist, struct ht
+ 
+ 	snprintf(s, sizeof(s), "x-amz-date: %s", date_iso);
+ 	slist = curl_slist_append(slist, s);
+-
++	snprintf(s, sizeof(s), "x-amz-storage-class: %s", o->s3_storage_class);
++	slist = curl_slist_append(slist, s);
+ 	snprintf(s, sizeof(s), "Authorization: AWS4-HMAC-SHA256 Credential=%s/%s/%s/s3/aws4_request,"
+-	"SignedHeaders=host;x-amz-content-sha256;x-amz-date,Signature=%s",
++	"SignedHeaders=host;x-amz-content-sha256;x-amz-date;x-amz-storage-class,Signature=%s",
+ 	o->s3_keyid, date_short, o->s3_region, signature);
+ 	slist = curl_slist_append(slist, s);
+ 
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0006-engines-http-Add-s3-crypto-options-for-s3.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0006-engines-http-Add-s3-crypto-options-for-s3.patch
new file mode 100644
index 0000000..d8222c4
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0006-engines-http-Add-s3-crypto-options-for-s3.patch
@@ -0,0 +1,246 @@
+From d196fda02eb73958c2acd367de650858c6203420 Mon Sep 17 00:00:00 2001
+From: "Feng, Hualong" <hualong.feng@intel.com>
+Date: Wed, 20 Jul 2022 09:41:35 +0800
+Subject: [PATCH] engines/http: Add s3 crypto options for s3
+
+Server-side encryption is about protecting data at rest.
+(https://docs.aws.amazon.com/AmazonS3/latest/userguide/ServerSideEncryptionCustomerKeys.html)
+
+When we want to test server-side encryption, we need to specify
+server-side encryption with customer-provided encryption keys (SSE-C).
+The two option **http_s3_sse_customer_key** and
+**http_s3_sse_customer_algorithm** is for server-side encryption.
+
+Signed-off-by: Feng, Hualong <hualong.feng@intel.com>
+---
+ engines/http.c | 163 +++++++++++++++++++++++++++++++++++++++++++------
+ 1 file changed, 146 insertions(+), 17 deletions(-)
+
+diff --git a/engines/http.c b/engines/http.c
+index dbcde287..56dc7d1b 100644
+--- a/engines/http.c
++++ b/engines/http.c
+@@ -57,6 +57,8 @@ struct http_options {
+ 	char *s3_key;
+ 	char *s3_keyid;
+ 	char *s3_region;
++	char *s3_sse_customer_key;
++	char *s3_sse_customer_algorithm;
+ 	char *s3_storage_class;
+ 	char *swift_auth_token;
+ 	int verbose;
+@@ -162,6 +164,26 @@ static struct fio_option options[] = {
+ 		.category = FIO_OPT_C_ENGINE,
+ 		.group    = FIO_OPT_G_HTTP,
+ 	},
++	{
++		.name     = "http_s3_sse_customer_key",
++		.lname    = "SSE Customer Key",
++		.type     = FIO_OPT_STR_STORE,
++		.help     = "S3 SSE Customer Key",
++		.off1     = offsetof(struct http_options, s3_sse_customer_key),
++		.def	  = "",
++		.category = FIO_OPT_C_ENGINE,
++		.group    = FIO_OPT_G_HTTP,
++	},
++	{
++		.name     = "http_s3_sse_customer_algorithm",
++		.lname    = "SSE Customer Algorithm",
++		.type     = FIO_OPT_STR_STORE,
++		.help     = "S3 SSE Customer Algorithm",
++		.off1     = offsetof(struct http_options, s3_sse_customer_algorithm),
++		.def	  = "AES256",
++		.category = FIO_OPT_C_ENGINE,
++		.group    = FIO_OPT_G_HTTP,
++	},
+ 	{
+ 		.name     = "http_s3_storage_class",
+ 		.lname    = "S3 Storage class",
+@@ -277,6 +299,54 @@ static char *_gen_hex_md5(const char *p, size_t len)
+ 	return _conv_hex(hash, MD5_DIGEST_LENGTH);
+ }
+ 
++static char *_conv_base64_encode(const unsigned char *p, size_t len)
++{
++	char *r, *ret;
++	int i;
++	static const char sEncodingTable[] = {
++		'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
++		'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
++		'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
++		'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
++		'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
++		'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
++		'w', 'x', 'y', 'z', '0', '1', '2', '3',
++		'4', '5', '6', '7', '8', '9', '+', '/'
++	};
++
++	size_t out_len = 4 * ((len + 2) / 3);
++	ret = r = malloc(out_len + 1);
++
++	for (i = 0; i < len - 2; i += 3) {
++		*r++ = sEncodingTable[(p[i] >> 2) & 0x3F];
++		*r++ = sEncodingTable[((p[i] & 0x3) << 4) | ((int) (p[i + 1] & 0xF0) >> 4)];
++		*r++ = sEncodingTable[((p[i + 1] & 0xF) << 2) | ((int) (p[i + 2] & 0xC0) >> 6)];
++		*r++ = sEncodingTable[p[i + 2] & 0x3F];
++	}
++
++	if (i < len) {
++		*r++ = sEncodingTable[(p[i] >> 2) & 0x3F];
++		if (i == (len - 1)) {
++			*r++ = sEncodingTable[((p[i] & 0x3) << 4)];
++			*r++ = '=';
++		} else {
++			*r++ = sEncodingTable[((p[i] & 0x3) << 4) | ((int) (p[i + 1] & 0xF0) >> 4)];
++			*r++ = sEncodingTable[((p[i + 1] & 0xF) << 2)];
++		}
++		*r++ = '=';
++	}
++
++	ret[out_len]=0;
++	return ret;
++}
++
++static char *_gen_base64_md5(const unsigned char *p, size_t len)
++{
++	unsigned char hash[MD5_DIGEST_LENGTH];
++	MD5((unsigned char*)p, len, hash);
++	return _conv_base64_encode(hash, MD5_DIGEST_LENGTH);
++}
++
+ static void _hmac(unsigned char *md, void *key, int key_len, char *data) {
+ #ifndef CONFIG_HAVE_OPAQUE_HMAC_CTX
+ 	HMAC_CTX _ctx;
+@@ -356,6 +426,9 @@ static void _add_aws_auth_header(CURL *curl, struct curl_slist *slist, struct ht
+ 	const char *service = "s3";
+ 	const char *aws = "aws4_request";
+ 	unsigned char md[SHA256_DIGEST_LENGTH];
++	unsigned char sse_key[33] = {0};
++	char *sse_key_base64 = NULL;
++	char *sse_key_md5_base64 = NULL;
+ 
+ 	time_t t = time(NULL);
+ 	struct tm *gtm = gmtime(&t);
+@@ -364,6 +437,9 @@ static void _add_aws_auth_header(CURL *curl, struct curl_slist *slist, struct ht
+ 	strftime (date_iso, sizeof(date_iso), "%Y%m%dT%H%M%SZ", gtm);
+ 	uri_encoded = _aws_uriencode(uri);
+ 
++	if (o->s3_sse_customer_key != NULL)
++		strncpy((char*)sse_key, o->s3_sse_customer_key, sizeof(sse_key) - 1);
++
+ 	if (op == DDIR_WRITE) {
+ 		dsha = _gen_hex_sha256(buf, len);
+ 		sprintf(method, "PUT");
+@@ -377,23 +453,50 @@ static void _add_aws_auth_header(CURL *curl, struct curl_slist *slist, struct ht
+ 	}
+ 
+ 	/* Create the canonical request first */
+-	snprintf(creq, sizeof(creq),
+-	"%s\n"
+-	"%s\n"
+-	"\n"
+-	"host:%s\n"
+-	"x-amz-content-sha256:%s\n"
+-	"x-amz-date:%s\n"
+-	"x-amz-storage-class:%s\n"
+-	"\n"
+-	"host;x-amz-content-sha256;x-amz-date;x-amz-storage-class\n"
+-	"%s"
+-	, method
+-	, uri_encoded, o->host, dsha, date_iso, o->s3_storage_class, dsha);
++	if (sse_key[0] != '\0') {
++		sse_key_base64 = _conv_base64_encode(sse_key, sizeof(sse_key) - 1);
++		sse_key_md5_base64 = _gen_base64_md5(sse_key, sizeof(sse_key) - 1);
++		snprintf(creq, sizeof(creq),
++			"%s\n"
++			"%s\n"
++			"\n"
++			"host:%s\n"
++			"x-amz-content-sha256:%s\n"
++			"x-amz-date:%s\n"
++			"x-amz-server-side-encryption-customer-algorithm:%s\n"
++			"x-amz-server-side-encryption-customer-key:%s\n"
++			"x-amz-server-side-encryption-customer-key-md5:%s\n"
++			"x-amz-storage-class:%s\n"
++			"\n"
++			"host;x-amz-content-sha256;x-amz-date;"
++			"x-amz-server-side-encryption-customer-algorithm;"
++			"x-amz-server-side-encryption-customer-key;"
++			"x-amz-server-side-encryption-customer-key-md5;"
++			"x-amz-storage-class\n"
++			"%s"
++			, method
++			, uri_encoded, o->host, dsha, date_iso
++			, o->s3_sse_customer_algorithm, sse_key_base64
++			, sse_key_md5_base64, o->s3_storage_class, dsha);
++	} else {
++		snprintf(creq, sizeof(creq),
++			"%s\n"
++			"%s\n"
++			"\n"
++			"host:%s\n"
++			"x-amz-content-sha256:%s\n"
++			"x-amz-date:%s\n"
++			"x-amz-storage-class:%s\n"
++			"\n"
++			"host;x-amz-content-sha256;x-amz-date;x-amz-storage-class\n"
++			"%s"
++			, method
++			, uri_encoded, o->host, dsha, date_iso, o->s3_storage_class, dsha);
++	}
+ 
+ 	csha = _gen_hex_sha256(creq, strlen(creq));
+ 	snprintf(sts, sizeof(sts), "AWS4-HMAC-SHA256\n%s\n%s/%s/%s/%s\n%s",
+-		date_iso, date_short, o->s3_region, service, aws, csha);
++			date_iso, date_short, o->s3_region, service, aws, csha);
+ 
+ 	snprintf((char *)dkey, sizeof(dkey), "AWS4%s", o->s3_key);
+ 	_hmac(md, dkey, strlen(dkey), date_short);
+@@ -412,11 +515,33 @@ static void _add_aws_auth_header(CURL *curl, struct curl_slist *slist, struct ht
+ 
+ 	snprintf(s, sizeof(s), "x-amz-date: %s", date_iso);
+ 	slist = curl_slist_append(slist, s);
++
++	if (sse_key[0] != '\0') {
++		snprintf(s, sizeof(s), "x-amz-server-side-encryption-customer-algorithm: %s", o->s3_sse_customer_algorithm);
++		slist = curl_slist_append(slist, s);
++		snprintf(s, sizeof(s), "x-amz-server-side-encryption-customer-key: %s", sse_key_base64);
++		slist = curl_slist_append(slist, s);
++		snprintf(s, sizeof(s), "x-amz-server-side-encryption-customer-key-md5: %s", sse_key_md5_base64);
++		slist = curl_slist_append(slist, s);
++	}
++
+ 	snprintf(s, sizeof(s), "x-amz-storage-class: %s", o->s3_storage_class);
+ 	slist = curl_slist_append(slist, s);
+-	snprintf(s, sizeof(s), "Authorization: AWS4-HMAC-SHA256 Credential=%s/%s/%s/s3/aws4_request,"
+-	"SignedHeaders=host;x-amz-content-sha256;x-amz-date;x-amz-storage-class,Signature=%s",
+-	o->s3_keyid, date_short, o->s3_region, signature);
++
++	if (sse_key[0] != '\0') {
++		snprintf(s, sizeof(s), "Authorization: AWS4-HMAC-SHA256 Credential=%s/%s/%s/s3/aws4_request,"
++			"SignedHeaders=host;x-amz-content-sha256;"
++			"x-amz-date;x-amz-server-side-encryption-customer-algorithm;"
++			"x-amz-server-side-encryption-customer-key;"
++			"x-amz-server-side-encryption-customer-key-md5;"
++			"x-amz-storage-class,"
++			"Signature=%s",
++		o->s3_keyid, date_short, o->s3_region, signature);
++	} else {
++		snprintf(s, sizeof(s), "Authorization: AWS4-HMAC-SHA256 Credential=%s/%s/%s/s3/aws4_request,"
++			"SignedHeaders=host;x-amz-content-sha256;x-amz-date;x-amz-storage-class,Signature=%s",
++			o->s3_keyid, date_short, o->s3_region, signature);
++	}
+ 	slist = curl_slist_append(slist, s);
+ 
+ 	curl_easy_setopt(curl, CURLOPT_HTTPHEADER, slist);
+@@ -425,6 +550,10 @@ static void _add_aws_auth_header(CURL *curl, struct curl_slist *slist, struct ht
+ 	free(csha);
+ 	free(dsha);
+ 	free(signature);
++	if (sse_key_base64 != NULL) {
++		free(sse_key_base64);
++		free(sse_key_md5_base64);
++	}
+ }
+ 
+ static void _add_swift_header(CURL *curl, struct curl_slist *slist, struct http_options *o,
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0007-doc-Add-usage-and-example-about-s3-storage-class-and.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0007-doc-Add-usage-and-example-about-s3-storage-class-and.patch
new file mode 100644
index 0000000..d581593
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0007-doc-Add-usage-and-example-about-s3-storage-class-and.patch
@@ -0,0 +1,155 @@
+From 0cad4b6957818937519604b466a2da5b0c395cfe Mon Sep 17 00:00:00 2001
+From: "Feng, Hualong" <hualong.feng@intel.com>
+Date: Thu, 28 Jul 2022 01:47:48 +0000
+Subject: [PATCH] doc: Add usage and example about s3 storage class and crypto
+
+There add option usage about s3 storage class
+`http_s3_storage_class` and
+s3 SSE server side encryption
+`http_s3_sse_customer_key` and
+`http_s3_sse_customer_algorithm`
+
+And add example file in example folder.
+
+Signed-off-by: Feng, Hualong <hualong.feng@intel.com>
+---
+ HOWTO.rst                          | 14 +++++++++++
+ examples/http-s3-crypto.fio        | 38 ++++++++++++++++++++++++++++++
+ examples/http-s3-storage-class.fio | 37 +++++++++++++++++++++++++++++
+ fio.1                              |  9 +++++++
+ 4 files changed, 98 insertions(+)
+ create mode 100644 examples/http-s3-crypto.fio
+ create mode 100644 examples/http-s3-storage-class.fio
+
+diff --git a/HOWTO.rst b/HOWTO.rst
+index 104cce2d..05fc117f 100644
+--- a/HOWTO.rst
++++ b/HOWTO.rst
+@@ -2692,6 +2692,20 @@ with the caveat that when used on the command line, they must come after the
+ 
+ 	The S3 key/access id.
+ 
++.. option:: http_s3_sse_customer_key=str : [http]
++
++        The encryption customer key in SSE server side.
++
++.. option:: http_s3_sse_customer_algorithm=str : [http]
++
++        The encryption customer algorithm in SSE server side.
++        Default is **AES256**
++
++.. option:: http_s3_storage_class=str : [http]
++
++        Which storage class to access. User-customizable settings.
++        Default is **STANDARD**
++
+ .. option:: http_swift_auth_token=str : [http]
+ 
+ 	The Swift auth token. See the example configuration file on how
+diff --git a/examples/http-s3-crypto.fio b/examples/http-s3-crypto.fio
+new file mode 100644
+index 00000000..2403746e
+--- /dev/null
++++ b/examples/http-s3-crypto.fio
+@@ -0,0 +1,38 @@
++# Example test for the HTTP engine's S3 support against Amazon AWS.
++# Obviously, you have to adjust the S3 credentials; for this example,
++# they're passed in via the environment.
++# And you can set the SSE Customer Key and Algorithm to test Server
++# Side Encryption.
++#
++
++[global]
++ioengine=http
++name=test
++direct=1
++filename=/larsmb-fio-test/object
++http_verbose=0
++https=on
++http_mode=s3
++http_s3_key=${S3_KEY}
++http_s3_keyid=${S3_ID}
++http_host=s3.eu-central-1.amazonaws.com
++http_s3_region=eu-central-1
++http_s3_sse_customer_key=${SSE_KEY}
++http_s3_sse_customer_algorithm=AES256
++group_reporting
++
++# With verify, this both writes and reads the object
++[create]
++rw=write
++bs=4k
++size=64k
++io_size=4k
++verify=sha256
++
++[trim]
++stonewall
++rw=trim
++bs=4k
++size=64k
++io_size=4k
++
+diff --git a/examples/http-s3-storage-class.fio b/examples/http-s3-storage-class.fio
+new file mode 100644
+index 00000000..9ee23837
+--- /dev/null
++++ b/examples/http-s3-storage-class.fio
+@@ -0,0 +1,37 @@
++# Example test for the HTTP engine's S3 support against Amazon AWS.
++# Obviously, you have to adjust the S3 credentials; for this example,
++# they're passed in via the environment.
++# And here add storage class parameter, you can set normal test for
++# STANDARD and compression test for another storage class.
++#
++
++[global]
++ioengine=http
++name=test
++direct=1
++filename=/larsmb-fio-test/object
++http_verbose=0
++https=on
++http_mode=s3
++http_s3_key=${S3_KEY}
++http_s3_keyid=${S3_ID}
++http_host=s3.eu-central-1.amazonaws.com
++http_s3_region=eu-central-1
++http_s3_storage_class=${STORAGE_CLASS}
++group_reporting
++
++# With verify, this both writes and reads the object
++[create]
++rw=write
++bs=4k
++size=64k
++io_size=4k
++verify=sha256
++
++[trim]
++stonewall
++rw=trim
++bs=4k
++size=64k
++io_size=4k
++
+diff --git a/fio.1 b/fio.1
+index ce9bf3ef..6630525f 100644
+--- a/fio.1
++++ b/fio.1
+@@ -2308,6 +2308,15 @@ The S3 secret key.
+ .BI (http)http_s3_keyid \fR=\fPstr
+ The S3 key/access id.
+ .TP
++.BI (http)http_s3_sse_customer_key \fR=\fPstr
++The encryption customer key in SSE server side.
++.TP
++.BI (http)http_s3_sse_customer_algorithm \fR=\fPstr
++The encryption customer algorithm in SSE server side. Default is \fBAES256\fR
++.TP
++.BI (http)http_s3_storage_class \fR=\fPstr
++Which storage class to access. User-customizable settings. Default is \fBSTANDARD\fR
++.TP
+ .BI (http)http_swift_auth_token \fR=\fPstr
+ The Swift auth token. See the example configuration file on how to
+ retrieve this.
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0008-README-link-to-GitHub-releases-for-Windows.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0008-README-link-to-GitHub-releases-for-Windows.patch
new file mode 100644
index 0000000..3f7ba4c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0008-README-link-to-GitHub-releases-for-Windows.patch
@@ -0,0 +1,33 @@
+From 6809d81b2a9b854697c65e0d69455a39d4497a6b Mon Sep 17 00:00:00 2001
+From: Vincent Fu <vincent.fu@samsung.com>
+Date: Mon, 15 Aug 2022 10:37:57 -0400
+Subject: [PATCH] README: link to GitHub releases for Windows
+
+Note that Windows installers are now available as releases on GitHub.
+
+Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
+---
+ README.rst | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
+
+diff --git a/README.rst b/README.rst
+index 67420903..79582dea 100644
+--- a/README.rst
++++ b/README.rst
+@@ -123,10 +123,12 @@ Solaris:
+ 	``pkgutil -i fio``.
+ 
+ Windows:
+-	Rebecca Cran <rebecca@bsdio.com> has fio packages for Windows at
+-	https://bsdio.com/fio/ . The latest builds for Windows can also
+-	be grabbed from https://ci.appveyor.com/project/axboe/fio by clicking
+-	the latest x86 or x64 build, then selecting the ARTIFACTS tab.
++        Beginning with fio 3.31 Windows installers are available on GitHub at
++        https://github.com/axboe/fio/releases.  Rebecca Cran
++        <rebecca@bsdio.com> has fio packages for Windows at
++        https://bsdio.com/fio/ . The latest builds for Windows can also be
++        grabbed from https://ci.appveyor.com/project/axboe/fio by clicking the
++        latest x86 or x64 build and then selecting the Artifacts tab.
+ 
+ BSDs:
+ 	Packages for BSDs may be available from their binary package repositories.
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0009-engines-xnvme-fix-segfault-issue-with-xnvme-ioengine.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0009-engines-xnvme-fix-segfault-issue-with-xnvme-ioengine.patch
new file mode 100644
index 0000000..6e322b8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0009-engines-xnvme-fix-segfault-issue-with-xnvme-ioengine.patch
@@ -0,0 +1,54 @@
+From d5aac3401e180f3d4ff3db04ebb4e3165b975987 Mon Sep 17 00:00:00 2001
+From: Ankit Kumar <ankit.kumar@samsung.com>
+Date: Tue, 16 Aug 2022 11:08:20 +0530
+Subject: [PATCH] engines/xnvme: fix segfault issue with xnvme ioengine
+
+fix segfault when xnvme ioengine is called without thread=1.
+The segfault happens because td->io_ops_data is accessed at
+two locations xnvme_fioe_cleanup and xnvme_fioe_iomem_free,
+during the error handling call.
+
+Signed-off-by: Ankit Kumar <ankit.kumar@samsung.com>
+Link: https://lore.kernel.org/r/20220816053821.440-2-ankit.kumar@samsung.com
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+---
+ engines/xnvme.c | 17 ++++++++++++++---
+ 1 file changed, 14 insertions(+), 3 deletions(-)
+
+diff --git a/engines/xnvme.c b/engines/xnvme.c
+index c11b33a8..d8647481 100644
+--- a/engines/xnvme.c
++++ b/engines/xnvme.c
+@@ -205,9 +205,14 @@ static void _dev_close(struct thread_data *td, struct xnvme_fioe_fwrap *fwrap)
+ 
+ static void xnvme_fioe_cleanup(struct thread_data *td)
+ {
+-	struct xnvme_fioe_data *xd = td->io_ops_data;
++	struct xnvme_fioe_data *xd = NULL;
+ 	int err;
+ 
++	if (!td->io_ops_data)
++		return;
++
++	xd = td->io_ops_data;
++
+ 	err = pthread_mutex_lock(&g_serialize);
+ 	if (err)
+ 		log_err("ioeng->cleanup(): pthread_mutex_lock(), err(%d)\n", err);
+@@ -367,8 +372,14 @@ static int xnvme_fioe_iomem_alloc(struct thread_data *td, size_t total_mem)
+ /* NOTE: using the first device for buffer-allocators) */
+ static void xnvme_fioe_iomem_free(struct thread_data *td)
+ {
+-	struct xnvme_fioe_data *xd = td->io_ops_data;
+-	struct xnvme_fioe_fwrap *fwrap = &xd->files[0];
++	struct xnvme_fioe_data *xd = NULL;
++	struct xnvme_fioe_fwrap *fwrap = NULL;
++
++	if (!td->io_ops_data)
++		return;
++
++	xd = td->io_ops_data;
++	fwrap = &xd->files[0];
+ 
+ 	if (!fwrap->dev) {
+ 		log_err("ioeng->iomem_free(): failed no dev-handle\n");
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0010-doc-update-fio-doc-for-xnvme-engine.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0010-doc-update-fio-doc-for-xnvme-engine.patch
new file mode 100644
index 0000000..6c85cfc
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0010-doc-update-fio-doc-for-xnvme-engine.patch
@@ -0,0 +1,168 @@
+From 8e318fd65ba5c0f6ce82860984bc8d69a7843f97 Mon Sep 17 00:00:00 2001
+From: Ankit Kumar <ankit.kumar@samsung.com>
+Date: Tue, 16 Aug 2022 11:08:21 +0530
+Subject: [PATCH] doc: update fio doc for xnvme engine
+
+- Elaborate about the various sync, async and admin
+  interfaces.
+- add missing io_uring_cmd async backend entry.
+- xnvme ioengine doesn't support file stat.
+
+Signed-off-by: Ankit Kumar <ankit.kumar@samsung.com>
+Link: https://lore.kernel.org/r/20220816053821.440-3-ankit.kumar@samsung.com
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+---
+ HOWTO.rst | 37 ++++++++++++++++++++++++++-----------
+ fio.1     | 34 +++++++++++++++++++++-------------
+ 2 files changed, 47 insertions(+), 24 deletions(-)
+
+diff --git a/HOWTO.rst b/HOWTO.rst
+index 05fc117f..b2750b56 100644
+--- a/HOWTO.rst
++++ b/HOWTO.rst
+@@ -2780,41 +2780,56 @@ with the caveat that when used on the command line, they must come after the
+ 	Select the xnvme async command interface. This can take these values.
+ 
+ 	**emu**
+-		This is default and used to emulate asynchronous I/O.
++		This is default and use to emulate asynchronous I/O by using a
++		single thread to create a queue pair on top of a synchronous
++		I/O interface using the NVMe driver IOCTL.
+ 	**thrpool**
+-		Use thread pool for Asynchronous I/O.
++		Emulate an asynchronous I/O interface with a pool of userspace
++		threads on top of a synchronous I/O interface using the NVMe
++		driver IOCTL. By default four threads are used.
+ 	**io_uring**
+-		Use Linux io_uring/liburing for Asynchronous I/O.
++		Linux native asynchronous I/O interface which supports both
++		direct and buffered I/O.
++	**io_uring_cmd**
++		Fast Linux native asynchronous I/O interface for NVMe pass
++		through commands. This only works with NVMe character device
++		(/dev/ngXnY).
+ 	**libaio**
+ 		Use Linux aio for Asynchronous I/O.
+ 	**posix**
+-		Use POSIX aio for Asynchronous I/O.
++		Use the posix asynchronous I/O interface to perform one or
++		more I/O operations asynchronously.
+ 	**nil**
+-		Use nil-io; For introspective perf. evaluation
++		Do not transfer any data; just pretend to. This is mainly used
++		for introspective performance evaluation.
+ 
+ .. option:: xnvme_sync=str : [xnvme]
+ 
+ 	Select the xnvme synchronous command interface. This can take these values.
+ 
+ 	**nvme**
+-		This is default and uses Linux NVMe Driver ioctl() for synchronous I/O.
++		This is default and uses Linux NVMe Driver ioctl() for
++		synchronous I/O.
+ 	**psync**
+-		Use pread()/write() for synchronous I/O.
++		This supports regular as well as vectored pread() and pwrite()
++		commands.
++	**block**
++		This is the same as psync except that it also supports zone
++		management commands using Linux block layer IOCTLs.
+ 
+ .. option:: xnvme_admin=str : [xnvme]
+ 
+ 	Select the xnvme admin command interface. This can take these values.
+ 
+ 	**nvme**
+-		This is default and uses linux NVMe Driver ioctl() for admin commands.
++		This is default and uses linux NVMe Driver ioctl() for admin
++		commands.
+ 	**block**
+ 		Use Linux Block Layer ioctl() and sysfs for admin commands.
+-	**file_as_ns**
+-		Use file-stat to construct NVMe idfy responses.
+ 
+ .. option:: xnvme_dev_nsid=int : [xnvme]
+ 
+-	xnvme namespace identifier, for userspace NVMe driver.
++	xnvme namespace identifier for userspace NVMe driver, such as SPDK.
+ 
+ .. option:: xnvme_iovec=int : [xnvme]
+ 
+diff --git a/fio.1 b/fio.1
+index 6630525f..f3f3dc5d 100644
+--- a/fio.1
++++ b/fio.1
+@@ -2530,22 +2530,29 @@ Select the xnvme async command interface. This can take these values.
+ .RS
+ .TP
+ .B emu
+-This is default and used to emulate asynchronous I/O
++This is default and use to emulate asynchronous I/O by using a single thread to
++create a queue pair on top of a synchronous I/O interface using the NVMe driver
++IOCTL.
+ .TP
+ .BI thrpool
+-Use thread pool for Asynchronous I/O
++Emulate an asynchronous I/O interface with a pool of userspace threads on top
++of a synchronous I/O interface using the NVMe driver IOCTL. By default four
++threads are used.
+ .TP
+ .BI io_uring
+-Use Linux io_uring/liburing for Asynchronous I/O
++Linux native asynchronous I/O interface which supports both direct and buffered
++I/O.
+ .TP
+ .BI libaio
+ Use Linux aio for Asynchronous I/O
+ .TP
+ .BI posix
+-Use POSIX aio for Asynchronous I/O
++Use the posix asynchronous I/O interface to perform one or more I/O operations
++asynchronously.
+ .TP
+ .BI nil
+-Use nil-io; For introspective perf. evaluation
++Do not transfer any data; just pretend to. This is mainly used for
++introspective performance evaluation.
+ .RE
+ .RE
+ .TP
+@@ -2555,10 +2562,14 @@ Select the xnvme synchronous command interface. This can take these values.
+ .RS
+ .TP
+ .B nvme
+-This is default and uses Linux NVMe Driver ioctl() for synchronous I/O
++This is default and uses Linux NVMe Driver ioctl() for synchronous I/O.
+ .TP
+ .BI psync
+-Use pread()/write() for synchronous I/O
++This supports regular as well as vectored pread() and pwrite() commands.
++.TP
++.BI block
++This is the same as psync except that it also supports zone management
++commands using Linux block layer IOCTLs.
+ .RE
+ .RE
+ .TP
+@@ -2568,18 +2579,15 @@ Select the xnvme admin command interface. This can take these values.
+ .RS
+ .TP
+ .B nvme
+-This is default and uses Linux NVMe Driver ioctl() for admin commands
++This is default and uses Linux NVMe Driver ioctl() for admin commands.
+ .TP
+ .BI block
+-Use Linux Block Layer ioctl() and sysfs for admin commands
+-.TP
+-.BI file_as_ns
+-Use file-stat as to construct NVMe idfy responses
++Use Linux Block Layer ioctl() and sysfs for admin commands.
+ .RE
+ .RE
+ .TP
+ .BI (xnvme)xnvme_dev_nsid\fR=\fPint
+-xnvme namespace identifier, for userspace NVMe driver.
++xnvme namespace identifier for userspace NVMe driver such as SPDK.
+ .TP
+ .BI (xnvme)xnvme_iovec
+ If this option is set, xnvme will use vectored read/write commands.
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0011-test-add-latency-test-using-posixaio-ioengine.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0011-test-add-latency-test-using-posixaio-ioengine.patch
new file mode 100644
index 0000000..d86ac11
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0011-test-add-latency-test-using-posixaio-ioengine.patch
@@ -0,0 +1,55 @@
+From fa64b199318318af7fe598a5b9ec62b981a55e2d Mon Sep 17 00:00:00 2001
+From: Vincent Fu <vincent.fu@samsung.com>
+Date: Mon, 15 Aug 2022 11:34:43 -0400
+Subject: [PATCH] test: add latency test using posixaio ioengine
+
+Make sure that mean(slat) + mean(clat) = mean(total lat).
+
+Tests 15 and 16 use the libaio and null ioengines, respectively. Both of
+those ioengines have commit hooks. Add this new test using the posixaio
+ioengine which does not have a commit hook so that we can better cover
+the possible ways that latency is calcualted.
+
+Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
+---
+ t/jobs/t0017.fio   |  9 +++++++++
+ t/run-fio-tests.py | 10 ++++++++++
+ 2 files changed, 19 insertions(+)
+ create mode 100644 t/jobs/t0017.fio
+
+diff --git a/t/jobs/t0017.fio b/t/jobs/t0017.fio
+new file mode 100644
+index 00000000..14486d98
+--- /dev/null
++++ b/t/jobs/t0017.fio
+@@ -0,0 +1,9 @@
++# Expected result: mean(slat) + mean(clat) = mean(lat)
++# Buggy result: equality does not hold
++# This is similar to t0015 and t0016 except that is uses posixaio which is
++# available on more platforms and does not have a commit hook
++
++[test]
++ioengine=posixaio
++size=1M
++iodepth=16
+diff --git a/t/run-fio-tests.py b/t/run-fio-tests.py
+index d77f20e0..2bd02a2a 100755
+--- a/t/run-fio-tests.py
++++ b/t/run-fio-tests.py
+@@ -857,6 +857,16 @@ TEST_LIST = [
+         'output_format':    'json',
+         'requirements':     [],
+     },
++    {
++        'test_id':          17,
++        'test_class':       FioJobTest_t0015,
++        'job':              't0017.fio',
++        'success':          SUCCESS_DEFAULT,
++        'pre_job':          None,
++        'pre_success':      None,
++        'output_format':    'json',
++        'requirements':     [Requirements.not_windows],
++    },
+     {
+         'test_id':          1000,
+         'test_class':       FioExeTest,
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0012-test-fix-hash-for-t0016.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0012-test-fix-hash-for-t0016.patch
new file mode 100644
index 0000000..8f10f41
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0012-test-fix-hash-for-t0016.patch
@@ -0,0 +1,33 @@
+From 1e68459d85f56f805c70236ad47a65a65f426867 Mon Sep 17 00:00:00 2001
+From: Vincent Fu <vincent.fu@samsung.com>
+Date: Mon, 15 Aug 2022 11:40:58 -0400
+Subject: [PATCH] test: fix hash for t0016
+
+I used the wrong hash for t0016 in the original commit. Fix it to refer
+to the hash that fixed the issue in this tree.
+
+Fixes: de31fe9a ("testing: add test for slat + clat = tlat")
+Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
+---
+ t/jobs/{t0016-259ebc00.fio => t0016-d54ae22.fio} | 0
+ t/run-fio-tests.py                               | 2 +-
+ 2 files changed, 1 insertion(+), 1 deletion(-)
+ rename t/jobs/{t0016-259ebc00.fio => t0016-d54ae22.fio} (100%)
+
+diff --git a/t/jobs/t0016-259ebc00.fio b/t/jobs/t0016-d54ae22.fio
+similarity index 100%
+rename from t/jobs/t0016-259ebc00.fio
+rename to t/jobs/t0016-d54ae22.fio
+diff --git a/t/run-fio-tests.py b/t/run-fio-tests.py
+index 2bd02a2a..504b7cdb 100755
+--- a/t/run-fio-tests.py
++++ b/t/run-fio-tests.py
+@@ -850,7 +850,7 @@ TEST_LIST = [
+     {
+         'test_id':          16,
+         'test_class':       FioJobTest_t0015,
+-        'job':              't0016-259ebc00.fio',
++        'job':              't0016-d54ae22.fio',
+         'success':          SUCCESS_DEFAULT,
+         'pre_job':          None,
+         'pre_success':      None,
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0013-doc-get-rid-of-trailing-whitespace.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0013-doc-get-rid-of-trailing-whitespace.patch
new file mode 100644
index 0000000..5f72f47
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0013-doc-get-rid-of-trailing-whitespace.patch
@@ -0,0 +1,82 @@
+From ff16b7c0c855d5242d92d7f902247525ff1f889a Mon Sep 17 00:00:00 2001
+From: Konstantin Kharlamov <Hi-Angel@yandex.ru>
+Date: Tue, 16 Aug 2022 19:14:13 +0300
+Subject: [PATCH] doc: get rid of trailing whitespace
+
+Signed-off-by: Konstantin Kharlamov <Hi-Angel@yandex.ru>
+---
+ HOWTO.rst |  4 ++--
+ fio.1     | 10 +++++-----
+ 2 files changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/HOWTO.rst b/HOWTO.rst
+index b2750b56..c94238ed 100644
+--- a/HOWTO.rst
++++ b/HOWTO.rst
+@@ -1301,7 +1301,7 @@ I/O type
+ 	effectively caps the file size at `real_size - offset`. Can be combined with
+ 	:option:`size` to constrain the start and end range of the I/O workload.
+ 	A percentage can be specified by a number between 1 and 100 followed by '%',
+-	for example, ``offset=20%`` to specify 20%. In ZBD mode, value can be set as 
++	for example, ``offset=20%`` to specify 20%. In ZBD mode, value can be set as
+         number of zones using 'z'.
+ 
+ .. option:: offset_align=int
+@@ -1877,7 +1877,7 @@ I/O size
+ 	If this option is not specified, fio will use the full size of the given
+ 	files or devices.  If the files do not exist, size must be given. It is also
+ 	possible to give size as a percentage between 1 and 100. If ``size=20%`` is
+-	given, fio will use 20% of the full size of the given files or devices. 
++	given, fio will use 20% of the full size of the given files or devices.
+ 	In ZBD mode, value can also be set as number of zones using 'z'.
+ 	Can be combined with :option:`offset` to constrain the start and end range
+ 	that I/O will be done within.
+diff --git a/fio.1 b/fio.1
+index f3f3dc5d..d40b4247 100644
+--- a/fio.1
++++ b/fio.1
+@@ -292,7 +292,7 @@ For Zone Block Device Mode:
+ .RS
+ .P
+ .PD 0
+-z means Zone 
++z means Zone
+ .P
+ .PD
+ .RE
+@@ -1083,7 +1083,7 @@ provided. Data before the given offset will not be touched. This
+ effectively caps the file size at `real_size \- offset'. Can be combined with
+ \fBsize\fR to constrain the start and end range of the I/O workload.
+ A percentage can be specified by a number between 1 and 100 followed by '%',
+-for example, `offset=20%' to specify 20%. In ZBD mode, value can be set as 
++for example, `offset=20%' to specify 20%. In ZBD mode, value can be set as
+ number of zones using 'z'.
+ .TP
+ .BI offset_align \fR=\fPint
+@@ -1099,7 +1099,7 @@ specified). This option is useful if there are several jobs which are
+ intended to operate on a file in parallel disjoint segments, with even
+ spacing between the starting points. Percentages can be used for this option.
+ If a percentage is given, the generated offset will be aligned to the minimum
+-\fBblocksize\fR or to the value of \fBoffset_align\fR if provided.In ZBD mode, value 
++\fBblocksize\fR or to the value of \fBoffset_align\fR if provided.In ZBD mode, value
+ can be set as number of zones using 'z'.
+ .TP
+ .BI number_ios \fR=\fPint
+@@ -1678,7 +1678,7 @@ If this option is not specified, fio will use the full size of the given
+ files or devices. If the files do not exist, size must be given. It is also
+ possible to give size as a percentage between 1 and 100. If `size=20%' is
+ given, fio will use 20% of the full size of the given files or devices. In ZBD mode,
+-size can be given in units of number of zones using 'z'. Can be combined with \fBoffset\fR to 
++size can be given in units of number of zones using 'z'. Can be combined with \fBoffset\fR to
+ constrain the start and end range that I/O will be done within.
+ .TP
+ .BI io_size \fR=\fPint[%|z] "\fR,\fB io_limit" \fR=\fPint[%|z]
+@@ -1697,7 +1697,7 @@ also be set as number of zones using 'z'.
+ .BI filesize \fR=\fPirange(int)
+ Individual file sizes. May be a range, in which case fio will select sizes
+ for files at random within the given range. If not given, each created file
+-is the same size. This option overrides \fBsize\fR in terms of file size, 
++is the same size. This option overrides \fBsize\fR in terms of file size,
+ i.e. \fBsize\fR becomes merely the default for \fBio_size\fR (and
+ has no effect it all if \fBio_size\fR is set explicitly).
+ .TP
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0014-doc-clarify-that-I-O-errors-may-go-unnoticed-without.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0014-doc-clarify-that-I-O-errors-may-go-unnoticed-without.patch
new file mode 100644
index 0000000..3196afa
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0014-doc-clarify-that-I-O-errors-may-go-unnoticed-without.patch
@@ -0,0 +1,54 @@
+From 331023be2b20d177d533e5fa18f5d8834570613f Mon Sep 17 00:00:00 2001
+From: Konstantin Kharlamov <Hi-Angel@yandex.ru>
+Date: Tue, 16 Aug 2022 19:10:38 +0300
+Subject: [PATCH] doc: clarify that I/O errors may go unnoticed without
+ direct=1
+
+Fixes: https://github.com/axboe/fio/issues/1443
+
+Reported-by: Konstantin Kharlamov <Hi-Angel@yandex.ru>
+Signed-off-by: Konstantin Kharlamov <Hi-Angel@yandex.ru>
+---
+ HOWTO.rst |  7 +++++++
+ fio.1     | 10 ++++++++++
+ 2 files changed, 17 insertions(+)
+
+diff --git a/HOWTO.rst b/HOWTO.rst
+index c94238ed..08be687c 100644
+--- a/HOWTO.rst
++++ b/HOWTO.rst
+@@ -3927,6 +3927,13 @@ Error handling
+ 	appended, the total error count and the first error. The error field given
+ 	in the stats is the first error that was hit during the run.
+ 
++	Note: a write error from the device may go unnoticed by fio when using
++	buffered IO, as the write() (or similar) system call merely dirties the
++	kernel pages, unless :option:`sync` or :option:`direct` is used. Device IO
++	errors occur when the dirty data is actually written out to disk. If fully
++	sync writes aren't desirable, :option:`fsync` or :option:`fdatasync` can be
++	used as well. This is specific to writes, as reads are always synchronous.
++
+ 	The allowed values are:
+ 
+ 		**none**
+diff --git a/fio.1 b/fio.1
+index d40b4247..27454b0b 100644
+--- a/fio.1
++++ b/fio.1
+@@ -3606,6 +3606,16 @@ EILSEQ) until the runtime is exceeded or the I/O size specified is
+ completed. If this option is used, there are two more stats that are
+ appended, the total error count and the first error. The error field given
+ in the stats is the first error that was hit during the run.
++.RS
++.P
++Note: a write error from the device may go unnoticed by fio when using buffered
++IO, as the write() (or similar) system call merely dirties the kernel pages,
++unless `sync' or `direct' is used. Device IO errors occur when the dirty data is
++actually written out to disk. If fully sync writes aren't desirable, `fsync' or
++`fdatasync' can be used as well. This is specific to writes, as reads are always
++synchronous.
++.RS
++.P
+ The allowed values are:
+ .RS
+ .RS
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0015-Revert-Minor-style-fixups.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0015-Revert-Minor-style-fixups.patch
new file mode 100644
index 0000000..fd962ea
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0015-Revert-Minor-style-fixups.patch
@@ -0,0 +1,41 @@
+From 48ceba9c1870c9312d7214503371e0b781abba27 Mon Sep 17 00:00:00 2001
+From: Vincent Fu <vincent.fu@samsung.com>
+Date: Tue, 23 Aug 2022 12:38:20 -0400
+Subject: [PATCH] Revert "Minor style fixups"
+
+This reverts commit 48f8268e88629d408ffd09b1601ad13366bd4ce1.
+
+Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
+---
+ backend.c   | 2 +-
+ filesetup.c | 3 ++-
+ 2 files changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/backend.c b/backend.c
+index 5159b60d..3a99850d 100644
+--- a/backend.c
++++ b/backend.c
+@@ -2321,7 +2321,7 @@ static void run_threads(struct sk_out *sk_out)
+ 			 *  when setup_files() does not run into issues
+ 			 *  later.
+ 			*/
+-			if (!i && td->o.nr_files == 1) {
++			if (!i && td->o.nr_files==1) {
+ 				if (setup_shared_file(td)) {
+ 					exit_value++;
+ 					if (td->error)
+diff --git a/filesetup.c b/filesetup.c
+index 3e2ccf9b..144a0572 100644
+--- a/filesetup.c
++++ b/filesetup.c
+@@ -1109,8 +1109,9 @@ int setup_shared_file(struct thread_data *td)
+ 		dprint(FD_FILE, "fio: extending shared file\n");
+ 		f->real_file_size = file_size;
+ 		err = extend_file(td, f);
+-		if (!err)
++		if (!err) {
+ 			err = __file_invalidate_cache(td, f, 0, f->real_file_size);
++		}
+ 		get_file_sizes(td);
+ 		dprint(FD_FILE, "shared setup new real_file_size=%llu\n", 
+ 				(unsigned long long)f->real_file_size);
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0016-Revert-Fix-multithread-issues-when-operating-on-a-si.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0016-Revert-Fix-multithread-issues-when-operating-on-a-si.patch
new file mode 100644
index 0000000..31d8345
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0016-Revert-Fix-multithread-issues-when-operating-on-a-si.patch
@@ -0,0 +1,141 @@
+From 1bc0dec3f54e67fa4767d0096ab377e900d5146f Mon Sep 17 00:00:00 2001
+From: Vincent Fu <vincent.fu@samsung.com>
+Date: Tue, 23 Aug 2022 12:38:51 -0400
+Subject: [PATCH] Revert "Fix multithread issues when operating on a single
+ shared file"
+
+This reverts commit acbda87c34c743ff2d9e125d9539bcfbbf49eb75.
+
+This commit introduced a lot of unintended consequences for
+create_serialize=0. The aim of the commit can be accomplished with a
+combination of filesize and io_size.
+
+Fixes: https://github.com/axboe/fio/issues/1442
+Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
+---
+ backend.c   | 19 +------------------
+ file.h      |  1 -
+ filesetup.c | 46 ++--------------------------------------------
+ 3 files changed, 3 insertions(+), 63 deletions(-)
+
+diff --git a/backend.c b/backend.c
+index 3a99850d..e5bb4e25 100644
+--- a/backend.c
++++ b/backend.c
+@@ -2314,25 +2314,8 @@ static void run_threads(struct sk_out *sk_out)
+ 	for_each_td(td, i) {
+ 		print_status_init(td->thread_number - 1);
+ 
+-		if (!td->o.create_serialize) {
+-			/*
+-			 *  When operating on a single rile in parallel,
+-			 *  perform single-threaded early setup so that
+-			 *  when setup_files() does not run into issues
+-			 *  later.
+-			*/
+-			if (!i && td->o.nr_files==1) {
+-				if (setup_shared_file(td)) {
+-					exit_value++;
+-					if (td->error)
+-						log_err("fio: pid=%d, err=%d/%s\n",
+-							(int) td->pid, td->error, td->verror);
+-					td_set_runstate(td, TD_REAPED);
+-					todo--;
+-				}
+-			}
++		if (!td->o.create_serialize)
+ 			continue;
+-		}
+ 
+ 		if (fio_verify_load_state(td))
+ 			goto reap;
+diff --git a/file.h b/file.h
+index e646cf22..da1b8947 100644
+--- a/file.h
++++ b/file.h
+@@ -201,7 +201,6 @@ struct thread_data;
+ extern void close_files(struct thread_data *);
+ extern void close_and_free_files(struct thread_data *);
+ extern uint64_t get_start_offset(struct thread_data *, struct fio_file *);
+-extern int __must_check setup_shared_file(struct thread_data *);
+ extern int __must_check setup_files(struct thread_data *);
+ extern int __must_check file_invalidate_cache(struct thread_data *, struct fio_file *);
+ #ifdef __cplusplus
+diff --git a/filesetup.c b/filesetup.c
+index 144a0572..1d3cc5ad 100644
+--- a/filesetup.c
++++ b/filesetup.c
+@@ -143,7 +143,7 @@ static int extend_file(struct thread_data *td, struct fio_file *f)
+ 	if (unlink_file || new_layout) {
+ 		int ret;
+ 
+-		dprint(FD_FILE, "layout %d unlink %d %s\n", new_layout, unlink_file, f->file_name);
++		dprint(FD_FILE, "layout unlink %s\n", f->file_name);
+ 
+ 		ret = td_io_unlink_file(td, f);
+ 		if (ret != 0 && ret != ENOENT) {
+@@ -198,9 +198,6 @@ static int extend_file(struct thread_data *td, struct fio_file *f)
+ 		}
+ 	}
+ 
+-
+-	dprint(FD_FILE, "fill file %s, size %llu\n", f->file_name, (unsigned long long) f->real_file_size);
+-
+ 	left = f->real_file_size;
+ 	bs = td->o.max_bs[DDIR_WRITE];
+ 	if (bs > left)
+@@ -1081,45 +1078,6 @@ static bool create_work_dirs(struct thread_data *td, const char *fname)
+ 	return true;
+ }
+ 
+-int setup_shared_file(struct thread_data *td)
+-{
+-	struct fio_file *f;
+-	uint64_t file_size;
+-	int err = 0;
+-
+-	if (td->o.nr_files > 1) {
+-		log_err("fio: shared file setup called for multiple files\n");
+-		return -1;
+-	}
+-
+-	get_file_sizes(td);
+-
+-	f = td->files[0];
+-
+-	if (f == NULL) {
+-		log_err("fio: NULL shared file\n");
+-		return -1;
+-	}
+-
+-	file_size = thread_number * td->o.size;
+-	dprint(FD_FILE, "shared setup %s real_file_size=%llu, desired=%llu\n", 
+-			f->file_name, (unsigned long long)f->real_file_size, (unsigned long long)file_size);
+-
+-	if (f->real_file_size < file_size) {
+-		dprint(FD_FILE, "fio: extending shared file\n");
+-		f->real_file_size = file_size;
+-		err = extend_file(td, f);
+-		if (!err) {
+-			err = __file_invalidate_cache(td, f, 0, f->real_file_size);
+-		}
+-		get_file_sizes(td);
+-		dprint(FD_FILE, "shared setup new real_file_size=%llu\n", 
+-				(unsigned long long)f->real_file_size);
+-	}
+-
+-	return err;
+-}
+-
+ /*
+  * Open the files and setup files sizes, creating files if necessary.
+  */
+@@ -1134,7 +1092,7 @@ int setup_files(struct thread_data *td)
+ 	const unsigned long long bs = td_min_bs(td);
+ 	uint64_t fs = 0;
+ 
+-	dprint(FD_FILE, "setup files (thread_number=%d, subjob_number=%d)\n", td->thread_number, td->subjob_number);
++	dprint(FD_FILE, "setup files\n");
+ 
+ 	old_state = td_bump_runstate(td, TD_SETTING_UP);
+ 
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0017-Add-wait-for-handling-SIGBREAK.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0017-Add-wait-for-handling-SIGBREAK.patch
new file mode 100644
index 0000000..e8cb337
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0017-Add-wait-for-handling-SIGBREAK.patch
@@ -0,0 +1,59 @@
+From 98beea79a30f1541e646efae911dfce10ae18f5c Mon Sep 17 00:00:00 2001
+From: Brandon Paupore <brandon.paupore@wdc.com>
+Date: Fri, 5 Aug 2022 12:57:27 -0500
+Subject: [PATCH] Add wait for handling SIGBREAK
+
+When closing a command prompt window or terminating it using something
+like the taskkill command, each child process (such as a running FIO
+workload) is sent a SIGBREAK signal. Once those child processes have
+responded to that signal, Windows terminates them if they're still
+executing.
+
+This change has the main thread to wait for others to exit when handling
+a SIGBREAK signal, such that each job will still have time to wrap-up
+and give stats before the entire program terminates.
+
+Signed-off-by: Brandon Paupore <brandon.paupore@wdc.com>
+---
+ backend.c | 21 ++++++++++++++++++++-
+ 1 file changed, 20 insertions(+), 1 deletion(-)
+
+diff --git a/backend.c b/backend.c
+index e5bb4e25..375a23e4 100644
+--- a/backend.c
++++ b/backend.c
+@@ -90,6 +90,25 @@ static void sig_int(int sig)
+ 	}
+ }
+ 
++#ifdef WIN32
++static void sig_break(int sig)
++{
++	struct thread_data *td;
++	int i;
++
++	sig_int(sig);
++
++	/**
++	 * Windows terminates all job processes on SIGBREAK after the handler
++	 * returns, so give them time to wrap-up and give stats
++	 */
++	for_each_td(td, i) {
++		while (td->runstate < TD_EXITED)
++			sleep(1);
++	}
++}
++#endif
++
+ void sig_show_status(int sig)
+ {
+ 	show_running_run_stats();
+@@ -112,7 +131,7 @@ static void set_sig_handlers(void)
+ /* Windows uses SIGBREAK as a quit signal from other applications */
+ #ifdef WIN32
+ 	memset(&act, 0, sizeof(act));
+-	act.sa_handler = sig_int;
++	act.sa_handler = sig_break;
+ 	act.sa_flags = SA_RESTART;
+ 	sigaction(SIGBREAK, &act, NULL);
+ #endif
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0018-engines-io_uring-pass-back-correct-error-value-when-.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0018-engines-io_uring-pass-back-correct-error-value-when-.patch
new file mode 100644
index 0000000..8aea3ab
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0018-engines-io_uring-pass-back-correct-error-value-when-.patch
@@ -0,0 +1,58 @@
+From 1e6918419f4a2e5dbd77dd2da82598f1af63f533 Mon Sep 17 00:00:00 2001
+From: Jens Axboe <axboe@kernel.dk>
+Date: Wed, 24 Aug 2022 12:01:39 -0600
+Subject: [PATCH] engines/io_uring: pass back correct error value when
+ interrupted
+
+Running with an io_uring engine and using a USR1 signal to show
+current status will end up terminating the job with:
+
+fio: pid=91726, err=-4/file:ioengines.c:320, func=get_events, error=Unknown error -4
+sfx: (groupid=0, jobs=1): err=-4 (file:ioengines.c:320, func=get_events, error=Unknown error -4): pid=91726: Wed Aug 24 11:59:51 2022
+
+Ensure that the return value is set correctly based on the errno.
+
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+---
+ engines/io_uring.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/engines/io_uring.c b/engines/io_uring.c
+index cffc7371..89d64b06 100644
+--- a/engines/io_uring.c
++++ b/engines/io_uring.c
+@@ -445,12 +445,18 @@ static struct io_u *fio_ioring_event(struct thread_data *td, int event)
+ 	struct io_uring_cqe *cqe;
+ 	struct io_u *io_u;
+ 	unsigned index;
++	static int eio;
+ 
+ 	index = (event + ld->cq_ring_off) & ld->cq_ring_mask;
+ 
+ 	cqe = &ld->cq_ring.cqes[index];
+ 	io_u = (struct io_u *) (uintptr_t) cqe->user_data;
+ 
++	if (eio++ == 5) {
++		printf("mark EIO\n");
++		cqe->res = -EIO;
++	}
++
+ 	if (cqe->res != io_u->xfer_buflen) {
+ 		if (cqe->res > io_u->xfer_buflen)
+ 			io_u->error = -cqe->res;
+@@ -532,6 +538,7 @@ static int fio_ioring_getevents(struct thread_data *td, unsigned int min,
+ 			if (r < 0) {
+ 				if (errno == EAGAIN || errno == EINTR)
+ 					continue;
++				r = -errno;
+ 				td_verror(td, errno, "io_uring_enter");
+ 				break;
+ 			}
+@@ -665,6 +672,7 @@ static int fio_ioring_commit(struct thread_data *td)
+ 				usleep(1);
+ 				continue;
+ 			}
++			ret = -errno;
+ 			td_verror(td, errno, "io_uring_enter submit");
+ 			break;
+ 		}
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0019-Enable-CPU-affinity-support-on-Android.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0019-Enable-CPU-affinity-support-on-Android.patch
new file mode 100644
index 0000000..f477416
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0019-Enable-CPU-affinity-support-on-Android.patch
@@ -0,0 +1,64 @@
+From 02fd5b722bdfef2e7ce8d4aeb1bc65308d37003f Mon Sep 17 00:00:00 2001
+From: Bart Van Assche <bvanassche@acm.org>
+Date: Wed, 24 Aug 2022 13:42:29 -0700
+Subject: [PATCH] Enable CPU affinity support on Android
+
+This patch enables the --cpumask=, --cpus_allowed= and
+--cpus_allowed_policy= fio options.
+
+Signed-off-by: Bart Van Assche <bvanassche@acm.org>
+---
+ os/os-android.h | 26 ++++++++++++++++++++++++++
+ 1 file changed, 26 insertions(+)
+
+diff --git a/os/os-android.h b/os/os-android.h
+index 2f73d249..34534239 100644
+--- a/os/os-android.h
++++ b/os/os-android.h
+@@ -24,6 +24,7 @@
+   #define __has_builtin(x) 0  // Compatibility with non-clang compilers.
+ #endif
+ 
++#define FIO_HAVE_CPU_AFFINITY
+ #define FIO_HAVE_DISK_UTIL
+ #define FIO_HAVE_IOSCHED_SWITCH
+ #define FIO_HAVE_IOPRIO
+@@ -44,6 +45,13 @@
+ 
+ #define OS_MAP_ANON		MAP_ANONYMOUS
+ 
++typedef cpu_set_t os_cpu_mask_t;
++
++#define fio_setaffinity(pid, cpumask)		\
++	sched_setaffinity((pid), sizeof(cpumask), &(cpumask))
++#define fio_getaffinity(pid, ptr)	\
++	sched_getaffinity((pid), sizeof(cpu_set_t), (ptr))
++
+ #ifndef POSIX_MADV_DONTNEED
+ #define posix_madvise   madvise
+ #define POSIX_MADV_DONTNEED MADV_DONTNEED
+@@ -64,6 +72,24 @@
+ 	pthread_getaffinity_np(pthread_self(), sizeof(mask), &(mask))
+ #endif
+ 
++#define fio_cpu_clear(mask, cpu)	CPU_CLR((cpu), (mask))
++#define fio_cpu_set(mask, cpu)		CPU_SET((cpu), (mask))
++#define fio_cpu_isset(mask, cpu)	(CPU_ISSET((cpu), (mask)) != 0)
++#define fio_cpu_count(mask)		CPU_COUNT((mask))
++
++static inline int fio_cpuset_init(os_cpu_mask_t *mask)
++{
++	CPU_ZERO(mask);
++	return 0;
++}
++
++static inline int fio_cpuset_exit(os_cpu_mask_t *mask)
++{
++	return 0;
++}
++
++#define FIO_MAX_CPUS			CPU_SETSIZE
++
+ #ifndef CONFIG_NO_SHM
+ /*
+  * Bionic doesn't support SysV shared memory, so implement it using ashmem
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0020-io_uring-Replace-pthread_self-with-s-tid.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0020-io_uring-Replace-pthread_self-with-s-tid.patch
new file mode 100644
index 0000000..24952f1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0020-io_uring-Replace-pthread_self-with-s-tid.patch
@@ -0,0 +1,41 @@
+From 72d7f2139454528b9ebfb2f988a35f9a739680d0 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 24 Aug 2022 18:08:53 -0700
+Subject: [PATCH] io_uring: Replace pthread_self with s->tid
+
+__init_rand64 takes 64bit value and srand48 takes unsigned 32bit value,
+pthread_t is opaque type and some libcs ( e.g. musl ) do not define them
+in plain old data types and ends up with errors
+
+| t/io_uring.c:809:32: error: incompatible pointer to integer conversion passing 'pthread_t' (aka 'struct __pthread *') to parameter of type 'uint64_t' (aka 'unsigned long') [-Wint-conver
+sion]
+|         __init_rand64(&s->rand_state, pthread_self());
+|                                       ^~~~~~~~~~~~~~
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ t/io_uring.c | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/t/io_uring.c b/t/io_uring.c
+index 35bf1956..f34a3554 100644
+--- a/t/io_uring.c
++++ b/t/io_uring.c
+@@ -799,15 +799,14 @@ static int submitter_init(struct submitter *s)
+ 	int i, nr_batch, err;
+ 	static int init_printed;
+ 	char buf[80];
+-
+ 	s->tid = gettid();
+ 	printf("submitter=%d, tid=%d, file=%s, node=%d\n", s->index, s->tid,
+ 							s->filename, s->numa_node);
+ 
+ 	set_affinity(s);
+ 
+-	__init_rand64(&s->rand_state, pthread_self());
+-	srand48(pthread_self());
++	__init_rand64(&s->rand_state, s->tid);
++	srand48(s->tid);
+ 
+ 	for (i = 0; i < MAX_FDS; i++)
+ 		s->files[i].fileno = i;
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0021-engines-io_uring-delete-debug-code.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0021-engines-io_uring-delete-debug-code.patch
new file mode 100644
index 0000000..b4f3d0d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0021-engines-io_uring-delete-debug-code.patch
@@ -0,0 +1,37 @@
+From 85f8181d42050f8a8c9ddf6d30f621054f0e6890 Mon Sep 17 00:00:00 2001
+From: Jens Axboe <axboe@kernel.dk>
+Date: Thu, 25 Aug 2022 11:19:34 -0600
+Subject: [PATCH] engines/io_uring: delete debug code
+
+This was inadvertently introduced by a previous commit, get rid
+of it.
+
+Fixes: 1816895b788e ("engines/io_uring: pass back correct error value when interrupted")
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+---
+ engines/io_uring.c | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/engines/io_uring.c b/engines/io_uring.c
+index 89d64b06..94376efa 100644
+--- a/engines/io_uring.c
++++ b/engines/io_uring.c
+@@ -445,18 +445,12 @@ static struct io_u *fio_ioring_event(struct thread_data *td, int event)
+ 	struct io_uring_cqe *cqe;
+ 	struct io_u *io_u;
+ 	unsigned index;
+-	static int eio;
+ 
+ 	index = (event + ld->cq_ring_off) & ld->cq_ring_mask;
+ 
+ 	cqe = &ld->cq_ring.cqes[index];
+ 	io_u = (struct io_u *) (uintptr_t) cqe->user_data;
+ 
+-	if (eio++ == 5) {
+-		printf("mark EIO\n");
+-		cqe->res = -EIO;
+-	}
+-
+ 	if (cqe->res != io_u->xfer_buflen) {
+ 		if (cqe->res > io_u->xfer_buflen)
+ 			io_u->error = -cqe->res;
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0022-t-io_uring-prep-for-including-engines-nvme.h-in-t-io.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0022-t-io_uring-prep-for-including-engines-nvme.h-in-t-io.patch
new file mode 100644
index 0000000..f32c886
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0022-t-io_uring-prep-for-including-engines-nvme.h-in-t-io.patch
@@ -0,0 +1,72 @@
+From a10cec0440a7574ffb76ff52fbc33a250f067d6a Mon Sep 17 00:00:00 2001
+From: Anuj Gupta <anuj20.g@samsung.com>
+Date: Fri, 26 Aug 2022 17:03:05 +0530
+Subject: [PATCH] t/io_uring: prep for including engines/nvme.h in t/io_uring
+
+Change page_size and cal_clat_percentiles name to something different
+as these are indirectly picked from engines/nvme.h (fio.h and stat.h)
+
+Signed-off-by: Anuj Gupta <anuj20.g@samsung.com>
+Link: https://lore.kernel.org/r/20220826113306.4139-2-anuj20.g@samsung.com
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+---
+ t/io_uring.c | 18 +++++++++---------
+ 1 file changed, 9 insertions(+), 9 deletions(-)
+
+diff --git a/t/io_uring.c b/t/io_uring.c
+index f34a3554..6e4737e4 100644
+--- a/t/io_uring.c
++++ b/t/io_uring.c
+@@ -117,7 +117,7 @@ static struct submitter *submitter;
+ static volatile int finish;
+ static int stats_running;
+ static unsigned long max_iops;
+-static long page_size;
++static long t_io_uring_page_size;
+ 
+ static int depth = DEPTH;
+ static int batch_submit = BATCH_SUBMIT;
+@@ -195,9 +195,9 @@ static unsigned long plat_idx_to_val(unsigned int idx)
+ 	return cycles_to_nsec(base + ((k + 0.5) * (1 << error_bits)));
+ }
+ 
+-unsigned int calc_clat_percentiles(unsigned long *io_u_plat, unsigned long nr,
+-				   unsigned long **output,
+-				   unsigned long *maxv, unsigned long *minv)
++unsigned int calculate_clat_percentiles(unsigned long *io_u_plat,
++		unsigned long nr, unsigned long **output,
++		unsigned long *maxv, unsigned long *minv)
+ {
+ 	unsigned long sum = 0;
+ 	unsigned int len = plist_len, i, j = 0;
+@@ -251,7 +251,7 @@ static void show_clat_percentiles(unsigned long *io_u_plat, unsigned long nr,
+ 	bool is_last;
+ 	char fmt[32];
+ 
+-	len = calc_clat_percentiles(io_u_plat, nr, &ovals, &maxv, &minv);
++	len = calculate_clat_percentiles(io_u_plat, nr, &ovals, &maxv, &minv);
+ 	if (!len || !ovals)
+ 		goto out;
+ 
+@@ -786,7 +786,7 @@ static void *allocate_mem(struct submitter *s, int size)
+ 		return numa_alloc_onnode(size, s->numa_node);
+ #endif
+ 
+-	if (posix_memalign(&buf, page_size, bs)) {
++	if (posix_memalign(&buf, t_io_uring_page_size, bs)) {
+ 		printf("failed alloc\n");
+ 		return NULL;
+ 	}
+@@ -1542,9 +1542,9 @@ int main(int argc, char *argv[])
+ 
+ 	arm_sig_int();
+ 
+-	page_size = sysconf(_SC_PAGESIZE);
+-	if (page_size < 0)
+-		page_size = 4096;
++	t_io_uring_page_size = sysconf(_SC_PAGESIZE);
++	if (t_io_uring_page_size < 0)
++		t_io_uring_page_size = 4096;
+ 
+ 	for (j = 0; j < nthreads; j++) {
+ 		s = get_submitter(j);
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0023-t-io_uring-add-support-for-async-passthru.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0023-t-io_uring-add-support-for-async-passthru.patch
new file mode 100644
index 0000000..8ef7d13
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0023-t-io_uring-add-support-for-async-passthru.patch
@@ -0,0 +1,379 @@
+From fa4a1345ca7cd60ae0b96da286f45621a3f45a33 Mon Sep 17 00:00:00 2001
+From: Anuj Gupta <anuj20.g@samsung.com>
+Date: Fri, 26 Aug 2022 17:03:06 +0530
+Subject: [PATCH] t/io_uring: add support for async-passthru
+
+This patch adds support for async-passthru in t/io_uring. User needs to
+specify -u1 option in the command
+
+Example commandline:
+t/io_uring -b512 -d128 -c32 -s32 -p0 -F1 -B0 -O0 -n1 -u1 /dev/ng0n1
+
+Signed-off-by: Anuj Gupta <anuj20.g@samsung.com>
+Link: https://lore.kernel.org/r/20220826113306.4139-3-anuj20.g@samsung.com
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+---
+ t/io_uring.c | 238 +++++++++++++++++++++++++++++++++++++++++++++++++--
+ 1 file changed, 230 insertions(+), 8 deletions(-)
+
+diff --git a/t/io_uring.c b/t/io_uring.c
+index 6e4737e4..0a90f85c 100644
+--- a/t/io_uring.c
++++ b/t/io_uring.c
+@@ -35,6 +35,7 @@
+ #include "../lib/rand.h"
+ #include "../minmax.h"
+ #include "../os/linux/io_uring.h"
++#include "../engines/nvme.h"
+ 
+ struct io_sq_ring {
+ 	unsigned *head;
+@@ -67,6 +68,8 @@ struct file {
+ 	unsigned long max_size;
+ 	unsigned long cur_off;
+ 	unsigned pending_ios;
++	unsigned int nsid;	/* nsid field required for nvme-passthrough */
++	unsigned int lba_shift;	/* lba_shift field required for nvme-passthrough */
+ 	int real_fd;
+ 	int fixed_fd;
+ 	int fileno;
+@@ -139,6 +142,7 @@ static int random_io = 1;	/* random or sequential IO */
+ static int register_ring = 1;	/* register ring */
+ static int use_sync = 0;	/* use preadv2 */
+ static int numa_placement = 0;	/* set to node of device */
++static int pt = 0;		/* passthrough I/O or not */
+ 
+ static unsigned long tsc_rate;
+ 
+@@ -161,6 +165,54 @@ struct io_uring_map_buffers {
+ };
+ #endif
+ 
++static int nvme_identify(int fd, __u32 nsid, enum nvme_identify_cns cns,
++			 enum nvme_csi csi, void *data)
++{
++	struct nvme_passthru_cmd cmd = {
++		.opcode         = nvme_admin_identify,
++		.nsid           = nsid,
++		.addr           = (__u64)(uintptr_t)data,
++		.data_len       = NVME_IDENTIFY_DATA_SIZE,
++		.cdw10          = cns,
++		.cdw11          = csi << NVME_IDENTIFY_CSI_SHIFT,
++		.timeout_ms     = NVME_DEFAULT_IOCTL_TIMEOUT,
++	};
++
++	return ioctl(fd, NVME_IOCTL_ADMIN_CMD, &cmd);
++}
++
++static int nvme_get_info(int fd, __u32 *nsid, __u32 *lba_sz, __u64 *nlba)
++{
++	struct nvme_id_ns ns;
++	int namespace_id;
++	int err;
++
++	namespace_id = ioctl(fd, NVME_IOCTL_ID);
++	if (namespace_id < 0) {
++		fprintf(stderr, "error failed to fetch namespace-id\n");
++		close(fd);
++		return -errno;
++	}
++
++	/*
++	 * Identify namespace to get namespace-id, namespace size in LBA's
++	 * and LBA data size.
++	 */
++	err = nvme_identify(fd, namespace_id, NVME_IDENTIFY_CNS_NS,
++				NVME_CSI_NVM, &ns);
++	if (err) {
++		fprintf(stderr, "error failed to fetch identify namespace\n");
++		close(fd);
++		return err;
++	}
++
++	*nsid = namespace_id;
++	*lba_sz = 1 << ns.lbaf[(ns.flbas & 0x0f)].ds;
++	*nlba = ns.nsze;
++
++	return 0;
++}
++
+ static unsigned long cycles_to_nsec(unsigned long cycles)
+ {
+ 	uint64_t val;
+@@ -520,6 +572,65 @@ static void init_io(struct submitter *s, unsigned index)
+ 		sqe->user_data |= ((uint64_t)s->clock_index << 32);
+ }
+ 
++static void init_io_pt(struct submitter *s, unsigned index)
++{
++	struct io_uring_sqe *sqe = &s->sqes[index << 1];
++	unsigned long offset;
++	struct file *f;
++	struct nvme_uring_cmd *cmd;
++	unsigned long long slba;
++	unsigned long long nlb;
++	long r;
++
++	if (s->nr_files == 1) {
++		f = &s->files[0];
++	} else {
++		f = &s->files[s->cur_file];
++		if (f->pending_ios >= file_depth(s)) {
++			s->cur_file++;
++			if (s->cur_file == s->nr_files)
++				s->cur_file = 0;
++			f = &s->files[s->cur_file];
++		}
++	}
++	f->pending_ios++;
++
++	if (random_io) {
++		r = __rand64(&s->rand_state);
++		offset = (r % (f->max_blocks - 1)) * bs;
++	} else {
++		offset = f->cur_off;
++		f->cur_off += bs;
++		if (f->cur_off + bs > f->max_size)
++			f->cur_off = 0;
++	}
++
++	if (register_files) {
++		sqe->fd = f->fixed_fd;
++		sqe->flags = IOSQE_FIXED_FILE;
++	} else {
++		sqe->fd = f->real_fd;
++		sqe->flags = 0;
++	}
++	sqe->opcode = IORING_OP_URING_CMD;
++	sqe->user_data = (unsigned long) f->fileno;
++	if (stats)
++		sqe->user_data |= ((unsigned long)s->clock_index << 32);
++	sqe->cmd_op = NVME_URING_CMD_IO;
++	slba = offset >> f->lba_shift;
++	nlb = (bs >> f->lba_shift) - 1;
++	cmd = (struct nvme_uring_cmd *)&sqe->cmd;
++	/* cdw10 and cdw11 represent starting slba*/
++	cmd->cdw10 = slba & 0xffffffff;
++	cmd->cdw11 = slba >> 32;
++	/* cdw12 represent number of lba to be read*/
++	cmd->cdw12 = nlb;
++	cmd->addr = (unsigned long) s->iovecs[index].iov_base;
++	cmd->data_len = bs;
++	cmd->nsid = f->nsid;
++	cmd->opcode = 2;
++}
++
+ static int prep_more_ios_uring(struct submitter *s, int max_ios)
+ {
+ 	struct io_sq_ring *ring = &s->sq_ring;
+@@ -532,7 +643,10 @@ static int prep_more_ios_uring(struct submitter *s, int max_ios)
+ 			break;
+ 
+ 		index = tail & sq_ring_mask;
+-		init_io(s, index);
++		if (pt)
++			init_io_pt(s, index);
++		else
++			init_io(s, index);
+ 		ring->array[index] = index;
+ 		prepped++;
+ 		tail = next_tail;
+@@ -549,7 +663,29 @@ static int get_file_size(struct file *f)
+ 
+ 	if (fstat(f->real_fd, &st) < 0)
+ 		return -1;
+-	if (S_ISBLK(st.st_mode)) {
++	if (pt) {
++		__u64 nlba;
++		__u32 lbs;
++		int ret;
++
++		if (!S_ISCHR(st.st_mode)) {
++			fprintf(stderr, "passthrough works with only nvme-ns "
++					"generic devices (/dev/ngXnY)\n");
++			return -1;
++		}
++		ret = nvme_get_info(f->real_fd, &f->nsid, &lbs, &nlba);
++		if (ret)
++			return -1;
++		if ((bs % lbs) != 0) {
++			printf("error: bs:%d should be a multiple logical_block_size:%d\n",
++					bs, lbs);
++			return -1;
++		}
++		f->max_blocks = nlba / bs;
++		f->max_size = nlba;
++		f->lba_shift = ilog2(lbs);
++		return 0;
++	} else if (S_ISBLK(st.st_mode)) {
+ 		unsigned long long bytes;
+ 
+ 		if (ioctl(f->real_fd, BLKGETSIZE64, &bytes) != 0)
+@@ -620,6 +756,60 @@ static int reap_events_uring(struct submitter *s)
+ 	return reaped;
+ }
+ 
++static int reap_events_uring_pt(struct submitter *s)
++{
++	struct io_cq_ring *ring = &s->cq_ring;
++	struct io_uring_cqe *cqe;
++	unsigned head, reaped = 0;
++	int last_idx = -1, stat_nr = 0;
++	unsigned index;
++	int fileno;
++
++	head = *ring->head;
++	do {
++		struct file *f;
++
++		read_barrier();
++		if (head == atomic_load_acquire(ring->tail))
++			break;
++		index = head & cq_ring_mask;
++		cqe = &ring->cqes[index << 1];
++		fileno = cqe->user_data & 0xffffffff;
++		f = &s->files[fileno];
++		f->pending_ios--;
++
++		if (cqe->res != 0) {
++			printf("io: unexpected ret=%d\n", cqe->res);
++			if (polled && cqe->res == -EINVAL)
++				printf("passthrough doesn't support polled IO\n");
++			return -1;
++		}
++		if (stats) {
++			int clock_index = cqe->user_data >> 32;
++
++			if (last_idx != clock_index) {
++				if (last_idx != -1) {
++					add_stat(s, last_idx, stat_nr);
++					stat_nr = 0;
++				}
++				last_idx = clock_index;
++			}
++			stat_nr++;
++		}
++		reaped++;
++		head++;
++	} while (1);
++
++	if (stat_nr)
++		add_stat(s, last_idx, stat_nr);
++
++	if (reaped) {
++		s->inflight -= reaped;
++		atomic_store_release(ring->head, head);
++	}
++	return reaped;
++}
++
+ static void set_affinity(struct submitter *s)
+ {
+ #ifdef CONFIG_LIBNUMA
+@@ -697,6 +887,7 @@ static int setup_ring(struct submitter *s)
+ 	struct io_uring_params p;
+ 	int ret, fd;
+ 	void *ptr;
++	size_t len;
+ 
+ 	memset(&p, 0, sizeof(p));
+ 
+@@ -709,6 +900,10 @@ static int setup_ring(struct submitter *s)
+ 			p.sq_thread_cpu = sq_thread_cpu;
+ 		}
+ 	}
++	if (pt) {
++		p.flags |= IORING_SETUP_SQE128;
++		p.flags |= IORING_SETUP_CQE32;
++	}
+ 
+ 	fd = io_uring_setup(depth, &p);
+ 	if (fd < 0) {
+@@ -761,11 +956,22 @@ static int setup_ring(struct submitter *s)
+ 	sring->array = ptr + p.sq_off.array;
+ 	sq_ring_mask = *sring->ring_mask;
+ 
+-	s->sqes = mmap(0, p.sq_entries * sizeof(struct io_uring_sqe),
++	if (p.flags & IORING_SETUP_SQE128)
++		len = 2 * p.sq_entries * sizeof(struct io_uring_sqe);
++	else
++		len = p.sq_entries * sizeof(struct io_uring_sqe);
++	s->sqes = mmap(0, len,
+ 			PROT_READ | PROT_WRITE, MAP_SHARED | MAP_POPULATE, fd,
+ 			IORING_OFF_SQES);
+ 
+-	ptr = mmap(0, p.cq_off.cqes + p.cq_entries * sizeof(struct io_uring_cqe),
++	if (p.flags & IORING_SETUP_CQE32) {
++		len = p.cq_off.cqes +
++			2 * p.cq_entries * sizeof(struct io_uring_cqe);
++	} else {
++		len = p.cq_off.cqes +
++			p.cq_entries * sizeof(struct io_uring_cqe);
++	}
++	ptr = mmap(0, len,
+ 			PROT_READ | PROT_WRITE, MAP_SHARED | MAP_POPULATE, fd,
+ 			IORING_OFF_CQ_RING);
+ 	cring->head = ptr + p.cq_off.head;
+@@ -855,7 +1061,16 @@ static int submitter_init(struct submitter *s)
+ 		s->plat = NULL;
+ 		nr_batch = 0;
+ 	}
++	/* perform the expensive command initialization part for passthrough here
++	 * rather than in the fast path
++	 */
++	if (pt) {
++		for (i = 0; i < roundup_pow2(depth); i++) {
++			struct io_uring_sqe *sqe = &s->sqes[i << 1];
+ 
++			memset(&sqe->cmd, 0, sizeof(struct nvme_uring_cmd));
++		}
++	}
+ 	return nr_batch;
+ }
+ 
+@@ -1111,7 +1326,10 @@ submit:
+ 		do {
+ 			int r;
+ 
+-			r = reap_events_uring(s);
++			if (pt)
++				r = reap_events_uring_pt(s);
++			else
++				r = reap_events_uring(s);
+ 			if (r == -1) {
+ 				s->finish = 1;
+ 				break;
+@@ -1305,11 +1523,12 @@ static void usage(char *argv, int status)
+ 		" -a <bool> : Use legacy aio, default %d\n"
+ 		" -S <bool> : Use sync IO (preadv2), default %d\n"
+ 		" -X <bool> : Use registered ring %d\n"
+-		" -P <bool> : Automatically place on device home node %d\n",
++		" -P <bool> : Automatically place on device home node %d\n"
++		" -u <bool> : Use nvme-passthrough I/O, default %d\n",
+ 		argv, DEPTH, BATCH_SUBMIT, BATCH_COMPLETE, BS, polled,
+ 		fixedbufs, dma_map, register_files, nthreads, !buffered, do_nop,
+ 		stats, runtime == 0 ? "unlimited" : runtime_str, random_io, aio,
+-		use_sync, register_ring, numa_placement);
++		use_sync, register_ring, numa_placement, pt);
+ 	exit(status);
+ }
+ 
+@@ -1368,7 +1587,7 @@ int main(int argc, char *argv[])
+ 	if (!do_nop && argc < 2)
+ 		usage(argv[0], 1);
+ 
+-	while ((opt = getopt(argc, argv, "d:s:c:b:p:B:F:n:N:O:t:T:a:r:D:R:X:S:P:h?")) != -1) {
++	while ((opt = getopt(argc, argv, "d:s:c:b:p:B:F:n:N:O:t:T:a:r:D:R:X:S:P:u:h?")) != -1) {
+ 		switch (opt) {
+ 		case 'a':
+ 			aio = !!atoi(optarg);
+@@ -1449,6 +1668,9 @@ int main(int argc, char *argv[])
+ 		case 'P':
+ 			numa_placement = !!atoi(optarg);
+ 			break;
++		case 'u':
++			pt = !!atoi(optarg);
++			break;
+ 		case 'h':
+ 		case '?':
+ 		default:
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0024-t-io_uring-fix-64-bit-cast-on-32-bit-archs.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0024-t-io_uring-fix-64-bit-cast-on-32-bit-archs.patch
new file mode 100644
index 0000000..ba687e0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0024-t-io_uring-fix-64-bit-cast-on-32-bit-archs.patch
@@ -0,0 +1,37 @@
+From 286bed8bc95fbc7d8a1d00b1861037bc215948ee Mon Sep 17 00:00:00 2001
+From: Jens Axboe <axboe@kernel.dk>
+Date: Fri, 26 Aug 2022 07:52:54 -0600
+Subject: [PATCH] t/io_uring: fix 64-bit cast on 32-bit archs
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+gcc complains that:
+
+t/io_uring.c: In function ‘init_io_pt’:
+t/io_uring.c:618:52: error: left shift count >= width of type [-Werror=shift-count-overflow]
+  618 |   sqe->user_data |= ((unsigned long)s->clock_index << 32);
+      |                                                    ^~
+
+we're shifting more than the size of the type. Cast to a 64-bit value
+so that it'll work on 32-bit as well.
+
+Fixes: 7d04588a7663 ("t/io_uring: add support for async-passthru")
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+---
+ t/io_uring.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/t/io_uring.c b/t/io_uring.c
+index 0a90f85c..b90bcf78 100644
+--- a/t/io_uring.c
++++ b/t/io_uring.c
+@@ -615,7 +615,7 @@ static void init_io_pt(struct submitter *s, unsigned index)
+ 	sqe->opcode = IORING_OP_URING_CMD;
+ 	sqe->user_data = (unsigned long) f->fileno;
+ 	if (stats)
+-		sqe->user_data |= ((unsigned long)s->clock_index << 32);
++		sqe->user_data |= ((__u64) s->clock_index << 32ULL);
+ 	sqe->cmd_op = NVME_URING_CMD_IO;
+ 	slba = offset >> f->lba_shift;
+ 	nlb = (bs >> f->lba_shift) - 1;
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0025-test-add-basic-test-for-io_uring-ioengine.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0025-test-add-basic-test-for-io_uring-ioengine.patch
new file mode 100644
index 0000000..7472eea
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0025-test-add-basic-test-for-io_uring-ioengine.patch
@@ -0,0 +1,91 @@
+From c3df3532a507e6d7c66339dee6eb022feab68f59 Mon Sep 17 00:00:00 2001
+From: Vincent Fu <vincent.fu@samsung.com>
+Date: Thu, 25 Aug 2022 12:08:33 -0700
+Subject: [PATCH] test: add basic test for io_uring ioengine
+
+We should have a quick smoke test for the io_uring ioengine to
+automatically detect breakage.
+
+Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
+---
+ t/jobs/t0018.fio   |  9 +++++++++
+ t/run-fio-tests.py | 22 ++++++++++++++++++++++
+ 2 files changed, 31 insertions(+)
+ create mode 100644 t/jobs/t0018.fio
+
+diff --git a/t/jobs/t0018.fio b/t/jobs/t0018.fio
+new file mode 100644
+index 00000000..e2298b1f
+--- /dev/null
++++ b/t/jobs/t0018.fio
+@@ -0,0 +1,9 @@
++# Expected result: job completes without error
++# Buggy result: job fails
++
++[test]
++ioengine=io_uring
++filesize=256K
++time_based
++runtime=3s
++rw=randrw
+diff --git a/t/run-fio-tests.py b/t/run-fio-tests.py
+index 504b7cdb..1e5e9f24 100755
+--- a/t/run-fio-tests.py
++++ b/t/run-fio-tests.py
+@@ -582,6 +582,7 @@ class Requirements(object):
+ 
+     _linux = False
+     _libaio = False
++    _io_uring = False
+     _zbd = False
+     _root = False
+     _zoned_nullb = False
+@@ -605,6 +606,12 @@ class Requirements(object):
+                 Requirements._zbd = "CONFIG_HAS_BLKZONED" in contents
+                 Requirements._libaio = "CONFIG_LIBAIO" in contents
+ 
++            contents, success = FioJobTest.get_file("/proc/kallsyms")
++            if not success:
++                print("Unable to open '/proc/kallsyms' to probe for io_uring support")
++            else:
++                Requirements._io_uring = "io_uring_setup" in contents
++
+             Requirements._root = (os.geteuid() == 0)
+             if Requirements._zbd and Requirements._root:
+                 try:
+@@ -627,6 +634,7 @@ class Requirements(object):
+ 
+         req_list = [Requirements.linux,
+                     Requirements.libaio,
++                    Requirements.io_uring,
+                     Requirements.zbd,
+                     Requirements.root,
+                     Requirements.zoned_nullb,
+@@ -648,6 +656,11 @@ class Requirements(object):
+         """Is libaio available?"""
+         return Requirements._libaio, "libaio required"
+ 
++    @classmethod
++    def io_uring(cls):
++        """Is io_uring available?"""
++        return Requirements._io_uring, "io_uring required"
++
+     @classmethod
+     def zbd(cls):
+         """Is ZBD support available?"""
+@@ -867,6 +880,15 @@ TEST_LIST = [
+         'output_format':    'json',
+         'requirements':     [Requirements.not_windows],
+     },
++    {
++        'test_id':          18,
++        'test_class':       FioJobTest,
++        'job':              't0018.fio',
++        'success':          SUCCESS_DEFAULT,
++        'pre_job':          None,
++        'pre_success':      None,
++        'requirements':     [Requirements.linux, Requirements.io_uring],
++    },
+     {
+         'test_id':          1000,
+         'test_class':       FioExeTest,
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0026-t-io_uring-remove-duplicate-definition-of-gettid.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0026-t-io_uring-remove-duplicate-definition-of-gettid.patch
new file mode 100644
index 0000000..c75ec36
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0026-t-io_uring-remove-duplicate-definition-of-gettid.patch
@@ -0,0 +1,59 @@
+From 575bea1c9b642a11ac5b7162aea6a9f905c60318 Mon Sep 17 00:00:00 2001
+From: Jens Axboe <axboe@kernel.dk>
+Date: Fri, 26 Aug 2022 14:14:44 -0600
+Subject: [PATCH] t/io_uring: remove duplicate definition of gettid()
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+With a recent change, we now include os.h through nvme.h, and this
+can cause a duplicate gettid() definition:
+
+t/io_uring.c:499:12: error: redefinition of ‘gettid’
+ static int gettid(void)
+            ^~~~~~
+In file included from t/../engines/../os/os.h:39,
+                 from t/../engines/../thread_options.h:5,
+                 from t/../engines/../fio.h:18,
+                 from t/../engines/nvme.h:10,
+                 from t/io_uring.c:38:
+t/../engines/../os/os-linux.h:147:19: note: previous definition of
+‘gettid’ was here
+ static inline int gettid(void)
+                   ^~~~~~
+
+Include os.h directly to make it clear that we use it, and remove the
+gettid() definition from io_uring.c.
+
+Reported-by: Yi Zhang <yi.zhang@redhat.com>
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+---
+ t/io_uring.c | 8 +-------
+ 1 file changed, 1 insertion(+), 7 deletions(-)
+
+diff --git a/t/io_uring.c b/t/io_uring.c
+index b90bcf78..e8e41796 100644
+--- a/t/io_uring.c
++++ b/t/io_uring.c
+@@ -30,6 +30,7 @@
+ #include <sched.h>
+ 
+ #include "../arch/arch.h"
++#include "../os/os.h"
+ #include "../lib/types.h"
+ #include "../lib/roundup.h"
+ #include "../lib/rand.h"
+@@ -495,13 +496,6 @@ static int io_uring_enter(struct submitter *s, unsigned int to_submit,
+ #endif
+ }
+ 
+-#ifndef CONFIG_HAVE_GETTID
+-static int gettid(void)
+-{
+-	return syscall(__NR_gettid);
+-}
+-#endif
+-
+ static unsigned file_depth(struct submitter *s)
+ {
+ 	return (depth + s->nr_files - 1) / s->nr_files;
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0027-test-add-some-tests-for-seq-and-rand-offsets.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0027-test-add-some-tests-for-seq-and-rand-offsets.patch
new file mode 100644
index 0000000..2abd449
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0027-test-add-some-tests-for-seq-and-rand-offsets.patch
@@ -0,0 +1,157 @@
+From 1eef6cddda678b0d1a120970bc4cc961c285c81e Mon Sep 17 00:00:00 2001
+From: Vincent Fu <vincent.fu@samsung.com>
+Date: Mon, 29 Aug 2022 11:30:30 -0400
+Subject: [PATCH] test: add some tests for seq and rand offsets
+
+t/jobs/t0019.fio is a seq read test
+t/jobs/t0020.fio is a rand read test
+
+We don't have any automated tests which make sure that sequential access
+patterns are actually sequential and that random access patterns are not
+sequential. Add these two tests to help detect the possibility that
+these features could break.
+
+Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
+---
+ t/jobs/t0019.fio   | 10 ++++++
+ t/jobs/t0020.fio   | 11 ++++++
+ t/run-fio-tests.py | 84 ++++++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 105 insertions(+)
+ create mode 100644 t/jobs/t0019.fio
+ create mode 100644 t/jobs/t0020.fio
+
+diff --git a/t/jobs/t0019.fio b/t/jobs/t0019.fio
+new file mode 100644
+index 00000000..b60d27d2
+--- /dev/null
++++ b/t/jobs/t0019.fio
+@@ -0,0 +1,10 @@
++# Expected result: offsets are accessed sequentially and all offsets are read
++# Buggy result: offsets are not accessed sequentially and one or more offsets are missed
++# run with --debug=io or logging to see which offsets are accessed
++
++[test]
++ioengine=null
++filesize=1M
++write_bw_log=test
++per_job_logs=0
++log_offset=1
+diff --git a/t/jobs/t0020.fio b/t/jobs/t0020.fio
+new file mode 100644
+index 00000000..1c1c5166
+--- /dev/null
++++ b/t/jobs/t0020.fio
+@@ -0,0 +1,11 @@
++# Expected result: offsets are not accessed sequentially and all offsets are touched
++# Buggy result: offsets are accessed sequentially and one or more offsets are missed
++# run with --debug=io or logging to see which offsets are read
++
++[test]
++ioengine=null
++filesize=1M
++rw=randread
++write_bw_log=test
++per_job_logs=0
++log_offset=1
+diff --git a/t/run-fio-tests.py b/t/run-fio-tests.py
+index 1e5e9f24..78f43521 100755
+--- a/t/run-fio-tests.py
++++ b/t/run-fio-tests.py
+@@ -548,6 +548,72 @@ class FioJobTest_t0015(FioJobTest):
+             self.passed = False
+ 
+ 
++class FioJobTest_t0019(FioJobTest):
++    """Test consists of fio test job t0019
++    Confirm that all offsets were touched sequentially"""
++
++    def check_result(self):
++        super(FioJobTest_t0019, self).check_result()
++
++        bw_log_filename = os.path.join(self.test_dir, "test_bw.log")
++        file_data, success = self.get_file(bw_log_filename)
++        log_lines = file_data.split('\n')
++
++        prev = -4096
++        for line in log_lines:
++            if len(line.strip()) == 0:
++                continue
++            cur = int(line.split(',')[4])
++            if cur - prev != 4096:
++                self.passed = False
++                self.failure_reason = "offsets {0}, {1} not sequential".format(prev, cur)
++                return
++            prev = cur
++
++        if cur/4096 != 255:
++            self.passed = False
++            self.failure_reason = "unexpected last offset {0}".format(cur)
++
++
++class FioJobTest_t0020(FioJobTest):
++    """Test consists of fio test job t0020
++    Confirm that almost all offsets were touched non-sequentially"""
++
++    def check_result(self):
++        super(FioJobTest_t0020, self).check_result()
++
++        bw_log_filename = os.path.join(self.test_dir, "test_bw.log")
++        file_data, success = self.get_file(bw_log_filename)
++        log_lines = file_data.split('\n')
++
++        seq_count = 0
++        offsets = set()
++
++        prev = int(log_lines[0].split(',')[4])
++        for line in log_lines[1:]:
++            offsets.add(prev/4096)
++            if len(line.strip()) == 0:
++                continue
++            cur = int(line.split(',')[4])
++            if cur - prev == 4096:
++                seq_count += 1
++            prev = cur
++
++        # 10 is an arbitrary threshold
++        if seq_count > 10:
++            self.passed = False
++            self.failure_reason = "too many ({0}) consecutive offsets".format(seq_count)
++
++        if len(offsets) != 256:
++            self.passed = False
++            self.failure_reason += " number of offsets is {0} instead of 256".format(len(offsets))
++
++        for i in range(256):
++            if not i in offsets:
++                self.passed = False
++                self.failure_reason += " missing offset {0}".format(i*4096)
++
++
+ class FioJobTest_iops_rate(FioJobTest):
+     """Test consists of fio test job t0009
+     Confirm that job0 iops == 1000
+@@ -889,6 +955,24 @@ TEST_LIST = [
+         'pre_success':      None,
+         'requirements':     [Requirements.linux, Requirements.io_uring],
+     },
++    {
++        'test_id':          19,
++        'test_class':       FioJobTest_t0019,
++        'job':              't0019.fio',
++        'success':          SUCCESS_DEFAULT,
++        'pre_job':          None,
++        'pre_success':      None,
++        'requirements':     [],
++    },
++    {
++        'test_id':          20,
++        'test_class':       FioJobTest_t0020,
++        'job':              't0020.fio',
++        'success':          SUCCESS_DEFAULT,
++        'pre_job':          None,
++        'pre_success':      None,
++        'requirements':     [],
++    },
+     {
+         'test_id':          1000,
+         'test_class':       FioExeTest,
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0028-test-use-Ubuntu-22.04-for-64-bit-tests.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0028-test-use-Ubuntu-22.04-for-64-bit-tests.patch
new file mode 100644
index 0000000..b471d9c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0028-test-use-Ubuntu-22.04-for-64-bit-tests.patch
@@ -0,0 +1,72 @@
+From abfe30b1fe8118a4ff935bd7cb03243329eba4b8 Mon Sep 17 00:00:00 2001
+From: Vincent Fu <vincent.fu@samsung.com>
+Date: Mon, 29 Aug 2022 14:24:16 -0400
+Subject: [PATCH] test: use Ubuntu 22.04 for 64-bit tests
+
+On 22.04 there was a conflict among libunwind-14-dev, libunwind-dev, and
+libunwind8 that was resolved by removing libunwind-14-dev.
+
+The 32-bit Ubuntu setup steps require more attention to get them to work
+on 22.04. Stay on 20.04 for now and figure it out later.
+
+Starting pkgProblemResolver with broken count: 1
+Starting 2 pkgProblemResolver with broken count: 1
+Investigating (0) libunwind-14-dev:amd64 < 1:14.0.0-1ubuntu1 @ii K Ib >
+Broken libunwind-14-dev:amd64 Breaks on libunwind-dev:amd64 < none -> 1.3.2-2build2 @un puN >
+  Considering libunwind-dev:amd64 -1 as a solution to libunwind-14-dev:amd64 2
+Done
+Some packages could not be installed. This may mean that you have
+requested an impossible situation or if you are using the unstable
+distribution that some required packages have not yet been created
+or been moved out of Incoming.
+The following information may help to resolve the situation:
+
+The following packages have unmet dependencies:
+ libunwind-14-dev : Breaks: libunwind-dev but 1.3.2-2build2 is to be installed
+E: Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.
+
+Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
+---
+ .github/workflows/ci.yml | 6 +++---
+ ci/actions-install.sh    | 2 ++
+ 2 files changed, 5 insertions(+), 3 deletions(-)
+
+diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
+index 650366b2..85104e5a 100644
+--- a/.github/workflows/ci.yml
++++ b/.github/workflows/ci.yml
+@@ -18,10 +18,10 @@ jobs:
+         - android
+         include:
+         - build: linux-gcc
+-          os: ubuntu-20.04
++          os: ubuntu-22.04
+           cc: gcc
+         - build: linux-clang
+-          os: ubuntu-20.04
++          os: ubuntu-22.04
+           cc: clang
+         - build: macos
+           os: macos-11
+@@ -29,7 +29,7 @@ jobs:
+           os: ubuntu-20.04
+           arch: i686
+         - build: android
+-          os: ubuntu-20.04
++          os: ubuntu-22.04
+           arch: aarch64-linux-android32
+ 
+     env:
+diff --git a/ci/actions-install.sh b/ci/actions-install.sh
+index b5c4198f..7017de2a 100755
+--- a/ci/actions-install.sh
++++ b/ci/actions-install.sh
+@@ -54,6 +54,8 @@ DPKGCFG
+                 libtcmalloc-minimal4
+                 nvidia-cuda-dev
+             )
++	    echo "Removing libunwind-14-dev because of conflicts with libunwind-dev"
++	    sudo apt remove -y libunwind-14-dev
+             ;;
+     esac
+ 
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0029-test-get-32-bit-Ubuntu-22.04-build-working.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0029-test-get-32-bit-Ubuntu-22.04-build-working.patch
new file mode 100644
index 0000000..163ebf3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0029-test-get-32-bit-Ubuntu-22.04-build-working.patch
@@ -0,0 +1,79 @@
+From aa1075ba2ff300e4017bd7813423f63b1fbc325f Mon Sep 17 00:00:00 2001
+From: Vincent Fu <vincent.fu@samsung.com>
+Date: Mon, 29 Aug 2022 15:15:56 -0400
+Subject: [PATCH] test: get 32-bit Ubuntu 22.04 build working
+
+Ubuntu 22.04 no longer has i386 builds for the packages libibverbs and
+librdmacm. So stop trying to install those packages for the 32-bit
+build.
+
+Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
+---
+ .github/workflows/ci.yml |  2 +-
+ ci/actions-install.sh    | 11 ++++-------
+ 2 files changed, 5 insertions(+), 8 deletions(-)
+
+diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
+index 85104e5a..bdc4db85 100644
+--- a/.github/workflows/ci.yml
++++ b/.github/workflows/ci.yml
+@@ -26,7 +26,7 @@ jobs:
+         - build: macos
+           os: macos-11
+         - build: linux-i686-gcc
+-          os: ubuntu-20.04
++          os: ubuntu-22.04
+           arch: i686
+         - build: android
+           os: ubuntu-22.04
+diff --git a/ci/actions-install.sh b/ci/actions-install.sh
+index 7017de2a..c209a089 100755
+--- a/ci/actions-install.sh
++++ b/ci/actions-install.sh
+@@ -23,26 +23,21 @@ DPKGCFG
+         libcunit1-dev
+         libcurl4-openssl-dev
+         libfl-dev
+-        libibverbs-dev
+         libnuma-dev
+-        librdmacm-dev
+ 	libnfs-dev
+         valgrind
+     )
+     case "${CI_TARGET_ARCH}" in
+         "i686")
+             sudo dpkg --add-architecture i386
+-            opts="--allow-downgrades"
+             pkgs=("${pkgs[@]/%/:i386}")
+             pkgs+=(
+                 gcc-multilib
+                 pkg-config:i386
+                 zlib1g-dev:i386
+-		libpcre2-8-0=10.34-7
+             )
+             ;;
+         "x86_64")
+-            opts=""
+             pkgs+=(
+                 libglusterfs-dev
+                 libgoogle-perftools-dev
+@@ -53,6 +48,8 @@ DPKGCFG
+                 librbd-dev
+                 libtcmalloc-minimal4
+                 nvidia-cuda-dev
++                libibverbs-dev
++                librdmacm-dev
+             )
+ 	    echo "Removing libunwind-14-dev because of conflicts with libunwind-dev"
+ 	    sudo apt remove -y libunwind-14-dev
+@@ -68,8 +65,8 @@ DPKGCFG
+ 
+     echo "Updating APT..."
+     sudo apt-get -qq update
+-    echo "Installing packages..."
+-    sudo apt-get install "$opts" -o APT::Immediate-Configure=false --no-install-recommends -qq -y "${pkgs[@]}"
++    echo "Installing packages... ${pkgs[@]}"
++    sudo apt-get install -o APT::Immediate-Configure=false --no-install-recommends -qq -y "${pkgs[@]}"
+ }
+ 
+ install_linux() {
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0030-test-add-tests-for-lfsr-and-norandommap.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0030-test-add-tests-for-lfsr-and-norandommap.patch
new file mode 100644
index 0000000..fa1d49e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0030-test-add-tests-for-lfsr-and-norandommap.patch
@@ -0,0 +1,143 @@
+From 8d2b6305a6d0497bc6d78832be256380b1691694 Mon Sep 17 00:00:00 2001
+From: Vincent Fu <vincent.fu@samsung.com>
+Date: Tue, 30 Aug 2022 09:59:55 -0400
+Subject: [PATCH] test: add tests for lfsr and norandommap
+
+t0021 checks whether the lfsr random generator actually touches every
+offset.
+
+t0022 checks whether fio touches offsets more than once when
+norandommap=1.
+
+We should have automated tests for basic functionality to detect
+problems early.
+
+Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
+---
+ t/jobs/t0021.fio   | 15 +++++++++++++
+ t/jobs/t0022.fio   | 13 +++++++++++
+ t/run-fio-tests.py | 55 +++++++++++++++++++++++++++++++++++++++++++++-
+ 3 files changed, 82 insertions(+), 1 deletion(-)
+ create mode 100644 t/jobs/t0021.fio
+ create mode 100644 t/jobs/t0022.fio
+
+diff --git a/t/jobs/t0021.fio b/t/jobs/t0021.fio
+new file mode 100644
+index 00000000..47fbae71
+--- /dev/null
++++ b/t/jobs/t0021.fio
+@@ -0,0 +1,15 @@
++# make sure the lfsr random generator actually does touch all the offsets
++#
++# Expected result: offsets are not accessed sequentially and all offsets are touched
++# Buggy result: offsets are accessed sequentially and one or more offsets are missed
++# run with --debug=io or logging to see which offsets are read
++
++[test]
++ioengine=null
++filesize=1M
++rw=randread
++write_bw_log=test
++per_job_logs=0
++log_offset=1
++norandommap=1
++random_generator=lfsr
+diff --git a/t/jobs/t0022.fio b/t/jobs/t0022.fio
+new file mode 100644
+index 00000000..2324571e
+--- /dev/null
++++ b/t/jobs/t0022.fio
+@@ -0,0 +1,13 @@
++# make sure that when we enable norandommap we touch some offsets more than once
++#
++# Expected result: at least one offset is touched more than once
++# Buggy result: each offset is touched only once
++
++[test]
++ioengine=null
++filesize=1M
++rw=randread
++write_bw_log=test
++per_job_logs=0
++log_offset=1
++norandommap=1
+diff --git a/t/run-fio-tests.py b/t/run-fio-tests.py
+index 78f43521..47823761 100755
+--- a/t/run-fio-tests.py
++++ b/t/run-fio-tests.py
+@@ -576,7 +576,7 @@ class FioJobTest_t0019(FioJobTest):
+ 
+ 
+ class FioJobTest_t0020(FioJobTest):
+-    """Test consists of fio test job t0020
++    """Test consists of fio test jobs t0020 and t0021
+     Confirm that almost all offsets were touched non-sequentially"""
+ 
+     def check_result(self):
+@@ -614,6 +614,41 @@ class FioJobTest_t0020(FioJobTest):
+                 self.failure_reason += " missing offset {0}".format(i*4096)
+ 
+ 
++class FioJobTest_t0022(FioJobTest):
++    """Test consists of fio test job t0022"""
++
++    def check_result(self):
++        super(FioJobTest_t0022, self).check_result()
++
++        bw_log_filename = os.path.join(self.test_dir, "test_bw.log")
++        file_data, success = self.get_file(bw_log_filename)
++        log_lines = file_data.split('\n')
++
++        filesize = 1024*1024
++        bs = 4096
++        seq_count = 0
++        offsets = set()
++
++        prev = int(log_lines[0].split(',')[4])
++        for line in log_lines[1:]:
++            offsets.add(prev/bs)
++            if len(line.strip()) == 0:
++                continue
++            cur = int(line.split(',')[4])
++            if cur - prev == bs:
++                seq_count += 1
++            prev = cur
++
++        # 10 is an arbitrary threshold
++        if seq_count > 10:
++            self.passed = False
++            self.failure_reason = "too many ({0}) consecutive offsets".format(seq_count)
++
++        if len(offsets) == filesize/bs:
++            self.passed = False
++            self.failure_reason += " no duplicate offsets found with norandommap=1".format(len(offsets))
++
++
+ class FioJobTest_iops_rate(FioJobTest):
+     """Test consists of fio test job t0009
+     Confirm that job0 iops == 1000
+@@ -973,6 +1008,24 @@ TEST_LIST = [
+         'pre_success':      None,
+         'requirements':     [],
+     },
++    {
++        'test_id':          21,
++        'test_class':       FioJobTest_t0020,
++        'job':              't0021.fio',
++        'success':          SUCCESS_DEFAULT,
++        'pre_job':          None,
++        'pre_success':      None,
++        'requirements':     [],
++    },
++    {
++        'test_id':          22,
++        'test_class':       FioJobTest_t0022,
++        'job':              't0022.fio',
++        'success':          SUCCESS_DEFAULT,
++        'pre_job':          None,
++        'pre_success':      None,
++        'requirements':     [],
++    },
+     {
+         'test_id':          1000,
+         'test_class':       FioExeTest,
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0031-backend-revert-bad-memory-leak-fix.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0031-backend-revert-bad-memory-leak-fix.patch
new file mode 100644
index 0000000..335798c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0031-backend-revert-bad-memory-leak-fix.patch
@@ -0,0 +1,39 @@
+From c060732180c981712f9a6fb7108c28a3c301c2c3 Mon Sep 17 00:00:00 2001
+From: Jens Axboe <axboe@kernel.dk>
+Date: Tue, 30 Aug 2022 10:48:18 -0600
+Subject: [PATCH] backend: revert bad memory leak fix
+
+This essentially reverts the commit mentioned in the fixes line, as it
+causes crashes with using a trigger timeout + command.
+
+Fixes: 807473c36e10 ("fixed memory leak detected by ASAN")
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+---
+ backend.c | 5 -----
+ 1 file changed, 5 deletions(-)
+
+diff --git a/backend.c b/backend.c
+index 375a23e4..fe614f6e 100644
+--- a/backend.c
++++ b/backend.c
+@@ -2451,10 +2451,8 @@ reap:
+ 							strerror(ret));
+ 			} else {
+ 				pid_t pid;
+-				struct fio_file **files;
+ 				void *eo;
+ 				dprint(FD_PROCESS, "will fork\n");
+-				files = td->files;
+ 				eo = td->eo;
+ 				read_barrier();
+ 				pid = fork();
+@@ -2465,9 +2463,6 @@ reap:
+ 					_exit(ret);
+ 				} else if (i == fio_debug_jobno)
+ 					*fio_debug_jobp = pid;
+-				// freeing previously allocated memory for files
+-				// this memory freed MUST NOT be shared between processes, only the pointer itself may be shared within TD
+-				free(files);
+ 				free(eo);
+ 				free(fd);
+ 				fd = NULL;
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0032-Fio-3.32.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0032-Fio-3.32.patch
new file mode 100644
index 0000000..6aa86d1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0032-Fio-3.32.patch
@@ -0,0 +1,23 @@
+From aaad03c6c8a9ef8cc0507a356a9fa2372e1f611b Mon Sep 17 00:00:00 2001
+From: Jens Axboe <axboe@kernel.dk>
+Date: Tue, 30 Aug 2022 10:51:13 -0600
+Subject: [PATCH] Fio 3.32
+
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+---
+ FIO-VERSION-GEN | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/FIO-VERSION-GEN b/FIO-VERSION-GEN
+index 72630dd0..db073818 100755
+--- a/FIO-VERSION-GEN
++++ b/FIO-VERSION-GEN
+@@ -1,7 +1,7 @@
+ #!/bin/sh
+ 
+ GVF=FIO-VERSION-FILE
+-DEF_VER=fio-3.31
++DEF_VER=fio-3.32
+ 
+ LF='
+ '
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio_2022.bb b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio_2022.bb
new file mode 100644
index 0000000..108b2b5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio_2022.bb
@@ -0,0 +1,77 @@
+SUMMARY = "Filesystem and hardware benchmark and stress tool"
+DESCRIPTION = "fio is an I/O tool meant to be used both for benchmark and \
+stress/hardware verification. It has support for a number of I/O engines, \
+I/O priorities (for newer Linux kernels), rate I/O, forked or threaded jobs, \
+and much more. It can work on block devices as well as files. fio accepts \
+job descriptions in a simple-to-understand text format. Several example job \
+files are included. fio displays all sorts of I/O performance information."
+HOMEPAGE = "http://freecode.com/projects/fio"
+SECTION = "console/tests"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+DEPENDS = "libaio zlib coreutils-native"
+DEPENDS += "${@bb.utils.contains('MACHINE_FEATURES', 'pmem', 'pmdk', '', d)}"
+RDEPENDS:${PN} = "python3-core bash"
+
+PACKAGECONFIG_NUMA = "numa"
+# ARM does not currently support NUMA
+PACKAGECONFIG_NUMA:arm = ""
+PACKAGECONFIG_NUMA:armeb = ""
+
+PACKAGECONFIG ??= "${PACKAGECONFIG_NUMA}"
+PACKAGECONFIG[numa] = ",--disable-numa,numactl"
+
+SRCREV = "6e44f31b9241cdc56d0857fb10ddb2ec40faa541"
+SRC_URI = "git://git.kernel.dk/fio.git;branch=master \
+           file://0001-Fio-3.31.patch \
+           file://0002-lib-rand-Enhance-__fill_random_buf-using-the-multi-r.patch \
+           file://0003-lib-rand-get-rid-of-unused-MAX_SEED_BUCKETS.patch \
+           file://0004-ioengines-merge-filecreate-filestat-filedelete-engin.patch \
+           file://0005-engines-http-Add-storage-class-option-for-s3.patch \
+           file://0006-engines-http-Add-s3-crypto-options-for-s3.patch \
+           file://0007-doc-Add-usage-and-example-about-s3-storage-class-and.patch \
+           file://0008-README-link-to-GitHub-releases-for-Windows.patch \
+           file://0009-engines-xnvme-fix-segfault-issue-with-xnvme-ioengine.patch \
+           file://0010-doc-update-fio-doc-for-xnvme-engine.patch \
+           file://0011-test-add-latency-test-using-posixaio-ioengine.patch \
+           file://0012-test-fix-hash-for-t0016.patch \
+           file://0013-doc-get-rid-of-trailing-whitespace.patch \
+           file://0014-doc-clarify-that-I-O-errors-may-go-unnoticed-without.patch \
+           file://0015-Revert-Minor-style-fixups.patch \
+           file://0016-Revert-Fix-multithread-issues-when-operating-on-a-si.patch \
+           file://0017-Add-wait-for-handling-SIGBREAK.patch \
+           file://0018-engines-io_uring-pass-back-correct-error-value-when-.patch \
+           file://0019-Enable-CPU-affinity-support-on-Android.patch \
+           file://0020-io_uring-Replace-pthread_self-with-s-tid.patch \
+           file://0021-engines-io_uring-delete-debug-code.patch \
+           file://0022-t-io_uring-prep-for-including-engines-nvme.h-in-t-io.patch \
+           file://0023-t-io_uring-add-support-for-async-passthru.patch \
+           file://0024-t-io_uring-fix-64-bit-cast-on-32-bit-archs.patch \
+           file://0025-test-add-basic-test-for-io_uring-ioengine.patch \
+           file://0026-t-io_uring-remove-duplicate-definition-of-gettid.patch \
+           file://0027-test-add-some-tests-for-seq-and-rand-offsets.patch \
+           file://0028-test-use-Ubuntu-22.04-for-64-bit-tests.patch \
+           file://0029-test-get-32-bit-Ubuntu-22.04-build-working.patch \
+           file://0030-test-add-tests-for-lfsr-and-norandommap.patch \
+           file://0031-backend-revert-bad-memory-leak-fix.patch \
+           file://0032-Fio-3.32.patch \
+           "
+
+S = "${WORKDIR}/git"
+
+# avoids build breaks when using no-static-libs.inc
+DISABLE_STATIC = ""
+
+EXTRA_OEMAKE = "CC='${CC}' LDFLAGS='${LDFLAGS}'"
+EXTRA_OECONF = "${@bb.utils.contains('MACHINE_FEATURES', 'x86', '--disable-optimizations', '', d)}"
+
+do_configure() {
+    ./configure ${EXTRA_OECONF}
+}
+
+do_install() {
+    oe_runmake install DESTDIR=${D} prefix=${prefix} mandir=${mandir}
+    install -d ${D}/${docdir}/${PN}
+    cp -R --no-dereference --preserve=mode,links -v ${S}/examples ${D}/${docdir}/${PN}/
+}
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio_3.32.bb b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio_3.32.bb
deleted file mode 100644
index 90e2834..0000000
--- a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio_3.32.bb
+++ /dev/null
@@ -1,44 +0,0 @@
-SUMMARY = "Filesystem and hardware benchmark and stress tool"
-DESCRIPTION = "fio is an I/O tool meant to be used both for benchmark and \
-stress/hardware verification. It has support for a number of I/O engines, \
-I/O priorities (for newer Linux kernels), rate I/O, forked or threaded jobs, \
-and much more. It can work on block devices as well as files. fio accepts \
-job descriptions in a simple-to-understand text format. Several example job \
-files are included. fio displays all sorts of I/O performance information."
-HOMEPAGE = "http://freecode.com/projects/fio"
-SECTION = "console/tests"
-LICENSE = "GPL-2.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
-
-DEPENDS = "libaio zlib coreutils-native"
-DEPENDS += "${@bb.utils.contains('MACHINE_FEATURES', 'pmem', 'pmdk', '', d)}"
-RDEPENDS:${PN} = "python3-core bash"
-
-PACKAGECONFIG_NUMA = "numa"
-# ARM does not currently support NUMA
-PACKAGECONFIG_NUMA:arm = ""
-PACKAGECONFIG_NUMA:armeb = ""
-
-PACKAGECONFIG ??= "${PACKAGECONFIG_NUMA}"
-PACKAGECONFIG[numa] = ",--disable-numa,numactl"
-
-SRCREV = "db7fc8d864dc4fb607a0379333a0db60431bd649"
-SRC_URI = "git://git.kernel.dk/fio.git;branch=master"
-
-S = "${WORKDIR}/git"
-
-# avoids build breaks when using no-static-libs.inc
-DISABLE_STATIC = ""
-
-EXTRA_OEMAKE = "CC='${CC}' LDFLAGS='${LDFLAGS}'"
-EXTRA_OECONF = "${@bb.utils.contains('MACHINE_FEATURES', 'x86', '--disable-optimizations', '', d)}"
-
-do_configure() {
-    ./configure ${EXTRA_OECONF}
-}
-
-do_install() {
-    oe_runmake install DESTDIR=${D} prefix=${prefix} mandir=${mandir}
-    install -d ${D}/${docdir}/${PN}
-    cp -R --no-dereference --preserve=mode,links -v ${S}/examples ${D}/${docdir}/${PN}/
-}
diff --git a/meta-openembedded/meta-oe/recipes-bsp/bolt/bolt_0.9.5.bb b/meta-openembedded/meta-oe/recipes-bsp/bolt/bolt_0.9.6.bb
similarity index 92%
rename from meta-openembedded/meta-oe/recipes-bsp/bolt/bolt_0.9.5.bb
rename to meta-openembedded/meta-oe/recipes-bsp/bolt/bolt_0.9.6.bb
index 0cc9d85..860cb83 100644
--- a/meta-openembedded/meta-oe/recipes-bsp/bolt/bolt_0.9.5.bb
+++ b/meta-openembedded/meta-oe/recipes-bsp/bolt/bolt_0.9.6.bb
@@ -8,7 +8,7 @@
 REQUIRED_DISTRO_FEATURES = "polkit"
 
 SRC_URI = "git://gitlab.freedesktop.org/bolt/bolt.git;protocol=https;branch=master"
-SRCREV = "5a8a5866a847561566499847d46a97c612b4e6dd"
+SRCREV = "f03c50b22ae3fda26711ddabd91e2c5dd8103478"
 
 S = "${WORKDIR}/git"
 
diff --git a/meta-openembedded/meta-oe/recipes-bsp/ledmon/ledmon/0001-Don-t-build-with-Werror-to-fix-compile-error.patch b/meta-openembedded/meta-oe/recipes-bsp/ledmon/ledmon/0001-Don-t-build-with-Werror-to-fix-compile-error.patch
deleted file mode 100644
index 09f4993..0000000
--- a/meta-openembedded/meta-oe/recipes-bsp/ledmon/ledmon/0001-Don-t-build-with-Werror-to-fix-compile-error.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-Subject: [PATCH] Don't build with -Werror to fix compile error.
-
-|   550 |  _dump_sgpio_amd(&amd_reg->amd);
-|       |                  ^~~~~~~~~~~~~
-| amd_sgpio.c: In function '_write_amd_register':
-| amd_sgpio.c:558:18: error: taking address of packed member of 'struct amd_register' may result in an unaligned pointer value [-Werror=address-of-packed-member]
-
-Upstream-Status: Submitted
-https://github.com/intel/ledmon/pull/48/commits
-
-Signed-off-by: Zheng Ruoqin <zhengrq.fnst@cn.fujitsu.com>
----
- configure.ac | 1 -
- 1 file changed, 1 deletion(-)
-
-diff --git a/configure.ac b/configure.ac
-index 7bc20f8..7e01bd5 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -22,7 +22,6 @@ AX_AM_CFLAGS_ADD([-Werror=format-truncation=1])
- AX_AM_CFLAGS_ADD([-Werror=shift-negative-value])
- AX_AM_CFLAGS_ADD([-Werror=alloca])
- AX_AM_CFLAGS_ADD([-Werror=missing-field-initializers])
--AX_AM_CFLAGS_ADD([-Werror])
- AX_AM_CFLAGS_ADD([-Werror=format-signedness])
- 
- AC_SUBST([AM_CFLAGS])
--- 
-2.7.4
-
diff --git a/meta-openembedded/meta-oe/recipes-bsp/ledmon/ledmon/0001-fix-build-with-clang.patch b/meta-openembedded/meta-oe/recipes-bsp/ledmon/ledmon/0001-fix-build-with-clang.patch
new file mode 100644
index 0000000..f1e1d6f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/ledmon/ledmon/0001-fix-build-with-clang.patch
@@ -0,0 +1,90 @@
+From 28fd86fb4e18af181174176530a80672de4449d2 Mon Sep 17 00:00:00 2001
+From: alperak <alperyasinak1@gmail.com>
+Date: Sat, 18 Nov 2023 12:27:17 +0300
+Subject: [PATCH] fix build with clang
+
+struct ibpi2value is a structure which contains 2 unsigned integers.  In
+a number of cases the code was not initializing a value for the last value
+in the pair in struct ibpi2value ibpi_to_attention.  This was raised when
+using clang compiler.
+
+vmdssd.c:49:27: error: missing field 'value' initializer
+[-Werror,-Wmissing-field-initializers]
+        {LED_IBPI_PATTERN_UNKNOWN}
+
+dellssd.c:74:27: error: missing field 'value' initializer
+[-Werror,-Wmissing-field-initializers]
+        {LED_IBPI_PATTERN_UNKNOWN}
+
+amd_ipmi.c:57:27: error: missing field 'value'
+initializer [-Werror,-Wmissing-field-initializers]
+        {LED_IBPI_PATTERN_UNKNOWN}
+
+npem.c:76:27: error: missing field 'value'
+initializer [-Werror,-Wmissing-field-initializers]
+        {LED_IBPI_PATTERN_UNKNOWN}
+
+Upstream-Status: Submitted [https://github.com/intel/ledmon/pull/179]
+Signed-off-by: alperak <alperyasinak1@gmail.com>
+---
+ src/amd_ipmi.c | 2 +-
+ src/dellssd.c  | 2 +-
+ src/npem.c     | 2 +-
+ src/vmdssd.c   | 2 +-
+ 4 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/src/amd_ipmi.c b/src/amd_ipmi.c
+index 726f77d..ad36e9e 100644
+--- a/src/amd_ipmi.c
++++ b/src/amd_ipmi.c
+@@ -53,7 +53,7 @@ const struct ibpi2value ibpi2amd_ipmi[] = {
+ 	{IBPI_PATTERN_FAILED_ARRAY, 0x45},
+ 	{IBPI_PATTERN_REBUILD, 0x46},
+ 	{IBPI_PATTERN_HOTSPARE, 0x47},
+-	{IBPI_PATTERN_UNKNOWN}
++	{IBPI_PATTERN_UNKNOWN, 0}
+ };
+ 
+ #define MG9098_CHIP_ID_REG	0x63
+diff --git a/src/dellssd.c b/src/dellssd.c
+index 3c10ec7..7f02ea1 100644
+--- a/src/dellssd.c
++++ b/src/dellssd.c
+@@ -71,7 +71,7 @@ static const struct ibpi2value ibpi2ssd[] = {
+ 	{IBPI_PATTERN_FAILED_DRIVE, BP_FAULT | BP_ONLINE},
+ 	{IBPI_PATTERN_LOCATE, BP_IDENTIFY | BP_ONLINE},
+ 	{IBPI_PATTERN_LOCATE_OFF, BP_ONLINE},
+-	{IBPI_PATTERN_UNKNOWN}
++	{IBPI_PATTERN_UNKNOWN, 0}
+ };
+ 
+ #define DELL_OEM_NETFN                      0x30
+diff --git a/src/npem.c b/src/npem.c
+index c21276d..3499169 100644
+--- a/src/npem.c
++++ b/src/npem.c
+@@ -72,7 +72,7 @@ const struct ibpi2value ibpi_to_npem_capability[] = {
+ 	{IBPI_PATTERN_FAILED_DRIVE, PCI_NPEM_FAIL_CAP},
+ 	{IBPI_PATTERN_LOCATE, PCI_NPEM_LOCATE_CAP},
+ 	{IBPI_PATTERN_LOCATE_OFF, PCI_NPEM_OK_CAP},
+-	{IBPI_PATTERN_UNKNOWN}
++	{IBPI_PATTERN_UNKNOWN, 0}
+ };
+ 
+ static struct pci_access *get_pci_access()
+diff --git a/src/vmdssd.c b/src/vmdssd.c
+index 51af591..9c63d90 100644
+--- a/src/vmdssd.c
++++ b/src/vmdssd.c
+@@ -45,7 +45,7 @@ struct ibpi2value ibpi_to_attention[] = {
+ 	{IBPI_PATTERN_REBUILD, ATTENTION_REBUILD},
+ 	{IBPI_PATTERN_LOCATE_OFF, ATTENTION_OFF},
+ 	{IBPI_PATTERN_ONESHOT_NORMAL, ATTENTION_OFF},
+-	{IBPI_PATTERN_UNKNOWN}
++	{IBPI_PATTERN_UNKNOWN, 0}
+ };
+ 
+ #define SYSFS_PCIEHP         "/sys/module/pciehp"
+-- 
+2.25.1
+
diff --git a/meta-openembedded/meta-oe/recipes-bsp/ledmon/ledmon_0.97.bb b/meta-openembedded/meta-oe/recipes-bsp/ledmon/ledmon_0.97.bb
new file mode 100644
index 0000000..88a6e5b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/ledmon/ledmon_0.97.bb
@@ -0,0 +1,34 @@
+SUMMARY = "Intel(R) Enclosure LED Utilities"
+
+DESCRIPTION = "The utilities are designed primarily to be used on storage servers \
+ utilizing MD devices (aka Linux Software RAID) for RAID arrays.\
+"
+HOMEPAGE = "https://github.com/intel/ledmon"
+
+LICENSE = "LGPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=4fbd65380cdd255951079008b364516c"
+
+DEPENDS = "sg3-utils udev pciutils"
+
+inherit autotools systemd pkgconfig
+
+SYSTEMD_SERVICE:${PN} = "ledmon.service"
+
+SRC_URI = "git://github.com/intel/ledmon;branch=master;protocol=https \
+	   file://0002-include-sys-select.h-and-sys-types.h.patch \
+	   file://0001-fix-build-with-clang.patch"
+
+SRCREV = "b0edae14e8660b80ffe0384354038a9f62e2978d"
+
+COMPATIBLE_HOST = "(i.86|x86_64).*-linux"
+COMPATIBLE_HOST:libc-musl = "null"
+
+S = "${WORKDIR}/git"
+
+EXTRA_OECONF += "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '--enable-systemd', '', d)}"
+
+EXTRA_OEMAKE = "CC='${CC}' LDFLAGS='${LDFLAGS}' CFLAGS='${CFLAGS}'"
+
+# The ledmon sources include headers in ${S}/config to build but not in CFLAGS. 
+# We need to add this include path in CFLAGS.
+CFLAGS += "-I${S}/config"
diff --git a/meta-openembedded/meta-oe/recipes-bsp/ledmon/ledmon_git.bb b/meta-openembedded/meta-oe/recipes-bsp/ledmon/ledmon_git.bb
deleted file mode 100644
index dbfd1e7..0000000
--- a/meta-openembedded/meta-oe/recipes-bsp/ledmon/ledmon_git.bb
+++ /dev/null
@@ -1,41 +0,0 @@
-SUMMARY = "Intel(R) Enclosure LED Utilities"
-
-DESCRIPTION = "The utilities are designed primarily to be used on storage servers \
- utilizing MD devices (aka Linux Software RAID) for RAID arrays.\
-"
-HOMEPAGE = "https://github.com/intel/ledmon"
-
-LICENSE = "GPL-2.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3 \
-"
-
-DEPENDS = "sg3-utils udev"
-
-inherit autotools systemd
-
-SYSTEMD_SERVICE:${PN} = "ledmon.service"
-
-# 0.93
-SRC_URI = "git://github.com/intel/ledmon;branch=master;protocol=https \
-           file://0002-include-sys-select.h-and-sys-types.h.patch \
-           file://0001-Don-t-build-with-Werror-to-fix-compile-error.patch \
-          "
-
-SRCREV = "1d72f9cb5c9163b2ecdf19709935720e65f5b90e"
-
-COMPATIBLE_HOST = "(i.86|x86_64).*-linux"
-COMPATIBLE_HOST:libc-musl = "null"
-
-S = "${WORKDIR}/git"
-EXTRA_OEMAKE = "CC='${CC}' LDFLAGS='${LDFLAGS}' CFLAGS='${CFLAGS}'"
-
-# The ledmon sources include headers in ${S}/config to build but not in CFLAGS. 
-# We need to add this include path in CFLAGS.
-CFLAGS += "-I${S}/config"
-
-do_install:append() {
-        if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
-	        install -d ${D}${systemd_unitdir}/system
-	        install -m 0755 ${S}/systemd/ledmon.service ${D}${systemd_unitdir}/system
-        fi
-}
diff --git a/meta-openembedded/meta-oe/recipes-bsp/lsscsi/lsscsi_0.32.bb b/meta-openembedded/meta-oe/recipes-bsp/lsscsi/lsscsi_030.bb
similarity index 71%
rename from meta-openembedded/meta-oe/recipes-bsp/lsscsi/lsscsi_0.32.bb
rename to meta-openembedded/meta-oe/recipes-bsp/lsscsi/lsscsi_030.bb
index 9e6eb7b..9d3d7d8 100644
--- a/meta-openembedded/meta-oe/recipes-bsp/lsscsi/lsscsi_0.32.bb
+++ b/meta-openembedded/meta-oe/recipes-bsp/lsscsi/lsscsi_030.bb
@@ -6,8 +6,8 @@
 
 SRC_URI = "http://sg.danny.cz/scsi/${BP}.tgz"
 
-SRC_URI[sha256sum] = "0a800e9e94dca2ab702d65d72777ae8cae078e3d74d0bcbed64ba0849e8029a1"
+SRC_URI[sha256sum] = "619a2187405f02c5f57682f3478bffc75326803cd08839e39d434250c5518b15"
 
 inherit autotools
 
-S = "${WORKDIR}/lsscsi-${PV}"
+S = "${WORKDIR}/lsscsi-${PV}r154"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/gensio/gensio_2.7.6.bb b/meta-openembedded/meta-oe/recipes-connectivity/gensio/gensio_2.7.7.bb
similarity index 94%
rename from meta-openembedded/meta-oe/recipes-connectivity/gensio/gensio_2.7.6.bb
rename to meta-openembedded/meta-oe/recipes-connectivity/gensio/gensio_2.7.7.bb
index 21b9f3f..3deab25 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/gensio/gensio_2.7.6.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/gensio/gensio_2.7.7.bb
@@ -5,7 +5,7 @@
                     file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
                     "
 
-SRCREV = "7a26bcec16453d01790b41d9d5495f40cc668bb6"
+SRCREV = "6af40181c33bf97bde8cb99cccc4c2168abcd24e"
 
 SRC_URI = "git://github.com/cminyard/gensio;protocol=https;branch=master"
 
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/irssi/irssi_1.4.4.bb b/meta-openembedded/meta-oe/recipes-connectivity/irssi/irssi_1.4.5.bb
similarity index 87%
rename from meta-openembedded/meta-oe/recipes-connectivity/irssi/irssi_1.4.4.bb
rename to meta-openembedded/meta-oe/recipes-connectivity/irssi/irssi_1.4.5.bb
index 52de589..5b5af30 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/irssi/irssi_1.4.4.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/irssi/irssi_1.4.5.bb
@@ -6,7 +6,7 @@
 DEPENDS = "glib-2.0 ncurses openssl"
 
 SRC_URI = "https://github.com/${BPN}/${BPN}/releases/download/${PV}/${BP}.tar.xz"
-SRC_URI[sha256sum] = "fefe9ec8c7b1475449945c934a2360ab12693454892be47a6d288c63eb107ead"
+SRC_URI[sha256sum] = "72a951cb0ad622785a8962801f005a3a412736c7e7e3ce152f176287c52fe062"
 
 UPSTREAM_CHECK_URI = "https://github.com/${BPN}/${BPN}/releases"
 
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libmbim/libmbim_1.28.4.bb b/meta-openembedded/meta-oe/recipes-connectivity/libmbim/libmbim_1.31.1.bb
similarity index 89%
rename from meta-openembedded/meta-oe/recipes-connectivity/libmbim/libmbim_1.28.4.bb
rename to meta-openembedded/meta-oe/recipes-connectivity/libmbim/libmbim_1.31.1.bb
index a35d989..7001d3e 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/libmbim/libmbim_1.28.4.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libmbim/libmbim_1.31.1.bb
@@ -11,8 +11,8 @@
 
 inherit meson pkgconfig bash-completion gobject-introspection
 
-SRCREV = "7f1c7907c4654ba5c619a635cef5475ca161d027"
-SRC_URI = "git://gitlab.freedesktop.org/mobile-broadband/libmbim.git;protocol=https;branch=mbim-1-28"
+SRCREV = "db0f5a09d4d29145620b81df0fdd8f4786a8fb59"
+SRC_URI = "git://gitlab.freedesktop.org/mobile-broadband/libmbim.git;protocol=https;branch=main"
 
 S = "${WORKDIR}/git"
 
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libmtp/libmtp_1.1.20.bb b/meta-openembedded/meta-oe/recipes-connectivity/libmtp/libmtp_1.1.21.bb
similarity index 95%
rename from meta-openembedded/meta-oe/recipes-connectivity/libmtp/libmtp_1.1.20.bb
rename to meta-openembedded/meta-oe/recipes-connectivity/libmtp/libmtp_1.1.21.bb
index 41fc46c..94cbef8 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/libmtp/libmtp_1.1.20.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libmtp/libmtp_1.1.21.bb
@@ -19,7 +19,7 @@
 
 SRC_URI = "https://github.com/${BPN}/${BPN}/releases/download/v${PV}/${BP}.tar.gz"
 SRC_URI:append:class-target = " file://0001-Use-native-mtp-hotplug.patch"
-SRC_URI[sha256sum] = "c9191dac2f5744cf402e08641610b271f73ac21a3c802734ec2cedb2c6bc56d0"
+SRC_URI[sha256sum] = "f4c1ceb3df020a6cb851110f620c14fe399518c494ed252039cbfb4e34335135"
 
 inherit autotools pkgconfig lib_package
 
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libqmi/libqmi_1.32.4.bb b/meta-openembedded/meta-oe/recipes-connectivity/libqmi/libqmi_1.34.0.bb
similarity index 91%
rename from meta-openembedded/meta-oe/recipes-connectivity/libqmi/libqmi_1.32.4.bb
rename to meta-openembedded/meta-oe/recipes-connectivity/libqmi/libqmi_1.34.0.bb
index 7b7a3b2..2cb843a 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/libqmi/libqmi_1.32.4.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libqmi/libqmi_1.34.0.bb
@@ -12,8 +12,8 @@
 
 inherit meson pkgconfig bash-completion gobject-introspection
 
-SRCREV = "6e248aceb66f53b467b343bca1c467a8211dd30d"
-SRC_URI = "git://gitlab.freedesktop.org/mobile-broadband/libqmi.git;protocol=https;branch=qmi-1-32"
+SRCREV = "3f07d6e5b4677558543b3b4484ea88ad92257e92"
+SRC_URI = "git://gitlab.freedesktop.org/mobile-broadband/libqmi.git;protocol=https;branch=qmi-1-34"
 
 S = "${WORKDIR}/git"
 
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libtorrent/libtorrent_git.bb b/meta-openembedded/meta-oe/recipes-connectivity/libtorrent/libtorrent_git.bb
index fec0557..c235547 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/libtorrent/libtorrent_git.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libtorrent/libtorrent_git.bb
@@ -6,16 +6,17 @@
 
 DEPENDS = "zlib libsigc++-2.0 openssl cppunit"
 
+PV = "0.13.8+git"
+
 SRC_URI = "git://github.com/rakshasa/libtorrent;branch=master;protocol=https"
 SRCREV = "e60f222241319aaae482789517ad00ae9344bd13"
 
+UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>\d+(\.\d+)+)"
+
 CVE_STATUS[CVE-2009-1760] = "backported-patch: patched in our product"
 
-PV = "0.13.8+git${SRCPV}"
-
 S = "${WORKDIR}/git"
 
-
 PACKAGECONFIG ??= "instrumentation aligned"
 
 PACKAGECONFIG:remove:mipsarch = "instrumentation"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libwebsockets/libwebsockets/0001-Fix-Werror-enum-int-mismatch-in-lws_tls_server_abort.patch b/meta-openembedded/meta-oe/recipes-connectivity/libwebsockets/libwebsockets/0001-Fix-Werror-enum-int-mismatch-in-lws_tls_server_abort.patch
deleted file mode 100644
index 41d004d..0000000
--- a/meta-openembedded/meta-oe/recipes-connectivity/libwebsockets/libwebsockets/0001-Fix-Werror-enum-int-mismatch-in-lws_tls_server_abort.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From 722e44cb5b74cae206f47a6dc0d985eba8ed1b2e Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Thu, 26 Jan 2023 17:17:49 -0800
-Subject: [PATCH] Fix -Werror=enum-int-mismatch in
- lws_tls_server_abort_connection()
-
-GCC 13 is findinf this function signature mismatch.
-
-../git/lib/tls/openssl/openssl-server.c:713:1: error: conflicting types for 'lws_tls_server_abort_connection' due to enum/integer mismatch; have 'int(struct lws *)' [-Werror=enum-int-mismatch]
-
-Upstream-Status: Submitted [https://github.com/warmcat/libwebsockets/pull/2824]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- lib/tls/openssl/openssl-server.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/lib/tls/openssl/openssl-server.c b/lib/tls/openssl/openssl-server.c
-index f2e77324f..43d65e030 100644
---- a/lib/tls/openssl/openssl-server.c
-+++ b/lib/tls/openssl/openssl-server.c
-@@ -699,7 +699,7 @@ lws_tls_server_new_nonblocking(struct lws *wsi, lws_sockfd_type accept_fd)
- 	return 0;
- }
- 
--int
-+enum lws_ssl_capable_status
- lws_tls_server_abort_connection(struct lws *wsi)
- {
- 	if (wsi->tls.use_ssl)
--- 
-2.39.1
-
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libwebsockets/libwebsockets_4.3.2.bb b/meta-openembedded/meta-oe/recipes-connectivity/libwebsockets/libwebsockets_4.3.3.bb
similarity index 94%
rename from meta-openembedded/meta-oe/recipes-connectivity/libwebsockets/libwebsockets_4.3.2.bb
rename to meta-openembedded/meta-oe/recipes-connectivity/libwebsockets/libwebsockets_4.3.3.bb
index 5e6069f..4518e2f 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/libwebsockets/libwebsockets_4.3.2.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libwebsockets/libwebsockets_4.3.3.bb
@@ -4,11 +4,11 @@
 LIC_FILES_CHKSUM = "file://LICENSE;md5=382bfdf329e774859fd401eaf850d29b"
 
 DEPENDS = "zlib"
+DEPENDS:append:class-native = " libcap-native"
 
 S = "${WORKDIR}/git"
-SRCREV = "b0a749c8e7a8294b68581ce4feac0e55045eb00b"
-SRC_URI = "git://github.com/warmcat/libwebsockets.git;protocol=https;branch=v4.3-stable \
-           file://0001-Fix-Werror-enum-int-mismatch-in-lws_tls_server_abort.patch"
+SRCREV = "4415e84c095857629863804e941b9e1c2e9347ef"
+SRC_URI = "git://github.com/warmcat/libwebsockets.git;protocol=https;branch=v4.3-stable"
 
 UPSTREAM_CHECK_URI = "https://github.com/warmcat/${BPN}/releases"
 UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>\d+(\.\d+)+)"
@@ -61,3 +61,5 @@
 
 # Avoid absolute paths to end up in the sysroot.
 SSTATE_SCAN_FILES += "*.cmake"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/0001-include-string.h-for-strncpy.patch b/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/0001-include-string.h-for-strncpy.patch
index 60f2079..ae54469 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/0001-include-string.h-for-strncpy.patch
+++ b/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/0001-include-string.h-for-strncpy.patch
@@ -1,4 +1,4 @@
-From d49b4fb8063ecd89617587e5ea566cc9da9393ef Mon Sep 17 00:00:00 2001
+From ecfc8e287eb6811e42c4e2800a913822f554d7c8 Mon Sep 17 00:00:00 2001
 From: Khem Raj <raj.khem@gmail.com>
 Date: Wed, 31 Aug 2022 19:09:18 -0700
 Subject: [PATCH] include string.h for strncpy()
@@ -6,12 +6,13 @@
 Upstream-Status: Pending
 
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
 ---
  interface.c | 1 +
  1 file changed, 1 insertion(+)
 
 diff --git a/interface.c b/interface.c
-index 65bdff0..5228db9 100644
+index 29229ad..9a83c36 100644
 --- a/interface.c
 +++ b/interface.c
 @@ -5,6 +5,7 @@
@@ -22,6 +23,3 @@
  #include "interface.h"
  
  struct interface {
--- 
-2.37.3
-
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/0001-makefile-use-conditional-assignment-for-KBUILD_OUTPU.patch b/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/0001-makefile-use-conditional-assignment-for-KBUILD_OUTPU.patch
deleted file mode 100644
index fb51906..0000000
--- a/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/0001-makefile-use-conditional-assignment-for-KBUILD_OUTPU.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From dfd38cb29c0768692f886d3ab9158bd2b3132582 Mon Sep 17 00:00:00 2001
-From: Changqing Li <changqing.li@windriver.com>
-Date: Tue, 22 Nov 2022 15:20:48 +0800
-Subject: [PATCH] makefile: use conditional assignment for KBUILD_OUTPUT
-
-Refer [1],from make 4.4, all variables that are marked as export will
-also be passed to the shell started by the shell function. use "=" will
-make KBUILD_OUTPUT always empty for shell function, use "?=" to make
-"export KBUILD_OUTPUT" in enrironment can work.
-
-[snip of 4.4 NEWS]
-* WARNING: Backward-incompatibility!
-   Previously makefile variables marked as export were not exported to commands
-   started by the $(shell ...) function.  Now, all exported variables are
-   exported to $(shell ...).
-[snip]
-
-[1] https://git.savannah.gnu.org/cgit/make.git/tree/NEWS?h=4.4&id=ed493f6c9116cc217b99c2cfa6a95f15803235a2#n74
-
-Upstream-Status: Submitted [linuxptp-devel@lists.sourceforge.net]
-
-Signed-off-by: Changqing Li <changqing.li@windriver.com>
----
- makefile | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/makefile b/makefile
-index 529d8a0..3db60fa 100644
---- a/makefile
-+++ b/makefile
-@@ -15,7 +15,7 @@
- # with this program; if not, write to the Free Software Foundation, Inc.,
- # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- 
--KBUILD_OUTPUT =
-+KBUILD_OUTPUT ?=
- 
- DEBUG	=
- CC	?= $(CROSS_COMPILE)gcc
--- 
-2.25.1
-
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/0002-linuxptp-Use-CC-in-incdefs.sh.patch b/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/0002-linuxptp-Use-CC-in-incdefs.sh.patch
new file mode 100644
index 0000000..e6a3386
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/0002-linuxptp-Use-CC-in-incdefs.sh.patch
@@ -0,0 +1,34 @@
+From 2cc19a679ec37715df546dd9f00d8d9b0ab20059 Mon Sep 17 00:00:00 2001
+From: Luca Fancellu <luca.fancellu@arm.com>
+Date: Wed, 18 Oct 2023 11:10:18 +0100
+Subject: [PATCH] linuxptp: Use ${CC} in incdefs.sh
+
+The Makefile is defining CC and incdefs.sh is using
+${CROSS_COMPILE}cpp inside it, allowing both to use different
+compilers depending on what the user pass during make invocation
+as CC.
+
+Align them using ${CC} also inside incdefs.sh
+
+Signed-off-by: Luca Fancellu <luca.fancellu@arm.com>
+Upstream-Status: Pending
+---
+ incdefs.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/incdefs.sh b/incdefs.sh
+index a9e94f777f6b..391e63c7fac6 100755
+--- a/incdefs.sh
++++ b/incdefs.sh
+@@ -27,7 +27,7 @@ user_flags()
+ 	printf " -D_GNU_SOURCE"
+ 
+ 	# Get list of directories searched for header files.
+-	dirs=$(echo "" | ${CROSS_COMPILE}cpp -Wp,-v 2>&1 >/dev/null | grep ^" /")
++	dirs=$(${CC} -E -Wp,-v -xc /dev/null 2>&1 >/dev/null | grep ^" /")
+ 
+ 	# Look for clock_adjtime().
+ 	for d in $dirs; do
+-- 
+2.34.1
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/Use-cross-cpp-in-incdefs.patch b/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/Use-cross-cpp-in-incdefs.patch
deleted file mode 100644
index 8760886..0000000
--- a/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/Use-cross-cpp-in-incdefs.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From 8a4cad5e2f2cbb6a34bdc6e877fe499502b8c4c8 Mon Sep 17 00:00:00 2001
-From: Marcel Ziswiler <marcel.ziswiler@toradex.com>
-Date: Fri, 23 Dec 2016 18:12:29 +0100
-Subject: [PATCH] linuxptp: Use cross cpp in incdefs
-
-Use cross cpp incdefs.sh shell script since we are doing cross compiling
-we need to ensure we use correct setttings from toolchain
-
-Upstream-Status: Inappropriate [OE-Specific]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
-
- makefile | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/incdefs.sh
-+++ b/incdefs.sh
-@@ -27,7 +27,7 @@ user_flags()
- 	printf " -D_GNU_SOURCE"
- 
- 	# Get list of directories searched for header files.
--	dirs=$(echo "" | ${CROSS_COMPILE}cpp -Wp,-v 2>&1 >/dev/null | grep ^" /")
-+	dirs=$(${CPP} -Wp,-v -xc /dev/null 2>&1 >/dev/null | grep ^" /")
- 
- 	# Look for clock_adjtime().
- 	for d in $dirs; do
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/build-Allow-CC-and-prefix-to-be-overriden.patch b/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/build-Allow-CC-and-prefix-to-be-overriden.patch
deleted file mode 100644
index 55ce4c9..0000000
--- a/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/build-Allow-CC-and-prefix-to-be-overriden.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From af485c638c61fa883212ea424e676fbf90bee594 Mon Sep 17 00:00:00 2001
-From: Otavio Salvador <otavio@ossystems.com.br>
-Date: Tue, 1 Jul 2014 17:37:31 -0300
-Subject: [PATCH] build: Allow CC and prefix to be overriden
-
-Upstream-Status: Pending
-
-Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
----
- makefile |    4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/makefile b/makefile
-index 22e7d0d..809cc8f 100644
---- a/makefile
-+++ b/makefile
-@@ -18,7 +18,7 @@
- KBUILD_OUTPUT =
- 
- DEBUG	=
--CC	= $(CROSS_COMPILE)gcc
-+CC	?= $(CROSS_COMPILE)gcc
- VER     = -DVER=$(version)
- CFLAGS	= -Wall $(VER) $(incdefs) $(DEBUG) $(EXTRA_CFLAGS)
- LDLIBS	= -lm -lrt -pthread $(EXTRA_LDFLAGS)
-@@ -43,7 +43,7 @@ incdefs := $(shell $(srcdir)/incdefs.sh)
- version := $(shell $(srcdir)/version.sh $(srcdir))
- VPATH	= $(srcdir)
- 
--prefix	= /usr/local
-+prefix	?= /usr/local
- sbindir	= $(prefix)/sbin
- mandir	= $(prefix)/man
- man8dir	= $(mandir)/man8
--- 
-1.7.10.4
-
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/systemd/phc2sys@.service.in b/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/systemd/phc2sys@.service.in
new file mode 100644
index 0000000..f66dd2d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/systemd/phc2sys@.service.in
@@ -0,0 +1,13 @@
+[Unit]
+Description=Synchronize system clock or PTP hardware clock (PHC)
+Documentation=man:phc2sys
+Requires=ptp4l.service
+After=ptp4l.service
+Before=time-sync.target
+
+[Service]
+Type=simple
+ExecStart=@SBINDIR@/phc2sys -w -s %I
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/systemd/ptp4l@.service.in b/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/systemd/ptp4l@.service.in
new file mode 100644
index 0000000..2502181
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/systemd/ptp4l@.service.in
@@ -0,0 +1,11 @@
+[Unit]
+Description=Precision Time Protocol (PTP) service for %I
+Documentation=man:ptp4l
+After=sys-subsystem-net-devices-%i.device
+
+[Service]
+Type=simple
+ExecStart=@SBINDIR@/ptp4l -f @SYSCONFDIR@/linuxptp/ptp4l.conf -i %I
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp_3.1.1.bb b/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp_3.1.1.bb
deleted file mode 100644
index 5903cb3..0000000
--- a/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp_3.1.1.bb
+++ /dev/null
@@ -1,33 +0,0 @@
-DESCRIPTION = "Precision Time Protocol (PTP) according to IEEE standard 1588 for Linux"
-HOMEPAGE = "http://linuxptp.sourceforge.net/"
-LICENSE = "GPL-2.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
-
-SRC_URI = "http://sourceforge.net/projects/linuxptp/files/v3.1/linuxptp-${PV}.tgz \
-           file://build-Allow-CC-and-prefix-to-be-overriden.patch \
-           file://Use-cross-cpp-in-incdefs.patch \
-           file://0001-include-string.h-for-strncpy.patch \
-           file://0001-makefile-use-conditional-assignment-for-KBUILD_OUTPU.patch \
-           "
-
-UPSTREAM_CHECK_URI = "https://sourceforge.net/projects/linuxptp/files/"
-UPSTREAM_CHECK_REGEX = "(?P<pver>\d+(\.\d+)+)/"
-
-SRC_URI[sha256sum] = "94d6855f9b7f2d8e9b0ca6d384e3fae6226ce6fc012dbad02608bdef3be1c0d9"
-
-EXTRA_OEMAKE = "ARCH=${TARGET_ARCH} EXTRA_CFLAGS='${CFLAGS}' mandir=${mandir}"
-
-export KBUILD_OUTPUT="${RECIPE_SYSROOT}"
-
-do_install() {
-    oe_runmake install DESTDIR=${D} prefix=${prefix}
-
-    # Install example configs from source tree
-    install -d ${D}${docdir}/${PN}
-    cp -R --no-dereference --preserve=mode,links ${S}/configs ${D}${docdir}/${PN}
-}
-
-PACKAGES =+ "${PN}-configs"
-
-FILES:${PN}-configs = "${docdir}"
-FILES:${PN}-doc = "${mandir}"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp_4.1.bb b/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp_4.1.bb
new file mode 100644
index 0000000..9a5c9b5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp_4.1.bb
@@ -0,0 +1,62 @@
+SUMMARY = "linuxptp package for linux"
+DESCRIPTION = "Precision Time Protocol (PTP) according to IEEE standard 1588 \
+for Linux"
+HOMEPAGE = "http://linuxptp.sourceforge.net/"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+LINUXPTP_SRC_URI = "http://sourceforge.net/projects/linuxptp"
+
+SRC_URI = "${LINUXPTP_SRC_URI}/files/v4.1/linuxptp-${PV}.tgz \
+           file://0001-include-string.h-for-strncpy.patch \
+           file://0002-linuxptp-Use-CC-in-incdefs.sh.patch \
+           file://systemd/phc2sys@.service.in \
+           file://systemd/ptp4l@.service.in \
+           "
+
+SRC_URI[md5sum] = "1db8699fc155965341759be5e5aad938"
+SRC_URI[sha256sum] = "e1743d44f8208897e30895da3579e670ff919b914feb4b5a949f3e421ddde535"
+
+inherit systemd
+
+UPSTREAM_CHECK_URI = "${LINUXPTP_SRC_URI}/files/"
+UPSTREAM_CHECK_REGEX = "(?P<pver>\d+(\.\d+)+)/"
+
+EXTRA_OEMAKE = "CC='${CC}' EXTRA_CFLAGS='${CFLAGS}' mandir='${mandir}' \
+    sbindir='${sbindir}'"
+
+export KBUILD_OUTPUT="${RECIPE_SYSROOT}"
+
+LINUXPTP_SYSTEMD_SERVICES = "phc2sys@.service ptp4l@.service"
+
+do_install() {
+    oe_runmake install DESTDIR=${D}
+
+    # Install example configs from source tree
+    install -d ${D}${docdir}/${PN}
+    cp -R --no-dereference --preserve=mode,links ${S}/configs \
+        ${D}${docdir}/${PN}
+
+    # Install default configuration files
+    install -d ${D}/${sysconfdir}/linuxptp/
+    install -m 644 ${S}/configs/default.cfg \
+        ${D}${sysconfdir}/linuxptp/ptp4l.conf
+
+    # Install systemd services
+    install -d ${D}/${systemd_unitdir}/system/
+    for service in ${LINUXPTP_SYSTEMD_SERVICES}; do
+        sed -i -e 's,@SBINDIR@,${sbindir},g' \
+            ${WORKDIR}/systemd/$service.in
+        sed -i -e 's,@SYSCONFDIR@,${sysconfdir},g' \
+            ${WORKDIR}/systemd/$service.in
+        install -m 644 ${WORKDIR}/systemd/$service.in \
+            ${D}/${systemd_unitdir}/system/$service
+    done
+}
+
+SYSTEMD_SERVICE:${PN} = "${LINUXPTP_SYSTEMD_SERVICES}"
+SYSTEMD_AUTO_ENABLE:${PN} = "disable"
+
+PACKAGES =+ "${PN}-configs"
+
+FILES:${PN}-configs += "${docdir}"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/loudmouth/loudmouth-1.4.3/04-use-pkg-config-for-gnutls.patch b/meta-openembedded/meta-oe/recipes-connectivity/loudmouth/loudmouth-1.4.3/04-use-pkg-config-for-gnutls.patch
deleted file mode 100644
index 0fc87ab..0000000
--- a/meta-openembedded/meta-oe/recipes-connectivity/loudmouth/loudmouth-1.4.3/04-use-pkg-config-for-gnutls.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-Upstream-Status: Pending
-
-Description: use pkg-config to detect gnutls
-Debian: http://bugs.debian.org/529835
-Origin: http://groups.google.com/group/loudmouth-dev/browse_thread/thread/3f78255837048daf#
-
---- a/configure.ac.orig	2009-08-16 20:29:36.000000000 +0200
-+++ b/configure.ac	2009-08-16 20:30:43.000000000 +0200
-@@ -146,10 +146,12 @@ AC_ARG_WITH(openssl-libs,
- enable_ssl=no
- if test "x$ac_ssl" = "xgnutls"; then
-   dnl Look for GnuTLS
--  AM_PATH_LM_LIBGNUTLS($GNUTLS_REQUIRED, have_libgnutls=yes, have_libgnutls=no)
--  if test "x$have_libgnutls" = "xyes"; then
--    CFLAGS="$CFLAGS $LIBGNUTLS_CFLAGS"
--    LIBS="$LIBS $LIBGNUTLS_LIBS"
-+  PKG_CHECK_MODULES(GNUTLS, gnutls >= $GNUTLS_REQUIRED, have_gnutls=yes, have_gnutls=no)
-+  if test "x$have_gnutls" = "xyes"; then 
-+    AC_SUBST(ASYNCNS_CFLAGS)
-+    AC_SUBST(ASYNCNS_LIBS)
-+    CFLAGS="$CFLAGS $GNUTLS_CFLAGS"
-+    LIBS="$LIBS $GNUTLS_LIBS"
-     AC_DEFINE(HAVE_GNUTLS, 1, [whether to use GnuTSL support.])
-     enable_ssl=GnuTLS
-   else
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/loudmouth/loudmouth-1.4.3/glib-2.32.patch b/meta-openembedded/meta-oe/recipes-connectivity/loudmouth/loudmouth-1.4.3/glib-2.32.patch
deleted file mode 100644
index 921aded..0000000
--- a/meta-openembedded/meta-oe/recipes-connectivity/loudmouth/loudmouth-1.4.3/glib-2.32.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-Upstream-Status: Pending
-
---- loudmouth-1.4.3.orig/loudmouth/lm-error.c	2008-10-29 21:48:15.000000000 +0100
-+++ loudmouth-1.4.3/loudmouth/lm-error.c	2012-05-06 08:27:07.455739440 +0200
-@@ -19,7 +19,6 @@
-  */
- 
- #include <config.h>
--#include <glib/gerror.h>
- #include "lm-error.h"
- 
- /**
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/loudmouth/loudmouth_1.4.3.bb b/meta-openembedded/meta-oe/recipes-connectivity/loudmouth/loudmouth_1.4.3.bb
deleted file mode 100644
index 7b5eecf..0000000
--- a/meta-openembedded/meta-oe/recipes-connectivity/loudmouth/loudmouth_1.4.3.bb
+++ /dev/null
@@ -1,21 +0,0 @@
-DESCRIPTION = "Loudmouth is a lightweight and easy-to-use C library for programming with the Jabber protocol."
-HOMEPAGE = "http://www.loudmouth-project.org/"
-
-LICENSE = "LGPL-2.1-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=c4f38aef94828f6b280e00d1173be689"
-
-DEPENDS = "glib-2.0 libcheck openssl libidn"
-
-inherit gnomebase gtk-doc
-
-PR = "r2"
-
-SRC_URI += "file://04-use-pkg-config-for-gnutls.patch \
-            file://glib-2.32.patch"
-
-SRC_URI[archive.md5sum] = "55339ca42494690c3942ee1465a96937"
-SRC_URI[archive.sha256sum] = "95a93f5d009b71ea8193d994aa11f311bc330a3efe1b7cd74dc48f11c7f929e3"
-GNOME_COMPRESS_TYPE="bz2"
-
-EXTRA_OECONF = "--with-ssl=openssl"
-
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/loudmouth/loudmouth_1.5.4.bb b/meta-openembedded/meta-oe/recipes-connectivity/loudmouth/loudmouth_1.5.4.bb
new file mode 100644
index 0000000..f67c46b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/loudmouth/loudmouth_1.5.4.bb
@@ -0,0 +1,16 @@
+DESCRIPTION = "Loudmouth is a lightweight and easy-to-use C library for programming with the Jabber protocol."
+HOMEPAGE = "http://www.loudmouth-project.org/"
+
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
+
+DEPENDS = "glib-2.0 libcheck openssl libidn"
+
+GNOMEBASEBUILDCLASS = "autotools"
+
+inherit gnomebase gtk-doc
+
+SRC_URI = "https://github.com/mcabber/${BPN}/releases/download/${PV}/${BP}.tar.bz2"
+SRC_URI[sha256sum] = "31cbc91c1fddcc5346b3373b8fb45594e9ea9cc7fe36d0595e8912c47ad94d0d"
+
+EXTRA_OECONF = "--with-ssl=openssl --with-compile-warnings=no"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/modemmanager/modemmanager_1.20.6.bb b/meta-openembedded/meta-oe/recipes-connectivity/modemmanager/modemmanager_1.22.0.bb
similarity index 90%
rename from meta-openembedded/meta-oe/recipes-connectivity/modemmanager/modemmanager_1.20.6.bb
rename to meta-openembedded/meta-oe/recipes-connectivity/modemmanager/modemmanager_1.22.0.bb
index ba82d21..6b4336e 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/modemmanager/modemmanager_1.20.6.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/modemmanager/modemmanager_1.22.0.bb
@@ -7,13 +7,12 @@
     file://COPYING.LIB;md5=4fbd65380cdd255951079008b364516c \
 "
 
-GNOMEBASEBUILDCLASS = "meson"
 inherit gnomebase gettext systemd gobject-introspection bash-completion
 
 DEPENDS = "glib-2.0 libgudev libxslt-native dbus"
 
-SRCREV = "6aa0ff583d04aea88b4da7a1c20049f57062dab6"
-SRC_URI = "git://gitlab.freedesktop.org/mobile-broadband/ModemManager.git;protocol=https;branch=mm-1-20"
+SRCREV = "03f786ce66360d67c669f4f122f8aa458e6f01ea"
+SRC_URI = "git://gitlab.freedesktop.org/mobile-broadband/ModemManager.git;protocol=https;branch=mm-1-22"
 
 S = "${WORKDIR}/git"
 
@@ -37,7 +36,7 @@
 PACKAGECONFIG[qrtr] = "-Dqrtr=true,-Dqrtr=false,libqrtr-glib"
 PACKAGECONFIG[vala] = "-Dvapi=true,-Dvapi=false"
 
-inherit ${@bb.utils.contains('PACKAGECONFIG', 'vala', 'vala', '', d)}
+inherit upstream-version-is-even ${@bb.utils.contains('PACKAGECONFIG', 'vala', 'vala', '', d)}
 
 EXTRA_OEMESON = " \
     -Dudevdir=${nonarch_base_libdir}/udev \
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/paho-mqtt-c/paho-mqtt-c_1.3.12.bb b/meta-openembedded/meta-oe/recipes-connectivity/paho-mqtt-c/paho-mqtt-c_1.3.13.bb
similarity index 94%
rename from meta-openembedded/meta-oe/recipes-connectivity/paho-mqtt-c/paho-mqtt-c_1.3.12.bb
rename to meta-openembedded/meta-oe/recipes-connectivity/paho-mqtt-c/paho-mqtt-c_1.3.13.bb
index 4decb09..6f22900 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/paho-mqtt-c/paho-mqtt-c_1.3.12.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/paho-mqtt-c/paho-mqtt-c_1.3.13.bb
@@ -12,7 +12,7 @@
 
 SRC_URI = "git://github.com/eclipse/paho.mqtt.c;protocol=https;branch=master"
 
-SRCREV = "4157a27d39f1dd5b95750ecb6acd1481432785d8"
+SRCREV = "07a875788d8cc6f5833b12581d6e3e349b34d719"
 
 DEPENDS = "openssl"
 
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/pcapplusplus/pcapplusplus_23.09.bb b/meta-openembedded/meta-oe/recipes-connectivity/pcapplusplus/pcapplusplus_23.09.bb
new file mode 100644
index 0000000..39c6942
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/pcapplusplus/pcapplusplus_23.09.bb
@@ -0,0 +1,21 @@
+SUMMARY = "A multiplatform C++ library for capturing, parsing and crafting of network packets"
+HOMEPAGE = "https://pcapplusplus.github.io/"
+BUGTRACKER = "https://github.com/seladb/PcapPlusPlus/issues"
+SECTION = "libs/network"
+LICENSE = "Unlicense"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=911690f51af322440237a253d695d19f"
+
+DEPENDS = "libpcap"
+
+SRC_URI = "git://github.com/seladb/PcapPlusPlus.git;protocol=https;branch=master"
+SRCREV = "4cf8ed44f9dd145f874dc1dd747dfefcfcab75be"
+
+S = "${WORKDIR}/git"
+
+inherit cmake
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[examples] = "-DPCAPPP_BUILD_EXAMPLES=ON,-DPCAPPP_BUILD_EXAMPLES=OFF"
+PACKAGECONFIG[shared] = "-DBUILD_SHARED_LIBS=ON,-DBUILD_SHARED_LIBS=OFF"
+PACKAGECONFIG[tests] = "-DPCAPPP_BUILD_TESTS=ON,-DPCAPPP_BUILD_TESTS=OFF"
+PACKAGECONFIG[zstd] = "-DLIGHT_PCAPNG_ZSTD=ON,-DLIGHT_PCAPNG_ZSTD=OFF,zstd"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/ser2net/ser2net_4.3.13.bb b/meta-openembedded/meta-oe/recipes-connectivity/ser2net/ser2net_4.5.1.bb
similarity index 77%
rename from meta-openembedded/meta-oe/recipes-connectivity/ser2net/ser2net_4.3.13.bb
rename to meta-openembedded/meta-oe/recipes-connectivity/ser2net/ser2net_4.5.1.bb
index a4c244d..2507933 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/ser2net/ser2net_4.3.13.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/ser2net/ser2net_4.5.1.bb
@@ -9,10 +9,8 @@
 
 SRC_URI = "${SOURCEFORGE_MIRROR}/project/ser2net/ser2net/ser2net-${PV}.tar.gz"
 
-SRC_URI[sha256sum] = "ed8b98448d535111d9a593b067601a8b53e2874814d706b2421a9490a660d265"
+SRC_URI[sha256sum] = "6d60c2eb9e15f6a23743ce7fc3687a8880042d7fca43572e73ca76ed003de258"
 
 UPSTREAM_CHECK_URI = "http://sourceforge.net/projects/ser2net/files/ser2net"
 
 inherit autotools pkgconfig
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/zeromq/czmq_4.2.1.bb b/meta-openembedded/meta-oe/recipes-connectivity/zeromq/czmq_4.2.1.bb
index 86fde7c..ce9d758 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/zeromq/czmq_4.2.1.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/zeromq/czmq_4.2.1.bb
@@ -30,8 +30,6 @@
 PACKAGECONFIG[systemd] = "-DCZMQ_WITH_SYSTEMD=ON,-DCZMQ_WITH_SYSTEMD=OFF,systemd"
 PACKAGECONFIG[uuid] = "-DCZMQ_WITH_UUID=ON,-DCZMQ_WITH_UUID=OFF,util-linux"
 
-BBCLASSEXTEND = "nativesdk"
-
 do_install:append() {
         mkdir -p ${D}/${includedir}/${BPN}
         mv ${D}/${includedir}/sha1.h ${D}/${includedir}/${BPN}/.
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/zeromq/files/0001-src-secure_allocator.hpp-define-missing-rebind-type.patch b/meta-openembedded/meta-oe/recipes-connectivity/zeromq/files/0001-src-secure_allocator.hpp-define-missing-rebind-type.patch
deleted file mode 100644
index d321908..0000000
--- a/meta-openembedded/meta-oe/recipes-connectivity/zeromq/files/0001-src-secure_allocator.hpp-define-missing-rebind-type.patch
+++ /dev/null
@@ -1,64 +0,0 @@
-From 66e72389cc90625ed74e8ba1ea3a65234bdb06b5 Mon Sep 17 00:00:00 2001
-From: Sergei Trofimovich <slyich@gmail.com>
-Date: Tue, 20 Dec 2022 21:45:16 +0000
-Subject: [PATCH] src/secure_allocator.hpp: define missing 'rebind' type
-
-`gcc-13` added an assert to standard headers to make sure custom
-allocators have intended implementation of rebind type instead
-of inherited rebind. gcc change:
-    https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=64c986b49558a7
-
-Without the fix build fails on this week's `gcc-13` as:
-
-    [ 92%] Building CXX object tests/CMakeFiles/test_security_curve.dir/test_security_curve.cpp.o
-    In file included from /<<NIX>>/gcc-13.0.0/include/c++/13.0.0/ext/alloc_traits.h:34,
-                     from /<<NIX>>/gcc-13.0.0/include/c++/13.0.0/bits/stl_uninitialized.h:64,
-                     from /<<NIX>>/gcc-13.0.0/include/c++/13.0.0/memory:69,
-                     from tests/../src/secure_allocator.hpp:42,
-                     from tests/../src/curve_client_tools.hpp:49,
-                     from tests/test_security_curve.cpp:53:
-    /<<NIX>>/gcc-13.0.0/include/c++/13.0.0/bits/alloc_traits.h: In instantiation of 'struct std::__allocator_traits_base::__rebind<zmq::secure_allocator_t<unsigned char>, unsigned char, void>':
-    /<<NIX>>/gcc-13.0.0/include/c++/13.0.0/bits/alloc_traits.h:94:11:   required by substitution of 'template<class _Alloc, class _Up> using std::__alloc_rebind = typename std::__allocator_traits_base::__rebind<_Alloc, _Up>::type [with _Alloc = zmq::secure_allocator_t<unsigned char>; _Up = unsigned char]'
-    /<<NIX>>/gcc-13.0.0/include/c++/13.0.0/bits/alloc_traits.h:228:8:   required by substitution of 'template<class _Alloc> template<class _Tp> using std::allocator_traits< <template-parameter-1-1> >::rebind_alloc = std::__alloc_rebind<_Alloc, _Tp> [with _Tp = unsigned char; _Alloc = zmq::secure_allocator_t<unsigned char>]'
-    /<<NIX>>/gcc-13.0.0/include/c++/13.0.0/ext/alloc_traits.h:126:65:   required from 'struct __gnu_cxx::__alloc_traits<zmq::secure_allocator_t<unsigned char>, unsigned char>::rebind<unsigned char>'
-    /<<NIX>>/gcc-13.0.0/include/c++/13.0.0/bits/stl_vector.h:88:21:   required from 'struct std::_Vector_base<unsigned char, zmq::secure_allocator_t<unsigned char> >'
-    /<<NIX>>/gcc-13.0.0/include/c++/13.0.0/bits/stl_vector.h:423:11:   required from 'class std::vector<unsigned char, zmq::secure_allocator_t<unsigned char> >'
-    tests/../src/curve_client_tools.hpp:64:76:   required from here
-    /<<NIX>>/gcc-13.0.0/include/c++/13.0.0/bits/alloc_traits.h:70:31: error: static assertion failed: allocator_traits<A>::rebind_alloc<A::value_type> must be A
-       70 |                         _Tp>::value,
-          |                               ^~~~~
-
-The change adds trivial `rebind` definition with expected return type
-and satisfies conversion requirements.
-
-Upstream-Status: Backport [https://github.com/zeromq/libzmq/commit/438d5d88]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- src/secure_allocator.hpp | 11 +++++++++++
- 1 file changed, 11 insertions(+)
-
-diff --git a/src/secure_allocator.hpp b/src/secure_allocator.hpp
-index 0d37e7ed..5b8de9e2 100644
---- a/src/secure_allocator.hpp
-+++ b/src/secure_allocator.hpp
-@@ -95,6 +95,17 @@ bool operator!= (const secure_allocator_t<T> &, const secure_allocator_t<U> &)
- #else
- template <typename T> struct secure_allocator_t : std::allocator<T>
- {
-+    secure_allocator_t () ZMQ_DEFAULT;
-+
-+    template <class U>
-+    secure_allocator_t (const secure_allocator_t<U> &) ZMQ_NOEXCEPT
-+    {
-+    }
-+
-+    template <class U> struct rebind
-+    {
-+        typedef secure_allocator_t<U> other;
-+    };
- };
- #endif
- }
--- 
-2.39.1
-
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/zeromq/zeromq_4.3.4.bb b/meta-openembedded/meta-oe/recipes-connectivity/zeromq/zeromq_4.3.5.bb
similarity index 71%
rename from meta-openembedded/meta-oe/recipes-connectivity/zeromq/zeromq_4.3.4.bb
rename to meta-openembedded/meta-oe/recipes-connectivity/zeromq/zeromq_4.3.5.bb
index cd319b5..5554582 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/zeromq/zeromq_4.3.4.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/zeromq/zeromq_4.3.5.bb
@@ -1,18 +1,16 @@
 DESCRIPTION = "ZeroMQ looks like an embeddable networking library but acts like a concurrency framework"
 HOMEPAGE = "http://www.zeromq.org"
-LICENSE = "LGPL-3.0-with-zeromq-exception"
-LIC_FILES_CHKSUM = "file://COPYING.LESSER;md5=d5311495d952062e0e4fbba39cbf3de1"
+LICENSE = "MPL-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=9741c346eef56131163e13b9db1241b3"
 
 PACKAGECONFIG ??= "libsodium"
 PACKAGECONFIG[libsodium] = "-DWITH_LIBSODIUM=ON,-DWITH_LIBSODIUM=OFF, libsodium"
 
 SRC_URI = "http://github.com/zeromq/libzmq/releases/download/v${PV}/zeromq-${PV}.tar.gz \
     file://0001-CMakeLists-txt-Avoid-host-specific-path-to-libsodium.patch \
-    file://0001-src-secure_allocator.hpp-define-missing-rebind-type.patch \
     file://run-ptest \
 "
-SRC_URI[md5sum] = "c897d4005a3f0b8276b00b7921412379"
-SRC_URI[sha256sum] = "c593001a89f5a85dd2ddf564805deb860e02471171b3f204944857336295c3e5"
+SRC_URI[sha256sum] = "6653ef5910f17954861fe72332e68b03ca6e4d9c7160eb3a8de5a5a913bfab43"
 
 UPSTREAM_CHECK_URI = "https://github.com/${BPN}/libzmq/releases"
 
diff --git a/meta-openembedded/meta-oe/recipes-core/emlog/emlog.inc b/meta-openembedded/meta-oe/recipes-core/emlog/emlog.inc
index 0972aff..631e52f 100644
--- a/meta-openembedded/meta-oe/recipes-core/emlog/emlog.inc
+++ b/meta-openembedded/meta-oe/recipes-core/emlog/emlog.inc
@@ -5,7 +5,7 @@
 
 SRC_URI = "git://github.com/nicupavel/emlog.git;protocol=https;branch=master"
 SRCREV = "a9bbf324fde131ff4cf064e32674086c4ced4dca"
-
+PV = "0.70+git"
 S = "${WORKDIR}/git"
 
 EXTRA_OEMAKE += " \
diff --git a/meta-openembedded/meta-oe/recipes-core/emlog/emlog_git.bb b/meta-openembedded/meta-oe/recipes-core/emlog/emlog_git.bb
index 03c895f..6331f61 100644
--- a/meta-openembedded/meta-oe/recipes-core/emlog/emlog_git.bb
+++ b/meta-openembedded/meta-oe/recipes-core/emlog/emlog_git.bb
@@ -32,4 +32,6 @@
     CVE-2019-17073 \
     CVE-2021-44584 \
     CVE-2022-1526 \
+    CVE-2022-3968 \
+    CVE-2023-43291 \
 "
diff --git a/meta-openembedded/meta-oe/recipes-core/glib-2.0/glibmm-2.68_2.74.0.bb b/meta-openembedded/meta-oe/recipes-core/glib-2.0/glibmm-2.68_2.78.0.bb
similarity index 87%
rename from meta-openembedded/meta-oe/recipes-core/glib-2.0/glibmm-2.68_2.74.0.bb
rename to meta-openembedded/meta-oe/recipes-core/glib-2.0/glibmm-2.68_2.78.0.bb
index 83ceb64..f40a814 100644
--- a/meta-openembedded/meta-oe/recipes-core/glib-2.0/glibmm-2.68_2.74.0.bb
+++ b/meta-openembedded/meta-oe/recipes-core/glib-2.0/glibmm-2.68_2.78.0.bb
@@ -7,13 +7,12 @@
 
 DEPENDS = "mm-common glib-2.0 libsigc++-3 glib-2.0-native"
 
-GNOMEBASEBUILDCLASS = "meson"
 GNOMEBN = "glibmm"
 inherit gnomebase
 
 SHRT_VER = "${@d.getVar('PV').split('.')[0]}.${@d.getVar('PV').split('.')[1]}"
 
-SRC_URI[archive.sha256sum] = "2b472696cbac79db8e405724118ec945219c5b9b18af63dc8cfb7f1d89b0f1fa"
+SRC_URI[archive.sha256sum] = "5d2e872564996f02a06d8bbac3677e7c394af8b00dd1526aebd47af842a3ef50"
 
 S = "${WORKDIR}/${GNOMEBN}-${PV}"
 
diff --git a/meta-openembedded/meta-oe/recipes-core/glib-2.0/glibmm_2.66.2.bb b/meta-openembedded/meta-oe/recipes-core/glib-2.0/glibmm_2.66.2.bb
index a6dc8ff..c78dd55 100644
--- a/meta-openembedded/meta-oe/recipes-core/glib-2.0/glibmm_2.66.2.bb
+++ b/meta-openembedded/meta-oe/recipes-core/glib-2.0/glibmm_2.66.2.bb
@@ -7,7 +7,6 @@
 
 DEPENDS = "mm-common glib-2.0 libsigc++-2.0 glib-2.0-native"
 
-GNOMEBASEBUILDCLASS = "meson"
 
 inherit gnomebase
 
diff --git a/meta-openembedded/meta-oe/recipes-core/libsigc++-2.0/libsigc++-2.0_2.10.7.bb b/meta-openembedded/meta-oe/recipes-core/libsigc++-2.0/libsigc++-2.0_2.12.1.bb
similarity index 73%
rename from meta-openembedded/meta-oe/recipes-core/libsigc++-2.0/libsigc++-2.0_2.10.7.bb
rename to meta-openembedded/meta-oe/recipes-core/libsigc++-2.0/libsigc++-2.0_2.12.1.bb
index 84494b8..b2eb5dd 100644
--- a/meta-openembedded/meta-oe/recipes-core/libsigc++-2.0/libsigc++-2.0_2.10.7.bb
+++ b/meta-openembedded/meta-oe/recipes-core/libsigc++-2.0/libsigc++-2.0_2.12.1.bb
@@ -5,8 +5,8 @@
 
 DEPENDS = "mm-common"
 
-SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/libsigc++/2.10/libsigc++-${PV}.tar.xz"
-SRC_URI[sha256sum] = "d082a2ce72c750f66b1a415abe3e852df2eae1e8af53010f4ac2ea261a478832"
+SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/libsigc++/2.12/libsigc++-${PV}.tar.xz"
+SRC_URI[sha256sum] = "a9dbee323351d109b7aee074a9cb89ca3e7bcf8ad8edef1851f4cf359bd50843"
 
 S = "${WORKDIR}/libsigc++-${PV}"
 
diff --git a/meta-openembedded/meta-oe/recipes-core/libsigc++-2.0/libsigc++-3_3.2.0.bb b/meta-openembedded/meta-oe/recipes-core/libsigc++-2.0/libsigc++-3_3.6.0.bb
similarity index 74%
rename from meta-openembedded/meta-oe/recipes-core/libsigc++-2.0/libsigc++-3_3.2.0.bb
rename to meta-openembedded/meta-oe/recipes-core/libsigc++-2.0/libsigc++-3_3.6.0.bb
index 9318a30..0753457 100644
--- a/meta-openembedded/meta-oe/recipes-core/libsigc++-2.0/libsigc++-3_3.2.0.bb
+++ b/meta-openembedded/meta-oe/recipes-core/libsigc++-2.0/libsigc++-3_3.6.0.bb
@@ -5,8 +5,8 @@
 
 DEPENDS = "mm-common"
 
-SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/libsigc++/3.2/libsigc++-${PV}.tar.xz"
-SRC_URI[sha256sum] = "8cdcb986e3f0a7c5b4474aa3c833d676e62469509f4899110ddf118f04082651"
+SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/libsigc++/3.6/libsigc++-${PV}.tar.xz"
+SRC_URI[sha256sum] = "c3d23b37dfd6e39f2e09f091b77b1541fbfa17c4f0b6bf5c89baef7229080e17"
 
 S = "${WORKDIR}/libsigc++-${PV}"
 
diff --git a/meta-openembedded/meta-oe/recipes-core/libxml/libxml++-5.0_5.0.1.bb b/meta-openembedded/meta-oe/recipes-core/libxml/libxml++-5.0_5.0.1.bb
index c0f0b2e..ada0199 100644
--- a/meta-openembedded/meta-oe/recipes-core/libxml/libxml++-5.0_5.0.1.bb
+++ b/meta-openembedded/meta-oe/recipes-core/libxml/libxml++-5.0_5.0.1.bb
@@ -6,15 +6,14 @@
 LICENSE = "LGPL-2.1-or-later"
 LIC_FILES_CHKSUM = "file://COPYING;md5=7fbc338309ac38fefcd64b04bb903e34 "
 
-SHRT_VER = "${@d.getVar('PV').split('.')[0]}.${@d.getVar('PV').split('.')[1]}"
-SRC_URI = "${GNOME_MIRROR}/libxml++/${SHRT_VER}/libxml++-${PV}.tar.xz \
-"
-SRC_URI[sha256sum] = "15c38307a964fa6199f4da6683a599eb7e63cc89198545b36349b87cf9aa0098"
-
-S = "${WORKDIR}/libxml++-${PV}"
 DEPENDS = "libxml2 glibmm"
 
-inherit meson pkgconfig ptest
+GNOMEBN = "libxml++"
+inherit gnomebase ptest
+
+S = "${WORKDIR}/libxml++-${PV}"
+
+SRC_URI[archive.sha256sum] = "15c38307a964fa6199f4da6683a599eb7e63cc89198545b36349b87cf9aa0098"
 
 FILES:${PN}-doc += "${datadir}/devhelp"
-FILES:${PN}-dev += "${libdir}/libxml++-${SHRT_VER}/include/libxml++config.h"
+FILES:${PN}-dev += "${libdir}/libxml++-${@gnome_verdir("${PV}")}/include/libxml++config.h"
diff --git a/meta-openembedded/meta-oe/recipes-core/mm-common/mm-common_1.0.4.bb b/meta-openembedded/meta-oe/recipes-core/mm-common/mm-common_1.0.4.bb
index 1ffdcfd..56f7b5a 100644
--- a/meta-openembedded/meta-oe/recipes-core/mm-common/mm-common_1.0.4.bb
+++ b/meta-openembedded/meta-oe/recipes-core/mm-common/mm-common_1.0.4.bb
@@ -2,7 +2,6 @@
 LICENSE = "GPL-2.0-only"
 LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
 
-GNOMEBASEBUILDCLASS = "meson"
 
 inherit gnomebase
 
diff --git a/meta-openembedded/meta-oe/recipes-core/opencl/ocl-icd_2.3.1.bb b/meta-openembedded/meta-oe/recipes-core/opencl/ocl-icd_2.3.2.bb
similarity index 90%
rename from meta-openembedded/meta-oe/recipes-core/opencl/ocl-icd_2.3.1.bb
rename to meta-openembedded/meta-oe/recipes-core/opencl/ocl-icd_2.3.2.bb
index b1980e3..93fac96 100644
--- a/meta-openembedded/meta-oe/recipes-core/opencl/ocl-icd_2.3.1.bb
+++ b/meta-openembedded/meta-oe/recipes-core/opencl/ocl-icd_2.3.2.bb
@@ -7,7 +7,7 @@
 
 SRC_URI = "git://github.com/OCL-dev/ocl-icd.git;protocol=https;branch=master"
 
-SRCREV = "1165deedb2ae741cd76e60986f7c2cb5023059d9"
+SRCREV = "fdde6677b21329432db8b481e2637cd10f7d3cb2"
 
 S = "${WORKDIR}/git"
 
diff --git a/meta-openembedded/meta-oe/recipes-core/opencl/opencl-headers_04.17.bb b/meta-openembedded/meta-oe/recipes-core/opencl/opencl-headers_2023.04.17.bb
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-core/opencl/opencl-headers_04.17.bb
rename to meta-openembedded/meta-oe/recipes-core/opencl/opencl-headers_2023.04.17.bb
diff --git a/meta-openembedded/meta-oe/recipes-core/opencl/opencl-icd-loader_git.bb b/meta-openembedded/meta-oe/recipes-core/opencl/opencl-icd-loader_2023.04.17.bb
similarity index 81%
rename from meta-openembedded/meta-oe/recipes-core/opencl/opencl-icd-loader_git.bb
rename to meta-openembedded/meta-oe/recipes-core/opencl/opencl-icd-loader_2023.04.17.bb
index fc04cb5..925053b 100644
--- a/meta-openembedded/meta-oe/recipes-core/opencl/opencl-icd-loader_git.bb
+++ b/meta-openembedded/meta-oe/recipes-core/opencl/opencl-icd-loader_2023.04.17.bb
@@ -12,8 +12,8 @@
 RPROVIDES:${PN} = "virtual/opencl-icd"
 
 S = "${WORKDIR}/git"
-PV = "v2022.01.04+git${SRCPV}"
-SRCREV = "169f05d026e65948b30cfe2200595fda92198cf7"
+
+SRCREV = "b1bce7c3c580a8345205cf65fc1a5f55ba9cdb01"
 SRC_URI = "git://github.com/KhronosGroup/OpenCL-ICD-Loader.git;branch=main;protocol=https"
 
 EXTRA_OECMAKE:append = " \
@@ -22,11 +22,11 @@
 
 do_install() {
     install -d ${D}${bindir}
-    install -m 0755 ${B}/test/loader_test/icd_loader_test ${D}${bindir}/
+    install -m 0755 ${B}/icd_loader_test ${D}${bindir}/
     chrpath -d ${D}${bindir}/icd_loader_test
     install -d ${D}${libdir}
-    install -m 0644 ${B}/test/log/libIcdLog.so ${D}${libdir}/
-    install -m 0644 ${B}/test/driver_stub/libOpenCLDriverStub.so ${D}${libdir}/
+    install -m 0644 ${B}/libIcdLog.so ${D}${libdir}/
+    install -m 0644 ${B}/libOpenCLDriverStub.so ${D}${libdir}/
     chrpath -d ${D}${libdir}/libOpenCLDriverStub.so
     install -m 0644 ${B}/libOpenCL.so.1.2 ${D}${libdir}/
     cd ${D}${libdir}
diff --git a/meta-openembedded/meta-oe/recipes-core/packagegroups/packagegroup-meta-oe.bb b/meta-openembedded/meta-oe/recipes-core/packagegroups/packagegroup-meta-oe.bb
index 639388d..0f01356 100644
--- a/meta-openembedded/meta-oe/recipes-core/packagegroups/packagegroup-meta-oe.bb
+++ b/meta-openembedded/meta-oe/recipes-core/packagegroups/packagegroup-meta-oe.bb
@@ -645,11 +645,11 @@
 RDEPENDS:packagegroup-meta-oe-kernel:remove = "kernel-selftest"
 RDEPENDS:packagegroup-meta-oe-kernel:remove:libc-musl = "bpftool crash intel-speed-select kernel-selftest minicoredumper turbostat"
 
-RDEPENDS:packagegroup-meta-oe-kernel:remove:mipsarch = "makedumpfile"
+RDEPENDS:packagegroup-meta-oe-kernel:remove:mipsarcho32 = "makedumpfile"
 RDEPENDS:packagegroup-meta-oe-kernel:remove:mips64 = "crash"
 RDEPENDS:packagegroup-meta-oe-kernel:remove:mips64el = "crash"
 
-RDEPENDS:packagegroup-meta-oe-kernel:remove:riscv64 = "crash makedumpfile oprofile"
+RDEPENDS:packagegroup-meta-oe-kernel:remove:riscv64 = "crash oprofile"
 RDEPENDS:packagegroup-meta-oe-kernel:remove:riscv32 = "crash makedumpfile oprofile"
 
 RDEPENDS:packagegroup-meta-oe-multimedia ="\
@@ -891,7 +891,6 @@
     pcsc-lite \
     pcsc-tools \
     sharutils \
-    ${@bb.utils.contains("DISTRO_FEATURES", "x11", "toscoterm", "", d)} \
     sg3-utils \
     ${@bb.utils.contains("DISTRO_FEATURES", "x11", "uim", "", d)} \
     uchardet \
diff --git a/meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++-1.3.0/run-ptest b/meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++-1.4.0/run-ptest
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++-1.3.0/run-ptest
rename to meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++-1.4.0/run-ptest
diff --git a/meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++_1.3.0.bb b/meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++_1.4.0.bb
similarity index 89%
rename from meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++_1.3.0.bb
rename to meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++_1.4.0.bb
index 2ef4d5a..869bfa9 100644
--- a/meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++_1.3.0.bb
+++ b/meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++_1.4.0.bb
@@ -16,7 +16,7 @@
 
 DEPENDS += "expat"
 
-SRCREV = "0eda85574546d19d9f06d6d5418bc192b3846f96"
+SRCREV = "b482cd6d0890e3f9ae141b4aeb07d3724e48b3db"
 
 SRC_URI = "git://github.com/Kistler-Group/sdbus-cpp.git;protocol=https;branch=master"
 SRC_URI += "file://run-ptest"
@@ -39,7 +39,12 @@
     fi
 }
 
-PTEST_PATH = "${libdir}/${BPN}/tests"
+PTEST_PATH = "${libdir}/${BPN}/ptest"
+do_install_ptest() {
+    install -d ${D}${PTEST_PATH}
+    cp -r ${B}/tests/sdbus-c++-unit-tests  ${D}${PTEST_PATH}
+}
+
 FILES:${PN}-ptest =+ "${sysconfdir}/dbus-1/system.d/"
 FILES:${PN}-dev += "${bindir}/sdbus-c++-xml2cpp"
 
diff --git a/meta-openembedded/meta-oe/recipes-core/toybox/toybox/0001-portability-Fix-timer_settime_wrap-for-32bit-systems.patch b/meta-openembedded/meta-oe/recipes-core/toybox/toybox/0001-portability-Fix-timer_settime_wrap-for-32bit-systems.patch
deleted file mode 100644
index 8976b37..0000000
--- a/meta-openembedded/meta-oe/recipes-core/toybox/toybox/0001-portability-Fix-timer_settime_wrap-for-32bit-systems.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From 7284c7ae0df9aa5a9c8aa0a81a018e17289fe2c4 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Thu, 8 Sep 2022 07:22:26 -0700
-Subject: [PATCH] portability: Fix timer_settime_wrap for 32bit systems with
- 64bit time_t
-
-glibc does not define SYS_timer_settime if the 32bit syscall is not
-available, new architectures like riscv32 has defaulted to 64bit time_t
-from get go and avoided wiring 32bit syscall, therefore alias it to
-64bit version here
-
-Upstream-Status: Submitted [https://github.com/landley/toybox/pull/373]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- lib/portability.c | 6 ++++++
- 1 file changed, 6 insertions(+)
-
-diff --git a/lib/portability.c b/lib/portability.c
-index d955d081..4baa9367 100644
---- a/lib/portability.c
-+++ b/lib/portability.c
-@@ -711,6 +711,12 @@ int timer_create_wrap(clockid_t c, struct sigevent *se, timer_t *t)
-   return 0;
- }
- 
-+#if !defined(SYS_timer_settime) && defined(SYS_timer_settime64)
-+// glibc does not define defines SYS_timer_settime on 32-bit systems
-+// with 64-bit time_t defaults e.g. riscv32
-+#define SYS_timer_settime SYS_timer_settime64
-+#endif
-+
- int timer_settime_wrap(timer_t t, int flags, struct itimerspec *val,
-   struct itimerspec *old)
- {
--- 
-2.37.3
-
diff --git a/meta-openembedded/meta-oe/recipes-core/toybox/toybox_0.8.8.bb b/meta-openembedded/meta-oe/recipes-core/toybox/toybox_0.8.10.bb
similarity index 94%
rename from meta-openembedded/meta-oe/recipes-core/toybox/toybox_0.8.8.bb
rename to meta-openembedded/meta-oe/recipes-core/toybox/toybox_0.8.10.bb
index 6836b14..d747ebf 100644
--- a/meta-openembedded/meta-oe/recipes-core/toybox/toybox_0.8.8.bb
+++ b/meta-openembedded/meta-oe/recipes-core/toybox/toybox_0.8.10.bb
@@ -7,10 +7,8 @@
 
 inherit cml1 update-alternatives
 
-SRC_URI = "http://www.landley.net/toybox/downloads/${BPN}-${PV}.tar.gz \
-           file://0001-portability-Fix-timer_settime_wrap-for-32bit-systems.patch \
-           "
-SRC_URI[sha256sum] = "dafd41978d40f02a61cf1be99a2b4a25812bbfb9c3157e679ee7611202d6ac58"
+SRC_URI = "http://www.landley.net/toybox/downloads/${BPN}-${PV}.tar.gz"
+SRC_URI[sha256sum] = "d3afee05ca90bf425ced73f527e418fecd626c5340b5f58711a14531f8d7d108"
 
 SECTION = "base"
 
diff --git a/meta-openembedded/meta-oe/recipes-core/uutils-coreutils/uutils-coreutils-crates.inc b/meta-openembedded/meta-oe/recipes-core/uutils-coreutils/uutils-coreutils-crates.inc
index 90a5017..cd8a6ef 100644
--- a/meta-openembedded/meta-oe/recipes-core/uutils-coreutils/uutils-coreutils-crates.inc
+++ b/meta-openembedded/meta-oe/recipes-core/uutils-coreutils/uutils-coreutils-crates.inc
@@ -6,42 +6,42 @@
     crate://crates.io/aho-corasick/1.0.4 \
     crate://crates.io/android-tzdata/0.1.1 \
     crate://crates.io/android_system_properties/0.1.5 \
-    crate://crates.io/anstream/0.3.2 \
+    crate://crates.io/anstream/0.5.0 \
     crate://crates.io/anstyle/1.0.0 \
     crate://crates.io/anstyle-parse/0.2.0 \
     crate://crates.io/anstyle-query/1.0.0 \
-    crate://crates.io/anstyle-wincon/1.0.1 \
+    crate://crates.io/anstyle-wincon/2.1.0 \
     crate://crates.io/arrayref/0.3.6 \
-    crate://crates.io/arrayvec/0.7.2 \
+    crate://crates.io/arrayvec/0.7.4 \
     crate://crates.io/autocfg/1.1.0 \
     crate://crates.io/bigdecimal/0.4.0 \
     crate://crates.io/binary-heap-plus/0.5.0 \
     crate://crates.io/bindgen/0.63.0 \
     crate://crates.io/bitflags/1.3.2 \
-    crate://crates.io/bitflags/2.3.3 \
-    crate://crates.io/blake2b_simd/1.0.1 \
-    crate://crates.io/blake3/1.4.0 \
+    crate://crates.io/bitflags/2.4.0 \
+    crate://crates.io/blake2b_simd/1.0.2 \
+    crate://crates.io/blake3/1.5.0 \
     crate://crates.io/block-buffer/0.10.3 \
-    crate://crates.io/bstr/1.6.0 \
+    crate://crates.io/bstr/1.8.0 \
     crate://crates.io/bumpalo/3.11.1 \
-    crate://crates.io/bytecount/0.6.3 \
-    crate://crates.io/byteorder/1.4.3 \
+    crate://crates.io/bytecount/0.6.7 \
+    crate://crates.io/byteorder/1.5.0 \
     crate://crates.io/cc/1.0.79 \
     crate://crates.io/cexpr/0.6.0 \
     crate://crates.io/cfg-if/1.0.0 \
-    crate://crates.io/chrono/0.4.28 \
+    crate://crates.io/chrono/0.4.31 \
     crate://crates.io/clang-sys/1.4.0 \
-    crate://crates.io/clap/4.3.21 \
-    crate://crates.io/clap_builder/4.3.21 \
-    crate://crates.io/clap_complete/4.3.0 \
+    crate://crates.io/clap/4.4.2 \
+    crate://crates.io/clap_builder/4.4.2 \
+    crate://crates.io/clap_complete/4.4.0 \
     crate://crates.io/clap_lex/0.5.0 \
     crate://crates.io/clap_mangen/0.2.9 \
     crate://crates.io/colorchoice/1.0.0 \
     crate://crates.io/compare/0.1.0 \
     crate://crates.io/console/0.15.7 \
-    crate://crates.io/const-random/0.1.15 \
-    crate://crates.io/const-random-macro/0.1.15 \
-    crate://crates.io/constant_time_eq/0.2.4 \
+    crate://crates.io/const-random/0.1.16 \
+    crate://crates.io/const-random-macro/0.1.16 \
+    crate://crates.io/constant_time_eq/0.3.0 \
     crate://crates.io/conv/0.3.3 \
     crate://crates.io/core-foundation-sys/0.8.3 \
     crate://crates.io/coz/0.1.3 \
@@ -59,7 +59,7 @@
     crate://crates.io/crossterm_winapi/0.9.1 \
     crate://crates.io/crunchy/0.2.2 \
     crate://crates.io/crypto-common/0.1.6 \
-    crate://crates.io/ctrlc/3.4.0 \
+    crate://crates.io/ctrlc/3.4.1 \
     crate://crates.io/custom_derive/0.1.7 \
     crate://crates.io/data-encoding/2.4.0 \
     crate://crates.io/data-encoding-macro/0.1.13 \
@@ -67,14 +67,13 @@
     crate://crates.io/diff/0.1.13 \
     crate://crates.io/digest/0.10.7 \
     crate://crates.io/dlv-list/0.5.0 \
-    crate://crates.io/dns-lookup/2.0.2 \
+    crate://crates.io/dns-lookup/2.0.4 \
     crate://crates.io/dunce/1.0.4 \
     crate://crates.io/either/1.8.0 \
     crate://crates.io/encode_unicode/0.3.6 \
     crate://crates.io/env_logger/0.8.4 \
-    crate://crates.io/errno/0.3.1 \
-    crate://crates.io/errno-dragonfly/0.1.2 \
-    crate://crates.io/exacl/0.10.0 \
+    crate://crates.io/errno/0.3.5 \
+    crate://crates.io/exacl/0.11.0 \
     crate://crates.io/fastrand/2.0.0 \
     crate://crates.io/file_diff/1.0.0 \
     crate://crates.io/filetime/0.2.22 \
@@ -99,7 +98,7 @@
     crate://crates.io/generic-array/0.14.6 \
     crate://crates.io/getrandom/0.2.9 \
     crate://crates.io/glob/0.3.1 \
-    crate://crates.io/half/2.2.1 \
+    crate://crates.io/half/2.3.1 \
     crate://crates.io/hashbrown/0.13.2 \
     crate://crates.io/hermit-abi/0.3.2 \
     crate://crates.io/hex/0.4.3 \
@@ -111,7 +110,6 @@
     crate://crates.io/inotify/0.9.6 \
     crate://crates.io/inotify-sys/0.1.5 \
     crate://crates.io/io-lifetimes/1.0.11 \
-    crate://crates.io/is-terminal/0.4.9 \
     crate://crates.io/itertools/0.11.0 \
     crate://crates.io/itoa/1.0.4 \
     crate://crates.io/js-sys/0.3.64 \
@@ -120,31 +118,30 @@
     crate://crates.io/kqueue-sys/1.0.3 \
     crate://crates.io/lazy_static/1.4.0 \
     crate://crates.io/lazycell/1.3.0 \
-    crate://crates.io/libc/0.2.147 \
+    crate://crates.io/libc/0.2.150 \
     crate://crates.io/libloading/0.7.4 \
     crate://crates.io/libm/0.2.7 \
     crate://crates.io/linux-raw-sys/0.1.4 \
     crate://crates.io/linux-raw-sys/0.3.8 \
-    crate://crates.io/linux-raw-sys/0.4.5 \
+    crate://crates.io/linux-raw-sys/0.4.10 \
     crate://crates.io/lock_api/0.4.9 \
     crate://crates.io/log/0.4.17 \
     crate://crates.io/lscolors/0.15.0 \
     crate://crates.io/match_cfg/0.1.0 \
-    crate://crates.io/md-5/0.10.5 \
+    crate://crates.io/md-5/0.10.6 \
     crate://crates.io/memchr/2.6.2 \
-    crate://crates.io/memmap2/0.7.0 \
+    crate://crates.io/memmap2/0.9.0 \
     crate://crates.io/memoffset/0.8.0 \
     crate://crates.io/minimal-lexical/0.2.1 \
     crate://crates.io/miniz_oxide/0.5.4 \
     crate://crates.io/mio/0.8.6 \
-    crate://crates.io/nix/0.26.2 \
+    crate://crates.io/nix/0.27.1 \
     crate://crates.io/nom/7.1.3 \
     crate://crates.io/notify/6.0.1 \
     crate://crates.io/nu-ansi-term/0.49.0 \
     crate://crates.io/num-bigint/0.4.4 \
     crate://crates.io/num-integer/0.1.45 \
-    crate://crates.io/num-traits/0.2.16 \
-    crate://crates.io/num_cpus/1.16.0 \
+    crate://crates.io/num-traits/0.2.17 \
     crate://crates.io/num_threads/0.1.6 \
     crate://crates.io/number_prefix/0.4.0 \
     crate://crates.io/once_cell/1.18.0 \
@@ -154,7 +151,7 @@
     crate://crates.io/os_display/0.1.3 \
     crate://crates.io/parking_lot/0.12.1 \
     crate://crates.io/parking_lot_core/0.9.8 \
-    crate://crates.io/parse_datetime/0.4.0 \
+    crate://crates.io/parse_datetime/0.5.0 \
     crate://crates.io/peeking_take_while/0.1.2 \
     crate://crates.io/phf/0.11.2 \
     crate://crates.io/phf_codegen/0.11.2 \
@@ -169,7 +166,8 @@
     crate://crates.io/pretty_assertions/1.4.0 \
     crate://crates.io/proc-macro-hack/0.5.20+deprecated \
     crate://crates.io/proc-macro2/1.0.63 \
-    crate://crates.io/procfs/0.15.1 \
+    crate://crates.io/procfs/0.16.0 \
+    crate://crates.io/procfs-core/0.16.0 \
     crate://crates.io/quick-error/2.0.1 \
     crate://crates.io/quickcheck/1.0.3 \
     crate://crates.io/quote/1.0.29 \
@@ -177,13 +175,14 @@
     crate://crates.io/rand_chacha/0.3.1 \
     crate://crates.io/rand_core/0.6.4 \
     crate://crates.io/rand_pcg/0.3.1 \
-    crate://crates.io/rayon/1.7.0 \
-    crate://crates.io/rayon-core/1.11.0 \
+    crate://crates.io/rayon/1.8.0 \
+    crate://crates.io/rayon-core/1.12.0 \
     crate://crates.io/redox_syscall/0.3.5 \
+    crate://crates.io/redox_syscall/0.4.0 \
     crate://crates.io/reference-counted-singleton/0.1.2 \
-    crate://crates.io/regex/1.9.5 \
-    crate://crates.io/regex-automata/0.3.8 \
-    crate://crates.io/regex-syntax/0.7.5 \
+    crate://crates.io/regex/1.10.2 \
+    crate://crates.io/regex-automata/0.4.3 \
+    crate://crates.io/regex-syntax/0.8.2 \
     crate://crates.io/relative-path/1.8.0 \
     crate://crates.io/rlimit/0.10.1 \
     crate://crates.io/roff/0.2.1 \
@@ -193,17 +192,17 @@
     crate://crates.io/rustc-hash/1.1.0 \
     crate://crates.io/rustc_version/0.4.0 \
     crate://crates.io/rustix/0.36.15 \
-    crate://crates.io/rustix/0.37.23 \
-    crate://crates.io/rustix/0.38.8 \
+    crate://crates.io/rustix/0.37.26 \
+    crate://crates.io/rustix/0.38.21 \
     crate://crates.io/same-file/1.0.6 \
     crate://crates.io/scopeguard/1.1.0 \
-    crate://crates.io/self_cell/1.0.1 \
+    crate://crates.io/self_cell/1.0.2 \
     crate://crates.io/selinux/0.4.0 \
     crate://crates.io/selinux-sys/0.6.2 \
     crate://crates.io/semver/1.0.14 \
     crate://crates.io/serde/1.0.147 \
-    crate://crates.io/sha1/0.10.5 \
-    crate://crates.io/sha2/0.10.7 \
+    crate://crates.io/sha1/0.10.6 \
+    crate://crates.io/sha2/0.10.8 \
     crate://crates.io/sha3/0.10.8 \
     crate://crates.io/shlex/1.1.0 \
     crate://crates.io/signal-hook/0.3.17 \
@@ -215,14 +214,12 @@
     crate://crates.io/smallvec/1.11.0 \
     crate://crates.io/smawk/0.3.1 \
     crate://crates.io/socket2/0.5.3 \
-    crate://crates.io/static_assertions/1.1.0 \
     crate://crates.io/strsim/0.10.0 \
-    crate://crates.io/subtle/2.4.1 \
     crate://crates.io/syn/1.0.109 \
     crate://crates.io/syn/2.0.23 \
-    crate://crates.io/tempfile/3.8.0 \
-    crate://crates.io/term_grid/0.1.7 \
+    crate://crates.io/tempfile/3.8.1 \
     crate://crates.io/terminal_size/0.2.6 \
+    crate://crates.io/terminal_size/0.3.0 \
     crate://crates.io/textwrap/0.16.0 \
     crate://crates.io/thiserror/1.0.37 \
     crate://crates.io/thiserror-impl/1.0.37 \
@@ -234,13 +231,14 @@
     crate://crates.io/unicode-ident/1.0.5 \
     crate://crates.io/unicode-linebreak/0.1.5 \
     crate://crates.io/unicode-segmentation/1.10.1 \
-    crate://crates.io/unicode-width/0.1.10 \
+    crate://crates.io/unicode-width/0.1.11 \
     crate://crates.io/unicode-xid/0.2.4 \
     crate://crates.io/unindent/0.2.1 \
     crate://crates.io/utf8parse/0.2.1 \
     crate://crates.io/uuid/1.2.2 \
+    crate://crates.io/uutils_term_grid/0.3.0 \
     crate://crates.io/version_check/0.9.4 \
-    crate://crates.io/walkdir/2.3.2 \
+    crate://crates.io/walkdir/2.4.0 \
     crate://crates.io/wasi/0.11.0+wasi-snapshot-preview1 \
     crate://crates.io/wasm-bindgen/0.2.87 \
     crate://crates.io/wasm-bindgen-backend/0.2.87 \
@@ -248,10 +246,10 @@
     crate://crates.io/wasm-bindgen-macro-support/0.2.87 \
     crate://crates.io/wasm-bindgen-shared/0.2.87 \
     crate://crates.io/which/4.3.0 \
-    crate://crates.io/wild/2.1.0 \
+    crate://crates.io/wild/2.2.0 \
     crate://crates.io/winapi/0.3.9 \
     crate://crates.io/winapi-i686-pc-windows-gnu/0.4.0 \
-    crate://crates.io/winapi-util/0.1.5 \
+    crate://crates.io/winapi-util/0.1.6 \
     crate://crates.io/winapi-x86_64-pc-windows-gnu/0.4.0 \
     crate://crates.io/windows-sys/0.45.0 \
     crate://crates.io/windows-sys/0.48.0 \
@@ -281,42 +279,42 @@
 SRC_URI[aho-corasick-1.0.4.sha256sum] = "6748e8def348ed4d14996fa801f4122cd763fff530258cdc03f64b25f89d3a5a"
 SRC_URI[android-tzdata-0.1.1.sha256sum] = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
 SRC_URI[android_system_properties-0.1.5.sha256sum] = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
-SRC_URI[anstream-0.3.2.sha256sum] = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163"
+SRC_URI[anstream-0.5.0.sha256sum] = "b1f58811cfac344940f1a400b6e6231ce35171f614f26439e80f8c1465c5cc0c"
 SRC_URI[anstyle-1.0.0.sha256sum] = "41ed9a86bf92ae6580e0a31281f65a1b1d867c0cc68d5346e2ae128dddfa6a7d"
 SRC_URI[anstyle-parse-0.2.0.sha256sum] = "e765fd216e48e067936442276d1d57399e37bce53c264d6fefbe298080cb57ee"
 SRC_URI[anstyle-query-1.0.0.sha256sum] = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
-SRC_URI[anstyle-wincon-1.0.1.sha256sum] = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188"
+SRC_URI[anstyle-wincon-2.1.0.sha256sum] = "58f54d10c6dfa51283a066ceab3ec1ab78d13fae00aa49243a45e4571fb79dfd"
 SRC_URI[arrayref-0.3.6.sha256sum] = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544"
-SRC_URI[arrayvec-0.7.2.sha256sum] = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6"
+SRC_URI[arrayvec-0.7.4.sha256sum] = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711"
 SRC_URI[autocfg-1.1.0.sha256sum] = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
 SRC_URI[bigdecimal-0.4.0.sha256sum] = "5274a6b6e0ee020148397245b973e30163b7bffbc6d473613f850cb99888581e"
 SRC_URI[binary-heap-plus-0.5.0.sha256sum] = "e4551d8382e911ecc0d0f0ffb602777988669be09447d536ff4388d1def11296"
 SRC_URI[bindgen-0.63.0.sha256sum] = "36d860121800b2a9a94f9b5604b332d5cffb234ce17609ea479d723dbc9d3885"
 SRC_URI[bitflags-1.3.2.sha256sum] = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
-SRC_URI[bitflags-2.3.3.sha256sum] = "630be753d4e58660abd17930c71b647fe46c27ea6b63cc59e1e3851406972e42"
-SRC_URI[blake2b_simd-1.0.1.sha256sum] = "3c2f0dc9a68c6317d884f97cc36cf5a3d20ba14ce404227df55e1af708ab04bc"
-SRC_URI[blake3-1.4.0.sha256sum] = "729b71f35bd3fa1a4c86b85d32c8b9069ea7fe14f7a53cfabb65f62d4265b888"
+SRC_URI[bitflags-2.4.0.sha256sum] = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635"
+SRC_URI[blake2b_simd-1.0.2.sha256sum] = "23285ad32269793932e830392f2fe2f83e26488fd3ec778883a93c8323735780"
+SRC_URI[blake3-1.5.0.sha256sum] = "0231f06152bf547e9c2b5194f247cd97aacf6dcd8b15d8e5ec0663f64580da87"
 SRC_URI[block-buffer-0.10.3.sha256sum] = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e"
-SRC_URI[bstr-1.6.0.sha256sum] = "6798148dccfbff0fae41c7574d2fa8f1ef3492fba0face179de5d8d447d67b05"
+SRC_URI[bstr-1.8.0.sha256sum] = "542f33a8835a0884b006a0c3df3dadd99c0c3f296ed26c2fdc8028e01ad6230c"
 SRC_URI[bumpalo-3.11.1.sha256sum] = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba"
-SRC_URI[bytecount-0.6.3.sha256sum] = "2c676a478f63e9fa2dd5368a42f28bba0d6c560b775f38583c8bbaa7fcd67c9c"
-SRC_URI[byteorder-1.4.3.sha256sum] = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+SRC_URI[bytecount-0.6.7.sha256sum] = "e1e5f035d16fc623ae5f74981db80a439803888314e3a555fd6f04acd51a3205"
+SRC_URI[byteorder-1.5.0.sha256sum] = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
 SRC_URI[cc-1.0.79.sha256sum] = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
 SRC_URI[cexpr-0.6.0.sha256sum] = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
 SRC_URI[cfg-if-1.0.0.sha256sum] = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
-SRC_URI[chrono-0.4.28.sha256sum] = "95ed24df0632f708f5f6d8082675bef2596f7084dee3dd55f632290bf35bfe0f"
+SRC_URI[chrono-0.4.31.sha256sum] = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38"
 SRC_URI[clang-sys-1.4.0.sha256sum] = "fa2e27ae6ab525c3d369ded447057bca5438d86dc3a68f6faafb8269ba82ebf3"
-SRC_URI[clap-4.3.21.sha256sum] = "c27cdf28c0f604ba3f512b0c9a409f8de8513e4816705deb0498b627e7c3a3fd"
-SRC_URI[clap_builder-4.3.21.sha256sum] = "08a9f1ab5e9f01a9b81f202e8562eb9a10de70abf9eaeac1be465c28b75aa4aa"
-SRC_URI[clap_complete-4.3.0.sha256sum] = "a04ddfaacc3bc9e6ea67d024575fafc2a813027cf374b8f24f7bc233c6b6be12"
+SRC_URI[clap-4.4.2.sha256sum] = "6a13b88d2c62ff462f88e4a121f17a82c1af05693a2f192b5c38d14de73c19f6"
+SRC_URI[clap_builder-4.4.2.sha256sum] = "2bb9faaa7c2ef94b2743a21f5a29e6f0010dff4caa69ac8e9d6cf8b6fa74da08"
+SRC_URI[clap_complete-4.4.0.sha256sum] = "586a385f7ef2f8b4d86bddaa0c094794e7ccbfe5ffef1f434fe928143fc783a5"
 SRC_URI[clap_lex-0.5.0.sha256sum] = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b"
 SRC_URI[clap_mangen-0.2.9.sha256sum] = "bb0f09a0ca8f0dd8ac92c546b426f466ef19828185c6d504c80c48c9c2768ed9"
 SRC_URI[colorchoice-1.0.0.sha256sum] = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
 SRC_URI[compare-0.1.0.sha256sum] = "120133d4db2ec47efe2e26502ee984747630c67f51974fca0b6c1340cf2368d3"
 SRC_URI[console-0.15.7.sha256sum] = "c926e00cc70edefdc64d3a5ff31cc65bb97a3460097762bd23afb4d8145fccf8"
-SRC_URI[const-random-0.1.15.sha256sum] = "368a7a772ead6ce7e1de82bfb04c485f3db8ec744f72925af5735e29a22cc18e"
-SRC_URI[const-random-macro-0.1.15.sha256sum] = "9d7d6ab3c3a2282db210df5f02c4dab6e0a7057af0fb7ebd4070f30fe05c0ddb"
-SRC_URI[constant_time_eq-0.2.4.sha256sum] = "f3ad85c1f65dc7b37604eb0e89748faf0b9653065f2a8ef69f96a687ec1e9279"
+SRC_URI[const-random-0.1.16.sha256sum] = "11df32a13d7892ec42d51d3d175faba5211ffe13ed25d4fb348ac9e9ce835593"
+SRC_URI[const-random-macro-0.1.16.sha256sum] = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e"
+SRC_URI[constant_time_eq-0.3.0.sha256sum] = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2"
 SRC_URI[conv-0.3.3.sha256sum] = "78ff10625fd0ac447827aa30ea8b861fead473bb60aeb73af6c1c58caf0d1299"
 SRC_URI[core-foundation-sys-0.8.3.sha256sum] = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
 SRC_URI[coz-0.1.3.sha256sum] = "cef55b3fe2f5477d59e12bc792e8b3c95a25bd099eadcfae006ecea136de76e2"
@@ -334,7 +332,7 @@
 SRC_URI[crossterm_winapi-0.9.1.sha256sum] = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b"
 SRC_URI[crunchy-0.2.2.sha256sum] = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
 SRC_URI[crypto-common-0.1.6.sha256sum] = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
-SRC_URI[ctrlc-3.4.0.sha256sum] = "2a011bbe2c35ce9c1f143b7af6f94f29a167beb4cd1d29e6740ce836f723120e"
+SRC_URI[ctrlc-3.4.1.sha256sum] = "82e95fbd621905b854affdc67943b043a0fbb6ed7385fd5a25650d19a8a6cfdf"
 SRC_URI[custom_derive-0.1.7.sha256sum] = "ef8ae57c4978a2acd8b869ce6b9ca1dfe817bff704c220209fdef2c0b75a01b9"
 SRC_URI[data-encoding-2.4.0.sha256sum] = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308"
 SRC_URI[data-encoding-macro-0.1.13.sha256sum] = "c904b33cc60130e1aeea4956ab803d08a3f4a0ca82d64ed757afac3891f2bb99"
@@ -342,14 +340,13 @@
 SRC_URI[diff-0.1.13.sha256sum] = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8"
 SRC_URI[digest-0.10.7.sha256sum] = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
 SRC_URI[dlv-list-0.5.0.sha256sum] = "d529fd73d344663edfd598ccb3f344e46034db51ebd103518eae34338248ad73"
-SRC_URI[dns-lookup-2.0.2.sha256sum] = "8f332aa79f9e9de741ac013237294ef42ce2e9c6394dc7d766725812f1238812"
+SRC_URI[dns-lookup-2.0.4.sha256sum] = "e5766087c2235fec47fafa4cfecc81e494ee679d0fd4a59887ea0919bfb0e4fc"
 SRC_URI[dunce-1.0.4.sha256sum] = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b"
 SRC_URI[either-1.8.0.sha256sum] = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797"
 SRC_URI[encode_unicode-0.3.6.sha256sum] = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
 SRC_URI[env_logger-0.8.4.sha256sum] = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3"
-SRC_URI[errno-0.3.1.sha256sum] = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
-SRC_URI[errno-dragonfly-0.1.2.sha256sum] = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
-SRC_URI[exacl-0.10.0.sha256sum] = "1cfeb22a59deb24c3262c43ffcafd1eb807180f371f9fcc99098d181b5d639be"
+SRC_URI[errno-0.3.5.sha256sum] = "ac3e13f66a2f95e32a39eaa81f6b95d42878ca0e1db0c7543723dfe12557e860"
+SRC_URI[exacl-0.11.0.sha256sum] = "c695152c1c2777163ea93fff517edc6dd1f8fc226c14b0d60cdcde0beb316d9f"
 SRC_URI[fastrand-2.0.0.sha256sum] = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764"
 SRC_URI[file_diff-1.0.0.sha256sum] = "31a7a908b8f32538a2143e59a6e4e2508988832d5d4d6f7c156b3cbc762643a5"
 SRC_URI[filetime-0.2.22.sha256sum] = "d4029edd3e734da6fe05b6cd7bd2960760a616bd2ddd0d59a0124746d6272af0"
@@ -374,7 +371,7 @@
 SRC_URI[generic-array-0.14.6.sha256sum] = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9"
 SRC_URI[getrandom-0.2.9.sha256sum] = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4"
 SRC_URI[glob-0.3.1.sha256sum] = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
-SRC_URI[half-2.2.1.sha256sum] = "02b4af3693f1b705df946e9fe5631932443781d0aabb423b62fcd4d73f6d2fd0"
+SRC_URI[half-2.3.1.sha256sum] = "bc52e53916c08643f1b56ec082790d1e86a32e58dc5268f897f313fbae7b4872"
 SRC_URI[hashbrown-0.13.2.sha256sum] = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e"
 SRC_URI[hermit-abi-0.3.2.sha256sum] = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b"
 SRC_URI[hex-0.4.3.sha256sum] = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
@@ -386,7 +383,6 @@
 SRC_URI[inotify-0.9.6.sha256sum] = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff"
 SRC_URI[inotify-sys-0.1.5.sha256sum] = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb"
 SRC_URI[io-lifetimes-1.0.11.sha256sum] = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
-SRC_URI[is-terminal-0.4.9.sha256sum] = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
 SRC_URI[itertools-0.11.0.sha256sum] = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57"
 SRC_URI[itoa-1.0.4.sha256sum] = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc"
 SRC_URI[js-sys-0.3.64.sha256sum] = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"
@@ -395,31 +391,30 @@
 SRC_URI[kqueue-sys-1.0.3.sha256sum] = "8367585489f01bc55dd27404dcf56b95e6da061a256a666ab23be9ba96a2e587"
 SRC_URI[lazy_static-1.4.0.sha256sum] = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
 SRC_URI[lazycell-1.3.0.sha256sum] = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
-SRC_URI[libc-0.2.147.sha256sum] = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
+SRC_URI[libc-0.2.150.sha256sum] = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c"
 SRC_URI[libloading-0.7.4.sha256sum] = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f"
 SRC_URI[libm-0.2.7.sha256sum] = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4"
 SRC_URI[linux-raw-sys-0.1.4.sha256sum] = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4"
 SRC_URI[linux-raw-sys-0.3.8.sha256sum] = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
-SRC_URI[linux-raw-sys-0.4.5.sha256sum] = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503"
+SRC_URI[linux-raw-sys-0.4.10.sha256sum] = "da2479e8c062e40bf0066ffa0bc823de0a9368974af99c9f6df941d2c231e03f"
 SRC_URI[lock_api-0.4.9.sha256sum] = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df"
 SRC_URI[log-0.4.17.sha256sum] = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
 SRC_URI[lscolors-0.15.0.sha256sum] = "bf7015a04103ad78abb77e4b79ed151e767922d1cfde5f62640471c629a2320d"
 SRC_URI[match_cfg-0.1.0.sha256sum] = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4"
-SRC_URI[md-5-0.10.5.sha256sum] = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca"
+SRC_URI[md-5-0.10.6.sha256sum] = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf"
 SRC_URI[memchr-2.6.2.sha256sum] = "5486aed0026218e61b8a01d5fbd5a0a134649abb71a0e53b7bc088529dced86e"
-SRC_URI[memmap2-0.7.0.sha256sum] = "180d4b35be83d33392d1d1bfbd2ae1eca7ff5de1a94d3fc87faaa99a069e7cbd"
+SRC_URI[memmap2-0.9.0.sha256sum] = "deaba38d7abf1d4cca21cc89e932e542ba2b9258664d2a9ef0e61512039c9375"
 SRC_URI[memoffset-0.8.0.sha256sum] = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1"
 SRC_URI[minimal-lexical-0.2.1.sha256sum] = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
 SRC_URI[miniz_oxide-0.5.4.sha256sum] = "96590ba8f175222643a85693f33d26e9c8a015f599c216509b1a6894af675d34"
 SRC_URI[mio-0.8.6.sha256sum] = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9"
-SRC_URI[nix-0.26.2.sha256sum] = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a"
+SRC_URI[nix-0.27.1.sha256sum] = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053"
 SRC_URI[nom-7.1.3.sha256sum] = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
 SRC_URI[notify-6.0.1.sha256sum] = "5738a2795d57ea20abec2d6d76c6081186709c0024187cd5977265eda6598b51"
 SRC_URI[nu-ansi-term-0.49.0.sha256sum] = "c073d3c1930d0751774acf49e66653acecb416c3a54c6ec095a9b11caddb5a68"
 SRC_URI[num-bigint-0.4.4.sha256sum] = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0"
 SRC_URI[num-integer-0.1.45.sha256sum] = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
-SRC_URI[num-traits-0.2.16.sha256sum] = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2"
-SRC_URI[num_cpus-1.16.0.sha256sum] = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
+SRC_URI[num-traits-0.2.17.sha256sum] = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
 SRC_URI[num_threads-0.1.6.sha256sum] = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44"
 SRC_URI[number_prefix-0.4.0.sha256sum] = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
 SRC_URI[once_cell-1.18.0.sha256sum] = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
@@ -429,7 +424,7 @@
 SRC_URI[os_display-0.1.3.sha256sum] = "7a6229bad892b46b0dcfaaeb18ad0d2e56400f5aaea05b768bde96e73676cf75"
 SRC_URI[parking_lot-0.12.1.sha256sum] = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
 SRC_URI[parking_lot_core-0.9.8.sha256sum] = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447"
-SRC_URI[parse_datetime-0.4.0.sha256sum] = "fecceaede7767a9a98058687a321bc91742eff7670167a34104afb30fc8757df"
+SRC_URI[parse_datetime-0.5.0.sha256sum] = "3bbf4e25b13841080e018a1e666358adfe5e39b6d353f986ca5091c210b586a1"
 SRC_URI[peeking_take_while-0.1.2.sha256sum] = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
 SRC_URI[phf-0.11.2.sha256sum] = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc"
 SRC_URI[phf_codegen-0.11.2.sha256sum] = "e8d39688d359e6b34654d328e262234662d16cc0f60ec8dcbe5e718709342a5a"
@@ -444,7 +439,8 @@
 SRC_URI[pretty_assertions-1.4.0.sha256sum] = "af7cee1a6c8a5b9208b3cb1061f10c0cb689087b3d8ce85fb9d2dd7a29b6ba66"
 SRC_URI[proc-macro-hack-0.5.20+deprecated.sha256sum] = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
 SRC_URI[proc-macro2-1.0.63.sha256sum] = "7b368fba921b0dce7e60f5e04ec15e565b3303972b42bcfde1d0713b881959eb"
-SRC_URI[procfs-0.15.1.sha256sum] = "943ca7f9f29bab5844ecd8fdb3992c5969b6622bb9609b9502fef9b4310e3f1f"
+SRC_URI[procfs-0.16.0.sha256sum] = "731e0d9356b0c25f16f33b5be79b1c57b562f141ebfcdb0ad8ac2c13a24293b4"
+SRC_URI[procfs-core-0.16.0.sha256sum] = "2d3554923a69f4ce04c4a754260c338f505ce22642d3830e049a399fc2059a29"
 SRC_URI[quick-error-2.0.1.sha256sum] = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3"
 SRC_URI[quickcheck-1.0.3.sha256sum] = "588f6378e4dd99458b60ec275b4477add41ce4fa9f64dcba6f15adccb19b50d6"
 SRC_URI[quote-1.0.29.sha256sum] = "573015e8ab27661678357f27dc26460738fd2b6c86e46f386fde94cb5d913105"
@@ -452,13 +448,14 @@
 SRC_URI[rand_chacha-0.3.1.sha256sum] = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
 SRC_URI[rand_core-0.6.4.sha256sum] = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
 SRC_URI[rand_pcg-0.3.1.sha256sum] = "59cad018caf63deb318e5a4586d99a24424a364f40f1e5778c29aca23f4fc73e"
-SRC_URI[rayon-1.7.0.sha256sum] = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
-SRC_URI[rayon-core-1.11.0.sha256sum] = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
+SRC_URI[rayon-1.8.0.sha256sum] = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1"
+SRC_URI[rayon-core-1.12.0.sha256sum] = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed"
 SRC_URI[redox_syscall-0.3.5.sha256sum] = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+SRC_URI[redox_syscall-0.4.0.sha256sum] = "ded0bce2d41cc3c57aefa284708ced249a64acb01745dbbe72bd78610bfd644c"
 SRC_URI[reference-counted-singleton-0.1.2.sha256sum] = "f1bfbf25d7eb88ddcbb1ec3d755d0634da8f7657b2cb8b74089121409ab8228f"
-SRC_URI[regex-1.9.5.sha256sum] = "697061221ea1b4a94a624f67d0ae2bfe4e22b8a17b6a192afb11046542cc8c47"
-SRC_URI[regex-automata-0.3.8.sha256sum] = "c2f401f4955220693b56f8ec66ee9c78abffd8d1c4f23dc41a23839eb88f0795"
-SRC_URI[regex-syntax-0.7.5.sha256sum] = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da"
+SRC_URI[regex-1.10.2.sha256sum] = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343"
+SRC_URI[regex-automata-0.4.3.sha256sum] = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"
+SRC_URI[regex-syntax-0.8.2.sha256sum] = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
 SRC_URI[relative-path-1.8.0.sha256sum] = "4bf2521270932c3c7bed1a59151222bd7643c79310f2916f01925e1e16255698"
 SRC_URI[rlimit-0.10.1.sha256sum] = "3560f70f30a0f16d11d01ed078a07740fe6b489667abc7c7b029155d9f21c3d8"
 SRC_URI[roff-0.2.1.sha256sum] = "b833d8d034ea094b1ea68aa6d5c740e0d04bad9d16568d08ba6f76823a114316"
@@ -468,17 +465,17 @@
 SRC_URI[rustc-hash-1.1.0.sha256sum] = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
 SRC_URI[rustc_version-0.4.0.sha256sum] = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
 SRC_URI[rustix-0.36.15.sha256sum] = "c37f1bd5ef1b5422177b7646cba67430579cfe2ace80f284fee876bca52ad941"
-SRC_URI[rustix-0.37.23.sha256sum] = "4d69718bf81c6127a49dc64e44a742e8bb9213c0ff8869a22c308f84c1d4ab06"
-SRC_URI[rustix-0.38.8.sha256sum] = "19ed4fa021d81c8392ce04db050a3da9a60299050b7ae1cf482d862b54a7218f"
+SRC_URI[rustix-0.37.26.sha256sum] = "84f3f8f960ed3b5a59055428714943298bf3fa2d4a1d53135084e0544829d995"
+SRC_URI[rustix-0.38.21.sha256sum] = "2b426b0506e5d50a7d8dafcf2e81471400deb602392c7dd110815afb4eaf02a3"
 SRC_URI[same-file-1.0.6.sha256sum] = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
 SRC_URI[scopeguard-1.1.0.sha256sum] = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
-SRC_URI[self_cell-1.0.1.sha256sum] = "4c309e515543e67811222dbc9e3dd7e1056279b782e1dacffe4242b718734fb6"
+SRC_URI[self_cell-1.0.2.sha256sum] = "e388332cd64eb80cd595a00941baf513caffae8dce9cfd0467fc9c66397dade6"
 SRC_URI[selinux-0.4.0.sha256sum] = "a00576725d21b588213fbd4af84cd7e4cc4304e8e9bd6c0f5a1498a3e2ca6a51"
 SRC_URI[selinux-sys-0.6.2.sha256sum] = "806d381649bb85347189d2350728817418138d11d738e2482cb644ec7f3c755d"
 SRC_URI[semver-1.0.14.sha256sum] = "e25dfac463d778e353db5be2449d1cce89bd6fd23c9f1ea21310ce6e5a1b29c4"
 SRC_URI[serde-1.0.147.sha256sum] = "d193d69bae983fc11a79df82342761dfbf28a99fc8d203dca4c3c1b590948965"
-SRC_URI[sha1-0.10.5.sha256sum] = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3"
-SRC_URI[sha2-0.10.7.sha256sum] = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8"
+SRC_URI[sha1-0.10.6.sha256sum] = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba"
+SRC_URI[sha2-0.10.8.sha256sum] = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
 SRC_URI[sha3-0.10.8.sha256sum] = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60"
 SRC_URI[shlex-1.1.0.sha256sum] = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3"
 SRC_URI[signal-hook-0.3.17.sha256sum] = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801"
@@ -490,14 +487,12 @@
 SRC_URI[smallvec-1.11.0.sha256sum] = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9"
 SRC_URI[smawk-0.3.1.sha256sum] = "f67ad224767faa3c7d8b6d91985b78e70a1324408abcb1cfcc2be4c06bc06043"
 SRC_URI[socket2-0.5.3.sha256sum] = "2538b18701741680e0322a2302176d3253a35388e2e62f172f64f4f16605f877"
-SRC_URI[static_assertions-1.1.0.sha256sum] = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
 SRC_URI[strsim-0.10.0.sha256sum] = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
-SRC_URI[subtle-2.4.1.sha256sum] = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
 SRC_URI[syn-1.0.109.sha256sum] = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
 SRC_URI[syn-2.0.23.sha256sum] = "59fb7d6d8281a51045d62b8eb3a7d1ce347b76f312af50cd3dc0af39c87c1737"
-SRC_URI[tempfile-3.8.0.sha256sum] = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef"
-SRC_URI[term_grid-0.1.7.sha256sum] = "230d3e804faaed5a39b08319efb797783df2fd9671b39b7596490cb486d702cf"
+SRC_URI[tempfile-3.8.1.sha256sum] = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5"
 SRC_URI[terminal_size-0.2.6.sha256sum] = "8e6bf6f19e9f8ed8d4048dc22981458ebcf406d67e94cd422e5ecd73d63b3237"
+SRC_URI[terminal_size-0.3.0.sha256sum] = "21bebf2b7c9e0a515f6e0f8c51dc0f8e4696391e6f1ff30379559f8365fb0df7"
 SRC_URI[textwrap-0.16.0.sha256sum] = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
 SRC_URI[thiserror-1.0.37.sha256sum] = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e"
 SRC_URI[thiserror-impl-1.0.37.sha256sum] = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb"
@@ -509,13 +504,14 @@
 SRC_URI[unicode-ident-1.0.5.sha256sum] = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3"
 SRC_URI[unicode-linebreak-0.1.5.sha256sum] = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f"
 SRC_URI[unicode-segmentation-1.10.1.sha256sum] = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
-SRC_URI[unicode-width-0.1.10.sha256sum] = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+SRC_URI[unicode-width-0.1.11.sha256sum] = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"
 SRC_URI[unicode-xid-0.2.4.sha256sum] = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
 SRC_URI[unindent-0.2.1.sha256sum] = "5aa30f5ea51ff7edfc797c6d3f9ec8cbd8cfedef5371766b7181d33977f4814f"
 SRC_URI[utf8parse-0.2.1.sha256sum] = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
 SRC_URI[uuid-1.2.2.sha256sum] = "422ee0de9031b5b948b97a8fc04e3aa35230001a722ddd27943e0be31564ce4c"
+SRC_URI[uutils_term_grid-0.3.0.sha256sum] = "b389452a568698688dda38802068378a16c15c4af9b153cdd99b65391292bbc7"
 SRC_URI[version_check-0.9.4.sha256sum] = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
-SRC_URI[walkdir-2.3.2.sha256sum] = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
+SRC_URI[walkdir-2.4.0.sha256sum] = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee"
 SRC_URI[wasi-0.11.0+wasi-snapshot-preview1.sha256sum] = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
 SRC_URI[wasm-bindgen-0.2.87.sha256sum] = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
 SRC_URI[wasm-bindgen-backend-0.2.87.sha256sum] = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
@@ -523,10 +519,10 @@
 SRC_URI[wasm-bindgen-macro-support-0.2.87.sha256sum] = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
 SRC_URI[wasm-bindgen-shared-0.2.87.sha256sum] = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
 SRC_URI[which-4.3.0.sha256sum] = "1c831fbbee9e129a8cf93e7747a82da9d95ba8e16621cae60ec2cdc849bacb7b"
-SRC_URI[wild-2.1.0.sha256sum] = "05b116685a6be0c52f5a103334cbff26db643826c7b3735fc0a3ba9871310a74"
+SRC_URI[wild-2.2.0.sha256sum] = "10d01931a94d5a115a53f95292f51d316856b68a035618eb831bbba593a30b67"
 SRC_URI[winapi-0.3.9.sha256sum] = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
 SRC_URI[winapi-i686-pc-windows-gnu-0.4.0.sha256sum] = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
-SRC_URI[winapi-util-0.1.5.sha256sum] = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+SRC_URI[winapi-util-0.1.6.sha256sum] = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
 SRC_URI[winapi-x86_64-pc-windows-gnu-0.4.0.sha256sum] = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
 SRC_URI[windows-sys-0.45.0.sha256sum] = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
 SRC_URI[windows-sys-0.48.0.sha256sum] = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
diff --git a/meta-openembedded/meta-oe/recipes-core/uutils-coreutils/uutils-coreutils_0.0.21.bb b/meta-openembedded/meta-oe/recipes-core/uutils-coreutils/uutils-coreutils_0.0.23.bb
similarity index 92%
rename from meta-openembedded/meta-oe/recipes-core/uutils-coreutils/uutils-coreutils_0.0.21.bb
rename to meta-openembedded/meta-oe/recipes-core/uutils-coreutils/uutils-coreutils_0.0.23.bb
index a070fe7..f0bb4d2 100644
--- a/meta-openembedded/meta-oe/recipes-core/uutils-coreutils/uutils-coreutils_0.0.21.bb
+++ b/meta-openembedded/meta-oe/recipes-core/uutils-coreutils/uutils-coreutils_0.0.23.bb
@@ -11,7 +11,7 @@
 # so src/uucore/src/lib/features.rs disables utmpx when targetting musl.
 COMPATIBLE_HOST:libc-musl = "null"
 
-SRCREV = "7c7a6083d90af031ed14b585a9c60fa3b79422a0"
+SRCREV = "a3af2230a64d3b60832ce9944df5388a5ba9128a"
 S = "${WORKDIR}/git"
 
 require ${BPN}-crates.inc
diff --git a/meta-openembedded/meta-oe/recipes-crypto/botan/botan_2.19.3.bb b/meta-openembedded/meta-oe/recipes-crypto/botan/botan_3.2.0.bb
similarity index 83%
rename from meta-openembedded/meta-oe/recipes-crypto/botan/botan_2.19.3.bb
rename to meta-openembedded/meta-oe/recipes-crypto/botan/botan_3.2.0.bb
index 8d9d423..5eff2d3 100644
--- a/meta-openembedded/meta-oe/recipes-crypto/botan/botan_2.19.3.bb
+++ b/meta-openembedded/meta-oe/recipes-crypto/botan/botan_3.2.0.bb
@@ -1,11 +1,11 @@
 SUMMARY = "Crypto and TLS for C++11"
 HOMEPAGE = "https://botan.randombit.net"
 LICENSE = "BSD-2-Clause"
-LIC_FILES_CHKSUM = "file://license.txt;md5=f4ce98476c07c34e1793daa036960fad"
+LIC_FILES_CHKSUM = "file://license.txt;md5=f5254d3abe90ec5bb82c5694ff751546"
 SECTION = "libs"
 
 SRC_URI = "https://botan.randombit.net/releases/Botan-${PV}.tar.xz"
-SRC_URI[sha256sum] = "dae047f399c5a47f087db5d3d9d9e8f11ae4985d14c928d71da1aff801802d55"
+SRC_URI[sha256sum] = "049c847835fcf6ef3a9e206b33de05dd38999c325e247482772a5598d9e5ece3"
 
 S = "${WORKDIR}/Botan-${PV}"
 
@@ -40,7 +40,7 @@
 }
 do_install() {
 	oe_runmake install
-	sed -i -e "s|${D}||g" ${D}${libdir}/pkgconfig/botan-2.pc
+	sed -i -e "s|${D}||g" ${D}${libdir}/pkgconfig/botan-3.pc
 }
 
 PACKAGES += "${PN}-python3"
diff --git a/meta-openembedded/meta-oe/recipes-crypto/libsodium/libsodium/0001-fix-aarch64-Move-target-pragma-after-arm_neon.h-incl.patch b/meta-openembedded/meta-oe/recipes-crypto/libsodium/libsodium/0001-fix-aarch64-Move-target-pragma-after-arm_neon.h-incl.patch
new file mode 100644
index 0000000..7a6fae7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-crypto/libsodium/libsodium/0001-fix-aarch64-Move-target-pragma-after-arm_neon.h-incl.patch
@@ -0,0 +1,49 @@
+From d3253310f7c0fc0f1aad6864e3b57958ea1bb9c5 Mon Sep 17 00:00:00 2001
+From: tux3 <barrdetwix@gmail.com>
+Date: Mon, 16 Oct 2023 16:42:04 +0200
+Subject: [PATCH] fix(aarch64): Move target #pragma after arm_neon.h include
+
+Fix per https://github.com/android/ndk/issues/1945
+
+If the pragma is done before the header include,
+in NDK 26 the attribute may apply to the functions in arm_neon.h
+
+Upstream-Status: Backport [https://github.com/jedisct1/libsodium/pull/1321]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ .../aes256gcm/armcrypto/aead_aes256gcm_armcrypto.c   | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/src/libsodium/crypto_aead/aes256gcm/armcrypto/aead_aes256gcm_armcrypto.c b/src/libsodium/crypto_aead/aes256gcm/armcrypto/aead_aes256gcm_armcrypto.c
+index 0a5a128..aa76f5c 100644
+--- a/src/libsodium/crypto_aead/aes256gcm/armcrypto/aead_aes256gcm_armcrypto.c
++++ b/src/libsodium/crypto_aead/aes256gcm/armcrypto/aead_aes256gcm_armcrypto.c
+@@ -19,12 +19,6 @@
+ #define __vectorcall
+ #endif
+ 
+-#ifdef __clang__
+-#pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), apply_to = function)
+-#elif defined(__GNUC__)
+-#pragma GCC target("+simd+crypto")
+-#endif
+-
+ #ifndef __ARM_FEATURE_CRYPTO
+ #define __ARM_FEATURE_CRYPTO 1
+ #endif
+@@ -34,6 +28,12 @@
+ 
+ #include <arm_neon.h>
+ 
++#ifdef __clang__
++#pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), apply_to = function)
++#elif defined(__GNUC__)
++#pragma GCC target("+simd+crypto")
++#endif
++
+ #define ABYTES    crypto_aead_aes256gcm_ABYTES
+ #define NPUBBYTES crypto_aead_aes256gcm_NPUBBYTES
+ #define KEYBYTES  crypto_aead_aes256gcm_KEYBYTES
+-- 
+2.42.1
+
diff --git a/meta-openembedded/meta-oe/recipes-crypto/libsodium/libsodium_1.0.18.bb b/meta-openembedded/meta-oe/recipes-crypto/libsodium/libsodium_1.0.18.bb
deleted file mode 100644
index 53b3ddc..0000000
--- a/meta-openembedded/meta-oe/recipes-crypto/libsodium/libsodium_1.0.18.bb
+++ /dev/null
@@ -1,13 +0,0 @@
-SUMMARY = "The Sodium crypto library"
-HOMEPAGE = "http://libsodium.org/"
-BUGTRACKER = "https://github.com/jedisct1/libsodium/issues"
-LICENSE = "ISC"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=47203c753972e855179dfffe15188bee"
-
-SRC_URI = "https://download.libsodium.org/libsodium/releases/${BPN}-${PV}.tar.gz"
-SRC_URI[md5sum] = "3ca9ebc13b6b4735acae0a6a4c4f9a95"
-SRC_URI[sha256sum] = "6f504490b342a4f8a4c4a02fc9b866cbef8622d5df4e5452b46be121e46636c1"
-
-inherit autotools
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-crypto/libsodium/libsodium_1.0.19.bb b/meta-openembedded/meta-oe/recipes-crypto/libsodium/libsodium_1.0.19.bb
new file mode 100644
index 0000000..2e678f3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-crypto/libsodium/libsodium_1.0.19.bb
@@ -0,0 +1,14 @@
+SUMMARY = "The Sodium crypto library"
+HOMEPAGE = "http://libsodium.org/"
+BUGTRACKER = "https://github.com/jedisct1/libsodium/issues"
+LICENSE = "ISC"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=49ce3b426e6a002e23a1387248e6dbe9"
+
+SRC_URI = "https://download.libsodium.org/libsodium/releases/${BPN}-${PV}.tar.gz \
+           file://0001-fix-aarch64-Move-target-pragma-after-arm_neon.h-incl.patch"
+SRC_URI[sha256sum] = "018d79fe0a045cca07331d37bd0cb57b2e838c51bc48fd837a1472e50068bbea"
+
+inherit autotools
+
+S = "${WORKDIR}/libsodium-stable"
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-dbs/influxdb/influxdb_1.8.10.bb b/meta-openembedded/meta-oe/recipes-dbs/influxdb/influxdb_1.8.10.bb
index 50995c0..7f8110e 100644
--- a/meta-openembedded/meta-oe/recipes-dbs/influxdb/influxdb_1.8.10.bb
+++ b/meta-openembedded/meta-oe/recipes-dbs/influxdb/influxdb_1.8.10.bb
@@ -58,11 +58,15 @@
     if [ "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}" ] ; then
         install -d ${D}${systemd_unitdir}/system
         install -m 0644 ${S}/src/${GO_IMPORT}/scripts/influxdb.service ${D}${systemd_system_unitdir}/influxdb.service
+        install -d ${D}${libdir}/influxdb/scripts
+        install -m 0755 ${S}/src/${GO_IMPORT}/scripts/influxd-systemd-start.sh ${D}${libdir}/influxdb/scripts/influxd-systemd-start.sh
     fi
 
     # TODO chown
 }
 
+FILES:${PN} += "${libdir}/influxdb/scripts/influxd-systemd-start.sh"
+
 INITSCRIPT_PACKAGES = "${PN}"
 INITSCRIPT_NAME = "influxdb"
 INITSCRIPT_PARAMS = "defaults"
diff --git a/meta-openembedded/meta-oe/recipes-dbs/leveldb/leveldb/0001-CMakeLists.txt-fix-googletest-related-options.patch b/meta-openembedded/meta-oe/recipes-dbs/leveldb/leveldb/0001-CMakeLists.txt-fix-googletest-related-options.patch
new file mode 100644
index 0000000..b0bfb8b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/leveldb/leveldb/0001-CMakeLists.txt-fix-googletest-related-options.patch
@@ -0,0 +1,55 @@
+From 77da477840f89da7ced29da315de77571e8f190e Mon Sep 17 00:00:00 2001
+From: Martin Jansa <martin.jansa@gmail.com>
+Date: Fri, 20 Oct 2023 22:57:48 +0200
+Subject: [PATCH] CMakeLists.txt: fix googletest related options
+
+* https://cmake.org/cmake/help/book/mastering-cmake/chapter/Writing%20CMakeLists%20Files.html
+  says that CMake options are case-sensitive and I don't see lower-case version in
+  currently used googletest submodules and gtest is indeed installed with leveldb
+
+* install_gmock option I don't see at all, so I've kept it as is, INSTALL_GTEST, BUILD_GMOCK
+  do exist as upper-case
+
+$ grep -Ri install_.*mock .
+./CMakeLists.txt:  set(install_gmock OFF)
+./third_party/googletest/googlemock/CMakeLists.txt:install_project(gmock gmock_main)
+$ grep -Ri build_gmock .
+./CMakeLists.txt:  set(BUILD_GMOCK ON)
+./third_party/googletest/googletest/README.md:cmake .. -DBUILD_GMOCK=OFF
+./third_party/googletest/CMakeLists.txt:option(BUILD_GMOCK "Builds the googlemock subproject" ON)
+./third_party/googletest/CMakeLists.txt:if(BUILD_GMOCK)
+$ grep -Ri install_gtest .
+./CMakeLists.txt:  set(INSTALL_GTEST OFF)
+./third_party/googletest/googletest/cmake/internal_utils.cmake:  if(INSTALL_GTEST)
+./third_party/googletest/googletest/CMakeLists.txt:if (INSTALL_GTEST)
+./third_party/googletest/CMakeLists.txt:option(INSTALL_GTEST "Enable installation of googletest. (Projects embedding googletest may want to turn this OFF.)" ON)
+
+* also use CACHE and FORCE as sugested in:
+  https://cmake.org/cmake/help/latest/command/set.html
+  https://stackoverflow.com/questions/20239334/cmake-set-subdirectory-options
+  for the value to correctly propagate into third_party/googletest subdirectory
+
+Signed-off-by: Martin Jansa <martin.jansa@gmail.com>
+---
+Upstream-Status: Submitted [https://github.com/google/leveldb/pull/1152]
+
+ CMakeLists.txt | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index fda9e01..f8a2629 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -295,9 +295,9 @@ if(LEVELDB_BUILD_TESTS)
+ 
+   # Prevent overriding the parent project's compiler/linker settings on Windows.
+   set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
+-  set(install_gtest OFF)
+-  set(install_gmock OFF)
+-  set(build_gmock ON)
++  set(INSTALL_GTEST OFF CACHE BOOL "" FORCE)
++  set(install_gmock OFF CACHE BOOL "" FORCE)
++  set(BUILD_GMOCK ON CACHE BOOL "" FORCE)
+ 
+   # This project is tested using GoogleTest.
+   add_subdirectory("third_party/googletest")
diff --git a/meta-openembedded/meta-oe/recipes-dbs/leveldb/leveldb/0001-Fix-printing-64-bit-integer-types.patch b/meta-openembedded/meta-oe/recipes-dbs/leveldb/leveldb/0001-Fix-printing-64-bit-integer-types.patch
new file mode 100644
index 0000000..b9f45e7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/leveldb/leveldb/0001-Fix-printing-64-bit-integer-types.patch
@@ -0,0 +1,43 @@
+From 1ccdb7513a7a0f24b8ce3b6766e52e690874bc64 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 17 Oct 2023 19:08:12 -0700
+Subject: [PATCH] Fix printing 64-bit integer types
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ db/db_impl.cc     | 5 +++--
+ db/version_edit.h | 1 +
+ 2 files changed, 4 insertions(+), 2 deletions(-)
+
+--- a/db/db_impl.cc
++++ b/db/db_impl.cc
+@@ -5,6 +5,7 @@
+ #include "db/db_impl.h"
+ 
+ #include <algorithm>
++#include <cinttypes>
+ #include <atomic>
+ #include <cstdint>
+ #include <cstdio>
+@@ -520,8 +521,8 @@ Status DBImpl::WriteLevel0Table(MemTable
+     mutex_.Lock();
+   }
+ 
+-  Log(options_.info_log, "Level-0 table #%llu: %lld bytes %s",
+-      (unsigned long long)meta.number, (unsigned long long)meta.file_size,
++  Log(options_.info_log, "Level-0 table #%" PRIu64 " : %" PRIu64 " bytes %s",
++      meta.number, meta.file_size,
+       s.ToString().c_str());
+   delete iter;
+   pending_outputs_.erase(meta.number);
+--- a/db/version_edit.h
++++ b/db/version_edit.h
+@@ -5,6 +5,7 @@
+ #ifndef STORAGE_LEVELDB_DB_VERSION_EDIT_H_
+ #define STORAGE_LEVELDB_DB_VERSION_EDIT_H_
+ 
++#include <cstdint>
+ #include <set>
+ #include <utility>
+ #include <vector>
diff --git a/meta-openembedded/meta-oe/recipes-dbs/leveldb/leveldb_1.22.bb b/meta-openembedded/meta-oe/recipes-dbs/leveldb/leveldb_1.23.bb
similarity index 78%
rename from meta-openembedded/meta-oe/recipes-dbs/leveldb/leveldb_1.22.bb
rename to meta-openembedded/meta-oe/recipes-dbs/leveldb/leveldb_1.23.bb
index 6afc45a..60b486d 100644
--- a/meta-openembedded/meta-oe/recipes-dbs/leveldb/leveldb_1.22.bb
+++ b/meta-openembedded/meta-oe/recipes-dbs/leveldb/leveldb_1.23.bb
@@ -4,14 +4,16 @@
 LICENSE = "BSD-3-Clause"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=92d1b128950b11ba8495b64938fc164d"
 
-SRC_URI = "git://github.com/google/${BPN}.git;branch=main;protocol=https \
-           file://run-ptest"
+SRC_URI = "gitsm://github.com/google/${BPN}.git;branch=main;protocol=https \
+    file://0001-CMakeLists.txt-fix-googletest-related-options.patch \
+    file://0001-Fix-printing-64-bit-integer-types.patch \
+    file://run-ptest \
+"
 
-SRCREV = "78b39d68c15ba020c0d60a3906fb66dbf1697595"
+SRCREV = "068d5ee1a3ac40dabd00d211d5013af44be55bea"
 S = "${WORKDIR}/git"
 
 inherit cmake ptest
-
 PACKAGECONFIG ??= ""
 PACKAGECONFIG[benchmarks] = "-DLEVELDB_BUILD_BENCHMARKS=ON,-DLEVELDB_BUILD_BENCHMARKS=OFF,sqlite"
 PACKAGECONFIG[snappy] = ",,snappy"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/abseil-cpp/abseil-cpp/0004-Avoid-using-both-Win32Waiter-and-PthreadWaiter-on-Mi.patch b/meta-openembedded/meta-oe/recipes-devtools/abseil-cpp/abseil-cpp/0004-Avoid-using-both-Win32Waiter-and-PthreadWaiter-on-Mi.patch
new file mode 100644
index 0000000..db559bb
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/abseil-cpp/abseil-cpp/0004-Avoid-using-both-Win32Waiter-and-PthreadWaiter-on-Mi.patch
@@ -0,0 +1,62 @@
+From cb7665f39e23e95e2466390c60ee5a410780a3ed Mon Sep 17 00:00:00 2001
+From: Derek Mauro <dmauro@google.com>
+Date: Wed, 8 Nov 2023 09:55:31 -0800
+Subject: [PATCH] Avoid using both Win32Waiter and PthreadWaiter on MinGW, and
+ use StdcppWaiter instead.
+
+There are various flavors of MinGW, some of which support pthread,
+and some of which support Win32. Instead of figuring out which
+platform is being used, just use the generic implementation.
+
+PiperOrigin-RevId: 580565507
+Change-Id: Ia85fd7496f1e6ebdeadb95202f0039e844826118
+Upstream-Status: Backport
+---
+ absl/synchronization/internal/pthread_waiter.h | 4 ++--
+ absl/synchronization/internal/win32_waiter.h   | 6 ++++--
+ 2 files changed, 6 insertions(+), 4 deletions(-)
+
+diff --git a/absl/synchronization/internal/pthread_waiter.h b/absl/synchronization/internal/pthread_waiter.h
+index 206aefa4..23db76ad 100644
+--- a/absl/synchronization/internal/pthread_waiter.h
++++ b/absl/synchronization/internal/pthread_waiter.h
+@@ -16,7 +16,7 @@
+ #ifndef ABSL_SYNCHRONIZATION_INTERNAL_PTHREAD_WAITER_H_
+ #define ABSL_SYNCHRONIZATION_INTERNAL_PTHREAD_WAITER_H_
+ 
+-#ifndef _WIN32
++#if !defined(_WIN32) && !defined(__MINGW32__)
+ #include <pthread.h>
+ 
+ #include "absl/base/config.h"
+@@ -55,6 +55,6 @@ class PthreadWaiter : public WaiterCrtp<PthreadWaiter> {
+ ABSL_NAMESPACE_END
+ }  // namespace absl
+ 
+-#endif  // ndef _WIN32
++#endif  // !defined(_WIN32) && !defined(__MINGW32__)
+ 
+ #endif  // ABSL_SYNCHRONIZATION_INTERNAL_PTHREAD_WAITER_H_
+diff --git a/absl/synchronization/internal/win32_waiter.h b/absl/synchronization/internal/win32_waiter.h
+index 87eb617c..fdab264e 100644
+--- a/absl/synchronization/internal/win32_waiter.h
++++ b/absl/synchronization/internal/win32_waiter.h
+@@ -20,7 +20,8 @@
+ #include <sdkddkver.h>
+ #endif
+ 
+-#if defined(_WIN32) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
++#if defined(_WIN32) && !defined(__MINGW32__) && \
++    _WIN32_WINNT >= _WIN32_WINNT_VISTA
+ 
+ #include "absl/base/config.h"
+ #include "absl/synchronization/internal/kernel_timeout.h"
+@@ -65,6 +66,7 @@ class Win32Waiter : public WaiterCrtp<Win32Waiter> {
+ ABSL_NAMESPACE_END
+ }  // namespace absl
+ 
+-#endif  // defined(_WIN32) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
++#endif  // defined(_WIN32) && !defined(__MINGW32__) &&
++        // _WIN32_WINNT >= _WIN32_WINNT_VISTA
+ 
+ #endif  // ABSL_SYNCHRONIZATION_INTERNAL_WIN32_WAITER_H_
diff --git a/meta-openembedded/meta-oe/recipes-devtools/abseil-cpp/abseil-cpp_git.bb b/meta-openembedded/meta-oe/recipes-devtools/abseil-cpp/abseil-cpp_git.bb
index f847ebf..65ecab7 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/abseil-cpp/abseil-cpp_git.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/abseil-cpp/abseil-cpp_git.bb
@@ -7,14 +7,15 @@
 LICENSE = "Apache-2.0"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=df52c6edb7adc22e533b2bacc3bd3915"
 
-PV = "20230802.0"
-SRCREV = "29bf8085f3bf17b84d30e34b3d7ff8248fda404e"
+PV = "20230802.1"
+SRCREV = "fb3621f4f897824c0dbe0615fa94543df6192f30"
 BRANCH = "lts_2023_08_02"
 SRC_URI = "git://github.com/abseil/abseil-cpp;branch=${BRANCH};protocol=https \
            file://0001-absl-always-use-asm-sgidefs.h.patch             \
            file://0002-Remove-maes-option-from-cross-compilation.patch \
            file://abseil-ppc-fixes.patch \
            file://0003-Remove-neon-option-from-cross-compilation.patch \
+           file://0004-Avoid-using-both-Win32Waiter-and-PthreadWaiter-on-Mi.patch \
           "
 
 S = "${WORKDIR}/git"
@@ -32,4 +33,6 @@
 
 BBCLASSEXTEND = "native nativesdk"
 
+SYSROOT_DIRS:append:class-nativesdk:mingw32 = " ${bindir}"
+
 FILES:${PN}-dev += "${includedir} ${libdir}/cmake ${libdir}/pkgconfig"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools_5.1.1.r37.bb b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools_5.1.1.r37.bb
index 9278146..1c66ea4 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools_5.1.1.r37.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools_5.1.1.r37.bb
@@ -92,7 +92,7 @@
 
     # Setting both variables below causing our makefiles to not work with
     # implicit make rules
-    CFLAGS="-ffile-prefix-map=${S}=/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}"
+    CFLAGS="-ffile-prefix-map=${S}=${TARGET_DBGSRC_DIR}"
     unset CPPFLAGS
 
     export SRCDIR=${S}
diff --git a/meta-openembedded/meta-oe/recipes-devtools/capnproto/capnproto_0.10.4.bb b/meta-openembedded/meta-oe/recipes-devtools/capnproto/capnproto_1.0.1.bb
similarity index 89%
rename from meta-openembedded/meta-oe/recipes-devtools/capnproto/capnproto_0.10.4.bb
rename to meta-openembedded/meta-oe/recipes-devtools/capnproto/capnproto_1.0.1.bb
index bbdc3b5..99a76d4 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/capnproto/capnproto_0.10.4.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/capnproto/capnproto_1.0.1.bb
@@ -5,8 +5,8 @@
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://../LICENSE;md5=a05663ae6cca874123bf667a60dca8c9"
 
-SRC_URI = "git://github.com/sandstorm-io/capnproto.git;branch=release-0.10.4;protocol=https"
-SRCREV = "a91ec65323c2577732224d0cf6f5bf1e79d3a724"
+SRC_URI = "git://github.com/sandstorm-io/capnproto.git;branch=release-${PV};protocol=https"
+SRCREV = "c7f810a76ca88ff28613fa165927e0269255aab0"
 
 S = "${WORKDIR}/git/c++"
 
diff --git a/meta-openembedded/meta-oe/recipes-devtools/cjson/cjson/run-ptest b/meta-openembedded/meta-oe/recipes-devtools/cjson/cjson/run-ptest
new file mode 100644
index 0000000..f061e94
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/cjson/cjson/run-ptest
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+# exclude json_patch_tests
+if ctest -E 'json_patch_tests' ; then
+    echo "PASS: cjson"
+else
+    echo "FAIL: cjson"
+fi
diff --git a/meta-openembedded/meta-oe/recipes-devtools/cjson/cjson_1.7.15.bb b/meta-openembedded/meta-oe/recipes-devtools/cjson/cjson_1.7.15.bb
deleted file mode 100644
index 8bf7981..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/cjson/cjson_1.7.15.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-DESCRIPTION = "Ultralightweight JSON parser in ANSI C"
-HOMEPAGE = "https://github.com/DaveGamble/cJSON"
-SECTION = "libs"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=218947f77e8cb8e2fa02918dc41c50d0"
-
-SRC_URI = "git://github.com/DaveGamble/cJSON.git;branch=master;protocol=https"
-SRCREV = "d348621ca93571343a56862df7de4ff3bc9b5667"
-
-S = "${WORKDIR}/git"
-
-inherit cmake pkgconfig
-
-EXTRA_OECMAKE += "\
-    -DENABLE_CJSON_UTILS=On \
-    -DENABLE_CUSTOM_COMPILER_FLAGS=OFF \
-    -DBUILD_SHARED_AND_STATIC_LIBS=On \
-"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/cjson/cjson_1.7.16.bb b/meta-openembedded/meta-oe/recipes-devtools/cjson/cjson_1.7.16.bb
new file mode 100644
index 0000000..f8e0bbf
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/cjson/cjson_1.7.16.bb
@@ -0,0 +1,40 @@
+DESCRIPTION = "Ultralightweight JSON parser in ANSI C"
+HOMEPAGE = "https://github.com/DaveGamble/cJSON"
+SECTION = "libs"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=218947f77e8cb8e2fa02918dc41c50d0"
+
+SRC_URI = "git://github.com/DaveGamble/cJSON.git;branch=master;protocol=https \
+           file://run-ptest \
+         "
+SRCREV = "cb8693b058ba302f4829ec6d03f609ac6f848546"
+
+S = "${WORKDIR}/git"
+
+inherit cmake pkgconfig ptest
+
+RDEPENDS:${PN}-ptest += "cmake"
+
+do_install_ptest() {
+        # create directories
+        install -d ${D}${PTEST_PATH} ${D}${PTEST_PATH}/tests ${D}${PTEST_PATH}/fuzzing
+        install -d ${D}${PTEST_PATH}/tests/inputs ${D}${PTEST_PATH}/tests/json-patch-tests
+        # CTestTestfiles.cmake contain fully defined path generated by cmake.
+        # Change the fully defined path to ptest path on the target
+        sed s#${B}#${PTEST_PATH}# ${B}/CTestTestfile.cmake > ${D}${PTEST_PATH}/CTestTestfile.cmake
+        sed s#${B}#${PTEST_PATH}# ${B}/tests/CTestTestfile.cmake > ${D}${PTEST_PATH}/tests/CTestTestfile.cmake
+        sed s#${B}#${PTEST_PATH}# ${B}/fuzzing/CTestTestfile.cmake > ${D}${PTEST_PATH}/fuzzing/CTestTestfile.cmake
+        # install test artifacts
+        install ${B}/cJSON_test ${D}${PTEST_PATH}
+        install ${B}/tests/cjson_add ${B}/tests/*_tests ${B}/tests/parse_*  ${B}/tests/print_*  ${B}/tests/readme_examples ${D}${PTEST_PATH}/tests/
+        install ${B}/tests/inputs/* ${D}${PTEST_PATH}/tests/inputs
+        install ${B}/fuzzing/fuzz_main ${D}${PTEST_PATH}/fuzzing
+}
+
+EXTRA_OECMAKE += "\
+    -DENABLE_CJSON_UTILS=On \
+    -DENABLE_CUSTOM_COMPILER_FLAGS=OFF \
+    -DBUILD_SHARED_AND_STATIC_LIBS=On \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/cloc/cloc_1.94.bb b/meta-openembedded/meta-oe/recipes-devtools/cloc/cloc_1.98.bb
similarity index 85%
rename from meta-openembedded/meta-oe/recipes-devtools/cloc/cloc_1.94.bb
rename to meta-openembedded/meta-oe/recipes-devtools/cloc/cloc_1.98.bb
index 37a21cc..ea5f006 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/cloc/cloc_1.94.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/cloc/cloc_1.98.bb
@@ -5,7 +5,7 @@
 LIC_FILES_CHKSUM = "file://LICENSE;md5=2c1c00f9d3ed9e24fa69b932b7e7aff2"
 
 SRC_URI = "https://github.com/AlDanial/cloc/releases/download/v${PV}/${BP}.tar.gz"
-SRC_URI[sha256sum] = "08212290c4e9b21c7bb1abc0a9b4a365ce1c5eb0d8f3ebb74d50b29559a71a9c"
+SRC_URI[sha256sum] = "5fe0b159eb75718df7308a4f61470eaddf82170733929999e37a3fbb4651cf8a"
 
 UPSTREAM_CHECK_URI = "https://github.com/AlDanial/${BPN}/releases"
 
diff --git a/meta-openembedded/meta-oe/recipes-devtools/cpuid/cpuid_20211129.bb b/meta-openembedded/meta-oe/recipes-devtools/cpuid/cpuid_20230614.bb
similarity index 90%
rename from meta-openembedded/meta-oe/recipes-devtools/cpuid/cpuid_20211129.bb
rename to meta-openembedded/meta-oe/recipes-devtools/cpuid/cpuid_20230614.bb
index 3218ba6..a88042b 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/cpuid/cpuid_20211129.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/cpuid/cpuid_20230614.bb
@@ -9,7 +9,7 @@
 
 SRC_URI = "http://www.etallen.com/${BPN}/${BP}.src.tar.gz \
            "
-SRC_URI[sha256sum] = "230772bb88c44732e68a42d2eff43bcff46d893bf4ea6e04151d4cb6e8c88e2f"
+SRC_URI[sha256sum] = "b1c83045efc26076307751e0662d580277f5f9bf89cf027231a7812003c3a4e8"
 
 COMPATIBLE_HOST = "(i.86|x86_64).*-linux"
 
diff --git a/meta-openembedded/meta-oe/recipes-devtools/ctags/ctags_6.0.20230917.0.bb b/meta-openembedded/meta-oe/recipes-devtools/ctags/ctags_6.0.20231119.0.bb
similarity index 95%
rename from meta-openembedded/meta-oe/recipes-devtools/ctags/ctags_6.0.20230917.0.bb
rename to meta-openembedded/meta-oe/recipes-devtools/ctags/ctags_6.0.20231119.0.bb
index 02afbfb..b53753c 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/ctags/ctags_6.0.20230917.0.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/ctags/ctags_6.0.20231119.0.bb
@@ -14,7 +14,7 @@
 
 inherit autotools-brokensep pkgconfig manpages
 
-SRCREV = "481ad1b36daca1d40060dd32b0d825cddc97e9cb"
+SRCREV = "f727e74001ec5081818669635fc2bae377be6eda"
 SRC_URI = "git://github.com/universal-ctags/ctags;branch=master;protocol=https"
 
 S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/dnf-plugin-tui/dnf-plugin-tui_git.bb b/meta-openembedded/meta-oe/recipes-devtools/dnf-plugin-tui/dnf-plugin-tui_git.bb
index 9402392..8db456b 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/dnf-plugin-tui/dnf-plugin-tui_git.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/dnf-plugin-tui/dnf-plugin-tui_git.bb
@@ -4,7 +4,7 @@
 LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
 
 SRC_URI = "git://github.com/ubinux/dnf-plugin-tui.git;branch=master;protocol=https"
-SRCREV = "83917a3935ac7ce1d8d96e914d96a6679319a336"
+SRCREV = "baac322a8a6d57e62c703f6ed523152baec18b4f"
 PV = "1.3"
 
 SRC_URI:append:class-target = " file://oe-remote.repo.sample"
@@ -42,6 +42,6 @@
     dnf \
     libnewt-python \
 "
-DEPENDS:append:class-nativesdk = " file-replacement-nativesdk"
 BBCLASSEXTEND = "nativesdk"
+
 SKIP_RECIPE[dnf-plugin-tui] ?= "${@bb.utils.contains('PACKAGE_CLASSES', 'package_rpm', '', 'does not build correctly without package_rpm in PACKAGE_CLASSES', d)}"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/glade/glade_3.22.2.bb b/meta-openembedded/meta-oe/recipes-devtools/glade/glade_3.22.2.bb
index 28b1279..3936e04 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/glade/glade_3.22.2.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/glade/glade_3.22.2.bb
@@ -8,7 +8,7 @@
            gnome-common-native \
            autoconf-archive-native \
 "
-
+GNOMEBASEBUILDCLASS = "autotools"
 inherit features_check autotools pkgconfig gnomebase gobject-introspection mime-xdg
 
 # xfce4 depends on libwnck3, gtk+3 and libepoxy need to be built with x11 PACKAGECONFIG.
diff --git a/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc/0001-cmake-Link-with-libatomic-on-rv32-rv64.patch b/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc/0001-cmake-Link-with-libatomic-on-rv32-rv64.patch
index c2afd4a..fbdf06d 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc/0001-cmake-Link-with-libatomic-on-rv32-rv64.patch
+++ b/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc/0001-cmake-Link-with-libatomic-on-rv32-rv64.patch
@@ -1,4 +1,4 @@
-From 592a4aaba20818bcff9a1448c34b09aff9e0d2e9 Mon Sep 17 00:00:00 2001
+From c321f19ff1cd1251c19d20b17a2d86c4237ce506 Mon Sep 17 00:00:00 2001
 From: Khem Raj <raj.khem@gmail.com>
 Date: Tue, 19 Apr 2022 16:07:19 -0700
 Subject: [PATCH] cmake: Link with libatomic on rv32/rv64
@@ -9,15 +9,16 @@
 
 Upstream-Status: Pending
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
 ---
  CMakeLists.txt | 3 +++
  1 file changed, 3 insertions(+)
 
 diff --git a/CMakeLists.txt b/CMakeLists.txt
-index a8fd3bf37b3..9f5b242683d 100644
+index b272816685..e1fe1102c4 100644
 --- a/CMakeLists.txt
 +++ b/CMakeLists.txt
-@@ -303,6 +303,9 @@ if(UNIX)
+@@ -303,6 +303,9 @@ if(UNIX AND NOT HAIKU)
    if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX)
      set(_gRPC_ALLTARGETS_LIBRARIES ${_gRPC_ALLTARGETS_LIBRARIES} rt)
    endif()
@@ -26,7 +27,4 @@
 +  endif()
  endif()
  
- # configure ccache if requested
--- 
-2.36.0
-
+ include(CheckCXXSourceCompiles)
diff --git a/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc_1.56.2.bb b/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc_1.59.2.bb
similarity index 97%
rename from meta-openembedded/meta-oe/recipes-devtools/grpc/grpc_1.56.2.bb
rename to meta-openembedded/meta-oe/recipes-devtools/grpc/grpc_1.59.2.bb
index c4dd6b9..c30e522 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc_1.56.2.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc_1.59.2.bb
@@ -20,8 +20,8 @@
 # RDEPENDS:${PN}-dev += "${PN}-compiler"
 
 S = "${WORKDIR}/git"
-SRCREV_grpc = "c0d1c393d9365664d47df41746e992ae97b651ef"
-BRANCH = "v1.56.x"
+SRCREV_grpc = "883e5f76976b86afee87415dc67bde58d9b295a4"
+BRANCH = "v1.59.x"
 SRC_URI = "gitsm://github.com/grpc/grpc.git;protocol=https;name=grpc;branch=${BRANCH} \
            file://0001-cmake-Link-with-libatomic-on-rv32-rv64.patch \
            "
diff --git a/meta-openembedded/meta-oe/recipes-devtools/gst-editing-services/gst-editing-services_1.20.5.bb b/meta-openembedded/meta-oe/recipes-devtools/gst-editing-services/gst-editing-services_1.22.7.bb
similarity index 87%
rename from meta-openembedded/meta-oe/recipes-devtools/gst-editing-services/gst-editing-services_1.20.5.bb
rename to meta-openembedded/meta-oe/recipes-devtools/gst-editing-services/gst-editing-services_1.22.7.bb
index 6b7775c..50d45ef 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/gst-editing-services/gst-editing-services_1.20.5.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/gst-editing-services/gst-editing-services_1.22.7.bb
@@ -18,9 +18,11 @@
 EXTRA_OEMESON = "-Dvalidate=disabled"
 
 SRC_URI = "http://gstreamer.freedesktop.org/src/gst-editing-services/gst-editing-services-${PV}.tar.xz"
-SRC_URI[sha256sum] = "363f2b13675877b926b4be5259dbbeea8cc976805b40c871fc254bb8f382017d"
+SRC_URI[sha256sum] = "fec56a2c37a253cd048d288d4c7eda6eff191022b09db975e07a2c105d1b521e"
 
 PACKAGES += "gst-validate-launcher libges"
 
 FILES:gst-validate-launcher = "${nonarch_libdir}/gst-validate-launcher ${datadir}/gstreamer-1.0/validate"
 FILES:libges = "${libdir}/gstreamer-1.0/*.so"
+
+FILES:${PN} += "/usr/lib/python${PYTHON_BASEVERSION}"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/heaptrack/heaptrack_1.2.0.bb b/meta-openembedded/meta-oe/recipes-devtools/heaptrack/heaptrack_1.2.0.bb
index 29937e2..be2c0f5 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/heaptrack/heaptrack_1.2.0.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/heaptrack/heaptrack_1.2.0.bb
@@ -29,4 +29,4 @@
 COMPATIBLE_HOST:riscv32 = "null"
 COMPATIBLE_HOST:riscv64 = "null"
 
-BBCLASSEXTEND = "native nativesdk"
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/libgee/libgee_0.20.6.bb b/meta-openembedded/meta-oe/recipes-devtools/libgee/libgee_0.20.6.bb
index f7b54b9..0ed6e82 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/libgee/libgee_0.20.6.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/libgee/libgee_0.20.6.bb
@@ -8,7 +8,7 @@
 LICENSE = "LGPL-2.1-only"
 LIC_FILES_CHKSUM = "file://COPYING;md5=fbc093901857fcd118f065f900982c24"
 
-PE = "1"
+GNOMEBASEBUILDCLASS = "autotools"
 inherit gnomebase vala gobject-introspection
 
 do_configure:prepend() {
diff --git a/meta-openembedded/meta-oe/recipes-devtools/luaposix/luaposix_35.1.bb b/meta-openembedded/meta-oe/recipes-devtools/luaposix/luaposix_36.2.1.bb
similarity index 78%
rename from meta-openembedded/meta-oe/recipes-devtools/luaposix/luaposix_35.1.bb
rename to meta-openembedded/meta-oe/recipes-devtools/luaposix/luaposix_36.2.1.bb
index a71bbeb..1d27eb2 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/luaposix/luaposix_35.1.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/luaposix/luaposix_36.2.1.bb
@@ -1,13 +1,13 @@
 DESCRIPTION = "luaposix is a POSIX binding for Lua."
 LICENSE = "MIT"
 HOMEPAGE = "https://github.com/luaposix/luaposix"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=f81069e00c0cad249f20efe958276db1"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=f30d022f6ef53952fa87cc0b6fffb153"
 
 DEPENDS += "lua-native lua virtual/crypt"
 
-SRC_URI = "git://github.com/luaposix/luaposix.git;branch=release-v${PV};protocol=https \
+SRC_URI = "git://github.com/luaposix/luaposix.git;branch=release-v36.2;protocol=https \
 "
-SRCREV = "14043c5086ae738823a5dfbc9170d9e14193fbef"
+SRCREV = "5a8d8c768fc3c51f42cb591e9523a60399efc6a1"
 S = "${WORKDIR}/git"
 LUA_VERSION = "5.4"
 
diff --git a/meta-openembedded/meta-oe/recipes-devtools/mercurial/mercurial_6.1.bb b/meta-openembedded/meta-oe/recipes-devtools/mercurial/mercurial_6.5.bb
similarity index 86%
rename from meta-openembedded/meta-oe/recipes-devtools/mercurial/mercurial_6.1.bb
rename to meta-openembedded/meta-oe/recipes-devtools/mercurial/mercurial_6.5.bb
index a415ebc..112df8c 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/mercurial/mercurial_6.1.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/mercurial/mercurial_6.5.bb
@@ -10,7 +10,7 @@
 inherit python3native python3targetconfig
 
 SRC_URI = "https://www.mercurial-scm.org/release/${BP}.tar.gz"
-SRC_URI[sha256sum] = "86f98645e4565a9256991dcde22b77b8e7d22ca6fbb60c1f4cdbd8469a38cc1f"
+SRC_URI[sha256sum] = "a5603d0d395ebf67fe5d27abbb3bd37fcc01871ecf394c793672d2c1e68be7e7"
 
 S = "${WORKDIR}/mercurial-${PV}"
 
@@ -31,7 +31,6 @@
 }
 PACKAGES =+ "${PN}-python"
 
-FILES:${PN} += "${PYTHON_SITEPACKAGES_DIR}"
-
+FILES:${PN} += "${PYTHON_SITEPACKAGES_DIR} ${datadir}"
 FILES:${PN}-python = "${nonarch_libdir}/${PYTHON_DIR}"
 
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/files/0001-custom-allocators-define-missing-rebind-type-3895.patch b/meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/files/0001-custom-allocators-define-missing-rebind-type-3895.patch
new file mode 100644
index 0000000..d964586
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/files/0001-custom-allocators-define-missing-rebind-type-3895.patch
@@ -0,0 +1,61 @@
+From 6cec5aefc97ad219b6fd5a4132f88f7c8f6800ee Mon Sep 17 00:00:00 2001
+From: Sergei Trofimovich <slyich@gmail.com>
+Date: Wed, 8 Mar 2023 11:31:56 +0000
+Subject: [PATCH] custom allocators: define missing 'rebind' type (#3895)
+
+Upstream-Status: Backport [https://github.com/nlohmann/json/commit/6cec5aefc97ad219b6fd5a4132f88f7c8f6800ee]
+
+Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
+---
+ tests/src/unit-allocator.cpp   | 9 +++++++++
+ tests/src/unit-regression2.cpp | 9 +++++++++
+ 2 files changed, 18 insertions(+)
+
+diff --git a/tests/src/unit-allocator.cpp b/tests/src/unit-allocator.cpp
+index 76e3b03f..f2e63552 100644
+--- a/tests/src/unit-allocator.cpp
++++ b/tests/src/unit-allocator.cpp
+@@ -20,11 +20,20 @@ struct bad_allocator : std::allocator<T>
+ {
+     using std::allocator<T>::allocator;
+ 
++    bad_allocator() = default;
++    template<class U> bad_allocator(const bad_allocator<U>& /*unused*/) { }
++
+     template<class... Args>
+     void construct(T* /*unused*/, Args&& ... /*unused*/)
+     {
+         throw std::bad_alloc();
+     }
++
++    template <class U>
++    struct rebind
++    {
++        using other = bad_allocator<U>;
++    };
+ };
+ } // namespace
+ 
+diff --git a/tests/src/unit-regression2.cpp b/tests/src/unit-regression2.cpp
+index 2bb9b32e..dbafb436 100644
+--- a/tests/src/unit-regression2.cpp
++++ b/tests/src/unit-regression2.cpp
+@@ -189,6 +189,15 @@ class my_allocator : public std::allocator<T>
+ {
+   public:
+     using std::allocator<T>::allocator;
++
++    my_allocator() = default;
++    template<class U> my_allocator(const my_allocator<U>& /*unused*/) { }
++
++    template <class U>
++    struct rebind
++    {
++        using other = my_allocator<U>;
++    };
+ };
+ 
+ /////////////////////////////////////////////////////////////////////
+-- 
+2.25.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/files/0001-tests-unit-iterators2-use-std-ranges-equals-for-rang.patch b/meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/files/0001-tests-unit-iterators2-use-std-ranges-equals-for-rang.patch
new file mode 100644
index 0000000..463912e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/files/0001-tests-unit-iterators2-use-std-ranges-equals-for-rang.patch
@@ -0,0 +1,31 @@
+From 660d0b58565073975d6f5d94365d6cbf150a4cf8 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Arsen=20Arsenovi=C4=87?= <arsen@aarsen.me>
+Date: Sun, 5 Mar 2023 14:11:22 +0100
+Subject: [PATCH] tests/unit-iterators2: use std::ranges::equals for range
+ comparisons (#3950)
+
+Closes https://github.com/nlohmann/json/issues/3927
+
+Upstream-Status: Backport [https://github.com/nlohmann/json/commit/660d0b58565073975d6f5d94365d6cbf150a4cf8]
+
+Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
+---
+ tests/src/unit-iterators2.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tests/src/unit-iterators2.cpp b/tests/src/unit-iterators2.cpp
+index 27926084..72a5d9dc 100644
+--- a/tests/src/unit-iterators2.cpp
++++ b/tests/src/unit-iterators2.cpp
+@@ -943,7 +943,7 @@ TEST_CASE("iterators 2")
+                 json j_expected{5, 4, 3, 2, 1};
+ 
+                 auto reversed = j | std::views::reverse;
+-                CHECK(reversed == j_expected);
++                CHECK(std::ranges::equal(reversed, j_expected));
+             }
+ 
+             SECTION("transform")
+-- 
+2.25.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/files/run-ptest b/meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/files/run-ptest
new file mode 100755
index 0000000..2f00267
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/files/run-ptest
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+cd tests
+for atest in test-* ; do
+    rm -rf tests.log
+    ./${atest} > tests.log 2>&1
+    if [ $? = 0 ] ; then
+        echo "PASS: ${atest}"
+    else
+        echo "FAIL: ${atest}"
+    fi
+done
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/nlohmann-json_3.11.2.bb b/meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/nlohmann-json_3.11.2.bb
index 74e4094..694d632 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/nlohmann-json_3.11.2.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/nlohmann-json_3.11.2.bb
@@ -7,22 +7,38 @@
 CVE_PRODUCT = "json-for-modern-cpp"
 
 SRC_URI = "git://github.com/nlohmann/json.git;branch=develop;protocol=https \
-           "
+           git://github.com/nlohmann/json_test_data.git;destsuffix=git/json_test_data;name=json-test-data;branch=master;protocol=https \
+           file://0001-custom-allocators-define-missing-rebind-type-3895.patch \
+           file://0001-tests-unit-iterators2-use-std-ranges-equals-for-rang.patch \
+           file://run-ptest \
+"
 
 SRCREV = "bc889afb4c5bf1c0d8ee29ef35eaaf4c8bef8a5d"
+SRCREV_json-test-data = "a1375cea09d27cc1c4cadb8d00470375b421ac37"
+
+SRCREV_FORMAT = "json-test-data"
 
 S = "${WORKDIR}/git"
 
-inherit cmake
+inherit cmake ptest
 
-EXTRA_OECMAKE += "-DJSON_BuildTests=OFF"
+EXTRA_OECMAKE += "${@bb.utils.contains('PTEST_ENABLED', '1', '-DJSON_BuildTests=ON -DJSON_TestDataDirectory=${PTEST_PATH}/json_test_data', '-DJSON_BuildTests=OFF', d)}"
 
 # nlohmann-json is a header only C++ library, so the main package will be empty.
 ALLOW_EMPTY:${PN} = "1"
 RDEPENDS:${PN}-dev = ""
+RDEPENDS:${PN}-ptest = "perl"
 
 BBCLASSEXTEND = "native nativesdk"
 
+
+do_install_ptest () {
+    install -d ${D}${PTEST_PATH}/tests
+    cp -r ${S}/json_test_data/ ${D}${PTEST_PATH}/
+    cp -r ${B}/tests/test-* ${D}${PTEST_PATH}/tests
+}
+
+
 # other packages commonly reference the file directly as "json.hpp"
 # create symlink to allow this usage
 do_install:append() {
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0001-Revert-io_uring-changes-from-libuv-1.46.0.patch b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0001-Revert-io_uring-changes-from-libuv-1.46.0.patch
new file mode 100644
index 0000000..d98463d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0001-Revert-io_uring-changes-from-libuv-1.46.0.patch
@@ -0,0 +1,3414 @@
+From 937dfa70104b7401a7570a98cf6e0a534e250557 Mon Sep 17 00:00:00 2001
+From: Martin Jansa <martin.jansa@gmail.com>
+Date: Wed, 18 Oct 2023 22:43:55 +0200
+Subject: [PATCH] Revert io_uring changes from libuv-1.46.0
+
+Included in nodejs-20.4.0 with the libuv upgrade to 1.46.0 in:
+https://github.com/nodejs/node/commit/6199e1946c9abd59bd71a61870a4f6c85e100b18
+
+Revert "linux: work around io_uring IORING_OP_CLOSE bug (#4059)"
+This reverts commit 1752791c9ea89dbf54e2a20a9d9f899119a2d179.
+Revert "linux: fs_read to use io_uring if iovcnt > IOV_MAX (#4023)"
+This reverts commit e7b96331703e929e75d93c574573c9736e34b0c0.
+Revert "linux: add some more iouring backed fs ops (#4012)"
+This reverts commit 962b8e626ceaaf296eecab1d008e8b70dc6da5e7.
+Revert "android: disable io_uring support (#4016)"
+This reverts commit 281e6185cc9e77c582ff6ca9e4c00d57e6b90d95.
+Revert "unix,win: replace QUEUE with struct uv__queue (#4022)"
+This reverts commit 1b01b786c0180d29f07dccbb98001a2b3148828a.
+Revert "fs: use WTF-8 on Windows (#2970)"
+This reverts commit 8f32a14afaaa47514a7d28e1e069a8329e2dd939.
+
+Dropped deps/uv/docs deps/uv/test changes as these dirs aren't included
+in nodejs tarballs.
+
+Signed-off-by: Martin Jansa <martin.jansa@gmail.com>
+---
+Upstream-Status: Inappropriate [OE specific]
+
+ deps/uv/include/uv.h                     |  10 +-
+ deps/uv/include/uv/darwin.h              |   6 +-
+ deps/uv/include/uv/linux.h               |   2 +-
+ deps/uv/include/uv/threadpool.h          |   2 +-
+ deps/uv/include/uv/unix.h                |  44 ++--
+ deps/uv/include/uv/win.h                 |   4 +-
+ deps/uv/src/queue.h                      | 154 ++++++-----
+ deps/uv/src/threadpool.c                 |  72 +++---
+ deps/uv/src/unix/aix.c                   |  14 +-
+ deps/uv/src/unix/async.c                 |  52 ++--
+ deps/uv/src/unix/core.c                  |  53 ++--
+ deps/uv/src/unix/fs.c                    |  41 +--
+ deps/uv/src/unix/fsevents.c              |  84 +++---
+ deps/uv/src/unix/internal.h              |  11 -
+ deps/uv/src/unix/kqueue.c                |  18 +-
+ deps/uv/src/unix/linux.c                 | 257 +++----------------
+ deps/uv/src/unix/loop-watcher.c          |  20 +-
+ deps/uv/src/unix/loop.c                  |  28 +-
+ deps/uv/src/unix/os390-syscalls.c        |  24 +-
+ deps/uv/src/unix/os390-syscalls.h        |   2 +-
+ deps/uv/src/unix/os390.c                 |  14 +-
+ deps/uv/src/unix/pipe.c                  |   2 +-
+ deps/uv/src/unix/posix-poll.c            |  14 +-
+ deps/uv/src/unix/process.c               |  38 +--
+ deps/uv/src/unix/signal.c                |   8 +-
+ deps/uv/src/unix/stream.c                |  56 ++--
+ deps/uv/src/unix/sunos.c                 |  18 +-
+ deps/uv/src/unix/tcp.c                   |   4 +-
+ deps/uv/src/unix/tty.c                   |   2 +-
+ deps/uv/src/unix/udp.c                   |  76 +++---
+ deps/uv/src/uv-common.c                  |  28 +-
+ deps/uv/src/uv-common.h                  |   3 +-
+ deps/uv/src/win/core.c                   |   6 +-
+ deps/uv/src/win/fs.c                     | 311 ++++++++---------------
+ deps/uv/src/win/handle-inl.h             |   2 +-
+ deps/uv/src/win/pipe.c                   |  26 +-
+ deps/uv/src/win/tcp.c                    |   4 +-
+ deps/uv/src/win/udp.c                    |   4 +-
+ deps/uv/test/test-fs.c                   |  53 ----
+ deps/uv/test/test-list.h                 |   2 -
+ deps/uv/test/test-queue-foreach-delete.c |   5 +-
+ deps/uv/test/test-threadpool-cancel.c    |   5 -
+ 42 files changed, 625 insertions(+), 954 deletions(-)
+
+diff --git a/deps/uv/include/uv.h b/deps/uv/include/uv.h
+index 02397dd0fdd..1af95289776 100644
+--- a/deps/uv/include/uv.h
++++ b/deps/uv/include/uv.h
+@@ -59,12 +59,6 @@ extern "C" {
+ #include <stdio.h>
+ #include <stdint.h>
+ 
+-/* Internal type, do not use. */
+-struct uv__queue {
+-  struct uv__queue* next;
+-  struct uv__queue* prev;
+-};
+-
+ #if defined(_WIN32)
+ # include "uv/win.h"
+ #else
+@@ -466,7 +460,7 @@ struct uv_shutdown_s {
+   uv_handle_type type;                                                        \
+   /* private */                                                               \
+   uv_close_cb close_cb;                                                       \
+-  struct uv__queue handle_queue;                                              \
++  void* handle_queue[2];                                                      \
+   union {                                                                     \
+     int fd;                                                                   \
+     void* reserved[4];                                                        \
+@@ -1870,7 +1864,7 @@ struct uv_loop_s {
+   void* data;
+   /* Loop reference counting. */
+   unsigned int active_handles;
+-  struct uv__queue handle_queue;
++  void* handle_queue[2];
+   union {
+     void* unused;
+     unsigned int count;
+diff --git a/deps/uv/include/uv/darwin.h b/deps/uv/include/uv/darwin.h
+index 06962bfda80..d226415820b 100644
+--- a/deps/uv/include/uv/darwin.h
++++ b/deps/uv/include/uv/darwin.h
+@@ -40,7 +40,7 @@
+   void* cf_state;                                                             \
+   uv_mutex_t cf_mutex;                                                        \
+   uv_sem_t cf_sem;                                                            \
+-  struct uv__queue cf_signals;                                                \
++  void* cf_signals[2];                                                        \
+ 
+ #define UV_PLATFORM_FS_EVENT_FIELDS                                           \
+   uv__io_t event_watcher;                                                     \
+@@ -48,8 +48,8 @@
+   int realpath_len;                                                           \
+   int cf_flags;                                                               \
+   uv_async_t* cf_cb;                                                          \
+-  struct uv__queue cf_events;                                                 \
+-  struct uv__queue cf_member;                                                 \
++  void* cf_events[2];                                                         \
++  void* cf_member[2];                                                         \
+   int cf_error;                                                               \
+   uv_mutex_t cf_mutex;                                                        \
+ 
+diff --git a/deps/uv/include/uv/linux.h b/deps/uv/include/uv/linux.h
+index 9f22f8cf726..9b38405a190 100644
+--- a/deps/uv/include/uv/linux.h
++++ b/deps/uv/include/uv/linux.h
+@@ -28,7 +28,7 @@
+   int inotify_fd;                                                             \
+ 
+ #define UV_PLATFORM_FS_EVENT_FIELDS                                           \
+-  struct uv__queue watchers;                                                  \
++  void* watchers[2];                                                          \
+   int wd;                                                                     \
+ 
+ #endif /* UV_LINUX_H */
+diff --git a/deps/uv/include/uv/threadpool.h b/deps/uv/include/uv/threadpool.h
+index 24ce916fda4..9708ebdd530 100644
+--- a/deps/uv/include/uv/threadpool.h
++++ b/deps/uv/include/uv/threadpool.h
+@@ -31,7 +31,7 @@ struct uv__work {
+   void (*work)(struct uv__work *w);
+   void (*done)(struct uv__work *w, int status);
+   struct uv_loop_s* loop;
+-  struct uv__queue wq;
++  void* wq[2];
+ };
+ 
+ #endif /* UV_THREADPOOL_H_ */
+diff --git a/deps/uv/include/uv/unix.h b/deps/uv/include/uv/unix.h
+index 09f88a56742..95447b8dd67 100644
+--- a/deps/uv/include/uv/unix.h
++++ b/deps/uv/include/uv/unix.h
+@@ -92,8 +92,8 @@ typedef struct uv__io_s uv__io_t;
+ 
+ struct uv__io_s {
+   uv__io_cb cb;
+-  struct uv__queue pending_queue;
+-  struct uv__queue watcher_queue;
++  void* pending_queue[2];
++  void* watcher_queue[2];
+   unsigned int pevents; /* Pending event mask i.e. mask at next tick. */
+   unsigned int events;  /* Current event mask. */
+   int fd;
+@@ -220,21 +220,21 @@ typedef struct {
+ #define UV_LOOP_PRIVATE_FIELDS                                                \
+   unsigned long flags;                                                        \
+   int backend_fd;                                                             \
+-  struct uv__queue pending_queue;                                             \
+-  struct uv__queue watcher_queue;                                             \
++  void* pending_queue[2];                                                     \
++  void* watcher_queue[2];                                                     \
+   uv__io_t** watchers;                                                        \
+   unsigned int nwatchers;                                                     \
+   unsigned int nfds;                                                          \
+-  struct uv__queue wq;                                                        \
++  void* wq[2];                                                                \
+   uv_mutex_t wq_mutex;                                                        \
+   uv_async_t wq_async;                                                        \
+   uv_rwlock_t cloexec_lock;                                                   \
+   uv_handle_t* closing_handles;                                               \
+-  struct uv__queue process_handles;                                           \
+-  struct uv__queue prepare_handles;                                           \
+-  struct uv__queue check_handles;                                             \
+-  struct uv__queue idle_handles;                                              \
+-  struct uv__queue async_handles;                                             \
++  void* process_handles[2];                                                   \
++  void* prepare_handles[2];                                                   \
++  void* check_handles[2];                                                     \
++  void* idle_handles[2];                                                      \
++  void* async_handles[2];                                                     \
+   void (*async_unused)(void);  /* TODO(bnoordhuis) Remove in libuv v2. */     \
+   uv__io_t async_io_watcher;                                                  \
+   int async_wfd;                                                              \
+@@ -257,7 +257,7 @@ typedef struct {
+ #define UV_PRIVATE_REQ_TYPES /* empty */
+ 
+ #define UV_WRITE_PRIVATE_FIELDS                                               \
+-  struct uv__queue queue;                                                     \
++  void* queue[2];                                                             \
+   unsigned int write_index;                                                   \
+   uv_buf_t* bufs;                                                             \
+   unsigned int nbufs;                                                         \
+@@ -265,12 +265,12 @@ typedef struct {
+   uv_buf_t bufsml[4];                                                         \
+ 
+ #define UV_CONNECT_PRIVATE_FIELDS                                             \
+-  struct uv__queue queue;                                                     \
++  void* queue[2];                                                             \
+ 
+ #define UV_SHUTDOWN_PRIVATE_FIELDS /* empty */
+ 
+ #define UV_UDP_SEND_PRIVATE_FIELDS                                            \
+-  struct uv__queue queue;                                                     \
++  void* queue[2];                                                             \
+   struct sockaddr_storage addr;                                               \
+   unsigned int nbufs;                                                         \
+   uv_buf_t* bufs;                                                             \
+@@ -286,8 +286,8 @@ typedef struct {
+   uv_connect_t *connect_req;                                                  \
+   uv_shutdown_t *shutdown_req;                                                \
+   uv__io_t io_watcher;                                                        \
+-  struct uv__queue write_queue;                                               \
+-  struct uv__queue write_completed_queue;                                     \
++  void* write_queue[2];                                                       \
++  void* write_completed_queue[2];                                             \
+   uv_connection_cb connection_cb;                                             \
+   int delayed_error;                                                          \
+   int accepted_fd;                                                            \
+@@ -300,8 +300,8 @@ typedef struct {
+   uv_alloc_cb alloc_cb;                                                       \
+   uv_udp_recv_cb recv_cb;                                                     \
+   uv__io_t io_watcher;                                                        \
+-  struct uv__queue write_queue;                                               \
+-  struct uv__queue write_completed_queue;                                     \
++  void* write_queue[2];                                                       \
++  void* write_completed_queue[2];                                             \
+ 
+ #define UV_PIPE_PRIVATE_FIELDS                                                \
+   const char* pipe_fname; /* NULL or strdup'ed */
+@@ -311,19 +311,19 @@ typedef struct {
+ 
+ #define UV_PREPARE_PRIVATE_FIELDS                                             \
+   uv_prepare_cb prepare_cb;                                                   \
+-  struct uv__queue queue;                                                     \
++  void* queue[2];                                                             \
+ 
+ #define UV_CHECK_PRIVATE_FIELDS                                               \
+   uv_check_cb check_cb;                                                       \
+-  struct uv__queue queue;                                                     \
++  void* queue[2];                                                             \
+ 
+ #define UV_IDLE_PRIVATE_FIELDS                                                \
+   uv_idle_cb idle_cb;                                                         \
+-  struct uv__queue queue;                                                     \
++  void* queue[2];                                                             \
+ 
+ #define UV_ASYNC_PRIVATE_FIELDS                                               \
+   uv_async_cb async_cb;                                                       \
+-  struct uv__queue queue;                                                     \
++  void* queue[2];                                                             \
+   int pending;                                                                \
+ 
+ #define UV_TIMER_PRIVATE_FIELDS                                               \
+@@ -352,7 +352,7 @@ typedef struct {
+   int retcode;
+ 
+ #define UV_PROCESS_PRIVATE_FIELDS                                             \
+-  struct uv__queue queue;                                                     \
++  void* queue[2];                                                             \
+   int status;                                                                 \
+ 
+ #define UV_FS_PRIVATE_FIELDS                                                  \
+diff --git a/deps/uv/include/uv/win.h b/deps/uv/include/uv/win.h
+index 6f8c47298e4..92a95fa15f1 100644
+--- a/deps/uv/include/uv/win.h
++++ b/deps/uv/include/uv/win.h
+@@ -357,7 +357,7 @@ typedef struct {
+   /* Counter to started timer */                                              \
+   uint64_t timer_counter;                                                     \
+   /* Threadpool */                                                            \
+-  struct uv__queue wq;                                                        \
++  void* wq[2];                                                                \
+   uv_mutex_t wq_mutex;                                                        \
+   uv_async_t wq_async;
+ 
+@@ -486,7 +486,7 @@ typedef struct {
+     uint32_t payload_remaining;                                               \
+     uint64_t dummy; /* TODO: retained for ABI compat; remove this in v2.x. */ \
+   } ipc_data_frame;                                                           \
+-  struct uv__queue ipc_xfer_queue;                                            \
++  void* ipc_xfer_queue[2];                                                    \
+   int ipc_xfer_queue_length;                                                  \
+   uv_write_t* non_overlapped_writes_tail;                                     \
+   CRITICAL_SECTION readfile_thread_lock;                                      \
+diff --git a/deps/uv/src/queue.h b/deps/uv/src/queue.h
+index 5f8489e9bc5..ff3540a0a51 100644
+--- a/deps/uv/src/queue.h
++++ b/deps/uv/src/queue.h
+@@ -18,73 +18,91 @@
+ 
+ #include <stddef.h>
+ 
+-#define uv__queue_data(pointer, type, field)                                  \
+-  ((type*) ((char*) (pointer) - offsetof(type, field)))
+-
+-#define uv__queue_foreach(q, h)                                               \
+-  for ((q) = (h)->next; (q) != (h); (q) = (q)->next)
+-
+-static inline void uv__queue_init(struct uv__queue* q) {
+-  q->next = q;
+-  q->prev = q;
+-}
+-
+-static inline int uv__queue_empty(const struct uv__queue* q) {
+-  return q == q->next;
+-}
+-
+-static inline struct uv__queue* uv__queue_head(const struct uv__queue* q) {
+-  return q->next;
+-}
+-
+-static inline struct uv__queue* uv__queue_next(const struct uv__queue* q) {
+-  return q->next;
+-}
+-
+-static inline void uv__queue_add(struct uv__queue* h, struct uv__queue* n) {
+-  h->prev->next = n->next;
+-  n->next->prev = h->prev;
+-  h->prev = n->prev;
+-  h->prev->next = h;
+-}
+-
+-static inline void uv__queue_split(struct uv__queue* h,
+-                                   struct uv__queue* q,
+-                                   struct uv__queue* n) {
+-  n->prev = h->prev;
+-  n->prev->next = n;
+-  n->next = q;
+-  h->prev = q->prev;
+-  h->prev->next = h;
+-  q->prev = n;
+-}
+-
+-static inline void uv__queue_move(struct uv__queue* h, struct uv__queue* n) {
+-  if (uv__queue_empty(h))
+-    uv__queue_init(n);
+-  else
+-    uv__queue_split(h, h->next, n);
+-}
+-
+-static inline void uv__queue_insert_head(struct uv__queue* h,
+-                                         struct uv__queue* q) {
+-  q->next = h->next;
+-  q->prev = h;
+-  q->next->prev = q;
+-  h->next = q;
+-}
+-
+-static inline void uv__queue_insert_tail(struct uv__queue* h,
+-                                         struct uv__queue* q) {
+-  q->next = h;
+-  q->prev = h->prev;
+-  q->prev->next = q;
+-  h->prev = q;
+-}
+-
+-static inline void uv__queue_remove(struct uv__queue* q) {
+-  q->prev->next = q->next;
+-  q->next->prev = q->prev;
+-}
++typedef void *QUEUE[2];
++
++/* Private macros. */
++#define QUEUE_NEXT(q)       (*(QUEUE **) &((*(q))[0]))
++#define QUEUE_PREV(q)       (*(QUEUE **) &((*(q))[1]))
++#define QUEUE_PREV_NEXT(q)  (QUEUE_NEXT(QUEUE_PREV(q)))
++#define QUEUE_NEXT_PREV(q)  (QUEUE_PREV(QUEUE_NEXT(q)))
++
++/* Public macros. */
++#define QUEUE_DATA(ptr, type, field)                                          \
++  ((type *) ((char *) (ptr) - offsetof(type, field)))
++
++/* Important note: mutating the list while QUEUE_FOREACH is
++ * iterating over its elements results in undefined behavior.
++ */
++#define QUEUE_FOREACH(q, h)                                                   \
++  for ((q) = QUEUE_NEXT(h); (q) != (h); (q) = QUEUE_NEXT(q))
++
++#define QUEUE_EMPTY(q)                                                        \
++  ((const QUEUE *) (q) == (const QUEUE *) QUEUE_NEXT(q))
++
++#define QUEUE_HEAD(q)                                                         \
++  (QUEUE_NEXT(q))
++
++#define QUEUE_INIT(q)                                                         \
++  do {                                                                        \
++    QUEUE_NEXT(q) = (q);                                                      \
++    QUEUE_PREV(q) = (q);                                                      \
++  }                                                                           \
++  while (0)
++
++#define QUEUE_ADD(h, n)                                                       \
++  do {                                                                        \
++    QUEUE_PREV_NEXT(h) = QUEUE_NEXT(n);                                       \
++    QUEUE_NEXT_PREV(n) = QUEUE_PREV(h);                                       \
++    QUEUE_PREV(h) = QUEUE_PREV(n);                                            \
++    QUEUE_PREV_NEXT(h) = (h);                                                 \
++  }                                                                           \
++  while (0)
++
++#define QUEUE_SPLIT(h, q, n)                                                  \
++  do {                                                                        \
++    QUEUE_PREV(n) = QUEUE_PREV(h);                                            \
++    QUEUE_PREV_NEXT(n) = (n);                                                 \
++    QUEUE_NEXT(n) = (q);                                                      \
++    QUEUE_PREV(h) = QUEUE_PREV(q);                                            \
++    QUEUE_PREV_NEXT(h) = (h);                                                 \
++    QUEUE_PREV(q) = (n);                                                      \
++  }                                                                           \
++  while (0)
++
++#define QUEUE_MOVE(h, n)                                                      \
++  do {                                                                        \
++    if (QUEUE_EMPTY(h))                                                       \
++      QUEUE_INIT(n);                                                          \
++    else {                                                                    \
++      QUEUE* q = QUEUE_HEAD(h);                                               \
++      QUEUE_SPLIT(h, q, n);                                                   \
++    }                                                                         \
++  }                                                                           \
++  while (0)
++
++#define QUEUE_INSERT_HEAD(h, q)                                               \
++  do {                                                                        \
++    QUEUE_NEXT(q) = QUEUE_NEXT(h);                                            \
++    QUEUE_PREV(q) = (h);                                                      \
++    QUEUE_NEXT_PREV(q) = (q);                                                 \
++    QUEUE_NEXT(h) = (q);                                                      \
++  }                                                                           \
++  while (0)
++
++#define QUEUE_INSERT_TAIL(h, q)                                               \
++  do {                                                                        \
++    QUEUE_NEXT(q) = (h);                                                      \
++    QUEUE_PREV(q) = QUEUE_PREV(h);                                            \
++    QUEUE_PREV_NEXT(q) = (q);                                                 \
++    QUEUE_PREV(h) = (q);                                                      \
++  }                                                                           \
++  while (0)
++
++#define QUEUE_REMOVE(q)                                                       \
++  do {                                                                        \
++    QUEUE_PREV_NEXT(q) = QUEUE_NEXT(q);                                       \
++    QUEUE_NEXT_PREV(q) = QUEUE_PREV(q);                                       \
++  }                                                                           \
++  while (0)
+ 
+ #endif /* QUEUE_H_ */
+diff --git a/deps/uv/src/threadpool.c b/deps/uv/src/threadpool.c
+index dbef67f2f10..51962bf0021 100644
+--- a/deps/uv/src/threadpool.c
++++ b/deps/uv/src/threadpool.c
+@@ -37,10 +37,10 @@ static unsigned int slow_io_work_running;
+ static unsigned int nthreads;
+ static uv_thread_t* threads;
+ static uv_thread_t default_threads[4];
+-static struct uv__queue exit_message;
+-static struct uv__queue wq;
+-static struct uv__queue run_slow_work_message;
+-static struct uv__queue slow_io_pending_wq;
++static QUEUE exit_message;
++static QUEUE wq;
++static QUEUE run_slow_work_message;
++static QUEUE slow_io_pending_wq;
+ 
+ static unsigned int slow_work_thread_threshold(void) {
+   return (nthreads + 1) / 2;
+@@ -56,7 +56,7 @@ static void uv__cancelled(struct uv__work* w) {
+  */
+ static void worker(void* arg) {
+   struct uv__work* w;
+-  struct uv__queue* q;
++  QUEUE* q;
+   int is_slow_work;
+ 
+   uv_sem_post((uv_sem_t*) arg);
+@@ -68,49 +68,49 @@ static void worker(void* arg) {
+ 
+     /* Keep waiting while either no work is present or only slow I/O
+        and we're at the threshold for that. */
+-    while (uv__queue_empty(&wq) ||
+-           (uv__queue_head(&wq) == &run_slow_work_message &&
+-            uv__queue_next(&run_slow_work_message) == &wq &&
++    while (QUEUE_EMPTY(&wq) ||
++           (QUEUE_HEAD(&wq) == &run_slow_work_message &&
++            QUEUE_NEXT(&run_slow_work_message) == &wq &&
+             slow_io_work_running >= slow_work_thread_threshold())) {
+       idle_threads += 1;
+       uv_cond_wait(&cond, &mutex);
+       idle_threads -= 1;
+     }
+ 
+-    q = uv__queue_head(&wq);
++    q = QUEUE_HEAD(&wq);
+     if (q == &exit_message) {
+       uv_cond_signal(&cond);
+       uv_mutex_unlock(&mutex);
+       break;
+     }
+ 
+-    uv__queue_remove(q);
+-    uv__queue_init(q);  /* Signal uv_cancel() that the work req is executing. */
++    QUEUE_REMOVE(q);
++    QUEUE_INIT(q);  /* Signal uv_cancel() that the work req is executing. */
+ 
+     is_slow_work = 0;
+     if (q == &run_slow_work_message) {
+       /* If we're at the slow I/O threshold, re-schedule until after all
+          other work in the queue is done. */
+       if (slow_io_work_running >= slow_work_thread_threshold()) {
+-        uv__queue_insert_tail(&wq, q);
++        QUEUE_INSERT_TAIL(&wq, q);
+         continue;
+       }
+ 
+       /* If we encountered a request to run slow I/O work but there is none
+          to run, that means it's cancelled => Start over. */
+-      if (uv__queue_empty(&slow_io_pending_wq))
++      if (QUEUE_EMPTY(&slow_io_pending_wq))
+         continue;
+ 
+       is_slow_work = 1;
+       slow_io_work_running++;
+ 
+-      q = uv__queue_head(&slow_io_pending_wq);
+-      uv__queue_remove(q);
+-      uv__queue_init(q);
++      q = QUEUE_HEAD(&slow_io_pending_wq);
++      QUEUE_REMOVE(q);
++      QUEUE_INIT(q);
+ 
+       /* If there is more slow I/O work, schedule it to be run as well. */
+-      if (!uv__queue_empty(&slow_io_pending_wq)) {
+-        uv__queue_insert_tail(&wq, &run_slow_work_message);
++      if (!QUEUE_EMPTY(&slow_io_pending_wq)) {
++        QUEUE_INSERT_TAIL(&wq, &run_slow_work_message);
+         if (idle_threads > 0)
+           uv_cond_signal(&cond);
+       }
+@@ -118,13 +118,13 @@ static void worker(void* arg) {
+ 
+     uv_mutex_unlock(&mutex);
+ 
+-    w = uv__queue_data(q, struct uv__work, wq);
++    w = QUEUE_DATA(q, struct uv__work, wq);
+     w->work(w);
+ 
+     uv_mutex_lock(&w->loop->wq_mutex);
+     w->work = NULL;  /* Signal uv_cancel() that the work req is done
+                         executing. */
+-    uv__queue_insert_tail(&w->loop->wq, &w->wq);
++    QUEUE_INSERT_TAIL(&w->loop->wq, &w->wq);
+     uv_async_send(&w->loop->wq_async);
+     uv_mutex_unlock(&w->loop->wq_mutex);
+ 
+@@ -139,12 +139,12 @@ static void worker(void* arg) {
+ }
+ 
+ 
+-static void post(struct uv__queue* q, enum uv__work_kind kind) {
++static void post(QUEUE* q, enum uv__work_kind kind) {
+   uv_mutex_lock(&mutex);
+   if (kind == UV__WORK_SLOW_IO) {
+     /* Insert into a separate queue. */
+-    uv__queue_insert_tail(&slow_io_pending_wq, q);
+-    if (!uv__queue_empty(&run_slow_work_message)) {
++    QUEUE_INSERT_TAIL(&slow_io_pending_wq, q);
++    if (!QUEUE_EMPTY(&run_slow_work_message)) {
+       /* Running slow I/O tasks is already scheduled => Nothing to do here.
+          The worker that runs said other task will schedule this one as well. */
+       uv_mutex_unlock(&mutex);
+@@ -153,7 +153,7 @@ static void post(struct uv__queue* q, enum uv__work_kind kind) {
+     q = &run_slow_work_message;
+   }
+ 
+-  uv__queue_insert_tail(&wq, q);
++  QUEUE_INSERT_TAIL(&wq, q);
+   if (idle_threads > 0)
+     uv_cond_signal(&cond);
+   uv_mutex_unlock(&mutex);
+@@ -220,9 +220,9 @@ static void init_threads(void) {
+   if (uv_mutex_init(&mutex))
+     abort();
+ 
+-  uv__queue_init(&wq);
+-  uv__queue_init(&slow_io_pending_wq);
+-  uv__queue_init(&run_slow_work_message);
++  QUEUE_INIT(&wq);
++  QUEUE_INIT(&slow_io_pending_wq);
++  QUEUE_INIT(&run_slow_work_message);
+ 
+   if (uv_sem_init(&sem, 0))
+     abort();
+@@ -285,9 +285,9 @@ static int uv__work_cancel(uv_loop_t* loop, uv_req_t* req, struct uv__work* w) {
+   uv_mutex_lock(&mutex);
+   uv_mutex_lock(&w->loop->wq_mutex);
+ 
+-  cancelled = !uv__queue_empty(&w->wq) && w->work != NULL;
++  cancelled = !QUEUE_EMPTY(&w->wq) && w->work != NULL;
+   if (cancelled)
+-    uv__queue_remove(&w->wq);
++    QUEUE_REMOVE(&w->wq);
+ 
+   uv_mutex_unlock(&w->loop->wq_mutex);
+   uv_mutex_unlock(&mutex);
+@@ -297,7 +297,7 @@ static int uv__work_cancel(uv_loop_t* loop, uv_req_t* req, struct uv__work* w) {
+ 
+   w->work = uv__cancelled;
+   uv_mutex_lock(&loop->wq_mutex);
+-  uv__queue_insert_tail(&loop->wq, &w->wq);
++  QUEUE_INSERT_TAIL(&loop->wq, &w->wq);
+   uv_async_send(&loop->wq_async);
+   uv_mutex_unlock(&loop->wq_mutex);
+ 
+@@ -308,21 +308,21 @@ static int uv__work_cancel(uv_loop_t* loop, uv_req_t* req, struct uv__work* w) {
+ void uv__work_done(uv_async_t* handle) {
+   struct uv__work* w;
+   uv_loop_t* loop;
+-  struct uv__queue* q;
+-  struct uv__queue wq;
++  QUEUE* q;
++  QUEUE wq;
+   int err;
+   int nevents;
+ 
+   loop = container_of(handle, uv_loop_t, wq_async);
+   uv_mutex_lock(&loop->wq_mutex);
+-  uv__queue_move(&loop->wq, &wq);
++  QUEUE_MOVE(&loop->wq, &wq);
+   uv_mutex_unlock(&loop->wq_mutex);
+ 
+   nevents = 0;
+ 
+-  while (!uv__queue_empty(&wq)) {
+-    q = uv__queue_head(&wq);
+-    uv__queue_remove(q);
++  while (!QUEUE_EMPTY(&wq)) {
++    q = QUEUE_HEAD(&wq);
++    QUEUE_REMOVE(q);
+ 
+     w = container_of(q, struct uv__work, wq);
+     err = (w->work == uv__cancelled) ? UV_ECANCELED : 0;
+diff --git a/deps/uv/src/unix/aix.c b/deps/uv/src/unix/aix.c
+index 3af3009a216..f1afbed49ec 100644
+--- a/deps/uv/src/unix/aix.c
++++ b/deps/uv/src/unix/aix.c
+@@ -136,7 +136,7 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+   struct pollfd pqry;
+   struct pollfd* pe;
+   struct poll_ctl pc;
+-  struct uv__queue* q;
++  QUEUE* q;
+   uv__io_t* w;
+   uint64_t base;
+   uint64_t diff;
+@@ -151,18 +151,18 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+   int reset_timeout;
+ 
+   if (loop->nfds == 0) {
+-    assert(uv__queue_empty(&loop->watcher_queue));
++    assert(QUEUE_EMPTY(&loop->watcher_queue));
+     return;
+   }
+ 
+   lfields = uv__get_internal_fields(loop);
+ 
+-  while (!uv__queue_empty(&loop->watcher_queue)) {
+-    q = uv__queue_head(&loop->watcher_queue);
+-    uv__queue_remove(q);
+-    uv__queue_init(q);
++  while (!QUEUE_EMPTY(&loop->watcher_queue)) {
++    q = QUEUE_HEAD(&loop->watcher_queue);
++    QUEUE_REMOVE(q);
++    QUEUE_INIT(q);
+ 
+-    w = uv__queue_data(q, uv__io_t, watcher_queue);
++    w = QUEUE_DATA(q, uv__io_t, watcher_queue);
+     assert(w->pevents != 0);
+     assert(w->fd >= 0);
+     assert(w->fd < (int) loop->nwatchers);
+diff --git a/deps/uv/src/unix/async.c b/deps/uv/src/unix/async.c
+index 0ff2669e30a..5751b6d02be 100644
+--- a/deps/uv/src/unix/async.c
++++ b/deps/uv/src/unix/async.c
+@@ -55,7 +55,7 @@ int uv_async_init(uv_loop_t* loop, uv_async_t* handle, uv_async_cb async_cb) {
+   handle->pending = 0;
+   handle->u.fd = 0; /* This will be used as a busy flag. */
+ 
+-  uv__queue_insert_tail(&loop->async_handles, &handle->queue);
++  QUEUE_INSERT_TAIL(&loop->async_handles, &handle->queue);
+   uv__handle_start(handle);
+ 
+   return 0;
+@@ -124,7 +124,7 @@ static void uv__async_spin(uv_async_t* handle) {
+ 
+ void uv__async_close(uv_async_t* handle) {
+   uv__async_spin(handle);
+-  uv__queue_remove(&handle->queue);
++  QUEUE_REMOVE(&handle->queue);
+   uv__handle_stop(handle);
+ }
+ 
+@@ -132,8 +132,8 @@ void uv__async_close(uv_async_t* handle) {
+ static void uv__async_io(uv_loop_t* loop, uv__io_t* w, unsigned int events) {
+   char buf[1024];
+   ssize_t r;
+-  struct uv__queue queue;
+-  struct uv__queue* q;
++  QUEUE queue;
++  QUEUE* q;
+   uv_async_t* h;
+   _Atomic int *pending;
+ 
+@@ -157,13 +157,13 @@ static void uv__async_io(uv_loop_t* loop, uv__io_t* w, unsigned int events) {
+     abort();
+   }
+ 
+-  uv__queue_move(&loop->async_handles, &queue);
+-  while (!uv__queue_empty(&queue)) {
+-    q = uv__queue_head(&queue);
+-    h = uv__queue_data(q, uv_async_t, queue);
++  QUEUE_MOVE(&loop->async_handles, &queue);
++  while (!QUEUE_EMPTY(&queue)) {
++    q = QUEUE_HEAD(&queue);
++    h = QUEUE_DATA(q, uv_async_t, queue);
+ 
+-    uv__queue_remove(q);
+-    uv__queue_insert_tail(&loop->async_handles, q);
++    QUEUE_REMOVE(q);
++    QUEUE_INSERT_TAIL(&loop->async_handles, q);
+ 
+     /* Atomically fetch and clear pending flag */
+     pending = (_Atomic int*) &h->pending;
+@@ -241,8 +241,8 @@ static int uv__async_start(uv_loop_t* loop) {
+ 
+ 
+ void uv__async_stop(uv_loop_t* loop) {
+-  struct uv__queue queue;
+-  struct uv__queue* q;
++  QUEUE queue;
++  QUEUE* q;
+   uv_async_t* h;
+ 
+   if (loop->async_io_watcher.fd == -1)
+@@ -251,13 +251,13 @@ void uv__async_stop(uv_loop_t* loop) {
+   /* Make sure no other thread is accessing the async handle fd after the loop
+    * cleanup.
+    */
+-  uv__queue_move(&loop->async_handles, &queue);
+-  while (!uv__queue_empty(&queue)) {
+-    q = uv__queue_head(&queue);
+-    h = uv__queue_data(q, uv_async_t, queue);
++  QUEUE_MOVE(&loop->async_handles, &queue);
++  while (!QUEUE_EMPTY(&queue)) {
++    q = QUEUE_HEAD(&queue);
++    h = QUEUE_DATA(q, uv_async_t, queue);
+ 
+-    uv__queue_remove(q);
+-    uv__queue_insert_tail(&loop->async_handles, q);
++    QUEUE_REMOVE(q);
++    QUEUE_INSERT_TAIL(&loop->async_handles, q);
+ 
+     uv__async_spin(h);
+   }
+@@ -275,20 +275,20 @@ void uv__async_stop(uv_loop_t* loop) {
+ 
+ 
+ int uv__async_fork(uv_loop_t* loop) {
+-  struct uv__queue queue;
+-  struct uv__queue* q;
++  QUEUE queue;
++  QUEUE* q;
+   uv_async_t* h;
+ 
+   if (loop->async_io_watcher.fd == -1) /* never started */
+     return 0;
+ 
+-  uv__queue_move(&loop->async_handles, &queue);
+-  while (!uv__queue_empty(&queue)) {
+-    q = uv__queue_head(&queue);
+-    h = uv__queue_data(q, uv_async_t, queue);
++  QUEUE_MOVE(&loop->async_handles, &queue);
++  while (!QUEUE_EMPTY(&queue)) {
++    q = QUEUE_HEAD(&queue);
++    h = QUEUE_DATA(q, uv_async_t, queue);
+ 
+-    uv__queue_remove(q);
+-    uv__queue_insert_tail(&loop->async_handles, q);
++    QUEUE_REMOVE(q);
++    QUEUE_INSERT_TAIL(&loop->async_handles, q);
+ 
+     /* The state of any thread that set pending is now likely corrupt in this
+      * child because the user called fork, so just clear these flags and move
+diff --git a/deps/uv/src/unix/core.c b/deps/uv/src/unix/core.c
+index 25c5181f370..55aa962787e 100644
+--- a/deps/uv/src/unix/core.c
++++ b/deps/uv/src/unix/core.c
+@@ -344,7 +344,7 @@ static void uv__finish_close(uv_handle_t* handle) {
+   }
+ 
+   uv__handle_unref(handle);
+-  uv__queue_remove(&handle->handle_queue);
++  QUEUE_REMOVE(&handle->handle_queue);
+ 
+   if (handle->close_cb) {
+     handle->close_cb(handle);
+@@ -380,7 +380,7 @@ int uv_backend_fd(const uv_loop_t* loop) {
+ static int uv__loop_alive(const uv_loop_t* loop) {
+   return uv__has_active_handles(loop) ||
+          uv__has_active_reqs(loop) ||
+-         !uv__queue_empty(&loop->pending_queue) ||
++         !QUEUE_EMPTY(&loop->pending_queue) ||
+          loop->closing_handles != NULL;
+ }
+ 
+@@ -389,8 +389,8 @@ static int uv__backend_timeout(const uv_loop_t* loop) {
+   if (loop->stop_flag == 0 &&
+       /* uv__loop_alive(loop) && */
+       (uv__has_active_handles(loop) || uv__has_active_reqs(loop)) &&
+-      uv__queue_empty(&loop->pending_queue) &&
+-      uv__queue_empty(&loop->idle_handles) &&
++      QUEUE_EMPTY(&loop->pending_queue) &&
++      QUEUE_EMPTY(&loop->idle_handles) &&
+       (loop->flags & UV_LOOP_REAP_CHILDREN) == 0 &&
+       loop->closing_handles == NULL)
+     return uv__next_timeout(loop);
+@@ -399,7 +399,7 @@ static int uv__backend_timeout(const uv_loop_t* loop) {
+ 
+ 
+ int uv_backend_timeout(const uv_loop_t* loop) {
+-  if (uv__queue_empty(&loop->watcher_queue))
++  if (QUEUE_EMPTY(&loop->watcher_queue))
+     return uv__backend_timeout(loop);
+   /* Need to call uv_run to update the backend fd state. */
+   return 0;
+@@ -431,8 +431,7 @@ int uv_run(uv_loop_t* loop, uv_run_mode mode) {
+ 
+   while (r != 0 && loop->stop_flag == 0) {
+     can_sleep =
+-        uv__queue_empty(&loop->pending_queue) &&
+-        uv__queue_empty(&loop->idle_handles);
++        QUEUE_EMPTY(&loop->pending_queue) && QUEUE_EMPTY(&loop->idle_handles);
+ 
+     uv__run_pending(loop);
+     uv__run_idle(loop);
+@@ -448,7 +447,7 @@ int uv_run(uv_loop_t* loop, uv_run_mode mode) {
+ 
+     /* Process immediate callbacks (e.g. write_cb) a small fixed number of
+      * times to avoid loop starvation.*/
+-    for (r = 0; r < 8 && !uv__queue_empty(&loop->pending_queue); r++)
++    for (r = 0; r < 8 && !QUEUE_EMPTY(&loop->pending_queue); r++)
+       uv__run_pending(loop);
+ 
+     /* Run one final update on the provider_idle_time in case uv__io_poll
+@@ -827,17 +826,17 @@ int uv_fileno(const uv_handle_t* handle, uv_os_fd_t* fd) {
+ 
+ 
+ static void uv__run_pending(uv_loop_t* loop) {
+-  struct uv__queue* q;
+-  struct uv__queue pq;
++  QUEUE* q;
++  QUEUE pq;
+   uv__io_t* w;
+ 
+-  uv__queue_move(&loop->pending_queue, &pq);
++  QUEUE_MOVE(&loop->pending_queue, &pq);
+ 
+-  while (!uv__queue_empty(&pq)) {
+-    q = uv__queue_head(&pq);
+-    uv__queue_remove(q);
+-    uv__queue_init(q);
+-    w = uv__queue_data(q, uv__io_t, pending_queue);
++  while (!QUEUE_EMPTY(&pq)) {
++    q = QUEUE_HEAD(&pq);
++    QUEUE_REMOVE(q);
++    QUEUE_INIT(q);
++    w = QUEUE_DATA(q, uv__io_t, pending_queue);
+     w->cb(loop, w, POLLOUT);
+   }
+ }
+@@ -892,8 +891,8 @@ static void maybe_resize(uv_loop_t* loop, unsigned int len) {
+ void uv__io_init(uv__io_t* w, uv__io_cb cb, int fd) {
+   assert(cb != NULL);
+   assert(fd >= -1);
+-  uv__queue_init(&w->pending_queue);
+-  uv__queue_init(&w->watcher_queue);
++  QUEUE_INIT(&w->pending_queue);
++  QUEUE_INIT(&w->watcher_queue);
+   w->cb = cb;
+   w->fd = fd;
+   w->events = 0;
+@@ -919,8 +918,8 @@ void uv__io_start(uv_loop_t* loop, uv__io_t* w, unsigned int events) {
+     return;
+ #endif
+ 
+-  if (uv__queue_empty(&w->watcher_queue))
+-    uv__queue_insert_tail(&loop->watcher_queue, &w->watcher_queue);
++  if (QUEUE_EMPTY(&w->watcher_queue))
++    QUEUE_INSERT_TAIL(&loop->watcher_queue, &w->watcher_queue);
+ 
+   if (loop->watchers[w->fd] == NULL) {
+     loop->watchers[w->fd] = w;
+@@ -945,8 +944,8 @@ void uv__io_stop(uv_loop_t* loop, uv__io_t* w, unsigned int events) {
+   w->pevents &= ~events;
+ 
+   if (w->pevents == 0) {
+-    uv__queue_remove(&w->watcher_queue);
+-    uv__queue_init(&w->watcher_queue);
++    QUEUE_REMOVE(&w->watcher_queue);
++    QUEUE_INIT(&w->watcher_queue);
+     w->events = 0;
+ 
+     if (w == loop->watchers[w->fd]) {
+@@ -955,14 +954,14 @@ void uv__io_stop(uv_loop_t* loop, uv__io_t* w, unsigned int events) {
+       loop->nfds--;
+     }
+   }
+-  else if (uv__queue_empty(&w->watcher_queue))
+-    uv__queue_insert_tail(&loop->watcher_queue, &w->watcher_queue);
++  else if (QUEUE_EMPTY(&w->watcher_queue))
++    QUEUE_INSERT_TAIL(&loop->watcher_queue, &w->watcher_queue);
+ }
+ 
+ 
+ void uv__io_close(uv_loop_t* loop, uv__io_t* w) {
+   uv__io_stop(loop, w, POLLIN | POLLOUT | UV__POLLRDHUP | UV__POLLPRI);
+-  uv__queue_remove(&w->pending_queue);
++  QUEUE_REMOVE(&w->pending_queue);
+ 
+   /* Remove stale events for this file descriptor */
+   if (w->fd != -1)
+@@ -971,8 +970,8 @@ void uv__io_close(uv_loop_t* loop, uv__io_t* w) {
+ 
+ 
+ void uv__io_feed(uv_loop_t* loop, uv__io_t* w) {
+-  if (uv__queue_empty(&w->pending_queue))
+-    uv__queue_insert_tail(&loop->pending_queue, &w->pending_queue);
++  if (QUEUE_EMPTY(&w->pending_queue))
++    QUEUE_INSERT_TAIL(&loop->pending_queue, &w->pending_queue);
+ }
+ 
+ 
+diff --git a/deps/uv/src/unix/fs.c b/deps/uv/src/unix/fs.c
+index 6b051c124f2..00d385c24b7 100644
+--- a/deps/uv/src/unix/fs.c
++++ b/deps/uv/src/unix/fs.c
+@@ -62,6 +62,7 @@
+ 
+ #if defined(__linux__)
+ # include <sys/sendfile.h>
++# include <sys/utsname.h>
+ #endif
+ 
+ #if defined(__sun)
+@@ -903,6 +904,31 @@ out:
+ 
+ 
+ #ifdef __linux__
++static unsigned uv__kernel_version(void) {
++  static _Atomic unsigned cached_version;
++  struct utsname u;
++  unsigned version;
++  unsigned major;
++  unsigned minor;
++  unsigned patch;
++
++  version = atomic_load_explicit(&cached_version, memory_order_relaxed);
++  if (version != 0)
++    return version;
++
++  if (-1 == uname(&u))
++    return 0;
++
++  if (3 != sscanf(u.release, "%u.%u.%u", &major, &minor, &patch))
++    return 0;
++
++  version = major * 65536 + minor * 256 + patch;
++  atomic_store_explicit(&cached_version, version, memory_order_relaxed);
++
++  return version;
++}
++
++
+ /* Pre-4.20 kernels have a bug where CephFS uses the RADOS copy-from command
+  * in copy_file_range() when it shouldn't. There is no workaround except to
+  * fall back to a regular copy.
+@@ -1905,9 +1931,6 @@ int uv_fs_link(uv_loop_t* loop,
+                uv_fs_cb cb) {
+   INIT(LINK);
+   PATH2;
+-  if (cb != NULL)
+-    if (uv__iou_fs_link(loop, req))
+-      return 0;
+   POST;
+ }
+ 
+@@ -1920,9 +1943,6 @@ int uv_fs_mkdir(uv_loop_t* loop,
+   INIT(MKDIR);
+   PATH;
+   req->mode = mode;
+-  if (cb != NULL)
+-    if (uv__iou_fs_mkdir(loop, req))
+-      return 0;
+   POST;
+ }
+ 
+@@ -2074,9 +2094,6 @@ int uv_fs_rename(uv_loop_t* loop,
+                  uv_fs_cb cb) {
+   INIT(RENAME);
+   PATH2;
+-  if (cb != NULL)
+-    if (uv__iou_fs_rename(loop, req))
+-      return 0;
+   POST;
+ }
+ 
+@@ -2123,9 +2140,6 @@ int uv_fs_symlink(uv_loop_t* loop,
+   INIT(SYMLINK);
+   PATH2;
+   req->flags = flags;
+-  if (cb != NULL)
+-    if (uv__iou_fs_symlink(loop, req))
+-      return 0;
+   POST;
+ }
+ 
+@@ -2133,9 +2147,6 @@ int uv_fs_symlink(uv_loop_t* loop,
+ int uv_fs_unlink(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) {
+   INIT(UNLINK);
+   PATH;
+-  if (cb != NULL)
+-    if (uv__iou_fs_unlink(loop, req))
+-      return 0;
+   POST;
+ }
+ 
+diff --git a/deps/uv/src/unix/fsevents.c b/deps/uv/src/unix/fsevents.c
+index df703f3635f..0535b4547aa 100644
+--- a/deps/uv/src/unix/fsevents.c
++++ b/deps/uv/src/unix/fsevents.c
+@@ -80,13 +80,13 @@ enum uv__cf_loop_signal_type_e {
+ typedef enum uv__cf_loop_signal_type_e uv__cf_loop_signal_type_t;
+ 
+ struct uv__cf_loop_signal_s {
+-  struct uv__queue member;
++  QUEUE member;
+   uv_fs_event_t* handle;
+   uv__cf_loop_signal_type_t type;
+ };
+ 
+ struct uv__fsevents_event_s {
+-  struct uv__queue member;
++  QUEUE member;
+   int events;
+   char path[1];
+ };
+@@ -98,7 +98,7 @@ struct uv__cf_loop_state_s {
+   FSEventStreamRef fsevent_stream;
+   uv_sem_t fsevent_sem;
+   uv_mutex_t fsevent_mutex;
+-  struct uv__queue fsevent_handles;
++  void* fsevent_handles[2];
+   unsigned int fsevent_handle_count;
+ };
+ 
+@@ -150,22 +150,22 @@ static void (*pFSEventStreamStop)(FSEventStreamRef);
+ 
+ #define UV__FSEVENTS_PROCESS(handle, block)                                   \
+     do {                                                                      \
+-      struct uv__queue events;                                                \
+-      struct uv__queue* q;                                                    \
++      QUEUE events;                                                           \
++      QUEUE* q;                                                               \
+       uv__fsevents_event_t* event;                                            \
+       int err;                                                                \
+       uv_mutex_lock(&(handle)->cf_mutex);                                     \
+       /* Split-off all events and empty original queue */                     \
+-      uv__queue_move(&(handle)->cf_events, &events);                          \
++      QUEUE_MOVE(&(handle)->cf_events, &events);                              \
+       /* Get error (if any) and zero original one */                          \
+       err = (handle)->cf_error;                                               \
+       (handle)->cf_error = 0;                                                 \
+       uv_mutex_unlock(&(handle)->cf_mutex);                                   \
+       /* Loop through events, deallocating each after processing */           \
+-      while (!uv__queue_empty(&events)) {                                     \
+-        q = uv__queue_head(&events);                                          \
+-        event = uv__queue_data(q, uv__fsevents_event_t, member);              \
+-        uv__queue_remove(q);                                                  \
++      while (!QUEUE_EMPTY(&events)) {                                         \
++        q = QUEUE_HEAD(&events);                                              \
++        event = QUEUE_DATA(q, uv__fsevents_event_t, member);                  \
++        QUEUE_REMOVE(q);                                                      \
+         /* NOTE: Checking uv__is_active() is required here, because handle    \
+          * callback may close handle and invoking it after it will lead to    \
+          * incorrect behaviour */                                             \
+@@ -193,14 +193,14 @@ static void uv__fsevents_cb(uv_async_t* cb) {
+ 
+ /* Runs in CF thread, pushed event into handle's event list */
+ static void uv__fsevents_push_event(uv_fs_event_t* handle,
+-                                    struct uv__queue* events,
++                                    QUEUE* events,
+                                     int err) {
+   assert(events != NULL || err != 0);
+   uv_mutex_lock(&handle->cf_mutex);
+ 
+   /* Concatenate two queues */
+   if (events != NULL)
+-    uv__queue_add(&handle->cf_events, events);
++    QUEUE_ADD(&handle->cf_events, events);
+ 
+   /* Propagate error */
+   if (err != 0)
+@@ -224,12 +224,12 @@ static void uv__fsevents_event_cb(const FSEventStreamRef streamRef,
+   char* path;
+   char* pos;
+   uv_fs_event_t* handle;
+-  struct uv__queue* q;
++  QUEUE* q;
+   uv_loop_t* loop;
+   uv__cf_loop_state_t* state;
+   uv__fsevents_event_t* event;
+   FSEventStreamEventFlags flags;
+-  struct uv__queue head;
++  QUEUE head;
+ 
+   loop = info;
+   state = loop->cf_state;
+@@ -238,9 +238,9 @@ static void uv__fsevents_event_cb(const FSEventStreamRef streamRef,
+ 
+   /* For each handle */
+   uv_mutex_lock(&state->fsevent_mutex);
+-  uv__queue_foreach(q, &state->fsevent_handles) {
+-    handle = uv__queue_data(q, uv_fs_event_t, cf_member);
+-    uv__queue_init(&head);
++  QUEUE_FOREACH(q, &state->fsevent_handles) {
++    handle = QUEUE_DATA(q, uv_fs_event_t, cf_member);
++    QUEUE_INIT(&head);
+ 
+     /* Process and filter out events */
+     for (i = 0; i < numEvents; i++) {
+@@ -318,10 +318,10 @@ static void uv__fsevents_event_cb(const FSEventStreamRef streamRef,
+           event->events = UV_CHANGE;
+       }
+ 
+-      uv__queue_insert_tail(&head, &event->member);
++      QUEUE_INSERT_TAIL(&head, &event->member);
+     }
+ 
+-    if (!uv__queue_empty(&head))
++    if (!QUEUE_EMPTY(&head))
+       uv__fsevents_push_event(handle, &head, 0);
+   }
+   uv_mutex_unlock(&state->fsevent_mutex);
+@@ -403,7 +403,7 @@ static void uv__fsevents_destroy_stream(uv__cf_loop_state_t* state) {
+ static void uv__fsevents_reschedule(uv__cf_loop_state_t* state,
+                                     uv_loop_t* loop,
+                                     uv__cf_loop_signal_type_t type) {
+-  struct uv__queue* q;
++  QUEUE* q;
+   uv_fs_event_t* curr;
+   CFArrayRef cf_paths;
+   CFStringRef* paths;
+@@ -446,9 +446,9 @@ static void uv__fsevents_reschedule(uv__cf_loop_state_t* state,
+ 
+     q = &state->fsevent_handles;
+     for (; i < path_count; i++) {
+-      q = uv__queue_next(q);
++      q = QUEUE_NEXT(q);
+       assert(q != &state->fsevent_handles);
+-      curr = uv__queue_data(q, uv_fs_event_t, cf_member);
++      curr = QUEUE_DATA(q, uv_fs_event_t, cf_member);
+ 
+       assert(curr->realpath != NULL);
+       paths[i] =
+@@ -486,8 +486,8 @@ final:
+ 
+     /* Broadcast error to all handles */
+     uv_mutex_lock(&state->fsevent_mutex);
+-    uv__queue_foreach(q, &state->fsevent_handles) {
+-      curr = uv__queue_data(q, uv_fs_event_t, cf_member);
++    QUEUE_FOREACH(q, &state->fsevent_handles) {
++      curr = QUEUE_DATA(q, uv_fs_event_t, cf_member);
+       uv__fsevents_push_event(curr, NULL, err);
+     }
+     uv_mutex_unlock(&state->fsevent_mutex);
+@@ -606,7 +606,7 @@ static int uv__fsevents_loop_init(uv_loop_t* loop) {
+   if (err)
+     goto fail_sem_init;
+ 
+-  uv__queue_init(&loop->cf_signals);
++  QUEUE_INIT(&loop->cf_signals);
+ 
+   err = uv_sem_init(&state->fsevent_sem, 0);
+   if (err)
+@@ -616,7 +616,7 @@ static int uv__fsevents_loop_init(uv_loop_t* loop) {
+   if (err)
+     goto fail_fsevent_mutex_init;
+ 
+-  uv__queue_init(&state->fsevent_handles);
++  QUEUE_INIT(&state->fsevent_handles);
+   state->fsevent_need_reschedule = 0;
+   state->fsevent_handle_count = 0;
+ 
+@@ -675,7 +675,7 @@ fail_mutex_init:
+ void uv__fsevents_loop_delete(uv_loop_t* loop) {
+   uv__cf_loop_signal_t* s;
+   uv__cf_loop_state_t* state;
+-  struct uv__queue* q;
++  QUEUE* q;
+ 
+   if (loop->cf_state == NULL)
+     return;
+@@ -688,10 +688,10 @@ void uv__fsevents_loop_delete(uv_loop_t* loop) {
+   uv_mutex_destroy(&loop->cf_mutex);
+ 
+   /* Free any remaining data */
+-  while (!uv__queue_empty(&loop->cf_signals)) {
+-    q = uv__queue_head(&loop->cf_signals);
+-    s = uv__queue_data(q, uv__cf_loop_signal_t, member);
+-    uv__queue_remove(q);
++  while (!QUEUE_EMPTY(&loop->cf_signals)) {
++    q = QUEUE_HEAD(&loop->cf_signals);
++    s = QUEUE_DATA(q, uv__cf_loop_signal_t, member);
++    QUEUE_REMOVE(q);
+     uv__free(s);
+   }
+ 
+@@ -735,22 +735,22 @@ static void* uv__cf_loop_runner(void* arg) {
+ static void uv__cf_loop_cb(void* arg) {
+   uv_loop_t* loop;
+   uv__cf_loop_state_t* state;
+-  struct uv__queue* item;
+-  struct uv__queue split_head;
++  QUEUE* item;
++  QUEUE split_head;
+   uv__cf_loop_signal_t* s;
+ 
+   loop = arg;
+   state = loop->cf_state;
+ 
+   uv_mutex_lock(&loop->cf_mutex);
+-  uv__queue_move(&loop->cf_signals, &split_head);
++  QUEUE_MOVE(&loop->cf_signals, &split_head);
+   uv_mutex_unlock(&loop->cf_mutex);
+ 
+-  while (!uv__queue_empty(&split_head)) {
+-    item = uv__queue_head(&split_head);
+-    uv__queue_remove(item);
++  while (!QUEUE_EMPTY(&split_head)) {
++    item = QUEUE_HEAD(&split_head);
++    QUEUE_REMOVE(item);
+ 
+-    s = uv__queue_data(item, uv__cf_loop_signal_t, member);
++    s = QUEUE_DATA(item, uv__cf_loop_signal_t, member);
+ 
+     /* This was a termination signal */
+     if (s->handle == NULL)
+@@ -778,7 +778,7 @@ int uv__cf_loop_signal(uv_loop_t* loop,
+   item->type = type;
+ 
+   uv_mutex_lock(&loop->cf_mutex);
+-  uv__queue_insert_tail(&loop->cf_signals, &item->member);
++  QUEUE_INSERT_TAIL(&loop->cf_signals, &item->member);
+ 
+   state = loop->cf_state;
+   assert(state != NULL);
+@@ -807,7 +807,7 @@ int uv__fsevents_init(uv_fs_event_t* handle) {
+   handle->realpath_len = strlen(handle->realpath);
+ 
+   /* Initialize event queue */
+-  uv__queue_init(&handle->cf_events);
++  QUEUE_INIT(&handle->cf_events);
+   handle->cf_error = 0;
+ 
+   /*
+@@ -832,7 +832,7 @@ int uv__fsevents_init(uv_fs_event_t* handle) {
+   /* Insert handle into the list */
+   state = handle->loop->cf_state;
+   uv_mutex_lock(&state->fsevent_mutex);
+-  uv__queue_insert_tail(&state->fsevent_handles, &handle->cf_member);
++  QUEUE_INSERT_TAIL(&state->fsevent_handles, &handle->cf_member);
+   state->fsevent_handle_count++;
+   state->fsevent_need_reschedule = 1;
+   uv_mutex_unlock(&state->fsevent_mutex);
+@@ -872,7 +872,7 @@ int uv__fsevents_close(uv_fs_event_t* handle) {
+   /* Remove handle from  the list */
+   state = handle->loop->cf_state;
+   uv_mutex_lock(&state->fsevent_mutex);
+-  uv__queue_remove(&handle->cf_member);
++  QUEUE_REMOVE(&handle->cf_member);
+   state->fsevent_handle_count--;
+   state->fsevent_need_reschedule = 1;
+   uv_mutex_unlock(&state->fsevent_mutex);
+diff --git a/deps/uv/src/unix/internal.h b/deps/uv/src/unix/internal.h
+index fe588513603..6c5822e6a0d 100644
+--- a/deps/uv/src/unix/internal.h
++++ b/deps/uv/src/unix/internal.h
+@@ -335,30 +335,20 @@ int uv__iou_fs_close(uv_loop_t* loop, uv_fs_t* req);
+ int uv__iou_fs_fsync_or_fdatasync(uv_loop_t* loop,
+                                   uv_fs_t* req,
+                                   uint32_t fsync_flags);
+-int uv__iou_fs_link(uv_loop_t* loop, uv_fs_t* req);
+-int uv__iou_fs_mkdir(uv_loop_t* loop, uv_fs_t* req);
+ int uv__iou_fs_open(uv_loop_t* loop, uv_fs_t* req);
+ int uv__iou_fs_read_or_write(uv_loop_t* loop,
+                              uv_fs_t* req,
+                              int is_read);
+-int uv__iou_fs_rename(uv_loop_t* loop, uv_fs_t* req);
+ int uv__iou_fs_statx(uv_loop_t* loop,
+                      uv_fs_t* req,
+                      int is_fstat,
+                      int is_lstat);
+-int uv__iou_fs_symlink(uv_loop_t* loop, uv_fs_t* req);
+-int uv__iou_fs_unlink(uv_loop_t* loop, uv_fs_t* req);
+ #else
+ #define uv__iou_fs_close(loop, req) 0
+ #define uv__iou_fs_fsync_or_fdatasync(loop, req, fsync_flags) 0
+-#define uv__iou_fs_link(loop, req) 0
+-#define uv__iou_fs_mkdir(loop, req) 0
+ #define uv__iou_fs_open(loop, req) 0
+ #define uv__iou_fs_read_or_write(loop, req, is_read) 0
+-#define uv__iou_fs_rename(loop, req) 0
+ #define uv__iou_fs_statx(loop, req, is_fstat, is_lstat) 0
+-#define uv__iou_fs_symlink(loop, req) 0
+-#define uv__iou_fs_unlink(loop, req) 0
+ #endif
+ 
+ #if defined(__APPLE__)
+@@ -439,7 +429,6 @@ int uv__statx(int dirfd,
+               struct uv__statx* statxbuf);
+ void uv__statx_to_stat(const struct uv__statx* statxbuf, uv_stat_t* buf);
+ ssize_t uv__getrandom(void* buf, size_t buflen, unsigned flags);
+-unsigned uv__kernel_version(void);
+ #endif
+ 
+ typedef int (*uv__peersockfunc)(int, struct sockaddr*, socklen_t*);
+diff --git a/deps/uv/src/unix/kqueue.c b/deps/uv/src/unix/kqueue.c
+index b78242d3be4..82916d65933 100644
+--- a/deps/uv/src/unix/kqueue.c
++++ b/deps/uv/src/unix/kqueue.c
+@@ -133,7 +133,7 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+   struct timespec spec;
+   unsigned int nevents;
+   unsigned int revents;
+-  struct uv__queue* q;
++  QUEUE* q;
+   uv__io_t* w;
+   uv_process_t* process;
+   sigset_t* pset;
+@@ -152,19 +152,19 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+   int reset_timeout;
+ 
+   if (loop->nfds == 0) {
+-    assert(uv__queue_empty(&loop->watcher_queue));
++    assert(QUEUE_EMPTY(&loop->watcher_queue));
+     return;
+   }
+ 
+   lfields = uv__get_internal_fields(loop);
+   nevents = 0;
+ 
+-  while (!uv__queue_empty(&loop->watcher_queue)) {
+-    q = uv__queue_head(&loop->watcher_queue);
+-    uv__queue_remove(q);
+-    uv__queue_init(q);
++  while (!QUEUE_EMPTY(&loop->watcher_queue)) {
++    q = QUEUE_HEAD(&loop->watcher_queue);
++    QUEUE_REMOVE(q);
++    QUEUE_INIT(q);
+ 
+-    w = uv__queue_data(q, uv__io_t, watcher_queue);
++    w = QUEUE_DATA(q, uv__io_t, watcher_queue);
+     assert(w->pevents != 0);
+     assert(w->fd >= 0);
+     assert(w->fd < (int) loop->nwatchers);
+@@ -307,8 +307,8 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+ 
+       /* Handle kevent NOTE_EXIT results */
+       if (ev->filter == EVFILT_PROC) {
+-        uv__queue_foreach(q, &loop->process_handles) {
+-          process = uv__queue_data(q, uv_process_t, queue);
++        QUEUE_FOREACH(q, &loop->process_handles) {
++          process = QUEUE_DATA(q, uv_process_t, queue);
+           if (process->pid == fd) {
+             process->flags |= UV_HANDLE_REAP;
+             loop->flags |= UV_LOOP_REAP_CHILDREN;
+diff --git a/deps/uv/src/unix/linux.c b/deps/uv/src/unix/linux.c
+index 48b9c2c43e1..5f84ad0eea3 100644
+--- a/deps/uv/src/unix/linux.c
++++ b/deps/uv/src/unix/linux.c
+@@ -48,7 +48,6 @@
+ #include <sys/sysinfo.h>
+ #include <sys/sysmacros.h>
+ #include <sys/types.h>
+-#include <sys/utsname.h>
+ #include <time.h>
+ #include <unistd.h>
+ 
+@@ -151,11 +150,6 @@ enum {
+   UV__IORING_OP_CLOSE = 19,
+   UV__IORING_OP_STATX = 21,
+   UV__IORING_OP_EPOLL_CTL = 29,
+-  UV__IORING_OP_RENAMEAT = 35,
+-  UV__IORING_OP_UNLINKAT = 36,
+-  UV__IORING_OP_MKDIRAT = 37,
+-  UV__IORING_OP_SYMLINKAT = 38,
+-  UV__IORING_OP_LINKAT = 39,
+ };
+ 
+ enum {
+@@ -168,10 +162,6 @@ enum {
+   UV__IORING_SQ_CQ_OVERFLOW = 2u,
+ };
+ 
+-enum {
+-  UV__MKDIRAT_SYMLINKAT_LINKAT = 1u,
+-};
+-
+ struct uv__io_cqring_offsets {
+   uint32_t head;
+   uint32_t tail;
+@@ -267,7 +257,7 @@ STATIC_ASSERT(EPOLL_CTL_MOD < 4);
+ 
+ struct watcher_list {
+   RB_ENTRY(watcher_list) entry;
+-  struct uv__queue watchers;
++  QUEUE watchers;
+   int iterating;
+   char* path;
+   int wd;
+@@ -310,31 +300,6 @@ static struct watcher_root* uv__inotify_watchers(uv_loop_t* loop) {
+ }
+ 
+ 
+-unsigned uv__kernel_version(void) {
+-  static _Atomic unsigned cached_version;
+-  struct utsname u;
+-  unsigned version;
+-  unsigned major;
+-  unsigned minor;
+-  unsigned patch;
+-
+-  version = atomic_load_explicit(&cached_version, memory_order_relaxed);
+-  if (version != 0)
+-    return version;
+-
+-  if (-1 == uname(&u))
+-    return 0;
+-
+-  if (3 != sscanf(u.release, "%u.%u.%u", &major, &minor, &patch))
+-    return 0;
+-
+-  version = major * 65536 + minor * 256 + patch;
+-  atomic_store_explicit(&cached_version, version, memory_order_relaxed);
+-
+-  return version;
+-}
+-
+-
+ ssize_t
+ uv__fs_copy_file_range(int fd_in,
+                        off_t* off_in,
+@@ -420,9 +385,6 @@ int uv__io_uring_register(int fd, unsigned opcode, void* arg, unsigned nargs) {
+ 
+ 
+ static int uv__use_io_uring(void) {
+-#if defined(__ANDROID_API__)
+-  return 0;  /* Possibly available but blocked by seccomp. */
+-#else
+   /* Ternary: unknown=0, yes=1, no=-1 */
+   static _Atomic int use_io_uring;
+   char* val;
+@@ -437,7 +399,6 @@ static int uv__use_io_uring(void) {
+   }
+ 
+   return use > 0;
+-#endif
+ }
+ 
+ 
+@@ -542,10 +503,6 @@ static void uv__iou_init(int epollfd,
+   iou->sqelen = sqelen;
+   iou->ringfd = ringfd;
+   iou->in_flight = 0;
+-  iou->flags = 0;
+-
+-  if (uv__kernel_version() >= /* 5.15.0 */ 0x050F00)
+-    iou->flags |= UV__MKDIRAT_SYMLINKAT_LINKAT;
+ 
+   for (i = 0; i <= iou->sqmask; i++)
+     iou->sqarray[i] = i;  /* Slot -> sqe identity mapping. */
+@@ -727,7 +684,7 @@ static struct uv__io_uring_sqe* uv__iou_get_sqe(struct uv__iou* iou,
+   req->work_req.loop = loop;
+   req->work_req.work = NULL;
+   req->work_req.done = NULL;
+-  uv__queue_init(&req->work_req.wq);
++  QUEUE_INIT(&req->work_req.wq);
+ 
+   uv__req_register(loop, req);
+   iou->in_flight++;
+@@ -757,17 +714,6 @@ int uv__iou_fs_close(uv_loop_t* loop, uv_fs_t* req) {
+   struct uv__io_uring_sqe* sqe;
+   struct uv__iou* iou;
+ 
+-  /* Work around a poorly understood bug in older kernels where closing a file
+-   * descriptor pointing to /foo/bar results in ETXTBSY errors when trying to
+-   * execve("/foo/bar") later on. The bug seems to have been fixed somewhere
+-   * between 5.15.85 and 5.15.90. I couldn't pinpoint the responsible commit
+-   * but good candidates are the several data race fixes. Interestingly, it
+-   * seems to manifest only when running under Docker so the possibility of
+-   * a Docker bug can't be completely ruled out either. Yay, computers.
+-   */
+-  if (uv__kernel_version() < /* 5.15.90 */ 0x050F5A)
+-    return 0;
+-
+   iou = &uv__get_internal_fields(loop)->iou;
+ 
+   sqe = uv__iou_get_sqe(iou, loop, req);
+@@ -808,55 +754,6 @@ int uv__iou_fs_fsync_or_fdatasync(uv_loop_t* loop,
+ }
+ 
+ 
+-int uv__iou_fs_link(uv_loop_t* loop, uv_fs_t* req) {
+-  struct uv__io_uring_sqe* sqe;
+-  struct uv__iou* iou;
+-
+-  iou = &uv__get_internal_fields(loop)->iou;
+-
+-  if (!(iou->flags & UV__MKDIRAT_SYMLINKAT_LINKAT))
+-    return 0;
+-
+-  sqe = uv__iou_get_sqe(iou, loop, req);
+-  if (sqe == NULL)
+-    return 0;
+-
+-  sqe->addr = (uintptr_t) req->path;
+-  sqe->fd = AT_FDCWD;
+-  sqe->addr2 = (uintptr_t) req->new_path;
+-  sqe->len = AT_FDCWD;
+-  sqe->opcode = UV__IORING_OP_LINKAT;
+-
+-  uv__iou_submit(iou);
+-
+-  return 1;
+-}
+-
+-
+-int uv__iou_fs_mkdir(uv_loop_t* loop, uv_fs_t* req) {
+-  struct uv__io_uring_sqe* sqe;
+-  struct uv__iou* iou;
+-
+-  iou = &uv__get_internal_fields(loop)->iou;
+-
+-  if (!(iou->flags & UV__MKDIRAT_SYMLINKAT_LINKAT))
+-    return 0;
+-
+-  sqe = uv__iou_get_sqe(iou, loop, req);
+-  if (sqe == NULL)
+-    return 0;
+-
+-  sqe->addr = (uintptr_t) req->path;
+-  sqe->fd = AT_FDCWD;
+-  sqe->len = req->mode;
+-  sqe->opcode = UV__IORING_OP_MKDIRAT;
+-
+-  uv__iou_submit(iou);
+-
+-  return 1;
+-}
+-
+-
+ int uv__iou_fs_open(uv_loop_t* loop, uv_fs_t* req) {
+   struct uv__io_uring_sqe* sqe;
+   struct uv__iou* iou;
+@@ -879,86 +776,16 @@ int uv__iou_fs_open(uv_loop_t* loop, uv_fs_t* req) {
+ }
+ 
+ 
+-int uv__iou_fs_rename(uv_loop_t* loop, uv_fs_t* req) {
+-  struct uv__io_uring_sqe* sqe;
+-  struct uv__iou* iou;
+-
+-  iou = &uv__get_internal_fields(loop)->iou;
+-
+-  sqe = uv__iou_get_sqe(iou, loop, req);
+-  if (sqe == NULL)
+-    return 0;
+-
+-  sqe->addr = (uintptr_t) req->path;
+-  sqe->fd = AT_FDCWD;
+-  sqe->addr2 = (uintptr_t) req->new_path;
+-  sqe->len = AT_FDCWD;
+-  sqe->opcode = UV__IORING_OP_RENAMEAT;
+-
+-  uv__iou_submit(iou);
+-
+-  return 1;
+-}
+-
+-
+-int uv__iou_fs_symlink(uv_loop_t* loop, uv_fs_t* req) {
+-  struct uv__io_uring_sqe* sqe;
+-  struct uv__iou* iou;
+-
+-  iou = &uv__get_internal_fields(loop)->iou;
+-
+-  if (!(iou->flags & UV__MKDIRAT_SYMLINKAT_LINKAT))
+-    return 0;
+-
+-  sqe = uv__iou_get_sqe(iou, loop, req);
+-  if (sqe == NULL)
+-    return 0;
+-
+-  sqe->addr = (uintptr_t) req->path;
+-  sqe->fd = AT_FDCWD;
+-  sqe->addr2 = (uintptr_t) req->new_path;
+-  sqe->opcode = UV__IORING_OP_SYMLINKAT;
+-
+-  uv__iou_submit(iou);
+-
+-  return 1;
+-}
+-
+-
+-int uv__iou_fs_unlink(uv_loop_t* loop, uv_fs_t* req) {
+-  struct uv__io_uring_sqe* sqe;
+-  struct uv__iou* iou;
+-
+-  iou = &uv__get_internal_fields(loop)->iou;
+-
+-  sqe = uv__iou_get_sqe(iou, loop, req);
+-  if (sqe == NULL)
+-    return 0;
+-
+-  sqe->addr = (uintptr_t) req->path;
+-  sqe->fd = AT_FDCWD;
+-  sqe->opcode = UV__IORING_OP_UNLINKAT;
+-
+-  uv__iou_submit(iou);
+-
+-  return 1;
+-}
+-
+-
+ int uv__iou_fs_read_or_write(uv_loop_t* loop,
+                              uv_fs_t* req,
+                              int is_read) {
+   struct uv__io_uring_sqe* sqe;
+   struct uv__iou* iou;
+ 
+-  /* If iovcnt is greater than IOV_MAX, cap it to IOV_MAX on reads and fallback
+-   * to the threadpool on writes */
+-  if (req->nbufs > IOV_MAX) {
+-    if (is_read)
+-      req->nbufs = IOV_MAX;
+-    else
+-      return 0;
+-  }
++  /* For the moment, if iovcnt is greater than IOV_MAX, fallback to the
++   * threadpool. In the future we might take advantage of IOSQE_IO_LINK. */
++  if (req->nbufs > IOV_MAX)
++    return 0;
+ 
+   iou = &uv__get_internal_fields(loop)->iou;
+ 
+@@ -1265,7 +1092,7 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+   struct uv__iou* ctl;
+   struct uv__iou* iou;
+   int real_timeout;
+-  struct uv__queue* q;
++  QUEUE* q;
+   uv__io_t* w;
+   sigset_t* sigmask;
+   sigset_t sigset;
+@@ -1311,11 +1138,11 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+ 
+   memset(&e, 0, sizeof(e));
+ 
+-  while (!uv__queue_empty(&loop->watcher_queue)) {
+-    q = uv__queue_head(&loop->watcher_queue);
+-    w = uv__queue_data(q, uv__io_t, watcher_queue);
+-    uv__queue_remove(q);
+-    uv__queue_init(q);
++  while (!QUEUE_EMPTY(&loop->watcher_queue)) {
++    q = QUEUE_HEAD(&loop->watcher_queue);
++    w = QUEUE_DATA(q, uv__io_t, watcher_queue);
++    QUEUE_REMOVE(q);
++    QUEUE_INIT(q);
+ 
+     op = EPOLL_CTL_MOD;
+     if (w->events == 0)
+@@ -2272,8 +2099,8 @@ static int uv__inotify_fork(uv_loop_t* loop, struct watcher_list* root) {
+   struct watcher_list* tmp_watcher_list_iter;
+   struct watcher_list* watcher_list;
+   struct watcher_list tmp_watcher_list;
+-  struct uv__queue queue;
+-  struct uv__queue* q;
++  QUEUE queue;
++  QUEUE* q;
+   uv_fs_event_t* handle;
+   char* tmp_path;
+ 
+@@ -2285,41 +2112,41 @@ static int uv__inotify_fork(uv_loop_t* loop, struct watcher_list* root) {
+    */
+   loop->inotify_watchers = root;
+ 
+-  uv__queue_init(&tmp_watcher_list.watchers);
++  QUEUE_INIT(&tmp_watcher_list.watchers);
+   /* Note that the queue we use is shared with the start and stop()
+-   * functions, making uv__queue_foreach unsafe to use. So we use the
+-   * uv__queue_move trick to safely iterate. Also don't free the watcher
++   * functions, making QUEUE_FOREACH unsafe to use. So we use the
++   * QUEUE_MOVE trick to safely iterate. Also don't free the watcher
+    * list until we're done iterating. c.f. uv__inotify_read.
+    */
+   RB_FOREACH_SAFE(watcher_list, watcher_root,
+                   uv__inotify_watchers(loop), tmp_watcher_list_iter) {
+     watcher_list->iterating = 1;
+-    uv__queue_move(&watcher_list->watchers, &queue);
+-    while (!uv__queue_empty(&queue)) {
+-      q = uv__queue_head(&queue);
+-      handle = uv__queue_data(q, uv_fs_event_t, watchers);
++    QUEUE_MOVE(&watcher_list->watchers, &queue);
++    while (!QUEUE_EMPTY(&queue)) {
++      q = QUEUE_HEAD(&queue);
++      handle = QUEUE_DATA(q, uv_fs_event_t, watchers);
+       /* It's critical to keep a copy of path here, because it
+        * will be set to NULL by stop() and then deallocated by
+        * maybe_free_watcher_list
+        */
+       tmp_path = uv__strdup(handle->path);
+       assert(tmp_path != NULL);
+-      uv__queue_remove(q);
+-      uv__queue_insert_tail(&watcher_list->watchers, q);
++      QUEUE_REMOVE(q);
++      QUEUE_INSERT_TAIL(&watcher_list->watchers, q);
+       uv_fs_event_stop(handle);
+ 
+-      uv__queue_insert_tail(&tmp_watcher_list.watchers, &handle->watchers);
++      QUEUE_INSERT_TAIL(&tmp_watcher_list.watchers, &handle->watchers);
+       handle->path = tmp_path;
+     }
+     watcher_list->iterating = 0;
+     maybe_free_watcher_list(watcher_list, loop);
+   }
+ 
+-  uv__queue_move(&tmp_watcher_list.watchers, &queue);
+-  while (!uv__queue_empty(&queue)) {
+-      q = uv__queue_head(&queue);
+-      uv__queue_remove(q);
+-      handle = uv__queue_data(q, uv_fs_event_t, watchers);
++  QUEUE_MOVE(&tmp_watcher_list.watchers, &queue);
++  while (!QUEUE_EMPTY(&queue)) {
++      q = QUEUE_HEAD(&queue);
++      QUEUE_REMOVE(q);
++      handle = QUEUE_DATA(q, uv_fs_event_t, watchers);
+       tmp_path = handle->path;
+       handle->path = NULL;
+       err = uv_fs_event_start(handle, handle->cb, tmp_path, 0);
+@@ -2341,7 +2168,7 @@ static struct watcher_list* find_watcher(uv_loop_t* loop, int wd) {
+ 
+ static void maybe_free_watcher_list(struct watcher_list* w, uv_loop_t* loop) {
+   /* if the watcher_list->watchers is being iterated over, we can't free it. */
+-  if ((!w->iterating) && uv__queue_empty(&w->watchers)) {
++  if ((!w->iterating) && QUEUE_EMPTY(&w->watchers)) {
+     /* No watchers left for this path. Clean up. */
+     RB_REMOVE(watcher_root, uv__inotify_watchers(loop), w);
+     inotify_rm_watch(loop->inotify_fd, w->wd);
+@@ -2356,8 +2183,8 @@ static void uv__inotify_read(uv_loop_t* loop,
+   const struct inotify_event* e;
+   struct watcher_list* w;
+   uv_fs_event_t* h;
+-  struct uv__queue queue;
+-  struct uv__queue* q;
++  QUEUE queue;
++  QUEUE* q;
+   const char* path;
+   ssize_t size;
+   const char *p;
+@@ -2400,7 +2227,7 @@ static void uv__inotify_read(uv_loop_t* loop,
+        * What can go wrong?
+        * A callback could call uv_fs_event_stop()
+        * and the queue can change under our feet.
+-       * So, we use uv__queue_move() trick to safely iterate over the queue.
++       * So, we use QUEUE_MOVE() trick to safely iterate over the queue.
+        * And we don't free the watcher_list until we're done iterating.
+        *
+        * First,
+@@ -2408,13 +2235,13 @@ static void uv__inotify_read(uv_loop_t* loop,
+        * not to free watcher_list.
+        */
+       w->iterating = 1;
+-      uv__queue_move(&w->watchers, &queue);
+-      while (!uv__queue_empty(&queue)) {
+-        q = uv__queue_head(&queue);
+-        h = uv__queue_data(q, uv_fs_event_t, watchers);
++      QUEUE_MOVE(&w->watchers, &queue);
++      while (!QUEUE_EMPTY(&queue)) {
++        q = QUEUE_HEAD(&queue);
++        h = QUEUE_DATA(q, uv_fs_event_t, watchers);
+ 
+-        uv__queue_remove(q);
+-        uv__queue_insert_tail(&w->watchers, q);
++        QUEUE_REMOVE(q);
++        QUEUE_INSERT_TAIL(&w->watchers, q);
+ 
+         h->cb(h, path, events, 0);
+       }
+@@ -2476,13 +2303,13 @@ int uv_fs_event_start(uv_fs_event_t* handle,
+ 
+   w->wd = wd;
+   w->path = memcpy(w + 1, path, len);
+-  uv__queue_init(&w->watchers);
++  QUEUE_INIT(&w->watchers);
+   w->iterating = 0;
+   RB_INSERT(watcher_root, uv__inotify_watchers(loop), w);
+ 
+ no_insert:
+   uv__handle_start(handle);
+-  uv__queue_insert_tail(&w->watchers, &handle->watchers);
++  QUEUE_INSERT_TAIL(&w->watchers, &handle->watchers);
+   handle->path = w->path;
+   handle->cb = cb;
+   handle->wd = wd;
+@@ -2503,7 +2330,7 @@ int uv_fs_event_stop(uv_fs_event_t* handle) {
+   handle->wd = -1;
+   handle->path = NULL;
+   uv__handle_stop(handle);
+-  uv__queue_remove(&handle->watchers);
++  QUEUE_REMOVE(&handle->watchers);
+ 
+   maybe_free_watcher_list(w, handle->loop);
+ 
+diff --git a/deps/uv/src/unix/loop-watcher.c b/deps/uv/src/unix/loop-watcher.c
+index 2db8b515df7..b8c1c2a7102 100644
+--- a/deps/uv/src/unix/loop-watcher.c
++++ b/deps/uv/src/unix/loop-watcher.c
+@@ -32,7 +32,7 @@
+   int uv_##name##_start(uv_##name##_t* handle, uv_##name##_cb cb) {           \
+     if (uv__is_active(handle)) return 0;                                      \
+     if (cb == NULL) return UV_EINVAL;                                         \
+-    uv__queue_insert_head(&handle->loop->name##_handles, &handle->queue);     \
++    QUEUE_INSERT_HEAD(&handle->loop->name##_handles, &handle->queue);         \
+     handle->name##_cb = cb;                                                   \
+     uv__handle_start(handle);                                                 \
+     return 0;                                                                 \
+@@ -40,21 +40,21 @@
+                                                                               \
+   int uv_##name##_stop(uv_##name##_t* handle) {                               \
+     if (!uv__is_active(handle)) return 0;                                     \
+-    uv__queue_remove(&handle->queue);                                         \
++    QUEUE_REMOVE(&handle->queue);                                             \
+     uv__handle_stop(handle);                                                  \
+     return 0;                                                                 \
+   }                                                                           \
+                                                                               \
+   void uv__run_##name(uv_loop_t* loop) {                                      \
+     uv_##name##_t* h;                                                         \
+-    struct uv__queue queue;                                                   \
+-    struct uv__queue* q;                                                      \
+-    uv__queue_move(&loop->name##_handles, &queue);                            \
+-    while (!uv__queue_empty(&queue)) {                                        \
+-      q = uv__queue_head(&queue);                                             \
+-      h = uv__queue_data(q, uv_##name##_t, queue);                            \
+-      uv__queue_remove(q);                                                    \
+-      uv__queue_insert_tail(&loop->name##_handles, q);                        \
++    QUEUE queue;                                                              \
++    QUEUE* q;                                                                 \
++    QUEUE_MOVE(&loop->name##_handles, &queue);                                \
++    while (!QUEUE_EMPTY(&queue)) {                                            \
++      q = QUEUE_HEAD(&queue);                                                 \
++      h = QUEUE_DATA(q, uv_##name##_t, queue);                                \
++      QUEUE_REMOVE(q);                                                        \
++      QUEUE_INSERT_TAIL(&loop->name##_handles, q);                            \
+       h->name##_cb(h);                                                        \
+     }                                                                         \
+   }                                                                           \
+diff --git a/deps/uv/src/unix/loop.c b/deps/uv/src/unix/loop.c
+index a9468e8e19c..90a51b339de 100644
+--- a/deps/uv/src/unix/loop.c
++++ b/deps/uv/src/unix/loop.c
+@@ -50,20 +50,20 @@ int uv_loop_init(uv_loop_t* loop) {
+          sizeof(lfields->loop_metrics.metrics));
+ 
+   heap_init((struct heap*) &loop->timer_heap);
+-  uv__queue_init(&loop->wq);
+-  uv__queue_init(&loop->idle_handles);
+-  uv__queue_init(&loop->async_handles);
+-  uv__queue_init(&loop->check_handles);
+-  uv__queue_init(&loop->prepare_handles);
+-  uv__queue_init(&loop->handle_queue);
++  QUEUE_INIT(&loop->wq);
++  QUEUE_INIT(&loop->idle_handles);
++  QUEUE_INIT(&loop->async_handles);
++  QUEUE_INIT(&loop->check_handles);
++  QUEUE_INIT(&loop->prepare_handles);
++  QUEUE_INIT(&loop->handle_queue);
+ 
+   loop->active_handles = 0;
+   loop->active_reqs.count = 0;
+   loop->nfds = 0;
+   loop->watchers = NULL;
+   loop->nwatchers = 0;
+-  uv__queue_init(&loop->pending_queue);
+-  uv__queue_init(&loop->watcher_queue);
++  QUEUE_INIT(&loop->pending_queue);
++  QUEUE_INIT(&loop->watcher_queue);
+ 
+   loop->closing_handles = NULL;
+   uv__update_time(loop);
+@@ -85,7 +85,7 @@ int uv_loop_init(uv_loop_t* loop) {
+   err = uv__process_init(loop);
+   if (err)
+     goto fail_signal_init;
+-  uv__queue_init(&loop->process_handles);
++  QUEUE_INIT(&loop->process_handles);
+ 
+   err = uv_rwlock_init(&loop->cloexec_lock);
+   if (err)
+@@ -152,9 +152,9 @@ int uv_loop_fork(uv_loop_t* loop) {
+     if (w == NULL)
+       continue;
+ 
+-    if (w->pevents != 0 && uv__queue_empty(&w->watcher_queue)) {
++    if (w->pevents != 0 && QUEUE_EMPTY(&w->watcher_queue)) {
+       w->events = 0; /* Force re-registration in uv__io_poll. */
+-      uv__queue_insert_tail(&loop->watcher_queue, &w->watcher_queue);
++      QUEUE_INSERT_TAIL(&loop->watcher_queue, &w->watcher_queue);
+     }
+   }
+ 
+@@ -180,7 +180,7 @@ void uv__loop_close(uv_loop_t* loop) {
+   }
+ 
+   uv_mutex_lock(&loop->wq_mutex);
+-  assert(uv__queue_empty(&loop->wq) && "thread pool work queue not empty!");
++  assert(QUEUE_EMPTY(&loop->wq) && "thread pool work queue not empty!");
+   assert(!uv__has_active_reqs(loop));
+   uv_mutex_unlock(&loop->wq_mutex);
+   uv_mutex_destroy(&loop->wq_mutex);
+@@ -192,8 +192,8 @@ void uv__loop_close(uv_loop_t* loop) {
+   uv_rwlock_destroy(&loop->cloexec_lock);
+ 
+ #if 0
+-  assert(uv__queue_empty(&loop->pending_queue));
+-  assert(uv__queue_empty(&loop->watcher_queue));
++  assert(QUEUE_EMPTY(&loop->pending_queue));
++  assert(QUEUE_EMPTY(&loop->watcher_queue));
+   assert(loop->nfds == 0);
+ #endif
+ 
+diff --git a/deps/uv/src/unix/os390-syscalls.c b/deps/uv/src/unix/os390-syscalls.c
+index 7f90c270906..5861aaaa202 100644
+--- a/deps/uv/src/unix/os390-syscalls.c
++++ b/deps/uv/src/unix/os390-syscalls.c
+@@ -27,7 +27,7 @@
+ #include <termios.h>
+ #include <sys/msg.h>
+ 
+-static struct uv__queue global_epoll_queue;
++static QUEUE global_epoll_queue;
+ static uv_mutex_t global_epoll_lock;
+ static uv_once_t once = UV_ONCE_INIT;
+ 
+@@ -178,18 +178,18 @@ static void after_fork(void) {
+ 
+ 
+ static void child_fork(void) {
+-  struct uv__queue* q;
++  QUEUE* q;
+   uv_once_t child_once = UV_ONCE_INIT;
+ 
+   /* reset once */
+   memcpy(&once, &child_once, sizeof(child_once));
+ 
+   /* reset epoll list */
+-  while (!uv__queue_empty(&global_epoll_queue)) {
++  while (!QUEUE_EMPTY(&global_epoll_queue)) {
+     uv__os390_epoll* lst;
+-    q = uv__queue_head(&global_epoll_queue);
+-    uv__queue_remove(q);
+-    lst = uv__queue_data(q, uv__os390_epoll, member);
++    q = QUEUE_HEAD(&global_epoll_queue);
++    QUEUE_REMOVE(q);
++    lst = QUEUE_DATA(q, uv__os390_epoll, member);
+     uv__free(lst->items);
+     lst->items = NULL;
+     lst->size = 0;
+@@ -201,7 +201,7 @@ static void child_fork(void) {
+ 
+ 
+ static void epoll_init(void) {
+-  uv__queue_init(&global_epoll_queue);
++  QUEUE_INIT(&global_epoll_queue);
+   if (uv_mutex_init(&global_epoll_lock))
+     abort();
+ 
+@@ -225,7 +225,7 @@ uv__os390_epoll* epoll_create1(int flags) {
+     lst->items[lst->size - 1].revents = 0;
+     uv_once(&once, epoll_init);
+     uv_mutex_lock(&global_epoll_lock);
+-    uv__queue_insert_tail(&global_epoll_queue, &lst->member);
++    QUEUE_INSERT_TAIL(&global_epoll_queue, &lst->member);
+     uv_mutex_unlock(&global_epoll_lock);
+   }
+ 
+@@ -352,14 +352,14 @@ int epoll_wait(uv__os390_epoll* lst, struct epoll_event* events,
+ 
+ 
+ int epoll_file_close(int fd) {
+-  struct uv__queue* q;
++  QUEUE* q;
+ 
+   uv_once(&once, epoll_init);
+   uv_mutex_lock(&global_epoll_lock);
+-  uv__queue_foreach(q, &global_epoll_queue) {
++  QUEUE_FOREACH(q, &global_epoll_queue) {
+     uv__os390_epoll* lst;
+ 
+-    lst = uv__queue_data(q, uv__os390_epoll, member);
++    lst = QUEUE_DATA(q, uv__os390_epoll, member);
+     if (fd < lst->size && lst->items != NULL && lst->items[fd].fd != -1)
+       lst->items[fd].fd = -1;
+   }
+@@ -371,7 +371,7 @@ int epoll_file_close(int fd) {
+ void epoll_queue_close(uv__os390_epoll* lst) {
+   /* Remove epoll instance from global queue */
+   uv_mutex_lock(&global_epoll_lock);
+-  uv__queue_remove(&lst->member);
++  QUEUE_REMOVE(&lst->member);
+   uv_mutex_unlock(&global_epoll_lock);
+ 
+   /* Free resources */
+diff --git a/deps/uv/src/unix/os390-syscalls.h b/deps/uv/src/unix/os390-syscalls.h
+index d5f3bcf8b1c..9f504171d85 100644
+--- a/deps/uv/src/unix/os390-syscalls.h
++++ b/deps/uv/src/unix/os390-syscalls.h
+@@ -45,7 +45,7 @@ struct epoll_event {
+ };
+ 
+ typedef struct {
+-  struct uv__queue member;
++  QUEUE member;
+   struct pollfd* items;
+   unsigned long size;
+   int msg_queue;
+diff --git a/deps/uv/src/unix/os390.c b/deps/uv/src/unix/os390.c
+index bbd37692d1d..a87c2d77faf 100644
+--- a/deps/uv/src/unix/os390.c
++++ b/deps/uv/src/unix/os390.c
+@@ -815,7 +815,7 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+   uv__os390_epoll* ep;
+   int have_signals;
+   int real_timeout;
+-  struct uv__queue* q;
++  QUEUE* q;
+   uv__io_t* w;
+   uint64_t base;
+   int count;
+@@ -827,19 +827,19 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+   int reset_timeout;
+ 
+   if (loop->nfds == 0) {
+-    assert(uv__queue_empty(&loop->watcher_queue));
++    assert(QUEUE_EMPTY(&loop->watcher_queue));
+     return;
+   }
+ 
+   lfields = uv__get_internal_fields(loop);
+ 
+-  while (!uv__queue_empty(&loop->watcher_queue)) {
++  while (!QUEUE_EMPTY(&loop->watcher_queue)) {
+     uv_stream_t* stream;
+ 
+-    q = uv__queue_head(&loop->watcher_queue);
+-    uv__queue_remove(q);
+-    uv__queue_init(q);
+-    w = uv__queue_data(q, uv__io_t, watcher_queue);
++    q = QUEUE_HEAD(&loop->watcher_queue);
++    QUEUE_REMOVE(q);
++    QUEUE_INIT(q);
++    w = QUEUE_DATA(q, uv__io_t, watcher_queue);
+ 
+     assert(w->pevents != 0);
+     assert(w->fd >= 0);
+diff --git a/deps/uv/src/unix/pipe.c b/deps/uv/src/unix/pipe.c
+index d332f351830..ce91ac49b30 100644
+--- a/deps/uv/src/unix/pipe.c
++++ b/deps/uv/src/unix/pipe.c
+@@ -297,7 +297,7 @@ out:
+   uv__req_init(handle->loop, req, UV_CONNECT);
+   req->handle = (uv_stream_t*)handle;
+   req->cb = cb;
+-  uv__queue_init(&req->queue);
++  QUEUE_INIT(&req->queue);
+ 
+   /* Force callback to run on next tick in case of error. */
+   if (err)
+diff --git a/deps/uv/src/unix/posix-poll.c b/deps/uv/src/unix/posix-poll.c
+index 2e016c2fbae..7e7de86845d 100644
+--- a/deps/uv/src/unix/posix-poll.c
++++ b/deps/uv/src/unix/posix-poll.c
+@@ -137,7 +137,7 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+   sigset_t set;
+   uint64_t time_base;
+   uint64_t time_diff;
+-  struct uv__queue* q;
++  QUEUE* q;
+   uv__io_t* w;
+   size_t i;
+   unsigned int nevents;
+@@ -149,19 +149,19 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+   int reset_timeout;
+ 
+   if (loop->nfds == 0) {
+-    assert(uv__queue_empty(&loop->watcher_queue));
++    assert(QUEUE_EMPTY(&loop->watcher_queue));
+     return;
+   }
+ 
+   lfields = uv__get_internal_fields(loop);
+ 
+   /* Take queued watchers and add their fds to our poll fds array.  */
+-  while (!uv__queue_empty(&loop->watcher_queue)) {
+-    q = uv__queue_head(&loop->watcher_queue);
+-    uv__queue_remove(q);
+-    uv__queue_init(q);
++  while (!QUEUE_EMPTY(&loop->watcher_queue)) {
++    q = QUEUE_HEAD(&loop->watcher_queue);
++    QUEUE_REMOVE(q);
++    QUEUE_INIT(q);
+ 
+-    w = uv__queue_data(q, uv__io_t, watcher_queue);
++    w = QUEUE_DATA(q, uv__io_t, watcher_queue);
+     assert(w->pevents != 0);
+     assert(w->fd >= 0);
+     assert(w->fd < (int) loop->nwatchers);
+diff --git a/deps/uv/src/unix/process.c b/deps/uv/src/unix/process.c
+index dd58c18d9b9..bbf367b57d3 100644
+--- a/deps/uv/src/unix/process.c
++++ b/deps/uv/src/unix/process.c
+@@ -108,17 +108,17 @@ void uv__wait_children(uv_loop_t* loop) {
+   int status;
+   int options;
+   pid_t pid;
+-  struct uv__queue pending;
+-  struct uv__queue* q;
+-  struct uv__queue* h;
++  QUEUE pending;
++  QUEUE* q;
++  QUEUE* h;
+ 
+-  uv__queue_init(&pending);
++  QUEUE_INIT(&pending);
+ 
+   h = &loop->process_handles;
+-  q = uv__queue_head(h);
++  q = QUEUE_HEAD(h);
+   while (q != h) {
+-    process = uv__queue_data(q, uv_process_t, queue);
+-    q = uv__queue_next(q);
++    process = QUEUE_DATA(q, uv_process_t, queue);
++    q = QUEUE_NEXT(q);
+ 
+ #ifndef UV_USE_SIGCHLD
+     if ((process->flags & UV_HANDLE_REAP) == 0)
+@@ -149,18 +149,18 @@ void uv__wait_children(uv_loop_t* loop) {
+ 
+     assert(pid == process->pid);
+     process->status = status;
+-    uv__queue_remove(&process->queue);
+-    uv__queue_insert_tail(&pending, &process->queue);
++    QUEUE_REMOVE(&process->queue);
++    QUEUE_INSERT_TAIL(&pending, &process->queue);
+   }
+ 
+   h = &pending;
+-  q = uv__queue_head(h);
++  q = QUEUE_HEAD(h);
+   while (q != h) {
+-    process = uv__queue_data(q, uv_process_t, queue);
+-    q = uv__queue_next(q);
++    process = QUEUE_DATA(q, uv_process_t, queue);
++    q = QUEUE_NEXT(q);
+ 
+-    uv__queue_remove(&process->queue);
+-    uv__queue_init(&process->queue);
++    QUEUE_REMOVE(&process->queue);
++    QUEUE_INIT(&process->queue);
+     uv__handle_stop(process);
+ 
+     if (process->exit_cb == NULL)
+@@ -176,7 +176,7 @@ void uv__wait_children(uv_loop_t* loop) {
+ 
+     process->exit_cb(process, exit_status, term_signal);
+   }
+-  assert(uv__queue_empty(&pending));
++  assert(QUEUE_EMPTY(&pending));
+ }
+ 
+ /*
+@@ -978,7 +978,7 @@ int uv_spawn(uv_loop_t* loop,
+                               UV_PROCESS_WINDOWS_VERBATIM_ARGUMENTS)));
+ 
+   uv__handle_init(loop, (uv_handle_t*)process, UV_PROCESS);
+-  uv__queue_init(&process->queue);
++  QUEUE_INIT(&process->queue);
+   process->status = 0;
+ 
+   stdio_count = options->stdio_count;
+@@ -1041,7 +1041,7 @@ int uv_spawn(uv_loop_t* loop,
+ 
+     process->pid = pid;
+     process->exit_cb = options->exit_cb;
+-    uv__queue_insert_tail(&loop->process_handles, &process->queue);
++    QUEUE_INSERT_TAIL(&loop->process_handles, &process->queue);
+     uv__handle_start(process);
+   }
+ 
+@@ -1103,10 +1103,10 @@ int uv_kill(int pid, int signum) {
+ 
+ 
+ void uv__process_close(uv_process_t* handle) {
+-  uv__queue_remove(&handle->queue);
++  QUEUE_REMOVE(&handle->queue);
+   uv__handle_stop(handle);
+ #ifdef UV_USE_SIGCHLD
+-  if (uv__queue_empty(&handle->loop->process_handles))
++  if (QUEUE_EMPTY(&handle->loop->process_handles))
+     uv_signal_stop(&handle->loop->child_watcher);
+ #endif
+ }
+diff --git a/deps/uv/src/unix/signal.c b/deps/uv/src/unix/signal.c
+index 63aba5a60e0..bb70523f561 100644
+--- a/deps/uv/src/unix/signal.c
++++ b/deps/uv/src/unix/signal.c
+@@ -291,16 +291,16 @@ int uv__signal_loop_fork(uv_loop_t* loop) {
+ 
+ 
+ void uv__signal_loop_cleanup(uv_loop_t* loop) {
+-  struct uv__queue* q;
++  QUEUE* q;
+ 
+   /* Stop all the signal watchers that are still attached to this loop. This
+    * ensures that the (shared) signal tree doesn't contain any invalid entries
+    * entries, and that signal handlers are removed when appropriate.
+-   * It's safe to use uv__queue_foreach here because the handles and the handle
++   * It's safe to use QUEUE_FOREACH here because the handles and the handle
+    * queue are not modified by uv__signal_stop().
+    */
+-  uv__queue_foreach(q, &loop->handle_queue) {
+-    uv_handle_t* handle = uv__queue_data(q, uv_handle_t, handle_queue);
++  QUEUE_FOREACH(q, &loop->handle_queue) {
++    uv_handle_t* handle = QUEUE_DATA(q, uv_handle_t, handle_queue);
+ 
+     if (handle->type == UV_SIGNAL)
+       uv__signal_stop((uv_signal_t*) handle);
+diff --git a/deps/uv/src/unix/stream.c b/deps/uv/src/unix/stream.c
+index 28c4d5463c4..03f92b5045a 100644
+--- a/deps/uv/src/unix/stream.c
++++ b/deps/uv/src/unix/stream.c
+@@ -94,8 +94,8 @@ void uv__stream_init(uv_loop_t* loop,
+   stream->accepted_fd = -1;
+   stream->queued_fds = NULL;
+   stream->delayed_error = 0;
+-  uv__queue_init(&stream->write_queue);
+-  uv__queue_init(&stream->write_completed_queue);
++  QUEUE_INIT(&stream->write_queue);
++  QUEUE_INIT(&stream->write_completed_queue);
+   stream->write_queue_size = 0;
+ 
+   if (loop->emfile_fd == -1) {
+@@ -439,15 +439,15 @@ int uv__stream_open(uv_stream_t* stream, int fd, int flags) {
+ 
+ void uv__stream_flush_write_queue(uv_stream_t* stream, int error) {
+   uv_write_t* req;
+-  struct uv__queue* q;
+-  while (!uv__queue_empty(&stream->write_queue)) {
+-    q = uv__queue_head(&stream->write_queue);
+-    uv__queue_remove(q);
++  QUEUE* q;
++  while (!QUEUE_EMPTY(&stream->write_queue)) {
++    q = QUEUE_HEAD(&stream->write_queue);
++    QUEUE_REMOVE(q);
+ 
+-    req = uv__queue_data(q, uv_write_t, queue);
++    req = QUEUE_DATA(q, uv_write_t, queue);
+     req->error = error;
+ 
+-    uv__queue_insert_tail(&stream->write_completed_queue, &req->queue);
++    QUEUE_INSERT_TAIL(&stream->write_completed_queue, &req->queue);
+   }
+ }
+ 
+@@ -627,7 +627,7 @@ static void uv__drain(uv_stream_t* stream) {
+   uv_shutdown_t* req;
+   int err;
+ 
+-  assert(uv__queue_empty(&stream->write_queue));
++  assert(QUEUE_EMPTY(&stream->write_queue));
+   if (!(stream->flags & UV_HANDLE_CLOSING)) {
+     uv__io_stop(stream->loop, &stream->io_watcher, POLLOUT);
+     uv__stream_osx_interrupt_select(stream);
+@@ -714,7 +714,7 @@ static void uv__write_req_finish(uv_write_t* req) {
+   uv_stream_t* stream = req->handle;
+ 
+   /* Pop the req off tcp->write_queue. */
+-  uv__queue_remove(&req->queue);
++  QUEUE_REMOVE(&req->queue);
+ 
+   /* Only free when there was no error. On error, we touch up write_queue_size
+    * right before making the callback. The reason we don't do that right away
+@@ -731,7 +731,7 @@ static void uv__write_req_finish(uv_write_t* req) {
+   /* Add it to the write_completed_queue where it will have its
+    * callback called in the near future.
+    */
+-  uv__queue_insert_tail(&stream->write_completed_queue, &req->queue);
++  QUEUE_INSERT_TAIL(&stream->write_completed_queue, &req->queue);
+   uv__io_feed(stream->loop, &stream->io_watcher);
+ }
+ 
+@@ -837,7 +837,7 @@ static int uv__try_write(uv_stream_t* stream,
+ }
+ 
+ static void uv__write(uv_stream_t* stream) {
+-  struct uv__queue* q;
++  QUEUE* q;
+   uv_write_t* req;
+   ssize_t n;
+   int count;
+@@ -851,11 +851,11 @@ static void uv__write(uv_stream_t* stream) {
+   count = 32;
+ 
+   for (;;) {
+-    if (uv__queue_empty(&stream->write_queue))
++    if (QUEUE_EMPTY(&stream->write_queue))
+       return;
+ 
+-    q = uv__queue_head(&stream->write_queue);
+-    req = uv__queue_data(q, uv_write_t, queue);
++    q = QUEUE_HEAD(&stream->write_queue);
++    req = QUEUE_DATA(q, uv_write_t, queue);
+     assert(req->handle == stream);
+ 
+     n = uv__try_write(stream,
+@@ -899,19 +899,19 @@ error:
+ 
+ static void uv__write_callbacks(uv_stream_t* stream) {
+   uv_write_t* req;
+-  struct uv__queue* q;
+-  struct uv__queue pq;
++  QUEUE* q;
++  QUEUE pq;
+ 
+-  if (uv__queue_empty(&stream->write_completed_queue))
++  if (QUEUE_EMPTY(&stream->write_completed_queue))
+     return;
+ 
+-  uv__queue_move(&stream->write_completed_queue, &pq);
++  QUEUE_MOVE(&stream->write_completed_queue, &pq);
+ 
+-  while (!uv__queue_empty(&pq)) {
++  while (!QUEUE_EMPTY(&pq)) {
+     /* Pop a req off write_completed_queue. */
+-    q = uv__queue_head(&pq);
+-    req = uv__queue_data(q, uv_write_t, queue);
+-    uv__queue_remove(q);
++    q = QUEUE_HEAD(&pq);
++    req = QUEUE_DATA(q, uv_write_t, queue);
++    QUEUE_REMOVE(q);
+     uv__req_unregister(stream->loop, req);
+ 
+     if (req->bufs != NULL) {
+@@ -1174,7 +1174,7 @@ int uv_shutdown(uv_shutdown_t* req, uv_stream_t* stream, uv_shutdown_cb cb) {
+   stream->shutdown_req = req;
+   stream->flags &= ~UV_HANDLE_WRITABLE;
+ 
+-  if (uv__queue_empty(&stream->write_queue))
++  if (QUEUE_EMPTY(&stream->write_queue))
+     uv__io_feed(stream->loop, &stream->io_watcher);
+ 
+   return 0;
+@@ -1227,7 +1227,7 @@ static void uv__stream_io(uv_loop_t* loop, uv__io_t* w, unsigned int events) {
+     uv__write_callbacks(stream);
+ 
+     /* Write queue drained. */
+-    if (uv__queue_empty(&stream->write_queue))
++    if (QUEUE_EMPTY(&stream->write_queue))
+       uv__drain(stream);
+   }
+ }
+@@ -1270,7 +1270,7 @@ static void uv__stream_connect(uv_stream_t* stream) {
+   stream->connect_req = NULL;
+   uv__req_unregister(stream->loop, req);
+ 
+-  if (error < 0 || uv__queue_empty(&stream->write_queue)) {
++  if (error < 0 || QUEUE_EMPTY(&stream->write_queue)) {
+     uv__io_stop(stream->loop, &stream->io_watcher, POLLOUT);
+   }
+ 
+@@ -1352,7 +1352,7 @@ int uv_write2(uv_write_t* req,
+   req->handle = stream;
+   req->error = 0;
+   req->send_handle = send_handle;
+-  uv__queue_init(&req->queue);
++  QUEUE_INIT(&req->queue);
+ 
+   req->bufs = req->bufsml;
+   if (nbufs > ARRAY_SIZE(req->bufsml))
+@@ -1367,7 +1367,7 @@ int uv_write2(uv_write_t* req,
+   stream->write_queue_size += uv__count_bufs(bufs, nbufs);
+ 
+   /* Append the request to write_queue. */
+-  uv__queue_insert_tail(&stream->write_queue, &req->queue);
++  QUEUE_INSERT_TAIL(&stream->write_queue, &req->queue);
+ 
+   /* If the queue was empty when this function began, we should attempt to
+    * do the write immediately. Otherwise start the write_watcher and wait
+diff --git a/deps/uv/src/unix/sunos.c b/deps/uv/src/unix/sunos.c
+index 2d6bae79604..75b6fbad493 100644
+--- a/deps/uv/src/unix/sunos.c
++++ b/deps/uv/src/unix/sunos.c
+@@ -148,7 +148,7 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+   struct port_event events[1024];
+   struct port_event* pe;
+   struct timespec spec;
+-  struct uv__queue* q;
++  QUEUE* q;
+   uv__io_t* w;
+   sigset_t* pset;
+   sigset_t set;
+@@ -166,16 +166,16 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+   int reset_timeout;
+ 
+   if (loop->nfds == 0) {
+-    assert(uv__queue_empty(&loop->watcher_queue));
++    assert(QUEUE_EMPTY(&loop->watcher_queue));
+     return;
+   }
+ 
+-  while (!uv__queue_empty(&loop->watcher_queue)) {
+-    q = uv__queue_head(&loop->watcher_queue);
+-    uv__queue_remove(q);
+-    uv__queue_init(q);
++  while (!QUEUE_EMPTY(&loop->watcher_queue)) {
++    q = QUEUE_HEAD(&loop->watcher_queue);
++    QUEUE_REMOVE(q);
++    QUEUE_INIT(q);
+ 
+-    w = uv__queue_data(q, uv__io_t, watcher_queue);
++    w = QUEUE_DATA(q, uv__io_t, watcher_queue);
+     assert(w->pevents != 0);
+ 
+     if (port_associate(loop->backend_fd,
+@@ -316,8 +316,8 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+         continue;  /* Disabled by callback. */
+ 
+       /* Events Ports operates in oneshot mode, rearm timer on next run. */
+-      if (w->pevents != 0 && uv__queue_empty(&w->watcher_queue))
+-        uv__queue_insert_tail(&loop->watcher_queue, &w->watcher_queue);
++      if (w->pevents != 0 && QUEUE_EMPTY(&w->watcher_queue))
++        QUEUE_INSERT_TAIL(&loop->watcher_queue, &w->watcher_queue);
+     }
+ 
+     uv__metrics_inc_events(loop, nevents);
+diff --git a/deps/uv/src/unix/tcp.c b/deps/uv/src/unix/tcp.c
+index d6c848f4610..ab4e06c2f67 100644
+--- a/deps/uv/src/unix/tcp.c
++++ b/deps/uv/src/unix/tcp.c
+@@ -124,7 +124,7 @@ int uv_tcp_init_ex(uv_loop_t* loop, uv_tcp_t* tcp, unsigned int flags) {
+   if (domain != AF_UNSPEC) {
+     err = new_socket(tcp, domain, 0);
+     if (err) {
+-      uv__queue_remove(&tcp->handle_queue);
++      QUEUE_REMOVE(&tcp->handle_queue);
+       if (tcp->io_watcher.fd != -1)
+         uv__close(tcp->io_watcher.fd);
+       tcp->io_watcher.fd = -1;
+@@ -252,7 +252,7 @@ out:
+   uv__req_init(handle->loop, req, UV_CONNECT);
+   req->cb = cb;
+   req->handle = (uv_stream_t*) handle;
+-  uv__queue_init(&req->queue);
++  QUEUE_INIT(&req->queue);
+   handle->connect_req = req;
+ 
+   uv__io_start(handle->loop, &handle->io_watcher, POLLOUT);
+diff --git a/deps/uv/src/unix/tty.c b/deps/uv/src/unix/tty.c
+index d099bdb3b67..7a5390c1a8b 100644
+--- a/deps/uv/src/unix/tty.c
++++ b/deps/uv/src/unix/tty.c
+@@ -222,7 +222,7 @@ skip:
+     int rc = r;
+     if (newfd != -1)
+       uv__close(newfd);
+-    uv__queue_remove(&tty->handle_queue);
++    QUEUE_REMOVE(&tty->handle_queue);
+     do
+       r = fcntl(fd, F_SETFL, saved_flags);
+     while (r == -1 && errno == EINTR);
+diff --git a/deps/uv/src/unix/udp.c b/deps/uv/src/unix/udp.c
+index c2814512a5f..f556808fbae 100644
+--- a/deps/uv/src/unix/udp.c
++++ b/deps/uv/src/unix/udp.c
+@@ -62,18 +62,18 @@ void uv__udp_close(uv_udp_t* handle) {
+ 
+ void uv__udp_finish_close(uv_udp_t* handle) {
+   uv_udp_send_t* req;
+-  struct uv__queue* q;
++  QUEUE* q;
+ 
+   assert(!uv__io_active(&handle->io_watcher, POLLIN | POLLOUT));
+   assert(handle->io_watcher.fd == -1);
+ 
+-  while (!uv__queue_empty(&handle->write_queue)) {
+-    q = uv__queue_head(&handle->write_queue);
+-    uv__queue_remove(q);
++  while (!QUEUE_EMPTY(&handle->write_queue)) {
++    q = QUEUE_HEAD(&handle->write_queue);
++    QUEUE_REMOVE(q);
+ 
+-    req = uv__queue_data(q, uv_udp_send_t, queue);
++    req = QUEUE_DATA(q, uv_udp_send_t, queue);
+     req->status = UV_ECANCELED;
+-    uv__queue_insert_tail(&handle->write_completed_queue, &req->queue);
++    QUEUE_INSERT_TAIL(&handle->write_completed_queue, &req->queue);
+   }
+ 
+   uv__udp_run_completed(handle);
+@@ -90,16 +90,16 @@ void uv__udp_finish_close(uv_udp_t* handle) {
+ 
+ static void uv__udp_run_completed(uv_udp_t* handle) {
+   uv_udp_send_t* req;
+-  struct uv__queue* q;
++  QUEUE* q;
+ 
+   assert(!(handle->flags & UV_HANDLE_UDP_PROCESSING));
+   handle->flags |= UV_HANDLE_UDP_PROCESSING;
+ 
+-  while (!uv__queue_empty(&handle->write_completed_queue)) {
+-    q = uv__queue_head(&handle->write_completed_queue);
+-    uv__queue_remove(q);
++  while (!QUEUE_EMPTY(&handle->write_completed_queue)) {
++    q = QUEUE_HEAD(&handle->write_completed_queue);
++    QUEUE_REMOVE(q);
+ 
+-    req = uv__queue_data(q, uv_udp_send_t, queue);
++    req = QUEUE_DATA(q, uv_udp_send_t, queue);
+     uv__req_unregister(handle->loop, req);
+ 
+     handle->send_queue_size -= uv__count_bufs(req->bufs, req->nbufs);
+@@ -121,7 +121,7 @@ static void uv__udp_run_completed(uv_udp_t* handle) {
+       req->send_cb(req, req->status);
+   }
+ 
+-  if (uv__queue_empty(&handle->write_queue)) {
++  if (QUEUE_EMPTY(&handle->write_queue)) {
+     /* Pending queue and completion queue empty, stop watcher. */
+     uv__io_stop(handle->loop, &handle->io_watcher, POLLOUT);
+     if (!uv__io_active(&handle->io_watcher, POLLIN))
+@@ -280,20 +280,20 @@ static void uv__udp_sendmsg(uv_udp_t* handle) {
+   uv_udp_send_t* req;
+   struct mmsghdr h[20];
+   struct mmsghdr* p;
+-  struct uv__queue* q;
++  QUEUE* q;
+   ssize_t npkts;
+   size_t pkts;
+   size_t i;
+ 
+-  if (uv__queue_empty(&handle->write_queue))
++  if (QUEUE_EMPTY(&handle->write_queue))
+     return;
+ 
+ write_queue_drain:
+-  for (pkts = 0, q = uv__queue_head(&handle->write_queue);
++  for (pkts = 0, q = QUEUE_HEAD(&handle->write_queue);
+        pkts < ARRAY_SIZE(h) && q != &handle->write_queue;
+-       ++pkts, q = uv__queue_head(q)) {
++       ++pkts, q = QUEUE_HEAD(q)) {
+     assert(q != NULL);
+-    req = uv__queue_data(q, uv_udp_send_t, queue);
++    req = QUEUE_DATA(q, uv_udp_send_t, queue);
+     assert(req != NULL);
+ 
+     p = &h[pkts];
+@@ -325,16 +325,16 @@ write_queue_drain:
+   if (npkts < 1) {
+     if (errno == EAGAIN || errno == EWOULDBLOCK || errno == ENOBUFS)
+       return;
+-    for (i = 0, q = uv__queue_head(&handle->write_queue);
++    for (i = 0, q = QUEUE_HEAD(&handle->write_queue);
+          i < pkts && q != &handle->write_queue;
+-         ++i, q = uv__queue_head(&handle->write_queue)) {
++         ++i, q = QUEUE_HEAD(&handle->write_queue)) {
+       assert(q != NULL);
+-      req = uv__queue_data(q, uv_udp_send_t, queue);
++      req = QUEUE_DATA(q, uv_udp_send_t, queue);
+       assert(req != NULL);
+ 
+       req->status = UV__ERR(errno);
+-      uv__queue_remove(&req->queue);
+-      uv__queue_insert_tail(&handle->write_completed_queue, &req->queue);
++      QUEUE_REMOVE(&req->queue);
++      QUEUE_INSERT_TAIL(&handle->write_completed_queue, &req->queue);
+     }
+     uv__io_feed(handle->loop, &handle->io_watcher);
+     return;
+@@ -343,11 +343,11 @@ write_queue_drain:
+   /* Safety: npkts known to be >0 below. Hence cast from ssize_t
+    * to size_t safe.
+    */
+-  for (i = 0, q = uv__queue_head(&handle->write_queue);
++  for (i = 0, q = QUEUE_HEAD(&handle->write_queue);
+        i < (size_t)npkts && q != &handle->write_queue;
+-       ++i, q = uv__queue_head(&handle->write_queue)) {
++       ++i, q = QUEUE_HEAD(&handle->write_queue)) {
+     assert(q != NULL);
+-    req = uv__queue_data(q, uv_udp_send_t, queue);
++    req = QUEUE_DATA(q, uv_udp_send_t, queue);
+     assert(req != NULL);
+ 
+     req->status = req->bufs[0].len;
+@@ -357,25 +357,25 @@ write_queue_drain:
+      * why we don't handle partial writes. Just pop the request
+      * off the write queue and onto the completed queue, done.
+      */
+-    uv__queue_remove(&req->queue);
+-    uv__queue_insert_tail(&handle->write_completed_queue, &req->queue);
++    QUEUE_REMOVE(&req->queue);
++    QUEUE_INSERT_TAIL(&handle->write_completed_queue, &req->queue);
+   }
+ 
+   /* couldn't batch everything, continue sending (jump to avoid stack growth) */
+-  if (!uv__queue_empty(&handle->write_queue))
++  if (!QUEUE_EMPTY(&handle->write_queue))
+     goto write_queue_drain;
+   uv__io_feed(handle->loop, &handle->io_watcher);
+ #else  /* __linux__ || ____FreeBSD__ */
+   uv_udp_send_t* req;
+   struct msghdr h;
+-  struct uv__queue* q;
++  QUEUE* q;
+   ssize_t size;
+ 
+-  while (!uv__queue_empty(&handle->write_queue)) {
+-    q = uv__queue_head(&handle->write_queue);
++  while (!QUEUE_EMPTY(&handle->write_queue)) {
++    q = QUEUE_HEAD(&handle->write_queue);
+     assert(q != NULL);
+ 
+-    req = uv__queue_data(q, uv_udp_send_t, queue);
++    req = QUEUE_DATA(q, uv_udp_send_t, queue);
+     assert(req != NULL);
+ 
+     memset(&h, 0, sizeof h);
+@@ -414,8 +414,8 @@ write_queue_drain:
+      * why we don't handle partial writes. Just pop the request
+      * off the write queue and onto the completed queue, done.
+      */
+-    uv__queue_remove(&req->queue);
+-    uv__queue_insert_tail(&handle->write_completed_queue, &req->queue);
++    QUEUE_REMOVE(&req->queue);
++    QUEUE_INSERT_TAIL(&handle->write_completed_queue, &req->queue);
+     uv__io_feed(handle->loop, &handle->io_watcher);
+   }
+ #endif  /* __linux__ || ____FreeBSD__ */
+@@ -729,7 +729,7 @@ int uv__udp_send(uv_udp_send_t* req,
+   memcpy(req->bufs, bufs, nbufs * sizeof(bufs[0]));
+   handle->send_queue_size += uv__count_bufs(req->bufs, req->nbufs);
+   handle->send_queue_count++;
+-  uv__queue_insert_tail(&handle->write_queue, &req->queue);
++  QUEUE_INSERT_TAIL(&handle->write_queue, &req->queue);
+   uv__handle_start(handle);
+ 
+   if (empty_queue && !(handle->flags & UV_HANDLE_UDP_PROCESSING)) {
+@@ -739,7 +739,7 @@ int uv__udp_send(uv_udp_send_t* req,
+      * away. In such cases the `io_watcher` has to be queued for asynchronous
+      * write.
+      */
+-    if (!uv__queue_empty(&handle->write_queue))
++    if (!QUEUE_EMPTY(&handle->write_queue))
+       uv__io_start(handle->loop, &handle->io_watcher, POLLOUT);
+   } else {
+     uv__io_start(handle->loop, &handle->io_watcher, POLLOUT);
+@@ -1007,8 +1007,8 @@ int uv__udp_init_ex(uv_loop_t* loop,
+   handle->send_queue_size = 0;
+   handle->send_queue_count = 0;
+   uv__io_init(&handle->io_watcher, uv__udp_io, fd);
+-  uv__queue_init(&handle->write_queue);
+-  uv__queue_init(&handle->write_completed_queue);
++  QUEUE_INIT(&handle->write_queue);
++  QUEUE_INIT(&handle->write_completed_queue);
+ 
+   return 0;
+ }
+diff --git a/deps/uv/src/uv-common.c b/deps/uv/src/uv-common.c
+index 916f3f4e006..cec771fab21 100644
+--- a/deps/uv/src/uv-common.c
++++ b/deps/uv/src/uv-common.c
+@@ -533,17 +533,17 @@ int uv_udp_recv_stop(uv_udp_t* handle) {
+ 
+ 
+ void uv_walk(uv_loop_t* loop, uv_walk_cb walk_cb, void* arg) {
+-  struct uv__queue queue;
+-  struct uv__queue* q;
++  QUEUE queue;
++  QUEUE* q;
+   uv_handle_t* h;
+ 
+-  uv__queue_move(&loop->handle_queue, &queue);
+-  while (!uv__queue_empty(&queue)) {
+-    q = uv__queue_head(&queue);
+-    h = uv__queue_data(q, uv_handle_t, handle_queue);
++  QUEUE_MOVE(&loop->handle_queue, &queue);
++  while (!QUEUE_EMPTY(&queue)) {
++    q = QUEUE_HEAD(&queue);
++    h = QUEUE_DATA(q, uv_handle_t, handle_queue);
+ 
+-    uv__queue_remove(q);
+-    uv__queue_insert_tail(&loop->handle_queue, q);
++    QUEUE_REMOVE(q);
++    QUEUE_INSERT_TAIL(&loop->handle_queue, q);
+ 
+     if (h->flags & UV_HANDLE_INTERNAL) continue;
+     walk_cb(h, arg);
+@@ -553,14 +553,14 @@ void uv_walk(uv_loop_t* loop, uv_walk_cb walk_cb, void* arg) {
+ 
+ static void uv__print_handles(uv_loop_t* loop, int only_active, FILE* stream) {
+   const char* type;
+-  struct uv__queue* q;
++  QUEUE* q;
+   uv_handle_t* h;
+ 
+   if (loop == NULL)
+     loop = uv_default_loop();
+ 
+-  uv__queue_foreach(q, &loop->handle_queue) {
+-    h = uv__queue_data(q, uv_handle_t, handle_queue);
++  QUEUE_FOREACH(q, &loop->handle_queue) {
++    h = QUEUE_DATA(q, uv_handle_t, handle_queue);
+ 
+     if (only_active && !uv__is_active(h))
+       continue;
+@@ -846,7 +846,7 @@ uv_loop_t* uv_loop_new(void) {
+ 
+ 
+ int uv_loop_close(uv_loop_t* loop) {
+-  struct uv__queue* q;
++  QUEUE* q;
+   uv_handle_t* h;
+ #ifndef NDEBUG
+   void* saved_data;
+@@ -855,8 +855,8 @@ int uv_loop_close(uv_loop_t* loop) {
+   if (uv__has_active_reqs(loop))
+     return UV_EBUSY;
+ 
+-  uv__queue_foreach(q, &loop->handle_queue) {
+-    h = uv__queue_data(q, uv_handle_t, handle_queue);
++  QUEUE_FOREACH(q, &loop->handle_queue) {
++    h = QUEUE_DATA(q, uv_handle_t, handle_queue);
+     if (!(h->flags & UV_HANDLE_INTERNAL))
+       return UV_EBUSY;
+   }
+diff --git a/deps/uv/src/uv-common.h b/deps/uv/src/uv-common.h
+index cd57e5a3515..decde5362c8 100644
+--- a/deps/uv/src/uv-common.h
++++ b/deps/uv/src/uv-common.h
+@@ -323,7 +323,7 @@ void uv__threadpool_cleanup(void);
+     (h)->loop = (loop_);                                                      \
+     (h)->type = (type_);                                                      \
+     (h)->flags = UV_HANDLE_REF;  /* Ref the loop when active. */              \
+-    uv__queue_insert_tail(&(loop_)->handle_queue, &(h)->handle_queue);        \
++    QUEUE_INSERT_TAIL(&(loop_)->handle_queue, &(h)->handle_queue);            \
+     uv__handle_platform_init(h);                                              \
+   }                                                                           \
+   while (0)
+@@ -415,7 +415,6 @@ struct uv__iou {
+   size_t sqelen;
+   int ringfd;
+   uint32_t in_flight;
+-  uint32_t flags;
+ };
+ #endif  /* __linux__ */
+ 
+diff --git a/deps/uv/src/win/core.c b/deps/uv/src/win/core.c
+index e9885a0f1ff..9a3be58849a 100644
+--- a/deps/uv/src/win/core.c
++++ b/deps/uv/src/win/core.c
+@@ -255,8 +255,8 @@ int uv_loop_init(uv_loop_t* loop) {
+   loop->time = 0;
+   uv_update_time(loop);
+ 
+-  uv__queue_init(&loop->wq);
+-  uv__queue_init(&loop->handle_queue);
++  QUEUE_INIT(&loop->wq);
++  QUEUE_INIT(&loop->handle_queue);
+   loop->active_reqs.count = 0;
+   loop->active_handles = 0;
+ 
+@@ -358,7 +358,7 @@ void uv__loop_close(uv_loop_t* loop) {
+   }
+ 
+   uv_mutex_lock(&loop->wq_mutex);
+-  assert(uv__queue_empty(&loop->wq) && "thread pool work queue not empty!");
++  assert(QUEUE_EMPTY(&loop->wq) && "thread pool work queue not empty!");
+   assert(!uv__has_active_reqs(loop));
+   uv_mutex_unlock(&loop->wq_mutex);
+   uv_mutex_destroy(&loop->wq_mutex);
+diff --git a/deps/uv/src/win/fs.c b/deps/uv/src/win/fs.c
+index fc209c54f47..deb9438d689 100644
+--- a/deps/uv/src/win/fs.c
++++ b/deps/uv/src/win/fs.c
+@@ -144,97 +144,26 @@ void uv__fs_init(void) {
+ }
+ 
+ 
+-static int32_t fs__decode_wtf8_char(const char** input) {
+-  uint32_t code_point;
+-  uint8_t b1;
+-  uint8_t b2;
+-  uint8_t b3;
+-  uint8_t b4;
+-
+-  b1 = **input;
+-  if (b1 <= 0x7F)
+-    return b1; /* ASCII code point */
+-  if (b1 < 0xC2)
+-    return -1; /* invalid: continuation byte */
+-  code_point = b1;
+-
+-  b2 = *++*input;
+-  if ((b2 & 0xC0) != 0x80)
+-    return -1; /* invalid: not a continuation byte */
+-  code_point = (code_point << 6) | (b2 & 0x3F);
+-  if (b1 <= 0xDF)
+-    return 0x7FF & code_point; /* two-byte character */
+-
+-  b3 = *++*input;
+-  if ((b3 & 0xC0) != 0x80)
+-    return -1; /* invalid: not a continuation byte */
+-  code_point = (code_point << 6) | (b3 & 0x3F);
+-  if (b1 <= 0xEF)
+-    return 0xFFFF & code_point; /* three-byte character */
+-
+-  b4 = *++*input;
+-  if ((b4 & 0xC0) != 0x80)
+-    return -1; /* invalid: not a continuation byte */
+-  code_point = (code_point << 6) | (b4 & 0x3F);
+-  if (b1 <= 0xF4)
+-    if (code_point <= 0x10FFFF)
+-      return code_point; /* four-byte character */
+-
+-  /* code point too large */
+-  return -1;
+-}
+-
+-
+-static ssize_t fs__get_length_wtf8(const char* source_ptr) {
+-  size_t w_target_len = 0;
+-  int32_t code_point;
+-
+-  do {
+-    code_point = fs__decode_wtf8_char(&source_ptr);
+-    if (code_point < 0)
+-      return -1;
+-    if (code_point > 0xFFFF)
+-      w_target_len++;
+-    w_target_len++;
+-  } while (*source_ptr++);
+-  return w_target_len;
+-}
+-
+-
+-static void fs__wtf8_to_wide(const char* source_ptr, WCHAR* w_target) {
+-  int32_t code_point;
+-
+-  do {
+-    code_point = fs__decode_wtf8_char(&source_ptr);
+-    /* fs__get_length_wtf8 should have been called and checked first. */
+-    assert(code_point >= 0);
+-    if (code_point > 0x10000) {
+-      assert(code_point < 0x10FFFF);
+-      *w_target++ = (((code_point - 0x10000) >> 10) + 0xD800);
+-      *w_target++ = ((code_point - 0x10000) & 0x3FF) + 0xDC00;
+-    } else {
+-      *w_target++ = code_point;
+-    }
+-  } while (*source_ptr++);
+-}
+-
+-
+ INLINE static int fs__capture_path(uv_fs_t* req, const char* path,
+     const char* new_path, const int copy_path) {
+-  WCHAR* buf;
+-  WCHAR* pos;
+-  size_t buf_sz = 0;
+-  size_t path_len = 0;
+-  ssize_t pathw_len = 0;
+-  ssize_t new_pathw_len = 0;
++  char* buf;
++  char* pos;
++  ssize_t buf_sz = 0, path_len = 0, pathw_len = 0, new_pathw_len = 0;
+ 
+   /* new_path can only be set if path is also set. */
+   assert(new_path == NULL || path != NULL);
+ 
+   if (path != NULL) {
+-    pathw_len = fs__get_length_wtf8(path);
+-    if (pathw_len < 0)
+-      return ERROR_INVALID_NAME;
++    pathw_len = MultiByteToWideChar(CP_UTF8,
++                                    0,
++                                    path,
++                                    -1,
++                                    NULL,
++                                    0);
++    if (pathw_len == 0) {
++      return GetLastError();
++    }
++
+     buf_sz += pathw_len * sizeof(WCHAR);
+   }
+ 
+@@ -244,9 +173,16 @@ INLINE static int fs__capture_path(uv_fs_t* req, const char* path,
+   }
+ 
+   if (new_path != NULL) {
+-    new_pathw_len = fs__get_length_wtf8(new_path);
+-    if (new_pathw_len < 0)
+-      return ERROR_INVALID_NAME;
++    new_pathw_len = MultiByteToWideChar(CP_UTF8,
++                                        0,
++                                        new_path,
++                                        -1,
++                                        NULL,
++                                        0);
++    if (new_pathw_len == 0) {
++      return GetLastError();
++    }
++
+     buf_sz += new_pathw_len * sizeof(WCHAR);
+   }
+ 
+@@ -258,7 +194,7 @@ INLINE static int fs__capture_path(uv_fs_t* req, const char* path,
+     return 0;
+   }
+ 
+-  buf = uv__malloc(buf_sz);
++  buf = (char*) uv__malloc(buf_sz);
+   if (buf == NULL) {
+     return ERROR_OUTOFMEMORY;
+   }
+@@ -266,17 +202,29 @@ INLINE static int fs__capture_path(uv_fs_t* req, const char* path,
+   pos = buf;
+ 
+   if (path != NULL) {
+-    fs__wtf8_to_wide(path, pos);
+-    req->file.pathw = pos;
+-    pos += pathw_len;
++    DWORD r = MultiByteToWideChar(CP_UTF8,
++                                  0,
++                                  path,
++                                  -1,
++                                  (WCHAR*) pos,
++                                  pathw_len);
++    assert(r == (DWORD) pathw_len);
++    req->file.pathw = (WCHAR*) pos;
++    pos += r * sizeof(WCHAR);
+   } else {
+     req->file.pathw = NULL;
+   }
+ 
+   if (new_path != NULL) {
+-    fs__wtf8_to_wide(new_path, pos);
+-    req->fs.info.new_pathw = pos;
+-    pos += new_pathw_len;
++    DWORD r = MultiByteToWideChar(CP_UTF8,
++                                  0,
++                                  new_path,
++                                  -1,
++                                  (WCHAR*) pos,
++                                  new_pathw_len);
++    assert(r == (DWORD) new_pathw_len);
++    req->fs.info.new_pathw = (WCHAR*) pos;
++    pos += r * sizeof(WCHAR);
+   } else {
+     req->fs.info.new_pathw = NULL;
+   }
+@@ -284,8 +232,8 @@ INLINE static int fs__capture_path(uv_fs_t* req, const char* path,
+   req->path = path;
+   if (path != NULL && copy_path) {
+     memcpy(pos, path, path_len);
+-    assert(path_len == buf_sz - (pos - buf) * sizeof(WCHAR));
+-    req->path = (char*) pos;
++    assert(path_len == buf_sz - (pos - buf));
++    req->path = pos;
+   }
+ 
+   req->flags |= UV_FS_FREE_PATHS;
+@@ -311,115 +259,57 @@ INLINE static void uv__fs_req_init(uv_loop_t* loop, uv_fs_t* req,
+ }
+ 
+ 
+-static int32_t fs__get_surrogate_value(const WCHAR* w_source_ptr,
+-                                       size_t w_source_len) {
+-  WCHAR u;
+-  WCHAR next;
+-
+-  u = w_source_ptr[0];
+-  if (u >= 0xD800 && u <= 0xDBFF && w_source_len > 1) {
+-    next = w_source_ptr[1];
+-    if (next >= 0xDC00 && next <= 0xDFFF)
+-      return 0x10000 + ((u - 0xD800) << 10) + (next - 0xDC00);
+-  }
+-  return u;
+-}
+-
+-
+-static size_t fs__get_length_wide(const WCHAR* w_source_ptr,
+-                                  size_t w_source_len) {
+-  size_t target_len;
+-  int32_t code_point;
++static int fs__wide_to_utf8(WCHAR* w_source_ptr,
++                               DWORD w_source_len,
++                               char** target_ptr,
++                               uint64_t* target_len_ptr) {
++  int r;
++  int target_len;
++  char* target;
++  target_len = WideCharToMultiByte(CP_UTF8,
++                                   0,
++                                   w_source_ptr,
++                                   w_source_len,
++                                   NULL,
++                                   0,
++                                   NULL,
++                                   NULL);
+ 
+-  target_len = 0;
+-  for (; w_source_len; w_source_len--, w_source_ptr++) {
+-    code_point = fs__get_surrogate_value(w_source_ptr, w_source_len);
+-    /* Can be invalid UTF-8 but must be valid WTF-8. */
+-    assert(code_point >= 0);
+-    if (code_point < 0x80)
+-      target_len += 1;
+-    else if (code_point < 0x800)
+-      target_len += 2;
+-    else if (code_point < 0x10000)
+-      target_len += 3;
+-    else {
+-      target_len += 4;
+-      w_source_ptr++;
+-      w_source_len--;
+-    }
++  if (target_len == 0) {
++    return -1;
+   }
+-  return target_len;
+-}
+ 
+-
+-static int fs__wide_to_wtf8(WCHAR* w_source_ptr,
+-                            size_t w_source_len,
+-                            char** target_ptr,
+-                            size_t* target_len_ptr) {
+-  size_t target_len;
+-  char* target;
+-  int32_t code_point;
+-
+-  /* If *target_ptr is provided, then *target_len_ptr must be its length
+-   * (excluding space for null), otherwise we will compute the target_len_ptr
+-   * length and may return a new allocation in *target_ptr if target_ptr is
+-   * provided. */
+-  if (target_ptr == NULL || *target_ptr == NULL) {
+-    target_len = fs__get_length_wide(w_source_ptr, w_source_len);
+-    if (target_len_ptr != NULL)
+-      *target_len_ptr = target_len;
+-  } else {
+-    target_len = *target_len_ptr;
++  if (target_len_ptr != NULL) {
++    *target_len_ptr = target_len;
+   }
+ 
+-  if (target_ptr == NULL)
++  if (target_ptr == NULL) {
+     return 0;
+-
+-  if (*target_ptr == NULL) {
+-    target = uv__malloc(target_len + 1);
+-    if (target == NULL) {
+-      SetLastError(ERROR_OUTOFMEMORY);
+-      return -1;
+-    }
+-    *target_ptr = target;
+-  } else {
+-    target = *target_ptr;
+-  }
+-
+-  for (; w_source_len; w_source_len--, w_source_ptr++) {
+-    code_point = fs__get_surrogate_value(w_source_ptr, w_source_len);
+-    /* Can be invalid UTF-8 but must be valid WTF-8. */
+-    assert(code_point >= 0);
+-
+-    if (code_point < 0x80) {
+-      *target++ = code_point;
+-    } else if (code_point < 0x800) {
+-      *target++ = 0xC0 | (code_point >> 6);
+-      *target++ = 0x80 | (code_point & 0x3F);
+-    } else if (code_point < 0x10000) {
+-      *target++ = 0xE0 | (code_point >> 12);
+-      *target++ = 0x80 | ((code_point >> 6) & 0x3F);
+-      *target++ = 0x80 | (code_point & 0x3F);
+-    } else {
+-      *target++ = 0xF0 | (code_point >> 18);
+-      *target++ = 0x80 | ((code_point >> 12) & 0x3F);
+-      *target++ = 0x80 | ((code_point >> 6) & 0x3F);
+-      *target++ = 0x80 | (code_point & 0x3F);
+-      w_source_ptr++;
+-      w_source_len--;
+-    }
+   }
+-  assert((size_t) (target - *target_ptr) == target_len);
+ 
+-  *target++ = '\0';
++  target = uv__malloc(target_len + 1);
++  if (target == NULL) {
++    SetLastError(ERROR_OUTOFMEMORY);
++    return -1;
++  }
+ 
++  r = WideCharToMultiByte(CP_UTF8,
++                          0,
++                          w_source_ptr,
++                          w_source_len,
++                          target,
++                          target_len,
++                          NULL,
++                          NULL);
++  assert(r == target_len);
++  target[target_len] = '\0';
++  *target_ptr = target;
+   return 0;
+ }
+ 
+ 
+-INLINE static int fs__readlink_handle(HANDLE handle,
+-                                      char** target_ptr,
+-                                      size_t* target_len_ptr) {
++INLINE static int fs__readlink_handle(HANDLE handle, char** target_ptr,
++    uint64_t* target_len_ptr) {
+   char buffer[MAXIMUM_REPARSE_DATA_BUFFER_SIZE];
+   REPARSE_DATA_BUFFER* reparse_data = (REPARSE_DATA_BUFFER*) buffer;
+   WCHAR* w_target;
+@@ -549,8 +439,7 @@ INLINE static int fs__readlink_handle(HANDLE handle,
+     return -1;
+   }
+ 
+-  assert(target_ptr == NULL || *target_ptr == NULL);
+-  return fs__wide_to_wtf8(w_target, w_target_len, target_ptr, target_len_ptr);
++  return fs__wide_to_utf8(w_target, w_target_len, target_ptr, target_len_ptr);
+ }
+ 
+ 
+@@ -1540,8 +1429,7 @@ void fs__scandir(uv_fs_t* req) {
+       uv__dirent_t* dirent;
+ 
+       size_t wchar_len;
+-      size_t wtf8_len;
+-      char* wtf8;
++      size_t utf8_len;
+ 
+       /* Obtain a pointer to the current directory entry. */
+       position += next_entry_offset;
+@@ -1568,8 +1456,11 @@ void fs__scandir(uv_fs_t* req) {
+           info->FileName[1] == L'.')
+         continue;
+ 
+-      /* Compute the space required to store the filename as WTF-8. */
+-      wtf8_len = fs__get_length_wide(&info->FileName[0], wchar_len);
++      /* Compute the space required to store the filename as UTF-8. */
++      utf8_len = WideCharToMultiByte(
++          CP_UTF8, 0, &info->FileName[0], wchar_len, NULL, 0, NULL, NULL);
++      if (utf8_len == 0)
++        goto win32_error;
+ 
+       /* Resize the dirent array if needed. */
+       if (dirents_used >= dirents_size) {
+@@ -1589,17 +1480,26 @@ void fs__scandir(uv_fs_t* req) {
+        * includes room for the first character of the filename, but `utf8_len`
+        * doesn't count the NULL terminator at this point.
+        */
+-      dirent = uv__malloc(sizeof *dirent + wtf8_len);
++      dirent = uv__malloc(sizeof *dirent + utf8_len);
+       if (dirent == NULL)
+         goto out_of_memory_error;
+ 
+       dirents[dirents_used++] = dirent;
+ 
+       /* Convert file name to UTF-8. */
+-      wtf8 = &dirent->d_name[0];
+-      if (fs__wide_to_wtf8(&info->FileName[0], wchar_len, &wtf8, &wtf8_len) == -1)
++      if (WideCharToMultiByte(CP_UTF8,
++                              0,
++                              &info->FileName[0],
++                              wchar_len,
++                              &dirent->d_name[0],
++                              utf8_len,
++                              NULL,
++                              NULL) == 0)
+         goto win32_error;
+ 
++      /* Add a null terminator to the filename. */
++      dirent->d_name[utf8_len] = '\0';
++
+       /* Fill out the type field. */
+       if (info->FileAttributes & FILE_ATTRIBUTE_DEVICE)
+         dirent->d_type = UV__DT_CHAR;
+@@ -1808,7 +1708,6 @@ void fs__closedir(uv_fs_t* req) {
+ 
+ INLINE static int fs__stat_handle(HANDLE handle, uv_stat_t* statbuf,
+     int do_lstat) {
+-  size_t target_length = 0;
+   FILE_FS_DEVICE_INFORMATION device_info;
+   FILE_ALL_INFORMATION file_info;
+   FILE_FS_VOLUME_INFORMATION volume_info;
+@@ -1904,10 +1803,9 @@ INLINE static int fs__stat_handle(HANDLE handle, uv_stat_t* statbuf,
+      * to be treated as a regular file. The higher level lstat function will
+      * detect this failure and retry without do_lstat if appropriate.
+      */
+-    if (fs__readlink_handle(handle, NULL, &target_length) != 0)
++    if (fs__readlink_handle(handle, NULL, &statbuf->st_size) != 0)
+       return -1;
+     statbuf->st_mode |= S_IFLNK;
+-    statbuf->st_size = target_length;
+   }
+ 
+   if (statbuf->st_mode == 0) {
+@@ -2763,7 +2661,6 @@ static void fs__readlink(uv_fs_t* req) {
+     return;
+   }
+ 
+-  assert(req->ptr == NULL);
+   if (fs__readlink_handle(handle, (char**) &req->ptr, NULL) != 0) {
+     DWORD error = GetLastError();
+     SET_REQ_WIN32_ERROR(req, error);
+@@ -2823,8 +2720,7 @@ static ssize_t fs__realpath_handle(HANDLE handle, char** realpath_ptr) {
+     return -1;
+   }
+ 
+-  assert(*realpath_ptr == NULL);
+-  r = fs__wide_to_wtf8(w_realpath_ptr, w_realpath_len, realpath_ptr, NULL);
++  r = fs__wide_to_utf8(w_realpath_ptr, w_realpath_len, realpath_ptr, NULL);
+   uv__free(w_realpath_buf);
+   return r;
+ }
+@@ -2844,7 +2740,6 @@ static void fs__realpath(uv_fs_t* req) {
+     return;
+   }
+ 
+-  assert(req->ptr == NULL);
+   if (fs__realpath_handle(handle, (char**) &req->ptr) == -1) {
+     CloseHandle(handle);
+     SET_REQ_WIN32_ERROR(req, GetLastError());
+diff --git a/deps/uv/src/win/handle-inl.h b/deps/uv/src/win/handle-inl.h
+index 4722e85790a..5c843c241ef 100644
+--- a/deps/uv/src/win/handle-inl.h
++++ b/deps/uv/src/win/handle-inl.h
+@@ -75,7 +75,7 @@
+ 
+ #define uv__handle_close(handle)                                        \
+   do {                                                                  \
+-    uv__queue_remove(&(handle)->handle_queue);                          \
++    QUEUE_REMOVE(&(handle)->handle_queue);                              \
+     uv__active_handle_rm((uv_handle_t*) (handle));                      \
+                                                                         \
+     (handle)->flags |= UV_HANDLE_CLOSED;                                \
+diff --git a/deps/uv/src/win/pipe.c b/deps/uv/src/win/pipe.c
+index f0cac382256..5e4276387ac 100644
+--- a/deps/uv/src/win/pipe.c
++++ b/deps/uv/src/win/pipe.c
+@@ -55,7 +55,7 @@ static const int pipe_prefix_len = sizeof(pipe_prefix) - 1;
+ typedef struct {
+   uv__ipc_socket_xfer_type_t xfer_type;
+   uv__ipc_socket_xfer_info_t xfer_info;
+-  struct uv__queue member;
++  QUEUE member;
+ } uv__ipc_xfer_queue_item_t;
+ 
+ /* IPC frame header flags. */
+@@ -111,7 +111,7 @@ int uv_pipe_init(uv_loop_t* loop, uv_pipe_t* handle, int ipc) {
+   handle->name = NULL;
+   handle->pipe.conn.ipc_remote_pid = 0;
+   handle->pipe.conn.ipc_data_frame.payload_remaining = 0;
+-  uv__queue_init(&handle->pipe.conn.ipc_xfer_queue);
++  QUEUE_INIT(&handle->pipe.conn.ipc_xfer_queue);
+   handle->pipe.conn.ipc_xfer_queue_length = 0;
+   handle->ipc = ipc;
+   handle->pipe.conn.non_overlapped_writes_tail = NULL;
+@@ -637,13 +637,13 @@ void uv__pipe_endgame(uv_loop_t* loop, uv_pipe_t* handle) {
+ 
+   if (handle->flags & UV_HANDLE_CONNECTION) {
+     /* Free pending sockets */
+-    while (!uv__queue_empty(&handle->pipe.conn.ipc_xfer_queue)) {
+-      struct uv__queue* q;
++    while (!QUEUE_EMPTY(&handle->pipe.conn.ipc_xfer_queue)) {
++      QUEUE* q;
+       SOCKET socket;
+ 
+-      q = uv__queue_head(&handle->pipe.conn.ipc_xfer_queue);
+-      uv__queue_remove(q);
+-      xfer_queue_item = uv__queue_data(q, uv__ipc_xfer_queue_item_t, member);
++      q = QUEUE_HEAD(&handle->pipe.conn.ipc_xfer_queue);
++      QUEUE_REMOVE(q);
++      xfer_queue_item = QUEUE_DATA(q, uv__ipc_xfer_queue_item_t, member);
+ 
+       /* Materialize socket and close it */
+       socket = WSASocketW(FROM_PROTOCOL_INFO,
+@@ -1124,20 +1124,20 @@ int uv__pipe_accept(uv_pipe_t* server, uv_stream_t* client) {
+   uv_loop_t* loop = server->loop;
+   uv_pipe_t* pipe_client;
+   uv_pipe_accept_t* req;
+-  struct uv__queue* q;
++  QUEUE* q;
+   uv__ipc_xfer_queue_item_t* item;
+   int err;
+ 
+   if (server->ipc) {
+-    if (uv__queue_empty(&server->pipe.conn.ipc_xfer_queue)) {
++    if (QUEUE_EMPTY(&server->pipe.conn.ipc_xfer_queue)) {
+       /* No valid pending sockets. */
+       return WSAEWOULDBLOCK;
+     }
+ 
+-    q = uv__queue_head(&server->pipe.conn.ipc_xfer_queue);
+-    uv__queue_remove(q);
++    q = QUEUE_HEAD(&server->pipe.conn.ipc_xfer_queue);
++    QUEUE_REMOVE(q);
+     server->pipe.conn.ipc_xfer_queue_length--;
+-    item = uv__queue_data(q, uv__ipc_xfer_queue_item_t, member);
++    item = QUEUE_DATA(q, uv__ipc_xfer_queue_item_t, member);
+ 
+     err = uv__tcp_xfer_import(
+         (uv_tcp_t*) client, item->xfer_type, &item->xfer_info);
+@@ -1891,7 +1891,7 @@ static void uv__pipe_queue_ipc_xfer_info(
+   item->xfer_type = xfer_type;
+   item->xfer_info = *xfer_info;
+ 
+-  uv__queue_insert_tail(&handle->pipe.conn.ipc_xfer_queue, &item->member);
++  QUEUE_INSERT_TAIL(&handle->pipe.conn.ipc_xfer_queue, &item->member);
+   handle->pipe.conn.ipc_xfer_queue_length++;
+ }
+ 
+diff --git a/deps/uv/src/win/tcp.c b/deps/uv/src/win/tcp.c
+index 187f36e2a61..6b282e0b501 100644
+--- a/deps/uv/src/win/tcp.c
++++ b/deps/uv/src/win/tcp.c
+@@ -175,14 +175,14 @@ int uv_tcp_init_ex(uv_loop_t* loop, uv_tcp_t* handle, unsigned int flags) {
+     sock = socket(domain, SOCK_STREAM, 0);
+     if (sock == INVALID_SOCKET) {
+       err = WSAGetLastError();
+-      uv__queue_remove(&handle->handle_queue);
++      QUEUE_REMOVE(&handle->handle_queue);
+       return uv_translate_sys_error(err);
+     }
+ 
+     err = uv__tcp_set_socket(handle->loop, handle, sock, domain, 0);
+     if (err) {
+       closesocket(sock);
+-      uv__queue_remove(&handle->handle_queue);
++      QUEUE_REMOVE(&handle->handle_queue);
+       return uv_translate_sys_error(err);
+     }
+ 
+diff --git a/deps/uv/src/win/udp.c b/deps/uv/src/win/udp.c
+index eab53842d4f..8a982d1907d 100644
+--- a/deps/uv/src/win/udp.c
++++ b/deps/uv/src/win/udp.c
+@@ -146,14 +146,14 @@ int uv__udp_init_ex(uv_loop_t* loop,
+     sock = socket(domain, SOCK_DGRAM, 0);
+     if (sock == INVALID_SOCKET) {
+       err = WSAGetLastError();
+-      uv__queue_remove(&handle->handle_queue);
++      QUEUE_REMOVE(&handle->handle_queue);
+       return uv_translate_sys_error(err);
+     }
+ 
+     err = uv__udp_set_socket(handle->loop, handle, sock, domain);
+     if (err) {
+       closesocket(sock);
+-      uv__queue_remove(&handle->handle_queue);
++      QUEUE_REMOVE(&handle->handle_queue);
+       return uv_translate_sys_error(err);
+     }
+   }
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0002-Revert-io_uring-changes-from-libuv-1.45.0.patch b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0002-Revert-io_uring-changes-from-libuv-1.45.0.patch
new file mode 100644
index 0000000..77cd53b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0002-Revert-io_uring-changes-from-libuv-1.45.0.patch
@@ -0,0 +1,1803 @@
+From 6d2ef4c8ba2304ee4941a6719b3ad9bd63e415a9 Mon Sep 17 00:00:00 2001
+From: Martin Jansa <martin.jansa@gmail.com>
+Date: Wed, 18 Oct 2023 21:09:44 +0200
+Subject: [PATCH] Revert io_uring changes from libuv-1.45.0
+
+This reverts https://github.com/libuv/libuv/pull/3952/commits/26c79a942b92573a1388c0ee8a6ad4397f009318
+
+Included in nodejs-20.3.0 with the libuv upgrade to 1.45.0 in:
+https://github.com/nodejs/node/commit/bfcb3d1d9a876f399013d326bd65804f9eda77e4
+
+Reverted libuv commits:
+Revert "linux: fix WRITEV with lots of bufs using io_uring (#4004)"
+This reverts commit ef6a9a624df0a00687037474025a3608472f722a.
+Revert "linux: work around EOWNERDEAD io_uring kernel bug (#4002)"
+This reverts commit d23a20f62cc50b9fd7694992263f1d296d8f5cb4.
+Revert "unix: handle CQ overflow in iou ring (#3991)"
+This reverts commit 30fc896cc1b5822e9f1eb462587fe4b368a6215c.
+Revert "unix: constrained_memory should return UINT64_MAX (#3753)"
+This reverts commit 6ad347fae4520f39520d34bd7c7f5ddafab13a69.
+Revert "linux: use io_uring to batch epoll_ctl calls (#3979)"
+This reverts commit 6e073ef5daf93b708a654008959b823b58029e88.
+Revert "linux: fix logic bug in sqe ring space check (#3980)"
+This reverts commit f27208224084fc972b9d2802486d97ef31b51a39.
+Revert "src: fix events/events_waiting metrics counter (#3957)"
+This reverts commit e02642cf3b768b2c58a41f97fa38507e032ae415.
+Revert "linux: remove bug workaround for obsolete kernels (#3965)"
+This reverts commit 1c935a34454167b23f8eef7f0f63d7119f0de747.
+Revert "linux: add IORING_OP_CLOSE support (#3964)"
+This reverts commit dfae365f844e127621128a76bce7165e3f99a8d9.
+Revert "linux: add IORING_OP_OPENAT support (#3963)"
+This reverts commit 5ca5e475bb1711e65323ef1594a31818e5a1a9eb.
+Revert "linux: fix academic valgrind warning (#3960)"
+This reverts commit a7ff759ca1deacb2e0e6ae3c2d3dce91cc637dfe.
+Revert "linux: introduce io_uring support (#3952)"
+This reverts commit d2c31f429b87b476a7f1344d145dad4752a406d4.
+
+Dropped deps/uv/docs deps/uv/test changes as these dirs aren't included
+in nodejs tarballs.
+
+Signed-off-by: Martin Jansa <martin.jansa@gmail.com>
+---
+Upstream-Status: Inappropriate [OE specific]
+
+ deps/uv/docs/src/fs.rst               |   6 -
+ deps/uv/docs/src/misc.rst             |   5 +-
+ deps/uv/src/threadpool.c              |  21 -
+ deps/uv/src/unix/aix.c                |  11 +-
+ deps/uv/src/unix/fs.c                 |  57 +-
+ deps/uv/src/unix/internal.h           |  23 -
+ deps/uv/src/unix/kqueue.c             |  10 +-
+ deps/uv/src/unix/linux.c              | 998 +++-----------------------
+ deps/uv/src/unix/os390.c              |  11 +-
+ deps/uv/src/unix/posix-poll.c         |  11 +-
+ deps/uv/src/uv-common.h               |  28 -
+ deps/uv/src/win/core.c                |  20 +-
+ deps/uv/test/test-fs.c                |  33 -
+ deps/uv/test/test-list.h              |   4 -
+ deps/uv/test/test-metrics.c           | 151 ----
+ deps/uv/test/test-threadpool-cancel.c |  34 +-
+ 16 files changed, 138 insertions(+), 1285 deletions(-)
+
+diff --git a/deps/uv/src/threadpool.c b/deps/uv/src/threadpool.c
+index 51962bf0021..a3da53026f9 100644
+--- a/deps/uv/src/threadpool.c
++++ b/deps/uv/src/threadpool.c
+@@ -275,13 +275,9 @@ void uv__work_submit(uv_loop_t* loop,
+ }
+ 
+ 
+-/* TODO(bnoordhuis) teach libuv how to cancel file operations
+- * that go through io_uring instead of the thread pool.
+- */
+ static int uv__work_cancel(uv_loop_t* loop, uv_req_t* req, struct uv__work* w) {
+   int cancelled;
+ 
+-  uv_once(&once, init_once);  /* Ensure |mutex| is initialized. */
+   uv_mutex_lock(&mutex);
+   uv_mutex_lock(&w->loop->wq_mutex);
+ 
+@@ -311,15 +307,12 @@ void uv__work_done(uv_async_t* handle) {
+   QUEUE* q;
+   QUEUE wq;
+   int err;
+-  int nevents;
+ 
+   loop = container_of(handle, uv_loop_t, wq_async);
+   uv_mutex_lock(&loop->wq_mutex);
+   QUEUE_MOVE(&loop->wq, &wq);
+   uv_mutex_unlock(&loop->wq_mutex);
+ 
+-  nevents = 0;
+-
+   while (!QUEUE_EMPTY(&wq)) {
+     q = QUEUE_HEAD(&wq);
+     QUEUE_REMOVE(q);
+@@ -327,20 +320,6 @@ void uv__work_done(uv_async_t* handle) {
+     w = container_of(q, struct uv__work, wq);
+     err = (w->work == uv__cancelled) ? UV_ECANCELED : 0;
+     w->done(w, err);
+-    nevents++;
+-  }
+-
+-  /* This check accomplishes 2 things:
+-   * 1. Even if the queue was empty, the call to uv__work_done() should count
+-   *    as an event. Which will have been added by the event loop when
+-   *    calling this callback.
+-   * 2. Prevents accidental wrap around in case nevents == 0 events == 0.
+-   */
+-  if (nevents > 1) {
+-    /* Subtract 1 to counter the call to uv__work_done(). */
+-    uv__metrics_inc_events(loop, nevents - 1);
+-    if (uv__get_internal_fields(loop)->current_timeout == 0)
+-      uv__metrics_inc_events_waiting(loop, nevents - 1);
+   }
+ }
+ 
+diff --git a/deps/uv/src/unix/aix.c b/deps/uv/src/unix/aix.c
+index f1afbed49ec..b855282ebc8 100644
+--- a/deps/uv/src/unix/aix.c
++++ b/deps/uv/src/unix/aix.c
+@@ -131,7 +131,6 @@ int uv__io_check_fd(uv_loop_t* loop, int fd) {
+ 
+ 
+ void uv__io_poll(uv_loop_t* loop, int timeout) {
+-  uv__loop_internal_fields_t* lfields;
+   struct pollfd events[1024];
+   struct pollfd pqry;
+   struct pollfd* pe;
+@@ -155,8 +154,6 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+     return;
+   }
+ 
+-  lfields = uv__get_internal_fields(loop);
+-
+   while (!QUEUE_EMPTY(&loop->watcher_queue)) {
+     q = QUEUE_HEAD(&loop->watcher_queue);
+     QUEUE_REMOVE(q);
+@@ -220,7 +217,7 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+   base = loop->time;
+   count = 48; /* Benchmarks suggest this gives the best throughput. */
+ 
+-  if (lfields->flags & UV_METRICS_IDLE_TIME) {
++  if (uv__get_internal_fields(loop)->flags & UV_METRICS_IDLE_TIME) {
+     reset_timeout = 1;
+     user_timeout = timeout;
+     timeout = 0;
+@@ -235,12 +232,6 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+     if (timeout != 0)
+       uv__metrics_set_provider_entry_time(loop);
+ 
+-    /* Store the current timeout in a location that's globally accessible so
+-     * other locations like uv__work_done() can determine whether the queue
+-     * of events in the callback were waiting when poll was called.
+-     */
+-    lfields->current_timeout = timeout;
+-
+     nfds = pollset_poll(loop->backend_fd,
+                         events,
+                         ARRAY_SIZE(events),
+diff --git a/deps/uv/src/unix/fs.c b/deps/uv/src/unix/fs.c
+index 00d385c24b7..c696a8d5500 100644
+--- a/deps/uv/src/unix/fs.c
++++ b/deps/uv/src/unix/fs.c
+@@ -61,11 +61,10 @@
+ #endif
+ 
+ #if defined(__linux__)
+-# include <sys/sendfile.h>
+-# include <sys/utsname.h>
++# include "sys/utsname.h"
+ #endif
+ 
+-#if defined(__sun)
++#if defined(__linux__) || defined(__sun)
+ # include <sys/sendfile.h>
+ # include <sys/sysmacros.h>
+ #endif
+@@ -1554,7 +1553,26 @@ static int uv__fs_statx(int fd,
+     return UV_ENOSYS;
+   }
+ 
+-  uv__statx_to_stat(&statxbuf, buf);
++  buf->st_dev = makedev(statxbuf.stx_dev_major, statxbuf.stx_dev_minor);
++  buf->st_mode = statxbuf.stx_mode;
++  buf->st_nlink = statxbuf.stx_nlink;
++  buf->st_uid = statxbuf.stx_uid;
++  buf->st_gid = statxbuf.stx_gid;
++  buf->st_rdev = makedev(statxbuf.stx_rdev_major, statxbuf.stx_rdev_minor);
++  buf->st_ino = statxbuf.stx_ino;
++  buf->st_size = statxbuf.stx_size;
++  buf->st_blksize = statxbuf.stx_blksize;
++  buf->st_blocks = statxbuf.stx_blocks;
++  buf->st_atim.tv_sec = statxbuf.stx_atime.tv_sec;
++  buf->st_atim.tv_nsec = statxbuf.stx_atime.tv_nsec;
++  buf->st_mtim.tv_sec = statxbuf.stx_mtime.tv_sec;
++  buf->st_mtim.tv_nsec = statxbuf.stx_mtime.tv_nsec;
++  buf->st_ctim.tv_sec = statxbuf.stx_ctime.tv_sec;
++  buf->st_ctim.tv_nsec = statxbuf.stx_ctime.tv_nsec;
++  buf->st_birthtim.tv_sec = statxbuf.stx_btime.tv_sec;
++  buf->st_birthtim.tv_nsec = statxbuf.stx_btime.tv_nsec;
++  buf->st_flags = 0;
++  buf->st_gen = 0;
+ 
+   return 0;
+ #else
+@@ -1798,9 +1816,6 @@ int uv_fs_chown(uv_loop_t* loop,
+ int uv_fs_close(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) {
+   INIT(CLOSE);
+   req->file = file;
+-  if (cb != NULL)
+-    if (uv__iou_fs_close(loop, req))
+-      return 0;
+   POST;
+ }
+ 
+@@ -1848,9 +1863,6 @@ int uv_fs_lchown(uv_loop_t* loop,
+ int uv_fs_fdatasync(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) {
+   INIT(FDATASYNC);
+   req->file = file;
+-  if (cb != NULL)
+-    if (uv__iou_fs_fsync_or_fdatasync(loop, req, /* IORING_FSYNC_DATASYNC */ 1))
+-      return 0;
+   POST;
+ }
+ 
+@@ -1858,9 +1870,6 @@ int uv_fs_fdatasync(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) {
+ int uv_fs_fstat(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) {
+   INIT(FSTAT);
+   req->file = file;
+-  if (cb != NULL)
+-    if (uv__iou_fs_statx(loop, req, /* is_fstat */ 1, /* is_lstat */ 0))
+-      return 0;
+   POST;
+ }
+ 
+@@ -1868,9 +1877,6 @@ int uv_fs_fstat(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) {
+ int uv_fs_fsync(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) {
+   INIT(FSYNC);
+   req->file = file;
+-  if (cb != NULL)
+-    if (uv__iou_fs_fsync_or_fdatasync(loop, req, /* no flags */ 0))
+-      return 0;
+   POST;
+ }
+ 
+@@ -1917,9 +1923,6 @@ int uv_fs_lutime(uv_loop_t* loop,
+ int uv_fs_lstat(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) {
+   INIT(LSTAT);
+   PATH;
+-  if (cb != NULL)
+-    if (uv__iou_fs_statx(loop, req, /* is_fstat */ 0, /* is_lstat */ 1))
+-      return 0;
+   POST;
+ }
+ 
+@@ -1981,9 +1984,6 @@ int uv_fs_open(uv_loop_t* loop,
+   PATH;
+   req->flags = flags;
+   req->mode = mode;
+-  if (cb != NULL)
+-    if (uv__iou_fs_open(loop, req))
+-      return 0;
+   POST;
+ }
+ 
+@@ -2012,11 +2012,6 @@ int uv_fs_read(uv_loop_t* loop, uv_fs_t* req,
+   memcpy(req->bufs, bufs, nbufs * sizeof(*bufs));
+ 
+   req->off = off;
+-
+-  if (cb != NULL)
+-    if (uv__iou_fs_read_or_write(loop, req, /* is_read */ 1))
+-      return 0;
+-
+   POST;
+ }
+ 
+@@ -2124,9 +2119,6 @@ int uv_fs_sendfile(uv_loop_t* loop,
+ int uv_fs_stat(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) {
+   INIT(STAT);
+   PATH;
+-  if (cb != NULL)
+-    if (uv__iou_fs_statx(loop, req, /* is_fstat */ 0, /* is_lstat */ 0))
+-      return 0;
+   POST;
+ }
+ 
+@@ -2190,11 +2182,6 @@ int uv_fs_write(uv_loop_t* loop,
+   memcpy(req->bufs, bufs, nbufs * sizeof(*bufs));
+ 
+   req->off = off;
+-
+-  if (cb != NULL)
+-    if (uv__iou_fs_read_or_write(loop, req, /* is_read */ 0))
+-      return 0;
+-
+   POST;
+ }
+ 
+diff --git a/deps/uv/src/unix/internal.h b/deps/uv/src/unix/internal.h
+index 6c5822e6a0d..d439ae6dd3d 100644
+--- a/deps/uv/src/unix/internal.h
++++ b/deps/uv/src/unix/internal.h
+@@ -329,28 +329,6 @@ int uv__random_getentropy(void* buf, size_t buflen);
+ int uv__random_readpath(const char* path, void* buf, size_t buflen);
+ int uv__random_sysctl(void* buf, size_t buflen);
+ 
+-/* io_uring */
+-#ifdef __linux__
+-int uv__iou_fs_close(uv_loop_t* loop, uv_fs_t* req);
+-int uv__iou_fs_fsync_or_fdatasync(uv_loop_t* loop,
+-                                  uv_fs_t* req,
+-                                  uint32_t fsync_flags);
+-int uv__iou_fs_open(uv_loop_t* loop, uv_fs_t* req);
+-int uv__iou_fs_read_or_write(uv_loop_t* loop,
+-                             uv_fs_t* req,
+-                             int is_read);
+-int uv__iou_fs_statx(uv_loop_t* loop,
+-                     uv_fs_t* req,
+-                     int is_fstat,
+-                     int is_lstat);
+-#else
+-#define uv__iou_fs_close(loop, req) 0
+-#define uv__iou_fs_fsync_or_fdatasync(loop, req, fsync_flags) 0
+-#define uv__iou_fs_open(loop, req) 0
+-#define uv__iou_fs_read_or_write(loop, req, is_read) 0
+-#define uv__iou_fs_statx(loop, req, is_fstat, is_lstat) 0
+-#endif
+-
+ #if defined(__APPLE__)
+ int uv___stream_fd(const uv_stream_t* handle);
+ #define uv__stream_fd(handle) (uv___stream_fd((const uv_stream_t*) (handle)))
+@@ -427,7 +405,6 @@ int uv__statx(int dirfd,
+               int flags,
+               unsigned int mask,
+               struct uv__statx* statxbuf);
+-void uv__statx_to_stat(const struct uv__statx* statxbuf, uv_stat_t* buf);
+ ssize_t uv__getrandom(void* buf, size_t buflen, unsigned flags);
+ #endif
+ 
+diff --git a/deps/uv/src/unix/kqueue.c b/deps/uv/src/unix/kqueue.c
+index 82916d65933..deb486bae7a 100644
+--- a/deps/uv/src/unix/kqueue.c
++++ b/deps/uv/src/unix/kqueue.c
+@@ -127,7 +127,6 @@ static void uv__kqueue_delete(int kqfd, const struct kevent *ev) {
+ 
+ 
+ void uv__io_poll(uv_loop_t* loop, int timeout) {
+-  uv__loop_internal_fields_t* lfields;
+   struct kevent events[1024];
+   struct kevent* ev;
+   struct timespec spec;
+@@ -156,7 +155,6 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+     return;
+   }
+ 
+-  lfields = uv__get_internal_fields(loop);
+   nevents = 0;
+ 
+   while (!QUEUE_EMPTY(&loop->watcher_queue)) {
+@@ -224,7 +222,7 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+   base = loop->time;
+   count = 48; /* Benchmarks suggest this gives the best throughput. */
+ 
+-  if (lfields->flags & UV_METRICS_IDLE_TIME) {
++  if (uv__get_internal_fields(loop)->flags & UV_METRICS_IDLE_TIME) {
+     reset_timeout = 1;
+     user_timeout = timeout;
+     timeout = 0;
+@@ -247,12 +245,6 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+     if (pset != NULL)
+       pthread_sigmask(SIG_BLOCK, pset, NULL);
+ 
+-    /* Store the current timeout in a location that's globally accessible so
+-     * other locations like uv__work_done() can determine whether the queue
+-     * of events in the callback were waiting when poll was called.
+-     */
+-    lfields->current_timeout = timeout;
+-
+     nfds = kevent(loop->backend_fd,
+                   events,
+                   nevents,
+diff --git a/deps/uv/src/unix/linux.c b/deps/uv/src/unix/linux.c
+index 5f84ad0eea3..343e37f2527 100644
+--- a/deps/uv/src/unix/linux.c
++++ b/deps/uv/src/unix/linux.c
+@@ -27,8 +27,6 @@
+ #include "internal.h"
+ 
+ #include <inttypes.h>
+-#include <stdatomic.h>
+-#include <stddef.h>  /* offsetof */
+ #include <stdint.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+@@ -40,29 +38,15 @@
+ #include <net/if.h>
+ #include <sys/epoll.h>
+ #include <sys/inotify.h>
+-#include <sys/mman.h>
+ #include <sys/param.h>
+ #include <sys/prctl.h>
+ #include <sys/stat.h>
+ #include <sys/syscall.h>
+ #include <sys/sysinfo.h>
+-#include <sys/sysmacros.h>
+ #include <sys/types.h>
+ #include <time.h>
+ #include <unistd.h>
+ 
+-#ifndef __NR_io_uring_setup
+-# define __NR_io_uring_setup 425
+-#endif
+-
+-#ifndef __NR_io_uring_enter
+-# define __NR_io_uring_enter 426
+-#endif
+-
+-#ifndef __NR_io_uring_register
+-# define __NR_io_uring_register 427
+-#endif
+-
+ #ifndef __NR_copy_file_range
+ # if defined(__x86_64__)
+ #  define __NR_copy_file_range 326
+@@ -132,129 +116,6 @@
+ # include <netpacket/packet.h>
+ #endif /* HAVE_IFADDRS_H */
+ 
+-enum {
+-  UV__IORING_SETUP_SQPOLL = 2u,
+-};
+-
+-enum {
+-  UV__IORING_FEAT_SINGLE_MMAP = 1u,
+-  UV__IORING_FEAT_NODROP = 2u,
+-  UV__IORING_FEAT_RSRC_TAGS = 1024u,  /* linux v5.13 */
+-};
+-
+-enum {
+-  UV__IORING_OP_READV = 1,
+-  UV__IORING_OP_WRITEV = 2,
+-  UV__IORING_OP_FSYNC = 3,
+-  UV__IORING_OP_OPENAT = 18,
+-  UV__IORING_OP_CLOSE = 19,
+-  UV__IORING_OP_STATX = 21,
+-  UV__IORING_OP_EPOLL_CTL = 29,
+-};
+-
+-enum {
+-  UV__IORING_ENTER_GETEVENTS = 1u,
+-  UV__IORING_ENTER_SQ_WAKEUP = 2u,
+-};
+-
+-enum {
+-  UV__IORING_SQ_NEED_WAKEUP = 1u,
+-  UV__IORING_SQ_CQ_OVERFLOW = 2u,
+-};
+-
+-struct uv__io_cqring_offsets {
+-  uint32_t head;
+-  uint32_t tail;
+-  uint32_t ring_mask;
+-  uint32_t ring_entries;
+-  uint32_t overflow;
+-  uint32_t cqes;
+-  uint64_t reserved0;
+-  uint64_t reserved1;
+-};
+-
+-STATIC_ASSERT(40 == sizeof(struct uv__io_cqring_offsets));
+-
+-struct uv__io_sqring_offsets {
+-  uint32_t head;
+-  uint32_t tail;
+-  uint32_t ring_mask;
+-  uint32_t ring_entries;
+-  uint32_t flags;
+-  uint32_t dropped;
+-  uint32_t array;
+-  uint32_t reserved0;
+-  uint64_t reserved1;
+-};
+-
+-STATIC_ASSERT(40 == sizeof(struct uv__io_sqring_offsets));
+-
+-struct uv__io_uring_cqe {
+-  uint64_t user_data;
+-  int32_t res;
+-  uint32_t flags;
+-};
+-
+-STATIC_ASSERT(16 == sizeof(struct uv__io_uring_cqe));
+-
+-struct uv__io_uring_sqe {
+-  uint8_t opcode;
+-  uint8_t flags;
+-  uint16_t ioprio;
+-  int32_t fd;
+-  union {
+-    uint64_t off;
+-    uint64_t addr2;
+-  };
+-  union {
+-    uint64_t addr;
+-  };
+-  uint32_t len;
+-  union {
+-    uint32_t rw_flags;
+-    uint32_t fsync_flags;
+-    uint32_t open_flags;
+-    uint32_t statx_flags;
+-  };
+-  uint64_t user_data;
+-  union {
+-    uint16_t buf_index;
+-    uint64_t pad[3];
+-  };
+-};
+-
+-STATIC_ASSERT(64 == sizeof(struct uv__io_uring_sqe));
+-STATIC_ASSERT(0 == offsetof(struct uv__io_uring_sqe, opcode));
+-STATIC_ASSERT(1 == offsetof(struct uv__io_uring_sqe, flags));
+-STATIC_ASSERT(2 == offsetof(struct uv__io_uring_sqe, ioprio));
+-STATIC_ASSERT(4 == offsetof(struct uv__io_uring_sqe, fd));
+-STATIC_ASSERT(8 == offsetof(struct uv__io_uring_sqe, off));
+-STATIC_ASSERT(16 == offsetof(struct uv__io_uring_sqe, addr));
+-STATIC_ASSERT(24 == offsetof(struct uv__io_uring_sqe, len));
+-STATIC_ASSERT(28 == offsetof(struct uv__io_uring_sqe, rw_flags));
+-STATIC_ASSERT(32 == offsetof(struct uv__io_uring_sqe, user_data));
+-STATIC_ASSERT(40 == offsetof(struct uv__io_uring_sqe, buf_index));
+-
+-struct uv__io_uring_params {
+-  uint32_t sq_entries;
+-  uint32_t cq_entries;
+-  uint32_t flags;
+-  uint32_t sq_thread_cpu;
+-  uint32_t sq_thread_idle;
+-  uint32_t features;
+-  uint32_t reserved[4];
+-  struct uv__io_sqring_offsets sq_off;  /* 40 bytes */
+-  struct uv__io_cqring_offsets cq_off;  /* 40 bytes */
+-};
+-
+-STATIC_ASSERT(40 + 40 + 40 == sizeof(struct uv__io_uring_params));
+-STATIC_ASSERT(40 == offsetof(struct uv__io_uring_params, sq_off));
+-STATIC_ASSERT(80 == offsetof(struct uv__io_uring_params, cq_off));
+-
+-STATIC_ASSERT(EPOLL_CTL_ADD < 4);
+-STATIC_ASSERT(EPOLL_CTL_DEL < 4);
+-STATIC_ASSERT(EPOLL_CTL_MOD < 4);
+-
+ struct watcher_list {
+   RB_ENTRY(watcher_list) entry;
+   QUEUE watchers;
+@@ -276,17 +137,6 @@ static int compare_watchers(const struct watcher_list* a,
+ static void maybe_free_watcher_list(struct watcher_list* w,
+                                     uv_loop_t* loop);
+ 
+-static void uv__epoll_ctl_flush(int epollfd,
+-                                struct uv__iou* ctl,
+-                                struct epoll_event (*events)[256]);
+-
+-static void uv__epoll_ctl_prep(int epollfd,
+-                               struct uv__iou* ctl,
+-                               struct epoll_event (*events)[256],
+-                               int op,
+-                               int fd,
+-                               struct epoll_event* e);
+-
+ RB_GENERATE_STATIC(watcher_root, watcher_list, entry, compare_watchers)
+ 
+ 
+@@ -356,187 +206,7 @@ ssize_t uv__getrandom(void* buf, size_t buflen, unsigned flags) {
+ }
+ 
+ 
+-int uv__io_uring_setup(int entries, struct uv__io_uring_params* params) {
+-  return syscall(__NR_io_uring_setup, entries, params);
+-}
+-
+-
+-int uv__io_uring_enter(int fd,
+-                       unsigned to_submit,
+-                       unsigned min_complete,
+-                       unsigned flags) {
+-  /* io_uring_enter used to take a sigset_t but it's unused
+-   * in newer kernels unless IORING_ENTER_EXT_ARG is set,
+-   * in which case it takes a struct io_uring_getevents_arg.
+-   */
+-  return syscall(__NR_io_uring_enter,
+-                 fd,
+-                 to_submit,
+-                 min_complete,
+-                 flags,
+-                 NULL,
+-                 0L);
+-}
+-
+-
+-int uv__io_uring_register(int fd, unsigned opcode, void* arg, unsigned nargs) {
+-  return syscall(__NR_io_uring_register, fd, opcode, arg, nargs);
+-}
+-
+-
+-static int uv__use_io_uring(void) {
+-  /* Ternary: unknown=0, yes=1, no=-1 */
+-  static _Atomic int use_io_uring;
+-  char* val;
+-  int use;
+-
+-  use = atomic_load_explicit(&use_io_uring, memory_order_relaxed);
+-
+-  if (use == 0) {
+-    val = getenv("UV_USE_IO_URING");
+-    use = val == NULL || atoi(val) ? 1 : -1;
+-    atomic_store_explicit(&use_io_uring, use, memory_order_relaxed);
+-  }
+-
+-  return use > 0;
+-}
+-
+-
+-static void uv__iou_init(int epollfd,
+-                         struct uv__iou* iou,
+-                         uint32_t entries,
+-                         uint32_t flags) {
+-  struct uv__io_uring_params params;
+-  struct epoll_event e;
+-  size_t cqlen;
+-  size_t sqlen;
+-  size_t maxlen;
+-  size_t sqelen;
+-  uint32_t i;
+-  char* sq;
+-  char* sqe;
+-  int ringfd;
+-
+-  sq = MAP_FAILED;
+-  sqe = MAP_FAILED;
+-
+-  if (!uv__use_io_uring())
+-    return;
+-
+-  /* SQPOLL required CAP_SYS_NICE until linux v5.12 relaxed that requirement.
+-   * Mostly academic because we check for a v5.13 kernel afterwards anyway.
+-   */
+-  memset(&params, 0, sizeof(params));
+-  params.flags = flags;
+-
+-  if (flags & UV__IORING_SETUP_SQPOLL)
+-    params.sq_thread_idle = 10;  /* milliseconds */
+-
+-  /* Kernel returns a file descriptor with O_CLOEXEC flag set. */
+-  ringfd = uv__io_uring_setup(entries, &params);
+-  if (ringfd == -1)
+-    return;
+-
+-  /* IORING_FEAT_RSRC_TAGS is used to detect linux v5.13 but what we're
+-   * actually detecting is whether IORING_OP_STATX works with SQPOLL.
+-   */
+-  if (!(params.features & UV__IORING_FEAT_RSRC_TAGS))
+-    goto fail;
+-
+-  /* Implied by IORING_FEAT_RSRC_TAGS but checked explicitly anyway. */
+-  if (!(params.features & UV__IORING_FEAT_SINGLE_MMAP))
+-    goto fail;
+-
+-  /* Implied by IORING_FEAT_RSRC_TAGS but checked explicitly anyway. */
+-  if (!(params.features & UV__IORING_FEAT_NODROP))
+-    goto fail;
+-
+-  sqlen = params.sq_off.array + params.sq_entries * sizeof(uint32_t);
+-  cqlen =
+-      params.cq_off.cqes + params.cq_entries * sizeof(struct uv__io_uring_cqe);
+-  maxlen = sqlen < cqlen ? cqlen : sqlen;
+-  sqelen = params.sq_entries * sizeof(struct uv__io_uring_sqe);
+-
+-  sq = mmap(0,
+-            maxlen,
+-            PROT_READ | PROT_WRITE,
+-            MAP_SHARED | MAP_POPULATE,
+-            ringfd,
+-            0);  /* IORING_OFF_SQ_RING */
+-
+-  sqe = mmap(0,
+-             sqelen,
+-             PROT_READ | PROT_WRITE,
+-             MAP_SHARED | MAP_POPULATE,
+-             ringfd,
+-             0x10000000ull);  /* IORING_OFF_SQES */
+-
+-  if (sq == MAP_FAILED || sqe == MAP_FAILED)
+-    goto fail;
+-
+-  if (flags & UV__IORING_SETUP_SQPOLL) {
+-    /* Only interested in completion events. To get notified when
+-     * the kernel pulls items from the submission ring, add POLLOUT.
+-     */
+-    memset(&e, 0, sizeof(e));
+-    e.events = POLLIN;
+-    e.data.fd = ringfd;
+-
+-    if (epoll_ctl(epollfd, EPOLL_CTL_ADD, ringfd, &e))
+-      goto fail;
+-  }
+-
+-  iou->sqhead = (uint32_t*) (sq + params.sq_off.head);
+-  iou->sqtail = (uint32_t*) (sq + params.sq_off.tail);
+-  iou->sqmask = *(uint32_t*) (sq + params.sq_off.ring_mask);
+-  iou->sqarray = (uint32_t*) (sq + params.sq_off.array);
+-  iou->sqflags = (uint32_t*) (sq + params.sq_off.flags);
+-  iou->cqhead = (uint32_t*) (sq + params.cq_off.head);
+-  iou->cqtail = (uint32_t*) (sq + params.cq_off.tail);
+-  iou->cqmask = *(uint32_t*) (sq + params.cq_off.ring_mask);
+-  iou->sq = sq;
+-  iou->cqe = sq + params.cq_off.cqes;
+-  iou->sqe = sqe;
+-  iou->sqlen = sqlen;
+-  iou->cqlen = cqlen;
+-  iou->maxlen = maxlen;
+-  iou->sqelen = sqelen;
+-  iou->ringfd = ringfd;
+-  iou->in_flight = 0;
+-
+-  for (i = 0; i <= iou->sqmask; i++)
+-    iou->sqarray[i] = i;  /* Slot -> sqe identity mapping. */
+-
+-  return;
+-
+-fail:
+-  if (sq != MAP_FAILED)
+-    munmap(sq, maxlen);
+-
+-  if (sqe != MAP_FAILED)
+-    munmap(sqe, sqelen);
+-
+-  uv__close(ringfd);
+-}
+-
+-
+-static void uv__iou_delete(struct uv__iou* iou) {
+-  if (iou->ringfd != -1) {
+-    munmap(iou->sq, iou->maxlen);
+-    munmap(iou->sqe, iou->sqelen);
+-    uv__close(iou->ringfd);
+-    iou->ringfd = -1;
+-  }
+-}
+-
+-
+ int uv__platform_loop_init(uv_loop_t* loop) {
+-  uv__loop_internal_fields_t* lfields;
+-
+-  lfields = uv__get_internal_fields(loop);
+-  lfields->ctl.ringfd = -1;
+-  lfields->iou.ringfd = -1;
+-
+   loop->inotify_watchers = NULL;
+   loop->inotify_fd = -1;
+   loop->backend_fd = epoll_create1(O_CLOEXEC);
+@@ -544,9 +214,6 @@ int uv__platform_loop_init(uv_loop_t* loop) {
+   if (loop->backend_fd == -1)
+     return UV__ERR(errno);
+ 
+-  uv__iou_init(loop->backend_fd, &lfields->iou, 64, UV__IORING_SETUP_SQPOLL);
+-  uv__iou_init(loop->backend_fd, &lfields->ctl, 256, 0);
+-
+   return 0;
+ }
+ 
+@@ -559,8 +226,6 @@ int uv__io_fork(uv_loop_t* loop) {
+ 
+   uv__close(loop->backend_fd);
+   loop->backend_fd = -1;
+-
+-  /* TODO(bnoordhuis) Loses items from the submission and completion rings. */
+   uv__platform_loop_delete(loop);
+ 
+   err = uv__platform_loop_init(loop);
+@@ -572,62 +237,42 @@ int uv__io_fork(uv_loop_t* loop) {
+ 
+ 
+ void uv__platform_loop_delete(uv_loop_t* loop) {
+-  uv__loop_internal_fields_t* lfields;
+-
+-  lfields = uv__get_internal_fields(loop);
+-  uv__iou_delete(&lfields->ctl);
+-  uv__iou_delete(&lfields->iou);
+-
+-  if (loop->inotify_fd != -1) {
+-    uv__io_stop(loop, &loop->inotify_read_watcher, POLLIN);
+-    uv__close(loop->inotify_fd);
+-    loop->inotify_fd = -1;
+-  }
++  if (loop->inotify_fd == -1) return;
++  uv__io_stop(loop, &loop->inotify_read_watcher, POLLIN);
++  uv__close(loop->inotify_fd);
++  loop->inotify_fd = -1;
+ }
+ 
+ 
+-struct uv__invalidate {
+-  struct epoll_event (*prep)[256];
+-  struct epoll_event* events;
+-  int nfds;
+-};
+-
+-
+ void uv__platform_invalidate_fd(uv_loop_t* loop, int fd) {
+-  uv__loop_internal_fields_t* lfields;
+-  struct uv__invalidate* inv;
++  struct epoll_event* events;
+   struct epoll_event dummy;
+-  int i;
++  uintptr_t i;
++  uintptr_t nfds;
+ 
+-  lfields = uv__get_internal_fields(loop);
+-  inv = lfields->inv;
++  assert(loop->watchers != NULL);
++  assert(fd >= 0);
+ 
+-  /* Invalidate events with same file descriptor */
+-  if (inv != NULL)
+-    for (i = 0; i < inv->nfds; i++)
+-      if (inv->events[i].data.fd == fd)
+-        inv->events[i].data.fd = -1;
++  events = (struct epoll_event*) loop->watchers[loop->nwatchers];
++  nfds = (uintptr_t) loop->watchers[loop->nwatchers + 1];
++  if (events != NULL)
++    /* Invalidate events with same file descriptor */
++    for (i = 0; i < nfds; i++)
++      if (events[i].data.fd == fd)
++        events[i].data.fd = -1;
+ 
+   /* Remove the file descriptor from the epoll.
+    * This avoids a problem where the same file description remains open
+    * in another process, causing repeated junk epoll events.
+    *
+    * We pass in a dummy epoll_event, to work around a bug in old kernels.
+-   *
+-   * Work around a bug in kernels 3.10 to 3.19 where passing a struct that
+-   * has the EPOLLWAKEUP flag set generates spurious audit syslog warnings.
+    */
+-  memset(&dummy, 0, sizeof(dummy));
+-
+-  if (inv == NULL) {
++  if (loop->backend_fd >= 0) {
++    /* Work around a bug in kernels 3.10 to 3.19 where passing a struct that
++     * has the EPOLLWAKEUP flag set generates spurious audit syslog warnings.
++     */
++    memset(&dummy, 0, sizeof(dummy));
+     epoll_ctl(loop->backend_fd, EPOLL_CTL_DEL, fd, &dummy);
+-  } else {
+-    uv__epoll_ctl_prep(loop->backend_fd,
+-                       &lfields->ctl,
+-                       inv->prep,
+-                       EPOLL_CTL_DEL,
+-                       fd,
+-                       &dummy);
+   }
+ }
+ 
+@@ -653,454 +298,27 @@ int uv__io_check_fd(uv_loop_t* loop, int fd) {
+ }
+ 
+ 
+-/* Caller must initialize SQE and call uv__iou_submit(). */
+-static struct uv__io_uring_sqe* uv__iou_get_sqe(struct uv__iou* iou,
+-                                                uv_loop_t* loop,
+-                                                uv_fs_t* req) {
+-  struct uv__io_uring_sqe* sqe;
+-  uint32_t head;
+-  uint32_t tail;
+-  uint32_t mask;
+-  uint32_t slot;
+-
+-  if (iou->ringfd == -1)
+-    return NULL;
+-
+-  head = atomic_load_explicit((_Atomic uint32_t*) iou->sqhead,
+-                              memory_order_acquire);
+-  tail = *iou->sqtail;
+-  mask = iou->sqmask;
+-
+-  if ((head & mask) == ((tail + 1) & mask))
+-    return NULL;  /* No room in ring buffer. TODO(bnoordhuis) maybe flush it? */
+-
+-  slot = tail & mask;
+-  sqe = iou->sqe;
+-  sqe = &sqe[slot];
+-  memset(sqe, 0, sizeof(*sqe));
+-  sqe->user_data = (uintptr_t) req;
+-
+-  /* Pacify uv_cancel(). */
+-  req->work_req.loop = loop;
+-  req->work_req.work = NULL;
+-  req->work_req.done = NULL;
+-  QUEUE_INIT(&req->work_req.wq);
+-
+-  uv__req_register(loop, req);
+-  iou->in_flight++;
+-
+-  return sqe;
+-}
+-
+-
+-static void uv__iou_submit(struct uv__iou* iou) {
+-  uint32_t flags;
+-
+-  atomic_store_explicit((_Atomic uint32_t*) iou->sqtail,
+-                        *iou->sqtail + 1,
+-                        memory_order_release);
+-
+-  flags = atomic_load_explicit((_Atomic uint32_t*) iou->sqflags,
+-                               memory_order_acquire);
+-
+-  if (flags & UV__IORING_SQ_NEED_WAKEUP)
+-    if (uv__io_uring_enter(iou->ringfd, 0, 0, UV__IORING_ENTER_SQ_WAKEUP))
+-      if (errno != EOWNERDEAD)  /* Kernel bug. Harmless, ignore. */
+-        perror("libuv: io_uring_enter(wakeup)");  /* Can't happen. */
+-}
+-
+-
+-int uv__iou_fs_close(uv_loop_t* loop, uv_fs_t* req) {
+-  struct uv__io_uring_sqe* sqe;
+-  struct uv__iou* iou;
+-
+-  iou = &uv__get_internal_fields(loop)->iou;
+-
+-  sqe = uv__iou_get_sqe(iou, loop, req);
+-  if (sqe == NULL)
+-    return 0;
+-
+-  sqe->fd = req->file;
+-  sqe->opcode = UV__IORING_OP_CLOSE;
+-
+-  uv__iou_submit(iou);
+-
+-  return 1;
+-}
+-
+-
+-int uv__iou_fs_fsync_or_fdatasync(uv_loop_t* loop,
+-                                  uv_fs_t* req,
+-                                  uint32_t fsync_flags) {
+-  struct uv__io_uring_sqe* sqe;
+-  struct uv__iou* iou;
+-
+-  iou = &uv__get_internal_fields(loop)->iou;
+-
+-  sqe = uv__iou_get_sqe(iou, loop, req);
+-  if (sqe == NULL)
+-    return 0;
+-
+-  /* Little known fact: setting seq->off and seq->len turns
+-   * it into an asynchronous sync_file_range() operation.
+-   */
+-  sqe->fd = req->file;
+-  sqe->fsync_flags = fsync_flags;
+-  sqe->opcode = UV__IORING_OP_FSYNC;
+-
+-  uv__iou_submit(iou);
+-
+-  return 1;
+-}
+-
+-
+-int uv__iou_fs_open(uv_loop_t* loop, uv_fs_t* req) {
+-  struct uv__io_uring_sqe* sqe;
+-  struct uv__iou* iou;
+-
+-  iou = &uv__get_internal_fields(loop)->iou;
+-
+-  sqe = uv__iou_get_sqe(iou, loop, req);
+-  if (sqe == NULL)
+-    return 0;
+-
+-  sqe->addr = (uintptr_t) req->path;
+-  sqe->fd = AT_FDCWD;
+-  sqe->len = req->mode;
+-  sqe->opcode = UV__IORING_OP_OPENAT;
+-  sqe->open_flags = req->flags | O_CLOEXEC;
+-
+-  uv__iou_submit(iou);
+-
+-  return 1;
+-}
+-
+-
+-int uv__iou_fs_read_or_write(uv_loop_t* loop,
+-                             uv_fs_t* req,
+-                             int is_read) {
+-  struct uv__io_uring_sqe* sqe;
+-  struct uv__iou* iou;
+-
+-  /* For the moment, if iovcnt is greater than IOV_MAX, fallback to the
+-   * threadpool. In the future we might take advantage of IOSQE_IO_LINK. */
+-  if (req->nbufs > IOV_MAX)
+-    return 0;
+-
+-  iou = &uv__get_internal_fields(loop)->iou;
+-
+-  sqe = uv__iou_get_sqe(iou, loop, req);
+-  if (sqe == NULL)
+-    return 0;
+-
+-  sqe->addr = (uintptr_t) req->bufs;
+-  sqe->fd = req->file;
+-  sqe->len = req->nbufs;
+-  sqe->off = req->off < 0 ? -1 : req->off;
+-  sqe->opcode = is_read ? UV__IORING_OP_READV : UV__IORING_OP_WRITEV;
+-
+-  uv__iou_submit(iou);
+-
+-  return 1;
+-}
+-
+-
+-int uv__iou_fs_statx(uv_loop_t* loop,
+-                     uv_fs_t* req,
+-                     int is_fstat,
+-                     int is_lstat) {
+-  struct uv__io_uring_sqe* sqe;
+-  struct uv__statx* statxbuf;
+-  struct uv__iou* iou;
+-
+-  statxbuf = uv__malloc(sizeof(*statxbuf));
+-  if (statxbuf == NULL)
+-    return 0;
+-
+-  iou = &uv__get_internal_fields(loop)->iou;
+-
+-  sqe = uv__iou_get_sqe(iou, loop, req);
+-  if (sqe == NULL) {
+-    uv__free(statxbuf);
+-    return 0;
+-  }
+-
+-  req->ptr = statxbuf;
+-
+-  sqe->addr = (uintptr_t) req->path;
+-  sqe->addr2 = (uintptr_t) statxbuf;
+-  sqe->fd = AT_FDCWD;
+-  sqe->len = 0xFFF; /* STATX_BASIC_STATS + STATX_BTIME */
+-  sqe->opcode = UV__IORING_OP_STATX;
+-
+-  if (is_fstat) {
+-    sqe->addr = (uintptr_t) "";
+-    sqe->fd = req->file;
+-    sqe->statx_flags |= 0x1000; /* AT_EMPTY_PATH */
+-  }
+-
+-  if (is_lstat)
+-    sqe->statx_flags |= AT_SYMLINK_NOFOLLOW;
+-
+-  uv__iou_submit(iou);
+-
+-  return 1;
+-}
+-
+-
+-void uv__statx_to_stat(const struct uv__statx* statxbuf, uv_stat_t* buf) {
+-  buf->st_dev = makedev(statxbuf->stx_dev_major, statxbuf->stx_dev_minor);
+-  buf->st_mode = statxbuf->stx_mode;
+-  buf->st_nlink = statxbuf->stx_nlink;
+-  buf->st_uid = statxbuf->stx_uid;
+-  buf->st_gid = statxbuf->stx_gid;
+-  buf->st_rdev = makedev(statxbuf->stx_rdev_major, statxbuf->stx_rdev_minor);
+-  buf->st_ino = statxbuf->stx_ino;
+-  buf->st_size = statxbuf->stx_size;
+-  buf->st_blksize = statxbuf->stx_blksize;
+-  buf->st_blocks = statxbuf->stx_blocks;
+-  buf->st_atim.tv_sec = statxbuf->stx_atime.tv_sec;
+-  buf->st_atim.tv_nsec = statxbuf->stx_atime.tv_nsec;
+-  buf->st_mtim.tv_sec = statxbuf->stx_mtime.tv_sec;
+-  buf->st_mtim.tv_nsec = statxbuf->stx_mtime.tv_nsec;
+-  buf->st_ctim.tv_sec = statxbuf->stx_ctime.tv_sec;
+-  buf->st_ctim.tv_nsec = statxbuf->stx_ctime.tv_nsec;
+-  buf->st_birthtim.tv_sec = statxbuf->stx_btime.tv_sec;
+-  buf->st_birthtim.tv_nsec = statxbuf->stx_btime.tv_nsec;
+-  buf->st_flags = 0;
+-  buf->st_gen = 0;
+-}
+-
+-
+-static void uv__iou_fs_statx_post(uv_fs_t* req) {
+-  struct uv__statx* statxbuf;
+-  uv_stat_t* buf;
+-
+-  buf = &req->statbuf;
+-  statxbuf = req->ptr;
+-  req->ptr = NULL;
+-
+-  if (req->result == 0) {
+-    uv__msan_unpoison(statxbuf, sizeof(*statxbuf));
+-    uv__statx_to_stat(statxbuf, buf);
+-    req->ptr = buf;
+-  }
+-
+-  uv__free(statxbuf);
+-}
+-
+-
+-static void uv__poll_io_uring(uv_loop_t* loop, struct uv__iou* iou) {
+-  struct uv__io_uring_cqe* cqe;
+-  struct uv__io_uring_cqe* e;
+-  uv_fs_t* req;
+-  uint32_t head;
+-  uint32_t tail;
+-  uint32_t mask;
+-  uint32_t i;
+-  uint32_t flags;
+-  int nevents;
+-  int rc;
+-
+-  head = *iou->cqhead;
+-  tail = atomic_load_explicit((_Atomic uint32_t*) iou->cqtail,
+-                              memory_order_acquire);
+-  mask = iou->cqmask;
+-  cqe = iou->cqe;
+-  nevents = 0;
+-
+-  for (i = head; i != tail; i++) {
+-    e = &cqe[i & mask];
+-
+-    req = (uv_fs_t*) (uintptr_t) e->user_data;
+-    assert(req->type == UV_FS);
+-
+-    uv__req_unregister(loop, req);
+-    iou->in_flight--;
+-
+-    /* io_uring stores error codes as negative numbers, same as libuv. */
+-    req->result = e->res;
+-
+-    switch (req->fs_type) {
+-      case UV_FS_FSTAT:
+-      case UV_FS_LSTAT:
+-      case UV_FS_STAT:
+-        uv__iou_fs_statx_post(req);
+-        break;
+-      default:  /* Squelch -Wswitch warnings. */
+-        break;
+-    }
+-
+-    uv__metrics_update_idle_time(loop);
+-    req->cb(req);
+-    nevents++;
+-  }
+-
+-  atomic_store_explicit((_Atomic uint32_t*) iou->cqhead,
+-                        tail,
+-                        memory_order_release);
+-
+-  /* Check whether CQE's overflowed, if so enter the kernel to make them
+-   * available. Don't grab them immediately but in the next loop iteration to
+-   * avoid loop starvation. */
+-  flags = atomic_load_explicit((_Atomic uint32_t*) iou->sqflags,
+-                               memory_order_acquire);
+-
+-  if (flags & UV__IORING_SQ_CQ_OVERFLOW) {
+-    do
+-      rc = uv__io_uring_enter(iou->ringfd, 0, 0, UV__IORING_ENTER_GETEVENTS);
+-    while (rc == -1 && errno == EINTR);
+-
+-    if (rc < 0)
+-      perror("libuv: io_uring_enter(getevents)");  /* Can't happen. */
+-  }
+-
+-  uv__metrics_inc_events(loop, nevents);
+-  if (uv__get_internal_fields(loop)->current_timeout == 0)
+-    uv__metrics_inc_events_waiting(loop, nevents);
+-}
+-
+-
+-static void uv__epoll_ctl_prep(int epollfd,
+-                               struct uv__iou* ctl,
+-                               struct epoll_event (*events)[256],
+-                               int op,
+-                               int fd,
+-                               struct epoll_event* e) {
+-  struct uv__io_uring_sqe* sqe;
+-  struct epoll_event* pe;
+-  uint32_t mask;
+-  uint32_t slot;
+-
+-  if (ctl->ringfd == -1) {
+-    if (!epoll_ctl(epollfd, op, fd, e))
+-      return;
+-
+-    if (op == EPOLL_CTL_DEL)
+-      return;  /* Ignore errors, may be racing with another thread. */
+-
+-    if (op != EPOLL_CTL_ADD)
+-      abort();
+-
+-    if (errno != EEXIST)
+-      abort();
+-
+-    /* File descriptor that's been watched before, update event mask. */
+-    if (!epoll_ctl(epollfd, EPOLL_CTL_MOD, fd, e))
+-      return;
+-
+-    abort();
+-  } else {
+-    mask = ctl->sqmask;
+-    slot = (*ctl->sqtail)++ & mask;
+-
+-    pe = &(*events)[slot];
+-    *pe = *e;
+-
+-    sqe = ctl->sqe;
+-    sqe = &sqe[slot];
+-
+-    memset(sqe, 0, sizeof(*sqe));
+-    sqe->addr = (uintptr_t) pe;
+-    sqe->fd = epollfd;
+-    sqe->len = op;
+-    sqe->off = fd;
+-    sqe->opcode = UV__IORING_OP_EPOLL_CTL;
+-    sqe->user_data = op | slot << 2 | (int64_t) fd << 32;
+-
+-    if ((*ctl->sqhead & mask) == (*ctl->sqtail & mask))
+-      uv__epoll_ctl_flush(epollfd, ctl, events);
+-  }
+-}
+-
+-
+-static void uv__epoll_ctl_flush(int epollfd,
+-                                struct uv__iou* ctl,
+-                                struct epoll_event (*events)[256]) {
+-  struct epoll_event oldevents[256];
+-  struct uv__io_uring_cqe* cqe;
+-  uint32_t oldslot;
+-  uint32_t slot;
+-  uint32_t n;
+-  int fd;
+-  int op;
+-  int rc;
+-
+-  STATIC_ASSERT(sizeof(oldevents) == sizeof(*events));
+-  assert(ctl->ringfd != -1);
+-  assert(*ctl->sqhead != *ctl->sqtail);
+-
+-  n = *ctl->sqtail - *ctl->sqhead;
+-  do
+-    rc = uv__io_uring_enter(ctl->ringfd, n, n, UV__IORING_ENTER_GETEVENTS);
+-  while (rc == -1 && errno == EINTR);
+-
+-  if (rc < 0)
+-    perror("libuv: io_uring_enter(getevents)");  /* Can't happen. */
+-
+-  if (rc != (int) n)
+-    abort();
+-
+-  assert(*ctl->sqhead == *ctl->sqtail);
+-
+-  memcpy(oldevents, *events, sizeof(*events));
+-
+-  /* Failed submissions are either EPOLL_CTL_DEL commands for file descriptors
+-   * that have been closed, or EPOLL_CTL_ADD commands for file descriptors
+-   * that we are already watching. Ignore the former and retry the latter
+-   * with EPOLL_CTL_MOD.
+-   */
+-  while (*ctl->cqhead != *ctl->cqtail) {
+-    slot = (*ctl->cqhead)++ & ctl->cqmask;
+-
+-    cqe = ctl->cqe;
+-    cqe = &cqe[slot];
+-
+-    if (cqe->res == 0)
+-      continue;
+-
+-    fd = cqe->user_data >> 32;
+-    op = 3 & cqe->user_data;
+-    oldslot = 255 & (cqe->user_data >> 2);
+-
+-    if (op == EPOLL_CTL_DEL)
+-      continue;
+-
+-    if (op != EPOLL_CTL_ADD)
+-      abort();
+-
+-    if (cqe->res != -EEXIST)
+-      abort();
+-
+-    uv__epoll_ctl_prep(epollfd,
+-                       ctl,
+-                       events,
+-                       EPOLL_CTL_MOD,
+-                       fd,
+-                       &oldevents[oldslot]);
+-  }
+-}
+-
+-
+ void uv__io_poll(uv_loop_t* loop, int timeout) {
+-  uv__loop_internal_fields_t* lfields;
++  /* A bug in kernels < 2.6.37 makes timeouts larger than ~30 minutes
++   * effectively infinite on 32 bits architectures.  To avoid blocking
++   * indefinitely, we cap the timeout and poll again if necessary.
++   *
++   * Note that "30 minutes" is a simplification because it depends on
++   * the value of CONFIG_HZ.  The magic constant assumes CONFIG_HZ=1200,
++   * that being the largest value I have seen in the wild (and only once.)
++   */
++  static const int max_safe_timeout = 1789569;
+   struct epoll_event events[1024];
+-  struct epoll_event prep[256];
+-  struct uv__invalidate inv;
+   struct epoll_event* pe;
+   struct epoll_event e;
+-  struct uv__iou* ctl;
+-  struct uv__iou* iou;
+   int real_timeout;
+   QUEUE* q;
+   uv__io_t* w;
+   sigset_t* sigmask;
+   sigset_t sigset;
+   uint64_t base;
+-  int have_iou_events;
+   int have_signals;
+   int nevents;
+-  int epollfd;
+   int count;
+   int nfds;
+   int fd;
+@@ -1109,9 +327,47 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+   int user_timeout;
+   int reset_timeout;
+ 
+-  lfields = uv__get_internal_fields(loop);
+-  ctl = &lfields->ctl;
+-  iou = &lfields->iou;
++  if (loop->nfds == 0) {
++    assert(QUEUE_EMPTY(&loop->watcher_queue));
++    return;
++  }
++
++  memset(&e, 0, sizeof(e));
++
++  while (!QUEUE_EMPTY(&loop->watcher_queue)) {
++    q = QUEUE_HEAD(&loop->watcher_queue);
++    QUEUE_REMOVE(q);
++    QUEUE_INIT(q);
++
++    w = QUEUE_DATA(q, uv__io_t, watcher_queue);
++    assert(w->pevents != 0);
++    assert(w->fd >= 0);
++    assert(w->fd < (int) loop->nwatchers);
++
++    e.events = w->pevents;
++    e.data.fd = w->fd;
++
++    if (w->events == 0)
++      op = EPOLL_CTL_ADD;
++    else
++      op = EPOLL_CTL_MOD;
++
++    /* XXX Future optimization: do EPOLL_CTL_MOD lazily if we stop watching
++     * events, skip the syscall and squelch the events after epoll_wait().
++     */
++    if (epoll_ctl(loop->backend_fd, op, w->fd, &e)) {
++      if (errno != EEXIST)
++        abort();
++
++      assert(op == EPOLL_CTL_ADD);
++
++      /* We've reactivated a file descriptor that's been watched before. */
++      if (epoll_ctl(loop->backend_fd, EPOLL_CTL_MOD, w->fd, &e))
++        abort();
++    }
++
++    w->events = w->pevents;
++  }
+ 
+   sigmask = NULL;
+   if (loop->flags & UV_LOOP_BLOCK_SIGPROF) {
+@@ -1125,7 +381,7 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+   count = 48; /* Benchmarks suggest this gives the best throughput. */
+   real_timeout = timeout;
+ 
+-  if (lfields->flags & UV_METRICS_IDLE_TIME) {
++  if (uv__get_internal_fields(loop)->flags & UV_METRICS_IDLE_TIME) {
+     reset_timeout = 1;
+     user_timeout = timeout;
+     timeout = 0;
+@@ -1134,56 +390,24 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+     user_timeout = 0;
+   }
+ 
+-  epollfd = loop->backend_fd;
+-
+-  memset(&e, 0, sizeof(e));
+-
+-  while (!QUEUE_EMPTY(&loop->watcher_queue)) {
+-    q = QUEUE_HEAD(&loop->watcher_queue);
+-    w = QUEUE_DATA(q, uv__io_t, watcher_queue);
+-    QUEUE_REMOVE(q);
+-    QUEUE_INIT(q);
+-
+-    op = EPOLL_CTL_MOD;
+-    if (w->events == 0)
+-      op = EPOLL_CTL_ADD;
+-
+-    w->events = w->pevents;
+-    e.events = w->pevents;
+-    e.data.fd = w->fd;
+-
+-    uv__epoll_ctl_prep(epollfd, ctl, &prep, op, w->fd, &e);
+-  }
+-
+-  inv.events = events;
+-  inv.prep = &prep;
+-  inv.nfds = -1;
+-
+   for (;;) {
+-    if (loop->nfds == 0)
+-      if (iou->in_flight == 0)
+-        break;
+-
+-    /* All event mask mutations should be visible to the kernel before
+-     * we enter epoll_pwait().
+-     */
+-    if (ctl->ringfd != -1)
+-      while (*ctl->sqhead != *ctl->sqtail)
+-        uv__epoll_ctl_flush(epollfd, ctl, &prep);
+-
+     /* Only need to set the provider_entry_time if timeout != 0. The function
+      * will return early if the loop isn't configured with UV_METRICS_IDLE_TIME.
+      */
+     if (timeout != 0)
+       uv__metrics_set_provider_entry_time(loop);
+ 
+-    /* Store the current timeout in a location that's globally accessible so
+-     * other locations like uv__work_done() can determine whether the queue
+-     * of events in the callback were waiting when poll was called.
++    /* See the comment for max_safe_timeout for an explanation of why
++     * this is necessary.  Executive summary: kernel bug workaround.
+      */
+-    lfields->current_timeout = timeout;
++    if (sizeof(int32_t) == sizeof(long) && timeout >= max_safe_timeout)
++      timeout = max_safe_timeout;
+ 
+-    nfds = epoll_pwait(epollfd, events, ARRAY_SIZE(events), timeout, sigmask);
++    nfds = epoll_pwait(loop->backend_fd,
++                       events,
++                       ARRAY_SIZE(events),
++                       timeout,
++                       sigmask);
+ 
+     /* Update loop->time unconditionally. It's tempting to skip the update when
+      * timeout == 0 (i.e. non-blocking poll) but there is no guarantee that the
+@@ -1203,7 +427,7 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+         continue;
+ 
+       if (timeout == 0)
+-        break;
++        return;
+ 
+       /* We may have been inside the system call for longer than |timeout|
+        * milliseconds so we need to update the timestamp to avoid drift.
+@@ -1224,18 +448,27 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+         continue;
+ 
+       if (timeout == 0)
+-        break;
++        return;
+ 
+       /* Interrupted by a signal. Update timeout and poll again. */
+       goto update_timeout;
+     }
+ 
+-    have_iou_events = 0;
+     have_signals = 0;
+     nevents = 0;
+ 
+-    inv.nfds = nfds;
+-    lfields->inv = &inv;
++    {
++      /* Squelch a -Waddress-of-packed-member warning with gcc >= 9. */
++      union {
++        struct epoll_event* events;
++        uv__io_t* watchers;
++      } x;
++
++      x.events = events;
++      assert(loop->watchers != NULL);
++      loop->watchers[loop->nwatchers] = x.watchers;
++      loop->watchers[loop->nwatchers + 1] = (void*) (uintptr_t) nfds;
++    }
+ 
+     for (i = 0; i < nfds; i++) {
+       pe = events + i;
+@@ -1245,12 +478,6 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+       if (fd == -1)
+         continue;
+ 
+-      if (fd == iou->ringfd) {
+-        uv__poll_io_uring(loop, iou);
+-        have_iou_events = 1;
+-        continue;
+-      }
+-
+       assert(fd >= 0);
+       assert((unsigned) fd < loop->nwatchers);
+ 
+@@ -1262,7 +489,7 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+          * Ignore all errors because we may be racing with another thread
+          * when the file descriptor is closed.
+          */
+-        uv__epoll_ctl_prep(epollfd, ctl, &prep, EPOLL_CTL_DEL, fd, pe);
++        epoll_ctl(loop->backend_fd, EPOLL_CTL_DEL, fd, pe);
+         continue;
+       }
+ 
+@@ -1319,13 +546,11 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+       loop->signal_io_watcher.cb(loop, &loop->signal_io_watcher, POLLIN);
+     }
+ 
+-    lfields->inv = NULL;
+-
+-    if (have_iou_events != 0)
+-      break;  /* Event loop should cycle now so don't poll again. */
++    loop->watchers[loop->nwatchers] = NULL;
++    loop->watchers[loop->nwatchers + 1] = NULL;
+ 
+     if (have_signals != 0)
+-      break;  /* Event loop should cycle now so don't poll again. */
++      return;  /* Event loop should cycle now so don't poll again. */
+ 
+     if (nevents != 0) {
+       if (nfds == ARRAY_SIZE(events) && --count != 0) {
+@@ -1333,11 +558,11 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+         timeout = 0;
+         continue;
+       }
+-      break;
++      return;
+     }
+ 
+     if (timeout == 0)
+-      break;
++      return;
+ 
+     if (timeout == -1)
+       continue;
+@@ -1347,14 +572,10 @@ update_timeout:
+ 
+     real_timeout -= (loop->time - base);
+     if (real_timeout <= 0)
+-      break;
++      return;
+ 
+     timeout = real_timeout;
+   }
+-
+-  if (ctl->ringfd != -1)
+-    while (*ctl->sqhead != *ctl->sqtail)
+-      uv__epoll_ctl_flush(epollfd, ctl, &prep);
+ }
+ 
+ uint64_t uv__hrtime(uv_clocktype_t type) {
+@@ -1867,7 +1088,7 @@ static uint64_t uv__read_uint64(const char* filename) {
+   if (0 == uv__slurp(filename, buf, sizeof(buf)))
+     if (1 != sscanf(buf, "%" PRIu64, &rc))
+       if (0 == strcmp(buf, "max\n"))
+-        rc = UINT64_MAX;
++        rc = ~0ull;
+ 
+   return rc;
+ }
+@@ -1903,7 +1124,6 @@ static void uv__get_cgroup1_memory_limits(char buf[static 1024], uint64_t* high,
+   char filename[4097];
+   char* p;
+   int n;
+-  uint64_t cgroup1_max;
+ 
+   /* Find out where the controller is mounted. */
+   p = uv__cgroup1_find_memory_controller(buf, &n);
+@@ -1920,22 +1140,12 @@ static void uv__get_cgroup1_memory_limits(char buf[static 1024], uint64_t* high,
+      * as indicated by uv__read_uint64 returning 0.
+      */
+      if (*high != 0 && *max != 0)
+-       goto update_limits;
++       return;
+   }
+ 
+   /* Fall back to the limits of the global memory controller. */
+   *high = uv__read_uint64("/sys/fs/cgroup/memory/memory.soft_limit_in_bytes");
+   *max = uv__read_uint64("/sys/fs/cgroup/memory/memory.limit_in_bytes");
+-
+-  /* uv__read_uint64 detects cgroup2's "max", so we need to separately detect
+-   * cgroup1's maximum value (which is derived from LONG_MAX and PAGE_SIZE).
+-   */
+-update_limits:
+-  cgroup1_max = LONG_MAX & ~(sysconf(_SC_PAGESIZE) - 1);
+-  if (*high == cgroup1_max)
+-    *high = UINT64_MAX;
+-  if (*max == cgroup1_max)
+-    *max = UINT64_MAX;
+ }
+ 
+ static void uv__get_cgroup2_memory_limits(char buf[static 1024], uint64_t* high,
+diff --git a/deps/uv/src/unix/os390.c b/deps/uv/src/unix/os390.c
+index a87c2d77faf..3954b2c2753 100644
+--- a/deps/uv/src/unix/os390.c
++++ b/deps/uv/src/unix/os390.c
+@@ -808,7 +808,6 @@ static int os390_message_queue_handler(uv__os390_epoll* ep) {
+ 
+ void uv__io_poll(uv_loop_t* loop, int timeout) {
+   static const int max_safe_timeout = 1789569;
+-  uv__loop_internal_fields_t* lfields;
+   struct epoll_event events[1024];
+   struct epoll_event* pe;
+   struct epoll_event e;
+@@ -831,8 +830,6 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+     return;
+   }
+ 
+-  lfields = uv__get_internal_fields(loop);
+-
+   while (!QUEUE_EMPTY(&loop->watcher_queue)) {
+     uv_stream_t* stream;
+ 
+@@ -880,7 +877,7 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+   int nevents = 0;
+   have_signals = 0;
+ 
+-  if (lfields->flags & UV_METRICS_IDLE_TIME) {
++  if (uv__get_internal_fields(loop)->flags & UV_METRICS_IDLE_TIME) {
+     reset_timeout = 1;
+     user_timeout = timeout;
+     timeout = 0;
+@@ -899,12 +896,6 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+     if (sizeof(int32_t) == sizeof(long) && timeout >= max_safe_timeout)
+       timeout = max_safe_timeout;
+ 
+-    /* Store the current timeout in a location that's globally accessible so
+-     * other locations like uv__work_done() can determine whether the queue
+-     * of events in the callback were waiting when poll was called.
+-     */
+-    lfields->current_timeout = timeout;
+-
+     nfds = epoll_wait(loop->ep, events,
+                       ARRAY_SIZE(events), timeout);
+ 
+diff --git a/deps/uv/src/unix/posix-poll.c b/deps/uv/src/unix/posix-poll.c
+index 7e7de86845d..711780ece8d 100644
+--- a/deps/uv/src/unix/posix-poll.c
++++ b/deps/uv/src/unix/posix-poll.c
+@@ -132,7 +132,6 @@ static void uv__pollfds_del(uv_loop_t* loop, int fd) {
+ 
+ 
+ void uv__io_poll(uv_loop_t* loop, int timeout) {
+-  uv__loop_internal_fields_t* lfields;
+   sigset_t* pset;
+   sigset_t set;
+   uint64_t time_base;
+@@ -153,8 +152,6 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+     return;
+   }
+ 
+-  lfields = uv__get_internal_fields(loop);
+-
+   /* Take queued watchers and add their fds to our poll fds array.  */
+   while (!QUEUE_EMPTY(&loop->watcher_queue)) {
+     q = QUEUE_HEAD(&loop->watcher_queue);
+@@ -182,7 +179,7 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+   assert(timeout >= -1);
+   time_base = loop->time;
+ 
+-  if (lfields->flags & UV_METRICS_IDLE_TIME) {
++  if (uv__get_internal_fields(loop)->flags & UV_METRICS_IDLE_TIME) {
+     reset_timeout = 1;
+     user_timeout = timeout;
+     timeout = 0;
+@@ -201,12 +198,6 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+     if (timeout != 0)
+       uv__metrics_set_provider_entry_time(loop);
+ 
+-    /* Store the current timeout in a location that's globally accessible so
+-     * other locations like uv__work_done() can determine whether the queue
+-     * of events in the callback were waiting when poll was called.
+-     */
+-    lfields->current_timeout = timeout;
+-
+     if (pset != NULL)
+       if (pthread_sigmask(SIG_BLOCK, pset, NULL))
+         abort();
+diff --git a/deps/uv/src/uv-common.h b/deps/uv/src/uv-common.h
+index decde5362c8..2720121addc 100644
+--- a/deps/uv/src/uv-common.h
++++ b/deps/uv/src/uv-common.h
+@@ -396,37 +396,9 @@ struct uv__loop_metrics_s {
+ void uv__metrics_update_idle_time(uv_loop_t* loop);
+ void uv__metrics_set_provider_entry_time(uv_loop_t* loop);
+ 
+-#ifdef __linux__
+-struct uv__iou {
+-  uint32_t* sqhead;
+-  uint32_t* sqtail;
+-  uint32_t* sqarray;
+-  uint32_t sqmask;
+-  uint32_t* sqflags;
+-  uint32_t* cqhead;
+-  uint32_t* cqtail;
+-  uint32_t cqmask;
+-  void* sq;   /* pointer to munmap() on event loop teardown */
+-  void* cqe;  /* pointer to array of struct uv__io_uring_cqe */
+-  void* sqe;  /* pointer to array of struct uv__io_uring_sqe */
+-  size_t sqlen;
+-  size_t cqlen;
+-  size_t maxlen;
+-  size_t sqelen;
+-  int ringfd;
+-  uint32_t in_flight;
+-};
+-#endif  /* __linux__ */
+-
+ struct uv__loop_internal_fields_s {
+   unsigned int flags;
+   uv__loop_metrics_t loop_metrics;
+-  int current_timeout;
+-#ifdef __linux__
+-  struct uv__iou ctl;
+-  struct uv__iou iou;
+-  void* inv;  /* used by uv__platform_invalidate_fd() */
+-#endif  /* __linux__ */
+ };
+ 
+ #endif /* UV_COMMON_H_ */
+diff --git a/deps/uv/src/win/core.c b/deps/uv/src/win/core.c
+index 9a3be58849a..e4041ec86a6 100644
+--- a/deps/uv/src/win/core.c
++++ b/deps/uv/src/win/core.c
+@@ -424,7 +424,6 @@ int uv_backend_timeout(const uv_loop_t* loop) {
+ 
+ 
+ static void uv__poll_wine(uv_loop_t* loop, DWORD timeout) {
+-  uv__loop_internal_fields_t* lfields;
+   DWORD bytes;
+   ULONG_PTR key;
+   OVERLAPPED* overlapped;
+@@ -434,10 +433,9 @@ static void uv__poll_wine(uv_loop_t* loop, DWORD timeout) {
+   uint64_t user_timeout;
+   int reset_timeout;
+ 
+-  lfields = uv__get_internal_fields(loop);
+   timeout_time = loop->time + timeout;
+ 
+-  if (lfields->flags & UV_METRICS_IDLE_TIME) {
++  if (uv__get_internal_fields(loop)->flags & UV_METRICS_IDLE_TIME) {
+     reset_timeout = 1;
+     user_timeout = timeout;
+     timeout = 0;
+@@ -452,12 +450,6 @@ static void uv__poll_wine(uv_loop_t* loop, DWORD timeout) {
+     if (timeout != 0)
+       uv__metrics_set_provider_entry_time(loop);
+ 
+-    /* Store the current timeout in a location that's globally accessible so
+-     * other locations like uv__work_done() can determine whether the queue
+-     * of events in the callback were waiting when poll was called.
+-     */
+-    lfields->current_timeout = timeout;
+-
+     GetQueuedCompletionStatus(loop->iocp,
+                               &bytes,
+                               &key,
+@@ -515,7 +507,6 @@ static void uv__poll_wine(uv_loop_t* loop, DWORD timeout) {
+ 
+ 
+ static void uv__poll(uv_loop_t* loop, DWORD timeout) {
+-  uv__loop_internal_fields_t* lfields;
+   BOOL success;
+   uv_req_t* req;
+   OVERLAPPED_ENTRY overlappeds[128];
+@@ -527,10 +518,9 @@ static void uv__poll(uv_loop_t* loop, DWORD timeout) {
+   uint64_t actual_timeout;
+   int reset_timeout;
+ 
+-  lfields = uv__get_internal_fields(loop);
+   timeout_time = loop->time + timeout;
+ 
+-  if (lfields->flags & UV_METRICS_IDLE_TIME) {
++  if (uv__get_internal_fields(loop)->flags & UV_METRICS_IDLE_TIME) {
+     reset_timeout = 1;
+     user_timeout = timeout;
+     timeout = 0;
+@@ -547,12 +537,6 @@ static void uv__poll(uv_loop_t* loop, DWORD timeout) {
+     if (timeout != 0)
+       uv__metrics_set_provider_entry_time(loop);
+ 
+-    /* Store the current timeout in a location that's globally accessible so
+-     * other locations like uv__work_done() can determine whether the queue
+-     * of events in the callback were waiting when poll was called.
+-     */
+-    lfields->current_timeout = timeout;
+-
+     success = pGetQueuedCompletionStatusEx(loop->iocp,
+                                            overlappeds,
+                                            ARRAY_SIZE(overlappeds),
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs_20.5.1.bb b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs_20.8.1.bb
similarity index 95%
rename from meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs_20.5.1.bb
rename to meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs_20.8.1.bb
index 6bb0f7f..65f4eb3 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs_20.5.1.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs_20.8.1.bb
@@ -1,7 +1,7 @@
 DESCRIPTION = "nodeJS Evented I/O for V8 JavaScript"
 HOMEPAGE = "http://nodejs.org"
 LICENSE = "MIT & ISC & BSD-2-Clause & BSD-3-Clause & Artistic-2.0 & Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=059ecf3a6f87111685e51b611b9563e5"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=162595a4a2f3453a0534e60b0afe4e7b"
 
 CVE_PRODUCT = "nodejs node.js"
 
@@ -24,6 +24,8 @@
            file://0004-v8-don-t-override-ARM-CFLAGS.patch \
            file://system-c-ares.patch \
            file://0001-liftoff-Correct-function-signatures.patch \
+           file://0001-Revert-io_uring-changes-from-libuv-1.46.0.patch \
+           file://0002-Revert-io_uring-changes-from-libuv-1.45.0.patch \
            file://run-ptest \
            "
 
@@ -36,7 +38,7 @@
 SRC_URI:append:toolchain-clang:powerpc64le = " \
            file://0001-ppc64-Do-not-use-mminimal-toc-with-clang.patch \
            "
-SRC_URI[sha256sum] = "439c71aa2f38c2861657bfa538e99191a571258066cbfd4548586049c8134190"
+SRC_URI[sha256sum] = "f799c66f6a6386bb8ac2c75a378f740c455e97f1fe964393dd39c9f9f6efbc70"
 
 S = "${WORKDIR}/node-v${PV}"
 
diff --git a/meta-openembedded/meta-oe/recipes-devtools/openocd/openocd_git.bb b/meta-openembedded/meta-oe/recipes-devtools/openocd/openocd_git.bb
index d30d9c3..19ef987 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/openocd/openocd_git.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/openocd/openocd_git.bb
@@ -7,7 +7,7 @@
 SRC_URI = " \
     git://repo.or.cz/openocd.git;protocol=http;name=openocd;branch=master \
     git://repo.or.cz/r/git2cl.git;protocol=http;destsuffix=tools/git2cl;name=git2cl;branch=master \
-    git://github.com/msteveb/jimtcl.git;protocol=http;destsuffix=git/jimtcl;name=jimtcl;branch=master \
+    git://github.com/msteveb/jimtcl.git;protocol=https;destsuffix=git/jimtcl;name=jimtcl;branch=master \
     git://repo.or.cz/r/libjaylink.git;protocol=http;destsuffix=git/src/jtag/drivers/libjaylink;name=libjaylink;branch=master \
 "
 
diff --git a/meta-openembedded/meta-oe/recipes-devtools/pahole/pahole_1.24.bb b/meta-openembedded/meta-oe/recipes-devtools/pahole/pahole_1.25.bb
similarity index 92%
rename from meta-openembedded/meta-oe/recipes-devtools/pahole/pahole_1.24.bb
rename to meta-openembedded/meta-oe/recipes-devtools/pahole/pahole_1.25.bb
index 2bb73c3..1334c85 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/pahole/pahole_1.24.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/pahole/pahole_1.25.bb
@@ -9,8 +9,7 @@
 PACKAGE_ARCH = "${MACHINE_ARCH}"
 COMPATIBLE_HOST = "(x86_64|i.86|aarch64).*-linux"
 
-PV .= "+1.25+git${SRCPV}"
-SRCREV = "a9498899109d3be14f17abbc322a8f55a1067bee"
+SRCREV = "81558a5a996005df0d607dd33f74ec5b7bdb619d"
 SRC_URI = "git://git.kernel.org/pub/scm/devel/pahole/pahole.git;branch=master \
            file://0002-Use-usr-bin-env-python3-instead-of-just-usr-bin-pyth.patch"
 
diff --git a/meta-openembedded/meta-oe/recipes-devtools/perl/exiftool_12.70.bb b/meta-openembedded/meta-oe/recipes-devtools/perl/exiftool_12.70.bb
new file mode 100644
index 0000000..58b5e51
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/perl/exiftool_12.70.bb
@@ -0,0 +1,22 @@
+SUMMARY = "Exiftool"
+DESCRIPTION = "ExifTool is a platform-independent Perl library plus a command-line application for reading, writing and editing meta information in a wide variety of files."
+HOMEPAGE = "https://exiftool.org/"
+SECTION = "libs"
+LICENSE = "GPL-3.0-only"
+LIC_FILES_CHKSUM = "file://perl-Image-ExifTool.spec;beginline=5;endline=5;md5=ffefffc98dab025cb49489bd4d88ee10"
+
+inherit cpan
+
+SRCREV = "bec8a1bff8a97ea8f2895e7e5c5e396e0e48d419"
+SRC_URI = "git://github.com/exiftool/exiftool;protocol=https;branch=master"
+
+S = "${WORKDIR}/git"
+
+RDEPENDS:${PN} = " \
+    perl \
+    perl-module-list-util \
+    perl-module-overload \
+    perl-module-file-glob \
+    perl-module-scalar-util \
+    perl-module-compress-zlib \
+"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/perl/ipc-run_20220807.0.bb b/meta-openembedded/meta-oe/recipes-devtools/perl/ipc-run_20231003.0.bb
similarity index 93%
rename from meta-openembedded/meta-oe/recipes-devtools/perl/ipc-run_20220807.0.bb
rename to meta-openembedded/meta-oe/recipes-devtools/perl/ipc-run_20231003.0.bb
index f597a8d..e28b6ea 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/perl/ipc-run_20220807.0.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/perl/ipc-run_20231003.0.bb
@@ -10,7 +10,7 @@
 DEPENDS = "perl"
 
 SRC_URI = "git://github.com/toddr/IPC-Run.git;branch=master;protocol=https"
-SRCREV = "44b1f2d2021615c88f2f6b1a6cbdd9aebaeb4ad1"
+SRCREV = "ad56c3b5f5a211d32bbb8ac29f180d707ee58c1b"
 
 S = "${WORKDIR}/git"
 
diff --git a/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf_4.23.4.bb b/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf_4.23.4.bb
index 1edc21c..7d37ee3 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf_4.23.4.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf_4.23.4.bb
@@ -101,6 +101,9 @@
 FILES:${PN}-compiler = "${bindir} ${libdir}/libprotoc${SOLIBS}"
 FILES:${PN}-lite = "${libdir}/libprotobuf-lite${SOLIBS}"
 
+# CMake requires protoc binary to exist in sysroot, even if it has wrong architecture.
+SYSROOT_DIRS += "${bindir}"
+
 RDEPENDS:${PN}-compiler = "${PN}"
 RDEPENDS:${PN}-dev += "${PN}-compiler"
 RDEPENDS:${PN}-ptest = "bash ${@bb.utils.contains('PACKAGECONFIG', 'python', 'python3-protobuf', '', d)}"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/sip/sip_6.7.11.bb b/meta-openembedded/meta-oe/recipes-devtools/sip/sip_6.7.12.bb
similarity index 83%
rename from meta-openembedded/meta-oe/recipes-devtools/sip/sip_6.7.11.bb
rename to meta-openembedded/meta-oe/recipes-devtools/sip/sip_6.7.12.bb
index 66ec979..00823cf 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/sip/sip_6.7.11.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/sip/sip_6.7.12.bb
@@ -11,6 +11,6 @@
 inherit pypi setuptools3 python3native
 
 PYPI_PACKAGE = "sip"
-SRC_URI[sha256sum] = "f0dc3287a0b172e5664931c87847750d47e4fdcda4fe362b514af8edd655b469"
+SRC_URI[sha256sum] = "08e66f742592eb818ac8fda4173e2ed64c9f2d40b70bee11db1c499127d98450"
 
 BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/uftrace/uftrace_0.13.1.bb b/meta-openembedded/meta-oe/recipes-devtools/uftrace/uftrace_0.14.bb
similarity index 95%
rename from meta-openembedded/meta-oe/recipes-devtools/uftrace/uftrace_0.13.1.bb
rename to meta-openembedded/meta-oe/recipes-devtools/uftrace/uftrace_0.14.bb
index 4e1edc6..415cfe1 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/uftrace/uftrace_0.13.1.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/uftrace/uftrace_0.14.bb
@@ -10,7 +10,7 @@
 
 inherit autotools
 
-SRCREV = "be3f46f7656bd9243b1835337b5350247b030b02"
+SRCREV = "04d73dc31cafef4161321e3c2443a5490ef93018"
 SRC_URI = "git://github.com/namhyung/${BPN};branch=master;protocol=https"
 S = "${WORKDIR}/git"
 
diff --git a/meta-openembedded/meta-oe/recipes-devtools/xmlrpc-c/xmlrpc-c_1.59.01.bb b/meta-openembedded/meta-oe/recipes-devtools/xmlrpc-c/xmlrpc-c_1.59.01.bb
index 278db6d..5d5152b 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/xmlrpc-c/xmlrpc-c_1.59.01.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/xmlrpc-c/xmlrpc-c_1.59.01.bb
@@ -41,7 +41,7 @@
 }
 
 do_install:append:class-target() {
-        sed -i 's,${WORKDIR},/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR},g' ${D}${bindir}/xmlrpc-c-config
+        sed -i 's,${WORKDIR},${TARGET_DBGSRC_DIR},g' ${D}${bindir}/xmlrpc-c-config
 }
 
 BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/yajl/yajl/CVE-2017-16516.patch b/meta-openembedded/meta-oe/recipes-devtools/yajl/yajl/CVE-2017-16516.patch
new file mode 100644
index 0000000..1241ff9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/yajl/yajl/CVE-2017-16516.patch
@@ -0,0 +1,37 @@
+From 0b5e73c4321de0ba1d495fdc0967054b2a77931c Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
+Date: Mon, 10 Jul 2023 13:36:10 +0100
+Subject: [PATCH] Fix for CVE-2017-16516
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Description: Fix for CVE-2017-16516
+ Potential buffer overread: A JSON file can cause denial of service.
+Origin: https://github.com/brianmario/yajl-ruby/commit/a8ca8f476655adaa187eedc60bdc770fff3c51ce
+
+CVE: CVE-2017-16516
+Upstream-Status: Submitted [https://github.com/lloyd/yajl/issues/248]
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+---
+ src/yajl_encode.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/yajl_encode.c b/src/yajl_encode.c
+index fd08258..0d97cc5 100644
+--- a/src/yajl_encode.c
++++ b/src/yajl_encode.c
+@@ -139,8 +139,8 @@ void yajl_string_decode(yajl_buf buf, const unsigned char * str,
+                     end+=3;
+                     /* check if this is a surrogate */
+                     if ((codepoint & 0xFC00) == 0xD800) {
+-                        end++;
+-                        if (str[end] == '\\' && str[end + 1] == 'u') {
++                        if (end + 2 < len && str[end + 1] == '\\' && str[end + 2] == 'u') {
++                            end++;
+                             unsigned int surrogate = 0;
+                             hexToDigit(&surrogate, str + end + 2);
+                             codepoint =
+-- 
+2.34.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/yajl/yajl/CVE-2022-24795.patch b/meta-openembedded/meta-oe/recipes-devtools/yajl/yajl/CVE-2022-24795.patch
new file mode 100644
index 0000000..0dc8590
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/yajl/yajl/CVE-2022-24795.patch
@@ -0,0 +1,59 @@
+From 17de4d15687aa30c49660dc4b792b1fb4d38b569 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com>
+Date: Thu, 7 Apr 2022 17:29:54 +0200
+Subject: [PATCH] Fix CVE-2022-24795
+
+There was an integer overflow in yajl_buf_ensure_available() leading
+to allocating less memory than requested. Then data were written past
+the allocated heap buffer in yajl_buf_append(), the only caller of
+yajl_buf_ensure_available(). Another result of the overflow was an
+infinite loop without a return from yajl_buf_ensure_available().
+
+yajl-ruby project, which bundles yajl, fixed it
+<https://github.com/brianmario/yajl-ruby/pull/211> by checking for the
+integer overflow, fortifying buffer allocations, and report the
+failures to a caller. But then the caller yajl_buf_append() skips
+a memory write if yajl_buf_ensure_available() failed leading to a data
+corruption.
+
+A yajl fork mainter recommended calling memory allocation callbacks with
+the large memory request and let them to handle it. But that has the
+problem that it's not possible pass the overely large size to the
+callbacks.
+
+This patch catches the integer overflow and terminates the process
+with abort().
+
+CVE: CVE-2022-24795
+Upstream-Status: Submitted [https://github.com/lloyd/yajl/issues/239]
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+---
+ src/yajl_buf.c | 12 +++++++++++-
+ 1 file changed, 11 insertions(+), 1 deletion(-)
+
+diff --git a/src/yajl_buf.c b/src/yajl_buf.c
+index 1aeafde..55c11ad 100644
+--- a/src/yajl_buf.c
++++ b/src/yajl_buf.c
+@@ -45,7 +45,17 @@ void yajl_buf_ensure_available(yajl_buf buf, size_t want)
+ 
+     need = buf->len;
+ 
+-    while (want >= (need - buf->used)) need <<= 1;
++    if (((buf->used > want) ? buf->used : want) > (size_t)(buf->used + want)) {
++        /* We cannot allocate more memory than SIZE_MAX. */
++        abort();
++    }
++    while (want >= (need - buf->used)) {
++        if (need >= (size_t)((size_t)(-1)<<1)>>1) {
++            /* need would overflow. */
++            abort();
++        }
++        need <<= 1;
++    }
+ 
+     if (need != buf->len) {
+         buf->data = (unsigned char *) YA_REALLOC(buf->alloc, buf->data, need);
+-- 
+2.34.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/yajl/yajl/CVE-2023-33460.patch b/meta-openembedded/meta-oe/recipes-devtools/yajl/yajl/CVE-2023-33460.patch
new file mode 100644
index 0000000..47454dc
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/yajl/yajl/CVE-2023-33460.patch
@@ -0,0 +1,35 @@
+Fix memory leaks.  Taken from the Fedora packaging (https://src.fedoraproject.org/rpms/yajl)
+where it was backported from openEuler.
+
+CVE: CVE-2023-33460
+Upstream-Status: Submitted [https://github.com/lloyd/yajl/issues/250]
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+
+diff --git a/src/yajl_tree.c b/src/yajl_tree.c
+index 3d357a3..56c7012 100644
+--- a/src/yajl_tree.c
++++ b/src/yajl_tree.c
+@@ -143,7 +143,7 @@ static yajl_val context_pop(context_t *ctx)
+     ctx->stack = stack->next;
+ 
+     v = stack->value;
+-
++    free (stack->key);
+     free (stack);
+ 
+     return (v);
+@@ -444,7 +444,14 @@ yajl_val yajl_tree_parse (const char *input,
+              snprintf(error_buffer, error_buffer_size, "%s", internal_err_str);
+              YA_FREE(&(handle->alloc), internal_err_str);
+         }
++        while(ctx.stack != NULL) {
++             yajl_val v = context_pop(&ctx);
++             yajl_tree_free(v);
++        }
+         yajl_free (handle);
++	//If the requested memory is not released in time, it will cause memory leakage
++	if(ctx.root)
++	     yajl_tree_free(ctx.root);
+         return NULL;
+     }
+ 
diff --git a/meta-openembedded/meta-oe/recipes-devtools/yajl/yajl_2.1.0.bb b/meta-openembedded/meta-oe/recipes-devtools/yajl/yajl_2.1.0.bb
index cf8dbb1..2a34210 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/yajl/yajl_2.1.0.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/yajl/yajl_2.1.0.bb
@@ -8,7 +8,11 @@
 LICENSE = "ISC"
 LIC_FILES_CHKSUM = "file://COPYING;md5=39af6eb42999852bdd3ea00ad120a36d"
 
-SRC_URI = "git://github.com/lloyd/yajl;branch=master;protocol=https"
+SRC_URI = "git://github.com/lloyd/yajl;branch=master;protocol=https \
+           file://CVE-2017-16516.patch \
+           file://CVE-2022-24795.patch \
+           file://CVE-2023-33460.patch \
+           "
 SRCREV = "a0ecdde0c042b9256170f2f8890dd9451a4240aa"
 
 S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-oe/recipes-extended/beep/beep_1.4.12.bb b/meta-openembedded/meta-oe/recipes-extended/beep/beep_1.4.12.bb
new file mode 100644
index 0000000..a4bc10c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/beep/beep_1.4.12.bb
@@ -0,0 +1,19 @@
+SUMMARY = "beep allows you to have the PC speaker issue beeps and beep patterns"
+DESCRIPTION = "beep allows you to have the PC speaker issue beeps and beep \
+patterns with given frequencies, durations, and spacing."
+HOMEPAGE = "https://github.com/spkr-beep/beep"
+BUGTRACKER = "https://github.com/spkr-beep/beep/issues"
+
+LICENSE = "GPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+SRC_URI = "git://github.com/spkr-beep/beep.git;protocol=https;branch=master \
+           file://0001-beep-library-Make-it-compatible-with-c99.patch"
+SRCREV = "11453a79f2cea81832329b06ca3a284aa7a0a52e"
+S = "${WORKDIR}/git"
+
+EXTRA_OEMAKE = "prefix='${prefix}' CFLAGS='${CFLAGS}' LDFLAGS='${LDFLAGS}'"
+
+do_install() {
+    oe_runmake install DESTDIR='${D}'
+}
diff --git a/meta-openembedded/meta-oe/recipes-extended/beep/beep_1.4.9.bb b/meta-openembedded/meta-oe/recipes-extended/beep/beep_1.4.9.bb
deleted file mode 100644
index ec62f31..0000000
--- a/meta-openembedded/meta-oe/recipes-extended/beep/beep_1.4.9.bb
+++ /dev/null
@@ -1,32 +0,0 @@
-SUMMARY = "beep allows you to have the PC speaker issue beeps and beep patterns"
-DESCRIPTION = "beep allows you to have the PC speaker issue beeps and beep \
-patterns with given frequencies, durations, and spacing."
-HOMEPAGE = "https://github.com/spkr-beep/beep"
-BUGTRACKER = "https://github.com/spkr-beep/beep/issues"
-
-LICENSE = "GPL-2.0-or-later"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
-
-SRC_URI = "git://github.com/spkr-beep/beep.git;protocol=https;branch=master \
-           file://0001-Do-not-use-Werror-as-it-fails-with-newer-clang-11.patch \
-"
-SRCREV = "8b85ddd09f73b9fd7caa5679298781a57af194ac"
-S = "${WORKDIR}/git"
-
-EXTRA_OEMAKE = " \
-    COMPILER_gcc='${CC}' \
-    LINKER_gcc='${CC}' \
-    COMPILER_clang=no \
-    LINKER_clang=no \
-"
-
-EXTRA_OEMAKE:toolchain-clang = " \
-    COMPILER_clang='${CC}' \
-    LINKER_clang='${CC}' \
-    COMPILER_gcc=no \
-    LINKER_gcc=no \
-"
-
-do_install() {
-    oe_runmake install DESTDIR='${D}'
-}
diff --git a/meta-openembedded/meta-oe/recipes-extended/beep/files/0001-Do-not-use-Werror-as-it-fails-with-newer-clang-11.patch b/meta-openembedded/meta-oe/recipes-extended/beep/files/0001-Do-not-use-Werror-as-it-fails-with-newer-clang-11.patch
deleted file mode 100644
index ba7681b..0000000
--- a/meta-openembedded/meta-oe/recipes-extended/beep/files/0001-Do-not-use-Werror-as-it-fails-with-newer-clang-11.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-From 6b33adfa438e35b6a37cfb0364274370ef4f9fc1 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 23 Dec 2020 18:00:59 +0000
-Subject: [PATCH] Do not use -Werror as it fails with newer clang 11+
-
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- GNUmakefile | 1 -
- 1 file changed, 1 deletion(-)
-
---- a/GNUmakefile
-+++ b/GNUmakefile
-@@ -91,12 +91,13 @@ comma := ,
- # If supported by COMPILER_gcc, add given flags to CFLAGS_gcc.
- # Example usage:
- #   $(eval $(call CHECK_CFLAGS_gcc,-fasynchronous-unwind-tables))
--define CHECK_CFLAGS_gcc
--CFLAGS_gcc += $$(if $$(shell if $$(COMPILER_gcc) $(1) -x c -o compile-check.gcc-o -c - < /dev/null > /dev/null 2>&1; then echo yes; else :; fi; rm -f compile-check.gcc-o > /dev/null 2>&1),$(1))
--endef
- 
- COMPILER_gcc = gcc
- LINKER_gcc = gcc
-+ifneq ($(COMPILER_gcc),no)
-+define CHECK_CFLAGS_gcc
-+CFLAGS_gcc += $$(if $$(shell if $$(COMPILER_gcc) $(1) -x c -o compile-check.gcc-o -c - < /dev/null > /dev/null 2>&1; then echo yes; else :; fi; rm -f compile-check.gcc-o > /dev/null 2>&1),$(1))
-+endef
- CPPFLAGS_gcc =
- CFLAGS_gcc =
- CFLAGS_gcc += -std=gnu99 -pedantic
-@@ -113,30 +114,24 @@ CFLAGS_gcc += -save-temps=obj
- LDFLAGS_gcc =
- LIBS_gcc =
- 
--ifneq ($(call pathsearch,$(COMPILER_gcc)),)
--ifneq ($(COMPILER_gcc)),no)
- COMPILERS += gcc
- endif
--endif
- 
- COMPILER_clang = clang
- LINKER_clang = clang
-+
-+ifneq ($(COMPILER_clang),no)
- CPPFLAGS_clang =
- CFLAGS_clang += -Wall -Wextra
- CFLAGS_clang += -Weverything
- CFLAGS_clang += -Wno-padded
- CFLAGS_clang += -std=gnu99 -pedantic
--CFLAGS_clang += -Werror
--CFLAGS_clang += -fsanitize=undefined
- CFLAGS_clang += -O -g
- LDFLAGS_clang =
- LIBS_clang =
- 
--ifneq ($(call pathsearch,$(COMPILER_clang)),)
--ifneq ($(COMPILER_clang),no)
- COMPILERS += clang
- endif
--endif
- 
- 
- ########################################################################
diff --git a/meta-openembedded/meta-oe/recipes-extended/beep/files/0001-beep-library-Make-it-compatible-with-c99.patch b/meta-openembedded/meta-oe/recipes-extended/beep/files/0001-beep-library-Make-it-compatible-with-c99.patch
new file mode 100644
index 0000000..240e075
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/beep/files/0001-beep-library-Make-it-compatible-with-c99.patch
@@ -0,0 +1,78 @@
+From 66b06e03fc25a168e06c7af5ccccc3162ddbf92a Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 13 Nov 2023 17:18:55 -0800
+Subject: [PATCH] beep-library: Make it compatible with < c99
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ beep-library.c | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+--- a/beep-library.c
++++ b/beep-library.c
+@@ -44,7 +44,7 @@
+ int open_checked_char_device(const char *const device_name)
+ {
+     struct stat sb;
+-
++    int fd = -1;
+     if (-1 == stat(device_name, &sb)) {
+         LOG_VERBOSE("could not stat(2) %s: %s",
+                     device_name, strerror(errno));
+@@ -57,7 +57,7 @@ int open_checked_char_device(const char
+         return -1;
+     }
+ 
+-    const int fd = open(device_name, O_WRONLY);
++    fd = open(device_name, O_WRONLY);
+     if (fd == -1) {
+         LOG_VERBOSE("could not open(2) %s: %s",
+                     device_name, strerror(errno));
+@@ -90,6 +90,7 @@ void safe_error_exit(const char *const m
+ {
+     const int saved_errno = errno;
+     char strerr_buf[128];
++    size_t errlen, msglen;
+     const int ret = strerror_r(saved_errno, strerr_buf, sizeof(strerr_buf));
+     if (ret != 0) {
+         if (write(STDERR_FILENO, "strerror_r error\n",
+@@ -98,14 +99,14 @@ void safe_error_exit(const char *const m
+         }
+         _exit(EXIT_FAILURE);
+     }
+-    const size_t msglen = strlen(msg);
++    msglen = strlen(msg);
+     if (write(STDERR_FILENO, msg, msglen)) {
+         /* ignore all write errors */
+     }
+     if (write(STDERR_FILENO, ": ", 2)) {
+         /* ignore all write errors */
+     }
+-    const size_t errlen = strlen(strerr_buf);
++    errlen = strlen(strerr_buf);
+     if (write(STDERR_FILENO, strerr_buf, errlen)) {
+         /* ignore all write errors */
+     }
+--- a/GNUmakefile
++++ b/GNUmakefile
+@@ -155,7 +155,6 @@ $(eval $(call CHECK_CFLAGS,common_CFLAGS
+ $(eval $(call CHECK_CFLAGS,common_CFLAGS,-Wall))
+ $(eval $(call CHECK_CFLAGS,common_CFLAGS,-Wextra))
+ $(eval $(call CHECK_CFLAGS,common_CFLAGS,-Weverything))
+-$(eval $(call CHECK_CFLAGS,common_CFLAGS,-Werror))
+ $(eval $(call CHECK_CFLAGS,common_CFLAGS,-Wno-padded))
+ $(eval $(call CHECK_CFLAGS,common_CFLAGS,-Werror=format-security))
+ $(eval $(call CHECK_CFLAGS,common_CFLAGS,-Wno-disabled-macro-expansion))
+@@ -169,11 +168,6 @@ $(eval $(call CHECK_CFLAGS,CFLAGS,-fanal
+ $(eval $(call CHECK_CFLAGS,CFLAGS,-fstack-protector-strong))
+ $(eval $(call CHECK_CFLAGS,CFLAGS,-fstack-clash-protection))
+ $(eval $(call CHECK_CFLAGS,CFLAGS,-fcf-protection))
+-$(eval $(call CHECK_CFLAGS,CFLAGS,-fsanitize=undefined))
+-
+-
+-CFLAGS += -save-temps=obj
+-
+ 
+ $(info # common_CFLAGS=$(common_CFLAGS))
+ $(info # CFLAGS=$(CFLAGS))
diff --git a/meta-openembedded/meta-oe/recipes-extended/brotli/brotli_1.0.9.bb b/meta-openembedded/meta-oe/recipes-extended/brotli/brotli_1.0.9.bb
index 4e2813d..708c1c1 100644
--- a/meta-openembedded/meta-oe/recipes-extended/brotli/brotli_1.0.9.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/brotli/brotli_1.0.9.bb
@@ -16,7 +16,8 @@
 
 do_install:append () {
 	for lib in $(ls ${D}${libdir}/*-static.a); do
-		mv -v "${lib}" "$(echo ${lib} | sed s/-static//)"
+		basename=$(basename ${lib})
+		mv -v "${lib}" "${D}${libdir}/$(echo ${basename} | sed s/-static//)"
 	done
 }
 
diff --git a/meta-openembedded/meta-oe/recipes-extended/dialog/dialog_1.3-20230209.bb b/meta-openembedded/meta-oe/recipes-extended/dialog/dialog_1.3-20231002.bb
similarity index 92%
rename from meta-openembedded/meta-oe/recipes-extended/dialog/dialog_1.3-20230209.bb
rename to meta-openembedded/meta-oe/recipes-extended/dialog/dialog_1.3-20231002.bb
index 444b97c..8887700 100644
--- a/meta-openembedded/meta-oe/recipes-extended/dialog/dialog_1.3-20230209.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/dialog/dialog_1.3-20231002.bb
@@ -9,7 +9,7 @@
 LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343"
 
 SRC_URI = "https://invisible-mirror.net/archives/${BPN}/${BP}.tgz"
-SRC_URI[sha256sum] = "0c26282305264be2217f335f3798f48b1dce3cf12c5a076bf231cadf77a6d6a8"
+SRC_URI[sha256sum] = "315640ab0719225d5cbcab130585c05f0791fcf073072a5fe9479969aa2b833b"
 
 # hardcoded here for use in dialog-static recipe
 S = "${WORKDIR}/dialog-${PV}"
diff --git a/meta-openembedded/meta-oe/recipes-extended/dlt-daemon/dlt-daemon/567.patch b/meta-openembedded/meta-oe/recipes-extended/dlt-daemon/dlt-daemon/567.patch
new file mode 100644
index 0000000..fd36480
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/dlt-daemon/dlt-daemon/567.patch
@@ -0,0 +1,36 @@
+Upstream-Status: Submitted [https://github.com/COVESA/dlt-daemon/pull/567]
+
+From c84e48f6986054cf8b9459e608235b7bd1635746 Mon Sep 17 00:00:00 2001
+From: Gianfranco Costamagna <costamagnagianfranco@yahoo.it>
+Date: Mon, 13 Nov 2023 12:37:23 +0100
+Subject: [PATCH] dlt_cdh:
+
+Make sure on 64 bit we read an ELF64 structure.
+Otherwise we get a read error, and the context file is missing some good
+to know information
+---
+ src/core_dump_handler/dlt_cdh.h | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/src/core_dump_handler/dlt_cdh.h b/src/core_dump_handler/dlt_cdh.h
+index 8608c6c4..3dac480a 100644
+--- a/src/core_dump_handler/dlt_cdh.h
++++ b/src/core_dump_handler/dlt_cdh.h
+@@ -45,10 +45,17 @@
+ #define CORE_FILE_PATTERN           "%s/core.%d.%s.%d.gz"
+ #define CONTEXT_FILE_PATTERN        "%s/context.%d.%s.%d.txt"
+ 
++#if ((__SIZEOF_POINTER) == 4)
+ #define ELF_Ehdr    Elf32_Ehdr
+ #define ELF_Phdr    Elf32_Phdr
+ #define ELF_Shdr    Elf32_Shdr
+ #define ELF_Nhdr    Elf32_Nhdr
++#else
++#define ELF_Ehdr    Elf64_Ehdr
++#define ELF_Phdr    Elf64_Phdr
++#define ELF_Shdr    Elf64_Shdr
++#define ELF_Nhdr    Elf64_Nhdr
++#endif
+ 
+ typedef struct
+ {
diff --git a/meta-openembedded/meta-oe/recipes-extended/dlt-daemon/dlt-daemon_2.18.10.bb b/meta-openembedded/meta-oe/recipes-extended/dlt-daemon/dlt-daemon_2.18.10.bb
index 410fffa..3d2e4a7 100644
--- a/meta-openembedded/meta-oe/recipes-extended/dlt-daemon/dlt-daemon_2.18.10.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/dlt-daemon/dlt-daemon_2.18.10.bb
@@ -18,6 +18,7 @@
            file://0002-Don-t-execute-processes-as-a-specific-user.patch \
            file://0004-Modify-systemd-config-directory.patch \
            file://544.patch \
+           file://567.patch \
            "
 SRCREV = "0f2d4cfffada6f8448a2cb27995b38eb4271044f"
 
diff --git a/meta-openembedded/meta-oe/recipes-extended/flatpak/flatpak/0001-flatpak-pc-add-pc_sysrootdir.patch b/meta-openembedded/meta-oe/recipes-extended/flatpak/flatpak/0001-flatpak-pc-add-pc_sysrootdir.patch
index c1f2cca..08d5625 100644
--- a/meta-openembedded/meta-oe/recipes-extended/flatpak/flatpak/0001-flatpak-pc-add-pc_sysrootdir.patch
+++ b/meta-openembedded/meta-oe/recipes-extended/flatpak/flatpak/0001-flatpak-pc-add-pc_sysrootdir.patch
@@ -5,7 +5,7 @@
 
 Signed-off-by: Markus Volk <f_l_k@t-online.de>
 ---
-Upstream-Status: Pending
+Upstream-Status: Inappropriate [oe-specific]
 
  meson.build | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/meta-openembedded/meta-oe/recipes-extended/flatpak/flatpak/0001-meson.build-require-for-native-wayland-scanner.patch b/meta-openembedded/meta-oe/recipes-extended/flatpak/flatpak/0001-meson.build-require-for-native-wayland-scanner.patch
new file mode 100644
index 0000000..b076a3f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/flatpak/flatpak/0001-meson.build-require-for-native-wayland-scanner.patch
@@ -0,0 +1,28 @@
+From ced2e933cf647874da4baff002e0987b9bfe5fac Mon Sep 17 00:00:00 2001
+From: Markus Volk <f_l_k@t-online.de>
+Date: Sat, 18 Nov 2023 15:07:49 +0100
+Subject: [PATCH] meson.build: require for native wayland-scanner
+
+Signed-off-by: Markus Volk <f_l_k@t-online.de>
+
+Upstream-Status: Submitted [https://github.com/flatpak/flatpak/pull/5596]
+---
+ meson.build | 4 ++--
+ 1 file changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/meson.build b/meson.build
+index f4e5b3a3..5d2f9eba 100644
+--- a/meson.build
++++ b/meson.build
+@@ -207,7 +207,7 @@ gtkdoc_dep = dependency('gtk-doc', required : get_option('gtkdoc'))
+ build_gtk_doc = gtkdoc_dep.found()
+ 
+ wayland_client = dependency('wayland-client', required : get_option('wayland_security_context'))
+-wayland_scanner = dependency('wayland-scanner', version : '>= 1.15', required : get_option('wayland_security_context'))
++wayland_scanner = dependency('wayland-scanner', version : '>= 1.15', required : get_option('wayland_security_context'), native : true)
+ wayland_protocols = dependency('wayland-protocols', version : '>= 1.32', required : get_option('wayland_security_context'))
+ build_wayland_security_context = wayland_client.found() and wayland_scanner.found() and wayland_protocols.found()
+ 
+-- 
+2.42.0
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/flatpak/flatpak_1.15.4.bb b/meta-openembedded/meta-oe/recipes-extended/flatpak/flatpak_1.15.6.bb
similarity index 68%
rename from meta-openembedded/meta-oe/recipes-extended/flatpak/flatpak_1.15.4.bb
rename to meta-openembedded/meta-oe/recipes-extended/flatpak/flatpak_1.15.6.bb
index ca0f0e8..0ee53af 100644
--- a/meta-openembedded/meta-oe/recipes-extended/flatpak/flatpak_1.15.4.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/flatpak/flatpak_1.15.6.bb
@@ -6,9 +6,10 @@
 SRC_URI = " \
     gitsm://github.com/flatpak/flatpak;protocol=https;branch=main \
     file://0001-flatpak-pc-add-pc_sysrootdir.patch \
+    file://0001-meson.build-require-for-native-wayland-scanner.patch \
 "
 
-SRCREV = "e936e3100d406c50ba49f3ad6a0ecae455345ec0"
+SRCREV = "27b11b93c2a80a91c9461bc6c7f5e9a201406041"
 
 S = "${WORKDIR}/git"
 
@@ -19,7 +20,6 @@
 DEPENDS = " \
     appstream \
     bison-native \
-    curl \
     dconf \
     fuse3 \
     gdk-pixbuf \
@@ -29,11 +29,9 @@
     libarchive \
     libcap \
     libxml2 \
-    libxslt-native \
     ostree \
     polkit \
     python3-pyparsing-native \
-    xmlto-native \
     zstd \
 "
 
@@ -47,18 +45,28 @@
 
 EXTRA_OEMESON += "-Dsystem_dbus_proxy=${bindir}/xdg-dbus-proxy -Dsystem_bubblewrap=${bindir}/bwrap"
 
-GIR_MESON_OPTION = ""
+GIR_MESON_OPTION = "gir"
+GIR_MESON_ENABLE_FLAG = 'enabled'
+GIR_MESON_DISABLE_FLAG = 'disabled'
 GTKDOC_MESON_OPTION = 'gtkdoc'
 GTKDOC_MESON_ENABLE_FLAG = 'enabled'
 GTKDOC_MESON_DISABLE_FLAG = 'disabled'
 
+PACKAGECONFIG[curl] = "-Dhttp_backend=curl,,curl"
+PACKAGECONFIG[docbook_docs] = "-Ddocbook_docs=enabled,-Ddocbook_docs=disabled,xmlto-native"
+PACKAGECONFIG[man] = "-Dman=enabled,-Dman=disabled,libxslt-native"
+PACKAGECONFIG[soup] = "-Dhttp_backend=soup,,libsoup-2.4"
 PACKAGECONFIG[tests] = "-Dtests=true,-Dtests=false,xauth socat-native"
 PACKAGECONFIG[xauth] = "-Dxauth=enabled,-Dxauth=disabled,xauth"
 PACKAGECONFIG[seccomp] = "-Dseccomp=enabled,-Dseccomp=disabled,libseccomp"
+PACKAGECONFIG[selinux] = "-Dselinux_module=enabled,-Dselinux_module=disabled,libselinux"
+PACKAGECONFIG[wayland-security-context] = "-Dwayland_security_context=enabled,-Dwayland_security_context=disabled,wayland wayland-native wayland-protocols"
 
 PACKAGECONFIG ?= " \
+    curl \
     ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'xauth', '', d)} \
     ${@bb.utils.contains('DISTRO_FEATURES', 'seccomp', 'seccomp', '', d)} \
+    ${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'wayland-security-context', '', d)} \
 "
 
 FILES:${PN} += "${libdir} ${datadir}"
diff --git a/meta-openembedded/meta-oe/recipes-extended/fluentbit/fluentbit_1.9.7.bb b/meta-openembedded/meta-oe/recipes-extended/fluentbit/fluentbit_1.9.7.bb
index 26238e5..fc06095 100644
--- a/meta-openembedded/meta-oe/recipes-extended/fluentbit/fluentbit_1.9.7.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/fluentbit/fluentbit_1.9.7.bb
@@ -45,7 +45,7 @@
 
 # flex hardcodes the input file in #line directives leading to TMPDIR contamination of debug sources.
 do_compile:append() {
-    find ${B} -name '*.c' -or -name '*.h' | xargs sed -i -e 's|${TMPDIR}|/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}/|g'
+    find ${B} -name '*.c' -or -name '*.h' | xargs sed -i -e 's|${TMPDIR}|${TARGET_DBGSRC_DIR}/|g'
 }
 
 PACKAGECONFIG ?= "yaml"
@@ -88,5 +88,5 @@
 
 SYSTEMD_SERVICE:${PN} = "td-agent-bit.service"
 
-EXTRA_OECMAKE += "-DCMAKE_DEBUG_SRCDIR=/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}/"
+EXTRA_OECMAKE += "-DCMAKE_DEBUG_SRCDIR=${TARGET_DBGSRC_DIR}/"
 TARGET_CC_ARCH += " ${SELECTED_OPTIMIZATION}"
diff --git a/meta-openembedded/meta-oe/recipes-extended/lastlog2/lastlog2_1.1.0.bb b/meta-openembedded/meta-oe/recipes-extended/lastlog2/lastlog2_1.2.0.bb
similarity index 95%
rename from meta-openembedded/meta-oe/recipes-extended/lastlog2/lastlog2_1.1.0.bb
rename to meta-openembedded/meta-oe/recipes-extended/lastlog2/lastlog2_1.2.0.bb
index 757af00..43deac3 100644
--- a/meta-openembedded/meta-oe/recipes-extended/lastlog2/lastlog2_1.1.0.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/lastlog2/lastlog2_1.2.0.bb
@@ -5,7 +5,7 @@
 LIC_FILES_CHKSUM = "file://LICENSE;md5=020090a00b69dd2af9ab82eb0003ea2c"
 SECTION = "libs"
 
-SRCREV = "585153a577788c590370d20e40263b61238dfab3"
+SRCREV = "6138dff6f2a5216065fa4833a223b56d98cb62f3"
 
 SRC_URI = "git://github.com/thkukuk/lastlog2.git;branch=main;protocol=https \
            file://0001-remove-lto-to-fix-link-error-of-clang.patch \
diff --git a/meta-openembedded/meta-oe/recipes-extended/libbacktrace/libbacktrace_git.bb b/meta-openembedded/meta-oe/recipes-extended/libbacktrace/libbacktrace_git.bb
index 609e55f..46fa818 100644
--- a/meta-openembedded/meta-oe/recipes-extended/libbacktrace/libbacktrace_git.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/libbacktrace/libbacktrace_git.bb
@@ -11,20 +11,17 @@
 SRC_URI = "git://github.com/ianlancetaylor/libbacktrace;protocol=https;branch=master"
 
 PV = "1.0+git${SRCPV}"
-SRCREV = "4f57c999716847e45505b3df170150876b545088"
+SRCREV = "9ae4f4ae4481b1e69d38ed810980d33103544613"
 
 S = "${WORKDIR}/git"
 
 inherit autotools
 
-EXTR_OECONF += "--with-system-libunwind"
-
-CFLAGS += "-fPIC"
+EXTRA_OECONF += "--with-system-libunwind --enable-shared --disable-static"
 
 do_configure() {
     oe_runconf
 }
 
-# libunwind does not support RISCV yet
-COMPATIBLE_HOST:riscv64 = "null"
+# libunwind does not support RISCV32 yet
 COMPATIBLE_HOST:riscv32 = "null"
diff --git a/meta-openembedded/meta-oe/recipes-extended/libblockdev/libblockdev_3.03.bb b/meta-openembedded/meta-oe/recipes-extended/libblockdev/libblockdev_3.0.4.bb
similarity index 97%
rename from meta-openembedded/meta-oe/recipes-extended/libblockdev/libblockdev_3.03.bb
rename to meta-openembedded/meta-oe/recipes-extended/libblockdev/libblockdev_3.0.4.bb
index 99175e6..d6ee103 100644
--- a/meta-openembedded/meta-oe/recipes-extended/libblockdev/libblockdev_3.03.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/libblockdev/libblockdev_3.0.4.bb
@@ -15,7 +15,7 @@
 SRC_URI = "git://github.com/storaged-project/libblockdev;branch=master;protocol=https \
            file://0001-fix-pythondir-for-multilib-when-cross-compiling.patch \
            "
-SRCREV = "38378931d285b91333ff2e2a391b1fe91072f9bb"
+SRCREV = "ec0120de06f28ecfc10953b712f7f42735787bcf"
 S = "${WORKDIR}/git"
 
 FILES:${PN} += "${libdir}/python3.*/site-packages"
diff --git a/meta-openembedded/meta-oe/recipes-extended/libimobiledevice/libplist_git.bb b/meta-openembedded/meta-oe/recipes-extended/libimobiledevice/libplist_git.bb
index 3a10b40..f8e7f98 100644
--- a/meta-openembedded/meta-oe/recipes-extended/libimobiledevice/libplist_git.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/libimobiledevice/libplist_git.bb
@@ -8,9 +8,9 @@
 
 inherit autotools pkgconfig python3native python3targetconfig
 
-PV = "2.3.0"
+PV = "2.3.0+git${SRCPV}"
 
-SRCREV = "b8fcc89b74c9128a13b07cc15a0ce25dca0cd97e"
+SRCREV = "2cd858c679d25633077ca78b67182a9b77653816"
 SRC_URI = "git://github.com/libimobiledevice/libplist;protocol=https;branch=master"
 
 S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-oe/recipes-extended/libyang/libyang_2.1.111.bb b/meta-openembedded/meta-oe/recipes-extended/libyang/libyang_2.1.128.bb
similarity index 96%
rename from meta-openembedded/meta-oe/recipes-extended/libyang/libyang_2.1.111.bb
rename to meta-openembedded/meta-oe/recipes-extended/libyang/libyang_2.1.128.bb
index e592356..55dbb82 100644
--- a/meta-openembedded/meta-oe/recipes-extended/libyang/libyang_2.1.111.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/libyang/libyang_2.1.128.bb
@@ -6,7 +6,7 @@
 
 LIC_FILES_CHKSUM = "file://LICENSE;md5=f3916d7d8d42a6508d0ea418cfff10ad"
 
-SRCREV = "8b0b910a2dcb7360cb5b0aaefbd1338271d50946"
+SRCREV = "7e5ea21030fe6632b6faad30c0de8d9669503773"
 
 SRC_URI = "git://github.com/CESNET/libyang.git;branch=master;protocol=https \
            file://0001-test_context-skip-test-case-test_searchdirs.patch \
diff --git a/meta-openembedded/meta-oe/recipes-extended/minifi-cpp/minifi-cpp_0.7.0.bb b/meta-openembedded/meta-oe/recipes-extended/minifi-cpp/minifi-cpp_0.7.0.bb
index b75a336..67a2d9f 100644
--- a/meta-openembedded/meta-oe/recipes-extended/minifi-cpp/minifi-cpp_0.7.0.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/minifi-cpp/minifi-cpp_0.7.0.bb
@@ -66,7 +66,7 @@
     -DGCC_RANLIB=${STAGING_BINDIR_TOOLCHAIN}/${RANLIB} \
     -DDISABLE_PYTHON_SCRIPTING=ON \
     -DFLEX_TARGET_ARG_COMPILE_FLAGS='--noline' \
-    -DBISON_TARGET_ARG_COMPILE_FLAGS='--no-lines --file-prefix-map=${S}=/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}' \
+    -DBISON_TARGET_ARG_COMPILE_FLAGS='--no-lines --file-prefix-map=${S}=${TARGET_DBGSRC_DIR}' \
     -DOPENSSLDIR=${sysconfdir}/libressl \
     "
 
diff --git a/meta-openembedded/meta-oe/recipes-extended/networking/mstpd_git.bb b/meta-openembedded/meta-oe/recipes-extended/networking/mstpd_git.bb
index e2565d6..b2043ef 100644
--- a/meta-openembedded/meta-oe/recipes-extended/networking/mstpd_git.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/networking/mstpd_git.bb
@@ -1,16 +1,17 @@
-PR = "r1"
-PV = "0.1+git${SRCPV}"
 LICENSE = "GPL-2.0-or-later"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=4325afd396febcb659c36b49533135d4"
 
-SRC_URI = "git://github.com/mstpd/mstpd;branch=master;protocol=https"
+PV = "0.1.0+git"
+
+SRC_URI = " \
+    git://github.com/mstpd/mstpd;branch=master;protocol=https \
+    file://bridge-stp \
+    file://mstpd.service \
+"
 SRCREV = "181c453fc1a00573e19f14960dcc54ad84beea7c"
 S = "${WORKDIR}/git"
 
-SRC_URI:append = " \
-  file://bridge-stp \
-  file://mstpd.service \
-"
+UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>\d+(\.\d+){2,})"
 
 inherit autotools pkgconfig systemd
 
@@ -21,12 +22,12 @@
 SYSTEMD_SERVICE:${PN}-mstpd = "mstpd.service"
 
 do_install:append() {
-  rm -rf ${D}${libexecdir} ${D}${libdir}/NetworkManager
-  rmdir ${D}${libdir} || true
+    rm -rf ${D}${libexecdir} ${D}${libdir}/NetworkManager
+    rmdir ${D}${libdir} || true
 
-  install -d -m 0755 ${D}/${sbindir}
-  install -m 0755 ${WORKDIR}/bridge-stp ${D}/${sbindir}
+    install -d -m 0755 ${D}${sbindir}
+    install -m 0755 ${WORKDIR}/bridge-stp ${D}${sbindir}
 
-  install -d -m 0755 ${D}${systemd_system_unitdir}
-  install -m 0644 ${WORKDIR}/mstpd.service ${D}${systemd_system_unitdir}/
+    install -d -m 0755 ${D}${systemd_system_unitdir}
+    install -m 0644 ${WORKDIR}/mstpd.service ${D}${systemd_system_unitdir}
 }
diff --git a/meta-openembedded/meta-oe/recipes-extended/ostree/ostree_2023.5.bb b/meta-openembedded/meta-oe/recipes-extended/ostree/ostree_2023.7.bb
similarity index 93%
rename from meta-openembedded/meta-oe/recipes-extended/ostree/ostree_2023.5.bb
rename to meta-openembedded/meta-oe/recipes-extended/ostree/ostree_2023.7.bb
index bc465dd..d91b0a3 100644
--- a/meta-openembedded/meta-oe/recipes-extended/ostree/ostree_2023.5.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/ostree/ostree_2023.7.bb
@@ -22,7 +22,7 @@
 SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/libostree-${PV}.tar.xz \
            file://run-ptest \
            "
-SRC_URI[sha256sum] = "bc593afb31fe1ac3d50419f917fafe321a0a3561d7bb2ba498a83740fe3adb14"
+SRC_URI[sha256sum] = "19cda718705f7ac8c018c939c38b1bb8412deaaa04862da98cd9fe9243f073bf"
 
 S = "${WORKDIR}/libostree-${PV}"
 
@@ -73,6 +73,7 @@
 PACKAGECONFIG[curl] = "--with-curl, --without-curl, curl"
 PACKAGECONFIG[dracut] = "--with-dracut, --without-dracut"
 PACKAGECONFIG[ed25519-libsodium] = "--with-ed25519-libsodium, --without-ed25519-libsodium, libsodium"
+PACKAGECONFIG[ed25519-openssl] = "--with-openssl, --without-openssl, openssl"
 PACKAGECONFIG[gjs] = "ac_cv_path_GJS=${bindir}/gjs"
 PACKAGECONFIG[glib] = "--with-crypto=glib, , , , , gnutls openssl"
 PACKAGECONFIG[gnutls] = "--with-crypto=gnutls, , gnutls, , , glib openssl"
@@ -90,7 +91,6 @@
 PACKAGECONFIG[soup3] = "--with-soup3, --without-soup3, libsoup, , , soup2"
 PACKAGECONFIG[static] = ""
 PACKAGECONFIG[systemd] = "--with-libsystemd --with-systemdsystemunitdir=${systemd_system_unitdir}, --without-libsystemd, systemd"
-PACKAGECONFIG[trivial-httpd-cmdline] = "--enable-trivial-httpd-cmdline, --disable-trivial-httpd-cmdline"
 
 EXTRA_OECONF = " \
     ${@bb.utils.contains('PACKAGECONFIG', 'static', '--with-static-compiler=\'${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}\'', '', d)} \
@@ -138,7 +138,6 @@
     ${PN}-grub \
     ${PN}-mkinitcpio \
     ${PN}-switchroot \
-    ${PN}-trivial-httpd \
 "
 
 FILES:${PN} += " \
@@ -163,13 +162,7 @@
     ${nonarch_libdir}/${BPN}/ostree-prepare-root \
     ${systemd_system_unitdir}/ostree-prepare-root.service \
 "
-FILES:${PN}-trivial-httpd = " \
-    ${libexecdir}/libostree/ostree-trivial-httpd \
-"
 
-RDEPENDS:${PN} = " \
-    ${@bb.utils.contains('PACKAGECONFIG', 'trivial-httpd-cmdline', '${PN}-trivial-httpd', '', d)} \
-"
 RDEPENDS:${PN}-dracut = "bash"
 RDEPENDS:${PN}-mkinitcpio = "bash"
 RDEPENDS:${PN}:class-target = " \
@@ -182,7 +175,6 @@
 #
 #   xattr in DISTRO_FEATURES (default)
 #   static ostree-prepare-root
-#   ostree-trivial-httpd (requires soup - note soup and curl can coexist)
 #   overlayfs in your kernel
 #   busybox built statically
 #   C.UTF-8 locale available (default)
@@ -208,7 +200,6 @@
     tar \
     util-linux \
     xz \
-    ${PN}-trivial-httpd \
     python3-pyyaml \
     ${@bb.utils.contains('PACKAGECONFIG', 'gjs', 'gjs', '', d)} \
 "
diff --git a/meta-openembedded/meta-oe/recipes-extended/pmdk/pmdk/0001-pmempool-Match-function-prototypes-of-enum_to_str_fn.patch b/meta-openembedded/meta-oe/recipes-extended/pmdk/pmdk/0001-pmempool-Match-function-prototypes-of-enum_to_str_fn.patch
deleted file mode 100644
index b16b633..0000000
--- a/meta-openembedded/meta-oe/recipes-extended/pmdk/pmdk/0001-pmempool-Match-function-prototypes-of-enum_to_str_fn.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From de6425acaa50426883e85a599001ae5e927aec5b Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Thu, 2 Mar 2023 16:23:56 -0800
-Subject: [PATCH] pmempool: Match function prototypes of enum_to_str_fn
- function pointer
-
-This is flagged by clang 16+
-common.c:844:4: error: cast from 'const char *(*)(enum chunk_type)' to 'enum_to_str_fn' (aka 'const char *(*)(int)') converts to incompatible function type [-Werror,-Wcast-function-type-strict]
-                        (enum_to_str_fn)out_get_chunk_type_str);
-                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-1 error generated.
-
-Upstream-Status: Submitted [https://github.com/pmem/pmdk/pull/5543]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- src/tools/pmempool/common.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/src/tools/pmempool/common.c b/src/tools/pmempool/common.c
-index 5e7e472cc..4b7e9b95f 100644
---- a/src/tools/pmempool/common.c
-+++ b/src/tools/pmempool/common.c
-@@ -41,7 +41,7 @@
- 
- #define REQ_BUFF_SIZE	2048U
- #define Q_BUFF_SIZE	8192
--typedef const char *(*enum_to_str_fn)(int);
-+typedef const char *(*enum_to_str_fn)(enum chunk_type);
- 
- /*
-  * pmem_pool_type -- return pool type based on first two pages.
-@@ -790,7 +790,7 @@ util_parse_enum(const char *str, int first, int max, uint64_t *bitmap,
- 		enum_to_str_fn enum_to_str)
- {
- 	for (int i = first; i < max; i++) {
--		if (strcmp(str, enum_to_str(i)) == 0) {
-+		if (strcmp(str, enum_to_str((enum chunk_type)i)) == 0) {
- 			*bitmap |= (uint64_t)1<<i;
- 			return 0;
- 		}
--- 
-2.39.2
-
diff --git a/meta-openembedded/meta-oe/recipes-extended/pmdk/pmdk_1.12.1.bb b/meta-openembedded/meta-oe/recipes-extended/pmdk/pmdk_2.0.0.bb
similarity index 86%
rename from meta-openembedded/meta-oe/recipes-extended/pmdk/pmdk_1.12.1.bb
rename to meta-openembedded/meta-oe/recipes-extended/pmdk/pmdk_2.0.0.bb
index 5261922..aeda236 100644
--- a/meta-openembedded/meta-oe/recipes-extended/pmdk/pmdk_1.12.1.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/pmdk/pmdk_2.0.0.bb
@@ -11,9 +11,8 @@
 
 S = "${WORKDIR}/git"
 
-SRC_URI = "git://github.com/pmem/pmdk.git;branch=stable-1.12;protocol=https \
-           file://0001-pmempool-Match-function-prototypes-of-enum_to_str_fn.patch"
-SRCREV = "786098a024c6fe60e746f2cb1041bcfcd21386c9"
+SRC_URI = "git://github.com/pmem/pmdk.git;branch=master;protocol=https"
+SRCREV = "ba92d6b469d52d16f26279bebaf317bbdbb3822c"
 
 inherit autotools-brokensep pkgconfig
 
diff --git a/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/0001-src-Do-not-reset-FINAL_LIBS.patch b/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.2/0001-src-Do-not-reset-FINAL_LIBS.patch
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/0001-src-Do-not-reset-FINAL_LIBS.patch
rename to meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.2/0001-src-Do-not-reset-FINAL_LIBS.patch
diff --git a/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/0006-Define-correct-gregs-for-RISCV32.patch b/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.2/0006-Define-correct-gregs-for-RISCV32.patch
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/0006-Define-correct-gregs-for-RISCV32.patch
rename to meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.2/0006-Define-correct-gregs-for-RISCV32.patch
diff --git a/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/GNU_SOURCE-7.patch b/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.2/GNU_SOURCE-7.patch
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/GNU_SOURCE-7.patch
rename to meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.2/GNU_SOURCE-7.patch
diff --git a/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/hiredis-use-default-CC-if-it-is-set.patch b/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.2/hiredis-use-default-CC-if-it-is-set.patch
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/hiredis-use-default-CC-if-it-is-set.patch
rename to meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.2/hiredis-use-default-CC-if-it-is-set.patch
diff --git a/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/init-redis-server b/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.2/init-redis-server
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/init-redis-server
rename to meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.2/init-redis-server
diff --git a/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/lua-update-Makefile-to-use-environment-build-setting.patch b/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.2/lua-update-Makefile-to-use-environment-build-setting.patch
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/lua-update-Makefile-to-use-environment-build-setting.patch
rename to meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.2/lua-update-Makefile-to-use-environment-build-setting.patch
diff --git a/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/oe-use-libc-malloc.patch b/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.2/oe-use-libc-malloc.patch
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/oe-use-libc-malloc.patch
rename to meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.2/oe-use-libc-malloc.patch
diff --git a/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/redis.conf b/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.2/redis.conf
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/redis.conf
rename to meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.2/redis.conf
diff --git a/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/redis.service b/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.2/redis.service
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/redis.service
rename to meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.2/redis.service
diff --git a/meta-openembedded/meta-oe/recipes-extended/redis/redis_7.2.1.bb b/meta-openembedded/meta-oe/recipes-extended/redis/redis_7.2.2.bb
similarity index 96%
rename from meta-openembedded/meta-oe/recipes-extended/redis/redis_7.2.1.bb
rename to meta-openembedded/meta-oe/recipes-extended/redis/redis_7.2.2.bb
index f8e30e0..44fb01b 100644
--- a/meta-openembedded/meta-oe/recipes-extended/redis/redis_7.2.1.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/redis/redis_7.2.2.bb
@@ -17,7 +17,7 @@
            file://GNU_SOURCE-7.patch \
            file://0006-Define-correct-gregs-for-RISCV32.patch \
            "
-SRC_URI[sha256sum] = "5c76d990a1b1c5f949bcd1eed90d0c8a4f70369bdbdcb40288c561ddf88967a4"
+SRC_URI[sha256sum] = "ca999be08800edc6d265379c4c7aafad92f0ee400692e4e2d69829ab4b4c3d08"
 
 inherit autotools-brokensep update-rc.d systemd useradd
 
diff --git a/meta-openembedded/meta-oe/recipes-extended/rsyslog/libfastjson_0.99.9.bb b/meta-openembedded/meta-oe/recipes-extended/rsyslog/libfastjson_1.2304.0.bb
similarity index 85%
rename from meta-openembedded/meta-oe/recipes-extended/rsyslog/libfastjson_0.99.9.bb
rename to meta-openembedded/meta-oe/recipes-extended/rsyslog/libfastjson_1.2304.0.bb
index 24ad172..f16126d 100644
--- a/meta-openembedded/meta-oe/recipes-extended/rsyslog/libfastjson_0.99.9.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/rsyslog/libfastjson_1.2304.0.bb
@@ -8,7 +8,7 @@
 
 SRC_URI = "git://github.com/rsyslog/libfastjson.git;protocol=https;branch=master"
 
-SRCREV = "0293afb3913f760c449348551cca4d2df59c1a00"
+SRCREV = "3a8402c1de7c7747c95229db26d8d32fb85a7a52"
 
 S = "${WORKDIR}/git"
 
diff --git a/meta-openembedded/meta-oe/recipes-extended/wtmpdb/wtmpdb_0.7.1.bb b/meta-openembedded/meta-oe/recipes-extended/wtmpdb/wtmpdb_0.9.3.bb
similarity index 95%
rename from meta-openembedded/meta-oe/recipes-extended/wtmpdb/wtmpdb_0.7.1.bb
rename to meta-openembedded/meta-oe/recipes-extended/wtmpdb/wtmpdb_0.9.3.bb
index cffae2d..6d23c00 100644
--- a/meta-openembedded/meta-oe/recipes-extended/wtmpdb/wtmpdb_0.7.1.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/wtmpdb/wtmpdb_0.9.3.bb
@@ -5,7 +5,7 @@
 LIC_FILES_CHKSUM = "file://LICENSE;md5=020090a00b69dd2af9ab82eb0003ea2c"
 SECTION = "libs"
 
-SRCREV = "502b19a41c7a3b1b5e70969b18088683825f71f8"
+SRCREV = "8ef2677a13d19aee3a834500f9c8a4dac9d68ef7"
 
 SRC_URI = "git://github.com/thkukuk/wtmpdb.git;branch=main;protocol=https \
            file://0001-remove-lto-to-fix-link-error-of-clang.patch \
diff --git a/meta-openembedded/meta-oe/recipes-gnome/atk/atkmm-2.36_2.36.2.bb b/meta-openembedded/meta-oe/recipes-gnome/atk/atkmm-2.36_2.36.2.bb
index a152ff2..fa47cbd 100644
--- a/meta-openembedded/meta-oe/recipes-gnome/atk/atkmm-2.36_2.36.2.bb
+++ b/meta-openembedded/meta-oe/recipes-gnome/atk/atkmm-2.36_2.36.2.bb
@@ -7,7 +7,6 @@
 
 DEPENDS = "atk glibmm-2.68"
 
-GNOMEBASEBUILDCLASS = "meson"
 GNOMEBN = "atkmm"
 
 inherit gnomebase features_check
diff --git a/meta-openembedded/meta-oe/recipes-gnome/atk/atkmm_2.28.2.bb b/meta-openembedded/meta-oe/recipes-gnome/atk/atkmm_2.28.2.bb
index f6cb0a1..bc63747 100644
--- a/meta-openembedded/meta-oe/recipes-gnome/atk/atkmm_2.28.2.bb
+++ b/meta-openembedded/meta-oe/recipes-gnome/atk/atkmm_2.28.2.bb
@@ -7,7 +7,6 @@
 
 DEPENDS = "atk glibmm"
 
-GNOMEBASEBUILDCLASS = "meson"
 
 inherit gnomebase features_check
 
diff --git a/meta-openembedded/meta-oe/recipes-gnome/gcab/gcab_1.4.bb b/meta-openembedded/meta-oe/recipes-gnome/gcab/gcab_1.6.bb
similarity index 89%
rename from meta-openembedded/meta-oe/recipes-gnome/gcab/gcab_1.4.bb
rename to meta-openembedded/meta-oe/recipes-gnome/gcab/gcab_1.6.bb
index 321e7c3..4278fc9 100644
--- a/meta-openembedded/meta-oe/recipes-gnome/gcab/gcab_1.4.bb
+++ b/meta-openembedded/meta-oe/recipes-gnome/gcab/gcab_1.6.bb
@@ -9,7 +9,7 @@
     ${GNOME_MIRROR}/gcab/${PV}/gcab-${PV}.tar.xz \
     file://run-ptest \
 "
-SRC_URI[sha256sum] = "67a5fa9be6c923fbc9197de6332f36f69a33dadc9016a2b207859246711c048f"
+SRC_URI[sha256sum] = "2f0c9615577c4126909e251f9de0626c3ee7a152376c15b5544df10fc87e560b"
 
 inherit gobject-introspection gtk-doc manpages meson ptest-gnome vala
 
diff --git a/meta-openembedded/meta-oe/recipes-gnome/gcr/gcr3_3.41.1.bb b/meta-openembedded/meta-oe/recipes-gnome/gcr/gcr3_3.41.1.bb
index ba5660a..b3438b4 100644
--- a/meta-openembedded/meta-oe/recipes-gnome/gcr/gcr3_3.41.1.bb
+++ b/meta-openembedded/meta-oe/recipes-gnome/gcr/gcr3_3.41.1.bb
@@ -15,8 +15,9 @@
 
 CFLAGS += "-D_GNU_SOURCE"
 
-GNOMEBASEBUILDCLASS = "meson"
 GTKDOC_MESON_OPTION = "gtk_doc"
+VALA_MESON_OPTION ?= ''
+
 inherit gnomebase gtk-icon-cache gi-docgen features_check upstream-version-is-even vala gobject-introspection gettext mime mime-xdg
 UPSTREAM_CHECK_REGEX = "[^\d\.](?P<pver>3.(?!9\d+)\d+(\.\d+)+)\.tar"
 
@@ -39,6 +40,7 @@
 FILES:${PN} += " \
     ${datadir}/dbus-1 \
     ${datadir}/gcr-3 \
+    ${datadir}/vala \
     ${systemd_user_unitdir}/gcr-ssh-agent.socket \
     ${systemd_user_unitdir}/gcr-ssh-agent.service \
 "
diff --git a/meta-openembedded/meta-oe/recipes-gnome/gmime/gmime_3.2.13.bb b/meta-openembedded/meta-oe/recipes-gnome/gmime/gmime_3.2.13.bb
index c4738b2..d8a6c1d 100644
--- a/meta-openembedded/meta-oe/recipes-gnome/gmime/gmime_3.2.13.bb
+++ b/meta-openembedded/meta-oe/recipes-gnome/gmime/gmime_3.2.13.bb
@@ -5,6 +5,7 @@
 
 DEPENDS = "glib-2.0 zlib"
 
+GNOMEBASEBUILDCLASS = "autotools"
 inherit gnomebase gobject-introspection vala
 
 SRC_URI = "https://github.com/jstedfast/${BPN}/releases/download/${PV}/${BP}.tar.xz \
diff --git a/meta-openembedded/meta-oe/recipes-gnome/gnome-common/gnome-common_3.18.0.bb b/meta-openembedded/meta-oe/recipes-gnome/gnome-common/gnome-common_3.18.0.bb
index ceebe5e..9447470 100644
--- a/meta-openembedded/meta-oe/recipes-gnome/gnome-common/gnome-common_3.18.0.bb
+++ b/meta-openembedded/meta-oe/recipes-gnome/gnome-common/gnome-common_3.18.0.bb
@@ -6,6 +6,7 @@
 LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
 
 SECTION = "x11/gnome"
+GNOMEBASEBUILDCLASS = "autotools"
 inherit gnomebase allarch
 
 SRC_URI[archive.md5sum] = "933258d9c23e218eb6eec9cc1951b053"
diff --git a/meta-openembedded/meta-oe/recipes-gnome/gnome-themes/adw-gtk3_4.9.bb b/meta-openembedded/meta-oe/recipes-gnome/gnome-themes/adw-gtk3_5.1.bb
similarity index 88%
rename from meta-openembedded/meta-oe/recipes-gnome/gnome-themes/adw-gtk3_4.9.bb
rename to meta-openembedded/meta-oe/recipes-gnome/gnome-themes/adw-gtk3_5.1.bb
index d7b7eef..577acda 100644
--- a/meta-openembedded/meta-oe/recipes-gnome/gnome-themes/adw-gtk3_4.9.bb
+++ b/meta-openembedded/meta-oe/recipes-gnome/gnome-themes/adw-gtk3_5.1.bb
@@ -11,6 +11,6 @@
 SRC_URI = "git://github.com/lassekongo83/adw-gtk3.git;protocol=https;branch=main"
 
 S = "${WORKDIR}/git"
-SRCREV = "08d3dfbde51d4cb0a3bb8e58a81aa61064857d89"
+SRCREV = "a3e1050341956fcae53b2b4403affcf2578a42f4"
 
 FILES:${PN} = "${datadir}/themes"
diff --git a/meta-openembedded/meta-oe/recipes-gnome/gnome-themes/gnome-themes-extra_3.28.bb b/meta-openembedded/meta-oe/recipes-gnome/gnome-themes/gnome-themes-extra_3.28.bb
index 227422d..c853668 100644
--- a/meta-openembedded/meta-oe/recipes-gnome/gnome-themes/gnome-themes-extra_3.28.bb
+++ b/meta-openembedded/meta-oe/recipes-gnome/gnome-themes/gnome-themes-extra_3.28.bb
@@ -6,6 +6,7 @@
 LICENSE = "LGPL-2.1-only"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=2d5025d4aa3495befef8f17206a5b0a1"
 
+GNOMEBASEBUILDCLASS = "autotools"
 inherit gnomebase gettext gtk-icon-cache upstream-version-is-even features_check
 
 ANY_OF_DISTRO_FEATURES = "${GTK2DISTROFEATURES}"
diff --git a/meta-openembedded/meta-oe/recipes-gnome/gtk+/gtkmm3_3.24.7.bb b/meta-openembedded/meta-oe/recipes-gnome/gtk+/gtkmm3_3.24.7.bb
index 28d2bb1..cac6474 100644
--- a/meta-openembedded/meta-oe/recipes-gnome/gtk+/gtkmm3_3.24.7.bb
+++ b/meta-openembedded/meta-oe/recipes-gnome/gtk+/gtkmm3_3.24.7.bb
@@ -10,7 +10,6 @@
 
 BPN = "gtkmm"
 
-GNOMEBASEBUILDCLASS = "meson"
 
 inherit gnomebase features_check
 
diff --git a/meta-openembedded/meta-oe/recipes-gnome/gtk+/gtkmm_2.24.5.bb b/meta-openembedded/meta-oe/recipes-gnome/gtk+/gtkmm_2.24.5.bb
index 54e75a2..87b0f5e 100644
--- a/meta-openembedded/meta-oe/recipes-gnome/gtk+/gtkmm_2.24.5.bb
+++ b/meta-openembedded/meta-oe/recipes-gnome/gtk+/gtkmm_2.24.5.bb
@@ -8,6 +8,7 @@
 
 DEPENDS = "atkmm pangomm glibmm gtk+ cairomm"
 
+GNOMEBASEBUILDCLASS = "autotools"
 inherit gnomebase features_check
 
 REQUIRED_DISTRO_FEATURES = "x11"
diff --git a/meta-openembedded/meta-oe/recipes-gnome/libpeas/libpeas_1.36.0.bb b/meta-openembedded/meta-oe/recipes-gnome/libpeas/libpeas_1.36.0.bb
index 9920603..016981f 100644
--- a/meta-openembedded/meta-oe/recipes-gnome/libpeas/libpeas_1.36.0.bb
+++ b/meta-openembedded/meta-oe/recipes-gnome/libpeas/libpeas_1.36.0.bb
@@ -5,7 +5,6 @@
 
 DEPENDS = "gtk+3"
 
-GNOMEBASEBUILDCLASS = "meson"
 GTKDOC_MESON_OPTION = "gtk_doc"
 
 inherit gnomebase gobject-introspection gi-docgen gtk-icon-cache features_check
diff --git a/meta-openembedded/meta-oe/recipes-gnome/vte9/vte9.inc b/meta-openembedded/meta-oe/recipes-gnome/vte9/vte9.inc
deleted file mode 100644
index 2a16539..0000000
--- a/meta-openembedded/meta-oe/recipes-gnome/vte9/vte9.inc
+++ /dev/null
@@ -1,18 +0,0 @@
-SUMMARY = "Virtual terminal emulator GTK+ widget library"
-BUGTRACKER = "https://bugzilla.gnome.org/buglist.cgi?product=vte"
-LICENSE = "LGPL-2.0-only"
-DEPENDS = "glib-2.0-native glib-2.0 gtk+ intltool-native gnome-common-native ncurses"
-RDEPENDS:libvte = "vte-termcap"
-
-# help gnomebase get the SRC_URI correct
-GNOMEBN = "vte"
-S = "${WORKDIR}/vte-${PV}"
-
-inherit gnomebase gtk-doc features_check upstream-version-is-even gobject-introspection
-ANY_OF_DISTRO_FEATURES = "${GTK2DISTROFEATURES}"
-
-EXTRA_OECONF = "--disable-python"
-
-PACKAGES =+ "libvte9 vte9-termcap"
-FILES:libvte9 = "${libdir}/*.so.* ${libexecdir}/gnome-pty-helper"
-FILES:vte9-termcap = "${datadir}/vte/termcap-0.0"
diff --git a/meta-openembedded/meta-oe/recipes-gnome/vte9/vte9_0.28.2.bb b/meta-openembedded/meta-oe/recipes-gnome/vte9/vte9_0.28.2.bb
deleted file mode 100644
index 72bc9ec..0000000
--- a/meta-openembedded/meta-oe/recipes-gnome/vte9/vte9_0.28.2.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-require vte9.inc
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=3bf50002aefd002f49e7bb854063f7e7"
-
-SRC_URI += "file://obsolete_automake_macros.patch \
-            file://cve-2012-2738.patch \
-           "
-
-CFLAGS += "-D_GNU_SOURCE"
-
-SRC_URI[archive.md5sum] = "497f26e457308649e6ece32b3bb142ff"
-SRC_URI[archive.sha256sum] = "86cf0b81aa023fa93ed415653d51c96767f20b2d7334c893caba71e42654b0ae"
diff --git a/meta-openembedded/meta-oe/recipes-gnome/vte9/vte9_0.74.1.bb b/meta-openembedded/meta-oe/recipes-gnome/vte9/vte9_0.74.1.bb
new file mode 100644
index 0000000..a10b917
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-gnome/vte9/vte9_0.74.1.bb
@@ -0,0 +1,30 @@
+SUMMARY = "Virtual terminal emulator GTK+ widget library"
+BUGTRACKER = "https://bugzilla.gnome.org/buglist.cgi?product=vte"
+LICENSE = "LGPL-3.0-only"
+LIC_FILES_CHKSUM = "file://COPYING.LGPL3;md5=b52f2d57d10c4f7ee67a7eb9615d5d24"
+
+DEPENDS = "glib-2.0-native glib-2.0 gnutls gtk+3 gtk4 intltool-native gnome-common-native ncurses"
+
+# help gnomebase get the SRC_URI correct
+GNOMEBN = "vte"
+S = "${WORKDIR}/vte-${PV}"
+
+SRC_URI[archive.sha256sum] = "2328c3f1c998350a18e0e513348e9fc581d57ea4e7b89aedf11e0e3c65042b4f"
+
+inherit gnomebase gi-docgen gobject-introspection features_check systemd upstream-version-is-even vala
+ANY_OF_DISTRO_FEATURES = "${GTK2DISTROFEATURES}"
+GIR_MESON_OPTION = "gir"
+GIDOCGEN_MESON_OPTION = "docs"
+
+PACKAGECONFIG ?= "gnutls ${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
+PACKAGECONFIG[gnutls] = "-Dgnutls=true,-Dgnutls=false,gnutls"
+PACKAGECONFIG[fribidi] = "-Dfribidi=true,-Dfribidi=false,fribidi"
+PACKAGECONFIG[systemd] = "-D_systemd=true,-D_systemd=false,"
+
+CFLAGS += "-D_GNU_SOURCE"
+
+PACKAGES =+ "libvte9 vte9-termcap"
+FILES:libvte9 = "${libdir}/*.so.* ${libexecdir}/gnome-pty-helper ${datadir}/glade ${systemd_user_unitdir}"
+FILES:vte9-termcap = "${datadir}/vte/termcap-0.0"
+
+RDEPENDS:libvte = "vte-termcap"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/cairo/cairomm-1.16_1.16.2.bb b/meta-openembedded/meta-oe/recipes-graphics/cairo/cairomm-1.16_1.18.0.bb
similarity index 76%
rename from meta-openembedded/meta-oe/recipes-graphics/cairo/cairomm-1.16_1.16.2.bb
rename to meta-openembedded/meta-oe/recipes-graphics/cairo/cairomm-1.16_1.18.0.bb
index c1e271f..a6872ef 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/cairo/cairomm-1.16_1.16.2.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/cairo/cairomm-1.16_1.18.0.bb
@@ -3,13 +3,12 @@
 LICENSE = "LGPL-2.0-only"
 LIC_FILES_CHKSUM = "file://COPYING;md5=c46bda00ffbb0ba1dac22f8d087f54d9"
 
-GNOMEBASEBUILDCLASS = "meson"
 inherit gnomebase
 
 DEPENDS += "boost cairo libsigc++-3"
 
 SRC_URI = "https://www.cairographics.org/releases/cairomm-${PV}.tar.xz"
-SRC_URI[sha256sum] = "6a63bf98a97dda2b0f55e34d1b5f3fb909ef8b70f9b8d382cb1ff3978e7dc13f"
+SRC_URI[sha256sum] = "b81255394e3ea8e8aa887276d22afa8985fc8daef60692eb2407d23049f03cfb"
 
 S = "${WORKDIR}/cairomm-${PV}"
 
diff --git a/meta-openembedded/meta-oe/recipes-graphics/cairo/cairomm_1.14.3.bb b/meta-openembedded/meta-oe/recipes-graphics/cairo/cairomm_1.14.3.bb
index 8123509..54a2b07 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/cairo/cairomm_1.14.3.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/cairo/cairomm_1.14.3.bb
@@ -3,7 +3,6 @@
 LICENSE = "LGPL-2.0-only"
 LIC_FILES_CHKSUM = "file://COPYING;md5=c46bda00ffbb0ba1dac22f8d087f54d9"
 
-GNOMEBASEBUILDCLASS = "meson"
 inherit gnomebase
 
 DEPENDS += "boost cairo libsigc++-2.0"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/feh/feh_3.10.bb b/meta-openembedded/meta-oe/recipes-graphics/feh/feh_3.10.1.bb
similarity index 78%
rename from meta-openembedded/meta-oe/recipes-graphics/feh/feh_3.10.bb
rename to meta-openembedded/meta-oe/recipes-graphics/feh/feh_3.10.1.bb
index ec18f11..40145b8 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/feh/feh_3.10.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/feh/feh_3.10.1.bb
@@ -2,14 +2,14 @@
 HOMEPAGE = "https://feh.finalrewind.org/"
 SECTION = "x11/utils"
 LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=f91bd06901085c94bdc50649d98c5059"
+LIC_FILES_CHKSUM = "file://COPYING;md5=150e4c518ff8aaecfe35694e47661d9a"
 DEPENDS = "\
     imlib2 \
     virtual/libx11 libxt\
 "
 
 SRC_URI = "https://feh.finalrewind.org/feh-${PV}.tar.bz2"
-SRC_URI[sha256sum] = "1d71d1f6dcfe9ffee5e2766969a11978f7eb4fac7d7ae556f104c11f9c57cc98"
+SRC_URI[sha256sum] = "ec5e44d3cfe6f50f1c64f28a6f0225d958f4f4621726d9c2a04b5a32e5106d23"
 
 inherit mime-xdg features_check
 # depends on virtual/libx11
diff --git a/meta-openembedded/meta-oe/recipes-graphics/imlib2/imlib2_git.bb b/meta-openembedded/meta-oe/recipes-graphics/imlib2/imlib2_git.bb
index 9b8849b..113b866 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/imlib2/imlib2_git.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/imlib2/imlib2_git.bb
@@ -7,8 +7,8 @@
 
 DEPENDS = "freetype "
 PROVIDES = "virtual/imlib2"
-PV = "1.7.1"
-SRCREV = "01424487e360383a039dc123bc2a345fe7ea2535"
+PV = "1.12.1"
+SRCREV = "9198db25369f04db069ce61a661c3c47b2622655"
 
 inherit autotools pkgconfig lib_package
 
@@ -28,7 +28,6 @@
 PACKAGECONFIG[tiff] = "--with-tiff,--without-tiff,tiff"
 PACKAGECONFIG[webp] = "--with-webp,--without-webp,libwebp"
 
-PACKAGECONFIG[bzip2] = "--with-bzip2,--without-bzip2,bzip2"
 PACKAGECONFIG[zlib] = "--with-zlib,--without-zlib,zlib"
 
 PACKAGECONFIG[id3] = "--with-id3,--without-id3,libid3tag"
@@ -37,6 +36,3 @@
 FILES:${PN}-data = "${datadir}"
 FILES:imlib2-loaders = "${libdir}/imlib2/loaders/*.so"
 FILES:imlib2-filters = "${libdir}/imlib2/filters/*.so"
-
-inherit multilib_script
-MULTILIB_SCRIPTS = "${PN}-bin:${bindir}/imlib2-config"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/libdecor/libdecor_0.1.99.bb b/meta-openembedded/meta-oe/recipes-graphics/libdecor/libdecor_0.2.0.bb
similarity index 93%
rename from meta-openembedded/meta-oe/recipes-graphics/libdecor/libdecor_0.1.99.bb
rename to meta-openembedded/meta-oe/recipes-graphics/libdecor/libdecor_0.2.0.bb
index 078058e..7c1ebc1 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/libdecor/libdecor_0.1.99.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/libdecor/libdecor_0.2.0.bb
@@ -15,7 +15,7 @@
 "
 
 S = "${WORKDIR}/git"
-SRCREV = "0d63d125f899dbb1b932468f2f3b911f9c121e58"
+SRCREV = "ad320fc0e0ec2cd75a87fed454a9c7d6d1921464"
 
 PACKAGECONFIG ?= "dbus ${@bb.utils.filter('DISTRO_FEATURES', 'gtk+3', d)}"
 
diff --git a/meta-openembedded/meta-oe/recipes-graphics/lvgl/lv-drivers.inc b/meta-openembedded/meta-oe/recipes-graphics/lvgl/lv-drivers.inc
index dcf1ad1..6cfb7fa 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/lvgl/lv-drivers.inc
+++ b/meta-openembedded/meta-oe/recipes-graphics/lvgl/lv-drivers.inc
@@ -17,6 +17,8 @@
 LVGL_CONFIG_WAYLAND_HOR_RES ?= "480"
 LVGL_CONFIG_WAYLAND_VER_RES ?= "320"
 
+ALLOW_EMPTY:${PN} = "1"
+
 EXTRA_OECMAKE += "-Dinstall:BOOL=ON -DLIB_INSTALL_DIR=${baselib}"
 
 do_configure:append() {
diff --git a/meta-openembedded/meta-oe/recipes-graphics/lvgl/lvgl_8.3.9.bb b/meta-openembedded/meta-oe/recipes-graphics/lvgl/lvgl_8.3.10.bb
similarity index 94%
rename from meta-openembedded/meta-oe/recipes-graphics/lvgl/lvgl_8.3.9.bb
rename to meta-openembedded/meta-oe/recipes-graphics/lvgl/lvgl_8.3.10.bb
index dc681c2..7dd36ca 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/lvgl/lvgl_8.3.9.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/lvgl/lvgl_8.3.10.bb
@@ -9,13 +9,15 @@
 LIC_FILES_CHKSUM = "file://LICENCE.txt;md5=bf1198c89ae87f043108cea62460b03a"
 
 SRC_URI = "git://github.com/lvgl/lvgl;protocol=https;branch=release/v8.3"
-SRCREV = "9ec3b8706b098f60940cee6ac211d3cb3141aedf"
+SRCREV = "06e229cc7679c01119ca5d905a1f9dad96f475f0"
 
 inherit cmake
 
 EXTRA_OECMAKE = "-DLIB_INSTALL_DIR=${baselib}"
 S = "${WORKDIR}/git"
 
+ALLOW_EMPTY:${PN} = "1"
+
 LVGL_CONFIG_LV_MEM_CUSTOM ?= "0"
 LVGL_CONFIG_LV_COLOR_DEPTH ?= "32"
 
diff --git a/meta-openembedded/meta-oe/recipes-graphics/neatvnc/neatvnc_git.bb b/meta-openembedded/meta-oe/recipes-graphics/neatvnc/neatvnc_0.7.1.bb
similarity index 87%
rename from meta-openembedded/meta-oe/recipes-graphics/neatvnc/neatvnc_git.bb
rename to meta-openembedded/meta-oe/recipes-graphics/neatvnc/neatvnc_0.7.1.bb
index 8344015..99e6331 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/neatvnc/neatvnc_git.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/neatvnc/neatvnc_0.7.1.bb
@@ -4,11 +4,9 @@
 LICENSE = "ISC"
 LIC_FILES_CHKSUM = "file://COPYING;md5=94fc374e7174f41e3afe0f027ee59ff7"
 
-SRC_URI = "git://github.com/any1/neatvnc;branch=master;protocol=https"
+SRC_URI = "git://github.com/any1/neatvnc;branch=v0.7;protocol=https"
 
-SRCREV = "8b3dc1ae6099dcfa73aec3ae11df2fdc58540d14"
-
-PV = "0.6.0+git${SRCPV}"
+SRCREV = "b5b330b22c6a0fdeb718a9e7ee0732cc406863fa"
 
 S = "${WORKDIR}/git"
 
diff --git a/meta-openembedded/meta-oe/recipes-graphics/openbox/openbox_3.6.1.bb b/meta-openembedded/meta-oe/recipes-graphics/openbox/openbox_3.6.1.bb
index 4c97c03..9a15077 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/openbox/openbox_3.6.1.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/openbox/openbox_3.6.1.bb
@@ -1,6 +1,6 @@
 SUMMARY = "openbox Window Manager"
 SECTION = "x11/wm"
-DEPENDS = "glib-2.0 pango libxml2 virtual/libx11 libcroco librsvg gdk-pixbuf"
+DEPENDS = "glib-2.0 pango libxml2 virtual/libx11 librsvg gdk-pixbuf"
 LICENSE = "GPL-2.0-or-later"
 LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
 
diff --git a/meta-openembedded/meta-oe/recipes-graphics/openjpeg/openjpeg_2.5.0.bb b/meta-openembedded/meta-oe/recipes-graphics/openjpeg/openjpeg_2.5.0.bb
index c71e535..f2d7407 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/openjpeg/openjpeg_2.5.0.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/openjpeg/openjpeg_2.5.0.bb
@@ -18,4 +18,4 @@
 
 FILES:${PN} += "${libdir}/openjpeg*"
 
-BBCLASSEXTEND = "native nativesdk"
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/pango/pangomm-2.48_2.50.1.bb b/meta-openembedded/meta-oe/recipes-graphics/pango/pangomm-2.48_2.50.1.bb
index b4079f7..86787a6 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/pango/pangomm-2.48_2.50.1.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/pango/pangomm-2.48_2.50.1.bb
@@ -6,7 +6,6 @@
 
 DEPENDS = "mm-common cairomm-1.16 glibmm-2.68 pango"
 
-GNOMEBASEBUILDCLASS = "meson"
 GNOMEBN = "pangomm"
 inherit gnomebase features_check
 
diff --git a/meta-openembedded/meta-oe/recipes-graphics/pango/pangomm_2.46.2.bb b/meta-openembedded/meta-oe/recipes-graphics/pango/pangomm_2.46.2.bb
index 42074c1..da822f3 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/pango/pangomm_2.46.2.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/pango/pangomm_2.46.2.bb
@@ -6,7 +6,6 @@
 
 DEPENDS = "mm-common cairomm glibmm pango"
 
-GNOMEBASEBUILDCLASS = "meson"
 
 inherit gnomebase features_check
 
diff --git a/meta-openembedded/meta-oe/recipes-graphics/tesseract/tesseract_5.3.2.bb b/meta-openembedded/meta-oe/recipes-graphics/tesseract/tesseract_5.3.3.bb
similarity index 91%
rename from meta-openembedded/meta-oe/recipes-graphics/tesseract/tesseract_5.3.2.bb
rename to meta-openembedded/meta-oe/recipes-graphics/tesseract/tesseract_5.3.3.bb
index db66e89..e5310ae 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/tesseract/tesseract_5.3.2.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/tesseract/tesseract_5.3.3.bb
@@ -5,7 +5,7 @@
 LICENSE = "Apache-2.0"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
 
-SRCREV = "489f101c7e2276c00490f3ab70e9e7926fc6b481"
+SRCREV = "e082522c248d3121e466959a8ba4fd4f7ad1a525"
 SRC_URI = "git://github.com/${BPN}-ocr/${BPN}.git;branch=main;protocol=https"
 
 S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xkbutils_1.0.5.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xkbutils_1.0.5.bb
index a672ba5..f078ad6 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xkbutils_1.0.5.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xkbutils_1.0.5.bb
@@ -13,7 +13,5 @@
 
 DEPENDS += "libxaw libxkbfile"
 
-BBCLASSEXTEND = "native"
-
 SRC_URI_EXT = "xz"
 SRC_URI[sha256sum] = "f6a4a8e9c54582beb3787b1faa8168caab125c1fee0ca9cfa5b6c9c1df25eea4"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xsetroot_1.1.2.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xsetroot_1.1.2.bb
index 30a1e08..a9a8acf 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xsetroot_1.1.2.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xsetroot_1.1.2.bb
@@ -8,7 +8,6 @@
 LIC_FILES_CHKSUM = "file://COPYING;md5=6ea29dbee22324787c061f039e0529de"
 
 DEPENDS += "xbitmaps libxcursor"
-BBCLASSEXTEND = "native"
 
 SRC_URI[md5sum] = "5fe769c8777a6e873ed1305e4ce2c353"
 SRC_URI[sha256sum] = "10c442ba23591fb5470cea477a0aa5f679371f4f879c8387a1d9d05637ae417c"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xterm_384.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xterm_388.bb
similarity index 94%
rename from meta-openembedded/meta-oe/recipes-graphics/xorg-app/xterm_384.bb
rename to meta-openembedded/meta-oe/recipes-graphics/xorg-app/xterm_388.bb
index ae046b1..8578f0c 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xterm_384.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xterm_388.bb
@@ -8,7 +8,7 @@
            file://0001-Add-configure-time-check-for-setsid.patch \
           "
 
-SRC_URI[sha256sum] = "31ef870740ceae020c3c4b4a9601c7f47bfd46672c1aaf2d213a565d64cbc373"
+SRC_URI[sha256sum] = "ac429345e6f937a5945a89d425a265fee6c215fc669dbdc6a0326e21f4c5f674"
 
 PACKAGECONFIG ?= ""
 PACKAGECONFIG[xft] = "--enable-freetype,--disable-freetype,libxft fontconfig freetype-native"
diff --git a/meta-openembedded/meta-oe/recipes-kernel/ipmitool/ipmitool/0001-configure-Remove-the-logic-to-download-IANA-PEN-data.patch b/meta-openembedded/meta-oe/recipes-kernel/ipmitool/ipmitool/0001-configure-Remove-the-logic-to-download-IANA-PEN-data.patch
deleted file mode 100644
index 442f132..0000000
--- a/meta-openembedded/meta-oe/recipes-kernel/ipmitool/ipmitool/0001-configure-Remove-the-logic-to-download-IANA-PEN-data.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-From 63d72f97bd106dd2101cd7fdac6df4f7a053d67c Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 2 Sep 2022 08:27:39 -0700
-Subject: [PATCH] configure: Remove the logic to download IANA PEN database
- during configure
-
-OE will do all downloading before it starts to configure therefore this
-step is moved out into bitbake recipe, so we can make it immutable build
-
-Upstream-Status: Inappropriate [OE-Specific]
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- configure.ac | 16 +---------------
- 1 file changed, 1 insertion(+), 15 deletions(-)
-
---- a/configure.ac
-+++ b/configure.ac
-@@ -56,21 +56,7 @@ if test "x$exec_prefix" = "xNONE"; then
- 	exec_prefix="$prefix"
- fi
- 
--if test "x$WGET" = "x"; then
--	if test "x$CURL" = "x"; then
--		AC_MSG_WARN([** Neither wget nor curl could be found.])
--		AC_MSG_WARN([** IANA PEN database will not be installed by `make install` !])
--	else
--		DOWNLOAD="$CURL --location --progress-bar"
--		AM_CONDITIONAL([DOWNLOAD], [true])
--	fi
--else
--	DOWNLOAD="$WGET -c -nd -O -"
--	AM_CONDITIONAL([DOWNLOAD], [true])
--fi
--
--AC_MSG_WARN([** Download is:])
--AC_MSG_WARN($DOWNLOAD)
-+AM_CONDITIONAL([DOWNLOAD], [false])
- AC_SUBST(DOWNLOAD, $DOWNLOAD)
- 
- dnl
diff --git a/meta-openembedded/meta-oe/recipes-kernel/ipmitool/ipmitool_1.8.19.bb b/meta-openembedded/meta-oe/recipes-kernel/ipmitool/ipmitool_1.8.19.bb
index ab9074b..a8279f5 100644
--- a/meta-openembedded/meta-oe/recipes-kernel/ipmitool/ipmitool_1.8.19.bb
+++ b/meta-openembedded/meta-oe/recipes-kernel/ipmitool/ipmitool_1.8.19.bb
@@ -21,10 +21,9 @@
 LIC_FILES_CHKSUM = "file://COPYING;md5=9aa91e13d644326bf281924212862184"
 
 DEPENDS = "openssl readline ncurses"
-SRCREV = "19d78782d795d0cf4ceefe655f616210c9143e62"
+SRCREV = "ab5ce5baff097ebb6e2a17a171858be213ee68d3"
 SRC_URI = "git://codeberg.org/ipmitool/ipmitool;protocol=https;branch=master \
            ${IANA_ENTERPRISE_NUMBERS} \
-           file://0001-configure-Remove-the-logic-to-download-IANA-PEN-data.patch \
            "
 IANA_ENTERPRISE_NUMBERS ?= ""
 
@@ -34,7 +33,7 @@
 
 S = "${WORKDIR}/git"
 
-inherit autotools
+inherit autotools pkgconfig
 
 do_install:append() {
         if [ -e ${WORKDIR}/iana-enterprise-numbers ]; then
@@ -50,5 +49,10 @@
 # --enable-file-security adds some security checks
 # --disable-intf-free disables FreeIPMI support - we don't want to depend on
 #   FreeIPMI libraries, FreeIPMI has its own ipmitoool-like utility.
+# --disable-registry-download prevents the IANA numbers from being fetched
+#   at build time, as it is not repeatable.
 #
-EXTRA_OECONF = "--disable-dependency-tracking --enable-file-security --disable-intf-free"
+EXTRA_OECONF = "--disable-dependency-tracking --enable-file-security --disable-intf-free \
+                --disable-registry-download \
+                "
+
diff --git a/meta-openembedded/meta-oe/recipes-kernel/libbpf/libbpf_1.2.0.bb b/meta-openembedded/meta-oe/recipes-kernel/libbpf/libbpf_1.2.2.bb
similarity index 91%
rename from meta-openembedded/meta-oe/recipes-kernel/libbpf/libbpf_1.2.0.bb
rename to meta-openembedded/meta-oe/recipes-kernel/libbpf/libbpf_1.2.2.bb
index a8e1e5c..8dbf793 100644
--- a/meta-openembedded/meta-oe/recipes-kernel/libbpf/libbpf_1.2.0.bb
+++ b/meta-openembedded/meta-oe/recipes-kernel/libbpf/libbpf_1.2.2.bb
@@ -8,8 +8,8 @@
 
 DEPENDS = "zlib elfutils"
 
-SRC_URI = "git://github.com/libbpf/libbpf.git;protocol=https;branch=master"
-SRCREV = "fbd60dbff51c870f5e80a17c4f2fd639eb80af90"
+SRC_URI = "git://github.com/libbpf/libbpf.git;protocol=https;branch=libbpf-v1.2.2-bugfix"
+SRCREV = "1728e3e4bef0e138ea95ffe62163eb9a6ac6fa32"
 
 PACKAGE_ARCH = "${MACHINE_ARCH}"
 COMPATIBLE_HOST = "(x86_64|i.86|arm|aarch64|riscv64|powerpc|powerpc64|mips64).*-linux"
diff --git a/meta-openembedded/meta-oe/recipes-kernel/makedumpfile/makedumpfile_1.7.3.bb b/meta-openembedded/meta-oe/recipes-kernel/makedumpfile/makedumpfile_1.7.4.bb
similarity index 90%
rename from meta-openembedded/meta-oe/recipes-kernel/makedumpfile/makedumpfile_1.7.3.bb
rename to meta-openembedded/meta-oe/recipes-kernel/makedumpfile/makedumpfile_1.7.4.bb
index 0ae691b..b016d5d 100644
--- a/meta-openembedded/meta-oe/recipes-kernel/makedumpfile/makedumpfile_1.7.3.bb
+++ b/meta-openembedded/meta-oe/recipes-kernel/makedumpfile/makedumpfile_1.7.4.bb
@@ -11,13 +11,14 @@
 LICENSE = "GPL-2.0-only"
 
 SRCBRANCH ?= "master"
-SRCREV = "ecc9355e1344d3de94870e855e380ee84224e552"
+SRCREV = "3bc3b3e3be33a9aa040e654f055912063e576c1b"
 
 DEPENDS = "bzip2 zlib elfutils xz"
 RDEPENDS:${PN}-tools = "perl ${PN}"
 
-# mips would not compile.
-COMPATIBLE_HOST = "(x86_64|i.86|powerpc|arm|aarch64).*-linux"
+# mips/rv32 would not compile.
+COMPATIBLE_HOST:mipsarcho32 = "null"
+COMPATIBLE_HOST:riscv32 = "null"
 
 PACKAGES =+ "${PN}-tools"
 FILES:${PN}-tools = "${bindir}/*.pl"
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/jack/jack_1.19.22.bb b/meta-openembedded/meta-oe/recipes-multimedia/jack/jack_1.9.22.bb
similarity index 74%
rename from meta-openembedded/meta-oe/recipes-multimedia/jack/jack_1.19.22.bb
rename to meta-openembedded/meta-oe/recipes-multimedia/jack/jack_1.9.22.bb
index 104b946..b5c52a6 100644
--- a/meta-openembedded/meta-oe/recipes-multimedia/jack/jack_1.19.22.bb
+++ b/meta-openembedded/meta-oe/recipes-multimedia/jack/jack_1.9.22.bb
@@ -6,10 +6,12 @@
 been used to have a more dynamic and robust system."
 SECTION = "libs/multimedia"
 
-LICENSE = "GPL-2.0-only & LGPL-2.1-only"
+LICENSE = "GPL-2.0-only & GPL-2.0-or-later & LGPL-2.1-or-later"
 LIC_FILES_CHKSUM = " \
-    file://common/jack/control.h;beginline=2;endline=21;md5=e6df0bf30cde8b3b825451459488195d \
-    file://common/jack/jack.h;beginline=1;endline=19;md5=6b736ed6b810592b135480a5e853392e \
+    file://common/JackControlAPI.cpp;beginline=5;endline=19;md5=9d1921199e203163f160313243f853d6 \
+    file://common/JackControlAPI.h;beginline=4;endline=18;md5=9d1921199e203163f160313243f853d6 \
+    file://common/jack/jack.h;beginline=2;endline=17;md5=0a668d22ce661159cad28d1c3b8e66af \
+    file://common/JackServer.h;beginline=2;endline=17;md5=9bf0870727804a994ee2d19fd368d940 \
 "
 
 DEPENDS = "libsamplerate0 libsndfile1"
@@ -17,6 +19,8 @@
 SRC_URI = "git://github.com/jackaudio/jack2.git;branch=master;protocol=https"
 SRCREV = "4f58969432339a250ce87fe855fb962c67d00ddb"
 
+UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>\d+(\.\d+)+)"
+
 S = "${WORKDIR}/git"
 
 inherit waf pkgconfig
@@ -50,4 +54,3 @@
 
 FILES:${PN}-doc += " ${datadir}/jack-audio-connection-kit/reference/html/*"
 
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/webm/libvpx_1.13.1.bb b/meta-openembedded/meta-oe/recipes-multimedia/webm/libvpx_1.13.1.bb
index eab5546..1354e2e 100644
--- a/meta-openembedded/meta-oe/recipes-multimedia/webm/libvpx_1.13.1.bb
+++ b/meta-openembedded/meta-oe/recipes-multimedia/webm/libvpx_1.13.1.bb
@@ -24,8 +24,6 @@
 export CC
 export LD = "${CC}"
 
-VPXTARGET:armv5te = "armv5te-linux-gcc"
-VPXTARGET:armv6 = "armv6-linux-gcc"
 VPXTARGET:armv7a = "${@bb.utils.contains("TUNE_FEATURES","neon","armv7-linux-gcc","generic-gnu",d)}"
 VPXTARGET ?= "generic-gnu"
 
diff --git a/meta-openembedded/meta-oe/recipes-navigation/geos/geos_3.12.0.bb b/meta-openembedded/meta-oe/recipes-navigation/geos/geos_3.12.0.bb
index 95cb297..0382e6b 100644
--- a/meta-openembedded/meta-oe/recipes-navigation/geos/geos_3.12.0.bb
+++ b/meta-openembedded/meta-oe/recipes-navigation/geos/geos_3.12.0.bb
@@ -13,7 +13,7 @@
 PACKAGES =+ "geoslib ${PN}-c1"
 
 DESCRIPTION:${PN}lib = "Geometry engine for Geographic Information Systems - C++ Library"
-FILES:${PN}lib += "${libdir}/libgeos-${PV}.so"
+FILES:${PN}lib += "${libdir}/libgeos.so.*"
 
 DESCRIPTION:${PN}-c1 = "Geometry engine for Geographic Information Systems - C Library"
 FILES:${PN}-c1 += "${libdir}/libgeos_c.so.*"
diff --git a/meta-openembedded/meta-oe/recipes-navigation/proj/proj_9.1.1.bb b/meta-openembedded/meta-oe/recipes-navigation/proj/proj_9.3.0.bb
similarity index 89%
rename from meta-openembedded/meta-oe/recipes-navigation/proj/proj_9.1.1.bb
rename to meta-openembedded/meta-oe/recipes-navigation/proj/proj_9.3.0.bb
index 6ce1c88..59bded8 100644
--- a/meta-openembedded/meta-oe/recipes-navigation/proj/proj_9.1.1.bb
+++ b/meta-openembedded/meta-oe/recipes-navigation/proj/proj_9.3.0.bb
@@ -6,7 +6,7 @@
 DEPENDS = "sqlite3 sqlite3-native"
 
 SRC_URI = "http://download.osgeo.org/${BPN}/${BP}.tar.gz"
-SRC_URI[sha256sum] = "003cd4010e52bb5eb8f7de1c143753aa830c8902b6ed01209f294846e40e6d39"
+SRC_URI[sha256sum] = "91a3695a004ea28db0448a34460bed4cc3b130e5c7d74339ec999efdab0e547d"
 
 inherit cmake lib_package
 
diff --git a/meta-openembedded/meta-oe/recipes-printing/cups/cups-filters_1.28.17.bb b/meta-openembedded/meta-oe/recipes-printing/cups/cups-filters_1.28.17.bb
deleted file mode 100644
index fd82bb3..0000000
--- a/meta-openembedded/meta-oe/recipes-printing/cups/cups-filters_1.28.17.bb
+++ /dev/null
@@ -1,84 +0,0 @@
-DESCRIPTION = "CUPS backends, filters, and other software"
-HOMEPAGE = "http://www.linuxfoundation.org/collaborate/workgroups/openprinting/cups-filters"
-
-LICENSE = "GPL-2.0-only & LGPL-2.0-only & MIT & GPL-2.0-or-later & GPL-3.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=2d77679ce6a2cc4d873d4ebbf2a401e6"
-
-SECTION = "console/utils"
-
-DEPENDS = "cups glib-2.0 glib-2.0-native dbus dbus-glib lcms poppler qpdf libpng libexif"
-DEPENDS:class-native = "poppler-native glib-2.0-native dbus-native pkgconfig-native gettext-native libpng-native"
-
-SRC_URI = "https://github.com/OpenPrinting/${BPN}/releases/download/${PV}/${BP}.tar.xz \
-           file://0001-use-noexcept-false-instead-of-throw-from-c-17-onward.patch"
-SRC_URI[sha256sum] = "270a3752a960368aa99d431fb5d34f4039b2ac943c576d840612d1d8185c9bb9"
-
-inherit autotools-brokensep gettext pkgconfig github-releases
-
-EXTRA_OECONF += " --disable-ldap \
-                       --with-pdftops=hybrid --enable-imagefilters \
-                       --enable-ghostscript --with-gs-path=${bindir}/gs \
-                       --with-pdftops-path=${bindir}/gs \
-                       --with-fontdir=${datadir}/fonts --with-rcdir=no \
-                       --with-cups-rundir=${localstatedir}/run/cups \
-                       --localstatedir=${localstatedir}/var \
-                       --with-rcdir=no \
-                       --without-php"
-
-EXTRA_OECONF:class-native += " --with-pdftops=pdftops \
-                                    --disable-avahi --disable-ghostscript \
-                                    --disable-ldap \
-                                    --with-png --without-jpeg --without-tiff"
-
-BBCLASSEXTEND = "native"
-
-PACKAGECONFIG[jpeg] = "--with-jpeg,--without-jpeg,jpeg"
-PACKAGECONFIG[png] = "--with-png,--without-png,libpng"
-PACKAGECONFIG[tiff] = "--with-tiff,--without-tiff,tiff"
-
-PACKAGECONFIG ??= "dbus ${@bb.utils.contains('DISTRO_FEATURES', 'zeroconf', 'avahi', '', d)}"
-
-PACKAGECONFIG[avahi] = "--enable-avahi,--disable-avahi,avahi"
-PACKAGECONFIG[dbus] = "--enable-dbus,--disable-dbus,,dbus"
-
-DIRFILES = "1"
-
-PACKAGES =+ "\
-	${PN}-gst \
-        ${PN}-data \
-        "
-
-FILES:${PN}-gst = "\
-	${libexecdir}/cups/filter/gsto* \
-	"
-RDEPENDS:${PN}-gst += "ghostscript"
-
-FILES:${PN}-data = "\
-	${datadir}/cups/data \
-	"
-
-FILES:${PN}-dbg += "\
-	${libexecdir}/cups/backend/.debug \
-	${libexecdir}/cups/driver/.debug \
-	${libexecdir}/cups/filter/.debug \
-	"
-
-FILES:${PN} += "\
-        ${libexecdir}/cups \
-        ${datadir}/ppd/ \
-        ${datadir}/cups/charsets \
-        ${datadir}/cups/drv \
-        ${datadir}/cups/mime \
-        ${datadir}/cups/ppdc \
-        ${datadir}/cups/banners \
-"
-RDEPENDS:${PN} += "bash"
-RDEPENDS:${PN} += "ghostscript"
-
-do_install:append() {
-	# remove braille dir
-	rm -rf ${D}${datadir}/cups/braille
-
-	# remove sysroot path contamination from pkgconfig file
-	sed -i -e 's:${STAGING_DIR_TARGET}::' ${D}/${libdir}/pkgconfig/libcupsfilters.pc
-}
diff --git a/meta-openembedded/meta-oe/recipes-printing/cups/cups-filters_2.0.0.bb b/meta-openembedded/meta-oe/recipes-printing/cups/cups-filters_2.0.0.bb
new file mode 100644
index 0000000..0370ae7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-printing/cups/cups-filters_2.0.0.bb
@@ -0,0 +1,27 @@
+DESCRIPTION = "CUPS backends, filters, and other software"
+HOMEPAGE = "http://www.linuxfoundation.org/collaborate/workgroups/openprinting/cups-filters"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=6d5b952b53dbe7752199903d082e5f07"
+
+DEPENDS = "libcupsfilters libppd glib-2.0 poppler"
+
+SRC_URI = "https://github.com/OpenPrinting/${BPN}/releases/download/${PV}/${BP}.tar.xz"
+SRC_URI[sha256sum] = "b5152e3dd148ed73835827ac2f219df7cf5808dbf9dbaec2aa0127b44de800d8"
+
+inherit autotools gettext pkgconfig github-releases
+
+EXTRA_OECONF += " \
+	--enable-imagefilters \
+	--enable-ghostscript --with-gs-path=${bindir}/gs \
+	--with-fontdir=${datadir}/fonts \
+	--localstatedir=${localstatedir} \
+"
+
+PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'zeroconf', 'avahi', '', d)}"
+PACKAGECONFIG[avahi] = "--enable-avahi,--disable-avahi,avahi"
+
+FILES:${PN} += "${datadir}"
+FILES:${PN}-dev += "${datadir}/ppdc"
+
+RDEPENDS:${PN} += "bash"
+RDEPENDS:${PN} += "ghostscript"
diff --git a/meta-openembedded/meta-oe/recipes-printing/cups/cups-filters/0001-use-noexcept-false-instead-of-throw-from-c-17-onward.patch b/meta-openembedded/meta-oe/recipes-printing/cups/libcupsfilters/0001-use-noexcept-false-instead-of-throw-from-c-17-onward.patch
similarity index 71%
rename from meta-openembedded/meta-oe/recipes-printing/cups/cups-filters/0001-use-noexcept-false-instead-of-throw-from-c-17-onward.patch
rename to meta-openembedded/meta-oe/recipes-printing/cups/libcupsfilters/0001-use-noexcept-false-instead-of-throw-from-c-17-onward.patch
index 5de8dae..72bbf10 100644
--- a/meta-openembedded/meta-oe/recipes-printing/cups/cups-filters/0001-use-noexcept-false-instead-of-throw-from-c-17-onward.patch
+++ b/meta-openembedded/meta-oe/recipes-printing/cups/libcupsfilters/0001-use-noexcept-false-instead-of-throw-from-c-17-onward.patch
@@ -15,22 +15,22 @@
  filter/pdftoraster.cxx | 4 ++++
  1 file changed, 4 insertions(+)
 
-diff --git a/filter/pdftoraster.cxx b/filter/pdftoraster.cxx
+diff --git a/cupsfilters/pdftoraster.cxx b/cupsfilters/pdftoraster.cxx
 index e8af184fb..e91e22459 100755
---- a/filter/pdftoraster.cxx
-+++ b/filter/pdftoraster.cxx
-@@ -2148,7 +2148,11 @@ int main(int argc, char *argv[]) {
- /* For compatibility with g++ >= 4.7 compilers _GLIBCXX_THROW
-  *  should be used as a guard, otherwise use traditional definition */
+@@ -2198,7 +2198,11 @@
+ // For compatibility with g++ >= 4.7 compilers _GLIBCXX_THROW
+ // should be used as a guard, otherwise use traditional definition
  #ifndef _GLIBCXX_THROW
+-#define _GLIBCXX_THROW throw
 +#if __cplusplus < 201703L
- #define _GLIBCXX_THROW throw
++#define _GLIBCXX_THROW throw
 +#else
 +#define _GLIBCXX_THROW(x) noexcept(false)
 +#endif
  #endif
  
  void * operator new(size_t size) _GLIBCXX_THROW (std::bad_alloc)
+
 -- 
 2.39.1
 
diff --git a/meta-openembedded/meta-oe/recipes-printing/cups/libcupsfilters_2.0.0.bb b/meta-openembedded/meta-oe/recipes-printing/cups/libcupsfilters_2.0.0.bb
new file mode 100644
index 0000000..7f7174d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-printing/cups/libcupsfilters_2.0.0.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "OpenPrinting libcupsfilters"
+HOMEPAGE = "https://github.com/OpenPrinting"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=aab2024bd2a475438a154cd1640c9684"
+
+DEPENDS = "cups fontconfig libexif dbus lcms qpdf poppler libpng jpeg tiff"
+
+SRC_URI = " \
+	https://github.com/OpenPrinting/${BPN}/releases/download/${PV}/${BP}.tar.xz \
+	file://0001-use-noexcept-false-instead-of-throw-from-c-17-onward.patch \
+"
+SRC_URI[sha256sum] = "542f2bfbc58136a4743c11dc8c86cee03c9aca705612654e36ac34aa0d9aa601"
+
+inherit autotools gettext pkgconfig github-releases
+
+FILES:${PN} += "${datadir}"
+RDEPENDS:${PN} += "ghostscript"
diff --git a/meta-openembedded/meta-oe/recipes-printing/cups/libppd_2.0.0.bb b/meta-openembedded/meta-oe/recipes-printing/cups/libppd_2.0.0.bb
new file mode 100644
index 0000000..99b1f6e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-printing/cups/libppd_2.0.0.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "OpenPrinting libppd"
+HOMEPAGE = "https://github.com/OpenPrinting"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=c1fca671047153ce6825c4ab06f2ab49"
+
+DEPENDS = "libcupsfilters"
+
+SRC_URI = "https://github.com/OpenPrinting/${BPN}/releases/download/${PV}/${BP}.tar.xz"
+SRC_URI[sha256sum] = "882d3c659a336e91559de8f3c76fc26197fe6e5539d9b484a596e29a5a4e0bc8"
+
+inherit autotools gettext pkgconfig github-releases
+
+do_install:append() {
+	rm -r ${D}${bindir}
+}
+
+FILES:${PN} += "${datadir}"
+
diff --git a/meta-openembedded/meta-oe/recipes-printing/gutenprint/gutenprint_git.bb b/meta-openembedded/meta-oe/recipes-printing/gutenprint/gutenprint_5.3.4.bb
similarity index 82%
rename from meta-openembedded/meta-oe/recipes-printing/gutenprint/gutenprint_git.bb
rename to meta-openembedded/meta-oe/recipes-printing/gutenprint/gutenprint_5.3.4.bb
index f0dc6ad..5263890 100644
--- a/meta-openembedded/meta-oe/recipes-printing/gutenprint/gutenprint_git.bb
+++ b/meta-openembedded/meta-oe/recipes-printing/gutenprint/gutenprint_5.3.4.bb
@@ -12,18 +12,14 @@
 DESCRIPTION = "Gutenprint printer drivers"
 HOMEPAGE = "http://gimp-print.sourceforge.net/"
 LICENSE = "GPL-2.0-or-later"
-
-SRC_URI = "git://git.code.sf.net/p/gimp-print/source;protocol=https;branch=master"
-SRCREV = "66b0a7bc3fd25659a3f295db0ebb39d04e413c01"
-PV = "5.3.3+git${SRCPV}"
-
-S = "${WORKDIR}/git"
-
 LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552"
 
+SRC_URI = "https://downloads.sourceforge.net/gimp-print/${BP}.tar.xz"
+SRC_URI[sha256sum] = "db44a701d2b8e6a8931c83cec06c91226be266d23e5c189d20a39dd175f2023b"
+
 inherit autotools gettext pkgconfig
 
-DEPENDS += "glib-2.0-native cups gutenprint-native"
+DEPENDS += "glib-2.0-native cups gutenprint-native tiff libusb libpng libjpeg-turbo ghostscript"
 # autogen.sh needs autopoint
 DEPENDS:class-native = "glib-2.0-native gettext-native"
 
@@ -36,18 +32,11 @@
     # So we are using the xmli18n-tmp.h created by gutenprint-native
     sed -i 's/all-local: xmli18n-tmp.h xml-stamp/all-local: xml-stamp/'  ${S}/src/xml/Makefile.am
     sed -i 's/dist-hook: xmli18n-tmp.h xml-stamp/dist-hook: xml-stamp/'  ${S}/src/xml/Makefile.am
+    sed -i '/$(AM_TESTS_ENVIRONMENT) .\/check_duplicate_printers.test/d'  ${S}/src/xml/printers/Makefile.am
     # Despite being a generated file, this needs to be in S.
     cp ${STAGING_DATADIR_NATIVE}/gutenprint/xmli18n-tmp.h ${S}/src/xml/
 }
 
-do_configure() {
-    # Need to call autogen.sh as that creates m4/stp_release.m4
-    cd ${S}
-    NOCONFIGURE=1 ./autogen.sh
-    cd ${B}
-    oe_runconf
-}
-
 do_install:append() {
     # This file contains build paths and isn't very useful, remove it
     rm -f ${D}${libdir}/gutenprint/*/config.summary
diff --git a/meta-openembedded/meta-oe/recipes-printing/qpdf/qpdf_10.6.3.bb b/meta-openembedded/meta-oe/recipes-printing/qpdf/qpdf_10.6.3.bb
deleted file mode 100644
index fa33daf..0000000
--- a/meta-openembedded/meta-oe/recipes-printing/qpdf/qpdf_10.6.3.bb
+++ /dev/null
@@ -1,33 +0,0 @@
-DESCRIPTION = "PDF transformation/inspection software"
-HOMEPAGE = "http://qpdf.sourceforge.net"
-LICENSE = "Artistic-2.0"
-SECTION = "libs"
-DEPENDS = "libpcre zlib libjpeg-turbo"
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/qpdf/qpdf-${PV}.tar.gz"
-SRC_URI[sha256sum] = "e8fc23b2a584ea68c963a897515d3eb3129186741dd19d13c86d31fa33493811"
-
-LIC_FILES_CHKSUM = "file://Artistic-2.0;md5=7806296b9fae874361e6fb10072b7ee3"
-
-inherit autotools-brokensep gettext
-
-# disable random file detection for cross-compile
-EXTRA_OECONF = "--without-random \
-                --disable-static \
-                --disable-check-autofiles \
-                "
-
-LDFLAGS:append:mipsarch = " -latomic"
-LDFLAGS:append:riscv32 = " -latomic"
-
-S="${WORKDIR}/${BPN}-${PV}"
-
-# avoid Makefile returning error on 'make clean' before configure was run
-CLEANBROKEN = "1"
-
-DEBIAN_NOAUTONAME:libqpdf = "1"
-
-PACKAGES =+ "libqpdf"
-FILES:libqpdf = "${libdir}/libqpdf.so.*"
-
-RDEPENDS:${PN} = "libqpdf"
diff --git a/meta-openembedded/meta-oe/recipes-printing/qpdf/qpdf_11.6.3.bb b/meta-openembedded/meta-oe/recipes-printing/qpdf/qpdf_11.6.3.bb
new file mode 100644
index 0000000..ceb9f25
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-printing/qpdf/qpdf_11.6.3.bb
@@ -0,0 +1,31 @@
+DESCRIPTION = "PDF transformation/inspection software"
+HOMEPAGE = "http://qpdf.sourceforge.net"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+DEPENDS = "zlib jpeg ${@bb.utils.contains('PACKAGECONFIG', 'gnutls', 'gnutls', 'openssl', d)}"
+
+SRC_URI = "git://github.com/qpdf/qpdf.git;protocol=https;branch=main"
+SRCREV = "81823f4032caefd1050bccb207d315839c1c48db"
+
+inherit cmake pkgconfig gettext
+
+EXTRA_OECMAKE = ' \
+	-DRANDOM_DEVICE="/dev/random" \
+	-DBUILD_STATIC_LIBS=OFF \
+	-DALLOW_CRYPTO_NATIVE=OFF \
+	-DUSE_IMPLICIT_CRYPTO=OFF \
+'
+
+LDFLAGS:append:mipsarch = " -latomic"
+LDFLAGS:append:riscv32 = " -latomic"
+
+S="${WORKDIR}/git"
+
+PACKAGECONFIG ?= "gnutls"
+PACKAGECONFIG[gnutls] = "-DREQUIRE_CRYPTO_GNUTLS=ON,-DREQUIRE_CRYPTO_OPENSSL=ON"
+
+do_install:append() {
+    # Change the fully defined path on the target
+    sed -i -e 's|${STAGING_LIBDIR}|${libdir}|g' ${D}${libdir}/cmake/${BPN}/libqpdfTargets.cmake
+}
diff --git a/meta-openembedded/meta-oe/recipes-shells/mksh/mksh_59.bb b/meta-openembedded/meta-oe/recipes-shells/mksh/mksh_59c.bb
similarity index 82%
rename from meta-openembedded/meta-oe/recipes-shells/mksh/mksh_59.bb
rename to meta-openembedded/meta-oe/recipes-shells/mksh/mksh_59c.bb
index 9cd0fbc..e3a8ca8 100644
--- a/meta-openembedded/meta-oe/recipes-shells/mksh/mksh_59.bb
+++ b/meta-openembedded/meta-oe/recipes-shells/mksh/mksh_59c.bb
@@ -7,10 +7,11 @@
                     file://strlcpy.c;beginline=1;endline=17;md5=d953f28f0c43ee29e238ec9bc15df2a0 \
                    "
 
-SRC_URI = "http://www.mirbsd.org/MirOS/dist/mir/mksh/mksh-R59b.tgz"
+SRC_URI = "http://www.mirbsd.org/MirOS/dist/mir/${BPN}/${BPN}-R${PV}.tgz"
 
-SRC_URI[md5sum] = "dce6abffc2036288540b9ba11dfb2ec8"
-SRC_URI[sha256sum] = "907ed1a9586e7f18bdefdd4a763aaa8397b755e15034aa54f4d753bfb272e0e6"
+SRC_URI[sha256sum] = "77ae1665a337f1c48c61d6b961db3e52119b38e58884d1c89684af31f87bc506"
+
+UPSTREAM_CHECK_REGEX = "${BPN}-R(?P<pver>.*)\.tgz"
 
 inherit update-alternatives
 
diff --git a/meta-openembedded/meta-oe/recipes-support/btop/btop_1.2.13.bb b/meta-openembedded/meta-oe/recipes-support/btop/btop_1.2.13.bb
new file mode 100644
index 0000000..a944fe7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/btop/btop_1.2.13.bb
@@ -0,0 +1,23 @@
+SUMMARY = "Resource monitor that shows usage and stats for processor, memory, disks, network and processes."
+HOMEPAGE = "https://github.com/aristocratos/btop"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+SECTION = "console/utils"
+
+SRC_URI = "git://github.com/aristocratos/btop.git;protocol=https;branch=main"
+SRCREV = "9edbf27f1b6d5844a97325fcda732762ba086a99"
+
+S = "${WORKDIR}/git"
+
+inherit cmake
+
+FILES:${PN} += " \
+    ${datadir}/icons \
+    ${datadir}/icons/hicolor \
+    ${datadir}/icons/hicolor/48x48 \
+    ${datadir}/icons/hicolor/scalable \
+    ${datadir}/icons/hicolor/48x48/apps \
+    ${datadir}/icons/hicolor/48x48/apps/btop.png \
+    ${datadir}/icons/hicolor/scalable/apps \
+    ${datadir}/icons/hicolor/scalable/apps/btop.svg \
+"
diff --git a/meta-openembedded/meta-oe/recipes-support/c-ares/c-ares_1.19.1.bb b/meta-openembedded/meta-oe/recipes-support/c-ares/c-ares_1.22.1.bb
similarity index 78%
rename from meta-openembedded/meta-oe/recipes-support/c-ares/c-ares_1.19.1.bb
rename to meta-openembedded/meta-oe/recipes-support/c-ares/c-ares_1.22.1.bb
index 1440d72..8ba1b60 100644
--- a/meta-openembedded/meta-oe/recipes-support/c-ares/c-ares_1.19.1.bb
+++ b/meta-openembedded/meta-oe/recipes-support/c-ares/c-ares_1.22.1.bb
@@ -3,10 +3,10 @@
 HOMEPAGE = "http://daniel.haxx.se/projects/c-ares/"
 SECTION = "libs"
 LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE.md;md5=fb997454c8d62aa6a47f07a8cd48b006"
+LIC_FILES_CHKSUM = "file://LICENSE.md;md5=fdbc58a6da11a9f68aa73c453818decc"
 
 SRC_URI = "git://github.com/c-ares/c-ares.git;branch=main;protocol=https"
-SRCREV = "6360e96b5cf8e5980c887ce58ef727e53d77243a"
+SRCREV = "36466bb240661fa8fdc2ffa47d229d92ac762286"
 
 UPSTREAM_CHECK_GITTAGREGEX = "cares-(?P<pver>\d+_(\d_?)+)"
 
diff --git a/meta-openembedded/meta-oe/recipes-support/ccid/ccid_1.5.2.bb b/meta-openembedded/meta-oe/recipes-support/ccid/ccid_1.5.4.bb
similarity index 85%
rename from meta-openembedded/meta-oe/recipes-support/ccid/ccid_1.5.2.bb
rename to meta-openembedded/meta-oe/recipes-support/ccid/ccid_1.5.4.bb
index 0802e80..e53ffa4 100644
--- a/meta-openembedded/meta-oe/recipes-support/ccid/ccid_1.5.2.bb
+++ b/meta-openembedded/meta-oe/recipes-support/ccid/ccid_1.5.4.bb
@@ -10,7 +10,7 @@
     file://0001-Add-build-rule-for-README.patch \
 "
 
-SRC_URI[sha256sum] = "13934487e6f8b48f699a16d367cc7a1af7a3ca874de721ac6e9633beb86e7219"
+SRC_URI[sha256sum] = "6e832adc172ecdcfdee2b56f33144684882cbe972daff1938e7a9c73a64f88bf"
 
 inherit autotools pkgconfig
 
diff --git a/meta-openembedded/meta-oe/recipes-support/ceres-solver/ceres-solver_2.1.0.bb b/meta-openembedded/meta-oe/recipes-support/ceres-solver/ceres-solver_2.2.0.bb
similarity index 94%
rename from meta-openembedded/meta-oe/recipes-support/ceres-solver/ceres-solver_2.1.0.bb
rename to meta-openembedded/meta-oe/recipes-support/ceres-solver/ceres-solver_2.2.0.bb
index d3c6b42..18db072 100644
--- a/meta-openembedded/meta-oe/recipes-support/ceres-solver/ceres-solver_2.1.0.bb
+++ b/meta-openembedded/meta-oe/recipes-support/ceres-solver/ceres-solver_2.2.0.bb
@@ -1,12 +1,12 @@
 DESCRIPTION = "Ceres Solver is an open source C++ library for modeling and solving large, complicated optimization problems."
 HOMEPAGE = "http://ceres-solver.org/"
 LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=bb761279816b72be19d7ce646e4e2a14"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3585a26c9cd9ec0cb36a7d65542878ca"
 
 DEPENDS = "libeigen glog"
 
 SRC_URI = "git://github.com/ceres-solver/ceres-solver.git;branch=master;protocol=https"
-SRCREV = "f68321e7de8929fbcdb95dd42877531e64f72f66"
+SRCREV = "85331393dc0dff09f6fb9903ab0c4bfa3e134b01"
 
 S = "${WORKDIR}/git"
 
diff --git a/meta-openembedded/meta-oe/recipes-support/cpulimit/cpulimit_0.2.bb b/meta-openembedded/meta-oe/recipes-support/cpulimit/cpulimit_0.2.bb
index 58e4fd6..f88d3b6 100644
--- a/meta-openembedded/meta-oe/recipes-support/cpulimit/cpulimit_0.2.bb
+++ b/meta-openembedded/meta-oe/recipes-support/cpulimit/cpulimit_0.2.bb
@@ -1,4 +1,5 @@
 SUMMARY = "cpulimit is a tool which limits the CPU usage of a process"
+DESCRIPTION = "cpulimit is a simple program that attempts to limit the CPU usage of a process (expressed in percentage, not in CPU time). This is useful to control batch jobs, when you don't want them to eat too much CPU. It does not act on the nice value or other priority stuff, but on the real CPU usage. Besides it is able to adapt itself to the overall system load, dynamically and quickly."
 HOMEPAGE = "http://cpulimit.sourceforge.net"
 LICENSE = "GPL-2.0-or-later"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=86c1c0d961a437e529db93aa3bb32dc4"
diff --git a/meta-openembedded/meta-oe/recipes-support/crucible/crucible_2023.04.12.bb b/meta-openembedded/meta-oe/recipes-support/crucible/crucible_2023.11.02.bb
similarity index 74%
rename from meta-openembedded/meta-oe/recipes-support/crucible/crucible_2023.04.12.bb
rename to meta-openembedded/meta-oe/recipes-support/crucible/crucible_2023.11.02.bb
index 4830acf..339bb35 100644
--- a/meta-openembedded/meta-oe/recipes-support/crucible/crucible_2023.04.12.bb
+++ b/meta-openembedded/meta-oe/recipes-support/crucible/crucible_2023.11.02.bb
@@ -1,6 +1,6 @@
 SUMMARY = "Utility that provides userspace support for reading and writing to the i.MX fuses"
-LICENSE = "GPL-3.0-only"
-LIC_FILES_CHKSUM = "file://src/${GO_IMPORT}/LICENSE;md5=a64ced9463b8c81d08335d41966e0592"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://src/${GO_IMPORT}/LICENSE;md5=201414b6610203caed355323b1ab3116"
 
 GO_IMPORT = "github.com/usbarmory/crucible"
 SRC_URI = "git://${GO_IMPORT}.git;protocol=https;branch=master"
@@ -9,7 +9,7 @@
     ${GO_IMPORT}/cmd/crucible \
     ${GO_IMPORT}/cmd/habtool \
 "
-SRCREV = "269c90b0067e469c20b11e7fc5f4681ad5f0af7e"
+SRCREV = "358b5e7adb7f101f870f2b42fe5371460a3cccb6"
 
 # Workaround for network access issue during compile step.
 # This needs to be fixed in the recipes buildsystem so that
diff --git a/meta-openembedded/meta-oe/recipes-support/edid-decode/edid-decode_git.bb b/meta-openembedded/meta-oe/recipes-support/edid-decode/edid-decode_git.bb
index c1f5121..48b52ee 100644
--- a/meta-openembedded/meta-oe/recipes-support/edid-decode/edid-decode_git.bb
+++ b/meta-openembedded/meta-oe/recipes-support/edid-decode/edid-decode_git.bb
@@ -7,7 +7,7 @@
 LIC_FILES_CHKSUM = "file://LICENSE;md5=2ef696d66c156139232201f223c22592"
 
 SRC_URI= "git://git.linuxtv.org/edid-decode.git;protocol=https;branch=master"
-SRCREV = "e052f5f9fdf74ca11aa1a8edfa62eff8d0aa3d0d"
+SRCREV = "5920bf2a756b2f748c49ff6a08b9f421026473c5"
 PV = "0.0+git${SRCPV}"
 S = "${WORKDIR}/git"
 
diff --git a/meta-openembedded/meta-oe/recipes-support/freerdp/freerdp_2.11.1.bb b/meta-openembedded/meta-oe/recipes-support/freerdp/freerdp_2.11.2.bb
similarity index 98%
rename from meta-openembedded/meta-oe/recipes-support/freerdp/freerdp_2.11.1.bb
rename to meta-openembedded/meta-oe/recipes-support/freerdp/freerdp_2.11.2.bb
index 063a63b..c8d996d 100644
--- a/meta-openembedded/meta-oe/recipes-support/freerdp/freerdp_2.11.1.bb
+++ b/meta-openembedded/meta-oe/recipes-support/freerdp/freerdp_2.11.2.bb
@@ -13,7 +13,7 @@
 PE = "1"
 PKGV = "${GITPKGVTAG}"
 
-SRCREV = "9d3d40bf3e429c0cd6609f686c0e73ed0eff0a07"
+SRCREV = "a38c1be9eee39a9bc22b511fffe96e63fdf8ebe7"
 SRC_URI = "git://github.com/FreeRDP/FreeRDP.git;branch=stable-2.0;protocol=https \
            file://winpr-makecert-Build-with-install-RPATH.patch \
            file://0001-Fix-const-qualifier-error.patch \
diff --git a/meta-openembedded/meta-oe/recipes-support/function2/function2_4.2.3.bb b/meta-openembedded/meta-oe/recipes-support/function2/function2_4.2.4.bb
similarity index 92%
rename from meta-openembedded/meta-oe/recipes-support/function2/function2_4.2.3.bb
rename to meta-openembedded/meta-oe/recipes-support/function2/function2_4.2.4.bb
index 599c490..2748b84 100644
--- a/meta-openembedded/meta-oe/recipes-support/function2/function2_4.2.3.bb
+++ b/meta-openembedded/meta-oe/recipes-support/function2/function2_4.2.4.bb
@@ -3,7 +3,7 @@
 HOMEPAGE = "https://naios.github.io/function2"
 LICENSE = "BSL-1.0"
 LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=e4224ccaecb14d942c71d31bef20d78c"
-SRCREV = "9e303865d14f1204f09379e37bbeb30c4375139a"
+SRCREV = "a354bd093d2b6e50c9325dbce84d20b4e77aabc6"
 PV .= "+git${SRCPV}"
 
 SRC_URI += "gitsm://github.com/Naios/function2;branch=master;protocol=https"
diff --git a/meta-openembedded/meta-oe/recipes-support/googlebenchmark/googlebenchmark_1.8.0.bb b/meta-openembedded/meta-oe/recipes-support/googlebenchmark/googlebenchmark_1.8.3.bb
similarity index 89%
rename from meta-openembedded/meta-oe/recipes-support/googlebenchmark/googlebenchmark_1.8.0.bb
rename to meta-openembedded/meta-oe/recipes-support/googlebenchmark/googlebenchmark_1.8.3.bb
index 209f51e..f945a30 100644
--- a/meta-openembedded/meta-oe/recipes-support/googlebenchmark/googlebenchmark_1.8.0.bb
+++ b/meta-openembedded/meta-oe/recipes-support/googlebenchmark/googlebenchmark_1.8.3.bb
@@ -5,7 +5,7 @@
 LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
 
 SRC_URI = "git://github.com/google/benchmark.git;protocol=https;branch=main"
-SRCREV = "2dd015dfef425c866d9a43f2c67d8b52d709acb6"
+SRCREV = "344117638c8ff7e239044fd0fa7085839fc03021"
 
 S = "${WORKDIR}/git"
 
diff --git a/meta-openembedded/meta-oe/recipes-support/hdf5/hdf5_1.14.2.bb b/meta-openembedded/meta-oe/recipes-support/hdf5/hdf5_1.14.2.bb
index 68b91c0..e716430 100644
--- a/meta-openembedded/meta-oe/recipes-support/hdf5/hdf5_1.14.2.bb
+++ b/meta-openembedded/meta-oe/recipes-support/hdf5/hdf5_1.14.2.bb
@@ -7,7 +7,7 @@
 LICENSE = "HDF5"
 LIC_FILES_CHKSUM = "file://COPYING;md5=9ba0f3d878ab6c2403c86e9b0362d998"
 
-inherit cmake siteinfo qemu multilib_header
+inherit cmake siteinfo qemu multilib_header multilib_script
 
 DEPENDS += "qemu-native zlib"
 
@@ -40,6 +40,10 @@
 
 do_unpack[postfuncs] += "gen_emu"
 
+MULTILIB_SCRIPTS += "${PN}:${bindir}/h5cc \
+                     ${PN}:${bindir}/h5hlcc \
+"
+
 do_install:append() {
     # Used for generating config files on target
     install -m 755 ${B}/bin/H5detect ${D}${bindir}
diff --git a/meta-openembedded/meta-oe/recipes-support/hwdata/hwdata_0.370.bb b/meta-openembedded/meta-oe/recipes-support/hwdata/hwdata_0.376.bb
similarity index 91%
rename from meta-openembedded/meta-oe/recipes-support/hwdata/hwdata_0.370.bb
rename to meta-openembedded/meta-oe/recipes-support/hwdata/hwdata_0.376.bb
index 56d4253..1666d5e 100644
--- a/meta-openembedded/meta-oe/recipes-support/hwdata/hwdata_0.370.bb
+++ b/meta-openembedded/meta-oe/recipes-support/hwdata/hwdata_0.376.bb
@@ -5,7 +5,7 @@
 LICENSE = "GPL-2.0-or-later | XFree86-1.0"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=1556547711e8246992b999edd9445a57"
 
-SRCREV = "21cb47beb1716545b25dfe8ae1b9e079c73b85d9"
+SRCREV = "e27f08bda517100746000dacdd882b6a7e7ce19a"
 SRC_URI = "git://github.com/vcrhonek/${BPN}.git;branch=master;protocol=https"
 
 S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-oe/recipes-support/idevicerestore/idevicerestore_git.bb b/meta-openembedded/meta-oe/recipes-support/idevicerestore/idevicerestore_git.bb
index 2a0a129..3dbd8db 100644
--- a/meta-openembedded/meta-oe/recipes-support/idevicerestore/idevicerestore_git.bb
+++ b/meta-openembedded/meta-oe/recipes-support/idevicerestore/idevicerestore_git.bb
@@ -10,7 +10,7 @@
 
 PV = "1.0.1+git${SRCPV}"
 
-SRCREV = "163a1647dedb7ca4656c0f072e4733573f9f982b"
+SRCREV = "ecae6c6e8ca6b6bad080a1c73f10ffd0e67d75a7"
 SRC_URI = "git://github.com/libimobiledevice/idevicerestore;protocol=https;branch=master"
 
 S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-oe/recipes-support/libbytesize/libbytesize_2.9.bb b/meta-openembedded/meta-oe/recipes-support/libbytesize/libbytesize_2.10.bb
similarity index 83%
rename from meta-openembedded/meta-oe/recipes-support/libbytesize/libbytesize_2.9.bb
rename to meta-openembedded/meta-oe/recipes-support/libbytesize/libbytesize_2.10.bb
index dfc7b42..28e40f6 100644
--- a/meta-openembedded/meta-oe/recipes-support/libbytesize/libbytesize_2.9.bb
+++ b/meta-openembedded/meta-oe/recipes-support/libbytesize/libbytesize_2.10.bb
@@ -9,8 +9,8 @@
 S = "${WORKDIR}/git"
 B = "${S}"
 
-SRCREV = "2fa27aa3acccc70b9f6c3bf2e569e3d33a381e83"
-SRC_URI = "git://github.com/rhinstaller/libbytesize;branch=master;protocol=https"
+SRCREV = "6e83cc6f6dff4f126fc79284e0c3c1c50123380d"
+SRC_URI = "git://github.com/storaged-project/libbytesize;branch=main;protocol=https"
 
 inherit gettext autotools pkgconfig python3native
 
diff --git a/meta-openembedded/meta-oe/recipes-support/libeigen/libeigen_3.4.0.bb b/meta-openembedded/meta-oe/recipes-support/libeigen/libeigen_3.4.0.bb
index 28305c9..7204442 100644
--- a/meta-openembedded/meta-oe/recipes-support/libeigen/libeigen_3.4.0.bb
+++ b/meta-openembedded/meta-oe/recipes-support/libeigen/libeigen_3.4.0.bb
@@ -1,6 +1,6 @@
 DESCRIPTION = "Eigen is a C++ template library for linear algebra: matrices, vectors, numerical solvers, and related algorithms."
 HOMEPAGE = "http://eigen.tuxfamily.org/"
-LICENSE = "MPL-2.0 & Apache-2.0 & BSD-3-Clause & GPL-3.0-only & LGPL-2.1-only & MINPACK"
+LICENSE = "MPL-2.0 & Apache-2.0 & BSD-3-Clause & GPL-2.0-only & LGPL-2.1-only & MINPACK"
 LIC_FILES_CHKSUM = "file://COPYING.MPL2;md5=815ca599c9df247a0c7f619bab123dad \
                     file://COPYING.BSD;md5=2dd0510ee95e59ca28834b875bc96596 \
                     file://COPYING.GPL;md5=d32239bcb673463ab874e80d47fae504 \
diff --git a/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod-2.x/run-ptest b/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod-2.x/run-ptest
index 9475f02..29ec0d1 100644
--- a/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod-2.x/run-ptest
+++ b/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod-2.x/run-ptest
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-testbins="gpiod-test gpio-tools-test gpiod-cxx-test"
+testbins="gpiod-test gpio-tools-test.bash gpiod-cxx-test"
 
 ptestdir=$(dirname "$(readlink -f "$0")")
 cd $ptestdir/tests
diff --git a/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod.inc b/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod.inc
index 0eda47b..dc1fb4f 100644
--- a/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod.inc
+++ b/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod.inc
@@ -33,7 +33,6 @@
 FILES:libgpiodcxx = "${libdir}/libgpiodcxx.so.*"
 
 RRECOMMENDS:${PN}-ptest += "coreutils"
-RDEPENDS:${PN}-ptest += "${@bb.utils.contains('PTEST_ENABLED', '1', 'bats', '', d)}"
 
 do_install:append() {
     rm -f ${D}${bindir}/gpiod-test
@@ -50,8 +49,6 @@
 
     # Tools are always built so let's always install them for ptest even if
     # we're not selecting libgpiod-tools.
-    install -m 0755 ${S}/tools/gpio-tools-test ${D}${PTEST_PATH}/tests/
-    install -m 0755 ${S}/tools/gpio-tools-test.bats ${D}${PTEST_PATH}/tests/
     for tool in ${FILES:${PN}-tools}; do
         install ${B}/tools/.libs/$(basename $tool) ${D}${PTEST_PATH}/tests/
     done
diff --git a/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_1.6.4.bb b/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_1.6.4.bb
index b28aa8e..111a572 100644
--- a/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_1.6.4.bb
+++ b/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_1.6.4.bb
@@ -30,9 +30,15 @@
     kernel-module-gpio-mockup \
     ${@bb.utils.contains('PACKAGECONFIG', 'python3', 'python3-unittest', '', d)} \
 "
-RDEPENDS:${PN}-ptest += "python3-packaging"
+RDEPENDS:${PN}-ptest += " \
+    python3-packaging \
+    ${@bb.utils.contains('PTEST_ENABLED', '1', 'bats', '', d)} \
+"
 
 do_install_ptest:append() {
+    install -m 0755 ${S}/tools/gpio-tools-test ${D}${PTEST_PATH}/tests/
+    install -m 0755 ${S}/tools/gpio-tools-test.bats ${D}${PTEST_PATH}/tests/
+
     if ${@bb.utils.contains('PACKAGECONFIG', 'python3', 'true', 'false', d)}; then
         install -m 0755 ${S}/bindings/python/tests/gpiod_py_test.py ${D}${PTEST_PATH}/tests/
     fi
diff --git a/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_2.0.2.bb b/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_2.1.bb
similarity index 79%
rename from meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_2.0.2.bb
rename to meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_2.1.bb
index 7533e0a..1e92d00 100644
--- a/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_2.0.2.bb
+++ b/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_2.1.bb
@@ -9,7 +9,7 @@
 
 FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}-2.x:"
 
-SRC_URI[sha256sum] = "c3c923dc63b7b1b02639c9179c81e3d9febf0887bbaa59775990229cdbedb88b"
+SRC_URI[sha256sum] = "fa4024a080121c958502f9a46a5bda44bea85e7a4dd7fcb3dead463b6fc4261c"
 
 # Enable all project features for ptest
 PACKAGECONFIG[tests] = "--enable-tests --enable-tools --enable-bindings-cxx --enable-gpioset-interactive,--disable-tests,kmod util-linux glib-2.0 catch2 libedit"
@@ -20,8 +20,13 @@
 FILES:${PN}-ptest += "${libdir}/libgpiosim.so.*"
 FILES:${PN}-ptest-dev += "${includedir}/gpiosim.h"
 
+RDEPENDS:${PN}-ptest += " \
+    bash \
+    ${@bb.utils.contains('PTEST_ENABLED', '1', 'shunit2', '', d)} \
+"
 RRECOMMENDS:${PN}-ptest += "kernel-module-gpio-sim"
 
 do_install_ptest:append() {
+    install -m 0755 ${S}/tools/gpio-tools-test.bash ${D}${PTEST_PATH}/tests/
     install -m 0644 ${S}/tests/gpiosim/gpiosim.h ${D}${includedir}/gpiosim.h
 }
diff --git a/meta-openembedded/meta-oe/recipes-support/libosinfo/libosinfo_1.10.bb b/meta-openembedded/meta-oe/recipes-support/libosinfo/libosinfo_1.11.0.bb
similarity index 84%
rename from meta-openembedded/meta-oe/recipes-support/libosinfo/libosinfo_1.10.bb
rename to meta-openembedded/meta-oe/recipes-support/libosinfo/libosinfo_1.11.0.bb
index d724c52..ca6f9ba 100644
--- a/meta-openembedded/meta-oe/recipes-support/libosinfo/libosinfo_1.10.bb
+++ b/meta-openembedded/meta-oe/recipes-support/libosinfo/libosinfo_1.11.0.bb
@@ -10,7 +10,7 @@
 	file://0001-meson.build-allow-crosscompiling-gir.patch \
 "
 
-SRCREV = "f503ff7a9e13963bcf396776bce0b209a819ba9b"
+SRCREV = "ca9dd5b810dc04ea38048ae9be491654c8596ef9"
 
 S = "${WORKDIR}/git"
 
@@ -18,6 +18,9 @@
 
 DEPENDS = "glib-2.0 libsoup libxslt"
 
+VALA_MESON_OPTION = 'enable-vala'
+VALA_MESON_ENABLE_FLAG = 'enabled'
+VALA_MESON_DISABLE_FLAG = 'disabled'
 GIR_MESON_OPTION = "enable-introspection"
 GIR_MESON_ENABLE_FLAG = 'enabled'
 GIR_MESON_DISABLE_FLAG = 'disabled'
@@ -26,7 +29,6 @@
 EXTRA_OEMESON += " \
 	-Dwith-pci-ids-path=${datadir}/pci.ids \
 	-Dwith-usb-ids-path=${datadir}/usb.ids \
-	${@bb.utils.contains('GI_DATA_ENABLED', 'True', '-Denable-vala=enabled', '-Denable-vala=disabled', d)} \
 "
 
 RDEPENDS:${PN} = "pciutils-ids usbids"
diff --git a/meta-openembedded/meta-oe/recipes-support/libraw/libraw_0.20.2.bb b/meta-openembedded/meta-oe/recipes-support/libraw/libraw_0.21.1.bb
similarity index 63%
rename from meta-openembedded/meta-oe/recipes-support/libraw/libraw_0.20.2.bb
rename to meta-openembedded/meta-oe/recipes-support/libraw/libraw_0.21.1.bb
index 1940864..a3bbbe3 100644
--- a/meta-openembedded/meta-oe/recipes-support/libraw/libraw_0.20.2.bb
+++ b/meta-openembedded/meta-oe/recipes-support/libraw/libraw_0.21.1.bb
@@ -1,9 +1,9 @@
 SUMMARY = "raw image decoder"
 LICENSE = "LGPL-2.1-only | CDDL-1.0"
-LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=74c9dffdc42805f9c0de2f97df6031fc"
+LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=1501ae0aa3c8544e63f08d6f7bf88a6f"
 
 SRC_URI = "git://github.com/LibRaw/LibRaw.git;branch=master;protocol=https"
-SRCREV = "0209b6a2caec189e6d1a9b21c10e9e49f46e5a92"
+SRCREV = "cccb97647fcee56801fa68231fa8a38aa8b52ef7"
 S = "${WORKDIR}/git"
 
 inherit autotools pkgconfig
diff --git a/meta-openembedded/meta-oe/recipes-support/libsmi/libsmi_0.5.0.bb b/meta-openembedded/meta-oe/recipes-support/libsmi/libsmi_0.5.0.bb
index 33e1b6f..07e2e29 100644
--- a/meta-openembedded/meta-oe/recipes-support/libsmi/libsmi_0.5.0.bb
+++ b/meta-openembedded/meta-oe/recipes-support/libsmi/libsmi_0.5.0.bb
@@ -14,13 +14,11 @@
 SRC_URI[md5sum] = "4bf47483c06c9f07d1b10fbc74eddf11"
 SRC_URI[sha256sum] = "f21accdadb1bb328ea3f8a13fc34d715baac6e2db66065898346322c725754d3"
 
-DEPENDS += "bison-native flex-native"
-
-RDEPENDS:${PN} += "wget"
+DEPENDS += "bison-native flex-native wget-native gawk-native"
 
 inherit autotools-brokensep
 
-EXTRA_OECONF = "ac_cv_path_SH=/bin/sh ac_cv_path_WGET=${bindir}/wget ac_cv_path_AWK=${bindir}/awk"
+EXTRA_OECONF = "ac_cv_path_SH=/bin/sh"
 
 do_install:append () {
     install -d ${D}${sysconfdir}
@@ -34,3 +32,5 @@
 FILES:${PN}-yang += "${datadir}/yang"
 
 RRECOMMENDS:${PN} = "${BPN}-mibs"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-support/mcelog/mcelog_194.bb b/meta-openembedded/meta-oe/recipes-support/mcelog/mcelog_196.bb
similarity index 95%
rename from meta-openembedded/meta-oe/recipes-support/mcelog/mcelog_194.bb
rename to meta-openembedded/meta-oe/recipes-support/mcelog/mcelog_196.bb
index 9b5c554..06aa30d 100644
--- a/meta-openembedded/meta-oe/recipes-support/mcelog/mcelog_194.bb
+++ b/meta-openembedded/meta-oe/recipes-support/mcelog/mcelog_196.bb
@@ -11,7 +11,7 @@
     file://run-ptest \
 "
 
-SRCREV = "8f33fdc47160edce09d75e1316b4d88129ca60a0"
+SRCREV = "edfe78a0dc54a940f4916a9bd681eab7b3f746d1"
 
 LICENSE = "GPL-2.0-only"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=b234ee4d69f5fce4486a80fdaf4a4263"
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/multipath-tools_0.9.3.bb b/meta-openembedded/meta-oe/recipes-support/multipath-tools/multipath-tools_0.9.3.bb
index ae4b3b9..a7a9019 100644
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/multipath-tools_0.9.3.bb
+++ b/meta-openembedded/meta-oe/recipes-support/multipath-tools/multipath-tools_0.9.3.bb
@@ -29,7 +29,7 @@
 
 LICENSE = "GPL-2.0-only"
 
-SRC_URI = "git://github.com/opensvc/multipath-tools.git;protocol=http;branch=master \
+SRC_URI = "git://github.com/opensvc/multipath-tools.git;protocol=https;branch=master \
            file://multipathd.oe \
            file://multipath.conf.example \
            file://0021-RH-fixup-udev-rules-for-redhat.patch \
diff --git a/meta-openembedded/meta-oe/recipes-support/opencv/opencv/fix-build-with-protobuf-v22.patch b/meta-openembedded/meta-oe/recipes-support/opencv/opencv/fix-build-with-protobuf-v22.patch
index 536060c..265d723 100644
--- a/meta-openembedded/meta-oe/recipes-support/opencv/opencv/fix-build-with-protobuf-v22.patch
+++ b/meta-openembedded/meta-oe/recipes-support/opencv/opencv/fix-build-with-protobuf-v22.patch
@@ -1,19 +1,60 @@
-From 5e4150826fea6f37276f348c65d94ce4847d1211 Mon Sep 17 00:00:00 2001
+From 75f7475fcfb35cbe4d8f5ccf5c4ac8bc78f2dc30 Mon Sep 17 00:00:00 2001
 From: Kumataro <Kumataro@users.noreply.github.com>
-Date: Sat, 7 Oct 2023 10:11:25 +0900
-Subject: [PATCH] 3rdparty: supporting protobuf v22 and later
+Date: Thu, 19 Oct 2023 14:45:08 +0900
+Subject: [PATCH] Merge pull request #24372 from Kumataro:fix24369
 
-Upstream-Status: Submitted [https://github.com/opencv/opencv/pull/24372]
+Supporting protobuf v22 and later(with abseil-cpp/C++17) #24372
+
+fix https://github.com/opencv/opencv/issues/24369
+related https://github.com/opencv/opencv/issues/23791
+
+1. This patch supports external protobuf v22 and later, it required abseil-cpp and c++17.
+    Even if the built-in protobuf is upgraded to v22 or later,
+    the dependency on abseil-cpp and the requirement for C++17 will continue.
+2. Some test for caffe required patched protobuf, so this patch disable them.
+
+This patch is tested by following libraries.
+-  Protobuf:                    /usr/local/lib/libprotobuf.so (4.24.4)
+-  abseil-cpp:                YES (20230125)
+
+See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request
+
+- [x] I agree to contribute to the project under Apache 2 License.
+- [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV
+- [x] The PR is proposed to the proper branch
+- [x] There is a reference to the original bug report and related work
+- [x] There is accuracy test, performance test and test data in opencv_extra repository, if applicable
+      Patch to opencv_extra has the same branch name.
+- [x] The feature is well documented and sample code can be built with the project CMake
+
+Upstream-Status: Backport [https://github.com/opencv/opencv/commit/6e4280ea81b59c6dca45bb9801b758377beead55]
 ---
- cmake/OpenCVFindProtobuf.cmake | 37 ++++++++++++++++++++++++++++++++++
- modules/dnn/CMakeLists.txt     |  9 +++++++++
- 2 files changed, 46 insertions(+)
+ cmake/OpenCVFindProtobuf.cmake   | 35 +++++++++++++++++++++++++++-----
+ modules/dnn/CMakeLists.txt       |  6 ++++++
+ modules/dnn/test/test_layers.cpp | 24 ++++++++++++++++++----
+ 3 files changed, 56 insertions(+), 9 deletions(-)
 
 diff --git a/cmake/OpenCVFindProtobuf.cmake b/cmake/OpenCVFindProtobuf.cmake
-index 8835347d1d..9bd5c28db8 100644
+index 8835347d1d..5b1e17529f 100644
 --- a/cmake/OpenCVFindProtobuf.cmake
 +++ b/cmake/OpenCVFindProtobuf.cmake
-@@ -67,6 +67,38 @@ else()
+@@ -30,8 +30,14 @@ if(BUILD_PROTOBUF)
+   set(Protobuf_LIBRARIES "libprotobuf")
+   set(HAVE_PROTOBUF TRUE)
+ else()
++  # we still need this for command PROTOBUF_GENERATE_CPP.
++  set(protobuf_MODULE_COMPATIBLE ON)
++
+   unset(Protobuf_VERSION CACHE)
+-  find_package(Protobuf QUIET)
++  find_package(Protobuf QUIET CONFIG)
++  if(NOT Protobuf_FOUND)
++    find_package(Protobuf QUIET)
++  endif()
+ 
+   # Backwards compatibility
+   # Define camel case versions of input variables
+@@ -67,6 +73,20 @@ else()
    endif()
  endif()
  
@@ -21,82 +62,49 @@
 +# In Protocol Buffers v22.0 and later drops C++11 support and depends abseil-cpp.
 +#   Details: https://protobuf.dev/news/2022-08-03/
 +# And if std::text_view is in abseil-cpp requests C++17 and later.
++
 +if(HAVE_PROTOBUF)
-+    if("${Protobuf_VERSION}" MATCHES [[[0-9]+.([0-9]+).[0-9]+]])
-+        string(COMPARE GREATER_EQUAL "${CMAKE_MATCH_1}" "22" REQUEST_ABSL)
-+
-+        if(REQUEST_ABSL)
-+            string(COMPARE GREATER_EQUAL "${CMAKE_CXX_STANDARD}" "17" USED_AFTER_CXX17)
-+            if(NOT USED_AFTER_CXX17)
-+                message("CMAKE_CXX_STANDARD : ${CMAKE_CXX_STANDARD}")
-+                message("protobuf           : ${Protobuf_VERSION}")
-+                message(FATAL_ERROR "protobuf(v22 and later) and abseil-cpp request CMAKE_CXX_STANDARD=17 and later.")
-+            endif()
-+
-+            ocv_check_modules(ABSL_STRINGS absl_strings)
-+            if(NOT ABSL_STRINGS_FOUND)
-+                message(FATAL_ERROR "protobuf(v22 and later) requests abseil-cpp(strings), but missing.")
-+            endif()
-+
-+            ocv_check_modules(ABSL_LOG absl_log)
-+            if(NOT ABSL_LOG_FOUND)
-+                message(FATAL_ERROR "protobuf(v22 and later) requests abseil-cpp(log), but missing.")
-+            endif()
-+
-+        endif()
-+    else()
-+        message(FATAL_ERROR "Protobuf version(${Protobuf_VERSION}) is unexpected to split.")
++  if(NOT (Protobuf_VERSION VERSION_LESS 22))
++    if((CMAKE_CXX_STANDARD EQUAL 98) OR (CMAKE_CXX_STANDARD LESS 17))
++      message(STATUS "CMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD} is too old to support protobuf(${Protobuf_VERSION}) and/or abseil-cpp. Use C++17 or later. Turning HAVE_PROTOBUF off")
++      set(HAVE_PROTOBUF FALSE)
 +    endif()
++  endif()
 +endif()
 +
  if(HAVE_PROTOBUF AND PROTOBUF_UPDATE_FILES AND NOT COMMAND PROTOBUF_GENERATE_CPP)
    message(FATAL_ERROR "Can't configure protobuf dependency (BUILD_PROTOBUF=${BUILD_PROTOBUF} PROTOBUF_UPDATE_FILES=${PROTOBUF_UPDATE_FILES})")
  endif()
-@@ -89,3 +121,8 @@ if(HAVE_PROTOBUF)
-     BUILD_PROTOBUF THEN "build (${Protobuf_VERSION})"
-     ELSE "${__location} (${Protobuf_VERSION})")
- endif()
+@@ -74,15 +94,20 @@ endif()
+ if(HAVE_PROTOBUF)
+   list(APPEND CUSTOM_STATUS protobuf)
+   if(NOT BUILD_PROTOBUF)
++    unset( __location)
+     if(TARGET "${Protobuf_LIBRARIES}")
+       get_target_property(__location "${Protobuf_LIBRARIES}" IMPORTED_LOCATION_RELEASE)
+       if(NOT __location)
+         get_target_property(__location "${Protobuf_LIBRARIES}" IMPORTED_LOCATION)
+       endif()
+-    elseif(Protobuf_LIBRARY)
+-      set(__location "${Protobuf_LIBRARY}")
+-    else()
+-      set(__location "${Protobuf_LIBRARIES}")
++    endif()
 +
-+if(HAVE_ABSL_STRINGS AND HAVE_ABSL_LOG)
-+  list(APPEND CUSTOM_STATUS absl)
-+  list(APPEND CUSTOM_STATUS_absl "      abseil-cpp:" "YES (${ABSL_STRINGS_VERSION})" )
-+endif()
++    if(NOT __location)
++      if(Protobuf_LIBRARY)
++        set(__location "${Protobuf_LIBRARY}")
++      else()
++        set(__location "${Protobuf_LIBRARIES}")
++      endif()
+     endif()
+   endif()
+   list(APPEND CUSTOM_STATUS_protobuf "    Protobuf:"
 diff --git a/modules/dnn/CMakeLists.txt b/modules/dnn/CMakeLists.txt
-index 804b78ead2..d32007b37e 100644
+index 804b78ead2..9fcc460909 100644
 --- a/modules/dnn/CMakeLists.txt
 +++ b/modules/dnn/CMakeLists.txt
-@@ -149,6 +149,15 @@ if(NOT BUILD_PROTOBUF)
-   list(APPEND include_dirs ${Protobuf_INCLUDE_DIRS})
- endif()
- 
-+if(HAVE_ABSL_STRINGS)
-+  list(APPEND libs ${ABSL_STRINGS_LIBRARIES})
-+  list(APPEND include_dirs ${ABSL_STRTRINGS_INCLUDE_DIRS})
-+endif()
-+if(HAVE_ABSL_LOG)
-+  list(APPEND libs ${ABSL_LOG_LIBRARIES})
-+  list(APPEND include_dirs ${ABSL_LOG_INCLUDE_DIRS})
-+endif()
-+
- set(sources_options "")
- 
- list(APPEND libs ${LAPACK_LIBRARIES})
-From 06a7669521d205f647d3e718322ccd153cdbbb77 Mon Sep 17 00:00:00 2001
-From: Kumataro <Kumataro@users.noreply.github.com>
-Date: Sun, 8 Oct 2023 09:39:35 +0900
-Subject: [PATCH] dnn: disable some tests for external protobuf
-
----
- modules/dnn/CMakeLists.txt         |  5 +++++
- modules/dnn/src/caffe/caffe_io.cpp | 24 ++++++++++++++++++++++--
- modules/dnn/test/test_layers.cpp   | 16 ++++++++++++++++
- 3 files changed, 43 insertions(+), 2 deletions(-)
-
-diff --git a/modules/dnn/CMakeLists.txt b/modules/dnn/CMakeLists.txt
-index d32007b37e..face38465f 100644
---- a/modules/dnn/CMakeLists.txt
-+++ b/modules/dnn/CMakeLists.txt
-@@ -254,6 +254,12 @@ ocv_create_module(${libs} ${dnn_runtime_libs})
+@@ -245,6 +245,12 @@ ocv_create_module(${libs} ${dnn_runtime_libs})
  ocv_add_samples()
  ocv_add_accuracy_tests(${dnn_runtime_libs})
  
@@ -109,215 +117,13 @@
  set(perf_path "${CMAKE_CURRENT_LIST_DIR}/perf")
  file(GLOB_RECURSE perf_srcs "${perf_path}/*.cpp")
  file(GLOB_RECURSE perf_hdrs "${perf_path}/*.hpp" "${perf_path}/*.h")
-@@ -318,3 +322,4 @@ if(OPENCV_TEST_DNN_TFLITE)
-     ocv_target_compile_definitions(opencv_perf_dnn PRIVATE "OPENCV_TEST_DNN_TFLITE=1")
-   endif()
- endif()
-+
-diff --git a/modules/dnn/src/caffe/caffe_io.cpp b/modules/dnn/src/caffe/caffe_io.cpp
-index ebecf95eea..ebceca84cf 100644
---- a/modules/dnn/src/caffe/caffe_io.cpp
-+++ b/modules/dnn/src/caffe/caffe_io.cpp
-@@ -1130,7 +1130,17 @@ bool ReadProtoFromTextFile(const char* filename, Message* proto) {
-     parser.AllowUnknownField(true);
-     parser.SetRecursionLimit(1000);
- #endif
--    return parser.Parse(&input, proto);
-+    const bool ret = parser.Parse(&input, proto);
-+
-+#ifdef OPENCV_DNN_EXTERNAL_PROTOBUF
-+    if(!ret)
-+    {
-+        LOG(ERROR) << "Some data requires patched protobuf (available in OpenCV source tree only).";
-+        CV_Error_(Error::StsError,("Some data requires patched protobuf (available in OpenCV source tree only)."));
-+    }
-+#endif
-+
-+    return ret;
- }
- 
- bool ReadProtoFromBinaryFile(const char* filename, Message* proto) {
-@@ -1148,7 +1158,17 @@ bool ReadProtoFromTextBuffer(const char* data, size_t len, Message* proto) {
-     parser.AllowUnknownField(true);
-     parser.SetRecursionLimit(1000);
- #endif
--    return parser.Parse(&input, proto);
-+    const bool ret = parser.Parse(&input, proto);
-+
-+#ifdef OPENCV_DNN_EXTERNAL_PROTOBUF
-+    if(!ret)
-+    {
-+        LOG(ERROR) << "Some data requires patched protobuf (available in OpenCV source tree only).";
-+        CV_Error_(Error::StsError,("Some data requires patched protobuf (available in OpenCV source tree only)."));
-+    }
-+#endif
-+
-+    return ret;
- }
- 
- 
 diff --git a/modules/dnn/test/test_layers.cpp b/modules/dnn/test/test_layers.cpp
-index 763d94b99c..a07d442d76 100644
+index 763d94b99c..6cb6d54b3f 100644
 --- a/modules/dnn/test/test_layers.cpp
 +++ b/modules/dnn/test/test_layers.cpp
-@@ -754,7 +754,11 @@ TEST_F(Layer_RNN_Test, get_set_test)
-     EXPECT_EQ(shape(outputs[1]), shape(nT, nS, nH));
- }
+@@ -756,11 +756,15 @@ TEST_F(Layer_RNN_Test, get_set_test)
  
-+#ifndef OPENCV_DNN_EXTERNAL_PROTOBUF
  TEST_P(Test_Caffe_layers, Accum)
-+#else
-+TEST_P(Test_Caffe_layers, DISABLED_Accum)  // requires patched protobuf (available in OpenCV source tree only)
-+#endif
- {
-     if (backend == DNN_BACKEND_OPENCV && target != DNN_TARGET_CPU)
-         applyTestTag(CV_TEST_TAG_DNN_SKIP_OPENCL, CV_TEST_TAG_DNN_SKIP_OPENCL_FP16);
-@@ -778,7 +782,11 @@ TEST_P(Test_Caffe_layers, ChannelNorm)
-     testLayerUsingCaffeModels("channel_norm", false, false);
- }
- 
-+#ifndef OPENCV_DNN_EXTERNAL_PROTOBUF
- TEST_P(Test_Caffe_layers, DataAugmentation)
-+#else
-+TEST_P(Test_Caffe_layers, DISABLED_DataAugmentation)  // requires patched protobuf (available in OpenCV source tree only)
-+#endif
- {
-     if (backend == DNN_BACKEND_OPENCV && target == DNN_TARGET_OPENCL_FP16)
-         applyTestTag(CV_TEST_TAG_DNN_SKIP_OPENCL_FP16);
-@@ -787,7 +795,11 @@ TEST_P(Test_Caffe_layers, DataAugmentation)
-     testLayerUsingCaffeModels("data_augmentation_8x6", true, false);
- }
- 
-+#ifndef OPENCV_DNN_EXTERNAL_PROTOBUF
- TEST_P(Test_Caffe_layers, Resample)
-+#else
-+TEST_P(Test_Caffe_layers, DISABLED_Resample)  // requires patched protobuf (available in OpenCV source tree only)
-+#endif
- {
-     if (backend != DNN_BACKEND_OPENCV)
-         applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
-@@ -795,7 +807,11 @@ TEST_P(Test_Caffe_layers, Resample)
-     testLayerUsingCaffeModels("nearest", false, false);
- }
- 
-+#ifndef OPENCV_DNN_EXTERNAL_PROTOBUF
- TEST_P(Test_Caffe_layers, Correlation)
-+#else
-+TEST_P(Test_Caffe_layers, DISABLED_Correlation)  // requires patched protobuf (available in OpenCV source tree only)
-+#endif
- {
-     if (backend == DNN_BACKEND_OPENCV && target == DNN_TARGET_OPENCL_FP16)
-         applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER,
-From 2c33798f41942aefc203183d673ce4846f32dba4 Mon Sep 17 00:00:00 2001
-From: Kumataro <Kumataro@users.noreply.github.com>
-Date: Sun, 8 Oct 2023 13:28:40 +0900
-Subject: [PATCH] use GREATER instead of GREATER_EQUAL and remove new blank
- line at EOF
-
----
- cmake/OpenCVFindProtobuf.cmake | 6 ++++--
- 1 file changed, 4 insertions(+), 2 deletions(-)
-
-diff --git a/cmake/OpenCVFindProtobuf.cmake b/cmake/OpenCVFindProtobuf.cmake
-index 9bd5c28db8..ba147526d6 100644
---- a/cmake/OpenCVFindProtobuf.cmake
-+++ b/cmake/OpenCVFindProtobuf.cmake
-@@ -71,12 +71,14 @@ endif()
- # In Protocol Buffers v22.0 and later drops C++11 support and depends abseil-cpp.
- #   Details: https://protobuf.dev/news/2022-08-03/
- # And if std::text_view is in abseil-cpp requests C++17 and later.
-+
- if(HAVE_PROTOBUF)
-     if("${Protobuf_VERSION}" MATCHES [[[0-9]+.([0-9]+).[0-9]+]])
--        string(COMPARE GREATER_EQUAL "${CMAKE_MATCH_1}" "22" REQUEST_ABSL)
-+        string(COMPARE GREATER "${CMAKE_MATCH_1}" "21" REQUEST_ABSL)  # >=22
- 
-         if(REQUEST_ABSL)
--            string(COMPARE GREATER_EQUAL "${CMAKE_CXX_STANDARD}" "17" USED_AFTER_CXX17)
-+            string(COMPARE GREATER "${CMAKE_CXX_STANDARD}" "16" USED_AFTER_CXX17)  # >=17
-+
-             if(NOT USED_AFTER_CXX17)
-                 message("CMAKE_CXX_STANDARD : ${CMAKE_CXX_STANDARD}")
-                 message("protobuf           : ${Protobuf_VERSION}")
-From cd709eefbeedd116bf3495b42280323b932791ff Mon Sep 17 00:00:00 2001
-From: Kumataro <Kumataro@users.noreply.github.com>
-Date: Mon, 9 Oct 2023 21:51:04 +0900
-Subject: [PATCH] fix for review
-
----
- cmake/OpenCVFindProtobuf.cmake     |  5 ----
- modules/dnn/src/caffe/caffe_io.cpp | 24 ++----------------
- modules/dnn/test/test_layers.cpp   | 40 +++++++++++++++---------------
- 3 files changed, 22 insertions(+), 47 deletions(-)
-
-diff --git a/cmake/OpenCVFindProtobuf.cmake b/cmake/OpenCVFindProtobuf.cmake
-index ba147526d6..2faf1010bf 100644
---- a/cmake/OpenCVFindProtobuf.cmake
-+++ b/cmake/OpenCVFindProtobuf.cmake
-@@ -123,8 +123,3 @@ if(HAVE_PROTOBUF)
-     BUILD_PROTOBUF THEN "build (${Protobuf_VERSION})"
-     ELSE "${__location} (${Protobuf_VERSION})")
- endif()
--
--if(HAVE_ABSL_STRINGS AND HAVE_ABSL_LOG)
--  list(APPEND CUSTOM_STATUS absl)
--  list(APPEND CUSTOM_STATUS_absl "      abseil-cpp:" "YES (${ABSL_STRINGS_VERSION})" )
--endif()
-diff --git a/modules/dnn/src/caffe/caffe_io.cpp b/modules/dnn/src/caffe/caffe_io.cpp
-index ebceca84cf..ebecf95eea 100644
---- a/modules/dnn/src/caffe/caffe_io.cpp
-+++ b/modules/dnn/src/caffe/caffe_io.cpp
-@@ -1130,17 +1130,7 @@ bool ReadProtoFromTextFile(const char* filename, Message* proto) {
-     parser.AllowUnknownField(true);
-     parser.SetRecursionLimit(1000);
- #endif
--    const bool ret = parser.Parse(&input, proto);
--
--#ifdef OPENCV_DNN_EXTERNAL_PROTOBUF
--    if(!ret)
--    {
--        LOG(ERROR) << "Some data requires patched protobuf (available in OpenCV source tree only).";
--        CV_Error_(Error::StsError,("Some data requires patched protobuf (available in OpenCV source tree only)."));
--    }
--#endif
--
--    return ret;
-+    return parser.Parse(&input, proto);
- }
- 
- bool ReadProtoFromBinaryFile(const char* filename, Message* proto) {
-@@ -1158,17 +1148,7 @@ bool ReadProtoFromTextBuffer(const char* data, size_t len, Message* proto) {
-     parser.AllowUnknownField(true);
-     parser.SetRecursionLimit(1000);
- #endif
--    const bool ret = parser.Parse(&input, proto);
--
--#ifdef OPENCV_DNN_EXTERNAL_PROTOBUF
--    if(!ret)
--    {
--        LOG(ERROR) << "Some data requires patched protobuf (available in OpenCV source tree only).";
--        CV_Error_(Error::StsError,("Some data requires patched protobuf (available in OpenCV source tree only)."));
--    }
--#endif
--
--    return ret;
-+    return parser.Parse(&input, proto);
- }
- 
- 
-diff --git a/modules/dnn/test/test_layers.cpp b/modules/dnn/test/test_layers.cpp
-index a07d442d76..5c6fc541d7 100644
---- a/modules/dnn/test/test_layers.cpp
-+++ b/modules/dnn/test/test_layers.cpp
-@@ -754,17 +754,17 @@ TEST_F(Layer_RNN_Test, get_set_test)
-     EXPECT_EQ(shape(outputs[1]), shape(nT, nS, nH));
- }
- 
--#ifndef OPENCV_DNN_EXTERNAL_PROTOBUF
- TEST_P(Test_Caffe_layers, Accum)
--#else
--TEST_P(Test_Caffe_layers, DISABLED_Accum)  // requires patched protobuf (available in OpenCV source tree only)
--#endif
  {
 +#ifdef OPENCV_DNN_EXTERNAL_PROTOBUF
 +    throw SkipTestException("Requires patched protobuf");
@@ -331,15 +137,9 @@
  }
  
  TEST_P(Test_Caffe_layers, FlowWarp)
-@@ -782,42 +782,42 @@ TEST_P(Test_Caffe_layers, ChannelNorm)
-     testLayerUsingCaffeModels("channel_norm", false, false);
- }
+@@ -780,27 +784,39 @@ TEST_P(Test_Caffe_layers, ChannelNorm)
  
--#ifndef OPENCV_DNN_EXTERNAL_PROTOBUF
  TEST_P(Test_Caffe_layers, DataAugmentation)
--#else
--TEST_P(Test_Caffe_layers, DISABLED_DataAugmentation)  // requires patched protobuf (available in OpenCV source tree only)
--#endif
  {
 +#ifdef OPENCV_DNN_EXTERNAL_PROTOBUF
 +    throw SkipTestException("Requires patched protobuf");
@@ -352,11 +152,7 @@
 +#endif
  }
  
--#ifndef OPENCV_DNN_EXTERNAL_PROTOBUF
  TEST_P(Test_Caffe_layers, Resample)
--#else
--TEST_P(Test_Caffe_layers, DISABLED_Resample)  // requires patched protobuf (available in OpenCV source tree only)
--#endif
  {
 +#ifdef OPENCV_DNN_EXTERNAL_PROTOBUF
 +    throw SkipTestException("Requires patched protobuf");
@@ -368,11 +164,7 @@
 +#endif
  }
  
--#ifndef OPENCV_DNN_EXTERNAL_PROTOBUF
  TEST_P(Test_Caffe_layers, Correlation)
--#else
--TEST_P(Test_Caffe_layers, DISABLED_Correlation)  // requires patched protobuf (available in OpenCV source tree only)
--#endif
  {
 +#ifdef OPENCV_DNN_EXTERNAL_PROTOBUF
 +    throw SkipTestException("Requires patched protobuf");
@@ -381,12 +173,11 @@
          applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER,
                       CV_TEST_TAG_DNN_SKIP_OPENCL, CV_TEST_TAG_DNN_SKIP_OPENCL_FP16);
      testLayerUsingCaffeModels("correlation", false, false, 0.0, 0.0, 2);
- }
 +#endif
+ }
  
  TEST_P(Test_Caffe_layers, Convolution2Inputs)
- {
-@@ -1657,12 +1657,11 @@ private:
+@@ -1641,12 +1657,11 @@ private:
      int outWidth, outHeight, zoomFactor;
  };
  
@@ -402,7 +193,7 @@
  #if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2021030000)
      if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target == DNN_TARGET_MYRIAD)
          applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);  // exception
-@@ -1686,6 +1685,7 @@ TEST_P(Test_Caffe_layers, DISABLED_Interp)  // requires patched protobuf (availa
+@@ -1670,6 +1685,7 @@ TEST_P(Test_Caffe_layers, DISABLED_Interp)  // requires patched protobuf (availa
  
      // Test an implemented layer.
      testLayerUsingCaffeModels("layer_interp", false, false);
diff --git a/meta-openembedded/meta-oe/recipes-support/poco/poco/0001-Fix-data-race-when-create-POSIX-thread.patch b/meta-openembedded/meta-oe/recipes-support/poco/poco/0001-Fix-data-race-when-create-POSIX-thread.patch
new file mode 100644
index 0000000..1a7f4dc
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/poco/poco/0001-Fix-data-race-when-create-POSIX-thread.patch
@@ -0,0 +1,33 @@
+From 03b68fc924b24e12c87512d790d37fc6ddc352ac Mon Sep 17 00:00:00 2001
+From: Dawid Drozd <drozddawid@gmail.com>
+Date: Sat, 11 Feb 2023 14:48:39 +0400
+Subject: [PATCH] Fix data race when create POSIX thread
+
+When creating thread using pthread_create() `_pData->thread` will be set.
+It could lead to data race as in runnableEntry() we refer to that variable.
+
+Instead use pthread_self().
+getName() is already under mutex.
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Upstream-Status: Backport [https://github.com/pocoproject/poco/pull/3942/commits/9c8a79b994a367f626c5551e0f38c27d0d8431f1]
+---
+ Foundation/src/Thread_POSIX.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Foundation/src/Thread_POSIX.cpp b/Foundation/src/Thread_POSIX.cpp
+index ceab76e82..3e52cd31f 100644
+--- a/Foundation/src/Thread_POSIX.cpp
++++ b/Foundation/src/Thread_POSIX.cpp
+@@ -351,7 +351,7 @@ void* ThreadImpl::runnableEntry(void* pThread)
+ #endif
+ 
+ 	ThreadImpl* pThreadImpl = reinterpret_cast<ThreadImpl*>(pThread);
+-	setThreadName(pThreadImpl->_pData->thread, reinterpret_cast<Thread*>(pThread)->getName());
++	setThreadName(pthread_self(), reinterpret_cast<Thread*>(pThread)->getName());
+ 	AutoPtr<ThreadData> pData = pThreadImpl->_pData;
+ 	try
+ 	{
+-- 
+2.42.0
+
diff --git a/meta-openembedded/meta-oe/recipes-support/poco/poco_1.12.4.bb b/meta-openembedded/meta-oe/recipes-support/poco/poco_1.12.4.bb
index 8505f66..12532e4 100644
--- a/meta-openembedded/meta-oe/recipes-support/poco/poco_1.12.4.bb
+++ b/meta-openembedded/meta-oe/recipes-support/poco/poco_1.12.4.bb
@@ -11,6 +11,7 @@
 SRC_URI = "git://github.com/pocoproject/poco.git;branch=master;protocol=https \
            file://0001-Use-std-atomic-int-instead-of-std-atomic-bool.patch \
            file://0001-cppignore.lnx-Ignore-PKCS12-and-testLaunch-test.patch \
+           file://0001-Fix-data-race-when-create-POSIX-thread.patch \
            file://run-ptest \
            "
 SRCREV = "1211613642269b7d53bea58b02de7fcd25ece3b9"
diff --git a/meta-openembedded/meta-oe/recipes-support/re2/re2/run-ptest b/meta-openembedded/meta-oe/recipes-support/re2/re2/run-ptest
new file mode 100644
index 0000000..8bd5fd1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/re2/re2/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+ctest --force-new-ctest-process | sed -u 's/\*\*\*/   /g' | awk '/Test +#/{gsub(/Passed/,"PASS"); gsub(/Failed/,"FAIL"); gsub(/Skipped/,"SKIP"); print $6": "$4; fflush();}'
diff --git a/meta-openembedded/meta-oe/recipes-support/re2/re2_2023.03.01.bb b/meta-openembedded/meta-oe/recipes-support/re2/re2_2023.03.01.bb
index 78bf695..fe210d5 100644
--- a/meta-openembedded/meta-oe/recipes-support/re2/re2_2023.03.01.bb
+++ b/meta-openembedded/meta-oe/recipes-support/re2/re2_2023.03.01.bb
@@ -6,17 +6,27 @@
 # tag 2023-03-01
 SRCREV = "241e2e430836e80f93d704d1f06cd3e7fe3100f5"
 
-SRC_URI = "git://github.com/google/re2.git;branch=main;protocol=https"
+SRC_URI = "git://github.com/google/re2.git;branch=main;protocol=https \
+           ${@bb.utils.contains('PTEST_ENABLED', '1', 'file://run-ptest', '', d)} \
+          "
 
 S = "${WORKDIR}/git"
 
-inherit cmake
+inherit cmake ptest
+RDEPENDS:${PN}-ptest += "cmake sed"
 
 EXTRA_OECMAKE += " \
 	-DBUILD_SHARED_LIBS=ON \
-	-DRE2_BUILD_TESTING=OFF \
+        ${@bb.utils.contains('PTEST_ENABLED', '1', '-DRE2_BUILD_TESTING=ON', '-DRE2_BUILD_TESTING=OFF', d)} \
 "
 
+do_install_ptest () {
+    cp -r ${B}/*_test ${D}${PTEST_PATH}
+    cp -r ${B}/CTestTestfile.cmake ${D}${PTEST_PATH}
+    sed -i -e 's#${B}#${PTEST_PATH}#g' `find ${D}${PTEST_PATH} -name CTestTestfile.cmake`
+    sed -i -e 's#${S}#${PTEST_PATH}#g' `find ${D}${PTEST_PATH} -name CTestTestfile.cmake`
+}
+
 # ignore .so in /usr/lib64
 FILES:${PN} = "${libdir}"
 INSANE_SKIP:${PN} += "dev-so"
diff --git a/meta-openembedded/meta-oe/recipes-support/remmina/remmina_1.4.32.bb b/meta-openembedded/meta-oe/recipes-support/remmina/remmina_1.4.33.bb
similarity index 95%
rename from meta-openembedded/meta-oe/recipes-support/remmina/remmina_1.4.32.bb
rename to meta-openembedded/meta-oe/recipes-support/remmina/remmina_1.4.33.bb
index 74c68a5..590f508 100644
--- a/meta-openembedded/meta-oe/recipes-support/remmina/remmina_1.4.32.bb
+++ b/meta-openembedded/meta-oe/recipes-support/remmina/remmina_1.4.33.bb
@@ -25,7 +25,7 @@
 DEPENDS:append:libc-musl = " libexecinfo"
 LDFLAGS:append:libc-musl = " -lexecinfo"
 
-SRCREV = "4804f68f23045a38c3a7be46810fce14bac2fc3c"
+SRCREV = "2c4e1479433e51418ecb6089f35182bfebc5b57e"
 SRC_URI = "git://gitlab.com/Remmina/Remmina;protocol=https;branch=master"
 S = "${WORKDIR}/git"
 
diff --git a/meta-openembedded/meta-oe/recipes-support/reptyr/reptyr_0.10.0.bb b/meta-openembedded/meta-oe/recipes-support/reptyr/reptyr_0.10.0.bb
new file mode 100644
index 0000000..57b31a7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/reptyr/reptyr_0.10.0.bb
@@ -0,0 +1,29 @@
+SUMMARY = "Reparent a running program to a new terminal"
+DESCRIPTION = "reptyr is a utility for taking an existing running program and \
+attaching it to a new terminal. Started a long-running process over ssh, but \
+have to leave and don't want to interrupt it? Just start a screen, use reptyr \
+to grab it, and then kill the ssh session and head on home."
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=25a0555028c71837623fa6dfa4cc45c0"
+
+SRC_URI = "git://github.com/nelhage/reptyr.git;protocol=https;branch=master"
+SRCREV = "1238097fc2cd15db058d2185cc4985daa87bcd41"
+
+S = "${WORKDIR}/git"
+
+inherit bash-completion github-releases manpages pkgconfig
+
+GITHUB_BASE_URI = "https://github.com/nelhage/${BPN}/releases/"
+
+PACKAGECONFIG ?= ""
+PACKAGECONFIG[manpages] = ""
+
+EXTRA_OEMAKE = "'BINDIR=${bindir}' 'MANDIR=${mandir}' 'PKG_CONFIG=${STAGING_BINDIR_NATIVE}/pkg-config'"
+
+do_compile () {
+	oe_runmake
+}
+
+do_install () {
+	oe_runmake install 'DESTDIR=${D}'
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/smarty/smarty_4.3.0.bb b/meta-openembedded/meta-oe/recipes-support/smarty/smarty_4.3.4.bb
similarity index 91%
rename from meta-openembedded/meta-oe/recipes-support/smarty/smarty_4.3.0.bb
rename to meta-openembedded/meta-oe/recipes-support/smarty/smarty_4.3.4.bb
index bc6fc0d..960d066 100644
--- a/meta-openembedded/meta-oe/recipes-support/smarty/smarty_4.3.0.bb
+++ b/meta-openembedded/meta-oe/recipes-support/smarty/smarty_4.3.4.bb
@@ -7,9 +7,9 @@
 
 DEPENDS += "php"
 
-SRC_URI = "git://github.com/smarty-php/smarty.git;protocol=https;branch=master"
+SRC_URI = "git://github.com/smarty-php/smarty.git;protocol=https;branch=support/4.3"
 
-SRCREV = "c02e9e135ea719b91f457a0072748ded0e852e7d"
+SRCREV = "3931d8f54b8f7a4ffab538582d34d4397ba8daa5"
 
 S = "${WORKDIR}/git"
 
diff --git a/meta-openembedded/meta-oe/recipes-support/tio/tio_2.6.bb b/meta-openembedded/meta-oe/recipes-support/tio/tio_2.7.bb
similarity index 91%
rename from meta-openembedded/meta-oe/recipes-support/tio/tio_2.6.bb
rename to meta-openembedded/meta-oe/recipes-support/tio/tio_2.7.bb
index faef290..59c772b 100644
--- a/meta-openembedded/meta-oe/recipes-support/tio/tio_2.6.bb
+++ b/meta-openembedded/meta-oe/recipes-support/tio/tio_2.7.bb
@@ -7,7 +7,7 @@
 LIC_FILES_CHKSUM = "file://LICENSE;md5=0e1a95b7892d3015ecd6d0016f601f2c"
 
 SRC_URI = "git://github.com/tio/tio;protocol=https;branch=master"
-SRCREV = "88ef473362c5a1ff0dcd389fd5b1d4d6bf202472"
+SRCREV = "1c32555c2a4f26b60f94757656825fc6684d6892"
 
 S = "${WORKDIR}/git"
 
diff --git a/meta-openembedded/meta-oe/recipes-support/toscoterm/toscoterm_git.bb b/meta-openembedded/meta-oe/recipes-support/toscoterm/toscoterm_git.bb
deleted file mode 100644
index b9f2605..0000000
--- a/meta-openembedded/meta-oe/recipes-support/toscoterm/toscoterm_git.bb
+++ /dev/null
@@ -1,29 +0,0 @@
-SUMMARY = "A very small and simple terminal emulator"
-SECTION = "x11/applications"
-DEPENDS = "vte9"
-
-LICENSE = "GPL-3.0-only"
-LIC_FILES_CHKSUM = "file://main.c;start_line=5;end_line=16;md5=9ae4bf20caf291afa94530026bd15229"
-
-# 0.2 version
-SRCREV = "8586d617aed19fc75f5ae1e07270752c1b2f9a30"
-SRC_URI = "git://github.com/OSSystems/toscoterm.git;branch=master;protocol=https"
-
-S = "${WORKDIR}/git"
-
-inherit features_check gitpkgv pkgconfig
-
-REQUIRED_DISTRO_FEATURES = "x11"
-
-do_compile() {
-    oe_runmake \
-        CC="${CC}" \
-        CFLAGS="`pkg-config --cflags vte`${CFLAGS}" \
-        LDFLAGS="`pkg-config --libs vte` ${LDFLAGS}"
-}
-
-do_install() {
-    oe_runmake PREFIX="${prefix}" DESTDIR="${D}" install
-}
-
-RDEPENDS:${PN}:append:libc-glibc = " glibc-gconv-ibm437"
diff --git a/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-vbox_fb-fix-kernel-v6.5-build.patch b/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-vbox_fb-fix-kernel-v6.5-build.patch
deleted file mode 100644
index 01969d4..0000000
--- a/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-vbox_fb-fix-kernel-v6.5-build.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-From 4cf34517b0c793405dca154cc70c9b5d1a566a8a Mon Sep 17 00:00:00 2001
-From: Bruce Ashfield <bruce.ashfield@gmail.com>
-Date: Fri, 29 Sep 2023 14:52:50 -0400
-Subject: [PATCH] vbox_fb: fix kernel v6.5 build
-
-When building against the 6.5 kernel (and kernel headers), the following
-build error is encountered:
-
-   | vboxguestdrivers/7.0.10/vboxguestdrivers-7.0.10/vboxvideo/vbox_fb.c:194:24: error: 'drm_fb_helper_sys_fillrect' undeclared here (not in a function); did you mean 'drm_fb_helper_lastclose'?
-   |   194 |         .fb_fillrect = drm_fb_helper_sys_fillrect,
-   |       |                        ^~~~~~~~~~~~~~~~~~~~~~~~~~
-   |       |                        drm_fb_helper_lastclose
-   | vboxguestdrivers/7.0.10/vboxguestdrivers-7.0.10/vboxvideo/vbox_fb.c:195:24: error: 'drm_fb_helper_sys_copyarea' undeclared here (not in a function); did you mean 'drm_fb_helper_set_par'?
-   |   195 |         .fb_copyarea = drm_fb_helper_sys_copyarea,
-   |       |                        ^~~~~~~~~~~~~~~~~~~~~~~~~~
-   |       |                        drm_fb_helper_set_par
-   | vboxguestdrivers/7.0.10/vboxguestdrivers-7.0.10/vboxvideo/vbox_fb.c:196:25: error: 'drm_fb_helper_sys_imageblit' undeclared here (not in a function)
-   |   196 |         .fb_imageblit = drm_fb_helper_sys_imageblit,
-   |       |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-We backport a patch from vbox-dev to fix the issue.
-
-Upstream-Status: Submitted [https://www.mail-archive.com/vbox-dev@virtualbox.org/msg10129.html]
-
-Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com>
----
- src/VBox/Additions/linux/drm/vbox_fb.c | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/src/VBox/Additions/linux/drm/vbox_fb.c b/src/VBox/Additions/linux/drm/vbox_fb.c
-index 2a8c79ab..d453533c 100644
---- a/src/VBox/Additions/linux/drm/vbox_fb.c
-+++ b/src/VBox/Additions/linux/drm/vbox_fb.c
-@@ -196,9 +196,13 @@ static struct fb_ops vboxfb_ops = {
- 	.owner = THIS_MODULE,
- 	.fb_check_var = drm_fb_helper_check_var,
- 	.fb_set_par = drm_fb_helper_set_par,
-+#if RTLNX_VER_MIN(6, 5, 0)
-+	FB_DEFAULT_SYS_OPS,
-+#else
- 	.fb_fillrect = drm_fb_helper_sys_fillrect,
- 	.fb_copyarea = drm_fb_helper_sys_copyarea,
- 	.fb_imageblit = drm_fb_helper_sys_imageblit,
-+#endif
- 	.fb_pan_display = drm_fb_helper_pan_display,
- 	.fb_blank = drm_fb_helper_blank,
- 	.fb_setcmap = drm_fb_helper_setcmap,
--- 
-2.34.1
-
diff --git a/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_7.0.10.bb b/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_7.0.12.bb
similarity index 92%
rename from meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_7.0.10.bb
rename to meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_7.0.12.bb
index 8e90138..6b493de 100644
--- a/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_7.0.10.bb
+++ b/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_7.0.12.bb
@@ -13,10 +13,9 @@
 
 SRC_URI = "http://download.virtualbox.org/virtualbox/${PV}/${VBOX_NAME}.tar.bz2 \
     file://Makefile.utils \
-    file://0001-vbox_fb-fix-kernel-v6.5-build.patch \
 "
 
-SRC_URI[sha256sum] = "0b1e6d8b7f87d017c7fae37f80586acff04f799ffc1d51e995954d6415dee371"
+SRC_URI[sha256sum] = "d76634c6ccf62503726a5aeae6c78a3462474c51a0ebe4942591ccc2d939890a"
 
 S ?= "${WORKDIR}/vbox_module"
 S:task-patch = "${WORKDIR}/${VBOX_NAME}"
@@ -24,7 +23,7 @@
 export VBOX_KBUILD_TARGET_ARCH="${ARCH}"
 export VBOX_KBUILD_TARGET_ARCH:x86-64="amd64"
 
-EXTRA_OEMAKE += "KERN_DIR='${WORKDIR}/${KERNEL_VERSION}/build' KBUILD_VERBOSE=1"
+EXTRA_OEMAKE += "KERN_DIR='${WORKDIR}/${KERNEL_VERSION}/build' KBUILD_VERBOSE=1 CC='${CC} ${DEBUG_PREFIX_MAP} -fdebug-prefix-map=${STAGING_KERNEL_DIR}=${KERNEL_SRC_PATH} -fdebug-prefix-map=${STAGING_KERNEL_BUILDDIR}=${KERNEL_SRC_PATH}'"
 
 # otherwise 5.2.22 builds just vboxguest
 MAKE_TARGETS = "all"
diff --git a/meta-openembedded/meta-oe/recipes-support/webkitgtk/webkitgtk3_2.42.0.bb b/meta-openembedded/meta-oe/recipes-support/webkitgtk/webkitgtk3_2.42.2.bb
similarity index 98%
rename from meta-openembedded/meta-oe/recipes-support/webkitgtk/webkitgtk3_2.42.0.bb
rename to meta-openembedded/meta-oe/recipes-support/webkitgtk/webkitgtk3_2.42.2.bb
index f682cd9..ac75afb 100644
--- a/meta-openembedded/meta-oe/recipes-support/webkitgtk/webkitgtk3_2.42.0.bb
+++ b/meta-openembedded/meta-oe/recipes-support/webkitgtk/webkitgtk3_2.42.2.bb
@@ -15,7 +15,7 @@
            file://0d3344e17d258106617b0e6d783d073b188a2548.patch \
            file://no-musttail-arm.patch \
            "
-SRC_URI[sha256sum] = "828f95935861fae583fb8f2ae58cf64c63c178ae2b7c2d6f73070813ad64ed1b"
+SRC_URI[sha256sum] = "5720aa3e8627f1b9f63252187d4df0f8233ae71d697b1796ebfbe5ca750bd118"
 
 inherit cmake pkgconfig gobject-introspection perlnative features_check upstream-version-is-even gi-docgen
 
diff --git a/meta-openembedded/meta-oe/recipes-support/xdg-desktop-portal/xdg-desktop-portal_1.18.0.bb b/meta-openembedded/meta-oe/recipes-support/xdg-desktop-portal/xdg-desktop-portal_1.18.1.bb
similarity index 90%
rename from meta-openembedded/meta-oe/recipes-support/xdg-desktop-portal/xdg-desktop-portal_1.18.0.bb
rename to meta-openembedded/meta-oe/recipes-support/xdg-desktop-portal/xdg-desktop-portal_1.18.1.bb
index b9173a9..f8a07eb 100644
--- a/meta-openembedded/meta-oe/recipes-support/xdg-desktop-portal/xdg-desktop-portal_1.18.0.bb
+++ b/meta-openembedded/meta-oe/recipes-support/xdg-desktop-portal/xdg-desktop-portal_1.18.1.bb
@@ -31,13 +31,12 @@
 "
 
 S = "${WORKDIR}/git"
-SRCREV = "a4b27063222b16652e73b422e5448d75335199ef"
+SRCREV = "37a6f7c8b8e08b9861f05e172cd4e0d07a832c4d"
 
 FILES:${PN} += "${libdir}/systemd ${datadir}/dbus-1"
 
 EXTRA_OEMESON += " \
 	--cross-file=${WORKDIR}/meson-${PN}.cross \
-	-Dflatpak-interfaces-dir=${STAGING_DATADIR}/dbus-1/interfaces \
 	-Ddbus-service-dir=${datadir}/dbus-1/services \
 "
 
diff --git a/meta-openembedded/meta-oe/recipes-support/xmlsec1/xmlsec1/0001-xmldsigverify-Include-xmlsec-parser.h.patch b/meta-openembedded/meta-oe/recipes-support/xmlsec1/xmlsec1/0001-xmldsigverify-Include-xmlsec-parser.h.patch
deleted file mode 100644
index 4347e92..0000000
--- a/meta-openembedded/meta-oe/recipes-support/xmlsec1/xmlsec1/0001-xmldsigverify-Include-xmlsec-parser.h.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From 30e1afe60820c18c89cd10e9dcb7208ad5676d1d Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Thu, 19 Jan 2023 15:06:35 -0800
-Subject: [PATCH] xmldsigverify: Include xmlsec/parser.h
-
-this ensures that xmlSecParserSetDefaultOptions definition is made
-available
-
-Fixes
-| xmldsigverify.c:275:5: error: call to undeclared function 'xmlSecParserSetDefaultOptions'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
-|     xmlSecParserSetDefaultOptions(XML_PARSE_NOENT | XML_PARSE_NOCDATA |
-|     ^
-
-Upstream-Status: Submitted [https://github.com/lsh123/xmlsec/pull/463]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- examples/xmldsigverify.c | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/examples/xmldsigverify.c b/examples/xmldsigverify.c
-index ed538c70..ff68120e 100644
---- a/examples/xmldsigverify.c
-+++ b/examples/xmldsigverify.c
-@@ -25,6 +25,7 @@
- #include <xmlsec/xmldsig.h>
- #include <xmlsec/crypto.h>
- 
-+#include <xmlsec/parser.h>
- /* #define XMLDSIGVERIFY_DEFAULT_TRUSTED_CERTS_FOLDER   "/etc/httpd/conf/ssl.crt" */
- #define XMLDSIGVERIFY_DEFAULT_TRUSTED_CERTS_FOLDER      "/var/www/cgi-bin/keys-certs.def"
- #define XMLDSIGVERIFY_KEY_AND_CERTS_FOLDER              "/var/www/cgi-bin/keys-certs"
-@@ -36,7 +37,7 @@ int verify_request(xmlSecKeysMngrPtr mngr);
- int url_decode(char *buf, size_t size);
- 
- int
--main(int , char **) {
-+main() {
-     xmlSecKeysMngrPtr mngr;
- #ifndef XMLSEC_NO_XSLT
-     xsltSecurityPrefsPtr xsltSecPrefs = NULL;
--- 
-2.39.1
-
diff --git a/meta-openembedded/meta-oe/recipes-support/xmlsec1/xmlsec1/run-ptest b/meta-openembedded/meta-oe/recipes-support/xmlsec1/xmlsec1/run-ptest
index a203c38..afd8c69 100755
--- a/meta-openembedded/meta-oe/recipes-support/xmlsec1/xmlsec1/run-ptest
+++ b/meta-openembedded/meta-oe/recipes-support/xmlsec1/xmlsec1/run-ptest
@@ -34,8 +34,8 @@
 
 echo "---------------------------------------------------"
 echo "Verifying a signature with keys manager..."
-./verify2 sign1-res.xml rsapub.pem
-./verify2 sign2-res.xml rsapub.pem
+./verify2 sign1-res.xml rsakey.pem
+./verify2 sign2-res.xml rsakey.pem
 check_return verify-keys-manager
 
 echo "---------------------------------------------------"
diff --git a/meta-openembedded/meta-oe/recipes-support/xmlsec1/xmlsec1_1.2.37.bb b/meta-openembedded/meta-oe/recipes-support/xmlsec1/xmlsec1_1.3.2.bb
similarity index 80%
rename from meta-openembedded/meta-oe/recipes-support/xmlsec1/xmlsec1_1.2.37.bb
rename to meta-openembedded/meta-oe/recipes-support/xmlsec1/xmlsec1_1.3.2.bb
index a3da770..ff5b6fa 100644
--- a/meta-openembedded/meta-oe/recipes-support/xmlsec1/xmlsec1_1.2.37.bb
+++ b/meta-openembedded/meta-oe/recipes-support/xmlsec1/xmlsec1_1.3.2.bb
@@ -13,17 +13,16 @@
 SECTION = "libs"
 
 SRC_URI = "http://www.aleksey.com/xmlsec/download/${BP}.tar.gz \
-    file://fix-ltmain.sh.patch \
-    file://change-finding-path-of-nss.patch \
-    file://makefile-ptest.patch \
-    file://xmlsec1-examples-allow-build-in-separate-dir.patch \
-    file://0001-nss-nspr-fix-for-multilib.patch \
-    file://run-ptest \
-    file://ensure-search-path-non-host.patch \
-    file://0001-xmldsigverify-Include-xmlsec-parser.h.patch \
-    "
+           file://fix-ltmain.sh.patch \
+           file://change-finding-path-of-nss.patch \
+           file://makefile-ptest.patch \
+           file://xmlsec1-examples-allow-build-in-separate-dir.patch \
+           file://0001-nss-nspr-fix-for-multilib.patch \
+           file://run-ptest \
+           file://ensure-search-path-non-host.patch \
+           "
 
-SRC_URI[sha256sum] = "5f8dfbcb6d1e56bddd0b5ec2e00a3d0ca5342a9f57c24dffde5c796b2be2871c"
+SRC_URI[sha256sum] = "4003c56b3d356d21b1db7775318540fad6bfedaf5f117e8f7c010811219be3cf"
 
 inherit autotools-brokensep ptest pkgconfig
 
diff --git a/meta-openembedded/meta-oe/recipes-support/zchunk/zchunk_1.3.1.bb b/meta-openembedded/meta-oe/recipes-support/zchunk/zchunk_1.3.2.bb
similarity index 92%
rename from meta-openembedded/meta-oe/recipes-support/zchunk/zchunk_1.3.1.bb
rename to meta-openembedded/meta-oe/recipes-support/zchunk/zchunk_1.3.2.bb
index 2961e44..27ebd63 100644
--- a/meta-openembedded/meta-oe/recipes-support/zchunk/zchunk_1.3.1.bb
+++ b/meta-openembedded/meta-oe/recipes-support/zchunk/zchunk_1.3.2.bb
@@ -5,7 +5,7 @@
 
 SRC_URI = "git://github.com/zchunk/zchunk.git;protocol=https;branch=main"
 
-SRCREV = "b462b1587f7d3aa782689430e83e96c737748f33"
+SRCREV = "bdd6d6fc150d53d89658bebbfa73a7bfd9a89cb4"
 S = "${WORKDIR}/git"
 
 DEPENDS = "zstd"
diff --git a/meta-openembedded/meta-oe/recipes-test/catch2/catch2_2.13.7.bb b/meta-openembedded/meta-oe/recipes-test/catch2/catch2_2.13.10.bb
similarity index 92%
rename from meta-openembedded/meta-oe/recipes-test/catch2/catch2_2.13.7.bb
rename to meta-openembedded/meta-oe/recipes-test/catch2/catch2_2.13.10.bb
index 1dd082f..8512a0f 100644
--- a/meta-openembedded/meta-oe/recipes-test/catch2/catch2_2.13.7.bb
+++ b/meta-openembedded/meta-oe/recipes-test/catch2/catch2_2.13.10.bb
@@ -5,7 +5,7 @@
 LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=e4224ccaecb14d942c71d31bef20d78c"
 
 SRC_URI = "git://github.com/catchorg/Catch2.git;branch=v2.x;protocol=https"
-SRCREV = "c4e3767e265808590986d5db6ca1b5532a7f3d13"
+SRCREV = "182c910b4b63ff587a3440e08f84f70497e49a81"
 
 S = "${WORKDIR}/git"
 
diff --git a/meta-openembedded/meta-oe/recipes-test/shunit2/shunit2_2.1.8.bb b/meta-openembedded/meta-oe/recipes-test/shunit2/shunit2_2.1.8.bb
new file mode 100644
index 0000000..683600f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-test/shunit2/shunit2_2.1.8.bb
@@ -0,0 +1,13 @@
+SUMMARY = "shUnit2 is a xUnit based unit test framework for Bourne based shell scripts"
+HOMEPAGE = "https://github.com/kward/shunit2"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e3fc50a88d0a364313df4b21ef20c29e"
+
+SRC_URI = " git://github.com/kward/shunit2.git;branch=master;protocol=https"
+SRCREV = "080159b303537888c5d41910b4d47a5002638e30"
+
+S = "${WORKDIR}/git"
+
+do_install() {
+    install -D -m 0755 ${S}/shunit2 ${D}${bindir}/shunit2
+}