From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pf1-f176.google.com (mail-pf1-f176.google.com [209.85.210.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C6A2C5473F for ; Tue, 5 Mar 2024 10:06:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.176 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709633208; cv=none; b=pyokGucNzz06GJoPEkLOmgvWD7VOEq7jC1LUvJd+K3pzp+xuNBwG0RtJZLHlkHvjZ3jmuX91WEzNLlPP5NFFmgDlXYrU8BXfDr0mI4fm7WS2MQerf9D0mKU0QEyN7ioAVvy23ntJ5sq6vdr2Da8iRJL1IdPA/6VE/zLjx+N/G6o= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709633208; c=relaxed/simple; bh=eqlOESaV1bqezw30Ds+lV6xUhURyVUt9af977ahT1vc=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=oyPIZM8lOhlxkeCkzqzyTGZgIUCBrXN8yZqBJJV+RpX2ZVO1HJ5dzNnTgu5MMLTMpfpNEoExTs9qRYgF1RapkCkTEP9cfLs+zR5YEaun8wjm3Aif8luwS9PxIyjAcIFeGYpOIOJWo/et10JBy0qlhKd1Py0nOwlYKXsblf3ZkR0= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ventanamicro.com; spf=pass smtp.mailfrom=ventanamicro.com; dkim=pass (2048-bit key) header.d=ventanamicro.com header.i=@ventanamicro.com header.b=GiDgY1Py; arc=none smtp.client-ip=209.85.210.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ventanamicro.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ventanamicro.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ventanamicro.com header.i=@ventanamicro.com header.b="GiDgY1Py" Received: by mail-pf1-f176.google.com with SMTP id d2e1a72fcca58-6da202aa138so3980362b3a.2 for ; Tue, 05 Mar 2024 02:06:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ventanamicro.com; s=google; t=1709633206; x=1710238006; darn=lists.linux.dev; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=RZOKpEbQlChz7zOomD/vIt5nW6uNiNml3QCNdvLbLzM=; b=GiDgY1Py5pR48ZL61DG7SyIKIE8G9KJignWVDzcs0MxAipzVD+krGGbr1GEJRKyGBY wSBcMpibNew9kXmp9lPad9fupFnWHiUNVtD+7aTc8Yh5z1Y0X8TvZ5k8jLtxrAiucKj9 SJz5405yYXBj/sIpil9Eq/CVZ4VzhwI7+jfanRcbJ/CMW0DcnkzPo5qzctypgQ/Csa76 Jjw6UgrnczbcbLgt7CW+1HsdYhP83uKDwLeKJfA8b4irXB9wYtcjBYv6gWpNyq7rFqtS g/R8hTR7ZZSjgIw8BoldyP127vrJ1UEEfcXtZ7MuUVsxClETSd3SPbAEPREL7lWJOcJr qU7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709633206; x=1710238006; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=RZOKpEbQlChz7zOomD/vIt5nW6uNiNml3QCNdvLbLzM=; b=hBRTSFqwaIom9wJGt2IA2nTNuF1tX7zMZ8Zp2o47Lph8lwL7pJFdc9XVCemM0smyRG 1bvzvTdwKUQzDyCZG7n5dJFh9Xhwl3l2l5xGIE0qp+sI9RFF5mfVF5EJA/rSamGM+jR9 Bku21j2AGOxPoKIVbVmpqZdl1oVg4TnxMXDMojixFoCra+kgPeh79wfrXUZ8lg2xqXvo WKvsK09YmKgAPYEEO4bh7t3vt31ZVB9kdCAGeVNm3P3ST2xIf1jW8fiEIspvARb9UC7z i2/VTnTrR7T1mZGCwYRBD5LTzLotoO3zNEtsea5qwDSGdo0OMve1MNHxse/mWyQjD4tj cp7Q== X-Forwarded-Encrypted: i=1; AJvYcCUVAVERFaYUMT5wVupLKDBVSzjDsauK937/3hSMpP81TobOV5o/TeGoQpi3KreTtB4hoPnL0ttltY1dBRbKwUzo01f1i3l/VSjzgc7t X-Gm-Message-State: AOJu0YwLOzPbmZFWeD9cpgir1qYp39CPXlaZsPqiPvQs4BeSUcuKfXWs FlMbCQLjVZqgMPiIKo3Wgr0mOjDDVqp0Usq8IcfcQntUge5QiSi/B2YmT89fz3g= X-Google-Smtp-Source: AGHT+IGjdBTC5zwV3+uOzO0FRsFfVU9zwOZKNxa40pniaFw+dSJeQQNn86lkd16UTmfTD8HYlgY+Ng== X-Received: by 2002:a05:6a20:1aa4:b0:1a1:51b3:b1c4 with SMTP id ci36-20020a056a201aa400b001a151b3b1c4mr1057558pzb.56.1709633206019; Tue, 05 Mar 2024 02:06:46 -0800 (PST) Received: from sunil-laptop ([106.51.184.12]) by smtp.gmail.com with ESMTPSA id s62-20020a625e41000000b006e612df4627sm3941333pfb.39.2024.03.05.02.06.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Mar 2024 02:06:45 -0800 (PST) Date: Tue, 5 Mar 2024 15:36:32 +0530 From: Sunil V L To: Haibo Xu Cc: Haibo Xu , ajones@ventanamicro.com, Paul Walmsley , Palmer Dabbelt , Albert Ou , "Rafael J. Wysocki" , Len Brown , Robert Moore , Conor Dooley , Guo Ren , =?utf-8?B?QmrDtnJuIFTDtnBlbA==?= , Alexandre Ghiti , Greentime Hu , Baoquan He , =?utf-8?B?Q2zDqW1lbnQgTMOpZ2Vy?= , Sami Tolvanen , Jisheng Zhang , Greg Kroah-Hartman , Arnd Bergmann , Chen Jiahao , James Morse , Evan Green , Samuel Holland , Anup Patel , Ard Biesheuvel , Tony Luck , Yuntao Wang , Dan Williams , Alison Schofield , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org, acpica-devel@lists.linux.dev Subject: Re: [PATCH 3/4] ACPI: RISCV: Add NUMA support based on SRAT and SLIT Message-ID: References: <799dcc07f41c2357328e9778fbbded7818af34a7.1706603678.git.haibo1.xu@intel.com> Precedence: bulk X-Mailing-List: acpica-devel@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: On Tue, Mar 05, 2024 at 05:54:03PM +0800, Haibo Xu wrote: > On Tue, Mar 5, 2024 at 1:24 PM Sunil V L wrote: > > > > On Wed, Jan 31, 2024 at 10:32:00AM +0800, Haibo Xu wrote: > > > Add acpi_numa.c file to enable parse NUMA information from > > > ACPI SRAT and SLIT tables. SRAT table provide CPUs(Hart) and > > > memory nodes to proximity domain mapping, while SLIT table > > > provide the distance metrics between proximity domains. > > > > > > Signed-off-by: Haibo Xu > > > --- > > > arch/riscv/include/asm/acpi.h | 15 +++- > > > arch/riscv/kernel/Makefile | 1 + > > > arch/riscv/kernel/acpi.c | 5 -- > > > arch/riscv/kernel/acpi_numa.c | 133 ++++++++++++++++++++++++++++++++++ > > > arch/riscv/kernel/setup.c | 4 +- > > > arch/riscv/kernel/smpboot.c | 2 - > > > drivers/acpi/numa/srat.c | 3 +- > > > include/linux/acpi.h | 4 + > > > 8 files changed, 156 insertions(+), 11 deletions(-) > > > create mode 100644 arch/riscv/kernel/acpi_numa.c > > > > > > diff --git a/arch/riscv/include/asm/acpi.h b/arch/riscv/include/asm/acpi.h > > > index 7dad0cf9d701..e0a1f84404f3 100644 > > > --- a/arch/riscv/include/asm/acpi.h > > > +++ b/arch/riscv/include/asm/acpi.h > > > @@ -61,11 +61,14 @@ static inline void arch_fix_phys_package_id(int num, u32 slot) { } > > > > > > void acpi_init_rintc_map(void); > > > struct acpi_madt_rintc *acpi_cpu_get_madt_rintc(int cpu); > > > -u32 get_acpi_id_for_cpu(int cpu); > > > +static inline u32 get_acpi_id_for_cpu(int cpu) > > > +{ > > > + return acpi_cpu_get_madt_rintc(cpu)->uid; > > > +} > > > + > > > int acpi_get_riscv_isa(struct acpi_table_header *table, > > > unsigned int cpu, const char **isa); > > > > > > -static inline int acpi_numa_get_nid(unsigned int cpu) { return NUMA_NO_NODE; } > > > void acpi_get_cbo_block_size(struct acpi_table_header *table, u32 *cbom_size, > > > u32 *cboz_size, u32 *cbop_size); > > > #else > > > @@ -87,4 +90,12 @@ static inline void acpi_get_cbo_block_size(struct acpi_table_header *table, > > > > > > #endif /* CONFIG_ACPI */ > > > > > > +#ifdef CONFIG_ACPI_NUMA > > > +int acpi_numa_get_nid(unsigned int cpu); > > > +void acpi_map_cpus_to_nodes(void); > > > +#else > > > +static inline int acpi_numa_get_nid(unsigned int cpu) { return NUMA_NO_NODE; } > > > +static inline void acpi_map_cpus_to_nodes(void) { } > > > +#endif /* CONFIG_ACPI_NUMA */ > > > + > > > #endif /*_ASM_ACPI_H*/ > > > diff --git a/arch/riscv/kernel/Makefile b/arch/riscv/kernel/Makefile > > > index f71910718053..5d3e9cf89b76 100644 > > > --- a/arch/riscv/kernel/Makefile > > > +++ b/arch/riscv/kernel/Makefile > > > @@ -105,3 +105,4 @@ obj-$(CONFIG_COMPAT) += compat_vdso/ > > > > > > obj-$(CONFIG_64BIT) += pi/ > > > obj-$(CONFIG_ACPI) += acpi.o > > > +obj-$(CONFIG_ACPI_NUMA) += acpi_numa.o > > > diff --git a/arch/riscv/kernel/acpi.c b/arch/riscv/kernel/acpi.c > > > index e619edc8b0cc..040bdbfea2b4 100644 > > > --- a/arch/riscv/kernel/acpi.c > > > +++ b/arch/riscv/kernel/acpi.c > > > @@ -191,11 +191,6 @@ struct acpi_madt_rintc *acpi_cpu_get_madt_rintc(int cpu) > > > return &cpu_madt_rintc[cpu]; > > > } > > > > > > -u32 get_acpi_id_for_cpu(int cpu) > > > -{ > > > - return acpi_cpu_get_madt_rintc(cpu)->uid; > > > -} > > > - > > > /* > > > * __acpi_map_table() will be called before paging_init(), so early_ioremap() > > > * or early_memremap() should be called here to for ACPI table mapping. > > > diff --git a/arch/riscv/kernel/acpi_numa.c b/arch/riscv/kernel/acpi_numa.c > > > new file mode 100644 > > > index 000000000000..493642a61457 > > > --- /dev/null > > > +++ b/arch/riscv/kernel/acpi_numa.c > > > @@ -0,0 +1,133 @@ > > > +// SPDX-License-Identifier: GPL-2.0 > > > +/* > > > + * ACPI 6.6 based NUMA setup for RISCV > > > + * Lots of code was borrowed from arch/arm64/kernel/acpi_numa.c > > > + * > > > + * Copyright 2004 Andi Kleen, SuSE Labs. > > > + * Copyright (C) 2013-2016, Linaro Ltd. > > > + * Author: Hanjun Guo > > > + * Copyright (C) 2024 Intel Corporation. > > > + * > > > + * Reads the ACPI SRAT table to figure out what memory belongs to which CPUs. > > > + * > > > + * Called from acpi_numa_init while reading the SRAT and SLIT tables. > > > + * Assumes all memory regions belonging to a single proximity domain > > > + * are in one chunk. Holes between them will be included in the node. > > > + */ > > > + > > > +#define pr_fmt(fmt) "ACPI: NUMA: " fmt > > > + > > > +#include > > > +#include > > > +#include > > > +#include > > > +#include > > > +#include > > > +#include > > > +#include > > > + > > > +#include > > > + > > > +static int acpi_early_node_map[NR_CPUS] __initdata = { NUMA_NO_NODE }; > > > + > > > +int __init acpi_numa_get_nid(unsigned int cpu) > > > +{ > > > + return acpi_early_node_map[cpu]; > > > +} > > > + > > > +static inline int get_cpu_for_acpi_id(u32 uid) > > > +{ > > > + int cpu; > > > + > > > + for (cpu = 0; cpu < nr_cpu_ids; cpu++) > > > + if (uid == get_acpi_id_for_cpu(cpu)) > > > + return cpu; > > > + > > > + return -EINVAL; > > > +} > > > + > > > +static int __init acpi_parse_rintc_pxm(union acpi_subtable_headers *header, > > > + const unsigned long end) > > > > Please check alignment. > > > > Sure. > > > > +{ > > > + struct acpi_srat_rintc_affinity *pa; > > > + int cpu, pxm, node; > > > + > > > + if (srat_disabled()) > > > + return -EINVAL; > > > + > > > + pa = (struct acpi_srat_rintc_affinity *)header; > > > + if (!pa) > > > + return -EINVAL; > > > + > > > + if (!(pa->flags & ACPI_SRAT_RINTC_ENABLED)) > > > + return 0; > > > + > > > + pxm = pa->proximity_domain; > > > + node = pxm_to_node(pxm); > > > + > > > + /* > > > + * If we can't map the UID to a logical cpu this > > > + * means that the UID is not part of possible cpus > > > + * so we do not need a NUMA mapping for it, skip > > > + * the SRAT entry and keep parsing. > > > + */ > > > + cpu = get_cpu_for_acpi_id(pa->acpi_processor_uid); > > > + if (cpu < 0) > > > + return 0; > > > + > > > + acpi_early_node_map[cpu] = node; > > > + pr_info("SRAT: PXM %d -> HARTID 0x%lx -> Node %d\n", pxm, > > > + cpuid_to_hartid_map(cpu), node); > > > + > > > + return 0; > > > +} > > > + > > > +void __init acpi_map_cpus_to_nodes(void) > > > +{ > > > + int i; > > > + > > > + /* > > > + * In ACPI, SMP and CPU NUMA information is provided in separate > > > + * static tables, namely the MADT and the SRAT. > > > + * > > > + * Thus, it is simpler to first create the cpu logical map through > > > + * an MADT walk and then map the logical cpus to their node ids > > > + * as separate steps. > > > + */ > > > + acpi_table_parse_entries(ACPI_SIG_SRAT, sizeof(struct acpi_table_srat), > > > + ACPI_SRAT_TYPE_RINTC_AFFINITY, > > > + acpi_parse_rintc_pxm, 0); > > > + > > Alignment here as well. > > > > Sure. > > > > + for (i = 0; i < nr_cpu_ids; i++) > > > + early_map_cpu_to_node(i, acpi_numa_get_nid(i)); > > > +} > > > + > > > +/* Callback for Proximity Domain -> logical node ID mapping */ > > > +void __init acpi_numa_rintc_affinity_init(struct acpi_srat_rintc_affinity *pa) > > > +{ > > > + int pxm, node; > > > + > > > + if (srat_disabled()) > > > + return; > > > + > > > + if (pa->header.length < sizeof(struct acpi_srat_rintc_affinity)) { > > > + pr_err("SRAT: Invalid SRAT header length: %d\n", > > > + pa->header.length); > > Can we merge these into single line? > > > > > + bad_srat(); > > > + return; > > > + } > > > + > > > + if (!(pa->flags & ACPI_SRAT_RINTC_ENABLED)) > > > + return; > > > + > > > + pxm = pa->proximity_domain; > > > + node = acpi_map_pxm_to_node(pxm); > > > + > > > + if (node == NUMA_NO_NODE) { > > > + pr_err("SRAT: Too many proximity domains %d\n", pxm); > > > + bad_srat(); > > > + return; > > > + } > > > + > > > + node_set(node, numa_nodes_parsed); > > > +} > > > diff --git a/arch/riscv/kernel/setup.c b/arch/riscv/kernel/setup.c > > > index 4f73c0ae44b2..a2cde65b69e9 100644 > > > --- a/arch/riscv/kernel/setup.c > > > +++ b/arch/riscv/kernel/setup.c > > > @@ -281,8 +281,10 @@ void __init setup_arch(char **cmdline_p) > > > setup_smp(); > > > #endif > > > > > > - if (!acpi_disabled) > > > + if (!acpi_disabled) { > > > acpi_init_rintc_map(); > > > + acpi_map_cpus_to_nodes(); > > Is it not possible to fill up both in single parsing of MADT? > > > > I think it's not possible to fill both in a single MADT parse since > the NUMA info is provided in a separate SRAT table. > Ahh, yes. My mistake. This looks good to me. Thanks, Sunil 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 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 smtp.lore.kernel.org (Postfix) with ESMTPS id 67B94C54798 for ; Tue, 5 Mar 2024 10:06:57 +0000 (UTC) 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:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=moplsAo0yyJOWCC3ZjsbpF2X/451apvVdWe2aJ4pEPY=; b=IdB5v2S8M6fslh rRAR+9uAmXvzxQtQgOBxzATDPxAvwE6+FZAh2fJt0k7NfYYJO7w6NDQm63x2P4TEVP3Sfuje4BOiT +wKSgRXwOc0HpwxOiRq6GDCs4/MVd/vxszqM1dF7QQw6LlAzQX9Jdgowfq9RNQOP1GFIqCLE0jfOp UG9E03dVp1hj3Zy3gf+LKA2bwhjy3gZJLjW1GjCkW/jrbD3XlI/mRk+MDZaEp3dnBjuPL4PGjJJSn ffsIQ1G260GcmbX0hXv2Hp+7d8YwEqM+Kj9czkCsTB3KPoTvsyeB9GwgxbBX/fjR1oW1RykBbrjmc Ep1W7jS1MTfmTRStx1cA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rhRhC-0000000CvGC-1lPq; Tue, 05 Mar 2024 10:06:50 +0000 Received: from mail-pf1-x432.google.com ([2607:f8b0:4864:20::432]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rhRh9-0000000CvDu-1frt for linux-riscv@lists.infradead.org; Tue, 05 Mar 2024 10:06:49 +0000 Received: by mail-pf1-x432.google.com with SMTP id d2e1a72fcca58-6da9c834646so4934947b3a.3 for ; Tue, 05 Mar 2024 02:06:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ventanamicro.com; s=google; t=1709633206; x=1710238006; darn=lists.infradead.org; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=RZOKpEbQlChz7zOomD/vIt5nW6uNiNml3QCNdvLbLzM=; b=c4b9GiazxDZHWt2G4g139NDTOweMLsddmYY8uNbDihR5muzsF+jgsVi8D8fLM5JAGM 9KMQQy6LonWm/9Lbd1YMLRUnqLOPoutJhSqqT9StNAnxw956228r8O8sT2KZRUEet8qU VuG7XgaUAfA3FVnEYYkkLBCTaV5xVqAiALwpPFX1FAnaU++AoIOVKyHFyptcqKxHR41I t4NRc8erfVwUvcXfOKvLz+Hz7jMUhJcyyIy05HbXHj2bat6Uh+l4xpjIrfAH0Qnp52pC N0owdeeB3cSSbTOV91Wsm+OfZ4GkDboDmnB/WN/Qzo/wt5SpP4JGzH1Jf8IW8IIfv+AW PZMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709633206; x=1710238006; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=RZOKpEbQlChz7zOomD/vIt5nW6uNiNml3QCNdvLbLzM=; b=Bdt9ssywOpqJvTtZpMU66nYsCf7WLAJEY6vgh8v8fTe9vDBsAhsvJngaGDx2edrTot 7qgo7hAJwiw0VE/c+QhN4Zw0OKIB8sZd63DVxXLw+oz25oX6wTWvEYYv8g2i5GHHf+RE 5l6L8jFqKZKAKrRPzCSfp18KO4EbFUClaK5gs5laxzbhh/HowRQLDLz6jw0deA0+uD6l 8g4mKSAZQ7DxWDhCOi6DY04/gRCAG/wKzl5lKquvekZKEsRxADJBtvHg33V5ILbPvXuZ 4PFFKWZ+yr/crqQVbLZo041+SGaXwCFt3TFzArzr7EBlnZKLXPkhmwp9QkGn36NPsd45 kNtQ== X-Forwarded-Encrypted: i=1; AJvYcCV39Z3X1wTvflqweyeQKs9axRq7OgjMORUVnPhZufp/Zzhmu9PYfGXdP/7rkLse78zy7xUWFX+MJeE2cEEBIPASclhdEvjCSQIv/dx+ubM6 X-Gm-Message-State: AOJu0YzDelhLctue6H64H2Nx0o9pd8teB3Lg06X/BPeXqcAlWQ2q3MKM L4SnDsHwvL6eTloDkS4kBQYQZr7EVZS2Le9gvlD7VI2wmBM2XjXyQ2M3WaaTaLY= X-Google-Smtp-Source: AGHT+IGjdBTC5zwV3+uOzO0FRsFfVU9zwOZKNxa40pniaFw+dSJeQQNn86lkd16UTmfTD8HYlgY+Ng== X-Received: by 2002:a05:6a20:1aa4:b0:1a1:51b3:b1c4 with SMTP id ci36-20020a056a201aa400b001a151b3b1c4mr1057558pzb.56.1709633206019; Tue, 05 Mar 2024 02:06:46 -0800 (PST) Received: from sunil-laptop ([106.51.184.12]) by smtp.gmail.com with ESMTPSA id s62-20020a625e41000000b006e612df4627sm3941333pfb.39.2024.03.05.02.06.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Mar 2024 02:06:45 -0800 (PST) Date: Tue, 5 Mar 2024 15:36:32 +0530 From: Sunil V L To: Haibo Xu Cc: Haibo Xu , ajones@ventanamicro.com, Paul Walmsley , Palmer Dabbelt , Albert Ou , "Rafael J. Wysocki" , Len Brown , Robert Moore , Conor Dooley , Guo Ren , =?utf-8?B?QmrDtnJuIFTDtnBlbA==?= , Alexandre Ghiti , Greentime Hu , Baoquan He , =?utf-8?B?Q2zDqW1lbnQgTMOpZ2Vy?= , Sami Tolvanen , Jisheng Zhang , Greg Kroah-Hartman , Arnd Bergmann , Chen Jiahao , James Morse , Evan Green , Samuel Holland , Anup Patel , Ard Biesheuvel , Tony Luck , Yuntao Wang , Dan Williams , Alison Schofield , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org, acpica-devel@lists.linux.dev Subject: Re: [PATCH 3/4] ACPI: RISCV: Add NUMA support based on SRAT and SLIT Message-ID: References: <799dcc07f41c2357328e9778fbbded7818af34a7.1706603678.git.haibo1.xu@intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240305_020647_501309_01DA63EB X-CRM114-Status: GOOD ( 43.32 ) X-BeenThere: linux-riscv@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-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org T24gVHVlLCBNYXIgMDUsIDIwMjQgYXQgMDU6NTQ6MDNQTSArMDgwMCwgSGFpYm8gWHUgd3JvdGU6 Cj4gT24gVHVlLCBNYXIgNSwgMjAyNCBhdCAxOjI04oCvUE0gU3VuaWwgViBMIDxzdW5pbHZsQHZl bnRhbmFtaWNyby5jb20+IHdyb3RlOgo+ID4KPiA+IE9uIFdlZCwgSmFuIDMxLCAyMDI0IGF0IDEw OjMyOjAwQU0gKzA4MDAsIEhhaWJvIFh1IHdyb3RlOgo+ID4gPiBBZGQgYWNwaV9udW1hLmMgZmls ZSB0byBlbmFibGUgcGFyc2UgTlVNQSBpbmZvcm1hdGlvbiBmcm9tCj4gPiA+IEFDUEkgU1JBVCBh bmQgU0xJVCB0YWJsZXMuIFNSQVQgdGFibGUgcHJvdmlkZSBDUFVzKEhhcnQpIGFuZAo+ID4gPiBt ZW1vcnkgbm9kZXMgdG8gcHJveGltaXR5IGRvbWFpbiBtYXBwaW5nLCB3aGlsZSBTTElUIHRhYmxl Cj4gPiA+IHByb3ZpZGUgdGhlIGRpc3RhbmNlIG1ldHJpY3MgYmV0d2VlbiBwcm94aW1pdHkgZG9t YWlucy4KPiA+ID4KPiA+ID4gU2lnbmVkLW9mZi1ieTogSGFpYm8gWHUgPGhhaWJvMS54dUBpbnRl bC5jb20+Cj4gPiA+IC0tLQo+ID4gPiAgYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9hY3BpLmggfCAg MTUgKysrLQo+ID4gPiAgYXJjaC9yaXNjdi9rZXJuZWwvTWFrZWZpbGUgICAgfCAgIDEgKwo+ID4g PiAgYXJjaC9yaXNjdi9rZXJuZWwvYWNwaS5jICAgICAgfCAgIDUgLS0KPiA+ID4gIGFyY2gvcmlz Y3Yva2VybmVsL2FjcGlfbnVtYS5jIHwgMTMzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysKPiA+ID4gIGFyY2gvcmlzY3Yva2VybmVsL3NldHVwLmMgICAgIHwgICA0ICstCj4gPiA+ ICBhcmNoL3Jpc2N2L2tlcm5lbC9zbXBib290LmMgICB8ICAgMiAtCj4gPiA+ICBkcml2ZXJzL2Fj cGkvbnVtYS9zcmF0LmMgICAgICB8ICAgMyArLQo+ID4gPiAgaW5jbHVkZS9saW51eC9hY3BpLmgg ICAgICAgICAgfCAgIDQgKwo+ID4gPiAgOCBmaWxlcyBjaGFuZ2VkLCAxNTYgaW5zZXJ0aW9ucygr KSwgMTEgZGVsZXRpb25zKC0pCj4gPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgYXJjaC9yaXNjdi9r ZXJuZWwvYWNwaV9udW1hLmMKPiA+ID4KPiA+ID4gZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5j bHVkZS9hc20vYWNwaS5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9hY3BpLmgKPiA+ID4gaW5k ZXggN2RhZDBjZjlkNzAxLi5lMGExZjg0NDA0ZjMgMTAwNjQ0Cj4gPiA+IC0tLSBhL2FyY2gvcmlz Y3YvaW5jbHVkZS9hc20vYWNwaS5oCj4gPiA+ICsrKyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20v YWNwaS5oCj4gPiA+IEBAIC02MSwxMSArNjEsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIGFyY2hf Zml4X3BoeXNfcGFja2FnZV9pZChpbnQgbnVtLCB1MzIgc2xvdCkgeyB9Cj4gPiA+Cj4gPiA+ICB2 b2lkIGFjcGlfaW5pdF9yaW50Y19tYXAodm9pZCk7Cj4gPiA+ICBzdHJ1Y3QgYWNwaV9tYWR0X3Jp bnRjICphY3BpX2NwdV9nZXRfbWFkdF9yaW50YyhpbnQgY3B1KTsKPiA+ID4gLXUzMiBnZXRfYWNw aV9pZF9mb3JfY3B1KGludCBjcHUpOwo+ID4gPiArc3RhdGljIGlubGluZSB1MzIgZ2V0X2FjcGlf aWRfZm9yX2NwdShpbnQgY3B1KQo+ID4gPiArewo+ID4gPiArICAgICByZXR1cm4gYWNwaV9jcHVf Z2V0X21hZHRfcmludGMoY3B1KS0+dWlkOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICBpbnQgYWNw aV9nZXRfcmlzY3ZfaXNhKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqdGFibGUsCj4gPiA+ICAg ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjcHUsIGNvbnN0IGNoYXIgKippc2EpOwo+ ID4gPgo+ID4gPiAtc3RhdGljIGlubGluZSBpbnQgYWNwaV9udW1hX2dldF9uaWQodW5zaWduZWQg aW50IGNwdSkgeyByZXR1cm4gTlVNQV9OT19OT0RFOyB9Cj4gPiA+ICB2b2lkIGFjcGlfZ2V0X2Ni b19ibG9ja19zaXplKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqdGFibGUsIHUzMiAqY2JvbV9z aXplLAo+ID4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgKmNib3pfc2l6ZSwgdTMy ICpjYm9wX3NpemUpOwo+ID4gPiAgI2Vsc2UKPiA+ID4gQEAgLTg3LDQgKzkwLDEyIEBAIHN0YXRp YyBpbmxpbmUgdm9pZCBhY3BpX2dldF9jYm9fYmxvY2tfc2l6ZShzdHJ1Y3QgYWNwaV90YWJsZV9o ZWFkZXIgKnRhYmxlLAo+ID4gPgo+ID4gPiAgI2VuZGlmIC8qIENPTkZJR19BQ1BJICovCj4gPiA+ Cj4gPiA+ICsjaWZkZWYgQ09ORklHX0FDUElfTlVNQQo+ID4gPiAraW50IGFjcGlfbnVtYV9nZXRf bmlkKHVuc2lnbmVkIGludCBjcHUpOwo+ID4gPiArdm9pZCBhY3BpX21hcF9jcHVzX3RvX25vZGVz KHZvaWQpOwo+ID4gPiArI2Vsc2UKPiA+ID4gK3N0YXRpYyBpbmxpbmUgaW50IGFjcGlfbnVtYV9n ZXRfbmlkKHVuc2lnbmVkIGludCBjcHUpIHsgcmV0dXJuIE5VTUFfTk9fTk9ERTsgfQo+ID4gPiAr c3RhdGljIGlubGluZSB2b2lkIGFjcGlfbWFwX2NwdXNfdG9fbm9kZXModm9pZCkgeyB9Cj4gPiA+ ICsjZW5kaWYgLyogQ09ORklHX0FDUElfTlVNQSAqLwo+ID4gPiArCj4gPiA+ICAjZW5kaWYgLypf QVNNX0FDUElfSCovCj4gPiA+IGRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2tlcm5lbC9NYWtlZmls ZSBiL2FyY2gvcmlzY3Yva2VybmVsL01ha2VmaWxlCj4gPiA+IGluZGV4IGY3MTkxMDcxODA1My4u NWQzZTljZjg5Yjc2IDEwMDY0NAo+ID4gPiAtLS0gYS9hcmNoL3Jpc2N2L2tlcm5lbC9NYWtlZmls ZQo+ID4gPiArKysgYi9hcmNoL3Jpc2N2L2tlcm5lbC9NYWtlZmlsZQo+ID4gPiBAQCAtMTA1LDMg KzEwNSw0IEBAIG9iai0kKENPTkZJR19DT01QQVQpICAgICAgICAgICAgICArPSBjb21wYXRfdmRz by8KPiA+ID4KPiA+ID4gIG9iai0kKENPTkZJR182NEJJVCkgICAgICAgICAgKz0gcGkvCj4gPiA+ ICBvYmotJChDT05GSUdfQUNQSSkgICAgICAgICAgICs9IGFjcGkubwo+ID4gPiArb2JqLSQoQ09O RklHX0FDUElfTlVNQSkgICAgICArPSBhY3BpX251bWEubwo+ID4gPiBkaWZmIC0tZ2l0IGEvYXJj aC9yaXNjdi9rZXJuZWwvYWNwaS5jIGIvYXJjaC9yaXNjdi9rZXJuZWwvYWNwaS5jCj4gPiA+IGlu ZGV4IGU2MTllZGM4YjBjYy4uMDQwYmRiZmVhMmI0IDEwMDY0NAo+ID4gPiAtLS0gYS9hcmNoL3Jp c2N2L2tlcm5lbC9hY3BpLmMKPiA+ID4gKysrIGIvYXJjaC9yaXNjdi9rZXJuZWwvYWNwaS5jCj4g PiA+IEBAIC0xOTEsMTEgKzE5MSw2IEBAIHN0cnVjdCBhY3BpX21hZHRfcmludGMgKmFjcGlfY3B1 X2dldF9tYWR0X3JpbnRjKGludCBjcHUpCj4gPiA+ICAgICAgIHJldHVybiAmY3B1X21hZHRfcmlu dGNbY3B1XTsKPiA+ID4gIH0KPiA+ID4KPiA+ID4gLXUzMiBnZXRfYWNwaV9pZF9mb3JfY3B1KGlu dCBjcHUpCj4gPiA+IC17Cj4gPiA+IC0gICAgIHJldHVybiBhY3BpX2NwdV9nZXRfbWFkdF9yaW50 YyhjcHUpLT51aWQ7Cj4gPiA+IC19Cj4gPiA+IC0KPiA+ID4gIC8qCj4gPiA+ICAgKiBfX2FjcGlf bWFwX3RhYmxlKCkgd2lsbCBiZSBjYWxsZWQgYmVmb3JlIHBhZ2luZ19pbml0KCksIHNvIGVhcmx5 X2lvcmVtYXAoKQo+ID4gPiAgICogb3IgZWFybHlfbWVtcmVtYXAoKSBzaG91bGQgYmUgY2FsbGVk IGhlcmUgdG8gZm9yIEFDUEkgdGFibGUgbWFwcGluZy4KPiA+ID4gZGlmZiAtLWdpdCBhL2FyY2gv cmlzY3Yva2VybmVsL2FjcGlfbnVtYS5jIGIvYXJjaC9yaXNjdi9rZXJuZWwvYWNwaV9udW1hLmMK PiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi40OTM2 NDJhNjE0NTcKPiA+ID4gLS0tIC9kZXYvbnVsbAo+ID4gPiArKysgYi9hcmNoL3Jpc2N2L2tlcm5l bC9hY3BpX251bWEuYwo+ID4gPiBAQCAtMCwwICsxLDEzMyBAQAo+ID4gPiArLy8gU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPiA+ID4gKy8qCj4gPiA+ICsgKiBBQ1BJIDYuNiBiYXNl ZCBOVU1BIHNldHVwIGZvciBSSVNDVgo+ID4gPiArICogTG90cyBvZiBjb2RlIHdhcyBib3Jyb3dl ZCBmcm9tIGFyY2gvYXJtNjQva2VybmVsL2FjcGlfbnVtYS5jCj4gPiA+ICsgKgo+ID4gPiArICog Q29weXJpZ2h0IDIwMDQgQW5kaSBLbGVlbiwgU3VTRSBMYWJzLgo+ID4gPiArICogQ29weXJpZ2h0 IChDKSAyMDEzLTIwMTYsIExpbmFybyBMdGQuCj4gPiA+ICsgKiAgICAgICAgICAgQXV0aG9yOiBI YW5qdW4gR3VvIDxoYW5qdW4uZ3VvQGxpbmFyby5vcmc+Cj4gPiA+ICsgKiBDb3B5cmlnaHQgKEMp IDIwMjQgSW50ZWwgQ29ycG9yYXRpb24uCj4gPiA+ICsgKgo+ID4gPiArICogUmVhZHMgdGhlIEFD UEkgU1JBVCB0YWJsZSB0byBmaWd1cmUgb3V0IHdoYXQgbWVtb3J5IGJlbG9uZ3MgdG8gd2hpY2gg Q1BVcy4KPiA+ID4gKyAqCj4gPiA+ICsgKiBDYWxsZWQgZnJvbSBhY3BpX251bWFfaW5pdCB3aGls ZSByZWFkaW5nIHRoZSBTUkFUIGFuZCBTTElUIHRhYmxlcy4KPiA+ID4gKyAqIEFzc3VtZXMgYWxs IG1lbW9yeSByZWdpb25zIGJlbG9uZ2luZyB0byBhIHNpbmdsZSBwcm94aW1pdHkgZG9tYWluCj4g PiA+ICsgKiBhcmUgaW4gb25lIGNodW5rLiBIb2xlcyBiZXR3ZWVuIHRoZW0gd2lsbCBiZSBpbmNs dWRlZCBpbiB0aGUgbm9kZS4KPiA+ID4gKyAqLwo+ID4gPiArCj4gPiA+ICsjZGVmaW5lIHByX2Zt dChmbXQpICJBQ1BJOiBOVU1BOiAiIGZtdAo+ID4gPiArCj4gPiA+ICsjaW5jbHVkZSA8bGludXgv YWNwaS5oPgo+ID4gPiArI2luY2x1ZGUgPGxpbnV4L2JpdG1hcC5oPgo+ID4gPiArI2luY2x1ZGUg PGxpbnV4L2tlcm5lbC5oPgo+ID4gPiArI2luY2x1ZGUgPGxpbnV4L21tLmg+Cj4gPiA+ICsjaW5j bHVkZSA8bGludXgvbWVtYmxvY2suaD4KPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9tbXpvbmUuaD4K PiA+ID4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiA+ID4gKyNpbmNsdWRlIDxsaW51eC90 b3BvbG9neS5oPgo+ID4gPiArCj4gPiA+ICsjaW5jbHVkZSA8YXNtL251bWEuaD4KPiA+ID4gKwo+ ID4gPiArc3RhdGljIGludCBhY3BpX2Vhcmx5X25vZGVfbWFwW05SX0NQVVNdIF9faW5pdGRhdGEg PSB7IE5VTUFfTk9fTk9ERSB9Owo+ID4gPiArCj4gPiA+ICtpbnQgX19pbml0IGFjcGlfbnVtYV9n ZXRfbmlkKHVuc2lnbmVkIGludCBjcHUpCj4gPiA+ICt7Cj4gPiA+ICsgICAgIHJldHVybiBhY3Bp X2Vhcmx5X25vZGVfbWFwW2NwdV07Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBpbmxp bmUgaW50IGdldF9jcHVfZm9yX2FjcGlfaWQodTMyIHVpZCkKPiA+ID4gK3sKPiA+ID4gKyAgICAg aW50IGNwdTsKPiA+ID4gKwo+ID4gPiArICAgICBmb3IgKGNwdSA9IDA7IGNwdSA8IG5yX2NwdV9p ZHM7IGNwdSsrKQo+ID4gPiArICAgICAgICAgICAgIGlmICh1aWQgPT0gZ2V0X2FjcGlfaWRfZm9y X2NwdShjcHUpKQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNwdTsKPiA+ID4g Kwo+ID4gPiArICAgICByZXR1cm4gLUVJTlZBTDsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3Rh dGljIGludCBfX2luaXQgYWNwaV9wYXJzZV9yaW50Y19weG0odW5pb24gYWNwaV9zdWJ0YWJsZV9o ZWFkZXJzICpoZWFkZXIsCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHVuc2lnbmVkIGxvbmcgZW5kKQo+ID4KPiA+IFBsZWFzZSBjaGVjayBhbGlnbm1lbnQu Cj4gPgo+IAo+IFN1cmUuCj4gCj4gPiA+ICt7Cj4gPiA+ICsgICAgIHN0cnVjdCBhY3BpX3NyYXRf cmludGNfYWZmaW5pdHkgKnBhOwo+ID4gPiArICAgICBpbnQgY3B1LCBweG0sIG5vZGU7Cj4gPiA+ ICsKPiA+ID4gKyAgICAgaWYgKHNyYXRfZGlzYWJsZWQoKSkKPiA+ID4gKyAgICAgICAgICAgICBy ZXR1cm4gLUVJTlZBTDsKPiA+ID4gKwo+ID4gPiArICAgICBwYSA9IChzdHJ1Y3QgYWNwaV9zcmF0 X3JpbnRjX2FmZmluaXR5ICopaGVhZGVyOwo+ID4gPiArICAgICBpZiAoIXBhKQo+ID4gPiArICAg ICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+ID4gPiArCj4gPiA+ICsgICAgIGlmICghKHBhLT5m bGFncyAmIEFDUElfU1JBVF9SSU5UQ19FTkFCTEVEKSkKPiA+ID4gKyAgICAgICAgICAgICByZXR1 cm4gMDsKPiA+ID4gKwo+ID4gPiArICAgICBweG0gPSBwYS0+cHJveGltaXR5X2RvbWFpbjsKPiA+ ID4gKyAgICAgbm9kZSA9IHB4bV90b19ub2RlKHB4bSk7Cj4gPiA+ICsKPiA+ID4gKyAgICAgLyoK PiA+ID4gKyAgICAgICogSWYgd2UgY2FuJ3QgbWFwIHRoZSBVSUQgdG8gYSBsb2dpY2FsIGNwdSB0 aGlzCj4gPiA+ICsgICAgICAqIG1lYW5zIHRoYXQgdGhlIFVJRCBpcyBub3QgcGFydCBvZiBwb3Nz aWJsZSBjcHVzCj4gPiA+ICsgICAgICAqIHNvIHdlIGRvIG5vdCBuZWVkIGEgTlVNQSBtYXBwaW5n IGZvciBpdCwgc2tpcAo+ID4gPiArICAgICAgKiB0aGUgU1JBVCBlbnRyeSBhbmQga2VlcCBwYXJz aW5nLgo+ID4gPiArICAgICAgKi8KPiA+ID4gKyAgICAgY3B1ID0gZ2V0X2NwdV9mb3JfYWNwaV9p ZChwYS0+YWNwaV9wcm9jZXNzb3JfdWlkKTsKPiA+ID4gKyAgICAgaWYgKGNwdSA8IDApCj4gPiA+ ICsgICAgICAgICAgICAgcmV0dXJuIDA7Cj4gPiA+ICsKPiA+ID4gKyAgICAgYWNwaV9lYXJseV9u b2RlX21hcFtjcHVdID0gbm9kZTsKPiA+ID4gKyAgICAgcHJfaW5mbygiU1JBVDogUFhNICVkIC0+ IEhBUlRJRCAweCVseCAtPiBOb2RlICVkXG4iLCBweG0sCj4gPiA+ICsgICAgICAgICAgICAgY3B1 aWRfdG9faGFydGlkX21hcChjcHUpLCBub2RlKTsKPiA+ID4gKwo+ID4gPiArICAgICByZXR1cm4g MDsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArdm9pZCBfX2luaXQgYWNwaV9tYXBfY3B1c190b19u b2Rlcyh2b2lkKQo+ID4gPiArewo+ID4gPiArICAgICBpbnQgaTsKPiA+ID4gKwo+ID4gPiArICAg ICAvKgo+ID4gPiArICAgICAgKiBJbiBBQ1BJLCBTTVAgYW5kIENQVSBOVU1BIGluZm9ybWF0aW9u IGlzIHByb3ZpZGVkIGluIHNlcGFyYXRlCj4gPiA+ICsgICAgICAqIHN0YXRpYyB0YWJsZXMsIG5h bWVseSB0aGUgTUFEVCBhbmQgdGhlIFNSQVQuCj4gPiA+ICsgICAgICAqCj4gPiA+ICsgICAgICAq IFRodXMsIGl0IGlzIHNpbXBsZXIgdG8gZmlyc3QgY3JlYXRlIHRoZSBjcHUgbG9naWNhbCBtYXAg dGhyb3VnaAo+ID4gPiArICAgICAgKiBhbiBNQURUIHdhbGsgYW5kIHRoZW4gbWFwIHRoZSBsb2dp Y2FsIGNwdXMgdG8gdGhlaXIgbm9kZSBpZHMKPiA+ID4gKyAgICAgICogYXMgc2VwYXJhdGUgc3Rl cHMuCj4gPiA+ICsgICAgICAqLwo+ID4gPiArICAgICBhY3BpX3RhYmxlX3BhcnNlX2VudHJpZXMo QUNQSV9TSUdfU1JBVCwgc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX3NyYXQpLAo+ID4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ1BJX1NSQVRfVFlQRV9SSU5U Q19BRkZJTklUWSwKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYWNwaV9wYXJzZV9yaW50Y19weG0sIDApOwo+ID4gPiArCj4gPiBBbGlnbm1lbnQgaGVyZSBh cyB3ZWxsLgo+ID4KPiAKPiBTdXJlLgo+IAo+ID4gPiArICAgICBmb3IgKGkgPSAwOyBpIDwgbnJf Y3B1X2lkczsgaSsrKQo+ID4gPiArICAgICAgICAgICAgIGVhcmx5X21hcF9jcHVfdG9fbm9kZShp LCBhY3BpX251bWFfZ2V0X25pZChpKSk7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gKy8qIENhbGxi YWNrIGZvciBQcm94aW1pdHkgRG9tYWluIC0+IGxvZ2ljYWwgbm9kZSBJRCBtYXBwaW5nICovCj4g PiA+ICt2b2lkIF9faW5pdCBhY3BpX251bWFfcmludGNfYWZmaW5pdHlfaW5pdChzdHJ1Y3QgYWNw aV9zcmF0X3JpbnRjX2FmZmluaXR5ICpwYSkKPiA+ID4gK3sKPiA+ID4gKyAgICAgaW50IHB4bSwg bm9kZTsKPiA+ID4gKwo+ID4gPiArICAgICBpZiAoc3JhdF9kaXNhYmxlZCgpKQo+ID4gPiArICAg ICAgICAgICAgIHJldHVybjsKPiA+ID4gKwo+ID4gPiArICAgICBpZiAocGEtPmhlYWRlci5sZW5n dGggPCBzaXplb2Yoc3RydWN0IGFjcGlfc3JhdF9yaW50Y19hZmZpbml0eSkpIHsKPiA+ID4gKyAg ICAgICAgICAgICBwcl9lcnIoIlNSQVQ6IEludmFsaWQgU1JBVCBoZWFkZXIgbGVuZ3RoOiAlZFxu IiwKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgIHBhLT5oZWFkZXIubGVuZ3RoKTsKPiA+IENh biB3ZSBtZXJnZSB0aGVzZSBpbnRvIHNpbmdsZSBsaW5lPwo+ID4KPiA+ID4gKyAgICAgICAgICAg ICBiYWRfc3JhdCgpOwo+ID4gPiArICAgICAgICAgICAgIHJldHVybjsKPiA+ID4gKyAgICAgfQo+ ID4gPiArCj4gPiA+ICsgICAgIGlmICghKHBhLT5mbGFncyAmIEFDUElfU1JBVF9SSU5UQ19FTkFC TEVEKSkKPiA+ID4gKyAgICAgICAgICAgICByZXR1cm47Cj4gPiA+ICsKPiA+ID4gKyAgICAgcHht ID0gcGEtPnByb3hpbWl0eV9kb21haW47Cj4gPiA+ICsgICAgIG5vZGUgPSBhY3BpX21hcF9weG1f dG9fbm9kZShweG0pOwo+ID4gPiArCj4gPiA+ICsgICAgIGlmIChub2RlID09IE5VTUFfTk9fTk9E RSkgewo+ID4gPiArICAgICAgICAgICAgIHByX2VycigiU1JBVDogVG9vIG1hbnkgcHJveGltaXR5 IGRvbWFpbnMgJWRcbiIsIHB4bSk7Cj4gPiA+ICsgICAgICAgICAgICAgYmFkX3NyYXQoKTsKPiA+ ID4gKyAgICAgICAgICAgICByZXR1cm47Cj4gPiA+ICsgICAgIH0KPiA+ID4gKwo+ID4gPiArICAg ICBub2RlX3NldChub2RlLCBudW1hX25vZGVzX3BhcnNlZCk7Cj4gPiA+ICt9Cj4gPiA+IGRpZmYg LS1naXQgYS9hcmNoL3Jpc2N2L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9yaXNjdi9rZXJuZWwvc2V0 dXAuYwo+ID4gPiBpbmRleCA0ZjczYzBhZTQ0YjIuLmEyY2RlNjViNjllOSAxMDA2NDQKPiA+ID4g LS0tIGEvYXJjaC9yaXNjdi9rZXJuZWwvc2V0dXAuYwo+ID4gPiArKysgYi9hcmNoL3Jpc2N2L2tl cm5lbC9zZXR1cC5jCj4gPiA+IEBAIC0yODEsOCArMjgxLDEwIEBAIHZvaWQgX19pbml0IHNldHVw X2FyY2goY2hhciAqKmNtZGxpbmVfcCkKPiA+ID4gICAgICAgc2V0dXBfc21wKCk7Cj4gPiA+ICAj ZW5kaWYKPiA+ID4KPiA+ID4gLSAgICAgaWYgKCFhY3BpX2Rpc2FibGVkKQo+ID4gPiArICAgICBp ZiAoIWFjcGlfZGlzYWJsZWQpIHsKPiA+ID4gICAgICAgICAgICAgICBhY3BpX2luaXRfcmludGNf bWFwKCk7Cj4gPiA+ICsgICAgICAgICAgICAgYWNwaV9tYXBfY3B1c190b19ub2RlcygpOwo+ID4g SXMgaXQgbm90IHBvc3NpYmxlIHRvIGZpbGwgdXAgYm90aCBpbiBzaW5nbGUgcGFyc2luZyBvZiBN QURUPwo+ID4KPiAKPiBJIHRoaW5rIGl0J3Mgbm90IHBvc3NpYmxlIHRvIGZpbGwgYm90aCBpbiBh IHNpbmdsZSBNQURUIHBhcnNlIHNpbmNlCj4gdGhlIE5VTUEgaW5mbyBpcyBwcm92aWRlZCBpbiBh IHNlcGFyYXRlIFNSQVQgdGFibGUuCj4gCkFoaCwgeWVzLiBNeSBtaXN0YWtlLiBUaGlzIGxvb2tz IGdvb2QgdG8gbWUuCgpUaGFua3MsClN1bmlsCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpsaW51eC1yaXNjdiBtYWlsaW5nIGxpc3QKbGludXgtcmlzY3ZA bGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2xpbnV4LXJpc2N2Cg==