From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andy Shevchenko Subject: [PATCH v8 5/7] PCI: Allow pci_bus_for_each_resource() to take less arguments Date: Thu, 30 Mar 2023 19:24:32 +0300 Message-ID: <20230330162434.35055-6-andriy.shevchenko@linux.intel.com> References: <20230330162434.35055-1-andriy.shevchenko@linux.intel.com> Mime-Version: 1.0 Content-Transfer-Encoding: 8bit Return-path: DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1680193715; x=1711729715; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=VJ1PyQpGGPwbQf2lA7TScIDKb/DRRzKOJStqePaN450=; b=QDVgFCAh3EJ+pMB+BYsqmtGjC+FerPaWqyncraQAYxNWFskfaSxPDUXj je2x3xuJdOU270FN5YiA5oO3su9qC/10tN+8NJNDOsKFxenHrBEraO4iR CEreuwh8ry30/LFjLw+85DNcICTTBwd9GrpiGdtxhMFbZmbd33t6AvzQz yHclRxWBUe/KrePyfSdVRAAoO4jJMk8ZtmqvSoAzCFJKMGc/+ccIDKgRs YVqMRzSr6+FneoyA4H+VH0cdZeJdR5jLoMkpeImku1lpN9sR+2Ou9wcXD NPx2OUUVfchZ2SADd+sGLTXOkJc1z0/ilPGByhh8iTn92yze+ee5Yk3a7 w==; In-Reply-To: <20230330162434.35055-1-andriy.shevchenko@linux.intel.com> List-ID: Content-Type: text/plain; charset="utf-8" To: =?UTF-8?q?Micka=C3=ABl=20Sala=C3=BCn?= , Andy Shevchenko , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , Mika Westerberg , Michael Ellerman , Randy Dunlap , Arnd Bergmann , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Niklas Schnelle , Bjorn Helgaas , "Rafael J. Wysocki" , =?UTF-8?q?Pali=20Roh=C3=A1r?= , "Maciej W. Rozycki" , Juergen Gross , Dominik Brodowski , linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-arm-kernel@list Cc: Miguel Ojeda , Richard Henderson , Ivan Kokshaysky , Matt Turner , Russell King , Andrew Lunn , Sebastian Hesselbarth , Gregory Clement , Thomas Bogendoerfer , Nicholas Piggin , Christophe Leroy , Anatolij Gustschin , Yoshinori Sato , Rich Felker , John Paul Adrian Glaubitz , "David S. Miller" , Bjorn Helgaas , Stefano Stabellini Refactor pci_bus_for_each_resource() in the same way as it's done in pci_dev_for_each_resource() case. This will allow to hide iterator inside the loop, where it's not used otherwise. No functional changes intended. Signed-off-by: Andy Shevchenko Reviewed-by: Krzysztof Wilczyński Reviewed-by: Philippe Mathieu-Daudé --- drivers/pci/bus.c | 7 +++---- drivers/pci/hotplug/shpchp_sysfs.c | 8 ++++---- drivers/pci/pci.c | 3 +-- drivers/pci/probe.c | 2 +- drivers/pci/setup-bus.c | 10 ++++------ include/linux/pci.h | 24 +++++++++++++++++++----- 6 files changed, 32 insertions(+), 22 deletions(-) diff --git a/drivers/pci/bus.c b/drivers/pci/bus.c index 549c4bd5caec..5bc81cc0a2de 100644 --- a/drivers/pci/bus.c +++ b/drivers/pci/bus.c @@ -182,13 +182,13 @@ static int pci_bus_alloc_from_region(struct pci_bus *bus, struct resource *res, void *alignf_data, struct pci_bus_region *region) { - int i, ret; struct resource *r, avail; resource_size_t max; + int ret; type_mask |= IORESOURCE_TYPE_BITS; - pci_bus_for_each_resource(bus, r, i) { + pci_bus_for_each_resource(bus, r) { resource_size_t min_used = min; if (!r) @@ -289,9 +289,8 @@ bool pci_bus_clip_resource(struct pci_dev *dev, int idx) struct resource *res = &dev->resource[idx]; struct resource orig_res = *res; struct resource *r; - int i; - pci_bus_for_each_resource(bus, r, i) { + pci_bus_for_each_resource(bus, r) { resource_size_t start, end; if (!r) diff --git a/drivers/pci/hotplug/shpchp_sysfs.c b/drivers/pci/hotplug/shpchp_sysfs.c index 64beed7a26be..01d47a42da04 100644 --- a/drivers/pci/hotplug/shpchp_sysfs.c +++ b/drivers/pci/hotplug/shpchp_sysfs.c @@ -24,16 +24,16 @@ static ssize_t show_ctrl(struct device *dev, struct device_attribute *attr, char *buf) { struct pci_dev *pdev; - int index, busnr; struct resource *res; struct pci_bus *bus; size_t len = 0; + int busnr; pdev = to_pci_dev(dev); bus = pdev->subordinate; len += sysfs_emit_at(buf, len, "Free resources: memory\n"); - pci_bus_for_each_resource(bus, res, index) { + pci_bus_for_each_resource(bus, res) { if (res && (res->flags & IORESOURCE_MEM) && !(res->flags & IORESOURCE_PREFETCH)) { len += sysfs_emit_at(buf, len, @@ -43,7 +43,7 @@ static ssize_t show_ctrl(struct device *dev, struct device_attribute *attr, char } } len += sysfs_emit_at(buf, len, "Free resources: prefetchable memory\n"); - pci_bus_for_each_resource(bus, res, index) { + pci_bus_for_each_resource(bus, res) { if (res && (res->flags & IORESOURCE_MEM) && (res->flags & IORESOURCE_PREFETCH)) { len += sysfs_emit_at(buf, len, @@ -53,7 +53,7 @@ static ssize_t show_ctrl(struct device *dev, struct device_attribute *attr, char } } len += sysfs_emit_at(buf, len, "Free resources: IO\n"); - pci_bus_for_each_resource(bus, res, index) { + pci_bus_for_each_resource(bus, res) { if (res && (res->flags & IORESOURCE_IO)) { len += sysfs_emit_at(buf, len, "start = %8.8llx, length = %8.8llx\n", diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 45c3bb039f21..585bb3988ddf 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -779,9 +779,8 @@ struct resource *pci_find_parent_resource(const struct pci_dev *dev, { const struct pci_bus *bus = dev->bus; struct resource *r; - int i; - pci_bus_for_each_resource(bus, r, i) { + pci_bus_for_each_resource(bus, r) { if (!r) continue; if (resource_contains(r, res)) { diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index a3f68b6ba6ac..f8191750f6b7 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c @@ -533,7 +533,7 @@ void pci_read_bridge_bases(struct pci_bus *child) pci_read_bridge_mmio_pref(child); if (dev->transparent) { - pci_bus_for_each_resource(child->parent, res, i) { + pci_bus_for_each_resource(child->parent, res) { if (res && res->flags) { pci_bus_add_resource(child, res, PCI_SUBTRACTIVE_DECODE); diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c index 027b985dd1ee..fdeb121e9175 100644 --- a/drivers/pci/setup-bus.c +++ b/drivers/pci/setup-bus.c @@ -770,9 +770,8 @@ static struct resource *find_bus_resource_of_type(struct pci_bus *bus, unsigned long type) { struct resource *r, *r_assigned = NULL; - int i; - pci_bus_for_each_resource(bus, r, i) { + pci_bus_for_each_resource(bus, r) { if (r == &ioport_resource || r == &iomem_resource) continue; if (r && (r->flags & type_mask) == type && !r->parent) @@ -1204,7 +1203,7 @@ void __pci_bus_size_bridges(struct pci_bus *bus, struct list_head *realloc_head) additional_mmio_pref_size = 0; struct resource *pref; struct pci_host_bridge *host; - int hdr_type, i, ret; + int hdr_type, ret; list_for_each_entry(dev, &bus->devices, bus_list) { struct pci_bus *b = dev->subordinate; @@ -1228,7 +1227,7 @@ void __pci_bus_size_bridges(struct pci_bus *bus, struct list_head *realloc_head) host = to_pci_host_bridge(bus->bridge); if (!host->size_windows) return; - pci_bus_for_each_resource(bus, pref, i) + pci_bus_for_each_resource(bus, pref) if (pref && (pref->flags & IORESOURCE_PREFETCH)) break; hdr_type = -1; /* Intentionally invalid - not a PCI device. */ @@ -1333,12 +1332,11 @@ EXPORT_SYMBOL(pci_bus_size_bridges); static void assign_fixed_resource_on_bus(struct pci_bus *b, struct resource *r) { - int i; struct resource *parent_r; unsigned long mask = IORESOURCE_IO | IORESOURCE_MEM | IORESOURCE_PREFETCH; - pci_bus_for_each_resource(b, parent_r, i) { + pci_bus_for_each_resource(b, parent_r) { if (!parent_r) continue; diff --git a/include/linux/pci.h b/include/linux/pci.h index e3b3af606280..56670d016cac 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -1446,11 +1446,21 @@ int devm_request_pci_bus_resources(struct device *dev, /* Temporary until new and working PCI SBR API in place */ int pci_bridge_secondary_bus_reset(struct pci_dev *dev); +#define __pci_bus_for_each_res0(bus, res, ...) \ + for (unsigned int __b = 0; \ + (res = pci_bus_resource_n(bus, __b)) || __b < PCI_BRIDGE_RESOURCE_NUM; \ + __b++) + +#define __pci_bus_for_each_res1(bus, res, __b) \ + for (__b = 0; \ + (res = pci_bus_resource_n(bus, __b)) || __b < PCI_BRIDGE_RESOURCE_NUM; \ + __b++) + /** * pci_bus_for_each_resource - iterate over PCI bus resources * @bus: the PCI bus * @res: a varible to keep a pointer to the current resource - * @i: a variable to keep the index of the current resource + * @...: an optional variable to keep the index of the current resource * * Iterate over PCI bus resources. The first part is to go over PCI bus * resource array, which has at most the %PCI_BRIDGE_RESOURCE_NUM entries. @@ -1463,13 +1473,17 @@ int pci_bridge_secondary_bus_reset(struct pci_dev *dev); * struct resource *res; * unsigned int i; * + * // With an additional index variable * pci_bus_for_each_resource(bus, res, i) * pr_info("PCI bus resource[%u]: %pR\n", i, res); + * + * // Without index + * pci_bus_for_each_resource(bus, res) + * _do_something_(res); */ -#define pci_bus_for_each_resource(bus, res, i) \ - for (i = 0; \ - (res = pci_bus_resource_n(bus, i)) || i < PCI_BRIDGE_RESOURCE_NUM; \ - i++) +#define pci_bus_for_each_resource(bus, res, ...) \ + CONCATENATE(__pci_bus_for_each_res, COUNT_ARGS(__VA_ARGS__)) \ + (bus, res, __VA_ARGS__) int __must_check pci_bus_alloc_resource(struct pci_bus *bus, struct resource *res, resource_size_t size, -- 2.40.0.1.gaa8946217a0b 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9942EC77B76 for ; Thu, 30 Mar 2023 16:28:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232050AbjC3Q2r (ORCPT ); Thu, 30 Mar 2023 12:28:47 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60416 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231767AbjC3Q2g (ORCPT ); Thu, 30 Mar 2023 12:28:36 -0400 Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2F3C683FA; Thu, 30 Mar 2023 09:28:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1680193715; x=1711729715; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=VJ1PyQpGGPwbQf2lA7TScIDKb/DRRzKOJStqePaN450=; b=QDVgFCAh3EJ+pMB+BYsqmtGjC+FerPaWqyncraQAYxNWFskfaSxPDUXj je2x3xuJdOU270FN5YiA5oO3su9qC/10tN+8NJNDOsKFxenHrBEraO4iR CEreuwh8ry30/LFjLw+85DNcICTTBwd9GrpiGdtxhMFbZmbd33t6AvzQz yHclRxWBUe/KrePyfSdVRAAoO4jJMk8ZtmqvSoAzCFJKMGc/+ccIDKgRs YVqMRzSr6+FneoyA4H+VH0cdZeJdR5jLoMkpeImku1lpN9sR+2Ou9wcXD NPx2OUUVfchZ2SADd+sGLTXOkJc1z0/ilPGByhh8iTn92yze+ee5Yk3a7 w==; X-IronPort-AV: E=McAfee;i="6600,9927,10665"; a="427496137" X-IronPort-AV: E=Sophos;i="5.98,305,1673942400"; d="scan'208";a="427496137" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 Mar 2023 09:28:33 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10665"; a="858971556" X-IronPort-AV: E=Sophos;i="5.98,305,1673942400"; d="scan'208";a="858971556" Received: from black.fi.intel.com ([10.237.72.28]) by orsmga005.jf.intel.com with ESMTP; 30 Mar 2023 09:28:22 -0700 Received: by black.fi.intel.com (Postfix, from userid 1003) id E3FC727B; Thu, 30 Mar 2023 19:24:51 +0300 (EEST) From: Andy Shevchenko To: =?UTF-8?q?Micka=C3=ABl=20Sala=C3=BCn?= , Andy Shevchenko , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , Mika Westerberg , Michael Ellerman , Randy Dunlap , Arnd Bergmann , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Niklas Schnelle , Bjorn Helgaas , "Rafael J. Wysocki" , =?UTF-8?q?Pali=20Roh=C3=A1r?= , "Maciej W. Rozycki" , Juergen Gross , Dominik Brodowski , linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mips@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-pci@vger.kernel.org, xen-devel@lists.xenproject.org, linux-acpi@vger.kernel.org Cc: Miguel Ojeda , Richard Henderson , Ivan Kokshaysky , Matt Turner , Russell King , Andrew Lunn , Sebastian Hesselbarth , Gregory Clement , Thomas Bogendoerfer , Nicholas Piggin , Christophe Leroy , Anatolij Gustschin , Yoshinori Sato , Rich Felker , John Paul Adrian Glaubitz , "David S. Miller" , Bjorn Helgaas , Stefano Stabellini , Oleksandr Tyshchenko Subject: [PATCH v8 5/7] PCI: Allow pci_bus_for_each_resource() to take less arguments Date: Thu, 30 Mar 2023 19:24:32 +0300 Message-Id: <20230330162434.35055-6-andriy.shevchenko@linux.intel.com> X-Mailer: git-send-email 2.40.0.1.gaa8946217a0b In-Reply-To: <20230330162434.35055-1-andriy.shevchenko@linux.intel.com> References: <20230330162434.35055-1-andriy.shevchenko@linux.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org Refactor pci_bus_for_each_resource() in the same way as it's done in pci_dev_for_each_resource() case. This will allow to hide iterator inside the loop, where it's not used otherwise. No functional changes intended. Signed-off-by: Andy Shevchenko Reviewed-by: Krzysztof Wilczyński Reviewed-by: Philippe Mathieu-Daudé --- drivers/pci/bus.c | 7 +++---- drivers/pci/hotplug/shpchp_sysfs.c | 8 ++++---- drivers/pci/pci.c | 3 +-- drivers/pci/probe.c | 2 +- drivers/pci/setup-bus.c | 10 ++++------ include/linux/pci.h | 24 +++++++++++++++++++----- 6 files changed, 32 insertions(+), 22 deletions(-) diff --git a/drivers/pci/bus.c b/drivers/pci/bus.c index 549c4bd5caec..5bc81cc0a2de 100644 --- a/drivers/pci/bus.c +++ b/drivers/pci/bus.c @@ -182,13 +182,13 @@ static int pci_bus_alloc_from_region(struct pci_bus *bus, struct resource *res, void *alignf_data, struct pci_bus_region *region) { - int i, ret; struct resource *r, avail; resource_size_t max; + int ret; type_mask |= IORESOURCE_TYPE_BITS; - pci_bus_for_each_resource(bus, r, i) { + pci_bus_for_each_resource(bus, r) { resource_size_t min_used = min; if (!r) @@ -289,9 +289,8 @@ bool pci_bus_clip_resource(struct pci_dev *dev, int idx) struct resource *res = &dev->resource[idx]; struct resource orig_res = *res; struct resource *r; - int i; - pci_bus_for_each_resource(bus, r, i) { + pci_bus_for_each_resource(bus, r) { resource_size_t start, end; if (!r) diff --git a/drivers/pci/hotplug/shpchp_sysfs.c b/drivers/pci/hotplug/shpchp_sysfs.c index 64beed7a26be..01d47a42da04 100644 --- a/drivers/pci/hotplug/shpchp_sysfs.c +++ b/drivers/pci/hotplug/shpchp_sysfs.c @@ -24,16 +24,16 @@ static ssize_t show_ctrl(struct device *dev, struct device_attribute *attr, char *buf) { struct pci_dev *pdev; - int index, busnr; struct resource *res; struct pci_bus *bus; size_t len = 0; + int busnr; pdev = to_pci_dev(dev); bus = pdev->subordinate; len += sysfs_emit_at(buf, len, "Free resources: memory\n"); - pci_bus_for_each_resource(bus, res, index) { + pci_bus_for_each_resource(bus, res) { if (res && (res->flags & IORESOURCE_MEM) && !(res->flags & IORESOURCE_PREFETCH)) { len += sysfs_emit_at(buf, len, @@ -43,7 +43,7 @@ static ssize_t show_ctrl(struct device *dev, struct device_attribute *attr, char } } len += sysfs_emit_at(buf, len, "Free resources: prefetchable memory\n"); - pci_bus_for_each_resource(bus, res, index) { + pci_bus_for_each_resource(bus, res) { if (res && (res->flags & IORESOURCE_MEM) && (res->flags & IORESOURCE_PREFETCH)) { len += sysfs_emit_at(buf, len, @@ -53,7 +53,7 @@ static ssize_t show_ctrl(struct device *dev, struct device_attribute *attr, char } } len += sysfs_emit_at(buf, len, "Free resources: IO\n"); - pci_bus_for_each_resource(bus, res, index) { + pci_bus_for_each_resource(bus, res) { if (res && (res->flags & IORESOURCE_IO)) { len += sysfs_emit_at(buf, len, "start = %8.8llx, length = %8.8llx\n", diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 45c3bb039f21..585bb3988ddf 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -779,9 +779,8 @@ struct resource *pci_find_parent_resource(const struct pci_dev *dev, { const struct pci_bus *bus = dev->bus; struct resource *r; - int i; - pci_bus_for_each_resource(bus, r, i) { + pci_bus_for_each_resource(bus, r) { if (!r) continue; if (resource_contains(r, res)) { diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index a3f68b6ba6ac..f8191750f6b7 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c @@ -533,7 +533,7 @@ void pci_read_bridge_bases(struct pci_bus *child) pci_read_bridge_mmio_pref(child); if (dev->transparent) { - pci_bus_for_each_resource(child->parent, res, i) { + pci_bus_for_each_resource(child->parent, res) { if (res && res->flags) { pci_bus_add_resource(child, res, PCI_SUBTRACTIVE_DECODE); diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c index 027b985dd1ee..fdeb121e9175 100644 --- a/drivers/pci/setup-bus.c +++ b/drivers/pci/setup-bus.c @@ -770,9 +770,8 @@ static struct resource *find_bus_resource_of_type(struct pci_bus *bus, unsigned long type) { struct resource *r, *r_assigned = NULL; - int i; - pci_bus_for_each_resource(bus, r, i) { + pci_bus_for_each_resource(bus, r) { if (r == &ioport_resource || r == &iomem_resource) continue; if (r && (r->flags & type_mask) == type && !r->parent) @@ -1204,7 +1203,7 @@ void __pci_bus_size_bridges(struct pci_bus *bus, struct list_head *realloc_head) additional_mmio_pref_size = 0; struct resource *pref; struct pci_host_bridge *host; - int hdr_type, i, ret; + int hdr_type, ret; list_for_each_entry(dev, &bus->devices, bus_list) { struct pci_bus *b = dev->subordinate; @@ -1228,7 +1227,7 @@ void __pci_bus_size_bridges(struct pci_bus *bus, struct list_head *realloc_head) host = to_pci_host_bridge(bus->bridge); if (!host->size_windows) return; - pci_bus_for_each_resource(bus, pref, i) + pci_bus_for_each_resource(bus, pref) if (pref && (pref->flags & IORESOURCE_PREFETCH)) break; hdr_type = -1; /* Intentionally invalid - not a PCI device. */ @@ -1333,12 +1332,11 @@ EXPORT_SYMBOL(pci_bus_size_bridges); static void assign_fixed_resource_on_bus(struct pci_bus *b, struct resource *r) { - int i; struct resource *parent_r; unsigned long mask = IORESOURCE_IO | IORESOURCE_MEM | IORESOURCE_PREFETCH; - pci_bus_for_each_resource(b, parent_r, i) { + pci_bus_for_each_resource(b, parent_r) { if (!parent_r) continue; diff --git a/include/linux/pci.h b/include/linux/pci.h index e3b3af606280..56670d016cac 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -1446,11 +1446,21 @@ int devm_request_pci_bus_resources(struct device *dev, /* Temporary until new and working PCI SBR API in place */ int pci_bridge_secondary_bus_reset(struct pci_dev *dev); +#define __pci_bus_for_each_res0(bus, res, ...) \ + for (unsigned int __b = 0; \ + (res = pci_bus_resource_n(bus, __b)) || __b < PCI_BRIDGE_RESOURCE_NUM; \ + __b++) + +#define __pci_bus_for_each_res1(bus, res, __b) \ + for (__b = 0; \ + (res = pci_bus_resource_n(bus, __b)) || __b < PCI_BRIDGE_RESOURCE_NUM; \ + __b++) + /** * pci_bus_for_each_resource - iterate over PCI bus resources * @bus: the PCI bus * @res: a varible to keep a pointer to the current resource - * @i: a variable to keep the index of the current resource + * @...: an optional variable to keep the index of the current resource * * Iterate over PCI bus resources. The first part is to go over PCI bus * resource array, which has at most the %PCI_BRIDGE_RESOURCE_NUM entries. @@ -1463,13 +1473,17 @@ int pci_bridge_secondary_bus_reset(struct pci_dev *dev); * struct resource *res; * unsigned int i; * + * // With an additional index variable * pci_bus_for_each_resource(bus, res, i) * pr_info("PCI bus resource[%u]: %pR\n", i, res); + * + * // Without index + * pci_bus_for_each_resource(bus, res) + * _do_something_(res); */ -#define pci_bus_for_each_resource(bus, res, i) \ - for (i = 0; \ - (res = pci_bus_resource_n(bus, i)) || i < PCI_BRIDGE_RESOURCE_NUM; \ - i++) +#define pci_bus_for_each_resource(bus, res, ...) \ + CONCATENATE(__pci_bus_for_each_res, COUNT_ARGS(__VA_ARGS__)) \ + (bus, res, __VA_ARGS__) int __must_check pci_bus_alloc_resource(struct pci_bus *bus, struct resource *res, resource_size_t size, -- 2.40.0.1.gaa8946217a0b 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 lists.ozlabs.org (lists.ozlabs.org [112.213.38.117]) (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 E6472C6FD1D for ; Thu, 30 Mar 2023 17:42:51 +0000 (UTC) Received: from boromir.ozlabs.org (localhost [IPv6:::1]) by lists.ozlabs.org (Postfix) with ESMTP id 4PnW3G47wKz3fSZ for ; Fri, 31 Mar 2023 04:42:50 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.a=rsa-sha256 header.s=Intel header.b=ZzsIR3oU; dkim-atps=neutral Authentication-Results: lists.ozlabs.org; spf=none (no SPF record) smtp.mailfrom=linux.intel.com (client-ip=192.55.52.43; helo=mga05.intel.com; envelope-from=andriy.shevchenko@linux.intel.com; receiver=) Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.a=rsa-sha256 header.s=Intel header.b=ZzsIR3oU; dkim-atps=neutral Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4PnTPb6QCTz3f7F for ; Fri, 31 Mar 2023 03:28:35 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1680193716; x=1711729716; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=VJ1PyQpGGPwbQf2lA7TScIDKb/DRRzKOJStqePaN450=; b=ZzsIR3oUMwDnOeLrL8KyibHlrxKCPb0LNJLIooRAl91A9YLzXRc31Y+A MP7/afUpki4UByLU8Njw0u0Dva5xXWpcRguf2w7m4uAuDBKrjc3wqHabn FBOGuLKeBwCoI4QQrHLbaQJ60G8Fb1rdtKEQU5EzisQWfG+BDSpv4jrsw bi21WsLMNjG65ccm0UsJExTmbxznILgt2VZmWJohBNNYZV4z7cutBywkm d4OzNN3Rj9XPbcPLVUdSiOIU7xplg5Poq2y1i16Y10VfSHSwv3qhhpNrj kRkZIAJITN5I/altb/MTmBpkyjc2ntH4L7UDXINA0uIMrYM4EPZz+xxcK w==; X-IronPort-AV: E=McAfee;i="6600,9927,10665"; a="427496130" X-IronPort-AV: E=Sophos;i="5.98,305,1673942400"; d="scan'208";a="427496130" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 Mar 2023 09:28:33 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10665"; a="858971556" X-IronPort-AV: E=Sophos;i="5.98,305,1673942400"; d="scan'208";a="858971556" Received: from black.fi.intel.com ([10.237.72.28]) by orsmga005.jf.intel.com with ESMTP; 30 Mar 2023 09:28:22 -0700 Received: by black.fi.intel.com (Postfix, from userid 1003) id E3FC727B; Thu, 30 Mar 2023 19:24:51 +0300 (EEST) From: Andy Shevchenko To: =?UTF-8?q?Micka=C3=ABl=20Sala=C3=BCn?= , Andy Shevchenko , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , Mika Westerberg , Michael Ellerman , Randy Dunlap , Arnd Bergmann , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Niklas Schnelle , Bjorn Helgaas , "Rafael J. Wysocki" , =?UTF-8?q?Pali=20Roh=C3=A1r?= , "Maciej W. Rozycki" , Juergen Gross , Dominik Brodowski , linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mips@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-pci@vger.kernel.org, xen-devel@lists.xenproject.org, linux-acpi@vger.kernel.org Subject: [PATCH v8 5/7] PCI: Allow pci_bus_for_each_resource() to take less arguments Date: Thu, 30 Mar 2023 19:24:32 +0300 Message-Id: <20230330162434.35055-6-andriy.shevchenko@linux.intel.com> X-Mailer: git-send-email 2.40.0.1.gaa8946217a0b In-Reply-To: <20230330162434.35055-1-andriy.shevchenko@linux.intel.com> References: <20230330162434.35055-1-andriy.shevchenko@linux.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Andrew Lunn , Thomas Bogendoerfer , Stefano Stabellini , Yoshinori Sato , Oleksandr Tyshchenko , Gregory Clement , Richard Henderson , Russell King , Nicholas Piggin , Bjorn Helgaas , Rich Felker , Ivan Kokshaysky , John Paul Adrian Glaubitz , Miguel Ojeda , Matt Turner , Anatolij Gustschin , "David S. Miller" , Sebastian Hesselbarth Errors-To: linuxppc-dev-bounces+linuxppc-dev=archiver.kernel.org@lists.ozlabs.org Sender: "Linuxppc-dev" Refactor pci_bus_for_each_resource() in the same way as it's done in pci_dev_for_each_resource() case. This will allow to hide iterator inside the loop, where it's not used otherwise. No functional changes intended. Signed-off-by: Andy Shevchenko Reviewed-by: Krzysztof Wilczyński Reviewed-by: Philippe Mathieu-Daudé --- drivers/pci/bus.c | 7 +++---- drivers/pci/hotplug/shpchp_sysfs.c | 8 ++++---- drivers/pci/pci.c | 3 +-- drivers/pci/probe.c | 2 +- drivers/pci/setup-bus.c | 10 ++++------ include/linux/pci.h | 24 +++++++++++++++++++----- 6 files changed, 32 insertions(+), 22 deletions(-) diff --git a/drivers/pci/bus.c b/drivers/pci/bus.c index 549c4bd5caec..5bc81cc0a2de 100644 --- a/drivers/pci/bus.c +++ b/drivers/pci/bus.c @@ -182,13 +182,13 @@ static int pci_bus_alloc_from_region(struct pci_bus *bus, struct resource *res, void *alignf_data, struct pci_bus_region *region) { - int i, ret; struct resource *r, avail; resource_size_t max; + int ret; type_mask |= IORESOURCE_TYPE_BITS; - pci_bus_for_each_resource(bus, r, i) { + pci_bus_for_each_resource(bus, r) { resource_size_t min_used = min; if (!r) @@ -289,9 +289,8 @@ bool pci_bus_clip_resource(struct pci_dev *dev, int idx) struct resource *res = &dev->resource[idx]; struct resource orig_res = *res; struct resource *r; - int i; - pci_bus_for_each_resource(bus, r, i) { + pci_bus_for_each_resource(bus, r) { resource_size_t start, end; if (!r) diff --git a/drivers/pci/hotplug/shpchp_sysfs.c b/drivers/pci/hotplug/shpchp_sysfs.c index 64beed7a26be..01d47a42da04 100644 --- a/drivers/pci/hotplug/shpchp_sysfs.c +++ b/drivers/pci/hotplug/shpchp_sysfs.c @@ -24,16 +24,16 @@ static ssize_t show_ctrl(struct device *dev, struct device_attribute *attr, char *buf) { struct pci_dev *pdev; - int index, busnr; struct resource *res; struct pci_bus *bus; size_t len = 0; + int busnr; pdev = to_pci_dev(dev); bus = pdev->subordinate; len += sysfs_emit_at(buf, len, "Free resources: memory\n"); - pci_bus_for_each_resource(bus, res, index) { + pci_bus_for_each_resource(bus, res) { if (res && (res->flags & IORESOURCE_MEM) && !(res->flags & IORESOURCE_PREFETCH)) { len += sysfs_emit_at(buf, len, @@ -43,7 +43,7 @@ static ssize_t show_ctrl(struct device *dev, struct device_attribute *attr, char } } len += sysfs_emit_at(buf, len, "Free resources: prefetchable memory\n"); - pci_bus_for_each_resource(bus, res, index) { + pci_bus_for_each_resource(bus, res) { if (res && (res->flags & IORESOURCE_MEM) && (res->flags & IORESOURCE_PREFETCH)) { len += sysfs_emit_at(buf, len, @@ -53,7 +53,7 @@ static ssize_t show_ctrl(struct device *dev, struct device_attribute *attr, char } } len += sysfs_emit_at(buf, len, "Free resources: IO\n"); - pci_bus_for_each_resource(bus, res, index) { + pci_bus_for_each_resource(bus, res) { if (res && (res->flags & IORESOURCE_IO)) { len += sysfs_emit_at(buf, len, "start = %8.8llx, length = %8.8llx\n", diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 45c3bb039f21..585bb3988ddf 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -779,9 +779,8 @@ struct resource *pci_find_parent_resource(const struct pci_dev *dev, { const struct pci_bus *bus = dev->bus; struct resource *r; - int i; - pci_bus_for_each_resource(bus, r, i) { + pci_bus_for_each_resource(bus, r) { if (!r) continue; if (resource_contains(r, res)) { diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index a3f68b6ba6ac..f8191750f6b7 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c @@ -533,7 +533,7 @@ void pci_read_bridge_bases(struct pci_bus *child) pci_read_bridge_mmio_pref(child); if (dev->transparent) { - pci_bus_for_each_resource(child->parent, res, i) { + pci_bus_for_each_resource(child->parent, res) { if (res && res->flags) { pci_bus_add_resource(child, res, PCI_SUBTRACTIVE_DECODE); diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c index 027b985dd1ee..fdeb121e9175 100644 --- a/drivers/pci/setup-bus.c +++ b/drivers/pci/setup-bus.c @@ -770,9 +770,8 @@ static struct resource *find_bus_resource_of_type(struct pci_bus *bus, unsigned long type) { struct resource *r, *r_assigned = NULL; - int i; - pci_bus_for_each_resource(bus, r, i) { + pci_bus_for_each_resource(bus, r) { if (r == &ioport_resource || r == &iomem_resource) continue; if (r && (r->flags & type_mask) == type && !r->parent) @@ -1204,7 +1203,7 @@ void __pci_bus_size_bridges(struct pci_bus *bus, struct list_head *realloc_head) additional_mmio_pref_size = 0; struct resource *pref; struct pci_host_bridge *host; - int hdr_type, i, ret; + int hdr_type, ret; list_for_each_entry(dev, &bus->devices, bus_list) { struct pci_bus *b = dev->subordinate; @@ -1228,7 +1227,7 @@ void __pci_bus_size_bridges(struct pci_bus *bus, struct list_head *realloc_head) host = to_pci_host_bridge(bus->bridge); if (!host->size_windows) return; - pci_bus_for_each_resource(bus, pref, i) + pci_bus_for_each_resource(bus, pref) if (pref && (pref->flags & IORESOURCE_PREFETCH)) break; hdr_type = -1; /* Intentionally invalid - not a PCI device. */ @@ -1333,12 +1332,11 @@ EXPORT_SYMBOL(pci_bus_size_bridges); static void assign_fixed_resource_on_bus(struct pci_bus *b, struct resource *r) { - int i; struct resource *parent_r; unsigned long mask = IORESOURCE_IO | IORESOURCE_MEM | IORESOURCE_PREFETCH; - pci_bus_for_each_resource(b, parent_r, i) { + pci_bus_for_each_resource(b, parent_r) { if (!parent_r) continue; diff --git a/include/linux/pci.h b/include/linux/pci.h index e3b3af606280..56670d016cac 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -1446,11 +1446,21 @@ int devm_request_pci_bus_resources(struct device *dev, /* Temporary until new and working PCI SBR API in place */ int pci_bridge_secondary_bus_reset(struct pci_dev *dev); +#define __pci_bus_for_each_res0(bus, res, ...) \ + for (unsigned int __b = 0; \ + (res = pci_bus_resource_n(bus, __b)) || __b < PCI_BRIDGE_RESOURCE_NUM; \ + __b++) + +#define __pci_bus_for_each_res1(bus, res, __b) \ + for (__b = 0; \ + (res = pci_bus_resource_n(bus, __b)) || __b < PCI_BRIDGE_RESOURCE_NUM; \ + __b++) + /** * pci_bus_for_each_resource - iterate over PCI bus resources * @bus: the PCI bus * @res: a varible to keep a pointer to the current resource - * @i: a variable to keep the index of the current resource + * @...: an optional variable to keep the index of the current resource * * Iterate over PCI bus resources. The first part is to go over PCI bus * resource array, which has at most the %PCI_BRIDGE_RESOURCE_NUM entries. @@ -1463,13 +1473,17 @@ int pci_bridge_secondary_bus_reset(struct pci_dev *dev); * struct resource *res; * unsigned int i; * + * // With an additional index variable * pci_bus_for_each_resource(bus, res, i) * pr_info("PCI bus resource[%u]: %pR\n", i, res); + * + * // Without index + * pci_bus_for_each_resource(bus, res) + * _do_something_(res); */ -#define pci_bus_for_each_resource(bus, res, i) \ - for (i = 0; \ - (res = pci_bus_resource_n(bus, i)) || i < PCI_BRIDGE_RESOURCE_NUM; \ - i++) +#define pci_bus_for_each_resource(bus, res, ...) \ + CONCATENATE(__pci_bus_for_each_res, COUNT_ARGS(__VA_ARGS__)) \ + (bus, res, __VA_ARGS__) int __must_check pci_bus_alloc_resource(struct pci_bus *bus, struct resource *res, resource_size_t size, -- 2.40.0.1.gaa8946217a0b 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 33A8EC77B60 for ; Thu, 30 Mar 2023 16:30:08 +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: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=g+3c87NMDSenpmXAyqElizS5e8aS0oDzBGj7oDGjcQ8=; b=3SvRxGJcJjf0P0 vZ2RvNjU2QZxsjm/Q6E33KM5V7kmJTJtuC9qjBHprLMvxWq9wXegqlZAO8c96971Gph9jtUVTU4Lu CY9eNvYa8/h+d0YglzTPPpLsBgecJFNsKPc3aXKMdJFhDihQuU7YzazuCvJ3PNFE34Kc/WwWX+fIW OK5ASAyAJI7M940zj7kAvU+e9qhBwZT4c+0J3ahZUS720m+IIfxGP5QoOBKl2r9244gte2mGV8Fr2 02TO+E97poPc+rSMQwMIulhYc8yuDkh9xWPWZ6UsIK2JxqdNm+M1nYaLJyFbY1k0sr2Tu92wuu6Wy ociHzJVauXRTZeqkczEw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1phv9J-004T7k-2F; Thu, 30 Mar 2023 16:29:17 +0000 Received: from mga05.intel.com ([192.55.52.43]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1phv8d-004Sfv-1Y for linux-arm-kernel@lists.infradead.org; Thu, 30 Mar 2023 16:28:37 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1680193715; x=1711729715; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=VJ1PyQpGGPwbQf2lA7TScIDKb/DRRzKOJStqePaN450=; b=QDVgFCAh3EJ+pMB+BYsqmtGjC+FerPaWqyncraQAYxNWFskfaSxPDUXj je2x3xuJdOU270FN5YiA5oO3su9qC/10tN+8NJNDOsKFxenHrBEraO4iR CEreuwh8ry30/LFjLw+85DNcICTTBwd9GrpiGdtxhMFbZmbd33t6AvzQz yHclRxWBUe/KrePyfSdVRAAoO4jJMk8ZtmqvSoAzCFJKMGc/+ccIDKgRs YVqMRzSr6+FneoyA4H+VH0cdZeJdR5jLoMkpeImku1lpN9sR+2Ou9wcXD NPx2OUUVfchZ2SADd+sGLTXOkJc1z0/ilPGByhh8iTn92yze+ee5Yk3a7 w==; X-IronPort-AV: E=McAfee;i="6600,9927,10665"; a="427496135" X-IronPort-AV: E=Sophos;i="5.98,305,1673942400"; d="scan'208";a="427496135" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 Mar 2023 09:28:33 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10665"; a="858971556" X-IronPort-AV: E=Sophos;i="5.98,305,1673942400"; d="scan'208";a="858971556" Received: from black.fi.intel.com ([10.237.72.28]) by orsmga005.jf.intel.com with ESMTP; 30 Mar 2023 09:28:22 -0700 Received: by black.fi.intel.com (Postfix, from userid 1003) id E3FC727B; Thu, 30 Mar 2023 19:24:51 +0300 (EEST) From: Andy Shevchenko To: =?UTF-8?q?Micka=C3=ABl=20Sala=C3=BCn?= , Andy Shevchenko , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , Mika Westerberg , Michael Ellerman , Randy Dunlap , Arnd Bergmann , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Niklas Schnelle , Bjorn Helgaas , "Rafael J. Wysocki" , =?UTF-8?q?Pali=20Roh=C3=A1r?= , "Maciej W. Rozycki" , Juergen Gross , Dominik Brodowski , linux-kernel@vger.kernel.org, linux-alpha@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mips@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-pci@vger.kernel.org, xen-devel@lists.xenproject.org, linux-acpi@vger.kernel.org Cc: Miguel Ojeda , Richard Henderson , Ivan Kokshaysky , Matt Turner , Russell King , Andrew Lunn , Sebastian Hesselbarth , Gregory Clement , Thomas Bogendoerfer , Nicholas Piggin , Christophe Leroy , Anatolij Gustschin , Yoshinori Sato , Rich Felker , John Paul Adrian Glaubitz , "David S. Miller" , Bjorn Helgaas , Stefano Stabellini , Oleksandr Tyshchenko Subject: [PATCH v8 5/7] PCI: Allow pci_bus_for_each_resource() to take less arguments Date: Thu, 30 Mar 2023 19:24:32 +0300 Message-Id: <20230330162434.35055-6-andriy.shevchenko@linux.intel.com> X-Mailer: git-send-email 2.40.0.1.gaa8946217a0b In-Reply-To: <20230330162434.35055-1-andriy.shevchenko@linux.intel.com> References: <20230330162434.35055-1-andriy.shevchenko@linux.intel.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230330_092835_588785_408B7BAF X-CRM114-Status: GOOD ( 21.34 ) 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 UmVmYWN0b3IgcGNpX2J1c19mb3JfZWFjaF9yZXNvdXJjZSgpIGluIHRoZSBzYW1lIHdheSBhcyBp dCdzIGRvbmUgaW4KcGNpX2Rldl9mb3JfZWFjaF9yZXNvdXJjZSgpIGNhc2UuIFRoaXMgd2lsbCBh bGxvdyB0byBoaWRlIGl0ZXJhdG9yCmluc2lkZSB0aGUgbG9vcCwgd2hlcmUgaXQncyBub3QgdXNl ZCBvdGhlcndpc2UuCgpObyBmdW5jdGlvbmFsIGNoYW5nZXMgaW50ZW5kZWQuCgpTaWduZWQtb2Zm LWJ5OiBBbmR5IFNoZXZjaGVua28gPGFuZHJpeS5zaGV2Y2hlbmtvQGxpbnV4LmludGVsLmNvbT4K UmV2aWV3ZWQtYnk6IEtyenlzenRvZiBXaWxjennFhHNraSA8a3dAbGludXguY29tPgpSZXZpZXdl ZC1ieTogUGhpbGlwcGUgTWF0aGlldS1EYXVkw6kgPHBoaWxtZEBsaW5hcm8ub3JnPgotLS0KIGRy aXZlcnMvcGNpL2J1cy5jICAgICAgICAgICAgICAgICAgfCAgNyArKystLS0tCiBkcml2ZXJzL3Bj aS9ob3RwbHVnL3NocGNocF9zeXNmcy5jIHwgIDggKysrKy0tLS0KIGRyaXZlcnMvcGNpL3BjaS5j ICAgICAgICAgICAgICAgICAgfCAgMyArLS0KIGRyaXZlcnMvcGNpL3Byb2JlLmMgICAgICAgICAg ICAgICAgfCAgMiArLQogZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMgICAgICAgICAgICB8IDEwICsr KystLS0tLS0KIGluY2x1ZGUvbGludXgvcGNpLmggICAgICAgICAgICAgICAgfCAyNCArKysrKysr KysrKysrKysrKysrLS0tLS0KIDYgZmlsZXMgY2hhbmdlZCwgMzIgaW5zZXJ0aW9ucygrKSwgMjIg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvYnVzLmMgYi9kcml2ZXJzL3Bj aS9idXMuYwppbmRleCA1NDljNGJkNWNhZWMuLjViYzgxY2MwYTJkZSAxMDA2NDQKLS0tIGEvZHJp dmVycy9wY2kvYnVzLmMKKysrIGIvZHJpdmVycy9wY2kvYnVzLmMKQEAgLTE4MiwxMyArMTgyLDEz IEBAIHN0YXRpYyBpbnQgcGNpX2J1c19hbGxvY19mcm9tX3JlZ2lvbihzdHJ1Y3QgcGNpX2J1cyAq YnVzLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKIAkJdm9pZCAqYWxpZ25mX2RhdGEsCiAJCXN0cnVj dCBwY2lfYnVzX3JlZ2lvbiAqcmVnaW9uKQogewotCWludCBpLCByZXQ7CiAJc3RydWN0IHJlc291 cmNlICpyLCBhdmFpbDsKIAlyZXNvdXJjZV9zaXplX3QgbWF4OworCWludCByZXQ7CiAKIAl0eXBl X21hc2sgfD0gSU9SRVNPVVJDRV9UWVBFX0JJVFM7CiAKLQlwY2lfYnVzX2Zvcl9lYWNoX3Jlc291 cmNlKGJ1cywgciwgaSkgeworCXBjaV9idXNfZm9yX2VhY2hfcmVzb3VyY2UoYnVzLCByKSB7CiAJ CXJlc291cmNlX3NpemVfdCBtaW5fdXNlZCA9IG1pbjsKIAogCQlpZiAoIXIpCkBAIC0yODksOSAr Mjg5LDggQEAgYm9vbCBwY2lfYnVzX2NsaXBfcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKmRldiwg aW50IGlkeCkKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9ICZkZXYtPnJlc291cmNlW2lkeF07CiAJ c3RydWN0IHJlc291cmNlIG9yaWdfcmVzID0gKnJlczsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnI7Ci0J aW50IGk7CiAKLQlwY2lfYnVzX2Zvcl9lYWNoX3Jlc291cmNlKGJ1cywgciwgaSkgeworCXBjaV9i dXNfZm9yX2VhY2hfcmVzb3VyY2UoYnVzLCByKSB7CiAJCXJlc291cmNlX3NpemVfdCBzdGFydCwg ZW5kOwogCiAJCWlmICghcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hw X3N5c2ZzLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9zeXNmcy5jCmluZGV4IDY0YmVl ZDdhMjZiZS4uMDFkNDdhNDJkYTA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3No cGNocF9zeXNmcy5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX3N5c2ZzLmMKQEAg LTI0LDE2ICsyNCwxNiBAQAogc3RhdGljIHNzaXplX3Qgc2hvd19jdHJsKHN0cnVjdCBkZXZpY2Ug KmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1 Y3QgcGNpX2RldiAqcGRldjsKLQlpbnQgaW5kZXgsIGJ1c25yOwogCXN0cnVjdCByZXNvdXJjZSAq cmVzOwogCXN0cnVjdCBwY2lfYnVzICpidXM7CiAJc2l6ZV90IGxlbiA9IDA7CisJaW50IGJ1c25y OwogCiAJcGRldiA9IHRvX3BjaV9kZXYoZGV2KTsKIAlidXMgPSBwZGV2LT5zdWJvcmRpbmF0ZTsK IAogCWxlbiArPSBzeXNmc19lbWl0X2F0KGJ1ZiwgbGVuLCAiRnJlZSByZXNvdXJjZXM6IG1lbW9y eVxuIik7Ci0JcGNpX2J1c19mb3JfZWFjaF9yZXNvdXJjZShidXMsIHJlcywgaW5kZXgpIHsKKwlw Y2lfYnVzX2Zvcl9lYWNoX3Jlc291cmNlKGJ1cywgcmVzKSB7CiAJCWlmIChyZXMgJiYgKHJlcy0+ ZmxhZ3MgJiBJT1JFU09VUkNFX01FTSkgJiYKIAkJCQkhKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNF X1BSRUZFVENIKSkgewogCQkJbGVuICs9IHN5c2ZzX2VtaXRfYXQoYnVmLCBsZW4sCkBAIC00Myw3 ICs0Myw3IEBAIHN0YXRpYyBzc2l6ZV90IHNob3dfY3RybChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0 cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyCiAJCX0KIAl9CiAJbGVuICs9IHN5c2Zz X2VtaXRfYXQoYnVmLCBsZW4sICJGcmVlIHJlc291cmNlczogcHJlZmV0Y2hhYmxlIG1lbW9yeVxu Iik7Ci0JcGNpX2J1c19mb3JfZWFjaF9yZXNvdXJjZShidXMsIHJlcywgaW5kZXgpIHsKKwlwY2lf YnVzX2Zvcl9lYWNoX3Jlc291cmNlKGJ1cywgcmVzKSB7CiAJCWlmIChyZXMgJiYgKHJlcy0+Zmxh Z3MgJiBJT1JFU09VUkNFX01FTSkgJiYKIAkJCSAgICAgICAocmVzLT5mbGFncyAmIElPUkVTT1VS Q0VfUFJFRkVUQ0gpKSB7CiAJCQlsZW4gKz0gc3lzZnNfZW1pdF9hdChidWYsIGxlbiwKQEAgLTUz LDcgKzUzLDcgQEAgc3RhdGljIHNzaXplX3Qgc2hvd19jdHJsKHN0cnVjdCBkZXZpY2UgKmRldiwg c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIKIAkJfQogCX0KIAlsZW4gKz0gc3lz ZnNfZW1pdF9hdChidWYsIGxlbiwgIkZyZWUgcmVzb3VyY2VzOiBJT1xuIik7Ci0JcGNpX2J1c19m b3JfZWFjaF9yZXNvdXJjZShidXMsIHJlcywgaW5kZXgpIHsKKwlwY2lfYnVzX2Zvcl9lYWNoX3Jl c291cmNlKGJ1cywgcmVzKSB7CiAJCWlmIChyZXMgJiYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNF X0lPKSkgewogCQkJbGVuICs9IHN5c2ZzX2VtaXRfYXQoYnVmLCBsZW4sCiAJCQkJCSAgICAgInN0 YXJ0ID0gJTguOGxseCwgbGVuZ3RoID0gJTguOGxseFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMv cGNpL3BjaS5jIGIvZHJpdmVycy9wY2kvcGNpLmMKaW5kZXggNDVjM2JiMDM5ZjIxLi41ODViYjM5 ODhkZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS5jCisrKyBiL2RyaXZlcnMvcGNpL3Bj aS5jCkBAIC03NzksOSArNzc5LDggQEAgc3RydWN0IHJlc291cmNlICpwY2lfZmluZF9wYXJlbnRf cmVzb3VyY2UoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwKIHsKIAljb25zdCBzdHJ1Y3QgcGNp X2J1cyAqYnVzID0gZGV2LT5idXM7CiAJc3RydWN0IHJlc291cmNlICpyOwotCWludCBpOwogCi0J cGNpX2J1c19mb3JfZWFjaF9yZXNvdXJjZShidXMsIHIsIGkpIHsKKwlwY2lfYnVzX2Zvcl9lYWNo X3Jlc291cmNlKGJ1cywgcikgewogCQlpZiAoIXIpCiAJCQljb250aW51ZTsKIAkJaWYgKHJlc291 cmNlX2NvbnRhaW5zKHIsIHJlcykpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3Byb2JlLmMg Yi9kcml2ZXJzL3BjaS9wcm9iZS5jCmluZGV4IGEzZjY4YjZiYTZhYy4uZjgxOTE3NTBmNmI3IDEw MDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wcm9iZS5jCisrKyBiL2RyaXZlcnMvcGNpL3Byb2JlLmMK QEAgLTUzMyw3ICs1MzMsNyBAQCB2b2lkIHBjaV9yZWFkX2JyaWRnZV9iYXNlcyhzdHJ1Y3QgcGNp X2J1cyAqY2hpbGQpCiAJcGNpX3JlYWRfYnJpZGdlX21taW9fcHJlZihjaGlsZCk7CiAKIAlpZiAo ZGV2LT50cmFuc3BhcmVudCkgewotCQlwY2lfYnVzX2Zvcl9lYWNoX3Jlc291cmNlKGNoaWxkLT5w YXJlbnQsIHJlcywgaSkgeworCQlwY2lfYnVzX2Zvcl9lYWNoX3Jlc291cmNlKGNoaWxkLT5wYXJl bnQsIHJlcykgewogCQkJaWYgKHJlcyAmJiByZXMtPmZsYWdzKSB7CiAJCQkJcGNpX2J1c19hZGRf cmVzb3VyY2UoY2hpbGQsIHJlcywKIAkJCQkJCSAgICAgUENJX1NVQlRSQUNUSVZFX0RFQ09ERSk7 CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYyBiL2RyaXZlcnMvcGNpL3NldHVw LWJ1cy5jCmluZGV4IDAyN2I5ODVkZDFlZS4uZmRlYjEyMWU5MTc1IDEwMDY0NAotLS0gYS9kcml2 ZXJzL3BjaS9zZXR1cC1idXMuYworKysgYi9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYwpAQCAtNzcw LDkgKzc3MCw4IEBAIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgKmZpbmRfYnVzX3Jlc291cmNlX29m X3R5cGUoc3RydWN0IHBjaV9idXMgKmJ1cywKIAkJCQkJCSAgdW5zaWduZWQgbG9uZyB0eXBlKQog ewogCXN0cnVjdCByZXNvdXJjZSAqciwgKnJfYXNzaWduZWQgPSBOVUxMOwotCWludCBpOwogCi0J cGNpX2J1c19mb3JfZWFjaF9yZXNvdXJjZShidXMsIHIsIGkpIHsKKwlwY2lfYnVzX2Zvcl9lYWNo X3Jlc291cmNlKGJ1cywgcikgewogCQlpZiAociA9PSAmaW9wb3J0X3Jlc291cmNlIHx8IHIgPT0g JmlvbWVtX3Jlc291cmNlKQogCQkJY29udGludWU7CiAJCWlmIChyICYmIChyLT5mbGFncyAmIHR5 cGVfbWFzaykgPT0gdHlwZSAmJiAhci0+cGFyZW50KQpAQCAtMTIwNCw3ICsxMjAzLDcgQEAgdm9p ZCBfX3BjaV9idXNfc2l6ZV9icmlkZ2VzKHN0cnVjdCBwY2lfYnVzICpidXMsIHN0cnVjdCBsaXN0 X2hlYWQgKnJlYWxsb2NfaGVhZCkKIAkJCWFkZGl0aW9uYWxfbW1pb19wcmVmX3NpemUgPSAwOwog CXN0cnVjdCByZXNvdXJjZSAqcHJlZjsKIAlzdHJ1Y3QgcGNpX2hvc3RfYnJpZGdlICpob3N0Owot CWludCBoZHJfdHlwZSwgaSwgcmV0OworCWludCBoZHJfdHlwZSwgcmV0OwogCiAJbGlzdF9mb3Jf ZWFjaF9lbnRyeShkZXYsICZidXMtPmRldmljZXMsIGJ1c19saXN0KSB7CiAJCXN0cnVjdCBwY2lf YnVzICpiID0gZGV2LT5zdWJvcmRpbmF0ZTsKQEAgLTEyMjgsNyArMTIyNyw3IEBAIHZvaWQgX19w Y2lfYnVzX3NpemVfYnJpZGdlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBzdHJ1Y3QgbGlzdF9oZWFk ICpyZWFsbG9jX2hlYWQpCiAJCWhvc3QgPSB0b19wY2lfaG9zdF9icmlkZ2UoYnVzLT5icmlkZ2Up OwogCQlpZiAoIWhvc3QtPnNpemVfd2luZG93cykKIAkJCXJldHVybjsKLQkJcGNpX2J1c19mb3Jf ZWFjaF9yZXNvdXJjZShidXMsIHByZWYsIGkpCisJCXBjaV9idXNfZm9yX2VhY2hfcmVzb3VyY2Uo YnVzLCBwcmVmKQogCQkJaWYgKHByZWYgJiYgKHByZWYtPmZsYWdzICYgSU9SRVNPVVJDRV9QUkVG RVRDSCkpCiAJCQkJYnJlYWs7CiAJCWhkcl90eXBlID0gLTE7CS8qIEludGVudGlvbmFsbHkgaW52 YWxpZCAtIG5vdCBhIFBDSSBkZXZpY2UuICovCkBAIC0xMzMzLDEyICsxMzMyLDExIEBAIEVYUE9S VF9TWU1CT0wocGNpX2J1c19zaXplX2JyaWRnZXMpOwogCiBzdGF0aWMgdm9pZCBhc3NpZ25fZml4 ZWRfcmVzb3VyY2Vfb25fYnVzKHN0cnVjdCBwY2lfYnVzICpiLCBzdHJ1Y3QgcmVzb3VyY2UgKnIp CiB7Ci0JaW50IGk7CiAJc3RydWN0IHJlc291cmNlICpwYXJlbnRfcjsKIAl1bnNpZ25lZCBsb25n IG1hc2sgPSBJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9NRU0gfAogCQkJICAgICBJT1JFU09V UkNFX1BSRUZFVENIOwogCi0JcGNpX2J1c19mb3JfZWFjaF9yZXNvdXJjZShiLCBwYXJlbnRfciwg aSkgeworCXBjaV9idXNfZm9yX2VhY2hfcmVzb3VyY2UoYiwgcGFyZW50X3IpIHsKIAkJaWYgKCFw YXJlbnRfcikKIAkJCWNvbnRpbnVlOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS5o IGIvaW5jbHVkZS9saW51eC9wY2kuaAppbmRleCBlM2IzYWY2MDYyODAuLjU2NjcwZDAxNmNhYyAx MDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2kuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaS5o CkBAIC0xNDQ2LDExICsxNDQ2LDIxIEBAIGludCBkZXZtX3JlcXVlc3RfcGNpX2J1c19yZXNvdXJj ZXMoc3RydWN0IGRldmljZSAqZGV2LAogLyogVGVtcG9yYXJ5IHVudGlsIG5ldyBhbmQgd29ya2lu ZyBQQ0kgU0JSIEFQSSBpbiBwbGFjZSAqLwogaW50IHBjaV9icmlkZ2Vfc2Vjb25kYXJ5X2J1c19y ZXNldChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIAorI2RlZmluZSBfX3BjaV9idXNfZm9yX2VhY2hf cmVzMChidXMsIHJlcywgLi4uKQkJCQlcCisJZm9yICh1bnNpZ25lZCBpbnQgX19iID0gMDsJCQkJ CVwKKwkgICAgIChyZXMgPSBwY2lfYnVzX3Jlc291cmNlX24oYnVzLCBfX2IpKSB8fCBfX2IgPCBQ Q0lfQlJJREdFX1JFU09VUkNFX05VTTsgXAorCSAgICAgX19iKyspCisKKyNkZWZpbmUgX19wY2lf YnVzX2Zvcl9lYWNoX3JlczEoYnVzLCByZXMsIF9fYikJCQkJXAorCWZvciAoX19iID0gMDsJCQkJ CQkJXAorCSAgICAgKHJlcyA9IHBjaV9idXNfcmVzb3VyY2VfbihidXMsIF9fYikpIHx8IF9fYiA8 IFBDSV9CUklER0VfUkVTT1VSQ0VfTlVNOyBcCisJICAgICBfX2IrKykKKwogLyoqCiAgKiBwY2lf YnVzX2Zvcl9lYWNoX3Jlc291cmNlIC0gaXRlcmF0ZSBvdmVyIFBDSSBidXMgcmVzb3VyY2VzCiAg KiBAYnVzOiB0aGUgUENJIGJ1cwogICogQHJlczogYSB2YXJpYmxlIHRvIGtlZXAgYSBwb2ludGVy IHRvIHRoZSBjdXJyZW50IHJlc291cmNlCi0gKiBAaTogYSB2YXJpYWJsZSB0byBrZWVwIHRoZSBp bmRleCBvZiB0aGUgY3VycmVudCByZXNvdXJjZQorICogQC4uLjogYW4gb3B0aW9uYWwgdmFyaWFi bGUgdG8ga2VlcCB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgcmVzb3VyY2UKICAqCiAgKiBJdGVy YXRlIG92ZXIgUENJIGJ1cyByZXNvdXJjZXMuIFRoZSBmaXJzdCBwYXJ0IGlzIHRvIGdvIG92ZXIg UENJIGJ1cwogICogcmVzb3VyY2UgYXJyYXksIHdoaWNoIGhhcyBhdCBtb3N0IHRoZSAlUENJX0JS SURHRV9SRVNPVVJDRV9OVU0gZW50cmllcy4KQEAgLTE0NjMsMTMgKzE0NzMsMTcgQEAgaW50IHBj aV9icmlkZ2Vfc2Vjb25kYXJ5X2J1c19yZXNldChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKICAqCXN0 cnVjdCByZXNvdXJjZSAqcmVzOwogICoJdW5zaWduZWQgaW50IGk7CiAgKgorICogCS8vIFdpdGgg YW4gYWRkaXRpb25hbCBpbmRleCB2YXJpYWJsZQogICogCXBjaV9idXNfZm9yX2VhY2hfcmVzb3Vy Y2UoYnVzLCByZXMsIGkpCiAgKiAJCXByX2luZm8oIlBDSSBidXMgcmVzb3VyY2VbJXVdOiAlcFJc biIsIGksIHJlcyk7CisgKgorICogCS8vIFdpdGhvdXQgaW5kZXgKKyAqIAlwY2lfYnVzX2Zvcl9l YWNoX3Jlc291cmNlKGJ1cywgcmVzKQorICogCQlfZG9fc29tZXRoaW5nXyhyZXMpOwogICovCi0j ZGVmaW5lIHBjaV9idXNfZm9yX2VhY2hfcmVzb3VyY2UoYnVzLCByZXMsIGkpCQkJCVwKLQlmb3Ig KGkgPSAwOwkJCQkJCQlcCi0JICAgIChyZXMgPSBwY2lfYnVzX3Jlc291cmNlX24oYnVzLCBpKSkg fHwgaSA8IFBDSV9CUklER0VfUkVTT1VSQ0VfTlVNOyBcCi0JICAgICBpKyspCisjZGVmaW5lIHBj aV9idXNfZm9yX2VhY2hfcmVzb3VyY2UoYnVzLCByZXMsIC4uLikJCQlcCisJQ09OQ0FURU5BVEUo X19wY2lfYnVzX2Zvcl9lYWNoX3JlcywgQ09VTlRfQVJHUyhfX1ZBX0FSR1NfXykpCVwKKwkJICAg IChidXMsIHJlcywgX19WQV9BUkdTX18pCiAKIGludCBfX211c3RfY2hlY2sgcGNpX2J1c19hbGxv Y19yZXNvdXJjZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLAogCQkJc3RydWN0IHJlc291cmNlICpyZXMs IHJlc291cmNlX3NpemVfdCBzaXplLAotLSAKMi40MC4wLjEuZ2FhODk0NjIxN2EwYgoKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJu ZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRw Oi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK