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 214DCC432BE for ; Tue, 3 Aug 2021 12:07:57 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 0249B6052B for ; Tue, 3 Aug 2021 12:07:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235976AbhHCMIG (ORCPT ); Tue, 3 Aug 2021 08:08:06 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51516 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235627AbhHCMIC (ORCPT ); Tue, 3 Aug 2021 08:08:02 -0400 Received: from mail-pl1-x632.google.com (mail-pl1-x632.google.com [IPv6:2607:f8b0:4864:20::632]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4E050C061757; Tue, 3 Aug 2021 05:07:51 -0700 (PDT) Received: by mail-pl1-x632.google.com with SMTP id k2so5893777plk.13; Tue, 03 Aug 2021 05:07:51 -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=AX9CwwBscIOgAMZ3W/Ftf7Z+sFLErOLPH4IQHM47ydE=; b=DwZFNpb8ZlPUJbdMtF0KTVj9+4Le8Zc6yBJ3vATf8QcipGp5SrJjIMm0XEIEKGluf6 9NaT0piMagUu3cmSURDEVreiQmnJ51vo9oDfomtIp4nz0axRBIep9lao/GKEb/nCzCOi bq5B6qqwfJvW3LklkobYas/+Aj90LMIJ20R1J5Pc9+fGauIu5n42pZH1Yp/mHRSv711R oRdNsC7pBmL9xCFO6J3TcsgZ/AZBWyUTKehEXKlnWzqdSk2cWOmRPpfJQJkcdQr6BkvI utZUaOO9rMutH3KSf3sFy7bMBURatTj9XIn53nSqRZF+HPa5Rc23TVx75xHR3veak+OO rxVQ== 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=AX9CwwBscIOgAMZ3W/Ftf7Z+sFLErOLPH4IQHM47ydE=; b=VFamy7BeGnYBYbZbII8pw57WxoIPFtSCEEYnrKK1TYM/d4QgWcujwOlOPCI0AYaiXS ICXGdQbghT87VgTgLPuV4TZvoE2O5soMI20PWAI+5HL5Z5GdJk+MlC30FXNiOB8lUPZV MDFFuZ7u8ip4RPoCS1extJYWCJg76SScFriDzaAUyg0wLQZhfEybJDIPwgzfrCypTSFi Ybfs3ibh6HomnhDCZIhn8IptyhxRHD6ys6ugsRw6GNVyTaqdLgWrr4xtcyf37xVuuHl+ f+WFOyu+Umcdv44BuQr3fbDmtLnxo6cxJ5aejkJRjgfPCJ0c9gPAfNmu9wEQA4SxpeV1 0v6Q== X-Gm-Message-State: AOAM533uX8x1nBMTb9hm4HE9q9B8byGvF9PSmF/ElUAoARqNbXl20RhB AUGlD+AxkZMaSUHON8LTar8= X-Google-Smtp-Source: ABdhPJyLk8ZI3n5tz7jnu/PUqD/OMEka8Wn4rppc/buVm5FvDW1Cj7O+24INGiyYUTJb7ZF+pA3vXQ== X-Received: by 2002:a62:1d46:0:b029:3a9:eb67:c0c0 with SMTP id d67-20020a621d460000b02903a9eb67c0c0mr21986937pfd.60.1627992470875; Tue, 03 Aug 2021 05:07:50 -0700 (PDT) Received: from localhost.localdomain ([156.146.35.76]) by smtp.gmail.com with ESMTPSA id n35sm7197502pfv.152.2021.08.03.05.07.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Aug 2021 05:07:48 -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 v14 12/17] tools/counter: Create Counter tools Date: Tue, 3 Aug 2021 21:06:22 +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 | 93 +++++++++++++++++++++++++++++++++ 5 files changed, 155 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 c0817c45401d..b6e809c269a5 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -4765,6 +4765,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..5da1fde03a9a 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..90d69fb9463b --- /dev/null +++ b/tools/counter/counter_example.c @@ -0,0 +1,93 @@ +// 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 + +static 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 1; + } + + 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", + event_data[0].timestamp, event_data[0].value, + strerror(event_data[0].status), + event_data[1].timestamp, 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.8 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 AA6EBC4338F for ; Tue, 3 Aug 2021 12:28:10 +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 6EF9660F58 for ; Tue, 3 Aug 2021 12:28:10 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 6EF9660F58 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=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=TTN9cHaypMVQH87XlOcOqJbkVZ9q7p2aFdD8i9gGv1k=; b=mCM4HP/SWLjcJC ICvgdIDVtq5Ryq+TmRiho9ikMW7ubPcyfew+ce3NLv8tiIcE+JzI0v/a1Xk8vygiityJVERFWsIFD GiSqC+ReWjeH8CwsAOTLcY7peMY0M7dGK1RcMjFs7aEcYK3evxp9XCn9I+hq2Vyp/9yVe5Tlm8nt8 ISU55yaAuFSNU8wwf6ce8dyn52CfLyIk2crztmdRm0GuBGd6EWXk1SNf5CRRUqXVz6xsq2aYKUACl 2ZF7tJQH9qOLGlhz7RSRH3ZlyNUMuV41s8jduesQ0lIke4ny1+6V88nwmWtmZbJiBnkfQh+cM+fWZ pLM0I/WboqwhoLzWf+KA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mAtUO-002caH-Gu; Tue, 03 Aug 2021 12:25:45 +0000 Received: from mail-pj1-x102b.google.com ([2607:f8b0:4864:20::102b]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mAtD5-002WOZ-Rp for linux-arm-kernel@lists.infradead.org; Tue, 03 Aug 2021 12:07:53 +0000 Received: by mail-pj1-x102b.google.com with SMTP id e2-20020a17090a4a02b029016f3020d867so4361395pjh.3 for ; Tue, 03 Aug 2021 05:07:51 -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=AX9CwwBscIOgAMZ3W/Ftf7Z+sFLErOLPH4IQHM47ydE=; b=DwZFNpb8ZlPUJbdMtF0KTVj9+4Le8Zc6yBJ3vATf8QcipGp5SrJjIMm0XEIEKGluf6 9NaT0piMagUu3cmSURDEVreiQmnJ51vo9oDfomtIp4nz0axRBIep9lao/GKEb/nCzCOi bq5B6qqwfJvW3LklkobYas/+Aj90LMIJ20R1J5Pc9+fGauIu5n42pZH1Yp/mHRSv711R oRdNsC7pBmL9xCFO6J3TcsgZ/AZBWyUTKehEXKlnWzqdSk2cWOmRPpfJQJkcdQr6BkvI utZUaOO9rMutH3KSf3sFy7bMBURatTj9XIn53nSqRZF+HPa5Rc23TVx75xHR3veak+OO rxVQ== 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=AX9CwwBscIOgAMZ3W/Ftf7Z+sFLErOLPH4IQHM47ydE=; b=K/9j+ycNmP+wuPQ1Jp5s8Kiahvl96XdWhXCT/FM1j2JJloc9p1v8iBohjlzz+U7Jic 7Pq/YgrjRcTpXLvTPQC+mC0hyfktlXWyasgCnUjyYwiLEnBc/6RuO7VxCOWPM60Iacu1 wMll3juUU5Kpxr67Z/GCXiKF/myN7nhs6rUWQIpNkm/gy9xHGrZ66cjVK5sdJx7rFhaq axVqZEsgLq4Bx+mjAK+k7+roSYxSRXYJ4eEs61Cf/lkU73IMdYHZVlEiPt1H5OXOdF8W Zf9ss40WRlpz/PwbI2NcSBnrjYdNF+wiex99B36hDW5GVzAISNytZgt5ImCKtSolZGHH rD+g== X-Gm-Message-State: AOAM532NnneDs/NBrW6+48FnyuVAkUaP0PuOHi1IAuBWK3r+z4eehwzA CSlQTozWtsZTgAX91BOoEKY= X-Google-Smtp-Source: ABdhPJyLk8ZI3n5tz7jnu/PUqD/OMEka8Wn4rppc/buVm5FvDW1Cj7O+24INGiyYUTJb7ZF+pA3vXQ== X-Received: by 2002:a62:1d46:0:b029:3a9:eb67:c0c0 with SMTP id d67-20020a621d460000b02903a9eb67c0c0mr21986937pfd.60.1627992470875; Tue, 03 Aug 2021 05:07:50 -0700 (PDT) Received: from localhost.localdomain ([156.146.35.76]) by smtp.gmail.com with ESMTPSA id n35sm7197502pfv.152.2021.08.03.05.07.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Aug 2021 05:07:48 -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 v14 12/17] tools/counter: Create Counter tools Date: Tue, 3 Aug 2021 21:06:22 +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-20210803_050752_051980_C0702943 X-CRM114-Status: GOOD ( 23.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 b2xzL2NvdW50ZXIvTWFrZWZpbGUgICAgICAgICAgfCA1MyArKysrKysrKysrKysrKysrKysrCiB0 b29scy9jb3VudGVyL2NvdW50ZXJfZXhhbXBsZS5jIHwgOTMgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrCiA1IGZpbGVzIGNoYW5nZWQsIDE1NSBpbnNlcnRpb25zKCspLCA2IGRlbGV0 aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL2NvdW50ZXIvQnVpbGQKIGNyZWF0ZSBt b2RlIDEwMDY0NCB0b29scy9jb3VudGVyL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgdG9v bHMvY291bnRlci9jb3VudGVyX2V4YW1wbGUuYwoKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIv TUFJTlRBSU5FUlMKaW5kZXggYzA4MTdjNDU0MDFkLi5iNmU4MDljMjY5YTUgMTAwNjQ0Ci0tLSBh L01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC00NzY1LDYgKzQ3NjUsNyBAQCBGOglE b2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZ2VuZXJpYy1jb3VudGVyLnJzdAogRjoJZHJpdmVycy9j b3VudGVyLwogRjoJaW5jbHVkZS9saW51eC9jb3VudGVyLmgKIEY6CWluY2x1ZGUvdWFwaS9saW51 eC9jb3VudGVyLmgKK0Y6CXRvb2xzL2NvdW50ZXIvCiAKIENQMjYxNSBJMkMgRFJJVkVSCiBNOglC ZW5jZSBDc8Oza8OhcyA8YmVuY2U5OEBzY2guYm1lLmh1PgpkaWZmIC0tZ2l0IGEvdG9vbHMvTWFr ZWZpbGUgYi90b29scy9NYWtlZmlsZQppbmRleCA3ZTlkMzRkZGQ3NGMuLjVkYTFmZGUwM2E5YSAx MDA2NDQKLS0tIGEvdG9vbHMvTWFrZWZpbGUKKysrIGIvdG9vbHMvTWFrZWZpbGUKQEAgLTEyLDYg KzEyLDcgQEAgaGVscDoKIAlAZWNobyAnICBhY3BpICAgICAgICAgICAgICAgICAgIC0gQUNQSSB0 b29scycKIAlAZWNobyAnICBicGYgICAgICAgICAgICAgICAgICAgIC0gbWlzYyBCUEYgdG9vbHMn CiAJQGVjaG8gJyAgY2dyb3VwICAgICAgICAgICAgICAgICAtIGNncm91cCB0b29scycKKwlAZWNo byAnICBjb3VudGVyICAgICAgICAgICAgICAgIC0gY291bnRlciB0b29scycKIAlAZWNobyAnICBj cHVwb3dlciAgICAgICAgICAgICAgIC0gYSB0b29sIGZvciBhbGwgdGhpbmdzIHg4NiBDUFUgcG93 ZXInCiAJQGVjaG8gJyAgZGVidWdnaW5nICAgICAgICAgICAgICAtIHRvb2xzIGZvciBkZWJ1Z2dp bmcnCiAJQGVjaG8gJyAgZmlyZXdpcmUgICAgICAgICAgICAgICAtIHRoZSB1c2Vyc3BhY2UgcGFy dCBvZiBub3N5LCBhbiBJRUVFLTEzOTQgdHJhZmZpYyBzbmlmZmVyJwpAQCAtNjUsNyArNjYsNyBA QCBhY3BpOiBGT1JDRQogY3B1cG93ZXI6IEZPUkNFCiAJJChjYWxsIGRlc2NlbmQscG93ZXIvJEAp CiAKLWNncm91cCBmaXJld2lyZSBodiBndWVzdCBib290Y29uZmlnIHNwaSB1c2IgdmlydGlvIHZt IGJwZiBpaW8gZ3BpbyBvYmp0b29sIGxlZHMgd21pIHBjaSBmaXJtd2FyZSBkZWJ1Z2dpbmcgdHJh Y2luZzogRk9SQ0UKK2Nncm91cCBjb3VudGVyIGZpcmV3aXJlIGh2IGd1ZXN0IGJvb3Rjb25maWcg c3BpIHVzYiB2aXJ0aW8gdm0gYnBmIGlpbyBncGlvIG9ianRvb2wgbGVkcyB3bWkgcGNpIGZpcm13 YXJlIGRlYnVnZ2luZyB0cmFjaW5nOiBGT1JDRQogCSQoY2FsbCBkZXNjZW5kLCRAKQogCiBicGYv JTogRk9SQ0UKQEAgLTEwMCw3ICsxMDEsNyBAQCBmcmVlZmFsbDogRk9SQ0UKIGt2bV9zdGF0OiBG T1JDRQogCSQoY2FsbCBkZXNjZW5kLGt2bS8kQCkKIAotYWxsOiBhY3BpIGNncm91cCBjcHVwb3dl ciBncGlvIGh2IGZpcmV3aXJlIGxpYmxvY2tkZXAgXAorYWxsOiBhY3BpIGNncm91cCBjb3VudGVy IGNwdXBvd2VyIGdwaW8gaHYgZmlyZXdpcmUgbGlibG9ja2RlcCBcCiAJCXBlcmYgc2VsZnRlc3Rz IGJvb3Rjb25maWcgc3BpIHR1cmJvc3RhdCB1c2IgXAogCQl2aXJ0aW8gdm0gYnBmIHg4Nl9lbmVy Z3lfcGVyZl9wb2xpY3kgXAogCQl0bW9uIGZyZWVmYWxsIGlpbyBvYmp0b29sIGt2bV9zdGF0IHdt aSBcCkBAIC0xMTIsNyArMTEzLDcgQEAgYWNwaV9pbnN0YWxsOgogY3B1cG93ZXJfaW5zdGFsbDoK IAkkKGNhbGwgZGVzY2VuZCxwb3dlci8kKEA6X2luc3RhbGw9KSxpbnN0YWxsKQogCi1jZ3JvdXBf aW5zdGFsbCBmaXJld2lyZV9pbnN0YWxsIGdwaW9faW5zdGFsbCBodl9pbnN0YWxsIGlpb19pbnN0 YWxsIHBlcmZfaW5zdGFsbCBib290Y29uZmlnX2luc3RhbGwgc3BpX2luc3RhbGwgdXNiX2luc3Rh bGwgdmlydGlvX2luc3RhbGwgdm1faW5zdGFsbCBicGZfaW5zdGFsbCBvYmp0b29sX2luc3RhbGwg d21pX2luc3RhbGwgcGNpX2luc3RhbGwgZGVidWdnaW5nX2luc3RhbGwgdHJhY2luZ19pbnN0YWxs OgorY2dyb3VwX2luc3RhbGwgY291bnRlcl9pbnN0YWxsIGZpcmV3aXJlX2luc3RhbGwgZ3Bpb19p bnN0YWxsIGh2X2luc3RhbGwgaWlvX2luc3RhbGwgcGVyZl9pbnN0YWxsIGJvb3Rjb25maWdfaW5z dGFsbCBzcGlfaW5zdGFsbCB1c2JfaW5zdGFsbCB2aXJ0aW9faW5zdGFsbCB2bV9pbnN0YWxsIGJw Zl9pbnN0YWxsIG9ianRvb2xfaW5zdGFsbCB3bWlfaW5zdGFsbCBwY2lfaW5zdGFsbCBkZWJ1Z2dp bmdfaW5zdGFsbCB0cmFjaW5nX2luc3RhbGw6CiAJJChjYWxsIGRlc2NlbmQsJChAOl9pbnN0YWxs PSksaW5zdGFsbCkKIAogbGlibG9ja2RlcF9pbnN0YWxsOgpAQCAtMTMzLDcgKzEzNCw3IEBAIGZy ZWVmYWxsX2luc3RhbGw6CiBrdm1fc3RhdF9pbnN0YWxsOgogCSQoY2FsbCBkZXNjZW5kLGt2bS8k KEA6X2luc3RhbGw9KSxpbnN0YWxsKQogCi1pbnN0YWxsOiBhY3BpX2luc3RhbGwgY2dyb3VwX2lu c3RhbGwgY3B1cG93ZXJfaW5zdGFsbCBncGlvX2luc3RhbGwgXAoraW5zdGFsbDogYWNwaV9pbnN0 YWxsIGNncm91cF9pbnN0YWxsIGNvdW50ZXJfaW5zdGFsbCBjcHVwb3dlcl9pbnN0YWxsIGdwaW9f aW5zdGFsbCBcCiAJCWh2X2luc3RhbGwgZmlyZXdpcmVfaW5zdGFsbCBpaW9faW5zdGFsbCBsaWJs b2NrZGVwX2luc3RhbGwgXAogCQlwZXJmX2luc3RhbGwgc2VsZnRlc3RzX2luc3RhbGwgdHVyYm9z dGF0X2luc3RhbGwgdXNiX2luc3RhbGwgXAogCQl2aXJ0aW9faW5zdGFsbCB2bV9pbnN0YWxsIGJw Zl9pbnN0YWxsIHg4Nl9lbmVyZ3lfcGVyZl9wb2xpY3lfaW5zdGFsbCBcCkBAIC0xNDcsNyArMTQ4 LDcgQEAgYWNwaV9jbGVhbjoKIGNwdXBvd2VyX2NsZWFuOgogCSQoY2FsbCBkZXNjZW5kLHBvd2Vy L2NwdXBvd2VyLGNsZWFuKQogCi1jZ3JvdXBfY2xlYW4gaHZfY2xlYW4gZmlyZXdpcmVfY2xlYW4g Ym9vdGNvbmZpZ19jbGVhbiBzcGlfY2xlYW4gdXNiX2NsZWFuIHZpcnRpb19jbGVhbiB2bV9jbGVh biB3bWlfY2xlYW4gYnBmX2NsZWFuIGlpb19jbGVhbiBncGlvX2NsZWFuIG9ianRvb2xfY2xlYW4g bGVkc19jbGVhbiBwY2lfY2xlYW4gZmlybXdhcmVfY2xlYW4gZGVidWdnaW5nX2NsZWFuIHRyYWNp bmdfY2xlYW46CitjZ3JvdXBfY2xlYW4gY291bnRlcl9jbGVhbiBodl9jbGVhbiBmaXJld2lyZV9j bGVhbiBib290Y29uZmlnX2NsZWFuIHNwaV9jbGVhbiB1c2JfY2xlYW4gdmlydGlvX2NsZWFuIHZt X2NsZWFuIHdtaV9jbGVhbiBicGZfY2xlYW4gaWlvX2NsZWFuIGdwaW9fY2xlYW4gb2JqdG9vbF9j bGVhbiBsZWRzX2NsZWFuIHBjaV9jbGVhbiBmaXJtd2FyZV9jbGVhbiBkZWJ1Z2dpbmdfY2xlYW4g dHJhY2luZ19jbGVhbjoKIAkkKGNhbGwgZGVzY2VuZCwkKEA6X2NsZWFuPSksY2xlYW4pCiAKIGxp YmxvY2tkZXBfY2xlYW46CkBAIC0xODEsNyArMTgyLDcgQEAgZnJlZWZhbGxfY2xlYW46CiBidWls ZF9jbGVhbjoKIAkkKGNhbGwgZGVzY2VuZCxidWlsZCxjbGVhbikKIAotY2xlYW46IGFjcGlfY2xl YW4gY2dyb3VwX2NsZWFuIGNwdXBvd2VyX2NsZWFuIGh2X2NsZWFuIGZpcmV3aXJlX2NsZWFuIFwK K2NsZWFuOiBhY3BpX2NsZWFuIGNncm91cF9jbGVhbiBjb3VudGVyX2NsZWFuIGNwdXBvd2VyX2Ns ZWFuIGh2X2NsZWFuIGZpcmV3aXJlX2NsZWFuIFwKIAkJcGVyZl9jbGVhbiBzZWxmdGVzdHNfY2xl YW4gdHVyYm9zdGF0X2NsZWFuIGJvb3Rjb25maWdfY2xlYW4gc3BpX2NsZWFuIHVzYl9jbGVhbiB2 aXJ0aW9fY2xlYW4gXAogCQl2bV9jbGVhbiBicGZfY2xlYW4gaWlvX2NsZWFuIHg4Nl9lbmVyZ3lf cGVyZl9wb2xpY3lfY2xlYW4gdG1vbl9jbGVhbiBcCiAJCWZyZWVmYWxsX2NsZWFuIGJ1aWxkX2Ns ZWFuIGxpYmJwZl9jbGVhbiBsaWJzdWJjbWRfY2xlYW4gbGlibG9ja2RlcF9jbGVhbiBcCmRpZmYg LS1naXQgYS90b29scy9jb3VudGVyL0J1aWxkIGIvdG9vbHMvY291bnRlci9CdWlsZApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjMzZjRhNTFkNzE1ZQotLS0gL2Rldi9u dWxsCisrKyBiL3Rvb2xzL2NvdW50ZXIvQnVpbGQKQEAgLTAsMCArMSBAQAorY291bnRlcl9leGFt cGxlLXkgKz0gY291bnRlcl9leGFtcGxlLm8KZGlmZiAtLWdpdCBhL3Rvb2xzL2NvdW50ZXIvTWFr ZWZpbGUgYi90b29scy9jb3VudGVyL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwMC4uNWViYzE5NWZkOWMwCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvY291 bnRlci9NYWtlZmlsZQpAQCAtMCwwICsxLDUzIEBACisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wCitpbmNsdWRlIC4uL3NjcmlwdHMvTWFrZWZpbGUuaW5jbHVkZQorCitiaW5kaXIg Pz0gL3Vzci9iaW4KKworaWZlcSAoJChzcmN0cmVlKSwpCitzcmN0cmVlIDo9ICQocGF0c3Vic3Qg JS8sJSwkKGRpciAkKENVUkRJUikpKQorc3JjdHJlZSA6PSAkKHBhdHN1YnN0ICUvLCUsJChkaXIg JChzcmN0cmVlKSkpCitlbmRpZgorCisjIERvIG5vdCB1c2UgbWFrZSdzIGJ1aWx0LWluIHJ1bGVz CisjICh0aGlzIGltcHJvdmVzIHBlcmZvcm1hbmNlIGFuZCBhdm9pZHMgaGFyZC10by1kZWJ1ZyBi ZWhhdmlvdXIpOworTUFLRUZMQUdTICs9IC1yCisKK292ZXJyaWRlIENGTEFHUyArPSAtTzIgLVdh bGwgLWcgLURfR05VX1NPVVJDRSAtSSQoT1VUUFVUKWluY2x1ZGUKKworQUxMX1RBUkdFVFMgOj0g Y291bnRlcl9leGFtcGxlCitBTExfUFJPR1JBTVMgOj0gJChwYXRzdWJzdCAlLCQoT1VUUFVUKSUs JChBTExfVEFSR0VUUykpCisKK2FsbDogJChBTExfUFJPR1JBTVMpCisKK2V4cG9ydCBzcmN0cmVl IE9VVFBVVCBDQyBMRCBDRkxBR1MKK2luY2x1ZGUgJChzcmN0cmVlKS90b29scy9idWlsZC9NYWtl ZmlsZS5pbmNsdWRlCisKKyMKKyMgV2UgbmVlZCB0aGUgZm9sbG93aW5nIHRvIGJlIG91dHNpZGUg b2Yga2VybmVsIHRyZWUKKyMKKyQoT1VUUFVUKWluY2x1ZGUvbGludXgvY291bnRlci5oOiAuLi8u Li9pbmNsdWRlL3VhcGkvbGludXgvY291bnRlci5oCisJbWtkaXIgLXAgJChPVVRQVVQpaW5jbHVk ZS9saW51eCAyPiYxIHx8IHRydWUKKwlsbiAtc2YgJChDVVJESVIpLy4uLy4uL2luY2x1ZGUvdWFw aS9saW51eC9jb3VudGVyLmggJEAKKworcHJlcGFyZTogJChPVVRQVVQpaW5jbHVkZS9saW51eC9j b3VudGVyLmgKKworQ09VTlRFUl9FWEFNUExFIDo9ICQoT1VUUFVUKWNvdW50ZXJfZXhhbXBsZS5v CiskKENPVU5URVJfRVhBTVBMRSk6IHByZXBhcmUgRk9SQ0UKKwkkKFEpJChNQUtFKSAkKGJ1aWxk KT1jb3VudGVyX2V4YW1wbGUKKyQoT1VUUFVUKWNvdW50ZXJfZXhhbXBsZTogJChDT1VOVEVSX0VY QU1QTEUpCisJJChRVUlFVF9MSU5LKSQoQ0MpICQoQ0ZMQUdTKSAkKExERkxBR1MpICQ8IC1vICRA CisKK2NsZWFuOgorCXJtIC1mICQoQUxMX1BST0dSQU1TKQorCXJtIC1yZiAkKE9VVFBVVClpbmNs dWRlL2xpbnV4L2NvdW50ZXIuaAorCWZpbmQgJChpZiAkKE9VVFBVVCksJChPVVRQVVQpLC4pIC1u YW1lICcqLm8nIC1kZWxldGUgLW8gLW5hbWUgJ1wuKi5kJyAtZGVsZXRlCisKK2luc3RhbGw6ICQo QUxMX1BST0dSQU1TKQorCWluc3RhbGwgLWQgLW0gNzU1ICQoREVTVERJUikkKGJpbmRpcik7CQlc CisJZm9yIHByb2dyYW0gaW4gJChBTExfUFJPR1JBTVMpOyBkbwkJXAorCQlpbnN0YWxsICQkcHJv Z3JhbSAkKERFU1RESVIpJChiaW5kaXIpOwlcCisJZG9uZQorCitGT1JDRToKKworLlBIT05ZOiBh bGwgaW5zdGFsbCBjbGVhbiBGT1JDRSBwcmVwYXJlCmRpZmYgLS1naXQgYS90b29scy9jb3VudGVy L2NvdW50ZXJfZXhhbXBsZS5jIGIvdG9vbHMvY291bnRlci9jb3VudGVyX2V4YW1wbGUuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjkwZDY5ZmI5NDYzYgotLS0gL2Rl di9udWxsCisrKyBiL3Rvb2xzL2NvdW50ZXIvY291bnRlcl9leGFtcGxlLmMKQEAgLTAsMCArMSw5 MyBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQorLyogQ291bnRl ciAtIGV4YW1wbGUgdXNlcnNwYWNlIGFwcGxpY2F0aW9uCisgKgorICogVGhlIHVzZXJzcGFjZSBh cHBsaWNhdGlvbiBvcGVucyAvZGV2L2NvdW50ZXIwLCBjb25maWd1cmVzIHRoZQorICogQ09VTlRF Ul9FVkVOVF9JTkRFWCBldmVudCBjaGFubmVsIDAgdG8gZ2F0aGVyIENvdW50IDAgY291bnQgYW5k IENvdW50CisgKiAxIGNvdW50LCBhbmQgcHJpbnRzIG91dCB0aGUgZGF0YSBhcyBpdCBiZWNvbWVz IGF2YWlsYWJsZSBvbiB0aGUKKyAqIGNoYXJhY3RlciBkZXZpY2Ugbm9kZS4KKyAqCisgKiBDb3B5 cmlnaHQgKEMpIDIwMjEgV2lsbGlhbSBCcmVhdGhpdHQgR3JheQorICovCisjaW5jbHVkZSA8ZXJy bm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvdW50ZXIuaD4KKyNp bmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy9pb2N0 bC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCitzdGF0aWMgc3RydWN0IGNvdW50ZXJfd2F0Y2gg d2F0Y2hlc1syXSA9IHsKKwl7CisJCS8qIENvbXBvbmVudCBkYXRhOiBDb3VudCAwIGNvdW50ICov CisJCS5jb21wb25lbnQudHlwZSA9IENPVU5URVJfQ09NUE9ORU5UX0NPVU5ULAorCQkuY29tcG9u ZW50LnNjb3BlID0gQ09VTlRFUl9TQ09QRV9DT1VOVCwKKwkJLmNvbXBvbmVudC5wYXJlbnQgPSAw LAorCQkvKiBFdmVudCB0eXBlOiBJbmRleCAqLworCQkuZXZlbnQgPSBDT1VOVEVSX0VWRU5UX0lO REVYLAorCQkvKiBEZXZpY2UgZXZlbnQgY2hhbm5lbCAwICovCisJCS5jaGFubmVsID0gMCwKKwl9 LAorCXsKKwkJLyogQ29tcG9uZW50IGRhdGE6IENvdW50IDEgY291bnQgKi8KKwkJLmNvbXBvbmVu dC50eXBlID0gQ09VTlRFUl9DT01QT05FTlRfQ09VTlQsCisJCS5jb21wb25lbnQuc2NvcGUgPSBD T1VOVEVSX1NDT1BFX0NPVU5ULAorCQkuY29tcG9uZW50LnBhcmVudCA9IDEsCisJCS8qIEV2ZW50 IHR5cGU6IEluZGV4ICovCisJCS5ldmVudCA9IENPVU5URVJfRVZFTlRfSU5ERVgsCisJCS8qIERl dmljZSBldmVudCBjaGFubmVsIDAgKi8KKwkJLmNoYW5uZWwgPSAwLAorCX0sCit9OworCitpbnQg bWFpbih2b2lkKQoreworCWludCBmZDsKKwlpbnQgcmV0OworCXN0cnVjdCBjb3VudGVyX2V2ZW50 IGV2ZW50X2RhdGFbMl07CisKKwlmZCA9IG9wZW4oIi9kZXYvY291bnRlcjAiLCBPX1JEV1IpOwor CWlmIChmZCA9PSAtMSkgeworCQlwZXJyb3IoIlVuYWJsZSB0byBvcGVuIC9kZXYvY291bnRlcjAi KTsKKwkJcmV0dXJuIC1lcnJubzsKKwl9CisKKwlyZXQgPSBpb2N0bChmZCwgQ09VTlRFUl9BRERf V0FUQ0hfSU9DVEwsIHdhdGNoZXMpOworCWlmIChyZXQgPT0gLTEpIHsKKwkJcGVycm9yKCJFcnJv ciBhZGRpbmcgd2F0Y2hlc1swXSIpOworCQlyZXR1cm4gLWVycm5vOworCX0KKwlyZXQgPSBpb2N0 bChmZCwgQ09VTlRFUl9BRERfV0FUQ0hfSU9DVEwsIHdhdGNoZXMgKyAxKTsKKwlpZiAocmV0ID09 IC0xKSB7CisJCXBlcnJvcigiRXJyb3IgYWRkaW5nIHdhdGNoZXNbMV0iKTsKKwkJcmV0dXJuIC1l cnJubzsKKwl9CisJcmV0ID0gaW9jdGwoZmQsIENPVU5URVJfRU5BQkxFX0VWRU5UU19JT0NUTCk7 CisJaWYgKHJldCA9PSAtMSkgeworCQlwZXJyb3IoIkVycm9yIGVuYWJsaW5nIGV2ZW50cyIpOwor CQlyZXR1cm4gLWVycm5vOworCX0KKworCWZvciAoOzspIHsKKwkJcmV0ID0gcmVhZChmZCwgZXZl bnRfZGF0YSwgc2l6ZW9mKGV2ZW50X2RhdGEpKTsKKwkJaWYgKHJldCA9PSAtMSkgeworCQkJcGVy cm9yKCJGYWlsZWQgdG8gcmVhZCBldmVudCBkYXRhIik7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJ CWlmIChyZXQgIT0gc2l6ZW9mKGV2ZW50X2RhdGEpKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIkZh aWxlZCB0byByZWFkIGV2ZW50IGRhdGFcbiIpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKworCQlw cmludGYoIlRpbWVzdGFtcCAwOiAlbGx1XHRDb3VudCAwOiAlbGx1XG4iCisJCSAgICAgICAiRXJy b3IgTWVzc2FnZSAwOiAlc1xuIgorCQkgICAgICAgIlRpbWVzdGFtcCAxOiAlbGx1XHRDb3VudCAx OiAlbGx1XG4iCisJCSAgICAgICAiRXJyb3IgTWVzc2FnZSAxOiAlc1xuIiwKKwkJICAgICAgIGV2 ZW50X2RhdGFbMF0udGltZXN0YW1wLCBldmVudF9kYXRhWzBdLnZhbHVlLAorCQkgICAgICAgc3Ry ZXJyb3IoZXZlbnRfZGF0YVswXS5zdGF0dXMpLAorCQkgICAgICAgZXZlbnRfZGF0YVsxXS50aW1l c3RhbXAsIGV2ZW50X2RhdGFbMV0udmFsdWUsCisJCSAgICAgICBzdHJlcnJvcihldmVudF9kYXRh WzFdLnN0YXR1cykpOworCX0KKworCXJldHVybiAwOworfQotLSAKMi4zMi4wCgoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBt YWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9s aXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=