From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 89287C07E9A for ; Mon, 5 Jul 2021 08:20:30 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6B5C2613D1 for ; Mon, 5 Jul 2021 08:20:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230262AbhGEIXF (ORCPT ); Mon, 5 Jul 2021 04:23:05 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54254 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230234AbhGEIXD (ORCPT ); Mon, 5 Jul 2021 04:23:03 -0400 Received: from mail-pf1-x436.google.com (mail-pf1-x436.google.com [IPv6:2607:f8b0:4864:20::436]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BC5C7C061574; Mon, 5 Jul 2021 01:20:26 -0700 (PDT) Received: by mail-pf1-x436.google.com with SMTP id i184so3066489pfc.12; Mon, 05 Jul 2021 01:20:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=WEoXEwgX5iWWo/dnp2VsT56S/+tcKKvLnwPVhmJvS8w=; b=j8c20pFT+e80fe7K162YBeaqnrqwYY+02/uvywvvg4nRmmeVU3DAW5PuSrf5nFkq5a vW9jHNPOeD0cx2yVMP3byMd6aqVpX3bStcXL1z9xbi82XUUpmMDzM8Q6UEH/4FxpHmPw b21UOJJyR6SMLqOXoRkTxqEi4mLT3Ynr1jzxIjvKp/bs8M2s4MN6En9ltKxmBJIDslHz J7dRv4zsJhUhvjriX5CCL8uDsS6aNfiXNvbsqyow3dWIbsjUekKoDtKrWjqfm593ZjE7 l6VOAu1cyykoJEI2HTng27VW8YXM/5rrpi/zJlLQ/n5BAeketso1Sfp6LW2GXEL/LaM9 JCCw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=WEoXEwgX5iWWo/dnp2VsT56S/+tcKKvLnwPVhmJvS8w=; b=Rinbe0eQ7OukYcG3G2hTd0OQ4Y7qvQbPRhMge1NSrTePv9vCEYJiKcY580lSvNlYsf QTDcxjqETe7AvRYg9NZSC7F0OSnA5Uj+Px+6hx8GhO7f3c+YtwNaBCwCul+2iZYQJT9B BHd8s2G9dQRFKsOmMjqAZPbUEABQua521Nkv6g3a7xXBPqAhHQ749W1oHIb5kgCgKkF3 W/OXY4q2IHarhJUmaJUFWRIQ1lqBR3vWioA5rraErsGxm91cy1QU0Uu9Zdo6d698Bt7j Lc+r+M0cFyCkcG0VmqUTcKH979Ly2wacDYJ+PNr6VKYK9N8aWQh69qU3Thn6jpUq61oJ WS1w== X-Gm-Message-State: AOAM533FMivmmUE46R0Q0SScBhXPhM7xtQ8NxuSHWMJi/UGKF095fTEK rncT8vUSgptl8g8G0+IXVcg= X-Google-Smtp-Source: ABdhPJxN9QAOAXIr9SXGd6GyaqaCWGkt5uKOJs/UgwHDgeJY4IxXI+AgIG3MXQtITzOF/4kYGXno6w== X-Received: by 2002:a63:4c19:: with SMTP id z25mr14446284pga.160.1625473226326; Mon, 05 Jul 2021 01:20:26 -0700 (PDT) Received: from localhost.localdomain ([156.146.35.76]) by smtp.gmail.com with ESMTPSA id y11sm12209986pfo.160.2021.07.05.01.20.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 05 Jul 2021 01:20:25 -0700 (PDT) From: William Breathitt Gray To: jic23@kernel.org Cc: linux-stm32@st-md-mailman.stormreply.com, kernel@pengutronix.de, a.fatoum@pengutronix.de, kamel.bouhara@bootlin.com, gwendal@chromium.org, alexandre.belloni@bootlin.com, david@lechnology.com, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, syednwaris@gmail.com, patrick.havelange@essensium.com, fabrice.gasnier@st.com, mcoquelin.stm32@gmail.com, alexandre.torgue@st.com, o.rempel@pengutronix.de, jarkko.nikula@linux.intel.com, William Breathitt Gray , Pavel Machek Subject: [PATCH v12 12/17] tools/counter: Create Counter tools Date: Mon, 5 Jul 2021 17:19:00 +0900 Message-Id: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This creates an example Counter program under tools/counter/* to exemplify the Counter character device interface. Cc: Pavel Machek Signed-off-by: William Breathitt Gray --- MAINTAINERS | 1 + tools/Makefile | 13 ++--- tools/counter/Build | 1 + tools/counter/Makefile | 53 ++++++++++++++++++ tools/counter/counter_example.c | 95 +++++++++++++++++++++++++++++++++ 5 files changed, 157 insertions(+), 6 deletions(-) create mode 100644 tools/counter/Build create mode 100644 tools/counter/Makefile create mode 100644 tools/counter/counter_example.c diff --git a/MAINTAINERS b/MAINTAINERS index 5de4d2164844..e96797f57f04 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -4688,6 +4688,7 @@ F: Documentation/driver-api/generic-counter.rst F: drivers/counter/ F: include/linux/counter.h F: include/uapi/linux/counter.h +F: tools/counter/ CP2615 I2C DRIVER M: Bence Csókás diff --git a/tools/Makefile b/tools/Makefile index 7e9d34ddd74c..4c26400ffc03 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -12,6 +12,7 @@ help: @echo ' acpi - ACPI tools' @echo ' bpf - misc BPF tools' @echo ' cgroup - cgroup tools' + @echo ' counter - Counter tools' @echo ' cpupower - a tool for all things x86 CPU power' @echo ' debugging - tools for debugging' @echo ' firewire - the userspace part of nosy, an IEEE-1394 traffic sniffer' @@ -65,7 +66,7 @@ acpi: FORCE cpupower: FORCE $(call descend,power/$@) -cgroup firewire hv guest bootconfig spi usb virtio vm bpf iio gpio objtool leds wmi pci firmware debugging tracing: FORCE +cgroup counter firewire hv guest bootconfig spi usb virtio vm bpf iio gpio objtool leds wmi pci firmware debugging tracing: FORCE $(call descend,$@) bpf/%: FORCE @@ -100,7 +101,7 @@ freefall: FORCE kvm_stat: FORCE $(call descend,kvm/$@) -all: acpi cgroup cpupower gpio hv firewire liblockdep \ +all: acpi cgroup counter cpupower gpio hv firewire liblockdep \ perf selftests bootconfig spi turbostat usb \ virtio vm bpf x86_energy_perf_policy \ tmon freefall iio objtool kvm_stat wmi \ @@ -112,7 +113,7 @@ acpi_install: cpupower_install: $(call descend,power/$(@:_install=),install) -cgroup_install firewire_install gpio_install hv_install iio_install perf_install bootconfig_install spi_install usb_install virtio_install vm_install bpf_install objtool_install wmi_install pci_install debugging_install tracing_install: +cgroup_install counter_install firewire_install gpio_install hv_install iio_install perf_install bootconfig_install spi_install usb_install virtio_install vm_install bpf_install objtool_install wmi_install pci_install debugging_install tracing_install: $(call descend,$(@:_install=),install) liblockdep_install: @@ -133,7 +134,7 @@ freefall_install: kvm_stat_install: $(call descend,kvm/$(@:_install=),install) -install: acpi_install cgroup_install cpupower_install gpio_install \ +install: acpi_install cgroup_install counter_install cpupower_install gpio_install \ hv_install firewire_install iio_install liblockdep_install \ perf_install selftests_install turbostat_install usb_install \ virtio_install vm_install bpf_install x86_energy_perf_policy_install \ @@ -147,7 +148,7 @@ acpi_clean: cpupower_clean: $(call descend,power/cpupower,clean) -cgroup_clean hv_clean firewire_clean bootconfig_clean spi_clean usb_clean virtio_clean vm_clean wmi_clean bpf_clean iio_clean gpio_clean objtool_clean leds_clean pci_clean firmware_clean debugging_clean tracing_clean: +cgroup_clean counter_clean hv_clean firewire_clean bootconfig_clean spi_clean usb_clean virtio_clean vm_clean wmi_clean bpf_clean iio_clean gpio_clean objtool_clean leds_clean pci_clean firmware_clean debugging_clean tracing_clean: $(call descend,$(@:_clean=),clean) liblockdep_clean: @@ -181,7 +182,7 @@ freefall_clean: build_clean: $(call descend,build,clean) -clean: acpi_clean cgroup_clean cpupower_clean hv_clean firewire_clean \ +clean: acpi_clean cgroup_clean counter_clean cpupower_clean hv_clean firewire_clean \ perf_clean selftests_clean turbostat_clean bootconfig_clean spi_clean usb_clean virtio_clean \ vm_clean bpf_clean iio_clean x86_energy_perf_policy_clean tmon_clean \ freefall_clean build_clean libbpf_clean libsubcmd_clean liblockdep_clean \ diff --git a/tools/counter/Build b/tools/counter/Build new file mode 100644 index 000000000000..33f4a51d715e --- /dev/null +++ b/tools/counter/Build @@ -0,0 +1 @@ +counter_example-y += counter_example.o diff --git a/tools/counter/Makefile b/tools/counter/Makefile new file mode 100644 index 000000000000..5ebc195fd9c0 --- /dev/null +++ b/tools/counter/Makefile @@ -0,0 +1,53 @@ +# SPDX-License-Identifier: GPL-2.0 +include ../scripts/Makefile.include + +bindir ?= /usr/bin + +ifeq ($(srctree),) +srctree := $(patsubst %/,%,$(dir $(CURDIR))) +srctree := $(patsubst %/,%,$(dir $(srctree))) +endif + +# Do not use make's built-in rules +# (this improves performance and avoids hard-to-debug behaviour); +MAKEFLAGS += -r + +override CFLAGS += -O2 -Wall -g -D_GNU_SOURCE -I$(OUTPUT)include + +ALL_TARGETS := counter_example +ALL_PROGRAMS := $(patsubst %,$(OUTPUT)%,$(ALL_TARGETS)) + +all: $(ALL_PROGRAMS) + +export srctree OUTPUT CC LD CFLAGS +include $(srctree)/tools/build/Makefile.include + +# +# We need the following to be outside of kernel tree +# +$(OUTPUT)include/linux/counter.h: ../../include/uapi/linux/counter.h + mkdir -p $(OUTPUT)include/linux 2>&1 || true + ln -sf $(CURDIR)/../../include/uapi/linux/counter.h $@ + +prepare: $(OUTPUT)include/linux/counter.h + +COUNTER_EXAMPLE := $(OUTPUT)counter_example.o +$(COUNTER_EXAMPLE): prepare FORCE + $(Q)$(MAKE) $(build)=counter_example +$(OUTPUT)counter_example: $(COUNTER_EXAMPLE) + $(QUIET_LINK)$(CC) $(CFLAGS) $(LDFLAGS) $< -o $@ + +clean: + rm -f $(ALL_PROGRAMS) + rm -rf $(OUTPUT)include/linux/counter.h + find $(if $(OUTPUT),$(OUTPUT),.) -name '*.o' -delete -o -name '\.*.d' -delete + +install: $(ALL_PROGRAMS) + install -d -m 755 $(DESTDIR)$(bindir); \ + for program in $(ALL_PROGRAMS); do \ + install $$program $(DESTDIR)$(bindir); \ + done + +FORCE: + +.PHONY: all install clean FORCE prepare diff --git a/tools/counter/counter_example.c b/tools/counter/counter_example.c new file mode 100644 index 000000000000..71dfec673c11 --- /dev/null +++ b/tools/counter/counter_example.c @@ -0,0 +1,95 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* Counter - example userspace application + * + * The userspace application opens /dev/counter0, configures the + * COUNTER_EVENT_INDEX event channel 0 to gather Count 0 count and Count + * 1 count, and prints out the data as it becomes available on the + * character device node. + * + * Copyright (C) 2021 William Breathitt Gray + */ +#include +#include +#include +#include +#include +#include +#include + +struct counter_watch watches[2] = { + { + /* Component data: Count 0 count */ + .component.type = COUNTER_COMPONENT_COUNT, + .component.scope = COUNTER_SCOPE_COUNT, + .component.parent = 0, + /* Event type: Index */ + .event = COUNTER_EVENT_INDEX, + /* Device event channel 0 */ + .channel = 0, + }, + { + /* Component data: Count 1 count */ + .component.type = COUNTER_COMPONENT_COUNT, + .component.scope = COUNTER_SCOPE_COUNT, + .component.parent = 1, + /* Event type: Index */ + .event = COUNTER_EVENT_INDEX, + /* Device event channel 0 */ + .channel = 0, + }, +}; + +int main(void) +{ + int fd; + int ret; + struct counter_event event_data[2]; + + fd = open("/dev/counter0", O_RDWR); + if (fd == -1) { + perror("Unable to open /dev/counter0"); + return -errno; + } + + ret = ioctl(fd, COUNTER_ADD_WATCH_IOCTL, watches); + if (ret == -1) { + perror("Error adding watches[0]"); + return -errno; + } + ret = ioctl(fd, COUNTER_ADD_WATCH_IOCTL, watches + 1); + if (ret == -1) { + perror("Error adding watches[1]"); + return -errno; + } + ret = ioctl(fd, COUNTER_ENABLE_EVENTS_IOCTL); + if (ret == -1) { + perror("Error enabling events"); + return -errno; + } + + for (;;) { + ret = read(fd, event_data, sizeof(event_data)); + if (ret == -1) { + perror("Failed to read event data"); + return -errno; + } + + if (ret != sizeof(event_data)) { + fprintf(stderr, "Failed to read event data\n"); + return -EIO; + } + + printf("Timestamp 0: %llu\tCount 0: %llu\n" + "Error Message 0: %s\n" + "Timestamp 1: %llu\tCount 1: %llu\n" + "Error Message 1: %s\n", + (unsigned long long)event_data[0].timestamp, + (unsigned long long)event_data[0].value, + strerror(event_data[0].status), + (unsigned long long)event_data[1].timestamp, + (unsigned long long)event_data[1].value, + strerror(event_data[1].status)); + } + + return 0; +} -- 2.32.0 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.7 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,DKIM_SIGNED,DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A3F61C07E9B for ; Mon, 5 Jul 2021 08:28:19 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 71F7A613FB for ; Mon, 5 Jul 2021 08:28:19 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 71F7A613FB Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=ULvceKqGAZKttEvjlPDJrZVgWk4ED1ABitX0vjnDpWY=; b=OcIP/KGW6Rvaip 28zoLIg+HIYUdXvE5Frf2s+0+KDjc+PFua46mkslys62SrpazedgxCptZHhq1ABQXy5D1acvFJ9EA CjVrVKeCcQAQPND4DDyyZXmAY6Y0y5qcwTgZGtU4OhZrCf8jMxHjKMOTl6yymbeGXTYASJ3Jw1+mm GCnSVgYASub7fFqfH2cIwdpqUnnrFw6PczKh6hRvuiYVqMiD6TF94dehj0EW9opTpJdgm4+FDO1Qm HoqeUnx2k2LyT09ektYPZhbsBI/HaTQ1m3exSdVjDz0LEz1PPumtXaESpMhareXzwFzRQzKmKLRZT DGj0RwhepbiUtqbFEdHg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1m0JvR-008Eta-Nk; Mon, 05 Jul 2021 08:25:58 +0000 Received: from mail-pg1-x532.google.com ([2607:f8b0:4864:20::532]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1m0Jq7-008CK6-D6 for linux-arm-kernel@lists.infradead.org; Mon, 05 Jul 2021 08:20:32 +0000 Received: by mail-pg1-x532.google.com with SMTP id 62so9513953pgf.1 for ; Mon, 05 Jul 2021 01:20:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=WEoXEwgX5iWWo/dnp2VsT56S/+tcKKvLnwPVhmJvS8w=; b=j8c20pFT+e80fe7K162YBeaqnrqwYY+02/uvywvvg4nRmmeVU3DAW5PuSrf5nFkq5a vW9jHNPOeD0cx2yVMP3byMd6aqVpX3bStcXL1z9xbi82XUUpmMDzM8Q6UEH/4FxpHmPw b21UOJJyR6SMLqOXoRkTxqEi4mLT3Ynr1jzxIjvKp/bs8M2s4MN6En9ltKxmBJIDslHz J7dRv4zsJhUhvjriX5CCL8uDsS6aNfiXNvbsqyow3dWIbsjUekKoDtKrWjqfm593ZjE7 l6VOAu1cyykoJEI2HTng27VW8YXM/5rrpi/zJlLQ/n5BAeketso1Sfp6LW2GXEL/LaM9 JCCw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=WEoXEwgX5iWWo/dnp2VsT56S/+tcKKvLnwPVhmJvS8w=; b=Klfx8MoPj5tZjFdQTcoZX7Iqn5FjTxlg7naFqRLmSu6+myhgd+Bqkq/sFe2VcIGgT1 ys7TTyKAlbsSDiFBX/Ltkn8x9m+9lrFYDenxJLunOQ9M0UQL5/EB2GdEP54leu0fvEjv 2wT12ssrz/NS7/Uyuy+qTPmkjH9e2g/6rFjwMUh0PRWtzqlh0zKyHgni1DmOprvs5tmi Sde9m5MFu/rcGNBevzczM3YqRrQAnD2RnGK//RM/rzZknMG+gYPh4hpvFrQQxCANJSZE fQPGrq96MtVevT1WQZmzRNACyCrpQsGz8CFSXR69eQ0nZEareCPrm5j7kQIQs7HhK/gV NuXA== X-Gm-Message-State: AOAM531B5BPIwjZyzh8BJJUXZ/dlMI3w1w6PO2qoJP5wzTVk/EC4DZ7S h/qfzlzHoh8PVpa1Z5mPW44= X-Google-Smtp-Source: ABdhPJxN9QAOAXIr9SXGd6GyaqaCWGkt5uKOJs/UgwHDgeJY4IxXI+AgIG3MXQtITzOF/4kYGXno6w== X-Received: by 2002:a63:4c19:: with SMTP id z25mr14446284pga.160.1625473226326; Mon, 05 Jul 2021 01:20:26 -0700 (PDT) Received: from localhost.localdomain ([156.146.35.76]) by smtp.gmail.com with ESMTPSA id y11sm12209986pfo.160.2021.07.05.01.20.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 05 Jul 2021 01:20:25 -0700 (PDT) From: William Breathitt Gray To: jic23@kernel.org Cc: linux-stm32@st-md-mailman.stormreply.com, kernel@pengutronix.de, a.fatoum@pengutronix.de, kamel.bouhara@bootlin.com, gwendal@chromium.org, alexandre.belloni@bootlin.com, david@lechnology.com, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, syednwaris@gmail.com, patrick.havelange@essensium.com, fabrice.gasnier@st.com, mcoquelin.stm32@gmail.com, alexandre.torgue@st.com, o.rempel@pengutronix.de, jarkko.nikula@linux.intel.com, William Breathitt Gray , Pavel Machek Subject: [PATCH v12 12/17] tools/counter: Create Counter tools Date: Mon, 5 Jul 2021 17:19:00 +0900 Message-Id: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210705_012027_565919_C9D3A0DD X-CRM114-Status: GOOD ( 22.53 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org VGhpcyBjcmVhdGVzIGFuIGV4YW1wbGUgQ291bnRlciBwcm9ncmFtIHVuZGVyIHRvb2xzL2NvdW50 ZXIvKgp0byBleGVtcGxpZnkgdGhlIENvdW50ZXIgY2hhcmFjdGVyIGRldmljZSBpbnRlcmZhY2Uu CgpDYzogUGF2ZWwgTWFjaGVrIDxwYXZlbEB1Y3cuY3o+ClNpZ25lZC1vZmYtYnk6IFdpbGxpYW0g QnJlYXRoaXR0IEdyYXkgPHZpbGhlbG0uZ3JheUBnbWFpbC5jb20+Ci0tLQogTUFJTlRBSU5FUlMg ICAgICAgICAgICAgICAgICAgICB8ICAxICsKIHRvb2xzL01ha2VmaWxlICAgICAgICAgICAgICAg ICAgfCAxMyArKy0tLQogdG9vbHMvY291bnRlci9CdWlsZCAgICAgICAgICAgICB8ICAxICsKIHRv b2xzL2NvdW50ZXIvTWFrZWZpbGUgICAgICAgICAgfCA1MyArKysrKysrKysrKysrKysrKysKIHRv b2xzL2NvdW50ZXIvY291bnRlcl9leGFtcGxlLmMgfCA5NSArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysKIDUgZmlsZXMgY2hhbmdlZCwgMTU3IGluc2VydGlvbnMoKyksIDYgZGVsZXRp b25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMvY291bnRlci9CdWlsZAogY3JlYXRlIG1v ZGUgMTAwNjQ0IHRvb2xzL2NvdW50ZXIvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29s cy9jb3VudGVyL2NvdW50ZXJfZXhhbXBsZS5jCgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9N QUlOVEFJTkVSUwppbmRleCA1ZGU0ZDIxNjQ4NDQuLmU5Njc5N2Y1N2YwNCAxMDA2NDQKLS0tIGEv TUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTQ2ODgsNiArNDY4OCw3IEBAIEY6CURv Y3VtZW50YXRpb24vZHJpdmVyLWFwaS9nZW5lcmljLWNvdW50ZXIucnN0CiBGOglkcml2ZXJzL2Nv dW50ZXIvCiBGOglpbmNsdWRlL2xpbnV4L2NvdW50ZXIuaAogRjoJaW5jbHVkZS91YXBpL2xpbnV4 L2NvdW50ZXIuaAorRjoJdG9vbHMvY291bnRlci8KIAogQ1AyNjE1IEkyQyBEUklWRVIKIE06CUJl bmNlIENzw7Nrw6FzIDxiZW5jZTk4QHNjaC5ibWUuaHU+CmRpZmYgLS1naXQgYS90b29scy9NYWtl ZmlsZSBiL3Rvb2xzL01ha2VmaWxlCmluZGV4IDdlOWQzNGRkZDc0Yy4uNGMyNjQwMGZmYzAzIDEw MDY0NAotLS0gYS90b29scy9NYWtlZmlsZQorKysgYi90b29scy9NYWtlZmlsZQpAQCAtMTIsNiAr MTIsNyBAQCBoZWxwOgogCUBlY2hvICcgIGFjcGkgICAgICAgICAgICAgICAgICAgLSBBQ1BJIHRv b2xzJwogCUBlY2hvICcgIGJwZiAgICAgICAgICAgICAgICAgICAgLSBtaXNjIEJQRiB0b29scycK IAlAZWNobyAnICBjZ3JvdXAgICAgICAgICAgICAgICAgIC0gY2dyb3VwIHRvb2xzJworCUBlY2hv ICcgIGNvdW50ZXIgICAgICAgICAgICAgICAgLSBDb3VudGVyIHRvb2xzJwogCUBlY2hvICcgIGNw dXBvd2VyICAgICAgICAgICAgICAgLSBhIHRvb2wgZm9yIGFsbCB0aGluZ3MgeDg2IENQVSBwb3dl cicKIAlAZWNobyAnICBkZWJ1Z2dpbmcgICAgICAgICAgICAgIC0gdG9vbHMgZm9yIGRlYnVnZ2lu ZycKIAlAZWNobyAnICBmaXJld2lyZSAgICAgICAgICAgICAgIC0gdGhlIHVzZXJzcGFjZSBwYXJ0 IG9mIG5vc3ksIGFuIElFRUUtMTM5NCB0cmFmZmljIHNuaWZmZXInCkBAIC02NSw3ICs2Niw3IEBA IGFjcGk6IEZPUkNFCiBjcHVwb3dlcjogRk9SQ0UKIAkkKGNhbGwgZGVzY2VuZCxwb3dlci8kQCkK IAotY2dyb3VwIGZpcmV3aXJlIGh2IGd1ZXN0IGJvb3Rjb25maWcgc3BpIHVzYiB2aXJ0aW8gdm0g YnBmIGlpbyBncGlvIG9ianRvb2wgbGVkcyB3bWkgcGNpIGZpcm13YXJlIGRlYnVnZ2luZyB0cmFj aW5nOiBGT1JDRQorY2dyb3VwIGNvdW50ZXIgZmlyZXdpcmUgaHYgZ3Vlc3QgYm9vdGNvbmZpZyBz cGkgdXNiIHZpcnRpbyB2bSBicGYgaWlvIGdwaW8gb2JqdG9vbCBsZWRzIHdtaSBwY2kgZmlybXdh cmUgZGVidWdnaW5nIHRyYWNpbmc6IEZPUkNFCiAJJChjYWxsIGRlc2NlbmQsJEApCiAKIGJwZi8l OiBGT1JDRQpAQCAtMTAwLDcgKzEwMSw3IEBAIGZyZWVmYWxsOiBGT1JDRQoga3ZtX3N0YXQ6IEZP UkNFCiAJJChjYWxsIGRlc2NlbmQsa3ZtLyRAKQogCi1hbGw6IGFjcGkgY2dyb3VwIGNwdXBvd2Vy IGdwaW8gaHYgZmlyZXdpcmUgbGlibG9ja2RlcCBcCithbGw6IGFjcGkgY2dyb3VwIGNvdW50ZXIg Y3B1cG93ZXIgZ3BpbyBodiBmaXJld2lyZSBsaWJsb2NrZGVwIFwKIAkJcGVyZiBzZWxmdGVzdHMg Ym9vdGNvbmZpZyBzcGkgdHVyYm9zdGF0IHVzYiBcCiAJCXZpcnRpbyB2bSBicGYgeDg2X2VuZXJn eV9wZXJmX3BvbGljeSBcCiAJCXRtb24gZnJlZWZhbGwgaWlvIG9ianRvb2wga3ZtX3N0YXQgd21p IFwKQEAgLTExMiw3ICsxMTMsNyBAQCBhY3BpX2luc3RhbGw6CiBjcHVwb3dlcl9pbnN0YWxsOgog CSQoY2FsbCBkZXNjZW5kLHBvd2VyLyQoQDpfaW5zdGFsbD0pLGluc3RhbGwpCiAKLWNncm91cF9p bnN0YWxsIGZpcmV3aXJlX2luc3RhbGwgZ3Bpb19pbnN0YWxsIGh2X2luc3RhbGwgaWlvX2luc3Rh bGwgcGVyZl9pbnN0YWxsIGJvb3Rjb25maWdfaW5zdGFsbCBzcGlfaW5zdGFsbCB1c2JfaW5zdGFs bCB2aXJ0aW9faW5zdGFsbCB2bV9pbnN0YWxsIGJwZl9pbnN0YWxsIG9ianRvb2xfaW5zdGFsbCB3 bWlfaW5zdGFsbCBwY2lfaW5zdGFsbCBkZWJ1Z2dpbmdfaW5zdGFsbCB0cmFjaW5nX2luc3RhbGw6 CitjZ3JvdXBfaW5zdGFsbCBjb3VudGVyX2luc3RhbGwgZmlyZXdpcmVfaW5zdGFsbCBncGlvX2lu c3RhbGwgaHZfaW5zdGFsbCBpaW9faW5zdGFsbCBwZXJmX2luc3RhbGwgYm9vdGNvbmZpZ19pbnN0 YWxsIHNwaV9pbnN0YWxsIHVzYl9pbnN0YWxsIHZpcnRpb19pbnN0YWxsIHZtX2luc3RhbGwgYnBm X2luc3RhbGwgb2JqdG9vbF9pbnN0YWxsIHdtaV9pbnN0YWxsIHBjaV9pbnN0YWxsIGRlYnVnZ2lu Z19pbnN0YWxsIHRyYWNpbmdfaW5zdGFsbDoKIAkkKGNhbGwgZGVzY2VuZCwkKEA6X2luc3RhbGw9 KSxpbnN0YWxsKQogCiBsaWJsb2NrZGVwX2luc3RhbGw6CkBAIC0xMzMsNyArMTM0LDcgQEAgZnJl ZWZhbGxfaW5zdGFsbDoKIGt2bV9zdGF0X2luc3RhbGw6CiAJJChjYWxsIGRlc2NlbmQsa3ZtLyQo QDpfaW5zdGFsbD0pLGluc3RhbGwpCiAKLWluc3RhbGw6IGFjcGlfaW5zdGFsbCBjZ3JvdXBfaW5z dGFsbCBjcHVwb3dlcl9pbnN0YWxsIGdwaW9faW5zdGFsbCBcCitpbnN0YWxsOiBhY3BpX2luc3Rh bGwgY2dyb3VwX2luc3RhbGwgY291bnRlcl9pbnN0YWxsIGNwdXBvd2VyX2luc3RhbGwgZ3Bpb19p bnN0YWxsIFwKIAkJaHZfaW5zdGFsbCBmaXJld2lyZV9pbnN0YWxsIGlpb19pbnN0YWxsIGxpYmxv Y2tkZXBfaW5zdGFsbCBcCiAJCXBlcmZfaW5zdGFsbCBzZWxmdGVzdHNfaW5zdGFsbCB0dXJib3N0 YXRfaW5zdGFsbCB1c2JfaW5zdGFsbCBcCiAJCXZpcnRpb19pbnN0YWxsIHZtX2luc3RhbGwgYnBm X2luc3RhbGwgeDg2X2VuZXJneV9wZXJmX3BvbGljeV9pbnN0YWxsIFwKQEAgLTE0Nyw3ICsxNDgs NyBAQCBhY3BpX2NsZWFuOgogY3B1cG93ZXJfY2xlYW46CiAJJChjYWxsIGRlc2NlbmQscG93ZXIv Y3B1cG93ZXIsY2xlYW4pCiAKLWNncm91cF9jbGVhbiBodl9jbGVhbiBmaXJld2lyZV9jbGVhbiBi b290Y29uZmlnX2NsZWFuIHNwaV9jbGVhbiB1c2JfY2xlYW4gdmlydGlvX2NsZWFuIHZtX2NsZWFu IHdtaV9jbGVhbiBicGZfY2xlYW4gaWlvX2NsZWFuIGdwaW9fY2xlYW4gb2JqdG9vbF9jbGVhbiBs ZWRzX2NsZWFuIHBjaV9jbGVhbiBmaXJtd2FyZV9jbGVhbiBkZWJ1Z2dpbmdfY2xlYW4gdHJhY2lu Z19jbGVhbjoKK2Nncm91cF9jbGVhbiBjb3VudGVyX2NsZWFuIGh2X2NsZWFuIGZpcmV3aXJlX2Ns ZWFuIGJvb3Rjb25maWdfY2xlYW4gc3BpX2NsZWFuIHVzYl9jbGVhbiB2aXJ0aW9fY2xlYW4gdm1f Y2xlYW4gd21pX2NsZWFuIGJwZl9jbGVhbiBpaW9fY2xlYW4gZ3Bpb19jbGVhbiBvYmp0b29sX2Ns ZWFuIGxlZHNfY2xlYW4gcGNpX2NsZWFuIGZpcm13YXJlX2NsZWFuIGRlYnVnZ2luZ19jbGVhbiB0 cmFjaW5nX2NsZWFuOgogCSQoY2FsbCBkZXNjZW5kLCQoQDpfY2xlYW49KSxjbGVhbikKIAogbGli bG9ja2RlcF9jbGVhbjoKQEAgLTE4MSw3ICsxODIsNyBAQCBmcmVlZmFsbF9jbGVhbjoKIGJ1aWxk X2NsZWFuOgogCSQoY2FsbCBkZXNjZW5kLGJ1aWxkLGNsZWFuKQogCi1jbGVhbjogYWNwaV9jbGVh biBjZ3JvdXBfY2xlYW4gY3B1cG93ZXJfY2xlYW4gaHZfY2xlYW4gZmlyZXdpcmVfY2xlYW4gXAor Y2xlYW46IGFjcGlfY2xlYW4gY2dyb3VwX2NsZWFuIGNvdW50ZXJfY2xlYW4gY3B1cG93ZXJfY2xl YW4gaHZfY2xlYW4gZmlyZXdpcmVfY2xlYW4gXAogCQlwZXJmX2NsZWFuIHNlbGZ0ZXN0c19jbGVh biB0dXJib3N0YXRfY2xlYW4gYm9vdGNvbmZpZ19jbGVhbiBzcGlfY2xlYW4gdXNiX2NsZWFuIHZp cnRpb19jbGVhbiBcCiAJCXZtX2NsZWFuIGJwZl9jbGVhbiBpaW9fY2xlYW4geDg2X2VuZXJneV9w ZXJmX3BvbGljeV9jbGVhbiB0bW9uX2NsZWFuIFwKIAkJZnJlZWZhbGxfY2xlYW4gYnVpbGRfY2xl YW4gbGliYnBmX2NsZWFuIGxpYnN1YmNtZF9jbGVhbiBsaWJsb2NrZGVwX2NsZWFuIFwKZGlmZiAt LWdpdCBhL3Rvb2xzL2NvdW50ZXIvQnVpbGQgYi90b29scy9jb3VudGVyL0J1aWxkCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMzNmNGE1MWQ3MTVlCi0tLSAvZGV2L251 bGwKKysrIGIvdG9vbHMvY291bnRlci9CdWlsZApAQCAtMCwwICsxIEBACitjb3VudGVyX2V4YW1w bGUteSArPSBjb3VudGVyX2V4YW1wbGUubwpkaWZmIC0tZ2l0IGEvdG9vbHMvY291bnRlci9NYWtl ZmlsZSBiL3Rvb2xzL2NvdW50ZXIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAwLi41ZWJjMTk1ZmQ5YzAKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9jb3Vu dGVyL01ha2VmaWxlCkBAIC0wLDAgKzEsNTMgQEAKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjAKK2luY2x1ZGUgLi4vc2NyaXB0cy9NYWtlZmlsZS5pbmNsdWRlCisKK2JpbmRpciA/ PSAvdXNyL2JpbgorCitpZmVxICgkKHNyY3RyZWUpLCkKK3NyY3RyZWUgOj0gJChwYXRzdWJzdCAl LywlLCQoZGlyICQoQ1VSRElSKSkpCitzcmN0cmVlIDo9ICQocGF0c3Vic3QgJS8sJSwkKGRpciAk KHNyY3RyZWUpKSkKK2VuZGlmCisKKyMgRG8gbm90IHVzZSBtYWtlJ3MgYnVpbHQtaW4gcnVsZXMK KyMgKHRoaXMgaW1wcm92ZXMgcGVyZm9ybWFuY2UgYW5kIGF2b2lkcyBoYXJkLXRvLWRlYnVnIGJl aGF2aW91cik7CitNQUtFRkxBR1MgKz0gLXIKKworb3ZlcnJpZGUgQ0ZMQUdTICs9IC1PMiAtV2Fs bCAtZyAtRF9HTlVfU09VUkNFIC1JJChPVVRQVVQpaW5jbHVkZQorCitBTExfVEFSR0VUUyA6PSBj b3VudGVyX2V4YW1wbGUKK0FMTF9QUk9HUkFNUyA6PSAkKHBhdHN1YnN0ICUsJChPVVRQVVQpJSwk KEFMTF9UQVJHRVRTKSkKKworYWxsOiAkKEFMTF9QUk9HUkFNUykKKworZXhwb3J0IHNyY3RyZWUg T1VUUFVUIENDIExEIENGTEFHUworaW5jbHVkZSAkKHNyY3RyZWUpL3Rvb2xzL2J1aWxkL01ha2Vm aWxlLmluY2x1ZGUKKworIworIyBXZSBuZWVkIHRoZSBmb2xsb3dpbmcgdG8gYmUgb3V0c2lkZSBv ZiBrZXJuZWwgdHJlZQorIworJChPVVRQVVQpaW5jbHVkZS9saW51eC9jb3VudGVyLmg6IC4uLy4u L2luY2x1ZGUvdWFwaS9saW51eC9jb3VudGVyLmgKKwlta2RpciAtcCAkKE9VVFBVVClpbmNsdWRl L2xpbnV4IDI+JjEgfHwgdHJ1ZQorCWxuIC1zZiAkKENVUkRJUikvLi4vLi4vaW5jbHVkZS91YXBp L2xpbnV4L2NvdW50ZXIuaCAkQAorCitwcmVwYXJlOiAkKE9VVFBVVClpbmNsdWRlL2xpbnV4L2Nv dW50ZXIuaAorCitDT1VOVEVSX0VYQU1QTEUgOj0gJChPVVRQVVQpY291bnRlcl9leGFtcGxlLm8K KyQoQ09VTlRFUl9FWEFNUExFKTogcHJlcGFyZSBGT1JDRQorCSQoUSkkKE1BS0UpICQoYnVpbGQp PWNvdW50ZXJfZXhhbXBsZQorJChPVVRQVVQpY291bnRlcl9leGFtcGxlOiAkKENPVU5URVJfRVhB TVBMRSkKKwkkKFFVSUVUX0xJTkspJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgJDwgLW8gJEAK KworY2xlYW46CisJcm0gLWYgJChBTExfUFJPR1JBTVMpCisJcm0gLXJmICQoT1VUUFVUKWluY2x1 ZGUvbGludXgvY291bnRlci5oCisJZmluZCAkKGlmICQoT1VUUFVUKSwkKE9VVFBVVCksLikgLW5h bWUgJyoubycgLWRlbGV0ZSAtbyAtbmFtZSAnXC4qLmQnIC1kZWxldGUKKworaW5zdGFsbDogJChB TExfUFJPR1JBTVMpCisJaW5zdGFsbCAtZCAtbSA3NTUgJChERVNURElSKSQoYmluZGlyKTsJCVwK Kwlmb3IgcHJvZ3JhbSBpbiAkKEFMTF9QUk9HUkFNUyk7IGRvCQlcCisJCWluc3RhbGwgJCRwcm9n cmFtICQoREVTVERJUikkKGJpbmRpcik7CVwKKwlkb25lCisKK0ZPUkNFOgorCisuUEhPTlk6IGFs bCBpbnN0YWxsIGNsZWFuIEZPUkNFIHByZXBhcmUKZGlmZiAtLWdpdCBhL3Rvb2xzL2NvdW50ZXIv Y291bnRlcl9leGFtcGxlLmMgYi90b29scy9jb3VudGVyL2NvdW50ZXJfZXhhbXBsZS5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNzFkZmVjNjczYzExCi0tLSAvZGV2 L251bGwKKysrIGIvdG9vbHMvY291bnRlci9jb3VudGVyX2V4YW1wbGUuYwpAQCAtMCwwICsxLDk1 IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CisvKiBDb3VudGVy IC0gZXhhbXBsZSB1c2Vyc3BhY2UgYXBwbGljYXRpb24KKyAqCisgKiBUaGUgdXNlcnNwYWNlIGFw cGxpY2F0aW9uIG9wZW5zIC9kZXYvY291bnRlcjAsIGNvbmZpZ3VyZXMgdGhlCisgKiBDT1VOVEVS X0VWRU5UX0lOREVYIGV2ZW50IGNoYW5uZWwgMCB0byBnYXRoZXIgQ291bnQgMCBjb3VudCBhbmQg Q291bnQKKyAqIDEgY291bnQsIGFuZCBwcmludHMgb3V0IHRoZSBkYXRhIGFzIGl0IGJlY29tZXMg YXZhaWxhYmxlIG9uIHRoZQorICogY2hhcmFjdGVyIGRldmljZSBub2RlLgorICoKKyAqIENvcHly aWdodCAoQykgMjAyMSBXaWxsaWFtIEJyZWF0aGl0dCBHcmF5CisgKi8KKyNpbmNsdWRlIDxlcnJu by5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8bGludXgvY291bnRlci5oPgorI2lu Y2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL2lvY3Rs Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK3N0cnVjdCBjb3VudGVyX3dhdGNoIHdhdGNoZXNb Ml0gPSB7CisJeworCQkvKiBDb21wb25lbnQgZGF0YTogQ291bnQgMCBjb3VudCAqLworCQkuY29t cG9uZW50LnR5cGUgPSBDT1VOVEVSX0NPTVBPTkVOVF9DT1VOVCwKKwkJLmNvbXBvbmVudC5zY29w ZSA9IENPVU5URVJfU0NPUEVfQ09VTlQsCisJCS5jb21wb25lbnQucGFyZW50ID0gMCwKKwkJLyog RXZlbnQgdHlwZTogSW5kZXggKi8KKwkJLmV2ZW50ID0gQ09VTlRFUl9FVkVOVF9JTkRFWCwKKwkJ LyogRGV2aWNlIGV2ZW50IGNoYW5uZWwgMCAqLworCQkuY2hhbm5lbCA9IDAsCisJfSwKKwl7CisJ CS8qIENvbXBvbmVudCBkYXRhOiBDb3VudCAxIGNvdW50ICovCisJCS5jb21wb25lbnQudHlwZSA9 IENPVU5URVJfQ09NUE9ORU5UX0NPVU5ULAorCQkuY29tcG9uZW50LnNjb3BlID0gQ09VTlRFUl9T Q09QRV9DT1VOVCwKKwkJLmNvbXBvbmVudC5wYXJlbnQgPSAxLAorCQkvKiBFdmVudCB0eXBlOiBJ bmRleCAqLworCQkuZXZlbnQgPSBDT1VOVEVSX0VWRU5UX0lOREVYLAorCQkvKiBEZXZpY2UgZXZl bnQgY2hhbm5lbCAwICovCisJCS5jaGFubmVsID0gMCwKKwl9LAorfTsKKworaW50IG1haW4odm9p ZCkKK3sKKwlpbnQgZmQ7CisJaW50IHJldDsKKwlzdHJ1Y3QgY291bnRlcl9ldmVudCBldmVudF9k YXRhWzJdOworCisJZmQgPSBvcGVuKCIvZGV2L2NvdW50ZXIwIiwgT19SRFdSKTsKKwlpZiAoZmQg PT0gLTEpIHsKKwkJcGVycm9yKCJVbmFibGUgdG8gb3BlbiAvZGV2L2NvdW50ZXIwIik7CisJCXJl dHVybiAtZXJybm87CisJfQorCisJcmV0ID0gaW9jdGwoZmQsIENPVU5URVJfQUREX1dBVENIX0lP Q1RMLCB3YXRjaGVzKTsKKwlpZiAocmV0ID09IC0xKSB7CisJCXBlcnJvcigiRXJyb3IgYWRkaW5n IHdhdGNoZXNbMF0iKTsKKwkJcmV0dXJuIC1lcnJubzsKKwl9CisJcmV0ID0gaW9jdGwoZmQsIENP VU5URVJfQUREX1dBVENIX0lPQ1RMLCB3YXRjaGVzICsgMSk7CisJaWYgKHJldCA9PSAtMSkgewor CQlwZXJyb3IoIkVycm9yIGFkZGluZyB3YXRjaGVzWzFdIik7CisJCXJldHVybiAtZXJybm87CisJ fQorCXJldCA9IGlvY3RsKGZkLCBDT1VOVEVSX0VOQUJMRV9FVkVOVFNfSU9DVEwpOworCWlmIChy ZXQgPT0gLTEpIHsKKwkJcGVycm9yKCJFcnJvciBlbmFibGluZyBldmVudHMiKTsKKwkJcmV0dXJu IC1lcnJubzsKKwl9CisKKwlmb3IgKDs7KSB7CisJCXJldCA9IHJlYWQoZmQsIGV2ZW50X2RhdGEs IHNpemVvZihldmVudF9kYXRhKSk7CisJCWlmIChyZXQgPT0gLTEpIHsKKwkJCXBlcnJvcigiRmFp bGVkIHRvIHJlYWQgZXZlbnQgZGF0YSIpOworCQkJcmV0dXJuIC1lcnJubzsKKwkJfQorCisJCWlm IChyZXQgIT0gc2l6ZW9mKGV2ZW50X2RhdGEpKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIkZhaWxl ZCB0byByZWFkIGV2ZW50IGRhdGFcbiIpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKworCQlwcmlu dGYoIlRpbWVzdGFtcCAwOiAlbGx1XHRDb3VudCAwOiAlbGx1XG4iCisJCSAgICAgICAiRXJyb3Ig TWVzc2FnZSAwOiAlc1xuIgorCQkgICAgICAgIlRpbWVzdGFtcCAxOiAlbGx1XHRDb3VudCAxOiAl bGx1XG4iCisJCSAgICAgICAiRXJyb3IgTWVzc2FnZSAxOiAlc1xuIiwKKwkJICAgICAgICh1bnNp Z25lZCBsb25nIGxvbmcpZXZlbnRfZGF0YVswXS50aW1lc3RhbXAsCisJCSAgICAgICAodW5zaWdu ZWQgbG9uZyBsb25nKWV2ZW50X2RhdGFbMF0udmFsdWUsCisJCSAgICAgICBzdHJlcnJvcihldmVu dF9kYXRhWzBdLnN0YXR1cyksCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWV2ZW50X2Rh dGFbMV0udGltZXN0YW1wLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylldmVudF9kYXRh WzFdLnZhbHVlLAorCQkgICAgICAgc3RyZXJyb3IoZXZlbnRfZGF0YVsxXS5zdGF0dXMpKTsKKwl9 CisKKwlyZXR1cm4gMDsKK30KLS0gCjIuMzIuMAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4 LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK