meta-openembedded: subtree update:7206f7f5bc..98175fd0cc

Adam Miartus (4):
      libcereal: update to newer version
      libcereal: pick up additional licenses of cereal components
      libcereal: add dev package that can be included into toolchain sdk
      cereal: Remove

Alejandro Hernandez Samaniego (2):
      freerdp: Upgrade 2.2.0 -> 2.3.0
      remmina: Upgrade 1.4.10 -> 1.4.11

Anatol Belski (2):
      abseil-cpp: Relax build requirements
      grpc: Upgrade 1.24.3 -> 1.35.0

Andrei Gherzan (1):
      nss: Fix warnings generated by getcwd

Bartosz Golaszewski (1):
      pydbus-manager: new package

Carlos Rafael Giani (2):
      pipewire: Move to meta-multimedia
      pipewire: Rework 0.3 recipe and upgrade to 0.3.22

Christian B. Sørensen (1):
      libgpiod: packageqa problem => static python lib to ${PN}-staticdev

Clément Péron (2):
      grpc: Add PackageConfig to build only required plugins
      grpc: remove gflags dependency

Diego Santa Cruz (1):
      php: split out phpdbg into a separate package

Enrico Jörns (1):
      python3-aiohttp: add missing RDEPENDS on python3-typing-extensions

Gianfranco (1):
      mosquitto: Upgrade 2.0.7 -> 2.0.8

Hongxu Jia (1):
      lvm2/libdevmapper: 2.03.06 -> 2.03.11

Kai Kang (2):
      xfsprogs: 5.9.0 -> 5.10.0
      libinih: install header files without prefix dir inih

Khem Raj (39):
      yelp-xsl: Mark native libxml2 in rdeps
      liburing: Do not build examples on risc/musl
      aom: Disable neon on arm when not present in TUNE_FEATURES
      python3-grpcio: Upgrade to 1.35.0
      python3-grpcio-tools: Upgrade to 1.35.0
      recipes: Update common-licenses references to match new names
      openldap: Refresh patches to remove fuzz
      abseil-cpp: Remove libexecinfo band-aid for musl
      nss: Add powerpc64 little endian support
      luajit: Upgrade to latest on v2.1 release
      influxdb: Generate checksums for term module
      libauthen-sasl-perl,libhtml-tree-perl: allow PERL_USE_UNSAFE_INC
      dvb-apps: Allow insecure inc paths
      glog: Upgrade to 0.4.0
      mpd: Upgrade to 0.22 series
      mbedtls: Fix gcc11 stringop-overflow warning
      v4l-utils: Package systemd fragment for systemd-udevd.service.d
      mpich: Upgrade to 3.4.1
      srt: Backport fix for missing <limits> header
      gerbera: Update to 1.7.0
      nautilus: Drop use of volatile
      vlc: Fix build with gcc 11
      squid: Include <limits> for using std::numeric_limits
      minifi-cpp: include limits header for numeric_limits definition
      opencv: Upgrade to 4.5.1
      mozjs: Drop using JS_VOLATILE_ARM
      opengl-es-cts: Disable -Wuninitialized for external/amber
      grpc: Upgrade to 1.36.1
      mongodb: Include <optional> c++ header
      libyui,libyui-ncurses: Upgrade to 4.0.0
      libyui-ncurses: Disable Werror
      libyui: Adopt to new cmake option to disable Werror
      libyui-ncurses: Pass -DNCURSES_WIDECHAR in CXXFLAGS
      gimp: Add missing dependencies
      gimp: Disable svg icons on arm
      libcamera: Update to latest
      abseil-cpp: Ask for C++14 std explicitly
      opencv: Add packageconfig for building tests
      opencv: Remove duplicate patch

Leon Anavi (30):
      python3-h5py: Upgrade 2.10.0 -> 3.1.0
      python3-transitions: Upgrade 0.8.6 -> 0.8.7
      python3-tabulate: Upgrade 0.8.7 -> 0.8.9
      python3-pyperclip: Upgrade 1.8.1 -> 1.8.2
      python3-elementpath: Upgrade 2.1.3 -> 2.1.4
      python3-mpmath: Upgrade 1.1.0 -> 1.2.1
      python3-prompt-toolkit: Upgrade 3.0.14 -> 3.0.16
      python3-pkgconfig: Upgrade 1.5.1 -> 1.5.2
      python3-mypy: Upgrade 0.800 -> 0.812
      python3-typeguard: Upgrade 2.11.0 -> 2.11.1
      python3-httplib2: Upgrade 0.18.1 -> 0.19.0
      python3-autobahn: Upgrade 20.12.3 -> 21.2.1
      python3-iso8601: Upgrade 0.1.13 -> 0.1.14
      python3-alembic: Upgrade 1.5.4 -> 1.5.5
      python3-txaio: Upgrade 20.12.1 -> 21.2.1
      python3-watchdog: Upgrade 2.0.0 -> 2.0.2
      python3-rsa: Upgrade 4.7 -> 4.7.1
      python3-pandas: Upgrade 1.2.1 -> 1.2.2
      python3-cffi: Upgrade 1.14.4 -> 1.14.5
      python3-pymisp: Upgrade 2.4.137.3 -> 2.4.138
      python3-pytest-runner: Upgrade 5.2 -> 5.3.0
      python3-markdown: Upgrade 3.3.3 -> 3.3.4
      python3-pulsectl: Upgrade 20.5.1 -> 21.2.0
      python3-cvxopt: Upgrade 1.2.5 -> 1.2.6
      python3-rsa: Upgrade 4.7.1 -> 4.7.2
      python3-pyzmq: Upgrade 22.0.2 -> 22.0.3
      python3-tqdm: Upgrade 4.57.0 -> 4.58.0
      python3-autobahn: Upgrade 21.2.1 -> 21.2.2
      python3-aiohttp: Upgrade 3.7.3 -> 3.7.4
      python3-semantic-version: Add recipe

Matteo Croce (1):
      recipes-kernel: add libbpf

Michael Vetter (1):
      jasper: upgrade 2.0.24 -> 2.0.25

Mingli Yu (3):
      crash: add support for lockless ringbuffer
      gtkmm3: use relative path
      mcelog: Upgrade to 175

Oleksandr Kravchuk (21):
      rfkill: update to 1.0
      python3-idna: update to 3.1
      python3-pika: update to 1.2.0
      python3-protobuf: update to 3.14.0
      python3-pychromecast: update to 8.1.0
      python3-pykickstart: update to 3.32
      python3-watchdog: update to 2.0.0
      wolfssl: updae to 4.7.0
      ncmpc: update to 0.45
      rocksdb: update to 6.15.5
      stm32flash: update to 0.6
      python3-astroid: update to 2.5
      python3-configargparse: update to 1.3
      python3-cryptography-vectors: update to 3.4.6
      python3-periphery: update to 2.3.0
      python3-sentry-sdk: update to 0.20.3
      python3-soupsieve: update to 2.2
      python3-supervisor: update to 4.2.1
      python3-tqdm: update 4.57.0
      python3-typeguard: update to 2.11.0
      python3-xmlschema: update to 1.5.1

Oleksiy Obitotskyy (2):
      wireshark-src: improve reproducibility
      smartmontools: Improve reproducibility

Patrick Williams (2):
      boost-url: update to latest
      catch2: upgrade to 2.13.4

Peter Kjellerstedt (1):
      librcereal: A couple of improvements

Randy MacLeod (2):
      libssh2: remove the recipe since it moved to oe-core
      libgit2: remove the recipe since it moved to oe-core

Ross Burton (1):
      python3-intelhex: add recipe for the intelhex package

Sean Nyekjaer (3):
      nodejs: 12.20.1 -> 12.20.2
      zstd: split bin into separate package
      can-utils: split into more packages

Ulrich ?lmann (1):
      v4l-utils: update to 1.20.0

Wang Mingyu (7):
      stunnel: upgrade 5.57 -> 5.58
      iwd: upgrade 1.11 -> 1.12
      protobuf: upgrade 3.14.0 -> 3.15.2
      redis-plus-plus: upgrade 1.2.1 -> 1.2.2
      tesseract-lang: upgrade 4.0.0 -> 4.1.0
      gphoto2: upgrade 2.5.26 -> 2.5.27
      libgphoto2: upgrade 2.5.26 -> 2.5.27

Yanfei Xu (1):
      lmbench: Install cache command and fix typos in manual page

Yi Fan Yu (4):
      rsyslog: upgrade 8.2006.0->8.2012.0
      tcpdump: update 4.9.3 -> 4.99.0
      rsyslog: Add imhttp to packageconfig
      rsyslog: Update 8.2012.0 -> 8.2102.0

Yi Zhao (1):
      vsftpd: allow newfstatat and pselect6 syscalls in the seccomp sandbox

akuster (1):
      softhsm: update to 2.6.1 and align

zangrc (11):
      fuse3: upgrade 3.10.1 -> 3.10.2
      enca: upgrade 1.9 -> 1.19
      gensio: upgrade 2.2.3 -> 2.2.4
      lcms: upgrade 2.11 -> 2.12
      libburn: upgrade 1.5.2 -> 1.5.4
      opensaf: upgrade 5.20.11 -> 5.21.03
      openvpn: upgrade 2.5.0 -> 2.5.1
      strongswan: upgrade 5.9.1 -> 5.9.2
      wireguard-tools: upgrade 1.0.20200827 -> 1.0.20210223
      hwdata: upgrade 0.343 -> 0.345
      mailcap: upgrade 2.1.49 -> 2.1.52

zhengruoqin (7):
      libjcat: upgrade 0.1.4 -> 0.1.6
      postgresql: upgrade 13.1 -> 13.2
      ser2net: upgrade 4.3.0 -> 4.3.3
      Fix do_package error when enable multilib.
      nano: upgrade 5.5 -> 5.6
      qpdf: upgrade 10.0.4 -> 10.2.0
      sigrok-cli: upgrade 0.7.1 -> 0.7.2

Signed-off-by: Andrew Geissler <geissonator@yahoo.com>
Change-Id: Ibbbafaa846b1dcc3c03ac585e7d5075826e4ee37
diff --git a/meta-openembedded/meta-oe/recipes-kernel/crash/crash/0001-printk-add-support-for-lockless-ringbuffer.patch b/meta-openembedded/meta-oe/recipes-kernel/crash/crash/0001-printk-add-support-for-lockless-ringbuffer.patch
new file mode 100644
index 0000000..1aaf1e6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/crash/crash/0001-printk-add-support-for-lockless-ringbuffer.patch
@@ -0,0 +1,445 @@
+From a5531b24750e7949c35640d996ea14c0587938bc Mon Sep 17 00:00:00 2001
+From: John Ogness <john.ogness@linutronix.de>
+Date: Fri, 20 Nov 2020 05:56:59 +0000
+Subject: [PATCH 1/2] printk: add support for lockless ringbuffer
+
+Linux 5.10 introduces a new lockless ringbuffer. The new ringbuffer
+is structured completely different to the previous iterations.
+Add support for dumping the ringbuffer with the "log" command.
+The new ringbuffer is detected based on the availability of
+the "prb" symbol.
+
+Upstream-Status: Backport [https://github.com/crash-utility/crash/commit/a5531b24750e7949c35640d996ea14c0587938bc]
+
+Signed-off-by: John Ogness <john.ogness@linutronix.de>
+Signed-off-by: Kazuhito Hagio <k-hagio-ab@nec.com>
+Signed-off-by: Mingli Yu <mingli.yu@windriver.com> 
+---
+ Makefile  |   5 ++
+ defs.h    |  30 +++++++
+ kernel.c  |   7 +-
+ printk.c  | 256 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ symbols.c |  27 ++++++
+ 5 files changed, 324 insertions(+), 1 deletion(-)
+ create mode 100644 printk.c
+
+diff --git a/Makefile b/Makefile
+index d185719..f66eba7 100644
+--- a/Makefile
++++ b/Makefile
+@@ -61,6 +61,7 @@ VMWARE_HFILES=vmware_vmss.h
+ 
+ CFILES=main.c tools.c global_data.c memory.c filesys.c help.c task.c \
+ 	kernel.c test.c gdb_interface.c configure.c net.c dev.c bpf.c \
++	printk.c \
+ 	alpha.c x86.c ppc.c ia64.c s390.c s390x.c s390dbf.c ppc64.c x86_64.c \
+ 	arm.c arm64.c mips.c sparc64.c \
+ 	extensions.c remote.c va_server.c va_server_v1.c symbols.c cmdline.c \
+@@ -80,6 +81,7 @@ SOURCE_FILES=${CFILES} ${GENERIC_HFILES} ${MCORE_HFILES} \
+ 
+ OBJECT_FILES=main.o tools.o global_data.o memory.o filesys.o help.o task.o \
+ 	build_data.o kernel.o test.o gdb_interface.o net.o dev.o bpf.o \
++	printk.o \
+ 	alpha.o x86.o ppc.o ia64.o s390.o s390x.o s390dbf.o ppc64.o x86_64.o \
+ 	arm.o arm64.o mips.o sparc64.o \
+ 	extensions.o remote.o va_server.o va_server_v1.o symbols.o cmdline.o \
+@@ -363,6 +365,9 @@ task.o: ${GENERIC_HFILES} task.c
+ kernel.o: ${GENERIC_HFILES} kernel.c
+ 	${CC} -c ${CRASH_CFLAGS} kernel.c ${WARNING_OPTIONS} ${WARNING_ERROR}
+ 
++printk.o: ${GENERIC_HFILES} printk.c
++	${CC} -c ${CRASH_CFLAGS} printk.c ${WARNING_OPTIONS} ${WARNING_ERROR}
++
+ gdb_interface.o: ${GENERIC_HFILES} gdb_interface.c
+ 	${CC} -c ${CRASH_CFLAGS} gdb_interface.c ${WARNING_OPTIONS} ${WARNING_ERROR}
+ 
+diff --git a/defs.h b/defs.h
+index 9594950..e1a18e9 100644
+--- a/defs.h
++++ b/defs.h
+@@ -2106,6 +2106,28 @@ struct offset_table {                    /* stash of commonly-used offsets */
+ 	long irq_common_data_affinity;
+ 	long irq_desc_irq_common_data;
+ 	long uts_namespace_name;
++	long printk_info_seq;
++	long printk_info_ts_nsec;
++	long printk_info_text_len;
++	long printk_info_level;
++	long printk_info_caller_id;
++	long printk_info_dev_info;
++	long dev_printk_info_subsystem;
++	long dev_printk_info_device;
++	long prb_desc_ring;
++	long prb_text_data_ring;
++	long prb_desc_ring_count_bits;
++	long prb_desc_ring_descs;
++	long prb_desc_ring_infos;
++	long prb_desc_ring_head_id;
++	long prb_desc_ring_tail_id;
++	long prb_desc_state_var;
++	long prb_desc_text_blk_lpos;
++	long prb_data_blk_lpos_begin;
++	long prb_data_blk_lpos_next;
++	long prb_data_ring_size_bits;
++	long prb_data_ring_data;
++	long atomic_long_t_counter;
+ };
+ 
+ struct size_table {         /* stash of commonly-used sizes */
+@@ -2265,6 +2287,9 @@ struct size_table {         /* stash of commonly-used sizes */
+ 	long xa_node;
+ 	long zram_table_entry;
+ 	long irq_common_data;
++	long printk_info;
++	long printk_ringbuffer;
++	long prb_desc;
+ };
+ 
+ struct array_table {
+@@ -6696,6 +6721,11 @@ int vmware_guestdump_memory_dump(FILE *);
+  */
+ int calc_kaslr_offset(ulong *, ulong *);
+ 
++/*
++ * printk.c
++ */
++void dump_lockless_record_log(int);
++
+ /*
+  *  gnu_binutils.c
+  */
+diff --git a/kernel.c b/kernel.c
+index 9871637..e722ff9 100644
+--- a/kernel.c
++++ b/kernel.c
+@@ -5042,6 +5042,11 @@ dump_log(int msg_flags)
+ 	struct syment *nsp;
+ 	int log_wrap, loglevel, log_buf_len;
+ 
++	if (kernel_symbol_exists("prb")) {
++		dump_lockless_record_log(msg_flags);
++		return;
++	}
++
+ 	if (kernel_symbol_exists("log_first_idx") && 
+ 	    kernel_symbol_exists("log_next_idx")) {
+ 		dump_variable_length_record_log(msg_flags);
+@@ -5289,7 +5294,7 @@ dump_log_entry(char *logptr, int msg_flags)
+ }
+ 
+ /* 
+- *  Handle the new variable-length-record log_buf.
++ *  Handle the variable-length-record log_buf.
+  */
+ static void
+ dump_variable_length_record_log(int msg_flags)
+diff --git a/printk.c b/printk.c
+new file mode 100644
+index 0000000..f6d54ce
+--- /dev/null
++++ b/printk.c
+@@ -0,0 +1,256 @@
++#include "defs.h"
++#include <ctype.h>
++
++#define DESC_SV_BITS		(sizeof(unsigned long) * 8)
++#define DESC_COMMITTED_MASK	(1UL << (DESC_SV_BITS - 1))
++#define DESC_REUSE_MASK		(1UL << (DESC_SV_BITS - 2))
++#define DESC_FLAGS_MASK		(DESC_COMMITTED_MASK | DESC_REUSE_MASK)
++#define DESC_ID_MASK		(~DESC_FLAGS_MASK)
++
++/* convenience struct for passing many values to helper functions */
++struct prb_map {
++	char *prb;
++
++	char *desc_ring;
++	unsigned long desc_ring_count;
++	char *descs;
++	char *infos;
++
++	char *text_data_ring;
++	unsigned long text_data_ring_size;
++	char *text_data;
++};
++
++static void
++init_offsets(void)
++{
++	char *n;
++
++	n = "printk_info";
++	STRUCT_SIZE_INIT(printk_info, n);
++	MEMBER_OFFSET_INIT(printk_info_seq, n, "seq");
++	MEMBER_OFFSET_INIT(printk_info_ts_nsec, n, "ts_nsec");
++	MEMBER_OFFSET_INIT(printk_info_text_len, n, "text_len");
++	MEMBER_OFFSET_INIT(printk_info_level, n, "level");
++	MEMBER_OFFSET_INIT(printk_info_caller_id, n, "caller_id");
++	MEMBER_OFFSET_INIT(printk_info_dev_info, n, "dev_info");
++
++	n = "dev_printk_info";
++	MEMBER_OFFSET_INIT(dev_printk_info_subsystem, n, "subsystem");
++	MEMBER_OFFSET_INIT(dev_printk_info_device, n, "device");
++
++	n = "printk_ringbuffer";
++	STRUCT_SIZE_INIT(printk_ringbuffer, n);
++	MEMBER_OFFSET_INIT(prb_desc_ring, n, "desc_ring");
++	MEMBER_OFFSET_INIT(prb_text_data_ring, n, "text_data_ring");
++
++	n = "prb_desc_ring";
++	MEMBER_OFFSET_INIT(prb_desc_ring_count_bits, n, "count_bits");
++	MEMBER_OFFSET_INIT(prb_desc_ring_descs, n, "descs");
++	MEMBER_OFFSET_INIT(prb_desc_ring_infos, n, "infos");
++	MEMBER_OFFSET_INIT(prb_desc_ring_head_id, n, "head_id");
++	MEMBER_OFFSET_INIT(prb_desc_ring_tail_id, n, "tail_id");
++
++	n = "prb_desc";
++	STRUCT_SIZE_INIT(prb_desc, n);
++	MEMBER_OFFSET_INIT(prb_desc_state_var, n, "state_var");
++	MEMBER_OFFSET_INIT(prb_desc_text_blk_lpos, n, "text_blk_lpos");
++
++	n = "prb_data_blk_lpos";
++	MEMBER_OFFSET_INIT(prb_data_blk_lpos_begin, n, "begin");
++	MEMBER_OFFSET_INIT(prb_data_blk_lpos_next, n, "next");
++
++	n = "prb_data_ring";
++	MEMBER_OFFSET_INIT(prb_data_ring_size_bits, n, "size_bits");
++	MEMBER_OFFSET_INIT(prb_data_ring_data, n, "data");
++
++	n = "atomic_long_t";
++	MEMBER_OFFSET_INIT(atomic_long_t_counter, n, "counter");
++}
++
++static void
++dump_record(struct prb_map *m, unsigned long id, int msg_flags)
++{
++	unsigned short text_len;
++	unsigned long state_var;
++	unsigned int caller_id;
++	unsigned char level;
++	unsigned long begin;
++	unsigned long next;
++	char buf[BUFSIZE];
++	uint64_t ts_nsec;
++	ulonglong nanos;
++	ulonglong seq;
++	int ilen = 0, i;
++	char *desc, *info, *text, *p;
++	ulong rem;
++
++	desc = m->descs + ((id % m->desc_ring_count) * SIZE(prb_desc));
++
++	/* skip non-committed record */
++	state_var = ULONG(desc + OFFSET(prb_desc_state_var) +
++			OFFSET(atomic_long_t_counter));
++	if ((state_var & DESC_FLAGS_MASK) != DESC_COMMITTED_MASK)
++		return;
++
++	info = m->infos + ((id % m->desc_ring_count) * SIZE(printk_info));
++
++	seq = ULONGLONG(info + OFFSET(printk_info_seq));
++	caller_id = UINT(info + OFFSET(printk_info_caller_id));
++	if (CRASHDEBUG(1))
++		fprintf(fp, "seq: %llu caller_id: %x (%s: %u)\n", seq, caller_id,
++			caller_id & 0x80000000 ? "cpu" : "pid", caller_id & ~0x80000000);
++
++	text_len = USHORT(info + OFFSET(printk_info_text_len));
++
++	begin = ULONG(desc + OFFSET(prb_desc_text_blk_lpos) +
++		      OFFSET(prb_data_blk_lpos_begin)) %
++			m->text_data_ring_size;
++	next = ULONG(desc + OFFSET(prb_desc_text_blk_lpos) +
++		     OFFSET(prb_data_blk_lpos_next)) %
++			m->text_data_ring_size;
++
++	/* skip data-less text blocks */
++	if (begin == next)
++		goto out;
++
++	if ((msg_flags & SHOW_LOG_TEXT) == 0) {
++		ts_nsec = ULONGLONG(info + OFFSET(printk_info_ts_nsec));
++		nanos = (ulonglong)ts_nsec / (ulonglong)1000000000;
++		rem = (ulonglong)ts_nsec % (ulonglong)1000000000;
++		if (msg_flags & SHOW_LOG_CTIME) {
++			time_t t = kt->boot_date.tv_sec + nanos;
++			sprintf(buf, "[%s] ", ctime_tz(&t));
++		} else
++			sprintf(buf, "[%5lld.%06ld] ", nanos, rem/1000);
++
++		ilen += strlen(buf);
++		fprintf(fp, "%s", buf);
++	}
++
++	if (msg_flags & SHOW_LOG_LEVEL) {
++		level = UCHAR(info + OFFSET(printk_info_level)) >> 5;
++		sprintf(buf, "<%x>", level);
++		ilen += strlen(buf);
++		fprintf(fp, "%s", buf);
++	}
++
++	/* handle wrapping data block */
++	if (begin > next)
++		begin = 0;
++
++	/* skip over descriptor ID */
++	begin += sizeof(unsigned long);
++
++	/* handle truncated messages */
++	if (next - begin < text_len)
++		text_len = next - begin;
++
++	text = m->text_data + begin;
++
++	for (i = 0, p = text; i < text_len; i++, p++) {
++		if (*p == '\n')
++			fprintf(fp, "\n%s", space(ilen));
++		else if (isprint(*p) || isspace(*p))
++			fputc(*p, fp);
++		else
++			fputc('.', fp);
++	}
++
++	if (msg_flags & SHOW_LOG_DICT) {
++		text = info + OFFSET(printk_info_dev_info) +
++				OFFSET(dev_printk_info_subsystem);
++		if (strlen(text))
++			fprintf(fp, "\n%sSUBSYSTEM=%s", space(ilen), text);
++
++		text = info + OFFSET(printk_info_dev_info) +
++				OFFSET(dev_printk_info_device);
++		if (strlen(text))
++			fprintf(fp, "\n%sDEVICE=%s", space(ilen), text);
++	}
++out:
++	fprintf(fp, "\n");
++}
++
++/*
++ *  Handle the lockless printk_ringbuffer.
++ */
++void
++dump_lockless_record_log(int msg_flags)
++{
++	unsigned long head_id;
++	unsigned long tail_id;
++	unsigned long kaddr;
++	unsigned long id;
++	struct prb_map m;
++
++	if (INVALID_SIZE(printk_info))
++		init_offsets();
++
++	/* setup printk_ringbuffer */
++	get_symbol_data("prb", sizeof(char *), &kaddr);
++	m.prb = GETBUF(SIZE(printk_ringbuffer));
++	if (!readmem(kaddr, KVADDR, m.prb, SIZE(printk_ringbuffer),
++		     "printk_ringbuffer contents", RETURN_ON_ERROR|QUIET)) {
++		error(WARNING, "\ncannot read printk_ringbuffer contents\n");
++		goto out_prb;
++	}
++
++	/* setup descriptor ring */
++	m.desc_ring = m.prb + OFFSET(prb_desc_ring);
++	m.desc_ring_count = 1 << UINT(m.desc_ring + OFFSET(prb_desc_ring_count_bits));
++
++	kaddr = ULONG(m.desc_ring + OFFSET(prb_desc_ring_descs));
++	m.descs = GETBUF(SIZE(prb_desc) * m.desc_ring_count);
++	if (!readmem(kaddr, KVADDR, m.descs, SIZE(prb_desc) * m.desc_ring_count,
++		     "prb_desc_ring contents", RETURN_ON_ERROR|QUIET)) {
++		error(WARNING, "\ncannot read prb_desc_ring contents\n");
++		goto out_descs;
++	}
++
++	kaddr = ULONG(m.desc_ring + OFFSET(prb_desc_ring_infos));
++	m.infos = GETBUF(SIZE(printk_info) * m.desc_ring_count);
++	if (!readmem(kaddr, KVADDR, m.infos, SIZE(printk_info) * m.desc_ring_count,
++		     "prb_info_ring contents", RETURN_ON_ERROR|QUIET)) {
++		error(WARNING, "\ncannot read prb_info_ring contents\n");
++		goto out_infos;
++	}
++
++	/* setup text data ring */
++	m.text_data_ring = m.prb + OFFSET(prb_text_data_ring);
++	m.text_data_ring_size = 1 << UINT(m.text_data_ring + OFFSET(prb_data_ring_size_bits));
++
++	kaddr = ULONG(m.text_data_ring + OFFSET(prb_data_ring_data));
++	m.text_data = GETBUF(m.text_data_ring_size);
++	if (!readmem(kaddr, KVADDR, m.text_data, m.text_data_ring_size,
++		     "prb_text_data_ring contents", RETURN_ON_ERROR|QUIET)) {
++		error(WARNING, "\ncannot read prb_text_data_ring contents\n");
++		goto out_text_data;
++	}
++
++	/* ready to go */
++
++	tail_id = ULONG(m.desc_ring + OFFSET(prb_desc_ring_tail_id) +
++			OFFSET(atomic_long_t_counter));
++	head_id = ULONG(m.desc_ring + OFFSET(prb_desc_ring_head_id) +
++			OFFSET(atomic_long_t_counter));
++
++	hq_open();
++
++	for (id = tail_id; id != head_id; id = (id + 1) & DESC_ID_MASK)
++		dump_record(&m, id, msg_flags);
++
++	/* dump head record */
++	dump_record(&m, id, msg_flags);
++
++	hq_close();
++
++out_text_data:
++	FREEBUF(m.text_data);
++out_infos:
++	FREEBUF(m.infos);
++out_descs:
++	FREEBUF(m.descs);
++out_prb:
++	FREEBUF(m.prb);
++}
+diff --git a/symbols.c b/symbols.c
+index b2f4eb5..a51078d 100644
+--- a/symbols.c
++++ b/symbols.c
+@@ -10426,6 +10426,30 @@ dump_offset_table(char *spec, ulong makestruct)
+ 		OFFSET(log_level));
+ 	fprintf(fp, "               log_flags_level: %ld\n",
+ 		OFFSET(log_flags_level));
++
++	fprintf(fp, "               printk_info_seq: %ld\n", OFFSET(printk_info_seq));
++	fprintf(fp, "           printk_info_ts_nseq: %ld\n", OFFSET(printk_info_ts_nsec));
++	fprintf(fp, "          printk_info_text_len: %ld\n", OFFSET(printk_info_text_len));
++	fprintf(fp, "             printk_info_level: %ld\n", OFFSET(printk_info_level));
++	fprintf(fp, "         printk_info_caller_id: %ld\n", OFFSET(printk_info_caller_id));
++	fprintf(fp, "          printk_info_dev_info: %ld\n", OFFSET(printk_info_dev_info));
++	fprintf(fp, "     dev_printk_info_subsystem: %ld\n", OFFSET(dev_printk_info_subsystem));
++	fprintf(fp, "        dev_printk_info_device: %ld\n", OFFSET(dev_printk_info_device));
++	fprintf(fp, "                 prb_desc_ring: %ld\n", OFFSET(prb_desc_ring));
++	fprintf(fp, "            prb_text_data_ring: %ld\n", OFFSET(prb_text_data_ring));
++	fprintf(fp, "      prb_desc_ring_count_bits: %ld\n", OFFSET(prb_desc_ring_count_bits));
++	fprintf(fp, "           prb_desc_ring_descs: %ld\n", OFFSET(prb_desc_ring_descs));
++	fprintf(fp, "           prb_desc_ring_infos: %ld\n", OFFSET(prb_desc_ring_infos));
++	fprintf(fp, "         prb_desc_ring_head_id: %ld\n", OFFSET(prb_desc_ring_head_id));
++	fprintf(fp, "         prb_desc_ring_tail_id: %ld\n", OFFSET(prb_desc_ring_tail_id));
++	fprintf(fp, "            prb_desc_state_var: %ld\n", OFFSET(prb_desc_state_var));
++	fprintf(fp, "        prb_desc_text_blk_lpos: %ld\n", OFFSET(prb_desc_text_blk_lpos));
++	fprintf(fp, "       prb_data_blk_lpos_begin: %ld\n", OFFSET(prb_data_blk_lpos_begin));
++	fprintf(fp, "        prb_data_blk_lpos_next: %ld\n", OFFSET(prb_data_blk_lpos_next));
++	fprintf(fp, "       prb_data_ring_size_bits: %ld\n", OFFSET(prb_data_ring_size_bits));
++	fprintf(fp, "            prb_data_ring_data: %ld\n", OFFSET(prb_data_ring_data));
++	fprintf(fp, "         atomit_long_t_counter: %ld\n", OFFSET(atomic_long_t_counter));
++
+ 	fprintf(fp, "          sched_rt_entity_my_q: %ld\n",
+ 		OFFSET(sched_rt_entity_my_q));
+ 	fprintf(fp, "             task_group_parent: %ld\n",
+@@ -10850,6 +10874,9 @@ dump_offset_table(char *spec, ulong makestruct)
+ 		SIZE(xarray));
+ 	fprintf(fp, "                       xa_node: %ld\n",
+ 		SIZE(xa_node));
++	fprintf(fp, "                   printk_info: %ld\n", SIZE(printk_info));
++	fprintf(fp, "             printk_ringbuffer: %ld\n", SIZE(printk_ringbuffer));
++	fprintf(fp, "                      prb_desc: %ld\n", SIZE(prb_desc));
+ 
+ 
+         fprintf(fp, "\n                   array_table:\n");
+-- 
+2.17.1
+
diff --git a/meta-openembedded/meta-oe/recipes-kernel/crash/crash/0002-printk-use-committed-finalized-state-values.patch b/meta-openembedded/meta-oe/recipes-kernel/crash/crash/0002-printk-use-committed-finalized-state-values.patch
new file mode 100644
index 0000000..5213195
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/crash/crash/0002-printk-use-committed-finalized-state-values.patch
@@ -0,0 +1,103 @@
+From 71e159c64000467e94e08aefc144f5e1cdaa4aa0 Mon Sep 17 00:00:00 2001
+From: John Ogness <john.ogness@linutronix.de>
+Date: Wed, 25 Nov 2020 05:27:53 +0106
+Subject: [PATCH 2/2] printk: use committed/finalized state values
+
+An addendum to the previous crash commit a5531b24750e.
+The ringbuffer entries use 2 state values (committed and finalized)
+rather than a single flag to represent being available for reading.
+Copy the definitions and state lookup function directly from the
+kernel source and use the new states.
+
+Upstream-Status: Backport [https://github.com/crash-utility/crash/commit/71e159c64000467e94e08aefc144f5e1cdaa4aa0]
+
+Signed-off-by: John Ogness <john.ogness@linutronix.de>
+Signed-off-by: Nikolay Borisov <nborisov@suse.com>
+Signed-off-by: Mingli Yu <mingli.yu@windriver.com> 
+---
+ printk.c | 48 +++++++++++++++++++++++++++++++++++++++++-------
+ 1 file changed, 41 insertions(+), 7 deletions(-)
+
+diff --git a/printk.c b/printk.c
+index f6d54ce..8658016 100644
+--- a/printk.c
++++ b/printk.c
+@@ -1,12 +1,6 @@
+ #include "defs.h"
+ #include <ctype.h>
+ 
+-#define DESC_SV_BITS		(sizeof(unsigned long) * 8)
+-#define DESC_COMMITTED_MASK	(1UL << (DESC_SV_BITS - 1))
+-#define DESC_REUSE_MASK		(1UL << (DESC_SV_BITS - 2))
+-#define DESC_FLAGS_MASK		(DESC_COMMITTED_MASK | DESC_REUSE_MASK)
+-#define DESC_ID_MASK		(~DESC_FLAGS_MASK)
+-
+ /* convenience struct for passing many values to helper functions */
+ struct prb_map {
+ 	char *prb;
+@@ -21,6 +15,44 @@ struct prb_map {
+ 	char *text_data;
+ };
+ 
++/*
++ * desc_state and DESC_* definitions taken from kernel source:
++ *
++ * kernel/printk/printk_ringbuffer.h
++ */
++
++/* The possible responses of a descriptor state-query. */
++enum desc_state {
++	desc_miss	=  -1,	/* ID mismatch (pseudo state) */
++	desc_reserved	= 0x0,	/* reserved, in use by writer */
++	desc_committed	= 0x1,	/* committed by writer, could get reopened */
++	desc_finalized	= 0x2,	/* committed, no further modification allowed */
++	desc_reusable	= 0x3,	/* free, not yet used by any writer */
++};
++
++#define DESC_SV_BITS		(sizeof(unsigned long) * 8)
++#define DESC_FLAGS_SHIFT	(DESC_SV_BITS - 2)
++#define DESC_FLAGS_MASK		(3UL << DESC_FLAGS_SHIFT)
++#define DESC_STATE(sv)		(3UL & (sv >> DESC_FLAGS_SHIFT))
++#define DESC_ID_MASK		(~DESC_FLAGS_MASK)
++#define DESC_ID(sv)		((sv) & DESC_ID_MASK)
++
++/*
++ * get_desc_state() taken from kernel source:
++ *
++ * kernel/printk/printk_ringbuffer.c
++ */
++
++/* Query the state of a descriptor. */
++static enum desc_state get_desc_state(unsigned long id,
++				      unsigned long state_val)
++{
++	if (id != DESC_ID(state_val))
++		return desc_miss;
++
++	return DESC_STATE(state_val);
++}
++
+ static void
+ init_offsets(void)
+ {
+@@ -74,6 +106,7 @@ dump_record(struct prb_map *m, unsigned long id, int msg_flags)
+ 	unsigned short text_len;
+ 	unsigned long state_var;
+ 	unsigned int caller_id;
++	enum desc_state state;
+ 	unsigned char level;
+ 	unsigned long begin;
+ 	unsigned long next;
+@@ -90,7 +123,8 @@ dump_record(struct prb_map *m, unsigned long id, int msg_flags)
+ 	/* skip non-committed record */
+ 	state_var = ULONG(desc + OFFSET(prb_desc_state_var) +
+ 			OFFSET(atomic_long_t_counter));
+-	if ((state_var & DESC_FLAGS_MASK) != DESC_COMMITTED_MASK)
++	state = get_desc_state(id, state_var);
++	if (state != desc_committed && state != desc_finalized)
+ 		return;
+ 
+ 	info = m->infos + ((id % m->desc_ring_count) * SIZE(printk_info));
+-- 
+2.17.1
+
diff --git a/meta-openembedded/meta-oe/recipes-kernel/crash/crash_7.2.9.bb b/meta-openembedded/meta-oe/recipes-kernel/crash/crash_7.2.9.bb
index 4394b6f..0b6883a 100644
--- a/meta-openembedded/meta-oe/recipes-kernel/crash/crash_7.2.9.bb
+++ b/meta-openembedded/meta-oe/recipes-kernel/crash/crash_7.2.9.bb
@@ -25,6 +25,8 @@
            file://remove-unrecognized-gcc-option-m32-for-mips.patch \
            file://0002-crash-fix-build-error-unknown-type-name-gdb_fpregset.patch \
            file://0003-crash-detect-the-sysroot-s-glibc-header-file.patch \
+           file://0001-printk-add-support-for-lockless-ringbuffer.patch \
+           file://0002-printk-use-committed-finalized-state-values.patch \
            "
 SRCREV = "a25aa4b649d339dd25c20d5413d81b851a77e0b2"
 
diff --git a/meta-openembedded/meta-oe/recipes-kernel/libbpf/libbpf/0001-install-don-t-preserve-file-owner.patch b/meta-openembedded/meta-oe/recipes-kernel/libbpf/libbpf/0001-install-don-t-preserve-file-owner.patch
new file mode 100644
index 0000000..9423141
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/libbpf/libbpf/0001-install-don-t-preserve-file-owner.patch
@@ -0,0 +1,31 @@
+From 7df10d91db6f533cc0f6c09f4ae8ad92918c6160 Mon Sep 17 00:00:00 2001
+From: Matteo Croce <mcroce@microsoft.com>
+Date: Tue, 26 Jan 2021 12:41:47 +0100
+Subject: [PATCH] install: don't preserve file owner
+
+'cp -p' preserve file ownership, this may leave files owned by the
+current in user in /lib .
+
+Upstream-status: Submitted (0.4 release) [https://github.com/libbpf/libbpf/commit/767d82caab7e54238f2fc6f40ab1e4af285f2abe]
+
+Signed-off-by: Matteo Croce <mcroce@microsoft.com>
+---
+ Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile b/Makefile
+index da33613..ab66edc 100644
+--- a/Makefile
++++ b/Makefile
+@@ -130,7 +130,7 @@ define do_s_install
+ 	$(Q)if [ ! -d '$(DESTDIR)$2' ]; then		\
+ 		$(INSTALL) -d -m 755 '$(DESTDIR)$2';	\
+ 	fi;
+-	$(Q)cp -fpR $1 '$(DESTDIR)$2'
++	$(Q)cp -fR $1 '$(DESTDIR)$2'
+ endef
+ 
+ install: all install_headers install_pkgconfig
+-- 
+2.29.2
+
diff --git a/meta-openembedded/meta-oe/recipes-kernel/libbpf/libbpf_0.3.bb b/meta-openembedded/meta-oe/recipes-kernel/libbpf/libbpf_0.3.bb
new file mode 100644
index 0000000..5714ddb
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/libbpf/libbpf_0.3.bb
@@ -0,0 +1,44 @@
+SUMMARY = "Library for BPF handling"
+DESCRIPTION = "Library for BPF handling"
+HOMEPAGE = "https://github.com/libbpf/libbpf"
+SECTION = "libs"
+LICENSE = "LGPLv2.1+"
+
+# There is a typo in the filename, LPGL should really be LGPL.
+# Keep this until the correct name is set upstream.
+LIC_FILES_CHKSUM = "file://../LICENSE.LPGL-2.1;md5=b370887980db5dd40659b50909238dbd"
+
+DEPENDS = "zlib elfutils"
+
+SRC_URI = "git://github.com/libbpf/libbpf.git;protocol=https"
+SRCREV = "051a4009f94d5633a8f734ca4235f0a78ee90469"
+
+# Backported from version 0.4
+SRC_URI += "file://0001-install-don-t-preserve-file-owner.patch"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+COMPATIBLE_HOST = "(x86_64.*|i.86.*|aarch64).*-linux"
+
+S = "${WORKDIR}/git/src"
+
+EXTRA_OEMAKE += "DESTDIR=${D} LIBDIR=${libdir}"
+
+do_compile() {
+	if grep -q "CONFIG_BPF_SYSCALL=y" ${STAGING_KERNEL_BUILDDIR}/.config
+	then
+		oe_runmake
+	else
+		bbnote "BFP syscall is not enabled"
+	fi
+}
+
+do_install() {
+	if grep -q "CONFIG_BPF_SYSCALL=y" ${STAGING_KERNEL_BUILDDIR}/.config
+	then
+		oe_runmake install
+	else
+		bbnote "no files to install"
+	fi
+}
+
+BBCLASSEXTEND = "native"