All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <20180718024944.577-3-bhe@redhat.com>

diff --git a/a/1.txt b/N1/1.txt
index 20a448f..5b05325 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -1071,8 +1071,3 @@ index 81ccd19c1d9f..c96e58d3d2f8 100644
  		 * IORESOURCE_IO attribute?
 -- 
 2.13.6
-
-_______________________________________________
-Linux-nvdimm mailing list
-Linux-nvdimm@lists.01.org
-https://lists.01.org/mailman/listinfo/linux-nvdimm
diff --git a/a/content_digest b/N1/content_digest
index 10fb266..855408a 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -1,52 +1,57 @@
  "ref\020180718024944.577-1-bhe@redhat.com\0"
- "ref\020180718024944.577-1-bhe-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org\0"
- "From\0Baoquan He <bhe-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>\0"
+ "From\0Baoquan He <bhe@redhat.com>\0"
  "Subject\0[PATCH v7 2/4] resource: Use list_head to link sibling resource\0"
  "Date\0Wed, 18 Jul 2018 10:49:42 +0800\0"
- "To\0linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
-  akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org
-  robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org
-  dan.j.williams-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org
-  nicolas.pitre-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org
-  josh-iaAMLnmF4UmaiuxdJuQwMA@public.gmane.org
-  fengguang.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org
-  bp-l3A5Bk7waGM@public.gmane.org
- " andy.shevchenko-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org\0"
- "Cc\0linux-mips-6z/3iImG2C8G8FEW9MqTrA@public.gmane.org"
-  brijesh.singh-5C7GfCeVMHo@public.gmane.org
-  devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
-  airlied-cv59FeDIM0c@public.gmane.org
-  linux-pci-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
-  richard.weiyang-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
-  jcmvbkbc-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
-  Paul Mackerras <paulus-eUNUBHrolfbYtjvyW6yDsg@public.gmane.org>
-  baiyaowei-0p4V/sDNsUmm0O/7XYngnFaTQe2KTcn/@public.gmane.org
-  kys-0li6OtcxBFHby3iVrkZq2A@public.gmane.org
-  frowand.list-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
-  lorenzo.pieralisi-5wv7dgnIgG8@public.gmane.org
-  sthemmin-0li6OtcxBFHby3iVrkZq2A@public.gmane.org
-  Baoquan He <bhe-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
-  linux-nvdimm-hn68Rpc1hR1g9hUCZPvPmw@public.gmane.org
-  Michael Ellerman <mpe-Gsx/Oe8HsFggBc27wqDAHg@public.gmane.org>
-  patrik.r.jakobsson-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
-  linux-input-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
-  gustavo-THi1TnShQwVAfugRpC6u6w@public.gmane.org
-  dyoung-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org
-  thomas.lendacky-5C7GfCeVMHo@public.gmane.org
-  haiyangz-0li6OtcxBFHby3iVrkZq2A@public.gmane.org
-  maarten.lankhorst-VuQAYsv1563Yd54FQh9/CA@public.gmane.org
-  jglisse-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org
-  seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org
-  bhelgaas-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org
-  tglx-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org
-  yinghai-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org
-  jonathan.derrick-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org
-  chris-YvXeqwSYzG2sTnJN9+BGXg@public.gmane.org
-  monstr-pSz03upnqPeHXe+LvDLADg@public.gmane.org
-  linux-parisc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
-  gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org
-  dmitry.torokhov-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
- " Benjamin\0"
+ "To\0linux-kernel@vger.kernel.org"
+  akpm@linux-foundation.org
+  robh+dt@kernel.org
+  dan.j.williams@intel.com
+  nicolas.pitre@linaro.org
+  josh@joshtriplett.org
+  fengguang.wu@intel.com
+  bp@suse.de
+ " andy.shevchenko@gmail.com\0"
+ "Cc\0patrik.r.jakobsson@gmail.com"
+  airlied@linux.ie
+  kys@microsoft.com
+  haiyangz@microsoft.com
+  sthemmin@microsoft.com
+  dmitry.torokhov@gmail.com
+  frowand.list@gmail.com
+  keith.busch@intel.com
+  jonathan.derrick@intel.com
+  lorenzo.pieralisi@arm.com
+  bhelgaas@google.com
+  tglx@linutronix.de
+  brijesh.singh@amd.com
+  jglisse@redhat.com
+  thomas.lendacky@amd.com
+  gregkh@linuxfoundation.org
+  baiyaowei@cmss.chinamobile.com
+  richard.weiyang@gmail.com
+  devel@linuxdriverproject.org
+  linux-input@vger.kernel.org
+  linux-nvdimm@lists.01.org
+  devicetree@vger.kernel.org
+  linux-pci@vger.kernel.org
+  ebiederm@xmission.com
+  vgoyal@redhat.com
+  dyoung@redhat.com
+  yinghai@kernel.org
+  monstr@monstr.eu
+  davem@davemloft.net
+  chris@zankel.net
+  jcmvbkbc@gmail.com
+  gustavo@padovan.org
+  maarten.lankhorst@linux.intel.com
+  seanpaul@chromium.org
+  linux-parisc@vger.kernel.org
+  linuxppc-dev@lists.ozlabs.org
+  Baoquan He <bhe@redhat.com>
+  Benjamin Herrenschmidt <benh@kernel.crashing.org>
+  Paul Mackerras <paulus@samba.org>
+  Michael Ellerman <mpe@ellerman.id.au>
+ " linux-mips@linux-mips.org\0"
  "\00:1\0"
  "b\0"
  "The struct resource uses singly linked list to link siblings, implemented\n"
@@ -1121,11 +1126,6 @@
  " \t\t * We can probably skip the resources without\n"
  " \t\t * IORESOURCE_IO attribute?\n"
  "-- \n"
- "2.13.6\n"
- "\n"
- "_______________________________________________\n"
- "Linux-nvdimm mailing list\n"
- "Linux-nvdimm@lists.01.org\n"
- https://lists.01.org/mailman/listinfo/linux-nvdimm
+ 2.13.6
 
-7e6896005789564cf729788af5ebca9691c03db6b1f6cbf1ba378f12c11356e0
+47097ca4801e1129625479fd6dfd48740fd811f49608942c99d2883e9b6f8829

diff --git a/a/content_digest b/N2/content_digest
index 10fb266..7b11a74 100644
--- a/a/content_digest
+++ b/N2/content_digest
@@ -1,52 +1,55 @@
  "ref\020180718024944.577-1-bhe@redhat.com\0"
- "ref\020180718024944.577-1-bhe-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org\0"
- "From\0Baoquan He <bhe-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>\0"
+ "From\0Baoquan He <bhe@redhat.com>\0"
  "Subject\0[PATCH v7 2/4] resource: Use list_head to link sibling resource\0"
  "Date\0Wed, 18 Jul 2018 10:49:42 +0800\0"
- "To\0linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
-  akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org
-  robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org
-  dan.j.williams-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org
-  nicolas.pitre-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org
-  josh-iaAMLnmF4UmaiuxdJuQwMA@public.gmane.org
-  fengguang.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org
-  bp-l3A5Bk7waGM@public.gmane.org
- " andy.shevchenko-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org\0"
- "Cc\0linux-mips-6z/3iImG2C8G8FEW9MqTrA@public.gmane.org"
-  brijesh.singh-5C7GfCeVMHo@public.gmane.org
-  devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
-  airlied-cv59FeDIM0c@public.gmane.org
-  linux-pci-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
-  richard.weiyang-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
-  jcmvbkbc-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
-  Paul Mackerras <paulus-eUNUBHrolfbYtjvyW6yDsg@public.gmane.org>
-  baiyaowei-0p4V/sDNsUmm0O/7XYngnFaTQe2KTcn/@public.gmane.org
-  kys-0li6OtcxBFHby3iVrkZq2A@public.gmane.org
-  frowand.list-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
-  lorenzo.pieralisi-5wv7dgnIgG8@public.gmane.org
-  sthemmin-0li6OtcxBFHby3iVrkZq2A@public.gmane.org
-  Baoquan He <bhe-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
-  linux-nvdimm-hn68Rpc1hR1g9hUCZPvPmw@public.gmane.org
-  Michael Ellerman <mpe-Gsx/Oe8HsFggBc27wqDAHg@public.gmane.org>
-  patrik.r.jakobsson-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
-  linux-input-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
-  gustavo-THi1TnShQwVAfugRpC6u6w@public.gmane.org
-  dyoung-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org
-  thomas.lendacky-5C7GfCeVMHo@public.gmane.org
-  haiyangz-0li6OtcxBFHby3iVrkZq2A@public.gmane.org
-  maarten.lankhorst-VuQAYsv1563Yd54FQh9/CA@public.gmane.org
-  jglisse-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org
-  seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org
-  bhelgaas-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org
-  tglx-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org
-  yinghai-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org
-  jonathan.derrick-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org
-  chris-YvXeqwSYzG2sTnJN9+BGXg@public.gmane.org
-  monstr-pSz03upnqPeHXe+LvDLADg@public.gmane.org
-  linux-parisc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
-  gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org
-  dmitry.torokhov-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
- " Benjamin\0"
+ "To\0linux-kernel@vger.kernel.org"
+  akpm@linux-foundation.org
+  robh+dt@kernel.org
+  dan.j.williams@intel.com
+  nicolas.pitre@linaro.org
+  josh@joshtriplett.org
+  fengguang.wu@intel.com
+  bp@suse.de
+ " andy.shevchenko@gmail.com\0"
+ "Cc\0linux-mips@linux-mips.org"
+  brijesh.singh@amd.com
+  devicetree@vger.kernel.org
+  airlied@linux.ie
+  linux-pci@vger.kernel.org
+  richard.weiyang@gmail.com
+  jcmvbkbc@gmail.com
+  Paul Mackerras <paulus@samba.org>
+  baiyaowei@cmss.chinamobile.com
+  kys@microsoft.com
+  frowand.list@gmail.com
+  lorenzo.pieralisi@arm.com
+  sthemmin@microsoft.com
+  Baoquan He <bhe@redhat.com>
+  linux-nvdimm@lists.01.org
+  Michael Ellerman <mpe@ellerman.id.au>
+  patrik.r.jakobsson@gmail.com
+  linux-input@vger.kernel.org
+  gustavo@padovan.org
+  dyoung@redhat.com
+  thomas.lendacky@amd.com
+  haiyangz@microsoft.com
+  maarten.lankhorst@linux.intel.com
+  jglisse@redhat.com
+  seanpaul@chromium.org
+  bhelgaas@google.com
+  tglx@linutronix.de
+  yinghai@kernel.org
+  jonathan.derrick@intel.com
+  chris@zankel.net
+  monstr@monstr.eu
+  linux-parisc@vger.kernel.org
+  gregkh@linuxfoundation.org
+  dmitry.torokhov@gmail.com
+  Benjamin Herrenschmidt <benh@kernel.crashing.org>
+  ebiederm@xmission.com
+  devel@linuxdriverproject.org
+  linuxppc-dev@lists.ozlabs.org
+ " davem@davemloft.net\0"
  "\00:1\0"
  "b\0"
  "The struct resource uses singly linked list to link siblings, implemented\n"
@@ -1128,4 +1131,4 @@
  "Linux-nvdimm@lists.01.org\n"
  https://lists.01.org/mailman/listinfo/linux-nvdimm
 
-7e6896005789564cf729788af5ebca9691c03db6b1f6cbf1ba378f12c11356e0
+3a8d455ff872f30432d52a19907000dc64a9db0bf412b248a2ce84248153a6ba

diff --git a/a/1.txt b/N3/1.txt
index 20a448f..3d9c25a 100644
--- a/a/1.txt
+++ b/N3/1.txt
@@ -1,1078 +1,607 @@
-The struct resource uses singly linked list to link siblings, implemented
-by pointer operation. Replace it with list_head for better code readability.
-
-Based on this list_head replacement, it will be very easy to do reverse
-iteration on iomem_resource's sibling list in later patch.
-
-Besides, type of member variables of struct resource, sibling and child, are
-changed from 'struct resource *' to 'struct list_head'. This brings two
-pointers of size increase.
-
-Suggested-by: Andrew Morton <akpm@linux-foundation.org>
-Signed-off-by: Baoquan He <bhe@redhat.com>
-Cc: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
-Cc: David Airlie <airlied@linux.ie>
-Cc: "K. Y. Srinivasan" <kys@microsoft.com>
-Cc: Haiyang Zhang <haiyangz@microsoft.com>
-Cc: Stephen Hemminger <sthemmin@microsoft.com>
-Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
-Cc: Dan Williams <dan.j.williams@intel.com>
-Cc: Rob Herring <robh+dt@kernel.org>
-Cc: Frank Rowand <frowand.list@gmail.com>
-Cc: Keith Busch <keith.busch@intel.com>
-Cc: Jonathan Derrick <jonathan.derrick@intel.com>
-Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
-Cc: Bjorn Helgaas <bhelgaas@google.com>
-Cc: Thomas Gleixner <tglx@linutronix.de>
-Cc: Brijesh Singh <brijesh.singh@amd.com>
-Cc: "Jérôme Glisse" <jglisse@redhat.com>
-Cc: Borislav Petkov <bp@suse.de>
-Cc: Tom Lendacky <thomas.lendacky@amd.com>
-Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Cc: Yaowei Bai <baiyaowei@cmss.chinamobile.com>
-Cc: Wei Yang <richard.weiyang@gmail.com>
-Cc: devel@linuxdriverproject.org
-Cc: linux-input@vger.kernel.org
-Cc: linux-nvdimm@lists.01.org
-Cc: devicetree@vger.kernel.org
-Cc: linux-pci@vger.kernel.org
-Cc: Michal Simek <monstr@monstr.eu>
-Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>                                                                                             
-Cc: Paul Mackerras <paulus@samba.org>
-Cc: Michael Ellerman <mpe@ellerman.id.au>
-Cc: linux-mips@linux-mips.org
----
- arch/arm/plat-samsung/pm-check.c            |   6 +-
- arch/ia64/sn/kernel/io_init.c               |   2 +-
- arch/microblaze/pci/pci-common.c            |   4 +-
- arch/mips/pci/pci-rc32434.c                 |  12 +-
- arch/powerpc/kernel/pci-common.c            |   4 +-
- arch/sparc/kernel/ioport.c                  |   2 +-
- arch/xtensa/include/asm/pci-bridge.h        |   4 +-
- drivers/eisa/eisa-bus.c                     |   2 +
- drivers/gpu/drm/drm_memory.c                |   3 +-
- drivers/gpu/drm/gma500/gtt.c                |   5 +-
- drivers/hv/vmbus_drv.c                      |  52 +++----
- drivers/input/joystick/iforce/iforce-main.c |   4 +-
- drivers/nvdimm/namespace_devs.c             |   6 +-
- drivers/nvdimm/nd.h                         |   5 +-
- drivers/of/address.c                        |   4 +-
- drivers/parisc/lba_pci.c                    |   4 +-
- drivers/pci/controller/vmd.c                |   8 +-
- drivers/pci/probe.c                         |   2 +
- drivers/pci/setup-bus.c                     |   2 +-
- include/linux/ioport.h                      |  17 ++-
- kernel/resource.c                           | 206 ++++++++++++++--------------
- 21 files changed, 183 insertions(+), 171 deletions(-)
-
-diff --git a/arch/arm/plat-samsung/pm-check.c b/arch/arm/plat-samsung/pm-check.c
-index cd2c02c68bc3..5494355b1c49 100644
---- a/arch/arm/plat-samsung/pm-check.c
-+++ b/arch/arm/plat-samsung/pm-check.c
-@@ -46,8 +46,8 @@ typedef u32 *(run_fn_t)(struct resource *ptr, u32 *arg);
- static void s3c_pm_run_res(struct resource *ptr, run_fn_t fn, u32 *arg)
- {
- 	while (ptr != NULL) {
--		if (ptr->child != NULL)
--			s3c_pm_run_res(ptr->child, fn, arg);
-+		if (!list_empty(&ptr->child))
-+			s3c_pm_run_res(resource_first_child(&ptr->child), fn, arg);
- 
- 		if ((ptr->flags & IORESOURCE_SYSTEM_RAM)
- 				== IORESOURCE_SYSTEM_RAM) {
-@@ -57,7 +57,7 @@ static void s3c_pm_run_res(struct resource *ptr, run_fn_t fn, u32 *arg)
- 			arg = (fn)(ptr, arg);
- 		}
- 
--		ptr = ptr->sibling;
-+		ptr = resource_sibling(ptr);
- 	}
- }
- 
-diff --git a/arch/ia64/sn/kernel/io_init.c b/arch/ia64/sn/kernel/io_init.c
-index d63809a6adfa..338a7b7f194d 100644
---- a/arch/ia64/sn/kernel/io_init.c
-+++ b/arch/ia64/sn/kernel/io_init.c
-@@ -192,7 +192,7 @@ sn_io_slot_fixup(struct pci_dev *dev)
- 		 * if it's already in the device structure, remove it before
- 		 * inserting
- 		 */
--		if (res->parent && res->parent->child)
-+		if (res->parent && !list_empty(&res->parent->child))
- 			release_resource(res);
- 
- 		if (res->flags & IORESOURCE_IO)
-diff --git a/arch/microblaze/pci/pci-common.c b/arch/microblaze/pci/pci-common.c
-index 7899bafab064..2bf73e27e231 100644
---- a/arch/microblaze/pci/pci-common.c
-+++ b/arch/microblaze/pci/pci-common.c
-@@ -533,7 +533,9 @@ void pci_process_bridge_OF_ranges(struct pci_controller *hose,
- 			res->flags = range.flags;
- 			res->start = range.cpu_addr;
- 			res->end = range.cpu_addr + range.size - 1;
--			res->parent = res->child = res->sibling = NULL;
-+			res->parent = NULL;
-+			INIT_LIST_HEAD(&res->child);
-+			INIT_LIST_HEAD(&res->sibling);
- 		}
- 	}
- 
-diff --git a/arch/mips/pci/pci-rc32434.c b/arch/mips/pci/pci-rc32434.c
-index 7f6ce6d734c0..e80283df7925 100644
---- a/arch/mips/pci/pci-rc32434.c
-+++ b/arch/mips/pci/pci-rc32434.c
-@@ -53,8 +53,8 @@ static struct resource rc32434_res_pci_mem1 = {
- 	.start = 0x50000000,
- 	.end = 0x5FFFFFFF,
- 	.flags = IORESOURCE_MEM,
--	.sibling = NULL,
--	.child = &rc32434_res_pci_mem2
-+	.sibling = LIST_HEAD_INIT(rc32434_res_pci_mem1.sibling),
-+	.child = LIST_HEAD_INIT(rc32434_res_pci_mem1.child),
- };
- 
- static struct resource rc32434_res_pci_mem2 = {
-@@ -63,8 +63,8 @@ static struct resource rc32434_res_pci_mem2 = {
- 	.end = 0x6FFFFFFF,
- 	.flags = IORESOURCE_MEM,
- 	.parent = &rc32434_res_pci_mem1,
--	.sibling = NULL,
--	.child = NULL
-+	.sibling = LIST_HEAD_INIT(rc32434_res_pci_mem2.sibling),
-+	.child = LIST_HEAD_INIT(rc32434_res_pci_mem2.child),
- };
- 
- static struct resource rc32434_res_pci_io1 = {
-@@ -72,6 +72,8 @@ static struct resource rc32434_res_pci_io1 = {
- 	.start = 0x18800000,
- 	.end = 0x188FFFFF,
- 	.flags = IORESOURCE_IO,
-+	.sibling = LIST_HEAD_INIT(rc32434_res_pci_io1.sibling),
-+	.child = LIST_HEAD_INIT(rc32434_res_pci_io1.child),
- };
- 
- extern struct pci_ops rc32434_pci_ops;
-@@ -208,6 +210,8 @@ static int __init rc32434_pci_init(void)
- 
- 	pr_info("PCI: Initializing PCI\n");
- 
-+	list_add(&rc32434_res_pci_mem2.sibling, &rc32434_res_pci_mem1.child);
-+
- 	ioport_resource.start = rc32434_res_pci_io1.start;
- 	ioport_resource.end = rc32434_res_pci_io1.end;
- 
-diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c
-index 926035bb378d..28fbe83c9daf 100644
---- a/arch/powerpc/kernel/pci-common.c
-+++ b/arch/powerpc/kernel/pci-common.c
-@@ -761,7 +761,9 @@ void pci_process_bridge_OF_ranges(struct pci_controller *hose,
- 			res->flags = range.flags;
- 			res->start = range.cpu_addr;
- 			res->end = range.cpu_addr + range.size - 1;
--			res->parent = res->child = res->sibling = NULL;
-+			res->parent = NULL;
-+			INIT_LIST_HEAD(&res->child);
-+			INIT_LIST_HEAD(&res->sibling);
- 		}
- 	}
- }
-diff --git a/arch/sparc/kernel/ioport.c b/arch/sparc/kernel/ioport.c
-index cca9134cfa7d..99efe4e98b16 100644
---- a/arch/sparc/kernel/ioport.c
-+++ b/arch/sparc/kernel/ioport.c
-@@ -669,7 +669,7 @@ static int sparc_io_proc_show(struct seq_file *m, void *v)
- 	struct resource *root = m->private, *r;
- 	const char *nm;
- 
--	for (r = root->child; r != NULL; r = r->sibling) {
-+	list_for_each_entry(r, &root->child, sibling) {
- 		if ((nm = r->name) == NULL) nm = "???";
- 		seq_printf(m, "%016llx-%016llx: %s\n",
- 				(unsigned long long)r->start,
-diff --git a/arch/xtensa/include/asm/pci-bridge.h b/arch/xtensa/include/asm/pci-bridge.h
-index 0b68c76ec1e6..f487b06817df 100644
---- a/arch/xtensa/include/asm/pci-bridge.h
-+++ b/arch/xtensa/include/asm/pci-bridge.h
-@@ -71,8 +71,8 @@ static inline void pcibios_init_resource(struct resource *res,
- 	res->flags = flags;
- 	res->name = name;
- 	res->parent = NULL;
--	res->sibling = NULL;
--	res->child = NULL;
-+	INIT_LIST_HEAD(&res->child);
-+	INIT_LIST_HEAD(&res->sibling);
- }
- 
- 
-diff --git a/drivers/eisa/eisa-bus.c b/drivers/eisa/eisa-bus.c
-index 1e8062f6dbfc..dba78f75fd06 100644
---- a/drivers/eisa/eisa-bus.c
-+++ b/drivers/eisa/eisa-bus.c
-@@ -408,6 +408,8 @@ static struct resource eisa_root_res = {
- 	.start = 0,
- 	.end   = 0xffffffff,
- 	.flags = IORESOURCE_IO,
-+	.sibling = LIST_HEAD_INIT(eisa_root_res.sibling),
-+	.child  = LIST_HEAD_INIT(eisa_root_res.child),
- };
- 
- static int eisa_bus_count;
-diff --git a/drivers/gpu/drm/drm_memory.c b/drivers/gpu/drm/drm_memory.c
-index d69e4fc1ee77..33baa7fa5e41 100644
---- a/drivers/gpu/drm/drm_memory.c
-+++ b/drivers/gpu/drm/drm_memory.c
-@@ -155,9 +155,8 @@ u64 drm_get_max_iomem(void)
- 	struct resource *tmp;
- 	resource_size_t max_iomem = 0;
- 
--	for (tmp = iomem_resource.child; tmp; tmp = tmp->sibling) {
-+	list_for_each_entry(tmp, &iomem_resource.child, sibling)
- 		max_iomem = max(max_iomem,  tmp->end);
--	}
- 
- 	return max_iomem;
- }
-diff --git a/drivers/gpu/drm/gma500/gtt.c b/drivers/gpu/drm/gma500/gtt.c
-index 3949b0990916..addd3bc009af 100644
---- a/drivers/gpu/drm/gma500/gtt.c
-+++ b/drivers/gpu/drm/gma500/gtt.c
-@@ -565,7 +565,7 @@ int psb_gtt_init(struct drm_device *dev, int resume)
- int psb_gtt_restore(struct drm_device *dev)
- {
- 	struct drm_psb_private *dev_priv = dev->dev_private;
--	struct resource *r = dev_priv->gtt_mem->child;
-+	struct resource *r;
- 	struct gtt_range *range;
- 	unsigned int restored = 0, total = 0, size = 0;
- 
-@@ -573,14 +573,13 @@ int psb_gtt_restore(struct drm_device *dev)
- 	mutex_lock(&dev_priv->gtt_mutex);
- 	psb_gtt_init(dev, 1);
- 
--	while (r != NULL) {
-+	list_for_each_entry(r, &dev_priv->gtt_mem->child, sibling) {
- 		range = container_of(r, struct gtt_range, resource);
- 		if (range->pages) {
- 			psb_gtt_insert(dev, range, 1);
- 			size += range->resource.end - range->resource.start;
- 			restored++;
- 		}
--		r = r->sibling;
- 		total++;
- 	}
- 	mutex_unlock(&dev_priv->gtt_mutex);
-diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c
-index b10fe26c4891..d87ec5a1bc4c 100644
---- a/drivers/hv/vmbus_drv.c
-+++ b/drivers/hv/vmbus_drv.c
-@@ -1412,9 +1412,8 @@ static acpi_status vmbus_walk_resources(struct acpi_resource *res, void *ctx)
- {
- 	resource_size_t start = 0;
- 	resource_size_t end = 0;
--	struct resource *new_res;
-+	struct resource *new_res, *tmp;
- 	struct resource **old_res = &hyperv_mmio;
--	struct resource **prev_res = NULL;
- 
- 	switch (res->type) {
- 
-@@ -1461,44 +1460,36 @@ static acpi_status vmbus_walk_resources(struct acpi_resource *res, void *ctx)
- 	/*
- 	 * If two ranges are adjacent, merge them.
- 	 */
--	do {
--		if (!*old_res) {
--			*old_res = new_res;
--			break;
--		}
--
--		if (((*old_res)->end + 1) == new_res->start) {
--			(*old_res)->end = new_res->end;
-+	if (!*old_res) {
-+		*old_res = new_res;
-+		return AE_OK;
-+	}
-+	tmp = *old_res;
-+	list_for_each_entry_from(tmp, &tmp->parent->child, sibling) {
-+		if ((tmp->end + 1) == new_res->start) {
-+			tmp->end = new_res->end;
- 			kfree(new_res);
- 			break;
- 		}
- 
--		if ((*old_res)->start == new_res->end + 1) {
--			(*old_res)->start = new_res->start;
-+		if (tmp->start == new_res->end + 1) {
-+			tmp->start = new_res->start;
- 			kfree(new_res);
- 			break;
- 		}
- 
--		if ((*old_res)->start > new_res->end) {
--			new_res->sibling = *old_res;
--			if (prev_res)
--				(*prev_res)->sibling = new_res;
--			*old_res = new_res;
-+		if (tmp->start > new_res->end) {
-+			list_add(&new_res->sibling, tmp->sibling.prev);
- 			break;
- 		}
--
--		prev_res = old_res;
--		old_res = &(*old_res)->sibling;
--
--	} while (1);
-+	}
- 
- 	return AE_OK;
- }
- 
- static int vmbus_acpi_remove(struct acpi_device *device)
- {
--	struct resource *cur_res;
--	struct resource *next_res;
-+	struct resource *res;
- 
- 	if (hyperv_mmio) {
- 		if (fb_mmio) {
-@@ -1507,10 +1498,9 @@ static int vmbus_acpi_remove(struct acpi_device *device)
- 			fb_mmio = NULL;
- 		}
- 
--		for (cur_res = hyperv_mmio; cur_res; cur_res = next_res) {
--			next_res = cur_res->sibling;
--			kfree(cur_res);
--		}
-+		res = hyperv_mmio;
-+		list_for_each_entry_from(res, &res->parent->child, sibling)
-+			kfree(res);
- 	}
- 
- 	return 0;
-@@ -1596,7 +1586,8 @@ int vmbus_allocate_mmio(struct resource **new, struct hv_device *device_obj,
- 		}
- 	}
- 
--	for (iter = hyperv_mmio; iter; iter = iter->sibling) {
-+	iter = hyperv_mmio;
-+	list_for_each_entry_from(iter, &iter->parent->child, sibling) {
- 		if ((iter->start >= max) || (iter->end <= min))
- 			continue;
- 
-@@ -1639,7 +1630,8 @@ void vmbus_free_mmio(resource_size_t start, resource_size_t size)
- 	struct resource *iter;
- 
- 	down(&hyperv_mmio_lock);
--	for (iter = hyperv_mmio; iter; iter = iter->sibling) {
-+	iter = hyperv_mmio;
-+	list_for_each_entry_from(iter, &iter->parent->child, sibling) {
- 		if ((iter->start >= start + size) || (iter->end <= start))
- 			continue;
- 
-diff --git a/drivers/input/joystick/iforce/iforce-main.c b/drivers/input/joystick/iforce/iforce-main.c
-index daeeb4c7e3b0..5c0be27b33ff 100644
---- a/drivers/input/joystick/iforce/iforce-main.c
-+++ b/drivers/input/joystick/iforce/iforce-main.c
-@@ -305,8 +305,8 @@ int iforce_init_device(struct iforce *iforce)
- 	iforce->device_memory.end = 200;
- 	iforce->device_memory.flags = IORESOURCE_MEM;
- 	iforce->device_memory.parent = NULL;
--	iforce->device_memory.child = NULL;
--	iforce->device_memory.sibling = NULL;
-+	INIT_LIST_HEAD(&iforce->device_memory.child);
-+	INIT_LIST_HEAD(&iforce->device_memory.sibling);
- 
- /*
-  * Wait until device ready - until it sends its first response.
-diff --git a/drivers/nvdimm/namespace_devs.c b/drivers/nvdimm/namespace_devs.c
-index 28afdd668905..f53d410d9981 100644
---- a/drivers/nvdimm/namespace_devs.c
-+++ b/drivers/nvdimm/namespace_devs.c
-@@ -637,7 +637,7 @@ static resource_size_t scan_allocate(struct nd_region *nd_region,
-  retry:
- 	first = 0;
- 	for_each_dpa_resource(ndd, res) {
--		struct resource *next = res->sibling, *new_res = NULL;
-+		struct resource *next = resource_sibling(res), *new_res = NULL;
- 		resource_size_t allocate, available = 0;
- 		enum alloc_loc loc = ALLOC_ERR;
- 		const char *action;
-@@ -763,7 +763,7 @@ static resource_size_t scan_allocate(struct nd_region *nd_region,
- 	 * an initial "pmem-reserve pass".  Only do an initial BLK allocation
- 	 * when none of the DPA space is reserved.
- 	 */
--	if ((is_pmem || !ndd->dpa.child) && n == to_allocate)
-+	if ((is_pmem || list_empty(&ndd->dpa.child)) && n == to_allocate)
- 		return init_dpa_allocation(label_id, nd_region, nd_mapping, n);
- 	return n;
- }
-@@ -779,7 +779,7 @@ static int merge_dpa(struct nd_region *nd_region,
-  retry:
- 	for_each_dpa_resource(ndd, res) {
- 		int rc;
--		struct resource *next = res->sibling;
-+		struct resource *next = resource_sibling(res);
- 		resource_size_t end = res->start + resource_size(res);
- 
- 		if (!next || strcmp(res->name, label_id->id) != 0
-diff --git a/drivers/nvdimm/nd.h b/drivers/nvdimm/nd.h
-index 32e0364b48b9..da7da15e03e7 100644
---- a/drivers/nvdimm/nd.h
-+++ b/drivers/nvdimm/nd.h
-@@ -102,11 +102,10 @@ unsigned sizeof_namespace_label(struct nvdimm_drvdata *ndd);
- 		(unsigned long long) (res ? res->start : 0), ##arg)
- 
- #define for_each_dpa_resource(ndd, res) \
--	for (res = (ndd)->dpa.child; res; res = res->sibling)
-+	list_for_each_entry(res, &(ndd)->dpa.child, sibling)
- 
- #define for_each_dpa_resource_safe(ndd, res, next) \
--	for (res = (ndd)->dpa.child, next = res ? res->sibling : NULL; \
--			res; res = next, next = next ? next->sibling : NULL)
-+	list_for_each_entry_safe(res, next, &(ndd)->dpa.child, sibling)
- 
- struct nd_percpu_lane {
- 	int count;
-diff --git a/drivers/of/address.c b/drivers/of/address.c
-index 53349912ac75..e2e25719ab52 100644
---- a/drivers/of/address.c
-+++ b/drivers/of/address.c
-@@ -330,7 +330,9 @@ int of_pci_range_to_resource(struct of_pci_range *range,
- {
- 	int err;
- 	res->flags = range->flags;
--	res->parent = res->child = res->sibling = NULL;
-+	res->parent = NULL;
-+	INIT_LIST_HEAD(&res->child);
-+	INIT_LIST_HEAD(&res->sibling);
- 	res->name = np->full_name;
- 
- 	if (res->flags & IORESOURCE_IO) {
-diff --git a/drivers/parisc/lba_pci.c b/drivers/parisc/lba_pci.c
-index 69bd98421eb1..7482bdfd1959 100644
---- a/drivers/parisc/lba_pci.c
-+++ b/drivers/parisc/lba_pci.c
-@@ -170,8 +170,8 @@ lba_dump_res(struct resource *r, int d)
- 	for (i = d; i ; --i) printk(" ");
- 	printk(KERN_DEBUG "%p [%lx,%lx]/%lx\n", r,
- 		(long)r->start, (long)r->end, r->flags);
--	lba_dump_res(r->child, d+2);
--	lba_dump_res(r->sibling, d);
-+	lba_dump_res(resource_first_child(&r->child), d+2);
-+	lba_dump_res(resource_sibling(r), d);
- }
- 
- 
-diff --git a/drivers/pci/controller/vmd.c b/drivers/pci/controller/vmd.c
-index 942b64fc7f1f..e3ace20345c7 100644
---- a/drivers/pci/controller/vmd.c
-+++ b/drivers/pci/controller/vmd.c
-@@ -542,14 +542,14 @@ static struct pci_ops vmd_ops = {
- 
- static void vmd_attach_resources(struct vmd_dev *vmd)
- {
--	vmd->dev->resource[VMD_MEMBAR1].child = &vmd->resources[1];
--	vmd->dev->resource[VMD_MEMBAR2].child = &vmd->resources[2];
-+	list_add(&vmd->resources[1].sibling, &vmd->dev->resource[VMD_MEMBAR1].child);
-+	list_add(&vmd->resources[2].sibling, &vmd->dev->resource[VMD_MEMBAR2].child);
- }
- 
- static void vmd_detach_resources(struct vmd_dev *vmd)
- {
--	vmd->dev->resource[VMD_MEMBAR1].child = NULL;
--	vmd->dev->resource[VMD_MEMBAR2].child = NULL;
-+	INIT_LIST_HEAD(&vmd->dev->resource[VMD_MEMBAR1].child);
-+	INIT_LIST_HEAD(&vmd->dev->resource[VMD_MEMBAR2].child);
- }
- 
- /*
-diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
-index ac876e32de4b..9624dd1dfd49 100644
---- a/drivers/pci/probe.c
-+++ b/drivers/pci/probe.c
-@@ -59,6 +59,8 @@ static struct resource *get_pci_domain_busn_res(int domain_nr)
- 	r->res.start = 0;
- 	r->res.end = 0xff;
- 	r->res.flags = IORESOURCE_BUS | IORESOURCE_PCI_FIXED;
-+	INIT_LIST_HEAD(&r->res.child);
-+	INIT_LIST_HEAD(&r->res.sibling);
- 
- 	list_add_tail(&r->list, &pci_domain_busn_res_list);
- 
-diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c
-index 79b1824e83b4..8e685af8938d 100644
---- a/drivers/pci/setup-bus.c
-+++ b/drivers/pci/setup-bus.c
-@@ -2107,7 +2107,7 @@ int pci_reassign_bridge_resources(struct pci_dev *bridge, unsigned long type)
- 				continue;
- 
- 			/* Ignore BARs which are still in use */
--			if (res->child)
-+			if (!list_empty(&res->child))
- 				continue;
- 
- 			ret = add_to_list(&saved, bridge, res, 0, 0);
-diff --git a/include/linux/ioport.h b/include/linux/ioport.h
-index dfdcd0bfe54e..b7456ae889dd 100644
---- a/include/linux/ioport.h
-+++ b/include/linux/ioport.h
-@@ -12,6 +12,7 @@
- #ifndef __ASSEMBLY__
- #include <linux/compiler.h>
- #include <linux/types.h>
-+#include <linux/list.h>
- /*
-  * Resources are tree-like, allowing
-  * nesting etc..
-@@ -22,7 +23,8 @@ struct resource {
- 	const char *name;
- 	unsigned long flags;
- 	unsigned long desc;
--	struct resource *parent, *sibling, *child;
-+	struct list_head child, sibling;
-+	struct resource *parent;
- };
- 
- /*
-@@ -216,7 +218,6 @@ static inline bool resource_contains(struct resource *r1, struct resource *r2)
- 	return r1->start <= r2->start && r1->end >= r2->end;
- }
- 
--
- /* Convenience shorthand with allocation */
- #define request_region(start,n,name)		__request_region(&ioport_resource, (start), (n), (name), 0)
- #define request_muxed_region(start,n,name)	__request_region(&ioport_resource, (start), (n), (name), IORESOURCE_MUXED)
-@@ -287,6 +288,18 @@ static inline bool resource_overlaps(struct resource *r1, struct resource *r2)
-        return (r1->start <= r2->end && r1->end >= r2->start);
- }
- 
-+static inline struct resource *resource_sibling(struct resource *res)
-+{
-+	if (res->parent && !list_is_last(&res->sibling, &res->parent->child))
-+		return list_next_entry(res, sibling);
-+	return NULL;
-+}
-+
-+static inline struct resource *resource_first_child(struct list_head *head)
-+{
-+	return list_first_entry_or_null(head, struct resource, sibling);
-+}
-+
- 
- #endif /* __ASSEMBLY__ */
- #endif	/* _LINUX_IOPORT_H */
-diff --git a/kernel/resource.c b/kernel/resource.c
-index 81ccd19c1d9f..c96e58d3d2f8 100644
---- a/kernel/resource.c
-+++ b/kernel/resource.c
-@@ -31,6 +31,8 @@ struct resource ioport_resource = {
- 	.start	= 0,
- 	.end	= IO_SPACE_LIMIT,
- 	.flags	= IORESOURCE_IO,
-+	.sibling = LIST_HEAD_INIT(ioport_resource.sibling),
-+	.child  = LIST_HEAD_INIT(ioport_resource.child),
- };
- EXPORT_SYMBOL(ioport_resource);
- 
-@@ -39,6 +41,8 @@ struct resource iomem_resource = {
- 	.start	= 0,
- 	.end	= -1,
- 	.flags	= IORESOURCE_MEM,
-+	.sibling = LIST_HEAD_INIT(iomem_resource.sibling),
-+	.child  = LIST_HEAD_INIT(iomem_resource.child),
- };
- EXPORT_SYMBOL(iomem_resource);
- 
-@@ -57,20 +61,20 @@ static DEFINE_RWLOCK(resource_lock);
-  * by boot mem after the system is up. So for reusing the resource entry
-  * we need to remember the resource.
-  */
--static struct resource *bootmem_resource_free;
-+static struct list_head bootmem_resource_free = LIST_HEAD_INIT(bootmem_resource_free);
- static DEFINE_SPINLOCK(bootmem_resource_lock);
- 
- static struct resource *next_resource(struct resource *p, bool sibling_only)
- {
- 	/* Caller wants to traverse through siblings only */
- 	if (sibling_only)
--		return p->sibling;
-+		return resource_sibling(p);
- 
--	if (p->child)
--		return p->child;
--	while (!p->sibling && p->parent)
-+	if (!list_empty(&p->child))
-+		return resource_first_child(&p->child);
-+	while (!resource_sibling(p) && p->parent)
- 		p = p->parent;
--	return p->sibling;
-+	return resource_sibling(p);
- }
- 
- static void *r_next(struct seq_file *m, void *v, loff_t *pos)
-@@ -90,7 +94,7 @@ static void *r_start(struct seq_file *m, loff_t *pos)
- 	struct resource *p = PDE_DATA(file_inode(m->file));
- 	loff_t l = 0;
- 	read_lock(&resource_lock);
--	for (p = p->child; p && l < *pos; p = r_next(m, p, &l))
-+	for (p = resource_first_child(&p->child); p && l < *pos; p = r_next(m, p, &l))
- 		;
- 	return p;
- }
-@@ -153,8 +157,7 @@ static void free_resource(struct resource *res)
- 
- 	if (!PageSlab(virt_to_head_page(res))) {
- 		spin_lock(&bootmem_resource_lock);
--		res->sibling = bootmem_resource_free;
--		bootmem_resource_free = res;
-+		list_add(&res->sibling, &bootmem_resource_free);
- 		spin_unlock(&bootmem_resource_lock);
- 	} else {
- 		kfree(res);
-@@ -166,10 +169,9 @@ static struct resource *alloc_resource(gfp_t flags)
- 	struct resource *res = NULL;
- 
- 	spin_lock(&bootmem_resource_lock);
--	if (bootmem_resource_free) {
--		res = bootmem_resource_free;
--		bootmem_resource_free = res->sibling;
--	}
-+	res = resource_first_child(&bootmem_resource_free);
-+	if (res)
-+		list_del(&res->sibling);
- 	spin_unlock(&bootmem_resource_lock);
- 
- 	if (res)
-@@ -177,6 +179,8 @@ static struct resource *alloc_resource(gfp_t flags)
- 	else
- 		res = kzalloc(sizeof(struct resource), flags);
- 
-+	INIT_LIST_HEAD(&res->child);
-+	INIT_LIST_HEAD(&res->sibling);
- 	return res;
- }
- 
-@@ -185,7 +189,7 @@ static struct resource * __request_resource(struct resource *root, struct resour
- {
- 	resource_size_t start = new->start;
- 	resource_size_t end = new->end;
--	struct resource *tmp, **p;
-+	struct resource *tmp;
- 
- 	if (end < start)
- 		return root;
-@@ -193,64 +197,62 @@ static struct resource * __request_resource(struct resource *root, struct resour
- 		return root;
- 	if (end > root->end)
- 		return root;
--	p = &root->child;
--	for (;;) {
--		tmp = *p;
--		if (!tmp || tmp->start > end) {
--			new->sibling = tmp;
--			*p = new;
-+
-+	if (list_empty(&root->child)) {
-+		list_add(&new->sibling, &root->child);
-+		new->parent = root;
-+		INIT_LIST_HEAD(&new->child);
-+		return NULL;
-+	}
-+
-+	list_for_each_entry(tmp, &root->child, sibling) {
-+		if (tmp->start > end) {
-+			list_add(&new->sibling, tmp->sibling.prev);
- 			new->parent = root;
-+			INIT_LIST_HEAD(&new->child);
- 			return NULL;
- 		}
--		p = &tmp->sibling;
- 		if (tmp->end < start)
- 			continue;
- 		return tmp;
- 	}
-+
-+	list_add_tail(&new->sibling, &root->child);
-+	new->parent = root;
-+	INIT_LIST_HEAD(&new->child);
-+	return NULL;
- }
- 
- static int __release_resource(struct resource *old, bool release_child)
- {
--	struct resource *tmp, **p, *chd;
-+	struct resource *tmp, *next, *chd;
- 
--	p = &old->parent->child;
--	for (;;) {
--		tmp = *p;
--		if (!tmp)
--			break;
-+	list_for_each_entry_safe(tmp, next, &old->parent->child, sibling) {
- 		if (tmp == old) {
--			if (release_child || !(tmp->child)) {
--				*p = tmp->sibling;
-+			if (release_child || list_empty(&tmp->child)) {
-+				list_del(&tmp->sibling);
- 			} else {
--				for (chd = tmp->child;; chd = chd->sibling) {
-+				list_for_each_entry(chd, &tmp->child, sibling)
- 					chd->parent = tmp->parent;
--					if (!(chd->sibling))
--						break;
--				}
--				*p = tmp->child;
--				chd->sibling = tmp->sibling;
-+				list_splice(&tmp->child, tmp->sibling.prev);
-+				list_del(&tmp->sibling);
- 			}
-+
- 			old->parent = NULL;
- 			return 0;
- 		}
--		p = &tmp->sibling;
- 	}
- 	return -EINVAL;
- }
- 
- static void __release_child_resources(struct resource *r)
- {
--	struct resource *tmp, *p;
-+	struct resource *tmp, *next;
- 	resource_size_t size;
- 
--	p = r->child;
--	r->child = NULL;
--	while (p) {
--		tmp = p;
--		p = p->sibling;
--
-+	list_for_each_entry_safe(tmp, next, &r->child, sibling) {
- 		tmp->parent = NULL;
--		tmp->sibling = NULL;
-+		list_del_init(&tmp->sibling);
- 		__release_child_resources(tmp);
- 
- 		printk(KERN_DEBUG "release child resource %pR\n", tmp);
-@@ -259,6 +261,8 @@ static void __release_child_resources(struct resource *r)
- 		tmp->start = 0;
- 		tmp->end = size - 1;
- 	}
-+
-+	INIT_LIST_HEAD(&tmp->child);
- }
- 
- void release_child_resources(struct resource *r)
-@@ -343,7 +347,8 @@ static int find_next_iomem_res(struct resource *res, unsigned long desc,
- 
- 	read_lock(&resource_lock);
- 
--	for (p = iomem_resource.child; p; p = next_resource(p, sibling_only)) {
-+	for (p = resource_first_child(&iomem_resource.child); p;
-+			p = next_resource(p, sibling_only)) {
- 		if ((p->flags & res->flags) != res->flags)
- 			continue;
- 		if ((desc != IORES_DESC_NONE) && (desc != p->desc))
-@@ -532,7 +537,7 @@ int region_intersects(resource_size_t start, size_t size, unsigned long flags,
- 	struct resource *p;
- 
- 	read_lock(&resource_lock);
--	for (p = iomem_resource.child; p ; p = p->sibling) {
-+	list_for_each_entry(p, &iomem_resource.child, sibling) {
- 		bool is_type = (((p->flags & flags) == flags) &&
- 				((desc == IORES_DESC_NONE) ||
- 				 (desc == p->desc)));
-@@ -586,7 +591,7 @@ static int __find_resource(struct resource *root, struct resource *old,
- 			 resource_size_t  size,
- 			 struct resource_constraint *constraint)
- {
--	struct resource *this = root->child;
-+	struct resource *this = resource_first_child(&root->child);
- 	struct resource tmp = *new, avail, alloc;
- 
- 	tmp.start = root->start;
-@@ -596,7 +601,7 @@ static int __find_resource(struct resource *root, struct resource *old,
- 	 */
- 	if (this && this->start == root->start) {
- 		tmp.start = (this == old) ? old->start : this->end + 1;
--		this = this->sibling;
-+		this = resource_sibling(this);
- 	}
- 	for(;;) {
- 		if (this)
-@@ -632,7 +637,7 @@ next:		if (!this || this->end == root->end)
- 
- 		if (this != old)
- 			tmp.start = this->end + 1;
--		this = this->sibling;
-+		this = resource_sibling(this);
- 	}
- 	return -EBUSY;
- }
-@@ -676,7 +681,7 @@ static int reallocate_resource(struct resource *root, struct resource *old,
- 		goto out;
- 	}
- 
--	if (old->child) {
-+	if (!list_empty(&old->child)) {
- 		err = -EBUSY;
- 		goto out;
- 	}
-@@ -757,7 +762,7 @@ struct resource *lookup_resource(struct resource *root, resource_size_t start)
- 	struct resource *res;
- 
- 	read_lock(&resource_lock);
--	for (res = root->child; res; res = res->sibling) {
-+	list_for_each_entry(res, &root->child, sibling) {
- 		if (res->start == start)
- 			break;
- 	}
-@@ -790,32 +795,27 @@ static struct resource * __insert_resource(struct resource *parent, struct resou
- 			break;
- 	}
- 
--	for (next = first; ; next = next->sibling) {
-+	for (next = first; ; next = resource_sibling(next)) {
- 		/* Partial overlap? Bad, and unfixable */
- 		if (next->start < new->start || next->end > new->end)
- 			return next;
--		if (!next->sibling)
-+		if (!resource_sibling(next))
- 			break;
--		if (next->sibling->start > new->end)
-+		if (resource_sibling(next)->start > new->end)
- 			break;
- 	}
--
- 	new->parent = parent;
--	new->sibling = next->sibling;
--	new->child = first;
-+	list_add(&new->sibling, &next->sibling);
-+	INIT_LIST_HEAD(&new->child);
- 
--	next->sibling = NULL;
--	for (next = first; next; next = next->sibling)
-+	/*
-+	 * From first to next, they all fall into new's region, so change them
-+	 * as new's children.
-+	 */
-+	list_cut_position(&new->child, first->sibling.prev, &next->sibling);
-+	list_for_each_entry(next, &new->child, sibling)
- 		next->parent = new;
- 
--	if (parent->child == first) {
--		parent->child = new;
--	} else {
--		next = parent->child;
--		while (next->sibling != first)
--			next = next->sibling;
--		next->sibling = new;
--	}
- 	return NULL;
- }
- 
-@@ -937,19 +937,17 @@ static int __adjust_resource(struct resource *res, resource_size_t start,
- 	if ((start < parent->start) || (end > parent->end))
- 		goto out;
- 
--	if (res->sibling && (res->sibling->start <= end))
-+	if (resource_sibling(res) && (resource_sibling(res)->start <= end))
- 		goto out;
- 
--	tmp = parent->child;
--	if (tmp != res) {
--		while (tmp->sibling != res)
--			tmp = tmp->sibling;
-+	if (res->sibling.prev != &parent->child) {
-+		tmp = list_prev_entry(res, sibling);
- 		if (start <= tmp->end)
- 			goto out;
- 	}
- 
- skip:
--	for (tmp = res->child; tmp; tmp = tmp->sibling)
-+	list_for_each_entry(tmp, &res->child, sibling)
- 		if ((tmp->start < start) || (tmp->end > end))
- 			goto out;
- 
-@@ -996,27 +994,30 @@ EXPORT_SYMBOL(adjust_resource);
-  */
- int reparent_resources(struct resource *parent, struct resource *res)
- {
--	struct resource *p, **pp;
--	struct resource **firstpp = NULL;
-+	struct resource *p, *first = NULL;
- 
--	for (pp = &parent->child; (p = *pp) != NULL; pp = &p->sibling) {
-+	list_for_each_entry(p, &parent->child, sibling) {
- 		if (p->end < res->start)
- 			continue;
- 		if (res->end < p->start)
- 			break;
- 		if (p->start < res->start || p->end > res->end)
- 			return -ENOTSUPP;	/* not completely contained */
--		if (firstpp == NULL)
--			firstpp = pp;
-+		if (first == NULL)
-+			first = p;
- 	}
--	if (firstpp == NULL)
-+	if (first == NULL)
- 		return -ECANCELED; /* didn't find any conflicting entries? */
- 	res->parent = parent;
--	res->child = *firstpp;
--	res->sibling = *pp;
--	*firstpp = res;
--	*pp = NULL;
--	for (p = res->child; p != NULL; p = p->sibling) {
-+	list_add(&res->sibling, p->sibling.prev);
-+	INIT_LIST_HEAD(&res->child);
-+
-+	/*
-+	 * From first to p's previous sibling, they all fall into
-+	 * res's region, change them as res's children.
-+	 */
-+	list_cut_position(&res->child, first->sibling.prev, res->sibling.prev);
-+	list_for_each_entry(p, &res->child, sibling) {
- 		p->parent = res;
- 		pr_debug("PCI: Reparented %s %pR under %s\n",
- 			 p->name, p, res->name);
-@@ -1216,34 +1217,32 @@ EXPORT_SYMBOL(__request_region);
- void __release_region(struct resource *parent, resource_size_t start,
- 			resource_size_t n)
- {
--	struct resource **p;
-+	struct resource *res;
- 	resource_size_t end;
- 
--	p = &parent->child;
-+	res = resource_first_child(&parent->child);
- 	end = start + n - 1;
- 
- 	write_lock(&resource_lock);
- 
- 	for (;;) {
--		struct resource *res = *p;
--
- 		if (!res)
- 			break;
- 		if (res->start <= start && res->end >= end) {
- 			if (!(res->flags & IORESOURCE_BUSY)) {
--				p = &res->child;
-+				res = resource_first_child(&res->child);
- 				continue;
- 			}
- 			if (res->start != start || res->end != end)
- 				break;
--			*p = res->sibling;
-+			list_del(&res->sibling);
- 			write_unlock(&resource_lock);
- 			if (res->flags & IORESOURCE_MUXED)
- 				wake_up(&muxed_resource_wait);
- 			free_resource(res);
- 			return;
- 		}
--		p = &res->sibling;
-+		res = resource_sibling(res);
- 	}
- 
- 	write_unlock(&resource_lock);
-@@ -1278,9 +1277,7 @@ EXPORT_SYMBOL(__release_region);
- int release_mem_region_adjustable(struct resource *parent,
- 			resource_size_t start, resource_size_t size)
- {
--	struct resource **p;
--	struct resource *res;
--	struct resource *new_res;
-+	struct resource *res, *new_res;
- 	resource_size_t end;
- 	int ret = -EINVAL;
- 
-@@ -1291,16 +1288,16 @@ int release_mem_region_adjustable(struct resource *parent,
- 	/* The alloc_resource() result gets checked later */
- 	new_res = alloc_resource(GFP_KERNEL);
- 
--	p = &parent->child;
-+	res = resource_first_child(&parent->child);
- 	write_lock(&resource_lock);
- 
--	while ((res = *p)) {
-+	while ((res)) {
- 		if (res->start >= end)
- 			break;
- 
- 		/* look for the next resource if it does not fit into */
- 		if (res->start > start || res->end < end) {
--			p = &res->sibling;
-+			res = resource_sibling(res);
- 			continue;
- 		}
- 
-@@ -1308,14 +1305,14 @@ int release_mem_region_adjustable(struct resource *parent,
- 			break;
- 
- 		if (!(res->flags & IORESOURCE_BUSY)) {
--			p = &res->child;
-+			res = resource_first_child(&res->child);
- 			continue;
- 		}
- 
- 		/* found the target resource; let's adjust accordingly */
- 		if (res->start == start && res->end == end) {
- 			/* free the whole entry */
--			*p = res->sibling;
-+			list_del(&res->sibling);
- 			free_resource(res);
- 			ret = 0;
- 		} else if (res->start == start && res->end != end) {
-@@ -1338,14 +1335,13 @@ int release_mem_region_adjustable(struct resource *parent,
- 			new_res->flags = res->flags;
- 			new_res->desc = res->desc;
- 			new_res->parent = res->parent;
--			new_res->sibling = res->sibling;
--			new_res->child = NULL;
-+			INIT_LIST_HEAD(&new_res->child);
- 
- 			ret = __adjust_resource(res, res->start,
- 						start - res->start);
- 			if (ret)
- 				break;
--			res->sibling = new_res;
-+			list_add(&new_res->sibling, &res->sibling);
- 			new_res = NULL;
- 		}
- 
-@@ -1526,7 +1522,7 @@ static int __init reserve_setup(char *str)
- 			res->end = io_start + io_num - 1;
- 			res->flags |= IORESOURCE_BUSY;
- 			res->desc = IORES_DESC_NONE;
--			res->child = NULL;
-+			INIT_LIST_HEAD(&res->child);
- 			if (request_resource(parent, res) == 0)
- 				reserved = x+1;
- 		}
-@@ -1546,7 +1542,7 @@ int iomem_map_sanity_check(resource_size_t addr, unsigned long size)
- 	loff_t l;
- 
- 	read_lock(&resource_lock);
--	for (p = p->child; p ; p = r_next(NULL, p, &l)) {
-+	for (p = resource_first_child(&p->child); p; p = r_next(NULL, p, &l)) {
- 		/*
- 		 * We can probably skip the resources without
- 		 * IORESOURCE_IO attribute?
-@@ -1602,7 +1598,7 @@ bool iomem_is_exclusive(u64 addr)
- 	addr = addr & PAGE_MASK;
- 
- 	read_lock(&resource_lock);
--	for (p = p->child; p ; p = r_next(NULL, p, &l)) {
-+	for (p = resource_first_child(&p->child); p; p = r_next(NULL, p, &l)) {
- 		/*
- 		 * We can probably skip the resources without
- 		 * IORESOURCE_IO attribute?
--- 
-2.13.6
-
-_______________________________________________
-Linux-nvdimm mailing list
-Linux-nvdimm@lists.01.org
-https://lists.01.org/mailman/listinfo/linux-nvdimm
+VGhlIHN0cnVjdCByZXNvdXJjZSB1c2VzIHNpbmdseSBsaW5rZWQgbGlzdCB0byBsaW5rIHNpYmxp
+bmdzLCBpbXBsZW1lbnRlZApieSBwb2ludGVyIG9wZXJhdGlvbi4gUmVwbGFjZSBpdCB3aXRoIGxp
+c3RfaGVhZCBmb3IgYmV0dGVyIGNvZGUgcmVhZGFiaWxpdHkuCgpCYXNlZCBvbiB0aGlzIGxpc3Rf
+aGVhZCByZXBsYWNlbWVudCwgaXQgd2lsbCBiZSB2ZXJ5IGVhc3kgdG8gZG8gcmV2ZXJzZQppdGVy
+YXRpb24gb24gaW9tZW1fcmVzb3VyY2UncyBzaWJsaW5nIGxpc3QgaW4gbGF0ZXIgcGF0Y2guCgpC
+ZXNpZGVzLCB0eXBlIG9mIG1lbWJlciB2YXJpYWJsZXMgb2Ygc3RydWN0IHJlc291cmNlLCBzaWJs
+aW5nIGFuZCBjaGlsZCwgYXJlCmNoYW5nZWQgZnJvbSAnc3RydWN0IHJlc291cmNlIConIHRvICdz
+dHJ1Y3QgbGlzdF9oZWFkJy4gVGhpcyBicmluZ3MgdHdvCnBvaW50ZXJzIG9mIHNpemUgaW5jcmVh
+c2UuCgpTdWdnZXN0ZWQtYnk6IEFuZHJldyBNb3J0b24gPGFrcG1AbGludXgtZm91bmRhdGlvbi5v
+cmc+ClNpZ25lZC1vZmYtYnk6IEJhb3F1YW4gSGUgPGJoZUByZWRoYXQuY29tPgpDYzogUGF0cmlr
+IEpha29ic3NvbiA8cGF0cmlrLnIuamFrb2Jzc29uQGdtYWlsLmNvbT4KQ2M6IERhdmlkIEFpcmxp
+ZSA8YWlybGllZEBsaW51eC5pZT4KQ2M6ICJLLiBZLiBTcmluaXZhc2FuIiA8a3lzQG1pY3Jvc29m
+dC5jb20+CkNjOiBIYWl5YW5nIFpoYW5nIDxoYWl5YW5nekBtaWNyb3NvZnQuY29tPgpDYzogU3Rl
+cGhlbiBIZW1taW5nZXIgPHN0aGVtbWluQG1pY3Jvc29mdC5jb20+CkNjOiBEbWl0cnkgVG9yb2to
+b3YgPGRtaXRyeS50b3Jva2hvdkBnbWFpbC5jb20+CkNjOiBEYW4gV2lsbGlhbXMgPGRhbi5qLndp
+bGxpYW1zQGludGVsLmNvbT4KQ2M6IFJvYiBIZXJyaW5nIDxyb2JoK2R0QGtlcm5lbC5vcmc+CkNj
+OiBGcmFuayBSb3dhbmQgPGZyb3dhbmQubGlzdEBnbWFpbC5jb20+CkNjOiBLZWl0aCBCdXNjaCA8
+a2VpdGguYnVzY2hAaW50ZWwuY29tPgpDYzogSm9uYXRoYW4gRGVycmljayA8am9uYXRoYW4uZGVy
+cmlja0BpbnRlbC5jb20+CkNjOiBMb3JlbnpvIFBpZXJhbGlzaSA8bG9yZW56by5waWVyYWxpc2lA
+YXJtLmNvbT4KQ2M6IEJqb3JuIEhlbGdhYXMgPGJoZWxnYWFzQGdvb2dsZS5jb20+CkNjOiBUaG9t
+YXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KQ2M6IEJyaWplc2ggU2luZ2ggPGJyaWpl
+c2guc2luZ2hAYW1kLmNvbT4KQ2M6ICJKw6lyw7RtZSBHbGlzc2UiIDxqZ2xpc3NlQHJlZGhhdC5j
+b20+CkNjOiBCb3Jpc2xhdiBQZXRrb3YgPGJwQHN1c2UuZGU+CkNjOiBUb20gTGVuZGFja3kgPHRo
+b21hcy5sZW5kYWNreUBhbWQuY29tPgpDYzogR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAbGlu
+dXhmb3VuZGF0aW9uLm9yZz4KQ2M6IFlhb3dlaSBCYWkgPGJhaXlhb3dlaUBjbXNzLmNoaW5hbW9i
+aWxlLmNvbT4KQ2M6IFdlaSBZYW5nIDxyaWNoYXJkLndlaXlhbmdAZ21haWwuY29tPgpDYzogZGV2
+ZWxAbGludXhkcml2ZXJwcm9qZWN0Lm9yZwpDYzogbGludXgtaW5wdXRAdmdlci5rZXJuZWwub3Jn
+CkNjOiBsaW51eC1udmRpbW1AbGlzdHMuMDEub3JnCkNjOiBkZXZpY2V0cmVlQHZnZXIua2VybmVs
+Lm9yZwpDYzogbGludXgtcGNpQHZnZXIua2VybmVsLm9yZwpDYzogTWljaGFsIFNpbWVrIDxtb25z
+dHJAbW9uc3RyLmV1PgpDYzogQmVuamFtaW4gSGVycmVuc2NobWlkdCA8YmVuaEBrZXJuZWwuY3Jh
+c2hpbmcub3JnPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIApDYzogUGF1bCBN
+YWNrZXJyYXMgPHBhdWx1c0BzYW1iYS5vcmc+CkNjOiBNaWNoYWVsIEVsbGVybWFuIDxtcGVAZWxs
+ZXJtYW4uaWQuYXU+CkNjOiBsaW51eC1taXBzQGxpbnV4LW1pcHMub3JnCi0tLQogYXJjaC9hcm0v
+cGxhdC1zYW1zdW5nL3BtLWNoZWNrLmMgICAgICAgICAgICB8ICAgNiArLQogYXJjaC9pYTY0L3Nu
+L2tlcm5lbC9pb19pbml0LmMgICAgICAgICAgICAgICB8ICAgMiArLQogYXJjaC9taWNyb2JsYXpl
+L3BjaS9wY2ktY29tbW9uLmMgICAgICAgICAgICB8ICAgNCArLQogYXJjaC9taXBzL3BjaS9wY2kt
+cmMzMjQzNC5jICAgICAgICAgICAgICAgICB8ICAxMiArLQogYXJjaC9wb3dlcnBjL2tlcm5lbC9w
+Y2ktY29tbW9uLmMgICAgICAgICAgICB8ICAgNCArLQogYXJjaC9zcGFyYy9rZXJuZWwvaW9wb3J0
+LmMgICAgICAgICAgICAgICAgICB8ICAgMiArLQogYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vcGNp
+LWJyaWRnZS5oICAgICAgICB8ICAgNCArLQogZHJpdmVycy9laXNhL2Vpc2EtYnVzLmMgICAgICAg
+ICAgICAgICAgICAgICB8ICAgMiArCiBkcml2ZXJzL2dwdS9kcm0vZHJtX21lbW9yeS5jICAgICAg
+ICAgICAgICAgIHwgICAzICstCiBkcml2ZXJzL2dwdS9kcm0vZ21hNTAwL2d0dC5jICAgICAgICAg
+ICAgICAgIHwgICA1ICstCiBkcml2ZXJzL2h2L3ZtYnVzX2Rydi5jICAgICAgICAgICAgICAgICAg
+ICAgIHwgIDUyICsrKy0tLS0KIGRyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1t
+YWluLmMgfCAgIDQgKy0KIGRyaXZlcnMvbnZkaW1tL25hbWVzcGFjZV9kZXZzLmMgICAgICAgICAg
+ICAgfCAgIDYgKy0KIGRyaXZlcnMvbnZkaW1tL25kLmggICAgICAgICAgICAgICAgICAgICAgICAg
+fCAgIDUgKy0KIGRyaXZlcnMvb2YvYWRkcmVzcy5jICAgICAgICAgICAgICAgICAgICAgICAgfCAg
+IDQgKy0KIGRyaXZlcnMvcGFyaXNjL2xiYV9wY2kuYyAgICAgICAgICAgICAgICAgICAgfCAgIDQg
+Ky0KIGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvdm1kLmMgICAgICAgICAgICAgICAgfCAgIDggKy0K
+IGRyaXZlcnMvcGNpL3Byb2JlLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKwogZHJp
+dmVycy9wY2kvc2V0dXAtYnVzLmMgICAgICAgICAgICAgICAgICAgICB8ICAgMiArLQogaW5jbHVk
+ZS9saW51eC9pb3BvcnQuaCAgICAgICAgICAgICAgICAgICAgICB8ICAxNyArKy0KIGtlcm5lbC9y
+ZXNvdXJjZS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyMDYgKysrKysrKysrKysrKyst
+LS0tLS0tLS0tLS0tLQogMjEgZmlsZXMgY2hhbmdlZCwgMTgzIGluc2VydGlvbnMoKyksIDE3MSBk
+ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvcG0tY2hlY2su
+YyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9wbS1jaGVjay5jCmluZGV4IGNkMmMwMmM2OGJjMy4u
+NTQ5NDM1NWIxYzQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvcG0tY2hlY2su
+YworKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvcG0tY2hlY2suYwpAQCAtNDYsOCArNDYsOCBA
+QCB0eXBlZGVmIHUzMiAqKHJ1bl9mbl90KShzdHJ1Y3QgcmVzb3VyY2UgKnB0ciwgdTMyICphcmcp
+Owogc3RhdGljIHZvaWQgczNjX3BtX3J1bl9yZXMoc3RydWN0IHJlc291cmNlICpwdHIsIHJ1bl9m
+bl90IGZuLCB1MzIgKmFyZykKIHsKIAl3aGlsZSAocHRyICE9IE5VTEwpIHsKLQkJaWYgKHB0ci0+
+Y2hpbGQgIT0gTlVMTCkKLQkJCXMzY19wbV9ydW5fcmVzKHB0ci0+Y2hpbGQsIGZuLCBhcmcpOwor
+CQlpZiAoIWxpc3RfZW1wdHkoJnB0ci0+Y2hpbGQpKQorCQkJczNjX3BtX3J1bl9yZXMocmVzb3Vy
+Y2VfZmlyc3RfY2hpbGQoJnB0ci0+Y2hpbGQpLCBmbiwgYXJnKTsKIAogCQlpZiAoKHB0ci0+Zmxh
+Z3MgJiBJT1JFU09VUkNFX1NZU1RFTV9SQU0pCiAJCQkJPT0gSU9SRVNPVVJDRV9TWVNURU1fUkFN
+KSB7CkBAIC01Nyw3ICs1Nyw3IEBAIHN0YXRpYyB2b2lkIHMzY19wbV9ydW5fcmVzKHN0cnVjdCBy
+ZXNvdXJjZSAqcHRyLCBydW5fZm5fdCBmbiwgdTMyICphcmcpCiAJCQlhcmcgPSAoZm4pKHB0ciwg
+YXJnKTsKIAkJfQogCi0JCXB0ciA9IHB0ci0+c2libGluZzsKKwkJcHRyID0gcmVzb3VyY2Vfc2li
+bGluZyhwdHIpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9pb19p
+bml0LmMgYi9hcmNoL2lhNjQvc24va2VybmVsL2lvX2luaXQuYwppbmRleCBkNjM4MDlhNmFkZmEu
+LjMzOGE3YjdmMTk0ZCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9pb19pbml0LmMK
+KysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9pb19pbml0LmMKQEAgLTE5Miw3ICsxOTIsNyBAQCBz
+bl9pb19zbG90X2ZpeHVwKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiAJCSAqIGlmIGl0J3MgYWxyZWFk
+eSBpbiB0aGUgZGV2aWNlIHN0cnVjdHVyZSwgcmVtb3ZlIGl0IGJlZm9yZQogCQkgKiBpbnNlcnRp
+bmcKIAkJICovCi0JCWlmIChyZXMtPnBhcmVudCAmJiByZXMtPnBhcmVudC0+Y2hpbGQpCisJCWlm
+IChyZXMtPnBhcmVudCAmJiAhbGlzdF9lbXB0eSgmcmVzLT5wYXJlbnQtPmNoaWxkKSkKIAkJCXJl
+bGVhc2VfcmVzb3VyY2UocmVzKTsKIAogCQlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8p
+CmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvcGNpL3BjaS1jb21tb24uYyBiL2FyY2gvbWlj
+cm9ibGF6ZS9wY2kvcGNpLWNvbW1vbi5jCmluZGV4IDc4OTliYWZhYjA2NC4uMmJmNzNlMjdlMjMx
+IDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvcGNpL3BjaS1jb21tb24uYworKysgYi9hcmNo
+L21pY3JvYmxhemUvcGNpL3BjaS1jb21tb24uYwpAQCAtNTMzLDcgKzUzMyw5IEBAIHZvaWQgcGNp
+X3Byb2Nlc3NfYnJpZGdlX09GX3JhbmdlcyhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsCiAJ
+CQlyZXMtPmZsYWdzID0gcmFuZ2UuZmxhZ3M7CiAJCQlyZXMtPnN0YXJ0ID0gcmFuZ2UuY3B1X2Fk
+ZHI7CiAJCQlyZXMtPmVuZCA9IHJhbmdlLmNwdV9hZGRyICsgcmFuZ2Uuc2l6ZSAtIDE7Ci0JCQly
+ZXMtPnBhcmVudCA9IHJlcy0+Y2hpbGQgPSByZXMtPnNpYmxpbmcgPSBOVUxMOworCQkJcmVzLT5w
+YXJlbnQgPSBOVUxMOworCQkJSU5JVF9MSVNUX0hFQUQoJnJlcy0+Y2hpbGQpOworCQkJSU5JVF9M
+SVNUX0hFQUQoJnJlcy0+c2libGluZyk7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlw
+cy9wY2kvcGNpLXJjMzI0MzQuYyBiL2FyY2gvbWlwcy9wY2kvcGNpLXJjMzI0MzQuYwppbmRleCA3
+ZjZjZTZkNzM0YzAuLmU4MDI4M2RmNzkyNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9wY2kt
+cmMzMjQzNC5jCisrKyBiL2FyY2gvbWlwcy9wY2kvcGNpLXJjMzI0MzQuYwpAQCAtNTMsOCArNTMs
+OCBAQCBzdGF0aWMgc3RydWN0IHJlc291cmNlIHJjMzI0MzRfcmVzX3BjaV9tZW0xID0gewogCS5z
+dGFydCA9IDB4NTAwMDAwMDAsCiAJLmVuZCA9IDB4NUZGRkZGRkYsCiAJLmZsYWdzID0gSU9SRVNP
+VVJDRV9NRU0sCi0JLnNpYmxpbmcgPSBOVUxMLAotCS5jaGlsZCA9ICZyYzMyNDM0X3Jlc19wY2lf
+bWVtMgorCS5zaWJsaW5nID0gTElTVF9IRUFEX0lOSVQocmMzMjQzNF9yZXNfcGNpX21lbTEuc2li
+bGluZyksCisJLmNoaWxkID0gTElTVF9IRUFEX0lOSVQocmMzMjQzNF9yZXNfcGNpX21lbTEuY2hp
+bGQpLAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSByYzMyNDM0X3Jlc19wY2lfbWVtMiA9
+IHsKQEAgLTYzLDggKzYzLDggQEAgc3RhdGljIHN0cnVjdCByZXNvdXJjZSByYzMyNDM0X3Jlc19w
+Y2lfbWVtMiA9IHsKIAkuZW5kID0gMHg2RkZGRkZGRiwKIAkuZmxhZ3MgPSBJT1JFU09VUkNFX01F
+TSwKIAkucGFyZW50ID0gJnJjMzI0MzRfcmVzX3BjaV9tZW0xLAotCS5zaWJsaW5nID0gTlVMTCwK
+LQkuY2hpbGQgPSBOVUxMCisJLnNpYmxpbmcgPSBMSVNUX0hFQURfSU5JVChyYzMyNDM0X3Jlc19w
+Y2lfbWVtMi5zaWJsaW5nKSwKKwkuY2hpbGQgPSBMSVNUX0hFQURfSU5JVChyYzMyNDM0X3Jlc19w
+Y2lfbWVtMi5jaGlsZCksCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHJjMzI0MzRfcmVz
+X3BjaV9pbzEgPSB7CkBAIC03Miw2ICs3Miw4IEBAIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcmMz
+MjQzNF9yZXNfcGNpX2lvMSA9IHsKIAkuc3RhcnQgPSAweDE4ODAwMDAwLAogCS5lbmQgPSAweDE4
+OEZGRkZGLAogCS5mbGFncyA9IElPUkVTT1VSQ0VfSU8sCisJLnNpYmxpbmcgPSBMSVNUX0hFQURf
+SU5JVChyYzMyNDM0X3Jlc19wY2lfaW8xLnNpYmxpbmcpLAorCS5jaGlsZCA9IExJU1RfSEVBRF9J
+TklUKHJjMzI0MzRfcmVzX3BjaV9pbzEuY2hpbGQpLAogfTsKIAogZXh0ZXJuIHN0cnVjdCBwY2lf
+b3BzIHJjMzI0MzRfcGNpX29wczsKQEAgLTIwOCw2ICsyMTAsOCBAQCBzdGF0aWMgaW50IF9faW5p
+dCByYzMyNDM0X3BjaV9pbml0KHZvaWQpCiAKIAlwcl9pbmZvKCJQQ0k6IEluaXRpYWxpemluZyBQ
+Q0lcbiIpOwogCisJbGlzdF9hZGQoJnJjMzI0MzRfcmVzX3BjaV9tZW0yLnNpYmxpbmcsICZyYzMy
+NDM0X3Jlc19wY2lfbWVtMS5jaGlsZCk7CisKIAlpb3BvcnRfcmVzb3VyY2Uuc3RhcnQgPSByYzMy
+NDM0X3Jlc19wY2lfaW8xLnN0YXJ0OwogCWlvcG9ydF9yZXNvdXJjZS5lbmQgPSByYzMyNDM0X3Jl
+c19wY2lfaW8xLmVuZDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktY29t
+bW9uLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYwppbmRleCA5MjYwMzViYjM3
+OGQuLjI4ZmJlODNjOWRhZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktY29t
+bW9uLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktY29tbW9uLmMKQEAgLTc2MSw3ICs3
+NjEsOSBAQCB2b2lkIHBjaV9wcm9jZXNzX2JyaWRnZV9PRl9yYW5nZXMoc3RydWN0IHBjaV9jb250
+cm9sbGVyICpob3NlLAogCQkJcmVzLT5mbGFncyA9IHJhbmdlLmZsYWdzOwogCQkJcmVzLT5zdGFy
+dCA9IHJhbmdlLmNwdV9hZGRyOwogCQkJcmVzLT5lbmQgPSByYW5nZS5jcHVfYWRkciArIHJhbmdl
+LnNpemUgLSAxOwotCQkJcmVzLT5wYXJlbnQgPSByZXMtPmNoaWxkID0gcmVzLT5zaWJsaW5nID0g
+TlVMTDsKKwkJCXJlcy0+cGFyZW50ID0gTlVMTDsKKwkJCUlOSVRfTElTVF9IRUFEKCZyZXMtPmNo
+aWxkKTsKKwkJCUlOSVRfTElTVF9IRUFEKCZyZXMtPnNpYmxpbmcpOwogCQl9CiAJfQogfQpkaWZm
+IC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvaW9wb3J0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9p
+b3BvcnQuYwppbmRleCBjY2E5MTM0Y2ZhN2QuLjk5ZWZlNGU5OGIxNiAxMDA2NDQKLS0tIGEvYXJj
+aC9zcGFyYy9rZXJuZWwvaW9wb3J0LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvaW9wb3J0LmMK
+QEAgLTY2OSw3ICs2NjksNyBAQCBzdGF0aWMgaW50IHNwYXJjX2lvX3Byb2Nfc2hvdyhzdHJ1Y3Qg
+c2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiAJc3RydWN0IHJlc291cmNlICpyb290ID0gbS0+cHJpdmF0
+ZSwgKnI7CiAJY29uc3QgY2hhciAqbm07CiAKLQlmb3IgKHIgPSByb290LT5jaGlsZDsgciAhPSBO
+VUxMOyByID0gci0+c2libGluZykgeworCWxpc3RfZm9yX2VhY2hfZW50cnkociwgJnJvb3QtPmNo
+aWxkLCBzaWJsaW5nKSB7CiAJCWlmICgobm0gPSByLT5uYW1lKSA9PSBOVUxMKSBubSA9ICI/Pz8i
+OwogCQlzZXFfcHJpbnRmKG0sICIlMDE2bGx4LSUwMTZsbHg6ICVzXG4iLAogCQkJCSh1bnNpZ25l
+ZCBsb25nIGxvbmcpci0+c3RhcnQsCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2Fz
+bS9wY2ktYnJpZGdlLmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9wY2ktYnJpZGdlLmgKaW5k
+ZXggMGI2OGM3NmVjMWU2Li5mNDg3YjA2ODE3ZGYgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2lu
+Y2x1ZGUvYXNtL3BjaS1icmlkZ2UuaAorKysgYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9wY2kt
+YnJpZGdlLmgKQEAgLTcxLDggKzcxLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHBjaWJpb3NfaW5p
+dF9yZXNvdXJjZShzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKIAlyZXMtPmZsYWdzID0gZmxhZ3M7CiAJ
+cmVzLT5uYW1lID0gbmFtZTsKIAlyZXMtPnBhcmVudCA9IE5VTEw7Ci0JcmVzLT5zaWJsaW5nID0g
+TlVMTDsKLQlyZXMtPmNoaWxkID0gTlVMTDsKKwlJTklUX0xJU1RfSEVBRCgmcmVzLT5jaGlsZCk7
+CisJSU5JVF9MSVNUX0hFQUQoJnJlcy0+c2libGluZyk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJp
+dmVycy9laXNhL2Vpc2EtYnVzLmMgYi9kcml2ZXJzL2Vpc2EvZWlzYS1idXMuYwppbmRleCAxZTgw
+NjJmNmRiZmMuLmRiYTc4Zjc1ZmQwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9laXNhL2Vpc2EtYnVz
+LmMKKysrIGIvZHJpdmVycy9laXNhL2Vpc2EtYnVzLmMKQEAgLTQwOCw2ICs0MDgsOCBAQCBzdGF0
+aWMgc3RydWN0IHJlc291cmNlIGVpc2Ffcm9vdF9yZXMgPSB7CiAJLnN0YXJ0ID0gMCwKIAkuZW5k
+ICAgPSAweGZmZmZmZmZmLAogCS5mbGFncyA9IElPUkVTT1VSQ0VfSU8sCisJLnNpYmxpbmcgPSBM
+SVNUX0hFQURfSU5JVChlaXNhX3Jvb3RfcmVzLnNpYmxpbmcpLAorCS5jaGlsZCAgPSBMSVNUX0hF
+QURfSU5JVChlaXNhX3Jvb3RfcmVzLmNoaWxkKSwKIH07CiAKIHN0YXRpYyBpbnQgZWlzYV9idXNf
+Y291bnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX21lbW9yeS5jIGIvZHJpdmVy
+cy9ncHUvZHJtL2RybV9tZW1vcnkuYwppbmRleCBkNjllNGZjMWVlNzcuLjMzYmFhN2ZhNWU0MSAx
+MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9tZW1vcnkuYworKysgYi9kcml2ZXJzL2dw
+dS9kcm0vZHJtX21lbW9yeS5jCkBAIC0xNTUsOSArMTU1LDggQEAgdTY0IGRybV9nZXRfbWF4X2lv
+bWVtKHZvaWQpCiAJc3RydWN0IHJlc291cmNlICp0bXA7CiAJcmVzb3VyY2Vfc2l6ZV90IG1heF9p
+b21lbSA9IDA7CiAKLQlmb3IgKHRtcCA9IGlvbWVtX3Jlc291cmNlLmNoaWxkOyB0bXA7IHRtcCA9
+IHRtcC0+c2libGluZykgeworCWxpc3RfZm9yX2VhY2hfZW50cnkodG1wLCAmaW9tZW1fcmVzb3Vy
+Y2UuY2hpbGQsIHNpYmxpbmcpCiAJCW1heF9pb21lbSA9IG1heChtYXhfaW9tZW0sICB0bXAtPmVu
+ZCk7Ci0JfQogCiAJcmV0dXJuIG1heF9pb21lbTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1
+L2RybS9nbWE1MDAvZ3R0LmMgYi9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL2d0dC5jCmluZGV4IDM5
+NDliMDk5MDkxNi4uYWRkZDNiYzAwOWFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZ21h
+NTAwL2d0dC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvZ3R0LmMKQEAgLTU2NSw3ICs1
+NjUsNyBAQCBpbnQgcHNiX2d0dF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCByZXN1
+bWUpCiBpbnQgcHNiX2d0dF9yZXN0b3JlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3Ry
+dWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVj
+dCByZXNvdXJjZSAqciA9IGRldl9wcml2LT5ndHRfbWVtLT5jaGlsZDsKKwlzdHJ1Y3QgcmVzb3Vy
+Y2UgKnI7CiAJc3RydWN0IGd0dF9yYW5nZSAqcmFuZ2U7CiAJdW5zaWduZWQgaW50IHJlc3RvcmVk
+ID0gMCwgdG90YWwgPSAwLCBzaXplID0gMDsKIApAQCAtNTczLDE0ICs1NzMsMTMgQEAgaW50IHBz
+Yl9ndHRfcmVzdG9yZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogCW11dGV4X2xvY2soJmRldl9w
+cml2LT5ndHRfbXV0ZXgpOwogCXBzYl9ndHRfaW5pdChkZXYsIDEpOwogCi0Jd2hpbGUgKHIgIT0g
+TlVMTCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkociwgJmRldl9wcml2LT5ndHRfbWVtLT5jaGls
+ZCwgc2libGluZykgewogCQlyYW5nZSA9IGNvbnRhaW5lcl9vZihyLCBzdHJ1Y3QgZ3R0X3Jhbmdl
+LCByZXNvdXJjZSk7CiAJCWlmIChyYW5nZS0+cGFnZXMpIHsKIAkJCXBzYl9ndHRfaW5zZXJ0KGRl
+diwgcmFuZ2UsIDEpOwogCQkJc2l6ZSArPSByYW5nZS0+cmVzb3VyY2UuZW5kIC0gcmFuZ2UtPnJl
+c291cmNlLnN0YXJ0OwogCQkJcmVzdG9yZWQrKzsKIAkJfQotCQlyID0gci0+c2libGluZzsKIAkJ
+dG90YWwrKzsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+Z3R0X211dGV4KTsKZGlmZiAt
+LWdpdCBhL2RyaXZlcnMvaHYvdm1idXNfZHJ2LmMgYi9kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jCmlu
+ZGV4IGIxMGZlMjZjNDg5MS4uZDg3ZWM1YTFiYzRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h2L3Zt
+YnVzX2Rydi5jCisrKyBiL2RyaXZlcnMvaHYvdm1idXNfZHJ2LmMKQEAgLTE0MTIsOSArMTQxMiw4
+IEBAIHN0YXRpYyBhY3BpX3N0YXR1cyB2bWJ1c193YWxrX3Jlc291cmNlcyhzdHJ1Y3QgYWNwaV9y
+ZXNvdXJjZSAqcmVzLCB2b2lkICpjdHgpCiB7CiAJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0ID0gMDsK
+IAlyZXNvdXJjZV9zaXplX3QgZW5kID0gMDsKLQlzdHJ1Y3QgcmVzb3VyY2UgKm5ld19yZXM7CisJ
+c3RydWN0IHJlc291cmNlICpuZXdfcmVzLCAqdG1wOwogCXN0cnVjdCByZXNvdXJjZSAqKm9sZF9y
+ZXMgPSAmaHlwZXJ2X21taW87Ci0Jc3RydWN0IHJlc291cmNlICoqcHJldl9yZXMgPSBOVUxMOwog
+CiAJc3dpdGNoIChyZXMtPnR5cGUpIHsKIApAQCAtMTQ2MSw0NCArMTQ2MCwzNiBAQCBzdGF0aWMg
+YWNwaV9zdGF0dXMgdm1idXNfd2Fsa19yZXNvdXJjZXMoc3RydWN0IGFjcGlfcmVzb3VyY2UgKnJl
+cywgdm9pZCAqY3R4KQogCS8qCiAJICogSWYgdHdvIHJhbmdlcyBhcmUgYWRqYWNlbnQsIG1lcmdl
+IHRoZW0uCiAJICovCi0JZG8gewotCQlpZiAoISpvbGRfcmVzKSB7Ci0JCQkqb2xkX3JlcyA9IG5l
+d19yZXM7Ci0JCQlicmVhazsKLQkJfQotCi0JCWlmICgoKCpvbGRfcmVzKS0+ZW5kICsgMSkgPT0g
+bmV3X3Jlcy0+c3RhcnQpIHsKLQkJCSgqb2xkX3JlcyktPmVuZCA9IG5ld19yZXMtPmVuZDsKKwlp
+ZiAoISpvbGRfcmVzKSB7CisJCSpvbGRfcmVzID0gbmV3X3JlczsKKwkJcmV0dXJuIEFFX09LOwor
+CX0KKwl0bXAgPSAqb2xkX3JlczsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X2Zyb20odG1wLCAmdG1w
+LT5wYXJlbnQtPmNoaWxkLCBzaWJsaW5nKSB7CisJCWlmICgodG1wLT5lbmQgKyAxKSA9PSBuZXdf
+cmVzLT5zdGFydCkgeworCQkJdG1wLT5lbmQgPSBuZXdfcmVzLT5lbmQ7CiAJCQlrZnJlZShuZXdf
+cmVzKTsKIAkJCWJyZWFrOwogCQl9CiAKLQkJaWYgKCgqb2xkX3JlcyktPnN0YXJ0ID09IG5ld19y
+ZXMtPmVuZCArIDEpIHsKLQkJCSgqb2xkX3JlcyktPnN0YXJ0ID0gbmV3X3Jlcy0+c3RhcnQ7CisJ
+CWlmICh0bXAtPnN0YXJ0ID09IG5ld19yZXMtPmVuZCArIDEpIHsKKwkJCXRtcC0+c3RhcnQgPSBu
+ZXdfcmVzLT5zdGFydDsKIAkJCWtmcmVlKG5ld19yZXMpOwogCQkJYnJlYWs7CiAJCX0KIAotCQlp
+ZiAoKCpvbGRfcmVzKS0+c3RhcnQgPiBuZXdfcmVzLT5lbmQpIHsKLQkJCW5ld19yZXMtPnNpYmxp
+bmcgPSAqb2xkX3JlczsKLQkJCWlmIChwcmV2X3JlcykKLQkJCQkoKnByZXZfcmVzKS0+c2libGlu
+ZyA9IG5ld19yZXM7Ci0JCQkqb2xkX3JlcyA9IG5ld19yZXM7CisJCWlmICh0bXAtPnN0YXJ0ID4g
+bmV3X3Jlcy0+ZW5kKSB7CisJCQlsaXN0X2FkZCgmbmV3X3Jlcy0+c2libGluZywgdG1wLT5zaWJs
+aW5nLnByZXYpOwogCQkJYnJlYWs7CiAJCX0KLQotCQlwcmV2X3JlcyA9IG9sZF9yZXM7Ci0JCW9s
+ZF9yZXMgPSAmKCpvbGRfcmVzKS0+c2libGluZzsKLQotCX0gd2hpbGUgKDEpOworCX0KIAogCXJl
+dHVybiBBRV9PSzsKIH0KIAogc3RhdGljIGludCB2bWJ1c19hY3BpX3JlbW92ZShzdHJ1Y3QgYWNw
+aV9kZXZpY2UgKmRldmljZSkKIHsKLQlzdHJ1Y3QgcmVzb3VyY2UgKmN1cl9yZXM7Ci0Jc3RydWN0
+IHJlc291cmNlICpuZXh0X3JlczsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAogCWlmIChoeXBl
+cnZfbW1pbykgewogCQlpZiAoZmJfbW1pbykgewpAQCAtMTUwNywxMCArMTQ5OCw5IEBAIHN0YXRp
+YyBpbnQgdm1idXNfYWNwaV9yZW1vdmUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiAJCQlm
+Yl9tbWlvID0gTlVMTDsKIAkJfQogCi0JCWZvciAoY3VyX3JlcyA9IGh5cGVydl9tbWlvOyBjdXJf
+cmVzOyBjdXJfcmVzID0gbmV4dF9yZXMpIHsKLQkJCW5leHRfcmVzID0gY3VyX3Jlcy0+c2libGlu
+ZzsKLQkJCWtmcmVlKGN1cl9yZXMpOwotCQl9CisJCXJlcyA9IGh5cGVydl9tbWlvOworCQlsaXN0
+X2Zvcl9lYWNoX2VudHJ5X2Zyb20ocmVzLCAmcmVzLT5wYXJlbnQtPmNoaWxkLCBzaWJsaW5nKQor
+CQkJa2ZyZWUocmVzKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTE1OTYsNyArMTU4Niw4IEBAIGlu
+dCB2bWJ1c19hbGxvY2F0ZV9tbWlvKHN0cnVjdCByZXNvdXJjZSAqKm5ldywgc3RydWN0IGh2X2Rl
+dmljZSAqZGV2aWNlX29iaiwKIAkJfQogCX0KIAotCWZvciAoaXRlciA9IGh5cGVydl9tbWlvOyBp
+dGVyOyBpdGVyID0gaXRlci0+c2libGluZykgeworCWl0ZXIgPSBoeXBlcnZfbW1pbzsKKwlsaXN0
+X2Zvcl9lYWNoX2VudHJ5X2Zyb20oaXRlciwgJml0ZXItPnBhcmVudC0+Y2hpbGQsIHNpYmxpbmcp
+IHsKIAkJaWYgKChpdGVyLT5zdGFydCA+PSBtYXgpIHx8IChpdGVyLT5lbmQgPD0gbWluKSkKIAkJ
+CWNvbnRpbnVlOwogCkBAIC0xNjM5LDcgKzE2MzAsOCBAQCB2b2lkIHZtYnVzX2ZyZWVfbW1pbyhy
+ZXNvdXJjZV9zaXplX3Qgc3RhcnQsIHJlc291cmNlX3NpemVfdCBzaXplKQogCXN0cnVjdCByZXNv
+dXJjZSAqaXRlcjsKIAogCWRvd24oJmh5cGVydl9tbWlvX2xvY2spOwotCWZvciAoaXRlciA9IGh5
+cGVydl9tbWlvOyBpdGVyOyBpdGVyID0gaXRlci0+c2libGluZykgeworCWl0ZXIgPSBoeXBlcnZf
+bW1pbzsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X2Zyb20oaXRlciwgJml0ZXItPnBhcmVudC0+Y2hp
+bGQsIHNpYmxpbmcpIHsKIAkJaWYgKChpdGVyLT5zdGFydCA+PSBzdGFydCArIHNpemUpIHx8IChp
+dGVyLT5lbmQgPD0gc3RhcnQpKQogCQkJY29udGludWU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMv
+aW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1tYWluLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0
+aWNrL2lmb3JjZS9pZm9yY2UtbWFpbi5jCmluZGV4IGRhZWViNGM3ZTNiMC4uNWMwYmUyN2IzM2Zm
+IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtbWFpbi5j
+CisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1tYWluLmMKQEAgLTMw
+NSw4ICszMDUsOCBAQCBpbnQgaWZvcmNlX2luaXRfZGV2aWNlKHN0cnVjdCBpZm9yY2UgKmlmb3Jj
+ZSkKIAlpZm9yY2UtPmRldmljZV9tZW1vcnkuZW5kID0gMjAwOwogCWlmb3JjZS0+ZGV2aWNlX21l
+bW9yeS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOwogCWlmb3JjZS0+ZGV2aWNlX21lbW9yeS5wYXJl
+bnQgPSBOVUxMOwotCWlmb3JjZS0+ZGV2aWNlX21lbW9yeS5jaGlsZCA9IE5VTEw7Ci0JaWZvcmNl
+LT5kZXZpY2VfbWVtb3J5LnNpYmxpbmcgPSBOVUxMOworCUlOSVRfTElTVF9IRUFEKCZpZm9yY2Ut
+PmRldmljZV9tZW1vcnkuY2hpbGQpOworCUlOSVRfTElTVF9IRUFEKCZpZm9yY2UtPmRldmljZV9t
+ZW1vcnkuc2libGluZyk7CiAKIC8qCiAgKiBXYWl0IHVudGlsIGRldmljZSByZWFkeSAtIHVudGls
+IGl0IHNlbmRzIGl0cyBmaXJzdCByZXNwb25zZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZkaW1t
+L25hbWVzcGFjZV9kZXZzLmMgYi9kcml2ZXJzL252ZGltbS9uYW1lc3BhY2VfZGV2cy5jCmluZGV4
+IDI4YWZkZDY2ODkwNS4uZjUzZDQxMGQ5OTgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL252ZGltbS9u
+YW1lc3BhY2VfZGV2cy5jCisrKyBiL2RyaXZlcnMvbnZkaW1tL25hbWVzcGFjZV9kZXZzLmMKQEAg
+LTYzNyw3ICs2MzcsNyBAQCBzdGF0aWMgcmVzb3VyY2Vfc2l6ZV90IHNjYW5fYWxsb2NhdGUoc3Ry
+dWN0IG5kX3JlZ2lvbiAqbmRfcmVnaW9uLAogIHJldHJ5OgogCWZpcnN0ID0gMDsKIAlmb3JfZWFj
+aF9kcGFfcmVzb3VyY2UobmRkLCByZXMpIHsKLQkJc3RydWN0IHJlc291cmNlICpuZXh0ID0gcmVz
+LT5zaWJsaW5nLCAqbmV3X3JlcyA9IE5VTEw7CisJCXN0cnVjdCByZXNvdXJjZSAqbmV4dCA9IHJl
+c291cmNlX3NpYmxpbmcocmVzKSwgKm5ld19yZXMgPSBOVUxMOwogCQlyZXNvdXJjZV9zaXplX3Qg
+YWxsb2NhdGUsIGF2YWlsYWJsZSA9IDA7CiAJCWVudW0gYWxsb2NfbG9jIGxvYyA9IEFMTE9DX0VS
+UjsKIAkJY29uc3QgY2hhciAqYWN0aW9uOwpAQCAtNzYzLDcgKzc2Myw3IEBAIHN0YXRpYyByZXNv
+dXJjZV9zaXplX3Qgc2Nhbl9hbGxvY2F0ZShzdHJ1Y3QgbmRfcmVnaW9uICpuZF9yZWdpb24sCiAJ
+ICogYW4gaW5pdGlhbCAicG1lbS1yZXNlcnZlIHBhc3MiLiAgT25seSBkbyBhbiBpbml0aWFsIEJM
+SyBhbGxvY2F0aW9uCiAJICogd2hlbiBub25lIG9mIHRoZSBEUEEgc3BhY2UgaXMgcmVzZXJ2ZWQu
+CiAJICovCi0JaWYgKChpc19wbWVtIHx8ICFuZGQtPmRwYS5jaGlsZCkgJiYgbiA9PSB0b19hbGxv
+Y2F0ZSkKKwlpZiAoKGlzX3BtZW0gfHwgbGlzdF9lbXB0eSgmbmRkLT5kcGEuY2hpbGQpKSAmJiBu
+ID09IHRvX2FsbG9jYXRlKQogCQlyZXR1cm4gaW5pdF9kcGFfYWxsb2NhdGlvbihsYWJlbF9pZCwg
+bmRfcmVnaW9uLCBuZF9tYXBwaW5nLCBuKTsKIAlyZXR1cm4gbjsKIH0KQEAgLTc3OSw3ICs3Nzks
+NyBAQCBzdGF0aWMgaW50IG1lcmdlX2RwYShzdHJ1Y3QgbmRfcmVnaW9uICpuZF9yZWdpb24sCiAg
+cmV0cnk6CiAJZm9yX2VhY2hfZHBhX3Jlc291cmNlKG5kZCwgcmVzKSB7CiAJCWludCByYzsKLQkJ
+c3RydWN0IHJlc291cmNlICpuZXh0ID0gcmVzLT5zaWJsaW5nOworCQlzdHJ1Y3QgcmVzb3VyY2Ug
+Km5leHQgPSByZXNvdXJjZV9zaWJsaW5nKHJlcyk7CiAJCXJlc291cmNlX3NpemVfdCBlbmQgPSBy
+ZXMtPnN0YXJ0ICsgcmVzb3VyY2Vfc2l6ZShyZXMpOwogCiAJCWlmICghbmV4dCB8fCBzdHJjbXAo
+cmVzLT5uYW1lLCBsYWJlbF9pZC0+aWQpICE9IDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZkaW1t
+L25kLmggYi9kcml2ZXJzL252ZGltbS9uZC5oCmluZGV4IDMyZTAzNjRiNDhiOS4uZGE3ZGExNWUw
+M2U3IDEwMDY0NAotLS0gYS9kcml2ZXJzL252ZGltbS9uZC5oCisrKyBiL2RyaXZlcnMvbnZkaW1t
+L25kLmgKQEAgLTEwMiwxMSArMTAyLDEwIEBAIHVuc2lnbmVkIHNpemVvZl9uYW1lc3BhY2VfbGFi
+ZWwoc3RydWN0IG52ZGltbV9kcnZkYXRhICpuZGQpOwogCQkodW5zaWduZWQgbG9uZyBsb25nKSAo
+cmVzID8gcmVzLT5zdGFydCA6IDApLCAjI2FyZykKIAogI2RlZmluZSBmb3JfZWFjaF9kcGFfcmVz
+b3VyY2UobmRkLCByZXMpIFwKLQlmb3IgKHJlcyA9IChuZGQpLT5kcGEuY2hpbGQ7IHJlczsgcmVz
+ID0gcmVzLT5zaWJsaW5nKQorCWxpc3RfZm9yX2VhY2hfZW50cnkocmVzLCAmKG5kZCktPmRwYS5j
+aGlsZCwgc2libGluZykKIAogI2RlZmluZSBmb3JfZWFjaF9kcGFfcmVzb3VyY2Vfc2FmZShuZGQs
+IHJlcywgbmV4dCkgXAotCWZvciAocmVzID0gKG5kZCktPmRwYS5jaGlsZCwgbmV4dCA9IHJlcyA/
+IHJlcy0+c2libGluZyA6IE5VTEw7IFwKLQkJCXJlczsgcmVzID0gbmV4dCwgbmV4dCA9IG5leHQg
+PyBuZXh0LT5zaWJsaW5nIDogTlVMTCkKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVzLCBu
+ZXh0LCAmKG5kZCktPmRwYS5jaGlsZCwgc2libGluZykKIAogc3RydWN0IG5kX3BlcmNwdV9sYW5l
+IHsKIAlpbnQgY291bnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL2FkZHJlc3MuYyBiL2RyaXZl
+cnMvb2YvYWRkcmVzcy5jCmluZGV4IDUzMzQ5OTEyYWM3NS4uZTJlMjU3MTlhYjUyIDEwMDY0NAot
+LS0gYS9kcml2ZXJzL29mL2FkZHJlc3MuYworKysgYi9kcml2ZXJzL29mL2FkZHJlc3MuYwpAQCAt
+MzMwLDcgKzMzMCw5IEBAIGludCBvZl9wY2lfcmFuZ2VfdG9fcmVzb3VyY2Uoc3RydWN0IG9mX3Bj
+aV9yYW5nZSAqcmFuZ2UsCiB7CiAJaW50IGVycjsKIAlyZXMtPmZsYWdzID0gcmFuZ2UtPmZsYWdz
+OwotCXJlcy0+cGFyZW50ID0gcmVzLT5jaGlsZCA9IHJlcy0+c2libGluZyA9IE5VTEw7CisJcmVz
+LT5wYXJlbnQgPSBOVUxMOworCUlOSVRfTElTVF9IRUFEKCZyZXMtPmNoaWxkKTsKKwlJTklUX0xJ
+U1RfSEVBRCgmcmVzLT5zaWJsaW5nKTsKIAlyZXMtPm5hbWUgPSBucC0+ZnVsbF9uYW1lOwogCiAJ
+aWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bh
+cmlzYy9sYmFfcGNpLmMgYi9kcml2ZXJzL3BhcmlzYy9sYmFfcGNpLmMKaW5kZXggNjliZDk4NDIx
+ZWIxLi43NDgyYmRmZDE5NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFyaXNjL2xiYV9wY2kuYwor
+KysgYi9kcml2ZXJzL3BhcmlzYy9sYmFfcGNpLmMKQEAgLTE3MCw4ICsxNzAsOCBAQCBsYmFfZHVt
+cF9yZXMoc3RydWN0IHJlc291cmNlICpyLCBpbnQgZCkKIAlmb3IgKGkgPSBkOyBpIDsgLS1pKSBw
+cmludGsoIiAiKTsKIAlwcmludGsoS0VSTl9ERUJVRyAiJXAgWyVseCwlbHhdLyVseFxuIiwgciwK
+IAkJKGxvbmcpci0+c3RhcnQsIChsb25nKXItPmVuZCwgci0+ZmxhZ3MpOwotCWxiYV9kdW1wX3Jl
+cyhyLT5jaGlsZCwgZCsyKTsKLQlsYmFfZHVtcF9yZXMoci0+c2libGluZywgZCk7CisJbGJhX2R1
+bXBfcmVzKHJlc291cmNlX2ZpcnN0X2NoaWxkKCZyLT5jaGlsZCksIGQrMik7CisJbGJhX2R1bXBf
+cmVzKHJlc291cmNlX3NpYmxpbmcociksIGQpOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMv
+cGNpL2NvbnRyb2xsZXIvdm1kLmMgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL3ZtZC5jCmluZGV4
+IDk0MmI2NGZjN2YxZi4uZTNhY2UyMDM0NWM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9jb250
+cm9sbGVyL3ZtZC5jCisrKyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvdm1kLmMKQEAgLTU0Miwx
+NCArNTQyLDE0IEBAIHN0YXRpYyBzdHJ1Y3QgcGNpX29wcyB2bWRfb3BzID0gewogCiBzdGF0aWMg
+dm9pZCB2bWRfYXR0YWNoX3Jlc291cmNlcyhzdHJ1Y3Qgdm1kX2RldiAqdm1kKQogewotCXZtZC0+
+ZGV2LT5yZXNvdXJjZVtWTURfTUVNQkFSMV0uY2hpbGQgPSAmdm1kLT5yZXNvdXJjZXNbMV07Ci0J
+dm1kLT5kZXYtPnJlc291cmNlW1ZNRF9NRU1CQVIyXS5jaGlsZCA9ICZ2bWQtPnJlc291cmNlc1sy
+XTsKKwlsaXN0X2FkZCgmdm1kLT5yZXNvdXJjZXNbMV0uc2libGluZywgJnZtZC0+ZGV2LT5yZXNv
+dXJjZVtWTURfTUVNQkFSMV0uY2hpbGQpOworCWxpc3RfYWRkKCZ2bWQtPnJlc291cmNlc1syXS5z
+aWJsaW5nLCAmdm1kLT5kZXYtPnJlc291cmNlW1ZNRF9NRU1CQVIyXS5jaGlsZCk7CiB9CiAKIHN0
+YXRpYyB2b2lkIHZtZF9kZXRhY2hfcmVzb3VyY2VzKHN0cnVjdCB2bWRfZGV2ICp2bWQpCiB7Ci0J
+dm1kLT5kZXYtPnJlc291cmNlW1ZNRF9NRU1CQVIxXS5jaGlsZCA9IE5VTEw7Ci0Jdm1kLT5kZXYt
+PnJlc291cmNlW1ZNRF9NRU1CQVIyXS5jaGlsZCA9IE5VTEw7CisJSU5JVF9MSVNUX0hFQUQoJnZt
+ZC0+ZGV2LT5yZXNvdXJjZVtWTURfTUVNQkFSMV0uY2hpbGQpOworCUlOSVRfTElTVF9IRUFEKCZ2
+bWQtPmRldi0+cmVzb3VyY2VbVk1EX01FTUJBUjJdLmNoaWxkKTsKIH0KIAogLyoKZGlmZiAtLWdp
+dCBhL2RyaXZlcnMvcGNpL3Byb2JlLmMgYi9kcml2ZXJzL3BjaS9wcm9iZS5jCmluZGV4IGFjODc2
+ZTMyZGU0Yi4uOTYyNGRkMWRmZDQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wcm9iZS5jCisr
+KyBiL2RyaXZlcnMvcGNpL3Byb2JlLmMKQEAgLTU5LDYgKzU5LDggQEAgc3RhdGljIHN0cnVjdCBy
+ZXNvdXJjZSAqZ2V0X3BjaV9kb21haW5fYnVzbl9yZXMoaW50IGRvbWFpbl9ucikKIAlyLT5yZXMu
+c3RhcnQgPSAwOwogCXItPnJlcy5lbmQgPSAweGZmOwogCXItPnJlcy5mbGFncyA9IElPUkVTT1VS
+Q0VfQlVTIHwgSU9SRVNPVVJDRV9QQ0lfRklYRUQ7CisJSU5JVF9MSVNUX0hFQUQoJnItPnJlcy5j
+aGlsZCk7CisJSU5JVF9MSVNUX0hFQUQoJnItPnJlcy5zaWJsaW5nKTsKIAogCWxpc3RfYWRkX3Rh
+aWwoJnItPmxpc3QsICZwY2lfZG9tYWluX2J1c25fcmVzX2xpc3QpOwogCmRpZmYgLS1naXQgYS9k
+cml2ZXJzL3BjaS9zZXR1cC1idXMuYyBiL2RyaXZlcnMvcGNpL3NldHVwLWJ1cy5jCmluZGV4IDc5
+YjE4MjRlODNiNC4uOGU2ODVhZjg5MzhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9zZXR1cC1i
+dXMuYworKysgYi9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYwpAQCAtMjEwNyw3ICsyMTA3LDcgQEAg
+aW50IHBjaV9yZWFzc2lnbl9icmlkZ2VfcmVzb3VyY2VzKHN0cnVjdCBwY2lfZGV2ICpicmlkZ2Us
+IHVuc2lnbmVkIGxvbmcgdHlwZSkKIAkJCQljb250aW51ZTsKIAogCQkJLyogSWdub3JlIEJBUnMg
+d2hpY2ggYXJlIHN0aWxsIGluIHVzZSAqLwotCQkJaWYgKHJlcy0+Y2hpbGQpCisJCQlpZiAoIWxp
+c3RfZW1wdHkoJnJlcy0+Y2hpbGQpKQogCQkJCWNvbnRpbnVlOwogCiAJCQlyZXQgPSBhZGRfdG9f
+bGlzdCgmc2F2ZWQsIGJyaWRnZSwgcmVzLCAwLCAwKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGlu
+dXgvaW9wb3J0LmggYi9pbmNsdWRlL2xpbnV4L2lvcG9ydC5oCmluZGV4IGRmZGNkMGJmZTU0ZS4u
+Yjc0NTZhZTg4OWRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lvcG9ydC5oCisrKyBiL2lu
+Y2x1ZGUvbGludXgvaW9wb3J0LmgKQEAgLTEyLDYgKzEyLDcgQEAKICNpZm5kZWYgX19BU1NFTUJM
+WV9fCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5o
+PgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIC8qCiAgKiBSZXNvdXJjZXMgYXJlIHRyZWUtbGlr
+ZSwgYWxsb3dpbmcKICAqIG5lc3RpbmcgZXRjLi4KQEAgLTIyLDcgKzIzLDggQEAgc3RydWN0IHJl
+c291cmNlIHsKIAljb25zdCBjaGFyICpuYW1lOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5z
+aWduZWQgbG9uZyBkZXNjOwotCXN0cnVjdCByZXNvdXJjZSAqcGFyZW50LCAqc2libGluZywgKmNo
+aWxkOworCXN0cnVjdCBsaXN0X2hlYWQgY2hpbGQsIHNpYmxpbmc7CisJc3RydWN0IHJlc291cmNl
+ICpwYXJlbnQ7CiB9OwogCiAvKgpAQCAtMjE2LDcgKzIxOCw2IEBAIHN0YXRpYyBpbmxpbmUgYm9v
+bCByZXNvdXJjZV9jb250YWlucyhzdHJ1Y3QgcmVzb3VyY2UgKnIxLCBzdHJ1Y3QgcmVzb3VyY2Ug
+KnIyKQogCXJldHVybiByMS0+c3RhcnQgPD0gcjItPnN0YXJ0ICYmIHIxLT5lbmQgPj0gcjItPmVu
+ZDsKIH0KIAotCiAvKiBDb252ZW5pZW5jZSBzaG9ydGhhbmQgd2l0aCBhbGxvY2F0aW9uICovCiAj
+ZGVmaW5lIHJlcXVlc3RfcmVnaW9uKHN0YXJ0LG4sbmFtZSkJCV9fcmVxdWVzdF9yZWdpb24oJmlv
+cG9ydF9yZXNvdXJjZSwgKHN0YXJ0KSwgKG4pLCAobmFtZSksIDApCiAjZGVmaW5lIHJlcXVlc3Rf
+bXV4ZWRfcmVnaW9uKHN0YXJ0LG4sbmFtZSkJX19yZXF1ZXN0X3JlZ2lvbigmaW9wb3J0X3Jlc291
+cmNlLCAoc3RhcnQpLCAobiksIChuYW1lKSwgSU9SRVNPVVJDRV9NVVhFRCkKQEAgLTI4Nyw2ICsy
+ODgsMTggQEAgc3RhdGljIGlubGluZSBib29sIHJlc291cmNlX292ZXJsYXBzKHN0cnVjdCByZXNv
+dXJjZSAqcjEsIHN0cnVjdCByZXNvdXJjZSAqcjIpCiAgICAgICAgcmV0dXJuIChyMS0+c3RhcnQg
+PD0gcjItPmVuZCAmJiByMS0+ZW5kID49IHIyLT5zdGFydCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUg
+c3RydWN0IHJlc291cmNlICpyZXNvdXJjZV9zaWJsaW5nKHN0cnVjdCByZXNvdXJjZSAqcmVzKQor
+eworCWlmIChyZXMtPnBhcmVudCAmJiAhbGlzdF9pc19sYXN0KCZyZXMtPnNpYmxpbmcsICZyZXMt
+PnBhcmVudC0+Y2hpbGQpKQorCQlyZXR1cm4gbGlzdF9uZXh0X2VudHJ5KHJlcywgc2libGluZyk7
+CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJlc291cmNlICpyZXNv
+dXJjZV9maXJzdF9jaGlsZChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCXJldHVybiBsaXN0
+X2ZpcnN0X2VudHJ5X29yX251bGwoaGVhZCwgc3RydWN0IHJlc291cmNlLCBzaWJsaW5nKTsKK30K
+KwogCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAjZW5kaWYJLyogX0xJTlVYX0lPUE9SVF9I
+ICovCmRpZmYgLS1naXQgYS9rZXJuZWwvcmVzb3VyY2UuYyBiL2tlcm5lbC9yZXNvdXJjZS5jCmlu
+ZGV4IDgxY2NkMTljMWQ5Zi4uYzk2ZTU4ZDNkMmY4IDEwMDY0NAotLS0gYS9rZXJuZWwvcmVzb3Vy
+Y2UuYworKysgYi9rZXJuZWwvcmVzb3VyY2UuYwpAQCAtMzEsNiArMzEsOCBAQCBzdHJ1Y3QgcmVz
+b3VyY2UgaW9wb3J0X3Jlc291cmNlID0gewogCS5zdGFydAk9IDAsCiAJLmVuZAk9IElPX1NQQUNF
+X0xJTUlULAogCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCisJLnNpYmxpbmcgPSBMSVNUX0hFQURf
+SU5JVChpb3BvcnRfcmVzb3VyY2Uuc2libGluZyksCisJLmNoaWxkICA9IExJU1RfSEVBRF9JTklU
+KGlvcG9ydF9yZXNvdXJjZS5jaGlsZCksCiB9OwogRVhQT1JUX1NZTUJPTChpb3BvcnRfcmVzb3Vy
+Y2UpOwogCkBAIC0zOSw2ICs0MSw4IEBAIHN0cnVjdCByZXNvdXJjZSBpb21lbV9yZXNvdXJjZSA9
+IHsKIAkuc3RhcnQJPSAwLAogCS5lbmQJPSAtMSwKIAkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwK
+Kwkuc2libGluZyA9IExJU1RfSEVBRF9JTklUKGlvbWVtX3Jlc291cmNlLnNpYmxpbmcpLAorCS5j
+aGlsZCAgPSBMSVNUX0hFQURfSU5JVChpb21lbV9yZXNvdXJjZS5jaGlsZCksCiB9OwogRVhQT1JU
+X1NZTUJPTChpb21lbV9yZXNvdXJjZSk7CiAKQEAgLTU3LDIwICs2MSwyMCBAQCBzdGF0aWMgREVG
+SU5FX1JXTE9DSyhyZXNvdXJjZV9sb2NrKTsKICAqIGJ5IGJvb3QgbWVtIGFmdGVyIHRoZSBzeXN0
+ZW0gaXMgdXAuIFNvIGZvciByZXVzaW5nIHRoZSByZXNvdXJjZSBlbnRyeQogICogd2UgbmVlZCB0
+byByZW1lbWJlciB0aGUgcmVzb3VyY2UuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgKmJv
+b3RtZW1fcmVzb3VyY2VfZnJlZTsKK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIGJvb3RtZW1fcmVz
+b3VyY2VfZnJlZSA9IExJU1RfSEVBRF9JTklUKGJvb3RtZW1fcmVzb3VyY2VfZnJlZSk7CiBzdGF0
+aWMgREVGSU5FX1NQSU5MT0NLKGJvb3RtZW1fcmVzb3VyY2VfbG9jayk7CiAKIHN0YXRpYyBzdHJ1
+Y3QgcmVzb3VyY2UgKm5leHRfcmVzb3VyY2Uoc3RydWN0IHJlc291cmNlICpwLCBib29sIHNpYmxp
+bmdfb25seSkKIHsKIAkvKiBDYWxsZXIgd2FudHMgdG8gdHJhdmVyc2UgdGhyb3VnaCBzaWJsaW5n
+cyBvbmx5ICovCiAJaWYgKHNpYmxpbmdfb25seSkKLQkJcmV0dXJuIHAtPnNpYmxpbmc7CisJCXJl
+dHVybiByZXNvdXJjZV9zaWJsaW5nKHApOwogCi0JaWYgKHAtPmNoaWxkKQotCQlyZXR1cm4gcC0+
+Y2hpbGQ7Ci0Jd2hpbGUgKCFwLT5zaWJsaW5nICYmIHAtPnBhcmVudCkKKwlpZiAoIWxpc3RfZW1w
+dHkoJnAtPmNoaWxkKSkKKwkJcmV0dXJuIHJlc291cmNlX2ZpcnN0X2NoaWxkKCZwLT5jaGlsZCk7
+CisJd2hpbGUgKCFyZXNvdXJjZV9zaWJsaW5nKHApICYmIHAtPnBhcmVudCkKIAkJcCA9IHAtPnBh
+cmVudDsKLQlyZXR1cm4gcC0+c2libGluZzsKKwlyZXR1cm4gcmVzb3VyY2Vfc2libGluZyhwKTsK
+IH0KIAogc3RhdGljIHZvaWQgKnJfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYsIGxv
+ZmZfdCAqcG9zKQpAQCAtOTAsNyArOTQsNyBAQCBzdGF0aWMgdm9pZCAqcl9zdGFydChzdHJ1Y3Qg
+c2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQogCXN0cnVjdCByZXNvdXJjZSAqcCA9IFBERV9EQVRB
+KGZpbGVfaW5vZGUobS0+ZmlsZSkpOwogCWxvZmZfdCBsID0gMDsKIAlyZWFkX2xvY2soJnJlc291
+cmNlX2xvY2spOwotCWZvciAocCA9IHAtPmNoaWxkOyBwICYmIGwgPCAqcG9zOyBwID0gcl9uZXh0
+KG0sIHAsICZsKSkKKwlmb3IgKHAgPSByZXNvdXJjZV9maXJzdF9jaGlsZCgmcC0+Y2hpbGQpOyBw
+ICYmIGwgPCAqcG9zOyBwID0gcl9uZXh0KG0sIHAsICZsKSkKIAkJOwogCXJldHVybiBwOwogfQpA
+QCAtMTUzLDggKzE1Nyw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfcmVzb3VyY2Uoc3RydWN0IHJlc291
+cmNlICpyZXMpCiAKIAlpZiAoIVBhZ2VTbGFiKHZpcnRfdG9faGVhZF9wYWdlKHJlcykpKSB7CiAJ
+CXNwaW5fbG9jaygmYm9vdG1lbV9yZXNvdXJjZV9sb2NrKTsKLQkJcmVzLT5zaWJsaW5nID0gYm9v
+dG1lbV9yZXNvdXJjZV9mcmVlOwotCQlib290bWVtX3Jlc291cmNlX2ZyZWUgPSByZXM7CisJCWxp
+c3RfYWRkKCZyZXMtPnNpYmxpbmcsICZib290bWVtX3Jlc291cmNlX2ZyZWUpOwogCQlzcGluX3Vu
+bG9jaygmYm9vdG1lbV9yZXNvdXJjZV9sb2NrKTsKIAl9IGVsc2UgewogCQlrZnJlZShyZXMpOwpA
+QCAtMTY2LDEwICsxNjksOSBAQCBzdGF0aWMgc3RydWN0IHJlc291cmNlICphbGxvY19yZXNvdXJj
+ZShnZnBfdCBmbGFncykKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IE5VTEw7CiAKIAlzcGluX2xv
+Y2soJmJvb3RtZW1fcmVzb3VyY2VfbG9jayk7Ci0JaWYgKGJvb3RtZW1fcmVzb3VyY2VfZnJlZSkg
+ewotCQlyZXMgPSBib290bWVtX3Jlc291cmNlX2ZyZWU7Ci0JCWJvb3RtZW1fcmVzb3VyY2VfZnJl
+ZSA9IHJlcy0+c2libGluZzsKLQl9CisJcmVzID0gcmVzb3VyY2VfZmlyc3RfY2hpbGQoJmJvb3Rt
+ZW1fcmVzb3VyY2VfZnJlZSk7CisJaWYgKHJlcykKKwkJbGlzdF9kZWwoJnJlcy0+c2libGluZyk7
+CiAJc3Bpbl91bmxvY2soJmJvb3RtZW1fcmVzb3VyY2VfbG9jayk7CiAKIAlpZiAocmVzKQpAQCAt
+MTc3LDYgKzE3OSw4IEBAIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgKmFsbG9jX3Jlc291cmNlKGdm
+cF90IGZsYWdzKQogCWVsc2UKIAkJcmVzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJlc291cmNl
+KSwgZmxhZ3MpOwogCisJSU5JVF9MSVNUX0hFQUQoJnJlcy0+Y2hpbGQpOworCUlOSVRfTElTVF9I
+RUFEKCZyZXMtPnNpYmxpbmcpOwogCXJldHVybiByZXM7CiB9CiAKQEAgLTE4NSw3ICsxODksNyBA
+QCBzdGF0aWMgc3RydWN0IHJlc291cmNlICogX19yZXF1ZXN0X3Jlc291cmNlKHN0cnVjdCByZXNv
+dXJjZSAqcm9vdCwgc3RydWN0IHJlc291cgogewogCXJlc291cmNlX3NpemVfdCBzdGFydCA9IG5l
+dy0+c3RhcnQ7CiAJcmVzb3VyY2Vfc2l6ZV90IGVuZCA9IG5ldy0+ZW5kOwotCXN0cnVjdCByZXNv
+dXJjZSAqdG1wLCAqKnA7CisJc3RydWN0IHJlc291cmNlICp0bXA7CiAKIAlpZiAoZW5kIDwgc3Rh
+cnQpCiAJCXJldHVybiByb290OwpAQCAtMTkzLDY0ICsxOTcsNjIgQEAgc3RhdGljIHN0cnVjdCBy
+ZXNvdXJjZSAqIF9fcmVxdWVzdF9yZXNvdXJjZShzdHJ1Y3QgcmVzb3VyY2UgKnJvb3QsIHN0cnVj
+dCByZXNvdXIKIAkJcmV0dXJuIHJvb3Q7CiAJaWYgKGVuZCA+IHJvb3QtPmVuZCkKIAkJcmV0dXJu
+IHJvb3Q7Ci0JcCA9ICZyb290LT5jaGlsZDsKLQlmb3IgKDs7KSB7Ci0JCXRtcCA9ICpwOwotCQlp
+ZiAoIXRtcCB8fCB0bXAtPnN0YXJ0ID4gZW5kKSB7Ci0JCQluZXctPnNpYmxpbmcgPSB0bXA7Ci0J
+CQkqcCA9IG5ldzsKKworCWlmIChsaXN0X2VtcHR5KCZyb290LT5jaGlsZCkpIHsKKwkJbGlzdF9h
+ZGQoJm5ldy0+c2libGluZywgJnJvb3QtPmNoaWxkKTsKKwkJbmV3LT5wYXJlbnQgPSByb290Owor
+CQlJTklUX0xJU1RfSEVBRCgmbmV3LT5jaGlsZCk7CisJCXJldHVybiBOVUxMOworCX0KKworCWxp
+c3RfZm9yX2VhY2hfZW50cnkodG1wLCAmcm9vdC0+Y2hpbGQsIHNpYmxpbmcpIHsKKwkJaWYgKHRt
+cC0+c3RhcnQgPiBlbmQpIHsKKwkJCWxpc3RfYWRkKCZuZXctPnNpYmxpbmcsIHRtcC0+c2libGlu
+Zy5wcmV2KTsKIAkJCW5ldy0+cGFyZW50ID0gcm9vdDsKKwkJCUlOSVRfTElTVF9IRUFEKCZuZXct
+PmNoaWxkKTsKIAkJCXJldHVybiBOVUxMOwogCQl9Ci0JCXAgPSAmdG1wLT5zaWJsaW5nOwogCQlp
+ZiAodG1wLT5lbmQgPCBzdGFydCkKIAkJCWNvbnRpbnVlOwogCQlyZXR1cm4gdG1wOwogCX0KKwor
+CWxpc3RfYWRkX3RhaWwoJm5ldy0+c2libGluZywgJnJvb3QtPmNoaWxkKTsKKwluZXctPnBhcmVu
+dCA9IHJvb3Q7CisJSU5JVF9MSVNUX0hFQUQoJm5ldy0+Y2hpbGQpOworCXJldHVybiBOVUxMOwog
+fQogCiBzdGF0aWMgaW50IF9fcmVsZWFzZV9yZXNvdXJjZShzdHJ1Y3QgcmVzb3VyY2UgKm9sZCwg
+Ym9vbCByZWxlYXNlX2NoaWxkKQogewotCXN0cnVjdCByZXNvdXJjZSAqdG1wLCAqKnAsICpjaGQ7
+CisJc3RydWN0IHJlc291cmNlICp0bXAsICpuZXh0LCAqY2hkOwogCi0JcCA9ICZvbGQtPnBhcmVu
+dC0+Y2hpbGQ7Ci0JZm9yICg7OykgewotCQl0bXAgPSAqcDsKLQkJaWYgKCF0bXApCi0JCQlicmVh
+azsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodG1wLCBuZXh0LCAmb2xkLT5wYXJlbnQtPmNo
+aWxkLCBzaWJsaW5nKSB7CiAJCWlmICh0bXAgPT0gb2xkKSB7Ci0JCQlpZiAocmVsZWFzZV9jaGls
+ZCB8fCAhKHRtcC0+Y2hpbGQpKSB7Ci0JCQkJKnAgPSB0bXAtPnNpYmxpbmc7CisJCQlpZiAocmVs
+ZWFzZV9jaGlsZCB8fCBsaXN0X2VtcHR5KCZ0bXAtPmNoaWxkKSkgeworCQkJCWxpc3RfZGVsKCZ0
+bXAtPnNpYmxpbmcpOwogCQkJfSBlbHNlIHsKLQkJCQlmb3IgKGNoZCA9IHRtcC0+Y2hpbGQ7OyBj
+aGQgPSBjaGQtPnNpYmxpbmcpIHsKKwkJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoZCwgJnRtcC0+
+Y2hpbGQsIHNpYmxpbmcpCiAJCQkJCWNoZC0+cGFyZW50ID0gdG1wLT5wYXJlbnQ7Ci0JCQkJCWlm
+ICghKGNoZC0+c2libGluZykpCi0JCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJKnAgPSB0bXAtPmNo
+aWxkOwotCQkJCWNoZC0+c2libGluZyA9IHRtcC0+c2libGluZzsKKwkJCQlsaXN0X3NwbGljZSgm
+dG1wLT5jaGlsZCwgdG1wLT5zaWJsaW5nLnByZXYpOworCQkJCWxpc3RfZGVsKCZ0bXAtPnNpYmxp
+bmcpOwogCQkJfQorCiAJCQlvbGQtPnBhcmVudCA9IE5VTEw7CiAJCQlyZXR1cm4gMDsKIAkJfQot
+CQlwID0gJnRtcC0+c2libGluZzsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIHN0YXRpYyB2
+b2lkIF9fcmVsZWFzZV9jaGlsZF9yZXNvdXJjZXMoc3RydWN0IHJlc291cmNlICpyKQogewotCXN0
+cnVjdCByZXNvdXJjZSAqdG1wLCAqcDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnRtcCwgKm5leHQ7CiAJ
+cmVzb3VyY2Vfc2l6ZV90IHNpemU7CiAKLQlwID0gci0+Y2hpbGQ7Ci0Jci0+Y2hpbGQgPSBOVUxM
+OwotCXdoaWxlIChwKSB7Ci0JCXRtcCA9IHA7Ci0JCXAgPSBwLT5zaWJsaW5nOwotCisJbGlzdF9m
+b3JfZWFjaF9lbnRyeV9zYWZlKHRtcCwgbmV4dCwgJnItPmNoaWxkLCBzaWJsaW5nKSB7CiAJCXRt
+cC0+cGFyZW50ID0gTlVMTDsKLQkJdG1wLT5zaWJsaW5nID0gTlVMTDsKKwkJbGlzdF9kZWxfaW5p
+dCgmdG1wLT5zaWJsaW5nKTsKIAkJX19yZWxlYXNlX2NoaWxkX3Jlc291cmNlcyh0bXApOwogCiAJ
+CXByaW50ayhLRVJOX0RFQlVHICJyZWxlYXNlIGNoaWxkIHJlc291cmNlICVwUlxuIiwgdG1wKTsK
+QEAgLTI1OSw2ICsyNjEsOCBAQCBzdGF0aWMgdm9pZCBfX3JlbGVhc2VfY2hpbGRfcmVzb3VyY2Vz
+KHN0cnVjdCByZXNvdXJjZSAqcikKIAkJdG1wLT5zdGFydCA9IDA7CiAJCXRtcC0+ZW5kID0gc2l6
+ZSAtIDE7CiAJfQorCisJSU5JVF9MSVNUX0hFQUQoJnRtcC0+Y2hpbGQpOwogfQogCiB2b2lkIHJl
+bGVhc2VfY2hpbGRfcmVzb3VyY2VzKHN0cnVjdCByZXNvdXJjZSAqcikKQEAgLTM0Myw3ICszNDcs
+OCBAQCBzdGF0aWMgaW50IGZpbmRfbmV4dF9pb21lbV9yZXMoc3RydWN0IHJlc291cmNlICpyZXMs
+IHVuc2lnbmVkIGxvbmcgZGVzYywKIAogCXJlYWRfbG9jaygmcmVzb3VyY2VfbG9jayk7CiAKLQlm
+b3IgKHAgPSBpb21lbV9yZXNvdXJjZS5jaGlsZDsgcDsgcCA9IG5leHRfcmVzb3VyY2UocCwgc2li
+bGluZ19vbmx5KSkgeworCWZvciAocCA9IHJlc291cmNlX2ZpcnN0X2NoaWxkKCZpb21lbV9yZXNv
+dXJjZS5jaGlsZCk7IHA7CisJCQlwID0gbmV4dF9yZXNvdXJjZShwLCBzaWJsaW5nX29ubHkpKSB7
+CiAJCWlmICgocC0+ZmxhZ3MgJiByZXMtPmZsYWdzKSAhPSByZXMtPmZsYWdzKQogCQkJY29udGlu
+dWU7CiAJCWlmICgoZGVzYyAhPSBJT1JFU19ERVNDX05PTkUpICYmIChkZXNjICE9IHAtPmRlc2Mp
+KQpAQCAtNTMyLDcgKzUzNyw3IEBAIGludCByZWdpb25faW50ZXJzZWN0cyhyZXNvdXJjZV9zaXpl
+X3Qgc3RhcnQsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzLAogCXN0cnVjdCByZXNv
+dXJjZSAqcDsKIAogCXJlYWRfbG9jaygmcmVzb3VyY2VfbG9jayk7Ci0JZm9yIChwID0gaW9tZW1f
+cmVzb3VyY2UuY2hpbGQ7IHAgOyBwID0gcC0+c2libGluZykgeworCWxpc3RfZm9yX2VhY2hfZW50
+cnkocCwgJmlvbWVtX3Jlc291cmNlLmNoaWxkLCBzaWJsaW5nKSB7CiAJCWJvb2wgaXNfdHlwZSA9
+ICgoKHAtPmZsYWdzICYgZmxhZ3MpID09IGZsYWdzKSAmJgogCQkJCSgoZGVzYyA9PSBJT1JFU19E
+RVNDX05PTkUpIHx8CiAJCQkJIChkZXNjID09IHAtPmRlc2MpKSk7CkBAIC01ODYsNyArNTkxLDcg
+QEAgc3RhdGljIGludCBfX2ZpbmRfcmVzb3VyY2Uoc3RydWN0IHJlc291cmNlICpyb290LCBzdHJ1
+Y3QgcmVzb3VyY2UgKm9sZCwKIAkJCSByZXNvdXJjZV9zaXplX3QgIHNpemUsCiAJCQkgc3RydWN0
+IHJlc291cmNlX2NvbnN0cmFpbnQgKmNvbnN0cmFpbnQpCiB7Ci0Jc3RydWN0IHJlc291cmNlICp0
+aGlzID0gcm9vdC0+Y2hpbGQ7CisJc3RydWN0IHJlc291cmNlICp0aGlzID0gcmVzb3VyY2VfZmly
+c3RfY2hpbGQoJnJvb3QtPmNoaWxkKTsKIAlzdHJ1Y3QgcmVzb3VyY2UgdG1wID0gKm5ldywgYXZh
+aWwsIGFsbG9jOwogCiAJdG1wLnN0YXJ0ID0gcm9vdC0+c3RhcnQ7CkBAIC01OTYsNyArNjAxLDcg
+QEAgc3RhdGljIGludCBfX2ZpbmRfcmVzb3VyY2Uoc3RydWN0IHJlc291cmNlICpyb290LCBzdHJ1
+Y3QgcmVzb3VyY2UgKm9sZCwKIAkgKi8KIAlpZiAodGhpcyAmJiB0aGlzLT5zdGFydCA9PSByb290
+LT5zdGFydCkgewogCQl0bXAuc3RhcnQgPSAodGhpcyA9PSBvbGQpID8gb2xkLT5zdGFydCA6IHRo
+aXMtPmVuZCArIDE7Ci0JCXRoaXMgPSB0aGlzLT5zaWJsaW5nOworCQl0aGlzID0gcmVzb3VyY2Vf
+c2libGluZyh0aGlzKTsKIAl9CiAJZm9yKDs7KSB7CiAJCWlmICh0aGlzKQpAQCAtNjMyLDcgKzYz
+Nyw3IEBAIG5leHQ6CQlpZiAoIXRoaXMgfHwgdGhpcy0+ZW5kID09IHJvb3QtPmVuZCkKIAogCQlp
+ZiAodGhpcyAhPSBvbGQpCiAJCQl0bXAuc3RhcnQgPSB0aGlzLT5lbmQgKyAxOwotCQl0aGlzID0g
+dGhpcy0+c2libGluZzsKKwkJdGhpcyA9IHJlc291cmNlX3NpYmxpbmcodGhpcyk7CiAJfQogCXJl
+dHVybiAtRUJVU1k7CiB9CkBAIC02NzYsNyArNjgxLDcgQEAgc3RhdGljIGludCByZWFsbG9jYXRl
+X3Jlc291cmNlKHN0cnVjdCByZXNvdXJjZSAqcm9vdCwgc3RydWN0IHJlc291cmNlICpvbGQsCiAJ
+CWdvdG8gb3V0OwogCX0KIAotCWlmIChvbGQtPmNoaWxkKSB7CisJaWYgKCFsaXN0X2VtcHR5KCZv
+bGQtPmNoaWxkKSkgewogCQllcnIgPSAtRUJVU1k7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTc1Nyw3
+ICs3NjIsNyBAQCBzdHJ1Y3QgcmVzb3VyY2UgKmxvb2t1cF9yZXNvdXJjZShzdHJ1Y3QgcmVzb3Vy
+Y2UgKnJvb3QsIHJlc291cmNlX3NpemVfdCBzdGFydCkKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsK
+IAogCXJlYWRfbG9jaygmcmVzb3VyY2VfbG9jayk7Ci0JZm9yIChyZXMgPSByb290LT5jaGlsZDsg
+cmVzOyByZXMgPSByZXMtPnNpYmxpbmcpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcywgJnJv
+b3QtPmNoaWxkLCBzaWJsaW5nKSB7CiAJCWlmIChyZXMtPnN0YXJ0ID09IHN0YXJ0KQogCQkJYnJl
+YWs7CiAJfQpAQCAtNzkwLDMyICs3OTUsMjcgQEAgc3RhdGljIHN0cnVjdCByZXNvdXJjZSAqIF9f
+aW5zZXJ0X3Jlc291cmNlKHN0cnVjdCByZXNvdXJjZSAqcGFyZW50LCBzdHJ1Y3QgcmVzb3UKIAkJ
+CWJyZWFrOwogCX0KIAotCWZvciAobmV4dCA9IGZpcnN0OyA7IG5leHQgPSBuZXh0LT5zaWJsaW5n
+KSB7CisJZm9yIChuZXh0ID0gZmlyc3Q7IDsgbmV4dCA9IHJlc291cmNlX3NpYmxpbmcobmV4dCkp
+IHsKIAkJLyogUGFydGlhbCBvdmVybGFwPyBCYWQsIGFuZCB1bmZpeGFibGUgKi8KIAkJaWYgKG5l
+eHQtPnN0YXJ0IDwgbmV3LT5zdGFydCB8fCBuZXh0LT5lbmQgPiBuZXctPmVuZCkKIAkJCXJldHVy
+biBuZXh0OwotCQlpZiAoIW5leHQtPnNpYmxpbmcpCisJCWlmICghcmVzb3VyY2Vfc2libGluZyhu
+ZXh0KSkKIAkJCWJyZWFrOwotCQlpZiAobmV4dC0+c2libGluZy0+c3RhcnQgPiBuZXctPmVuZCkK
+KwkJaWYgKHJlc291cmNlX3NpYmxpbmcobmV4dCktPnN0YXJ0ID4gbmV3LT5lbmQpCiAJCQlicmVh
+azsKIAl9Ci0KIAluZXctPnBhcmVudCA9IHBhcmVudDsKLQluZXctPnNpYmxpbmcgPSBuZXh0LT5z
+aWJsaW5nOwotCW5ldy0+Y2hpbGQgPSBmaXJzdDsKKwlsaXN0X2FkZCgmbmV3LT5zaWJsaW5nLCAm
+bmV4dC0+c2libGluZyk7CisJSU5JVF9MSVNUX0hFQUQoJm5ldy0+Y2hpbGQpOwogCi0JbmV4dC0+
+c2libGluZyA9IE5VTEw7Ci0JZm9yIChuZXh0ID0gZmlyc3Q7IG5leHQ7IG5leHQgPSBuZXh0LT5z
+aWJsaW5nKQorCS8qCisJICogRnJvbSBmaXJzdCB0byBuZXh0LCB0aGV5IGFsbCBmYWxsIGludG8g
+bmV3J3MgcmVnaW9uLCBzbyBjaGFuZ2UgdGhlbQorCSAqIGFzIG5ldydzIGNoaWxkcmVuLgorCSAq
+LworCWxpc3RfY3V0X3Bvc2l0aW9uKCZuZXctPmNoaWxkLCBmaXJzdC0+c2libGluZy5wcmV2LCAm
+bmV4dC0+c2libGluZyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShuZXh0LCAmbmV3LT5jaGlsZCwg
+c2libGluZykKIAkJbmV4dC0+cGFyZW50ID0gbmV3OwogCi0JaWYgKHBhcmVudC0+Y2hpbGQgPT0g
+Zmlyc3QpIHsKLQkJcGFyZW50LT5jaGlsZCA9IG5ldzsKLQl9IGVsc2UgewotCQluZXh0ID0gcGFy
+ZW50LT5jaGlsZDsKLQkJd2hpbGUgKG5leHQtPnNpYmxpbmcgIT0gZmlyc3QpCi0JCQluZXh0ID0g
+bmV4dC0+c2libGluZzsKLQkJbmV4dC0+c2libGluZyA9IG5ldzsKLQl9CiAJcmV0dXJuIE5VTEw7
+CiB9CiAKQEAgLTkzNywxOSArOTM3LDE3IEBAIHN0YXRpYyBpbnQgX19hZGp1c3RfcmVzb3VyY2Uo
+c3RydWN0IHJlc291cmNlICpyZXMsIHJlc291cmNlX3NpemVfdCBzdGFydCwKIAlpZiAoKHN0YXJ0
+IDwgcGFyZW50LT5zdGFydCkgfHwgKGVuZCA+IHBhcmVudC0+ZW5kKSkKIAkJZ290byBvdXQ7CiAK
+LQlpZiAocmVzLT5zaWJsaW5nICYmIChyZXMtPnNpYmxpbmctPnN0YXJ0IDw9IGVuZCkpCisJaWYg
+KHJlc291cmNlX3NpYmxpbmcocmVzKSAmJiAocmVzb3VyY2Vfc2libGluZyhyZXMpLT5zdGFydCA8
+PSBlbmQpKQogCQlnb3RvIG91dDsKIAotCXRtcCA9IHBhcmVudC0+Y2hpbGQ7Ci0JaWYgKHRtcCAh
+PSByZXMpIHsKLQkJd2hpbGUgKHRtcC0+c2libGluZyAhPSByZXMpCi0JCQl0bXAgPSB0bXAtPnNp
+Ymxpbmc7CisJaWYgKHJlcy0+c2libGluZy5wcmV2ICE9ICZwYXJlbnQtPmNoaWxkKSB7CisJCXRt
+cCA9IGxpc3RfcHJldl9lbnRyeShyZXMsIHNpYmxpbmcpOwogCQlpZiAoc3RhcnQgPD0gdG1wLT5l
+bmQpCiAJCQlnb3RvIG91dDsKIAl9CiAKIHNraXA6Ci0JZm9yICh0bXAgPSByZXMtPmNoaWxkOyB0
+bXA7IHRtcCA9IHRtcC0+c2libGluZykKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcCwgJnJlcy0+
+Y2hpbGQsIHNpYmxpbmcpCiAJCWlmICgodG1wLT5zdGFydCA8IHN0YXJ0KSB8fCAodG1wLT5lbmQg
+PiBlbmQpKQogCQkJZ290byBvdXQ7CiAKQEAgLTk5NiwyNyArOTk0LDMwIEBAIEVYUE9SVF9TWU1C
+T0woYWRqdXN0X3Jlc291cmNlKTsKICAqLwogaW50IHJlcGFyZW50X3Jlc291cmNlcyhzdHJ1Y3Qg
+cmVzb3VyY2UgKnBhcmVudCwgc3RydWN0IHJlc291cmNlICpyZXMpCiB7Ci0Jc3RydWN0IHJlc291
+cmNlICpwLCAqKnBwOwotCXN0cnVjdCByZXNvdXJjZSAqKmZpcnN0cHAgPSBOVUxMOworCXN0cnVj
+dCByZXNvdXJjZSAqcCwgKmZpcnN0ID0gTlVMTDsKIAotCWZvciAocHAgPSAmcGFyZW50LT5jaGls
+ZDsgKHAgPSAqcHApICE9IE5VTEw7IHBwID0gJnAtPnNpYmxpbmcpIHsKKwlsaXN0X2Zvcl9lYWNo
+X2VudHJ5KHAsICZwYXJlbnQtPmNoaWxkLCBzaWJsaW5nKSB7CiAJCWlmIChwLT5lbmQgPCByZXMt
+PnN0YXJ0KQogCQkJY29udGludWU7CiAJCWlmIChyZXMtPmVuZCA8IHAtPnN0YXJ0KQogCQkJYnJl
+YWs7CiAJCWlmIChwLT5zdGFydCA8IHJlcy0+c3RhcnQgfHwgcC0+ZW5kID4gcmVzLT5lbmQpCiAJ
+CQlyZXR1cm4gLUVOT1RTVVBQOwkvKiBub3QgY29tcGxldGVseSBjb250YWluZWQgKi8KLQkJaWYg
+KGZpcnN0cHAgPT0gTlVMTCkKLQkJCWZpcnN0cHAgPSBwcDsKKwkJaWYgKGZpcnN0ID09IE5VTEwp
+CisJCQlmaXJzdCA9IHA7CiAJfQotCWlmIChmaXJzdHBwID09IE5VTEwpCisJaWYgKGZpcnN0ID09
+IE5VTEwpCiAJCXJldHVybiAtRUNBTkNFTEVEOyAvKiBkaWRuJ3QgZmluZCBhbnkgY29uZmxpY3Rp
+bmcgZW50cmllcz8gKi8KIAlyZXMtPnBhcmVudCA9IHBhcmVudDsKLQlyZXMtPmNoaWxkID0gKmZp
+cnN0cHA7Ci0JcmVzLT5zaWJsaW5nID0gKnBwOwotCSpmaXJzdHBwID0gcmVzOwotCSpwcCA9IE5V
+TEw7Ci0JZm9yIChwID0gcmVzLT5jaGlsZDsgcCAhPSBOVUxMOyBwID0gcC0+c2libGluZykgewor
+CWxpc3RfYWRkKCZyZXMtPnNpYmxpbmcsIHAtPnNpYmxpbmcucHJldik7CisJSU5JVF9MSVNUX0hF
+QUQoJnJlcy0+Y2hpbGQpOworCisJLyoKKwkgKiBGcm9tIGZpcnN0IHRvIHAncyBwcmV2aW91cyBz
+aWJsaW5nLCB0aGV5IGFsbCBmYWxsIGludG8KKwkgKiByZXMncyByZWdpb24sIGNoYW5nZSB0aGVt
+IGFzIHJlcydzIGNoaWxkcmVuLgorCSAqLworCWxpc3RfY3V0X3Bvc2l0aW9uKCZyZXMtPmNoaWxk
+LCBmaXJzdC0+c2libGluZy5wcmV2LCByZXMtPnNpYmxpbmcucHJldik7CisJbGlzdF9mb3JfZWFj
+aF9lbnRyeShwLCAmcmVzLT5jaGlsZCwgc2libGluZykgewogCQlwLT5wYXJlbnQgPSByZXM7CiAJ
+CXByX2RlYnVnKCJQQ0k6IFJlcGFyZW50ZWQgJXMgJXBSIHVuZGVyICVzXG4iLAogCQkJIHAtPm5h
+bWUsIHAsIHJlcy0+bmFtZSk7CkBAIC0xMjE2LDM0ICsxMjE3LDMyIEBAIEVYUE9SVF9TWU1CT0wo
+X19yZXF1ZXN0X3JlZ2lvbik7CiB2b2lkIF9fcmVsZWFzZV9yZWdpb24oc3RydWN0IHJlc291cmNl
+ICpwYXJlbnQsIHJlc291cmNlX3NpemVfdCBzdGFydCwKIAkJCXJlc291cmNlX3NpemVfdCBuKQog
+ewotCXN0cnVjdCByZXNvdXJjZSAqKnA7CisJc3RydWN0IHJlc291cmNlICpyZXM7CiAJcmVzb3Vy
+Y2Vfc2l6ZV90IGVuZDsKIAotCXAgPSAmcGFyZW50LT5jaGlsZDsKKwlyZXMgPSByZXNvdXJjZV9m
+aXJzdF9jaGlsZCgmcGFyZW50LT5jaGlsZCk7CiAJZW5kID0gc3RhcnQgKyBuIC0gMTsKIAogCXdy
+aXRlX2xvY2soJnJlc291cmNlX2xvY2spOwogCiAJZm9yICg7OykgewotCQlzdHJ1Y3QgcmVzb3Vy
+Y2UgKnJlcyA9ICpwOwotCiAJCWlmICghcmVzKQogCQkJYnJlYWs7CiAJCWlmIChyZXMtPnN0YXJ0
+IDw9IHN0YXJ0ICYmIHJlcy0+ZW5kID49IGVuZCkgewogCQkJaWYgKCEocmVzLT5mbGFncyAmIElP
+UkVTT1VSQ0VfQlVTWSkpIHsKLQkJCQlwID0gJnJlcy0+Y2hpbGQ7CisJCQkJcmVzID0gcmVzb3Vy
+Y2VfZmlyc3RfY2hpbGQoJnJlcy0+Y2hpbGQpOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJaWYg
+KHJlcy0+c3RhcnQgIT0gc3RhcnQgfHwgcmVzLT5lbmQgIT0gZW5kKQogCQkJCWJyZWFrOwotCQkJ
+KnAgPSByZXMtPnNpYmxpbmc7CisJCQlsaXN0X2RlbCgmcmVzLT5zaWJsaW5nKTsKIAkJCXdyaXRl
+X3VubG9jaygmcmVzb3VyY2VfbG9jayk7CiAJCQlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0Vf
+TVVYRUQpCiAJCQkJd2FrZV91cCgmbXV4ZWRfcmVzb3VyY2Vfd2FpdCk7CiAJCQlmcmVlX3Jlc291
+cmNlKHJlcyk7CiAJCQlyZXR1cm47CiAJCX0KLQkJcCA9ICZyZXMtPnNpYmxpbmc7CisJCXJlcyA9
+IHJlc291cmNlX3NpYmxpbmcocmVzKTsKIAl9CiAKIAl3cml0ZV91bmxvY2soJnJlc291cmNlX2xv
+Y2spOwpAQCAtMTI3OCw5ICsxMjc3LDcgQEAgRVhQT1JUX1NZTUJPTChfX3JlbGVhc2VfcmVnaW9u
+KTsKIGludCByZWxlYXNlX21lbV9yZWdpb25fYWRqdXN0YWJsZShzdHJ1Y3QgcmVzb3VyY2UgKnBh
+cmVudCwKIAkJCXJlc291cmNlX3NpemVfdCBzdGFydCwgcmVzb3VyY2Vfc2l6ZV90IHNpemUpCiB7
+Ci0Jc3RydWN0IHJlc291cmNlICoqcDsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQlzdHJ1Y3Qg
+cmVzb3VyY2UgKm5ld19yZXM7CisJc3RydWN0IHJlc291cmNlICpyZXMsICpuZXdfcmVzOwogCXJl
+c291cmNlX3NpemVfdCBlbmQ7CiAJaW50IHJldCA9IC1FSU5WQUw7CiAKQEAgLTEyOTEsMTYgKzEy
+ODgsMTYgQEAgaW50IHJlbGVhc2VfbWVtX3JlZ2lvbl9hZGp1c3RhYmxlKHN0cnVjdCByZXNvdXJj
+ZSAqcGFyZW50LAogCS8qIFRoZSBhbGxvY19yZXNvdXJjZSgpIHJlc3VsdCBnZXRzIGNoZWNrZWQg
+bGF0ZXIgKi8KIAluZXdfcmVzID0gYWxsb2NfcmVzb3VyY2UoR0ZQX0tFUk5FTCk7CiAKLQlwID0g
+JnBhcmVudC0+Y2hpbGQ7CisJcmVzID0gcmVzb3VyY2VfZmlyc3RfY2hpbGQoJnBhcmVudC0+Y2hp
+bGQpOwogCXdyaXRlX2xvY2soJnJlc291cmNlX2xvY2spOwogCi0Jd2hpbGUgKChyZXMgPSAqcCkp
+IHsKKwl3aGlsZSAoKHJlcykpIHsKIAkJaWYgKHJlcy0+c3RhcnQgPj0gZW5kKQogCQkJYnJlYWs7
+CiAKIAkJLyogbG9vayBmb3IgdGhlIG5leHQgcmVzb3VyY2UgaWYgaXQgZG9lcyBub3QgZml0IGlu
+dG8gKi8KIAkJaWYgKHJlcy0+c3RhcnQgPiBzdGFydCB8fCByZXMtPmVuZCA8IGVuZCkgewotCQkJ
+cCA9ICZyZXMtPnNpYmxpbmc7CisJCQlyZXMgPSByZXNvdXJjZV9zaWJsaW5nKHJlcyk7CiAJCQlj
+b250aW51ZTsKIAkJfQogCkBAIC0xMzA4LDE0ICsxMzA1LDE0IEBAIGludCByZWxlYXNlX21lbV9y
+ZWdpb25fYWRqdXN0YWJsZShzdHJ1Y3QgcmVzb3VyY2UgKnBhcmVudCwKIAkJCWJyZWFrOwogCiAJ
+CWlmICghKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0JVU1kpKSB7Ci0JCQlwID0gJnJlcy0+Y2hp
+bGQ7CisJCQlyZXMgPSByZXNvdXJjZV9maXJzdF9jaGlsZCgmcmVzLT5jaGlsZCk7CiAJCQljb250
+aW51ZTsKIAkJfQogCiAJCS8qIGZvdW5kIHRoZSB0YXJnZXQgcmVzb3VyY2U7IGxldCdzIGFkanVz
+dCBhY2NvcmRpbmdseSAqLwogCQlpZiAocmVzLT5zdGFydCA9PSBzdGFydCAmJiByZXMtPmVuZCA9
+PSBlbmQpIHsKIAkJCS8qIGZyZWUgdGhlIHdob2xlIGVudHJ5ICovCi0JCQkqcCA9IHJlcy0+c2li
+bGluZzsKKwkJCWxpc3RfZGVsKCZyZXMtPnNpYmxpbmcpOwogCQkJZnJlZV9yZXNvdXJjZShyZXMp
+OwogCQkJcmV0ID0gMDsKIAkJfSBlbHNlIGlmIChyZXMtPnN0YXJ0ID09IHN0YXJ0ICYmIHJlcy0+
+ZW5kICE9IGVuZCkgewpAQCAtMTMzOCwxNCArMTMzNSwxMyBAQCBpbnQgcmVsZWFzZV9tZW1fcmVn
+aW9uX2FkanVzdGFibGUoc3RydWN0IHJlc291cmNlICpwYXJlbnQsCiAJCQluZXdfcmVzLT5mbGFn
+cyA9IHJlcy0+ZmxhZ3M7CiAJCQluZXdfcmVzLT5kZXNjID0gcmVzLT5kZXNjOwogCQkJbmV3X3Jl
+cy0+cGFyZW50ID0gcmVzLT5wYXJlbnQ7Ci0JCQluZXdfcmVzLT5zaWJsaW5nID0gcmVzLT5zaWJs
+aW5nOwotCQkJbmV3X3Jlcy0+Y2hpbGQgPSBOVUxMOworCQkJSU5JVF9MSVNUX0hFQUQoJm5ld19y
+ZXMtPmNoaWxkKTsKIAogCQkJcmV0ID0gX19hZGp1c3RfcmVzb3VyY2UocmVzLCByZXMtPnN0YXJ0
+LAogCQkJCQkJc3RhcnQgLSByZXMtPnN0YXJ0KTsKIAkJCWlmIChyZXQpCiAJCQkJYnJlYWs7Ci0J
+CQlyZXMtPnNpYmxpbmcgPSBuZXdfcmVzOworCQkJbGlzdF9hZGQoJm5ld19yZXMtPnNpYmxpbmcs
+ICZyZXMtPnNpYmxpbmcpOwogCQkJbmV3X3JlcyA9IE5VTEw7CiAJCX0KIApAQCAtMTUyNiw3ICsx
+NTIyLDcgQEAgc3RhdGljIGludCBfX2luaXQgcmVzZXJ2ZV9zZXR1cChjaGFyICpzdHIpCiAJCQly
+ZXMtPmVuZCA9IGlvX3N0YXJ0ICsgaW9fbnVtIC0gMTsKIAkJCXJlcy0+ZmxhZ3MgfD0gSU9SRVNP
+VVJDRV9CVVNZOwogCQkJcmVzLT5kZXNjID0gSU9SRVNfREVTQ19OT05FOwotCQkJcmVzLT5jaGls
+ZCA9IE5VTEw7CisJCQlJTklUX0xJU1RfSEVBRCgmcmVzLT5jaGlsZCk7CiAJCQlpZiAocmVxdWVz
+dF9yZXNvdXJjZShwYXJlbnQsIHJlcykgPT0gMCkKIAkJCQlyZXNlcnZlZCA9IHgrMTsKIAkJfQpA
+QCAtMTU0Niw3ICsxNTQyLDcgQEAgaW50IGlvbWVtX21hcF9zYW5pdHlfY2hlY2socmVzb3VyY2Vf
+c2l6ZV90IGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIAlsb2ZmX3QgbDsKIAogCXJlYWRfbG9j
+aygmcmVzb3VyY2VfbG9jayk7Ci0JZm9yIChwID0gcC0+Y2hpbGQ7IHAgOyBwID0gcl9uZXh0KE5V
+TEwsIHAsICZsKSkgeworCWZvciAocCA9IHJlc291cmNlX2ZpcnN0X2NoaWxkKCZwLT5jaGlsZCk7
+IHA7IHAgPSByX25leHQoTlVMTCwgcCwgJmwpKSB7CiAJCS8qCiAJCSAqIFdlIGNhbiBwcm9iYWJs
+eSBza2lwIHRoZSByZXNvdXJjZXMgd2l0aG91dAogCQkgKiBJT1JFU09VUkNFX0lPIGF0dHJpYnV0
+ZT8KQEAgLTE2MDIsNyArMTU5OCw3IEBAIGJvb2wgaW9tZW1faXNfZXhjbHVzaXZlKHU2NCBhZGRy
+KQogCWFkZHIgPSBhZGRyICYgUEFHRV9NQVNLOwogCiAJcmVhZF9sb2NrKCZyZXNvdXJjZV9sb2Nr
+KTsKLQlmb3IgKHAgPSBwLT5jaGlsZDsgcCA7IHAgPSByX25leHQoTlVMTCwgcCwgJmwpKSB7CisJ
+Zm9yIChwID0gcmVzb3VyY2VfZmlyc3RfY2hpbGQoJnAtPmNoaWxkKTsgcDsgcCA9IHJfbmV4dChO
+VUxMLCBwLCAmbCkpIHsKIAkJLyoKIAkJICogV2UgY2FuIHByb2JhYmx5IHNraXAgdGhlIHJlc291
+cmNlcyB3aXRob3V0CiAJCSAqIElPUkVTT1VSQ0VfSU8gYXR0cmlidXRlPwotLSAKMi4xMy42Cgpf
+X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpMaW51eC1udmRp
+bW0gbWFpbGluZyBsaXN0CkxpbnV4LW52ZGltbUBsaXN0cy4wMS5vcmcKaHR0cHM6Ly9saXN0cy4w
+MS5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1udmRpbW0K
diff --git a/a/content_digest b/N3/content_digest
index 10fb266..1968738 100644
--- a/a/content_digest
+++ b/N3/content_digest
@@ -46,1086 +46,615 @@
   linux-parisc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
   gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org
   dmitry.torokhov-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
- " Benjamin\0"
+ " Benjamin Herrenschmid\0"
  "\00:1\0"
  "b\0"
- "The struct resource uses singly linked list to link siblings, implemented\n"
- "by pointer operation. Replace it with list_head for better code readability.\n"
- "\n"
- "Based on this list_head replacement, it will be very easy to do reverse\n"
- "iteration on iomem_resource's sibling list in later patch.\n"
- "\n"
- "Besides, type of member variables of struct resource, sibling and child, are\n"
- "changed from 'struct resource *' to 'struct list_head'. This brings two\n"
- "pointers of size increase.\n"
- "\n"
- "Suggested-by: Andrew Morton <akpm@linux-foundation.org>\n"
- "Signed-off-by: Baoquan He <bhe@redhat.com>\n"
- "Cc: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>\n"
- "Cc: David Airlie <airlied@linux.ie>\n"
- "Cc: \"K. Y. Srinivasan\" <kys@microsoft.com>\n"
- "Cc: Haiyang Zhang <haiyangz@microsoft.com>\n"
- "Cc: Stephen Hemminger <sthemmin@microsoft.com>\n"
- "Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>\n"
- "Cc: Dan Williams <dan.j.williams@intel.com>\n"
- "Cc: Rob Herring <robh+dt@kernel.org>\n"
- "Cc: Frank Rowand <frowand.list@gmail.com>\n"
- "Cc: Keith Busch <keith.busch@intel.com>\n"
- "Cc: Jonathan Derrick <jonathan.derrick@intel.com>\n"
- "Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>\n"
- "Cc: Bjorn Helgaas <bhelgaas@google.com>\n"
- "Cc: Thomas Gleixner <tglx@linutronix.de>\n"
- "Cc: Brijesh Singh <brijesh.singh@amd.com>\n"
- "Cc: \"J\303\251r\303\264me Glisse\" <jglisse@redhat.com>\n"
- "Cc: Borislav Petkov <bp@suse.de>\n"
- "Cc: Tom Lendacky <thomas.lendacky@amd.com>\n"
- "Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>\n"
- "Cc: Yaowei Bai <baiyaowei@cmss.chinamobile.com>\n"
- "Cc: Wei Yang <richard.weiyang@gmail.com>\n"
- "Cc: devel@linuxdriverproject.org\n"
- "Cc: linux-input@vger.kernel.org\n"
- "Cc: linux-nvdimm@lists.01.org\n"
- "Cc: devicetree@vger.kernel.org\n"
- "Cc: linux-pci@vger.kernel.org\n"
- "Cc: Michal Simek <monstr@monstr.eu>\n"
- "Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>                                                                                             \n"
- "Cc: Paul Mackerras <paulus@samba.org>\n"
- "Cc: Michael Ellerman <mpe@ellerman.id.au>\n"
- "Cc: linux-mips@linux-mips.org\n"
- "---\n"
- " arch/arm/plat-samsung/pm-check.c            |   6 +-\n"
- " arch/ia64/sn/kernel/io_init.c               |   2 +-\n"
- " arch/microblaze/pci/pci-common.c            |   4 +-\n"
- " arch/mips/pci/pci-rc32434.c                 |  12 +-\n"
- " arch/powerpc/kernel/pci-common.c            |   4 +-\n"
- " arch/sparc/kernel/ioport.c                  |   2 +-\n"
- " arch/xtensa/include/asm/pci-bridge.h        |   4 +-\n"
- " drivers/eisa/eisa-bus.c                     |   2 +\n"
- " drivers/gpu/drm/drm_memory.c                |   3 +-\n"
- " drivers/gpu/drm/gma500/gtt.c                |   5 +-\n"
- " drivers/hv/vmbus_drv.c                      |  52 +++----\n"
- " drivers/input/joystick/iforce/iforce-main.c |   4 +-\n"
- " drivers/nvdimm/namespace_devs.c             |   6 +-\n"
- " drivers/nvdimm/nd.h                         |   5 +-\n"
- " drivers/of/address.c                        |   4 +-\n"
- " drivers/parisc/lba_pci.c                    |   4 +-\n"
- " drivers/pci/controller/vmd.c                |   8 +-\n"
- " drivers/pci/probe.c                         |   2 +\n"
- " drivers/pci/setup-bus.c                     |   2 +-\n"
- " include/linux/ioport.h                      |  17 ++-\n"
- " kernel/resource.c                           | 206 ++++++++++++++--------------\n"
- " 21 files changed, 183 insertions(+), 171 deletions(-)\n"
- "\n"
- "diff --git a/arch/arm/plat-samsung/pm-check.c b/arch/arm/plat-samsung/pm-check.c\n"
- "index cd2c02c68bc3..5494355b1c49 100644\n"
- "--- a/arch/arm/plat-samsung/pm-check.c\n"
- "+++ b/arch/arm/plat-samsung/pm-check.c\n"
- "@@ -46,8 +46,8 @@ typedef u32 *(run_fn_t)(struct resource *ptr, u32 *arg);\n"
- " static void s3c_pm_run_res(struct resource *ptr, run_fn_t fn, u32 *arg)\n"
- " {\n"
- " \twhile (ptr != NULL) {\n"
- "-\t\tif (ptr->child != NULL)\n"
- "-\t\t\ts3c_pm_run_res(ptr->child, fn, arg);\n"
- "+\t\tif (!list_empty(&ptr->child))\n"
- "+\t\t\ts3c_pm_run_res(resource_first_child(&ptr->child), fn, arg);\n"
- " \n"
- " \t\tif ((ptr->flags & IORESOURCE_SYSTEM_RAM)\n"
- " \t\t\t\t== IORESOURCE_SYSTEM_RAM) {\n"
- "@@ -57,7 +57,7 @@ static void s3c_pm_run_res(struct resource *ptr, run_fn_t fn, u32 *arg)\n"
- " \t\t\targ = (fn)(ptr, arg);\n"
- " \t\t}\n"
- " \n"
- "-\t\tptr = ptr->sibling;\n"
- "+\t\tptr = resource_sibling(ptr);\n"
- " \t}\n"
- " }\n"
- " \n"
- "diff --git a/arch/ia64/sn/kernel/io_init.c b/arch/ia64/sn/kernel/io_init.c\n"
- "index d63809a6adfa..338a7b7f194d 100644\n"
- "--- a/arch/ia64/sn/kernel/io_init.c\n"
- "+++ b/arch/ia64/sn/kernel/io_init.c\n"
- "@@ -192,7 +192,7 @@ sn_io_slot_fixup(struct pci_dev *dev)\n"
- " \t\t * if it's already in the device structure, remove it before\n"
- " \t\t * inserting\n"
- " \t\t */\n"
- "-\t\tif (res->parent && res->parent->child)\n"
- "+\t\tif (res->parent && !list_empty(&res->parent->child))\n"
- " \t\t\trelease_resource(res);\n"
- " \n"
- " \t\tif (res->flags & IORESOURCE_IO)\n"
- "diff --git a/arch/microblaze/pci/pci-common.c b/arch/microblaze/pci/pci-common.c\n"
- "index 7899bafab064..2bf73e27e231 100644\n"
- "--- a/arch/microblaze/pci/pci-common.c\n"
- "+++ b/arch/microblaze/pci/pci-common.c\n"
- "@@ -533,7 +533,9 @@ void pci_process_bridge_OF_ranges(struct pci_controller *hose,\n"
- " \t\t\tres->flags = range.flags;\n"
- " \t\t\tres->start = range.cpu_addr;\n"
- " \t\t\tres->end = range.cpu_addr + range.size - 1;\n"
- "-\t\t\tres->parent = res->child = res->sibling = NULL;\n"
- "+\t\t\tres->parent = NULL;\n"
- "+\t\t\tINIT_LIST_HEAD(&res->child);\n"
- "+\t\t\tINIT_LIST_HEAD(&res->sibling);\n"
- " \t\t}\n"
- " \t}\n"
- " \n"
- "diff --git a/arch/mips/pci/pci-rc32434.c b/arch/mips/pci/pci-rc32434.c\n"
- "index 7f6ce6d734c0..e80283df7925 100644\n"
- "--- a/arch/mips/pci/pci-rc32434.c\n"
- "+++ b/arch/mips/pci/pci-rc32434.c\n"
- "@@ -53,8 +53,8 @@ static struct resource rc32434_res_pci_mem1 = {\n"
- " \t.start = 0x50000000,\n"
- " \t.end = 0x5FFFFFFF,\n"
- " \t.flags = IORESOURCE_MEM,\n"
- "-\t.sibling = NULL,\n"
- "-\t.child = &rc32434_res_pci_mem2\n"
- "+\t.sibling = LIST_HEAD_INIT(rc32434_res_pci_mem1.sibling),\n"
- "+\t.child = LIST_HEAD_INIT(rc32434_res_pci_mem1.child),\n"
- " };\n"
- " \n"
- " static struct resource rc32434_res_pci_mem2 = {\n"
- "@@ -63,8 +63,8 @@ static struct resource rc32434_res_pci_mem2 = {\n"
- " \t.end = 0x6FFFFFFF,\n"
- " \t.flags = IORESOURCE_MEM,\n"
- " \t.parent = &rc32434_res_pci_mem1,\n"
- "-\t.sibling = NULL,\n"
- "-\t.child = NULL\n"
- "+\t.sibling = LIST_HEAD_INIT(rc32434_res_pci_mem2.sibling),\n"
- "+\t.child = LIST_HEAD_INIT(rc32434_res_pci_mem2.child),\n"
- " };\n"
- " \n"
- " static struct resource rc32434_res_pci_io1 = {\n"
- "@@ -72,6 +72,8 @@ static struct resource rc32434_res_pci_io1 = {\n"
- " \t.start = 0x18800000,\n"
- " \t.end = 0x188FFFFF,\n"
- " \t.flags = IORESOURCE_IO,\n"
- "+\t.sibling = LIST_HEAD_INIT(rc32434_res_pci_io1.sibling),\n"
- "+\t.child = LIST_HEAD_INIT(rc32434_res_pci_io1.child),\n"
- " };\n"
- " \n"
- " extern struct pci_ops rc32434_pci_ops;\n"
- "@@ -208,6 +210,8 @@ static int __init rc32434_pci_init(void)\n"
- " \n"
- " \tpr_info(\"PCI: Initializing PCI\\n\");\n"
- " \n"
- "+\tlist_add(&rc32434_res_pci_mem2.sibling, &rc32434_res_pci_mem1.child);\n"
- "+\n"
- " \tioport_resource.start = rc32434_res_pci_io1.start;\n"
- " \tioport_resource.end = rc32434_res_pci_io1.end;\n"
- " \n"
- "diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c\n"
- "index 926035bb378d..28fbe83c9daf 100644\n"
- "--- a/arch/powerpc/kernel/pci-common.c\n"
- "+++ b/arch/powerpc/kernel/pci-common.c\n"
- "@@ -761,7 +761,9 @@ void pci_process_bridge_OF_ranges(struct pci_controller *hose,\n"
- " \t\t\tres->flags = range.flags;\n"
- " \t\t\tres->start = range.cpu_addr;\n"
- " \t\t\tres->end = range.cpu_addr + range.size - 1;\n"
- "-\t\t\tres->parent = res->child = res->sibling = NULL;\n"
- "+\t\t\tres->parent = NULL;\n"
- "+\t\t\tINIT_LIST_HEAD(&res->child);\n"
- "+\t\t\tINIT_LIST_HEAD(&res->sibling);\n"
- " \t\t}\n"
- " \t}\n"
- " }\n"
- "diff --git a/arch/sparc/kernel/ioport.c b/arch/sparc/kernel/ioport.c\n"
- "index cca9134cfa7d..99efe4e98b16 100644\n"
- "--- a/arch/sparc/kernel/ioport.c\n"
- "+++ b/arch/sparc/kernel/ioport.c\n"
- "@@ -669,7 +669,7 @@ static int sparc_io_proc_show(struct seq_file *m, void *v)\n"
- " \tstruct resource *root = m->private, *r;\n"
- " \tconst char *nm;\n"
- " \n"
- "-\tfor (r = root->child; r != NULL; r = r->sibling) {\n"
- "+\tlist_for_each_entry(r, &root->child, sibling) {\n"
- " \t\tif ((nm = r->name) == NULL) nm = \"???\";\n"
- " \t\tseq_printf(m, \"%016llx-%016llx: %s\\n\",\n"
- " \t\t\t\t(unsigned long long)r->start,\n"
- "diff --git a/arch/xtensa/include/asm/pci-bridge.h b/arch/xtensa/include/asm/pci-bridge.h\n"
- "index 0b68c76ec1e6..f487b06817df 100644\n"
- "--- a/arch/xtensa/include/asm/pci-bridge.h\n"
- "+++ b/arch/xtensa/include/asm/pci-bridge.h\n"
- "@@ -71,8 +71,8 @@ static inline void pcibios_init_resource(struct resource *res,\n"
- " \tres->flags = flags;\n"
- " \tres->name = name;\n"
- " \tres->parent = NULL;\n"
- "-\tres->sibling = NULL;\n"
- "-\tres->child = NULL;\n"
- "+\tINIT_LIST_HEAD(&res->child);\n"
- "+\tINIT_LIST_HEAD(&res->sibling);\n"
- " }\n"
- " \n"
- " \n"
- "diff --git a/drivers/eisa/eisa-bus.c b/drivers/eisa/eisa-bus.c\n"
- "index 1e8062f6dbfc..dba78f75fd06 100644\n"
- "--- a/drivers/eisa/eisa-bus.c\n"
- "+++ b/drivers/eisa/eisa-bus.c\n"
- "@@ -408,6 +408,8 @@ static struct resource eisa_root_res = {\n"
- " \t.start = 0,\n"
- " \t.end   = 0xffffffff,\n"
- " \t.flags = IORESOURCE_IO,\n"
- "+\t.sibling = LIST_HEAD_INIT(eisa_root_res.sibling),\n"
- "+\t.child  = LIST_HEAD_INIT(eisa_root_res.child),\n"
- " };\n"
- " \n"
- " static int eisa_bus_count;\n"
- "diff --git a/drivers/gpu/drm/drm_memory.c b/drivers/gpu/drm/drm_memory.c\n"
- "index d69e4fc1ee77..33baa7fa5e41 100644\n"
- "--- a/drivers/gpu/drm/drm_memory.c\n"
- "+++ b/drivers/gpu/drm/drm_memory.c\n"
- "@@ -155,9 +155,8 @@ u64 drm_get_max_iomem(void)\n"
- " \tstruct resource *tmp;\n"
- " \tresource_size_t max_iomem = 0;\n"
- " \n"
- "-\tfor (tmp = iomem_resource.child; tmp; tmp = tmp->sibling) {\n"
- "+\tlist_for_each_entry(tmp, &iomem_resource.child, sibling)\n"
- " \t\tmax_iomem = max(max_iomem,  tmp->end);\n"
- "-\t}\n"
- " \n"
- " \treturn max_iomem;\n"
- " }\n"
- "diff --git a/drivers/gpu/drm/gma500/gtt.c b/drivers/gpu/drm/gma500/gtt.c\n"
- "index 3949b0990916..addd3bc009af 100644\n"
- "--- a/drivers/gpu/drm/gma500/gtt.c\n"
- "+++ b/drivers/gpu/drm/gma500/gtt.c\n"
- "@@ -565,7 +565,7 @@ int psb_gtt_init(struct drm_device *dev, int resume)\n"
- " int psb_gtt_restore(struct drm_device *dev)\n"
- " {\n"
- " \tstruct drm_psb_private *dev_priv = dev->dev_private;\n"
- "-\tstruct resource *r = dev_priv->gtt_mem->child;\n"
- "+\tstruct resource *r;\n"
- " \tstruct gtt_range *range;\n"
- " \tunsigned int restored = 0, total = 0, size = 0;\n"
- " \n"
- "@@ -573,14 +573,13 @@ int psb_gtt_restore(struct drm_device *dev)\n"
- " \tmutex_lock(&dev_priv->gtt_mutex);\n"
- " \tpsb_gtt_init(dev, 1);\n"
- " \n"
- "-\twhile (r != NULL) {\n"
- "+\tlist_for_each_entry(r, &dev_priv->gtt_mem->child, sibling) {\n"
- " \t\trange = container_of(r, struct gtt_range, resource);\n"
- " \t\tif (range->pages) {\n"
- " \t\t\tpsb_gtt_insert(dev, range, 1);\n"
- " \t\t\tsize += range->resource.end - range->resource.start;\n"
- " \t\t\trestored++;\n"
- " \t\t}\n"
- "-\t\tr = r->sibling;\n"
- " \t\ttotal++;\n"
- " \t}\n"
- " \tmutex_unlock(&dev_priv->gtt_mutex);\n"
- "diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c\n"
- "index b10fe26c4891..d87ec5a1bc4c 100644\n"
- "--- a/drivers/hv/vmbus_drv.c\n"
- "+++ b/drivers/hv/vmbus_drv.c\n"
- "@@ -1412,9 +1412,8 @@ static acpi_status vmbus_walk_resources(struct acpi_resource *res, void *ctx)\n"
- " {\n"
- " \tresource_size_t start = 0;\n"
- " \tresource_size_t end = 0;\n"
- "-\tstruct resource *new_res;\n"
- "+\tstruct resource *new_res, *tmp;\n"
- " \tstruct resource **old_res = &hyperv_mmio;\n"
- "-\tstruct resource **prev_res = NULL;\n"
- " \n"
- " \tswitch (res->type) {\n"
- " \n"
- "@@ -1461,44 +1460,36 @@ static acpi_status vmbus_walk_resources(struct acpi_resource *res, void *ctx)\n"
- " \t/*\n"
- " \t * If two ranges are adjacent, merge them.\n"
- " \t */\n"
- "-\tdo {\n"
- "-\t\tif (!*old_res) {\n"
- "-\t\t\t*old_res = new_res;\n"
- "-\t\t\tbreak;\n"
- "-\t\t}\n"
- "-\n"
- "-\t\tif (((*old_res)->end + 1) == new_res->start) {\n"
- "-\t\t\t(*old_res)->end = new_res->end;\n"
- "+\tif (!*old_res) {\n"
- "+\t\t*old_res = new_res;\n"
- "+\t\treturn AE_OK;\n"
- "+\t}\n"
- "+\ttmp = *old_res;\n"
- "+\tlist_for_each_entry_from(tmp, &tmp->parent->child, sibling) {\n"
- "+\t\tif ((tmp->end + 1) == new_res->start) {\n"
- "+\t\t\ttmp->end = new_res->end;\n"
- " \t\t\tkfree(new_res);\n"
- " \t\t\tbreak;\n"
- " \t\t}\n"
- " \n"
- "-\t\tif ((*old_res)->start == new_res->end + 1) {\n"
- "-\t\t\t(*old_res)->start = new_res->start;\n"
- "+\t\tif (tmp->start == new_res->end + 1) {\n"
- "+\t\t\ttmp->start = new_res->start;\n"
- " \t\t\tkfree(new_res);\n"
- " \t\t\tbreak;\n"
- " \t\t}\n"
- " \n"
- "-\t\tif ((*old_res)->start > new_res->end) {\n"
- "-\t\t\tnew_res->sibling = *old_res;\n"
- "-\t\t\tif (prev_res)\n"
- "-\t\t\t\t(*prev_res)->sibling = new_res;\n"
- "-\t\t\t*old_res = new_res;\n"
- "+\t\tif (tmp->start > new_res->end) {\n"
- "+\t\t\tlist_add(&new_res->sibling, tmp->sibling.prev);\n"
- " \t\t\tbreak;\n"
- " \t\t}\n"
- "-\n"
- "-\t\tprev_res = old_res;\n"
- "-\t\told_res = &(*old_res)->sibling;\n"
- "-\n"
- "-\t} while (1);\n"
- "+\t}\n"
- " \n"
- " \treturn AE_OK;\n"
- " }\n"
- " \n"
- " static int vmbus_acpi_remove(struct acpi_device *device)\n"
- " {\n"
- "-\tstruct resource *cur_res;\n"
- "-\tstruct resource *next_res;\n"
- "+\tstruct resource *res;\n"
- " \n"
- " \tif (hyperv_mmio) {\n"
- " \t\tif (fb_mmio) {\n"
- "@@ -1507,10 +1498,9 @@ static int vmbus_acpi_remove(struct acpi_device *device)\n"
- " \t\t\tfb_mmio = NULL;\n"
- " \t\t}\n"
- " \n"
- "-\t\tfor (cur_res = hyperv_mmio; cur_res; cur_res = next_res) {\n"
- "-\t\t\tnext_res = cur_res->sibling;\n"
- "-\t\t\tkfree(cur_res);\n"
- "-\t\t}\n"
- "+\t\tres = hyperv_mmio;\n"
- "+\t\tlist_for_each_entry_from(res, &res->parent->child, sibling)\n"
- "+\t\t\tkfree(res);\n"
- " \t}\n"
- " \n"
- " \treturn 0;\n"
- "@@ -1596,7 +1586,8 @@ int vmbus_allocate_mmio(struct resource **new, struct hv_device *device_obj,\n"
- " \t\t}\n"
- " \t}\n"
- " \n"
- "-\tfor (iter = hyperv_mmio; iter; iter = iter->sibling) {\n"
- "+\titer = hyperv_mmio;\n"
- "+\tlist_for_each_entry_from(iter, &iter->parent->child, sibling) {\n"
- " \t\tif ((iter->start >= max) || (iter->end <= min))\n"
- " \t\t\tcontinue;\n"
- " \n"
- "@@ -1639,7 +1630,8 @@ void vmbus_free_mmio(resource_size_t start, resource_size_t size)\n"
- " \tstruct resource *iter;\n"
- " \n"
- " \tdown(&hyperv_mmio_lock);\n"
- "-\tfor (iter = hyperv_mmio; iter; iter = iter->sibling) {\n"
- "+\titer = hyperv_mmio;\n"
- "+\tlist_for_each_entry_from(iter, &iter->parent->child, sibling) {\n"
- " \t\tif ((iter->start >= start + size) || (iter->end <= start))\n"
- " \t\t\tcontinue;\n"
- " \n"
- "diff --git a/drivers/input/joystick/iforce/iforce-main.c b/drivers/input/joystick/iforce/iforce-main.c\n"
- "index daeeb4c7e3b0..5c0be27b33ff 100644\n"
- "--- a/drivers/input/joystick/iforce/iforce-main.c\n"
- "+++ b/drivers/input/joystick/iforce/iforce-main.c\n"
- "@@ -305,8 +305,8 @@ int iforce_init_device(struct iforce *iforce)\n"
- " \tiforce->device_memory.end = 200;\n"
- " \tiforce->device_memory.flags = IORESOURCE_MEM;\n"
- " \tiforce->device_memory.parent = NULL;\n"
- "-\tiforce->device_memory.child = NULL;\n"
- "-\tiforce->device_memory.sibling = NULL;\n"
- "+\tINIT_LIST_HEAD(&iforce->device_memory.child);\n"
- "+\tINIT_LIST_HEAD(&iforce->device_memory.sibling);\n"
- " \n"
- " /*\n"
- "  * Wait until device ready - until it sends its first response.\n"
- "diff --git a/drivers/nvdimm/namespace_devs.c b/drivers/nvdimm/namespace_devs.c\n"
- "index 28afdd668905..f53d410d9981 100644\n"
- "--- a/drivers/nvdimm/namespace_devs.c\n"
- "+++ b/drivers/nvdimm/namespace_devs.c\n"
- "@@ -637,7 +637,7 @@ static resource_size_t scan_allocate(struct nd_region *nd_region,\n"
- "  retry:\n"
- " \tfirst = 0;\n"
- " \tfor_each_dpa_resource(ndd, res) {\n"
- "-\t\tstruct resource *next = res->sibling, *new_res = NULL;\n"
- "+\t\tstruct resource *next = resource_sibling(res), *new_res = NULL;\n"
- " \t\tresource_size_t allocate, available = 0;\n"
- " \t\tenum alloc_loc loc = ALLOC_ERR;\n"
- " \t\tconst char *action;\n"
- "@@ -763,7 +763,7 @@ static resource_size_t scan_allocate(struct nd_region *nd_region,\n"
- " \t * an initial \"pmem-reserve pass\".  Only do an initial BLK allocation\n"
- " \t * when none of the DPA space is reserved.\n"
- " \t */\n"
- "-\tif ((is_pmem || !ndd->dpa.child) && n == to_allocate)\n"
- "+\tif ((is_pmem || list_empty(&ndd->dpa.child)) && n == to_allocate)\n"
- " \t\treturn init_dpa_allocation(label_id, nd_region, nd_mapping, n);\n"
- " \treturn n;\n"
- " }\n"
- "@@ -779,7 +779,7 @@ static int merge_dpa(struct nd_region *nd_region,\n"
- "  retry:\n"
- " \tfor_each_dpa_resource(ndd, res) {\n"
- " \t\tint rc;\n"
- "-\t\tstruct resource *next = res->sibling;\n"
- "+\t\tstruct resource *next = resource_sibling(res);\n"
- " \t\tresource_size_t end = res->start + resource_size(res);\n"
- " \n"
- " \t\tif (!next || strcmp(res->name, label_id->id) != 0\n"
- "diff --git a/drivers/nvdimm/nd.h b/drivers/nvdimm/nd.h\n"
- "index 32e0364b48b9..da7da15e03e7 100644\n"
- "--- a/drivers/nvdimm/nd.h\n"
- "+++ b/drivers/nvdimm/nd.h\n"
- "@@ -102,11 +102,10 @@ unsigned sizeof_namespace_label(struct nvdimm_drvdata *ndd);\n"
- " \t\t(unsigned long long) (res ? res->start : 0), ##arg)\n"
- " \n"
- " #define for_each_dpa_resource(ndd, res) \\\n"
- "-\tfor (res = (ndd)->dpa.child; res; res = res->sibling)\n"
- "+\tlist_for_each_entry(res, &(ndd)->dpa.child, sibling)\n"
- " \n"
- " #define for_each_dpa_resource_safe(ndd, res, next) \\\n"
- "-\tfor (res = (ndd)->dpa.child, next = res ? res->sibling : NULL; \\\n"
- "-\t\t\tres; res = next, next = next ? next->sibling : NULL)\n"
- "+\tlist_for_each_entry_safe(res, next, &(ndd)->dpa.child, sibling)\n"
- " \n"
- " struct nd_percpu_lane {\n"
- " \tint count;\n"
- "diff --git a/drivers/of/address.c b/drivers/of/address.c\n"
- "index 53349912ac75..e2e25719ab52 100644\n"
- "--- a/drivers/of/address.c\n"
- "+++ b/drivers/of/address.c\n"
- "@@ -330,7 +330,9 @@ int of_pci_range_to_resource(struct of_pci_range *range,\n"
- " {\n"
- " \tint err;\n"
- " \tres->flags = range->flags;\n"
- "-\tres->parent = res->child = res->sibling = NULL;\n"
- "+\tres->parent = NULL;\n"
- "+\tINIT_LIST_HEAD(&res->child);\n"
- "+\tINIT_LIST_HEAD(&res->sibling);\n"
- " \tres->name = np->full_name;\n"
- " \n"
- " \tif (res->flags & IORESOURCE_IO) {\n"
- "diff --git a/drivers/parisc/lba_pci.c b/drivers/parisc/lba_pci.c\n"
- "index 69bd98421eb1..7482bdfd1959 100644\n"
- "--- a/drivers/parisc/lba_pci.c\n"
- "+++ b/drivers/parisc/lba_pci.c\n"
- "@@ -170,8 +170,8 @@ lba_dump_res(struct resource *r, int d)\n"
- " \tfor (i = d; i ; --i) printk(\" \");\n"
- " \tprintk(KERN_DEBUG \"%p [%lx,%lx]/%lx\\n\", r,\n"
- " \t\t(long)r->start, (long)r->end, r->flags);\n"
- "-\tlba_dump_res(r->child, d+2);\n"
- "-\tlba_dump_res(r->sibling, d);\n"
- "+\tlba_dump_res(resource_first_child(&r->child), d+2);\n"
- "+\tlba_dump_res(resource_sibling(r), d);\n"
- " }\n"
- " \n"
- " \n"
- "diff --git a/drivers/pci/controller/vmd.c b/drivers/pci/controller/vmd.c\n"
- "index 942b64fc7f1f..e3ace20345c7 100644\n"
- "--- a/drivers/pci/controller/vmd.c\n"
- "+++ b/drivers/pci/controller/vmd.c\n"
- "@@ -542,14 +542,14 @@ static struct pci_ops vmd_ops = {\n"
- " \n"
- " static void vmd_attach_resources(struct vmd_dev *vmd)\n"
- " {\n"
- "-\tvmd->dev->resource[VMD_MEMBAR1].child = &vmd->resources[1];\n"
- "-\tvmd->dev->resource[VMD_MEMBAR2].child = &vmd->resources[2];\n"
- "+\tlist_add(&vmd->resources[1].sibling, &vmd->dev->resource[VMD_MEMBAR1].child);\n"
- "+\tlist_add(&vmd->resources[2].sibling, &vmd->dev->resource[VMD_MEMBAR2].child);\n"
- " }\n"
- " \n"
- " static void vmd_detach_resources(struct vmd_dev *vmd)\n"
- " {\n"
- "-\tvmd->dev->resource[VMD_MEMBAR1].child = NULL;\n"
- "-\tvmd->dev->resource[VMD_MEMBAR2].child = NULL;\n"
- "+\tINIT_LIST_HEAD(&vmd->dev->resource[VMD_MEMBAR1].child);\n"
- "+\tINIT_LIST_HEAD(&vmd->dev->resource[VMD_MEMBAR2].child);\n"
- " }\n"
- " \n"
- " /*\n"
- "diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c\n"
- "index ac876e32de4b..9624dd1dfd49 100644\n"
- "--- a/drivers/pci/probe.c\n"
- "+++ b/drivers/pci/probe.c\n"
- "@@ -59,6 +59,8 @@ static struct resource *get_pci_domain_busn_res(int domain_nr)\n"
- " \tr->res.start = 0;\n"
- " \tr->res.end = 0xff;\n"
- " \tr->res.flags = IORESOURCE_BUS | IORESOURCE_PCI_FIXED;\n"
- "+\tINIT_LIST_HEAD(&r->res.child);\n"
- "+\tINIT_LIST_HEAD(&r->res.sibling);\n"
- " \n"
- " \tlist_add_tail(&r->list, &pci_domain_busn_res_list);\n"
- " \n"
- "diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c\n"
- "index 79b1824e83b4..8e685af8938d 100644\n"
- "--- a/drivers/pci/setup-bus.c\n"
- "+++ b/drivers/pci/setup-bus.c\n"
- "@@ -2107,7 +2107,7 @@ int pci_reassign_bridge_resources(struct pci_dev *bridge, unsigned long type)\n"
- " \t\t\t\tcontinue;\n"
- " \n"
- " \t\t\t/* Ignore BARs which are still in use */\n"
- "-\t\t\tif (res->child)\n"
- "+\t\t\tif (!list_empty(&res->child))\n"
- " \t\t\t\tcontinue;\n"
- " \n"
- " \t\t\tret = add_to_list(&saved, bridge, res, 0, 0);\n"
- "diff --git a/include/linux/ioport.h b/include/linux/ioport.h\n"
- "index dfdcd0bfe54e..b7456ae889dd 100644\n"
- "--- a/include/linux/ioport.h\n"
- "+++ b/include/linux/ioport.h\n"
- "@@ -12,6 +12,7 @@\n"
- " #ifndef __ASSEMBLY__\n"
- " #include <linux/compiler.h>\n"
- " #include <linux/types.h>\n"
- "+#include <linux/list.h>\n"
- " /*\n"
- "  * Resources are tree-like, allowing\n"
- "  * nesting etc..\n"
- "@@ -22,7 +23,8 @@ struct resource {\n"
- " \tconst char *name;\n"
- " \tunsigned long flags;\n"
- " \tunsigned long desc;\n"
- "-\tstruct resource *parent, *sibling, *child;\n"
- "+\tstruct list_head child, sibling;\n"
- "+\tstruct resource *parent;\n"
- " };\n"
- " \n"
- " /*\n"
- "@@ -216,7 +218,6 @@ static inline bool resource_contains(struct resource *r1, struct resource *r2)\n"
- " \treturn r1->start <= r2->start && r1->end >= r2->end;\n"
- " }\n"
- " \n"
- "-\n"
- " /* Convenience shorthand with allocation */\n"
- " #define request_region(start,n,name)\t\t__request_region(&ioport_resource, (start), (n), (name), 0)\n"
- " #define request_muxed_region(start,n,name)\t__request_region(&ioport_resource, (start), (n), (name), IORESOURCE_MUXED)\n"
- "@@ -287,6 +288,18 @@ static inline bool resource_overlaps(struct resource *r1, struct resource *r2)\n"
- "        return (r1->start <= r2->end && r1->end >= r2->start);\n"
- " }\n"
- " \n"
- "+static inline struct resource *resource_sibling(struct resource *res)\n"
- "+{\n"
- "+\tif (res->parent && !list_is_last(&res->sibling, &res->parent->child))\n"
- "+\t\treturn list_next_entry(res, sibling);\n"
- "+\treturn NULL;\n"
- "+}\n"
- "+\n"
- "+static inline struct resource *resource_first_child(struct list_head *head)\n"
- "+{\n"
- "+\treturn list_first_entry_or_null(head, struct resource, sibling);\n"
- "+}\n"
- "+\n"
- " \n"
- " #endif /* __ASSEMBLY__ */\n"
- " #endif\t/* _LINUX_IOPORT_H */\n"
- "diff --git a/kernel/resource.c b/kernel/resource.c\n"
- "index 81ccd19c1d9f..c96e58d3d2f8 100644\n"
- "--- a/kernel/resource.c\n"
- "+++ b/kernel/resource.c\n"
- "@@ -31,6 +31,8 @@ struct resource ioport_resource = {\n"
- " \t.start\t= 0,\n"
- " \t.end\t= IO_SPACE_LIMIT,\n"
- " \t.flags\t= IORESOURCE_IO,\n"
- "+\t.sibling = LIST_HEAD_INIT(ioport_resource.sibling),\n"
- "+\t.child  = LIST_HEAD_INIT(ioport_resource.child),\n"
- " };\n"
- " EXPORT_SYMBOL(ioport_resource);\n"
- " \n"
- "@@ -39,6 +41,8 @@ struct resource iomem_resource = {\n"
- " \t.start\t= 0,\n"
- " \t.end\t= -1,\n"
- " \t.flags\t= IORESOURCE_MEM,\n"
- "+\t.sibling = LIST_HEAD_INIT(iomem_resource.sibling),\n"
- "+\t.child  = LIST_HEAD_INIT(iomem_resource.child),\n"
- " };\n"
- " EXPORT_SYMBOL(iomem_resource);\n"
- " \n"
- "@@ -57,20 +61,20 @@ static DEFINE_RWLOCK(resource_lock);\n"
- "  * by boot mem after the system is up. So for reusing the resource entry\n"
- "  * we need to remember the resource.\n"
- "  */\n"
- "-static struct resource *bootmem_resource_free;\n"
- "+static struct list_head bootmem_resource_free = LIST_HEAD_INIT(bootmem_resource_free);\n"
- " static DEFINE_SPINLOCK(bootmem_resource_lock);\n"
- " \n"
- " static struct resource *next_resource(struct resource *p, bool sibling_only)\n"
- " {\n"
- " \t/* Caller wants to traverse through siblings only */\n"
- " \tif (sibling_only)\n"
- "-\t\treturn p->sibling;\n"
- "+\t\treturn resource_sibling(p);\n"
- " \n"
- "-\tif (p->child)\n"
- "-\t\treturn p->child;\n"
- "-\twhile (!p->sibling && p->parent)\n"
- "+\tif (!list_empty(&p->child))\n"
- "+\t\treturn resource_first_child(&p->child);\n"
- "+\twhile (!resource_sibling(p) && p->parent)\n"
- " \t\tp = p->parent;\n"
- "-\treturn p->sibling;\n"
- "+\treturn resource_sibling(p);\n"
- " }\n"
- " \n"
- " static void *r_next(struct seq_file *m, void *v, loff_t *pos)\n"
- "@@ -90,7 +94,7 @@ static void *r_start(struct seq_file *m, loff_t *pos)\n"
- " \tstruct resource *p = PDE_DATA(file_inode(m->file));\n"
- " \tloff_t l = 0;\n"
- " \tread_lock(&resource_lock);\n"
- "-\tfor (p = p->child; p && l < *pos; p = r_next(m, p, &l))\n"
- "+\tfor (p = resource_first_child(&p->child); p && l < *pos; p = r_next(m, p, &l))\n"
- " \t\t;\n"
- " \treturn p;\n"
- " }\n"
- "@@ -153,8 +157,7 @@ static void free_resource(struct resource *res)\n"
- " \n"
- " \tif (!PageSlab(virt_to_head_page(res))) {\n"
- " \t\tspin_lock(&bootmem_resource_lock);\n"
- "-\t\tres->sibling = bootmem_resource_free;\n"
- "-\t\tbootmem_resource_free = res;\n"
- "+\t\tlist_add(&res->sibling, &bootmem_resource_free);\n"
- " \t\tspin_unlock(&bootmem_resource_lock);\n"
- " \t} else {\n"
- " \t\tkfree(res);\n"
- "@@ -166,10 +169,9 @@ static struct resource *alloc_resource(gfp_t flags)\n"
- " \tstruct resource *res = NULL;\n"
- " \n"
- " \tspin_lock(&bootmem_resource_lock);\n"
- "-\tif (bootmem_resource_free) {\n"
- "-\t\tres = bootmem_resource_free;\n"
- "-\t\tbootmem_resource_free = res->sibling;\n"
- "-\t}\n"
- "+\tres = resource_first_child(&bootmem_resource_free);\n"
- "+\tif (res)\n"
- "+\t\tlist_del(&res->sibling);\n"
- " \tspin_unlock(&bootmem_resource_lock);\n"
- " \n"
- " \tif (res)\n"
- "@@ -177,6 +179,8 @@ static struct resource *alloc_resource(gfp_t flags)\n"
- " \telse\n"
- " \t\tres = kzalloc(sizeof(struct resource), flags);\n"
- " \n"
- "+\tINIT_LIST_HEAD(&res->child);\n"
- "+\tINIT_LIST_HEAD(&res->sibling);\n"
- " \treturn res;\n"
- " }\n"
- " \n"
- "@@ -185,7 +189,7 @@ static struct resource * __request_resource(struct resource *root, struct resour\n"
- " {\n"
- " \tresource_size_t start = new->start;\n"
- " \tresource_size_t end = new->end;\n"
- "-\tstruct resource *tmp, **p;\n"
- "+\tstruct resource *tmp;\n"
- " \n"
- " \tif (end < start)\n"
- " \t\treturn root;\n"
- "@@ -193,64 +197,62 @@ static struct resource * __request_resource(struct resource *root, struct resour\n"
- " \t\treturn root;\n"
- " \tif (end > root->end)\n"
- " \t\treturn root;\n"
- "-\tp = &root->child;\n"
- "-\tfor (;;) {\n"
- "-\t\ttmp = *p;\n"
- "-\t\tif (!tmp || tmp->start > end) {\n"
- "-\t\t\tnew->sibling = tmp;\n"
- "-\t\t\t*p = new;\n"
- "+\n"
- "+\tif (list_empty(&root->child)) {\n"
- "+\t\tlist_add(&new->sibling, &root->child);\n"
- "+\t\tnew->parent = root;\n"
- "+\t\tINIT_LIST_HEAD(&new->child);\n"
- "+\t\treturn NULL;\n"
- "+\t}\n"
- "+\n"
- "+\tlist_for_each_entry(tmp, &root->child, sibling) {\n"
- "+\t\tif (tmp->start > end) {\n"
- "+\t\t\tlist_add(&new->sibling, tmp->sibling.prev);\n"
- " \t\t\tnew->parent = root;\n"
- "+\t\t\tINIT_LIST_HEAD(&new->child);\n"
- " \t\t\treturn NULL;\n"
- " \t\t}\n"
- "-\t\tp = &tmp->sibling;\n"
- " \t\tif (tmp->end < start)\n"
- " \t\t\tcontinue;\n"
- " \t\treturn tmp;\n"
- " \t}\n"
- "+\n"
- "+\tlist_add_tail(&new->sibling, &root->child);\n"
- "+\tnew->parent = root;\n"
- "+\tINIT_LIST_HEAD(&new->child);\n"
- "+\treturn NULL;\n"
- " }\n"
- " \n"
- " static int __release_resource(struct resource *old, bool release_child)\n"
- " {\n"
- "-\tstruct resource *tmp, **p, *chd;\n"
- "+\tstruct resource *tmp, *next, *chd;\n"
- " \n"
- "-\tp = &old->parent->child;\n"
- "-\tfor (;;) {\n"
- "-\t\ttmp = *p;\n"
- "-\t\tif (!tmp)\n"
- "-\t\t\tbreak;\n"
- "+\tlist_for_each_entry_safe(tmp, next, &old->parent->child, sibling) {\n"
- " \t\tif (tmp == old) {\n"
- "-\t\t\tif (release_child || !(tmp->child)) {\n"
- "-\t\t\t\t*p = tmp->sibling;\n"
- "+\t\t\tif (release_child || list_empty(&tmp->child)) {\n"
- "+\t\t\t\tlist_del(&tmp->sibling);\n"
- " \t\t\t} else {\n"
- "-\t\t\t\tfor (chd = tmp->child;; chd = chd->sibling) {\n"
- "+\t\t\t\tlist_for_each_entry(chd, &tmp->child, sibling)\n"
- " \t\t\t\t\tchd->parent = tmp->parent;\n"
- "-\t\t\t\t\tif (!(chd->sibling))\n"
- "-\t\t\t\t\t\tbreak;\n"
- "-\t\t\t\t}\n"
- "-\t\t\t\t*p = tmp->child;\n"
- "-\t\t\t\tchd->sibling = tmp->sibling;\n"
- "+\t\t\t\tlist_splice(&tmp->child, tmp->sibling.prev);\n"
- "+\t\t\t\tlist_del(&tmp->sibling);\n"
- " \t\t\t}\n"
- "+\n"
- " \t\t\told->parent = NULL;\n"
- " \t\t\treturn 0;\n"
- " \t\t}\n"
- "-\t\tp = &tmp->sibling;\n"
- " \t}\n"
- " \treturn -EINVAL;\n"
- " }\n"
- " \n"
- " static void __release_child_resources(struct resource *r)\n"
- " {\n"
- "-\tstruct resource *tmp, *p;\n"
- "+\tstruct resource *tmp, *next;\n"
- " \tresource_size_t size;\n"
- " \n"
- "-\tp = r->child;\n"
- "-\tr->child = NULL;\n"
- "-\twhile (p) {\n"
- "-\t\ttmp = p;\n"
- "-\t\tp = p->sibling;\n"
- "-\n"
- "+\tlist_for_each_entry_safe(tmp, next, &r->child, sibling) {\n"
- " \t\ttmp->parent = NULL;\n"
- "-\t\ttmp->sibling = NULL;\n"
- "+\t\tlist_del_init(&tmp->sibling);\n"
- " \t\t__release_child_resources(tmp);\n"
- " \n"
- " \t\tprintk(KERN_DEBUG \"release child resource %pR\\n\", tmp);\n"
- "@@ -259,6 +261,8 @@ static void __release_child_resources(struct resource *r)\n"
- " \t\ttmp->start = 0;\n"
- " \t\ttmp->end = size - 1;\n"
- " \t}\n"
- "+\n"
- "+\tINIT_LIST_HEAD(&tmp->child);\n"
- " }\n"
- " \n"
- " void release_child_resources(struct resource *r)\n"
- "@@ -343,7 +347,8 @@ static int find_next_iomem_res(struct resource *res, unsigned long desc,\n"
- " \n"
- " \tread_lock(&resource_lock);\n"
- " \n"
- "-\tfor (p = iomem_resource.child; p; p = next_resource(p, sibling_only)) {\n"
- "+\tfor (p = resource_first_child(&iomem_resource.child); p;\n"
- "+\t\t\tp = next_resource(p, sibling_only)) {\n"
- " \t\tif ((p->flags & res->flags) != res->flags)\n"
- " \t\t\tcontinue;\n"
- " \t\tif ((desc != IORES_DESC_NONE) && (desc != p->desc))\n"
- "@@ -532,7 +537,7 @@ int region_intersects(resource_size_t start, size_t size, unsigned long flags,\n"
- " \tstruct resource *p;\n"
- " \n"
- " \tread_lock(&resource_lock);\n"
- "-\tfor (p = iomem_resource.child; p ; p = p->sibling) {\n"
- "+\tlist_for_each_entry(p, &iomem_resource.child, sibling) {\n"
- " \t\tbool is_type = (((p->flags & flags) == flags) &&\n"
- " \t\t\t\t((desc == IORES_DESC_NONE) ||\n"
- " \t\t\t\t (desc == p->desc)));\n"
- "@@ -586,7 +591,7 @@ static int __find_resource(struct resource *root, struct resource *old,\n"
- " \t\t\t resource_size_t  size,\n"
- " \t\t\t struct resource_constraint *constraint)\n"
- " {\n"
- "-\tstruct resource *this = root->child;\n"
- "+\tstruct resource *this = resource_first_child(&root->child);\n"
- " \tstruct resource tmp = *new, avail, alloc;\n"
- " \n"
- " \ttmp.start = root->start;\n"
- "@@ -596,7 +601,7 @@ static int __find_resource(struct resource *root, struct resource *old,\n"
- " \t */\n"
- " \tif (this && this->start == root->start) {\n"
- " \t\ttmp.start = (this == old) ? old->start : this->end + 1;\n"
- "-\t\tthis = this->sibling;\n"
- "+\t\tthis = resource_sibling(this);\n"
- " \t}\n"
- " \tfor(;;) {\n"
- " \t\tif (this)\n"
- "@@ -632,7 +637,7 @@ next:\t\tif (!this || this->end == root->end)\n"
- " \n"
- " \t\tif (this != old)\n"
- " \t\t\ttmp.start = this->end + 1;\n"
- "-\t\tthis = this->sibling;\n"
- "+\t\tthis = resource_sibling(this);\n"
- " \t}\n"
- " \treturn -EBUSY;\n"
- " }\n"
- "@@ -676,7 +681,7 @@ static int reallocate_resource(struct resource *root, struct resource *old,\n"
- " \t\tgoto out;\n"
- " \t}\n"
- " \n"
- "-\tif (old->child) {\n"
- "+\tif (!list_empty(&old->child)) {\n"
- " \t\terr = -EBUSY;\n"
- " \t\tgoto out;\n"
- " \t}\n"
- "@@ -757,7 +762,7 @@ struct resource *lookup_resource(struct resource *root, resource_size_t start)\n"
- " \tstruct resource *res;\n"
- " \n"
- " \tread_lock(&resource_lock);\n"
- "-\tfor (res = root->child; res; res = res->sibling) {\n"
- "+\tlist_for_each_entry(res, &root->child, sibling) {\n"
- " \t\tif (res->start == start)\n"
- " \t\t\tbreak;\n"
- " \t}\n"
- "@@ -790,32 +795,27 @@ static struct resource * __insert_resource(struct resource *parent, struct resou\n"
- " \t\t\tbreak;\n"
- " \t}\n"
- " \n"
- "-\tfor (next = first; ; next = next->sibling) {\n"
- "+\tfor (next = first; ; next = resource_sibling(next)) {\n"
- " \t\t/* Partial overlap? Bad, and unfixable */\n"
- " \t\tif (next->start < new->start || next->end > new->end)\n"
- " \t\t\treturn next;\n"
- "-\t\tif (!next->sibling)\n"
- "+\t\tif (!resource_sibling(next))\n"
- " \t\t\tbreak;\n"
- "-\t\tif (next->sibling->start > new->end)\n"
- "+\t\tif (resource_sibling(next)->start > new->end)\n"
- " \t\t\tbreak;\n"
- " \t}\n"
- "-\n"
- " \tnew->parent = parent;\n"
- "-\tnew->sibling = next->sibling;\n"
- "-\tnew->child = first;\n"
- "+\tlist_add(&new->sibling, &next->sibling);\n"
- "+\tINIT_LIST_HEAD(&new->child);\n"
- " \n"
- "-\tnext->sibling = NULL;\n"
- "-\tfor (next = first; next; next = next->sibling)\n"
- "+\t/*\n"
- "+\t * From first to next, they all fall into new's region, so change them\n"
- "+\t * as new's children.\n"
- "+\t */\n"
- "+\tlist_cut_position(&new->child, first->sibling.prev, &next->sibling);\n"
- "+\tlist_for_each_entry(next, &new->child, sibling)\n"
- " \t\tnext->parent = new;\n"
- " \n"
- "-\tif (parent->child == first) {\n"
- "-\t\tparent->child = new;\n"
- "-\t} else {\n"
- "-\t\tnext = parent->child;\n"
- "-\t\twhile (next->sibling != first)\n"
- "-\t\t\tnext = next->sibling;\n"
- "-\t\tnext->sibling = new;\n"
- "-\t}\n"
- " \treturn NULL;\n"
- " }\n"
- " \n"
- "@@ -937,19 +937,17 @@ static int __adjust_resource(struct resource *res, resource_size_t start,\n"
- " \tif ((start < parent->start) || (end > parent->end))\n"
- " \t\tgoto out;\n"
- " \n"
- "-\tif (res->sibling && (res->sibling->start <= end))\n"
- "+\tif (resource_sibling(res) && (resource_sibling(res)->start <= end))\n"
- " \t\tgoto out;\n"
- " \n"
- "-\ttmp = parent->child;\n"
- "-\tif (tmp != res) {\n"
- "-\t\twhile (tmp->sibling != res)\n"
- "-\t\t\ttmp = tmp->sibling;\n"
- "+\tif (res->sibling.prev != &parent->child) {\n"
- "+\t\ttmp = list_prev_entry(res, sibling);\n"
- " \t\tif (start <= tmp->end)\n"
- " \t\t\tgoto out;\n"
- " \t}\n"
- " \n"
- " skip:\n"
- "-\tfor (tmp = res->child; tmp; tmp = tmp->sibling)\n"
- "+\tlist_for_each_entry(tmp, &res->child, sibling)\n"
- " \t\tif ((tmp->start < start) || (tmp->end > end))\n"
- " \t\t\tgoto out;\n"
- " \n"
- "@@ -996,27 +994,30 @@ EXPORT_SYMBOL(adjust_resource);\n"
- "  */\n"
- " int reparent_resources(struct resource *parent, struct resource *res)\n"
- " {\n"
- "-\tstruct resource *p, **pp;\n"
- "-\tstruct resource **firstpp = NULL;\n"
- "+\tstruct resource *p, *first = NULL;\n"
- " \n"
- "-\tfor (pp = &parent->child; (p = *pp) != NULL; pp = &p->sibling) {\n"
- "+\tlist_for_each_entry(p, &parent->child, sibling) {\n"
- " \t\tif (p->end < res->start)\n"
- " \t\t\tcontinue;\n"
- " \t\tif (res->end < p->start)\n"
- " \t\t\tbreak;\n"
- " \t\tif (p->start < res->start || p->end > res->end)\n"
- " \t\t\treturn -ENOTSUPP;\t/* not completely contained */\n"
- "-\t\tif (firstpp == NULL)\n"
- "-\t\t\tfirstpp = pp;\n"
- "+\t\tif (first == NULL)\n"
- "+\t\t\tfirst = p;\n"
- " \t}\n"
- "-\tif (firstpp == NULL)\n"
- "+\tif (first == NULL)\n"
- " \t\treturn -ECANCELED; /* didn't find any conflicting entries? */\n"
- " \tres->parent = parent;\n"
- "-\tres->child = *firstpp;\n"
- "-\tres->sibling = *pp;\n"
- "-\t*firstpp = res;\n"
- "-\t*pp = NULL;\n"
- "-\tfor (p = res->child; p != NULL; p = p->sibling) {\n"
- "+\tlist_add(&res->sibling, p->sibling.prev);\n"
- "+\tINIT_LIST_HEAD(&res->child);\n"
- "+\n"
- "+\t/*\n"
- "+\t * From first to p's previous sibling, they all fall into\n"
- "+\t * res's region, change them as res's children.\n"
- "+\t */\n"
- "+\tlist_cut_position(&res->child, first->sibling.prev, res->sibling.prev);\n"
- "+\tlist_for_each_entry(p, &res->child, sibling) {\n"
- " \t\tp->parent = res;\n"
- " \t\tpr_debug(\"PCI: Reparented %s %pR under %s\\n\",\n"
- " \t\t\t p->name, p, res->name);\n"
- "@@ -1216,34 +1217,32 @@ EXPORT_SYMBOL(__request_region);\n"
- " void __release_region(struct resource *parent, resource_size_t start,\n"
- " \t\t\tresource_size_t n)\n"
- " {\n"
- "-\tstruct resource **p;\n"
- "+\tstruct resource *res;\n"
- " \tresource_size_t end;\n"
- " \n"
- "-\tp = &parent->child;\n"
- "+\tres = resource_first_child(&parent->child);\n"
- " \tend = start + n - 1;\n"
- " \n"
- " \twrite_lock(&resource_lock);\n"
- " \n"
- " \tfor (;;) {\n"
- "-\t\tstruct resource *res = *p;\n"
- "-\n"
- " \t\tif (!res)\n"
- " \t\t\tbreak;\n"
- " \t\tif (res->start <= start && res->end >= end) {\n"
- " \t\t\tif (!(res->flags & IORESOURCE_BUSY)) {\n"
- "-\t\t\t\tp = &res->child;\n"
- "+\t\t\t\tres = resource_first_child(&res->child);\n"
- " \t\t\t\tcontinue;\n"
- " \t\t\t}\n"
- " \t\t\tif (res->start != start || res->end != end)\n"
- " \t\t\t\tbreak;\n"
- "-\t\t\t*p = res->sibling;\n"
- "+\t\t\tlist_del(&res->sibling);\n"
- " \t\t\twrite_unlock(&resource_lock);\n"
- " \t\t\tif (res->flags & IORESOURCE_MUXED)\n"
- " \t\t\t\twake_up(&muxed_resource_wait);\n"
- " \t\t\tfree_resource(res);\n"
- " \t\t\treturn;\n"
- " \t\t}\n"
- "-\t\tp = &res->sibling;\n"
- "+\t\tres = resource_sibling(res);\n"
- " \t}\n"
- " \n"
- " \twrite_unlock(&resource_lock);\n"
- "@@ -1278,9 +1277,7 @@ EXPORT_SYMBOL(__release_region);\n"
- " int release_mem_region_adjustable(struct resource *parent,\n"
- " \t\t\tresource_size_t start, resource_size_t size)\n"
- " {\n"
- "-\tstruct resource **p;\n"
- "-\tstruct resource *res;\n"
- "-\tstruct resource *new_res;\n"
- "+\tstruct resource *res, *new_res;\n"
- " \tresource_size_t end;\n"
- " \tint ret = -EINVAL;\n"
- " \n"
- "@@ -1291,16 +1288,16 @@ int release_mem_region_adjustable(struct resource *parent,\n"
- " \t/* The alloc_resource() result gets checked later */\n"
- " \tnew_res = alloc_resource(GFP_KERNEL);\n"
- " \n"
- "-\tp = &parent->child;\n"
- "+\tres = resource_first_child(&parent->child);\n"
- " \twrite_lock(&resource_lock);\n"
- " \n"
- "-\twhile ((res = *p)) {\n"
- "+\twhile ((res)) {\n"
- " \t\tif (res->start >= end)\n"
- " \t\t\tbreak;\n"
- " \n"
- " \t\t/* look for the next resource if it does not fit into */\n"
- " \t\tif (res->start > start || res->end < end) {\n"
- "-\t\t\tp = &res->sibling;\n"
- "+\t\t\tres = resource_sibling(res);\n"
- " \t\t\tcontinue;\n"
- " \t\t}\n"
- " \n"
- "@@ -1308,14 +1305,14 @@ int release_mem_region_adjustable(struct resource *parent,\n"
- " \t\t\tbreak;\n"
- " \n"
- " \t\tif (!(res->flags & IORESOURCE_BUSY)) {\n"
- "-\t\t\tp = &res->child;\n"
- "+\t\t\tres = resource_first_child(&res->child);\n"
- " \t\t\tcontinue;\n"
- " \t\t}\n"
- " \n"
- " \t\t/* found the target resource; let's adjust accordingly */\n"
- " \t\tif (res->start == start && res->end == end) {\n"
- " \t\t\t/* free the whole entry */\n"
- "-\t\t\t*p = res->sibling;\n"
- "+\t\t\tlist_del(&res->sibling);\n"
- " \t\t\tfree_resource(res);\n"
- " \t\t\tret = 0;\n"
- " \t\t} else if (res->start == start && res->end != end) {\n"
- "@@ -1338,14 +1335,13 @@ int release_mem_region_adjustable(struct resource *parent,\n"
- " \t\t\tnew_res->flags = res->flags;\n"
- " \t\t\tnew_res->desc = res->desc;\n"
- " \t\t\tnew_res->parent = res->parent;\n"
- "-\t\t\tnew_res->sibling = res->sibling;\n"
- "-\t\t\tnew_res->child = NULL;\n"
- "+\t\t\tINIT_LIST_HEAD(&new_res->child);\n"
- " \n"
- " \t\t\tret = __adjust_resource(res, res->start,\n"
- " \t\t\t\t\t\tstart - res->start);\n"
- " \t\t\tif (ret)\n"
- " \t\t\t\tbreak;\n"
- "-\t\t\tres->sibling = new_res;\n"
- "+\t\t\tlist_add(&new_res->sibling, &res->sibling);\n"
- " \t\t\tnew_res = NULL;\n"
- " \t\t}\n"
- " \n"
- "@@ -1526,7 +1522,7 @@ static int __init reserve_setup(char *str)\n"
- " \t\t\tres->end = io_start + io_num - 1;\n"
- " \t\t\tres->flags |= IORESOURCE_BUSY;\n"
- " \t\t\tres->desc = IORES_DESC_NONE;\n"
- "-\t\t\tres->child = NULL;\n"
- "+\t\t\tINIT_LIST_HEAD(&res->child);\n"
- " \t\t\tif (request_resource(parent, res) == 0)\n"
- " \t\t\t\treserved = x+1;\n"
- " \t\t}\n"
- "@@ -1546,7 +1542,7 @@ int iomem_map_sanity_check(resource_size_t addr, unsigned long size)\n"
- " \tloff_t l;\n"
- " \n"
- " \tread_lock(&resource_lock);\n"
- "-\tfor (p = p->child; p ; p = r_next(NULL, p, &l)) {\n"
- "+\tfor (p = resource_first_child(&p->child); p; p = r_next(NULL, p, &l)) {\n"
- " \t\t/*\n"
- " \t\t * We can probably skip the resources without\n"
- " \t\t * IORESOURCE_IO attribute?\n"
- "@@ -1602,7 +1598,7 @@ bool iomem_is_exclusive(u64 addr)\n"
- " \taddr = addr & PAGE_MASK;\n"
- " \n"
- " \tread_lock(&resource_lock);\n"
- "-\tfor (p = p->child; p ; p = r_next(NULL, p, &l)) {\n"
- "+\tfor (p = resource_first_child(&p->child); p; p = r_next(NULL, p, &l)) {\n"
- " \t\t/*\n"
- " \t\t * We can probably skip the resources without\n"
- " \t\t * IORESOURCE_IO attribute?\n"
- "-- \n"
- "2.13.6\n"
- "\n"
- "_______________________________________________\n"
- "Linux-nvdimm mailing list\n"
- "Linux-nvdimm@lists.01.org\n"
- https://lists.01.org/mailman/listinfo/linux-nvdimm
+ "VGhlIHN0cnVjdCByZXNvdXJjZSB1c2VzIHNpbmdseSBsaW5rZWQgbGlzdCB0byBsaW5rIHNpYmxp\n"
+ "bmdzLCBpbXBsZW1lbnRlZApieSBwb2ludGVyIG9wZXJhdGlvbi4gUmVwbGFjZSBpdCB3aXRoIGxp\n"
+ "c3RfaGVhZCBmb3IgYmV0dGVyIGNvZGUgcmVhZGFiaWxpdHkuCgpCYXNlZCBvbiB0aGlzIGxpc3Rf\n"
+ "aGVhZCByZXBsYWNlbWVudCwgaXQgd2lsbCBiZSB2ZXJ5IGVhc3kgdG8gZG8gcmV2ZXJzZQppdGVy\n"
+ "YXRpb24gb24gaW9tZW1fcmVzb3VyY2UncyBzaWJsaW5nIGxpc3QgaW4gbGF0ZXIgcGF0Y2guCgpC\n"
+ "ZXNpZGVzLCB0eXBlIG9mIG1lbWJlciB2YXJpYWJsZXMgb2Ygc3RydWN0IHJlc291cmNlLCBzaWJs\n"
+ "aW5nIGFuZCBjaGlsZCwgYXJlCmNoYW5nZWQgZnJvbSAnc3RydWN0IHJlc291cmNlIConIHRvICdz\n"
+ "dHJ1Y3QgbGlzdF9oZWFkJy4gVGhpcyBicmluZ3MgdHdvCnBvaW50ZXJzIG9mIHNpemUgaW5jcmVh\n"
+ "c2UuCgpTdWdnZXN0ZWQtYnk6IEFuZHJldyBNb3J0b24gPGFrcG1AbGludXgtZm91bmRhdGlvbi5v\n"
+ "cmc+ClNpZ25lZC1vZmYtYnk6IEJhb3F1YW4gSGUgPGJoZUByZWRoYXQuY29tPgpDYzogUGF0cmlr\n"
+ "IEpha29ic3NvbiA8cGF0cmlrLnIuamFrb2Jzc29uQGdtYWlsLmNvbT4KQ2M6IERhdmlkIEFpcmxp\n"
+ "ZSA8YWlybGllZEBsaW51eC5pZT4KQ2M6ICJLLiBZLiBTcmluaXZhc2FuIiA8a3lzQG1pY3Jvc29m\n"
+ "dC5jb20+CkNjOiBIYWl5YW5nIFpoYW5nIDxoYWl5YW5nekBtaWNyb3NvZnQuY29tPgpDYzogU3Rl\n"
+ "cGhlbiBIZW1taW5nZXIgPHN0aGVtbWluQG1pY3Jvc29mdC5jb20+CkNjOiBEbWl0cnkgVG9yb2to\n"
+ "b3YgPGRtaXRyeS50b3Jva2hvdkBnbWFpbC5jb20+CkNjOiBEYW4gV2lsbGlhbXMgPGRhbi5qLndp\n"
+ "bGxpYW1zQGludGVsLmNvbT4KQ2M6IFJvYiBIZXJyaW5nIDxyb2JoK2R0QGtlcm5lbC5vcmc+CkNj\n"
+ "OiBGcmFuayBSb3dhbmQgPGZyb3dhbmQubGlzdEBnbWFpbC5jb20+CkNjOiBLZWl0aCBCdXNjaCA8\n"
+ "a2VpdGguYnVzY2hAaW50ZWwuY29tPgpDYzogSm9uYXRoYW4gRGVycmljayA8am9uYXRoYW4uZGVy\n"
+ "cmlja0BpbnRlbC5jb20+CkNjOiBMb3JlbnpvIFBpZXJhbGlzaSA8bG9yZW56by5waWVyYWxpc2lA\n"
+ "YXJtLmNvbT4KQ2M6IEJqb3JuIEhlbGdhYXMgPGJoZWxnYWFzQGdvb2dsZS5jb20+CkNjOiBUaG9t\n"
+ "YXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KQ2M6IEJyaWplc2ggU2luZ2ggPGJyaWpl\n"
+ "c2guc2luZ2hAYW1kLmNvbT4KQ2M6ICJKw6lyw7RtZSBHbGlzc2UiIDxqZ2xpc3NlQHJlZGhhdC5j\n"
+ "b20+CkNjOiBCb3Jpc2xhdiBQZXRrb3YgPGJwQHN1c2UuZGU+CkNjOiBUb20gTGVuZGFja3kgPHRo\n"
+ "b21hcy5sZW5kYWNreUBhbWQuY29tPgpDYzogR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAbGlu\n"
+ "dXhmb3VuZGF0aW9uLm9yZz4KQ2M6IFlhb3dlaSBCYWkgPGJhaXlhb3dlaUBjbXNzLmNoaW5hbW9i\n"
+ "aWxlLmNvbT4KQ2M6IFdlaSBZYW5nIDxyaWNoYXJkLndlaXlhbmdAZ21haWwuY29tPgpDYzogZGV2\n"
+ "ZWxAbGludXhkcml2ZXJwcm9qZWN0Lm9yZwpDYzogbGludXgtaW5wdXRAdmdlci5rZXJuZWwub3Jn\n"
+ "CkNjOiBsaW51eC1udmRpbW1AbGlzdHMuMDEub3JnCkNjOiBkZXZpY2V0cmVlQHZnZXIua2VybmVs\n"
+ "Lm9yZwpDYzogbGludXgtcGNpQHZnZXIua2VybmVsLm9yZwpDYzogTWljaGFsIFNpbWVrIDxtb25z\n"
+ "dHJAbW9uc3RyLmV1PgpDYzogQmVuamFtaW4gSGVycmVuc2NobWlkdCA8YmVuaEBrZXJuZWwuY3Jh\n"
+ "c2hpbmcub3JnPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\n"
+ "ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIApDYzogUGF1bCBN\n"
+ "YWNrZXJyYXMgPHBhdWx1c0BzYW1iYS5vcmc+CkNjOiBNaWNoYWVsIEVsbGVybWFuIDxtcGVAZWxs\n"
+ "ZXJtYW4uaWQuYXU+CkNjOiBsaW51eC1taXBzQGxpbnV4LW1pcHMub3JnCi0tLQogYXJjaC9hcm0v\n"
+ "cGxhdC1zYW1zdW5nL3BtLWNoZWNrLmMgICAgICAgICAgICB8ICAgNiArLQogYXJjaC9pYTY0L3Nu\n"
+ "L2tlcm5lbC9pb19pbml0LmMgICAgICAgICAgICAgICB8ICAgMiArLQogYXJjaC9taWNyb2JsYXpl\n"
+ "L3BjaS9wY2ktY29tbW9uLmMgICAgICAgICAgICB8ICAgNCArLQogYXJjaC9taXBzL3BjaS9wY2kt\n"
+ "cmMzMjQzNC5jICAgICAgICAgICAgICAgICB8ICAxMiArLQogYXJjaC9wb3dlcnBjL2tlcm5lbC9w\n"
+ "Y2ktY29tbW9uLmMgICAgICAgICAgICB8ICAgNCArLQogYXJjaC9zcGFyYy9rZXJuZWwvaW9wb3J0\n"
+ "LmMgICAgICAgICAgICAgICAgICB8ICAgMiArLQogYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vcGNp\n"
+ "LWJyaWRnZS5oICAgICAgICB8ICAgNCArLQogZHJpdmVycy9laXNhL2Vpc2EtYnVzLmMgICAgICAg\n"
+ "ICAgICAgICAgICAgICB8ICAgMiArCiBkcml2ZXJzL2dwdS9kcm0vZHJtX21lbW9yeS5jICAgICAg\n"
+ "ICAgICAgICAgIHwgICAzICstCiBkcml2ZXJzL2dwdS9kcm0vZ21hNTAwL2d0dC5jICAgICAgICAg\n"
+ "ICAgICAgIHwgICA1ICstCiBkcml2ZXJzL2h2L3ZtYnVzX2Rydi5jICAgICAgICAgICAgICAgICAg\n"
+ "ICAgIHwgIDUyICsrKy0tLS0KIGRyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1t\n"
+ "YWluLmMgfCAgIDQgKy0KIGRyaXZlcnMvbnZkaW1tL25hbWVzcGFjZV9kZXZzLmMgICAgICAgICAg\n"
+ "ICAgfCAgIDYgKy0KIGRyaXZlcnMvbnZkaW1tL25kLmggICAgICAgICAgICAgICAgICAgICAgICAg\n"
+ "fCAgIDUgKy0KIGRyaXZlcnMvb2YvYWRkcmVzcy5jICAgICAgICAgICAgICAgICAgICAgICAgfCAg\n"
+ "IDQgKy0KIGRyaXZlcnMvcGFyaXNjL2xiYV9wY2kuYyAgICAgICAgICAgICAgICAgICAgfCAgIDQg\n"
+ "Ky0KIGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvdm1kLmMgICAgICAgICAgICAgICAgfCAgIDggKy0K\n"
+ "IGRyaXZlcnMvcGNpL3Byb2JlLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKwogZHJp\n"
+ "dmVycy9wY2kvc2V0dXAtYnVzLmMgICAgICAgICAgICAgICAgICAgICB8ICAgMiArLQogaW5jbHVk\n"
+ "ZS9saW51eC9pb3BvcnQuaCAgICAgICAgICAgICAgICAgICAgICB8ICAxNyArKy0KIGtlcm5lbC9y\n"
+ "ZXNvdXJjZS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyMDYgKysrKysrKysrKysrKyst\n"
+ "LS0tLS0tLS0tLS0tLQogMjEgZmlsZXMgY2hhbmdlZCwgMTgzIGluc2VydGlvbnMoKyksIDE3MSBk\n"
+ "ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvcG0tY2hlY2su\n"
+ "YyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9wbS1jaGVjay5jCmluZGV4IGNkMmMwMmM2OGJjMy4u\n"
+ "NTQ5NDM1NWIxYzQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvcG0tY2hlY2su\n"
+ "YworKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvcG0tY2hlY2suYwpAQCAtNDYsOCArNDYsOCBA\n"
+ "QCB0eXBlZGVmIHUzMiAqKHJ1bl9mbl90KShzdHJ1Y3QgcmVzb3VyY2UgKnB0ciwgdTMyICphcmcp\n"
+ "Owogc3RhdGljIHZvaWQgczNjX3BtX3J1bl9yZXMoc3RydWN0IHJlc291cmNlICpwdHIsIHJ1bl9m\n"
+ "bl90IGZuLCB1MzIgKmFyZykKIHsKIAl3aGlsZSAocHRyICE9IE5VTEwpIHsKLQkJaWYgKHB0ci0+\n"
+ "Y2hpbGQgIT0gTlVMTCkKLQkJCXMzY19wbV9ydW5fcmVzKHB0ci0+Y2hpbGQsIGZuLCBhcmcpOwor\n"
+ "CQlpZiAoIWxpc3RfZW1wdHkoJnB0ci0+Y2hpbGQpKQorCQkJczNjX3BtX3J1bl9yZXMocmVzb3Vy\n"
+ "Y2VfZmlyc3RfY2hpbGQoJnB0ci0+Y2hpbGQpLCBmbiwgYXJnKTsKIAogCQlpZiAoKHB0ci0+Zmxh\n"
+ "Z3MgJiBJT1JFU09VUkNFX1NZU1RFTV9SQU0pCiAJCQkJPT0gSU9SRVNPVVJDRV9TWVNURU1fUkFN\n"
+ "KSB7CkBAIC01Nyw3ICs1Nyw3IEBAIHN0YXRpYyB2b2lkIHMzY19wbV9ydW5fcmVzKHN0cnVjdCBy\n"
+ "ZXNvdXJjZSAqcHRyLCBydW5fZm5fdCBmbiwgdTMyICphcmcpCiAJCQlhcmcgPSAoZm4pKHB0ciwg\n"
+ "YXJnKTsKIAkJfQogCi0JCXB0ciA9IHB0ci0+c2libGluZzsKKwkJcHRyID0gcmVzb3VyY2Vfc2li\n"
+ "bGluZyhwdHIpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9pb19p\n"
+ "bml0LmMgYi9hcmNoL2lhNjQvc24va2VybmVsL2lvX2luaXQuYwppbmRleCBkNjM4MDlhNmFkZmEu\n"
+ "LjMzOGE3YjdmMTk0ZCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9pb19pbml0LmMK\n"
+ "KysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9pb19pbml0LmMKQEAgLTE5Miw3ICsxOTIsNyBAQCBz\n"
+ "bl9pb19zbG90X2ZpeHVwKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiAJCSAqIGlmIGl0J3MgYWxyZWFk\n"
+ "eSBpbiB0aGUgZGV2aWNlIHN0cnVjdHVyZSwgcmVtb3ZlIGl0IGJlZm9yZQogCQkgKiBpbnNlcnRp\n"
+ "bmcKIAkJICovCi0JCWlmIChyZXMtPnBhcmVudCAmJiByZXMtPnBhcmVudC0+Y2hpbGQpCisJCWlm\n"
+ "IChyZXMtPnBhcmVudCAmJiAhbGlzdF9lbXB0eSgmcmVzLT5wYXJlbnQtPmNoaWxkKSkKIAkJCXJl\n"
+ "bGVhc2VfcmVzb3VyY2UocmVzKTsKIAogCQlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8p\n"
+ "CmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvcGNpL3BjaS1jb21tb24uYyBiL2FyY2gvbWlj\n"
+ "cm9ibGF6ZS9wY2kvcGNpLWNvbW1vbi5jCmluZGV4IDc4OTliYWZhYjA2NC4uMmJmNzNlMjdlMjMx\n"
+ "IDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvcGNpL3BjaS1jb21tb24uYworKysgYi9hcmNo\n"
+ "L21pY3JvYmxhemUvcGNpL3BjaS1jb21tb24uYwpAQCAtNTMzLDcgKzUzMyw5IEBAIHZvaWQgcGNp\n"
+ "X3Byb2Nlc3NfYnJpZGdlX09GX3JhbmdlcyhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsCiAJ\n"
+ "CQlyZXMtPmZsYWdzID0gcmFuZ2UuZmxhZ3M7CiAJCQlyZXMtPnN0YXJ0ID0gcmFuZ2UuY3B1X2Fk\n"
+ "ZHI7CiAJCQlyZXMtPmVuZCA9IHJhbmdlLmNwdV9hZGRyICsgcmFuZ2Uuc2l6ZSAtIDE7Ci0JCQly\n"
+ "ZXMtPnBhcmVudCA9IHJlcy0+Y2hpbGQgPSByZXMtPnNpYmxpbmcgPSBOVUxMOworCQkJcmVzLT5w\n"
+ "YXJlbnQgPSBOVUxMOworCQkJSU5JVF9MSVNUX0hFQUQoJnJlcy0+Y2hpbGQpOworCQkJSU5JVF9M\n"
+ "SVNUX0hFQUQoJnJlcy0+c2libGluZyk7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlw\n"
+ "cy9wY2kvcGNpLXJjMzI0MzQuYyBiL2FyY2gvbWlwcy9wY2kvcGNpLXJjMzI0MzQuYwppbmRleCA3\n"
+ "ZjZjZTZkNzM0YzAuLmU4MDI4M2RmNzkyNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9wY2kt\n"
+ "cmMzMjQzNC5jCisrKyBiL2FyY2gvbWlwcy9wY2kvcGNpLXJjMzI0MzQuYwpAQCAtNTMsOCArNTMs\n"
+ "OCBAQCBzdGF0aWMgc3RydWN0IHJlc291cmNlIHJjMzI0MzRfcmVzX3BjaV9tZW0xID0gewogCS5z\n"
+ "dGFydCA9IDB4NTAwMDAwMDAsCiAJLmVuZCA9IDB4NUZGRkZGRkYsCiAJLmZsYWdzID0gSU9SRVNP\n"
+ "VVJDRV9NRU0sCi0JLnNpYmxpbmcgPSBOVUxMLAotCS5jaGlsZCA9ICZyYzMyNDM0X3Jlc19wY2lf\n"
+ "bWVtMgorCS5zaWJsaW5nID0gTElTVF9IRUFEX0lOSVQocmMzMjQzNF9yZXNfcGNpX21lbTEuc2li\n"
+ "bGluZyksCisJLmNoaWxkID0gTElTVF9IRUFEX0lOSVQocmMzMjQzNF9yZXNfcGNpX21lbTEuY2hp\n"
+ "bGQpLAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSByYzMyNDM0X3Jlc19wY2lfbWVtMiA9\n"
+ "IHsKQEAgLTYzLDggKzYzLDggQEAgc3RhdGljIHN0cnVjdCByZXNvdXJjZSByYzMyNDM0X3Jlc19w\n"
+ "Y2lfbWVtMiA9IHsKIAkuZW5kID0gMHg2RkZGRkZGRiwKIAkuZmxhZ3MgPSBJT1JFU09VUkNFX01F\n"
+ "TSwKIAkucGFyZW50ID0gJnJjMzI0MzRfcmVzX3BjaV9tZW0xLAotCS5zaWJsaW5nID0gTlVMTCwK\n"
+ "LQkuY2hpbGQgPSBOVUxMCisJLnNpYmxpbmcgPSBMSVNUX0hFQURfSU5JVChyYzMyNDM0X3Jlc19w\n"
+ "Y2lfbWVtMi5zaWJsaW5nKSwKKwkuY2hpbGQgPSBMSVNUX0hFQURfSU5JVChyYzMyNDM0X3Jlc19w\n"
+ "Y2lfbWVtMi5jaGlsZCksCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHJjMzI0MzRfcmVz\n"
+ "X3BjaV9pbzEgPSB7CkBAIC03Miw2ICs3Miw4IEBAIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcmMz\n"
+ "MjQzNF9yZXNfcGNpX2lvMSA9IHsKIAkuc3RhcnQgPSAweDE4ODAwMDAwLAogCS5lbmQgPSAweDE4\n"
+ "OEZGRkZGLAogCS5mbGFncyA9IElPUkVTT1VSQ0VfSU8sCisJLnNpYmxpbmcgPSBMSVNUX0hFQURf\n"
+ "SU5JVChyYzMyNDM0X3Jlc19wY2lfaW8xLnNpYmxpbmcpLAorCS5jaGlsZCA9IExJU1RfSEVBRF9J\n"
+ "TklUKHJjMzI0MzRfcmVzX3BjaV9pbzEuY2hpbGQpLAogfTsKIAogZXh0ZXJuIHN0cnVjdCBwY2lf\n"
+ "b3BzIHJjMzI0MzRfcGNpX29wczsKQEAgLTIwOCw2ICsyMTAsOCBAQCBzdGF0aWMgaW50IF9faW5p\n"
+ "dCByYzMyNDM0X3BjaV9pbml0KHZvaWQpCiAKIAlwcl9pbmZvKCJQQ0k6IEluaXRpYWxpemluZyBQ\n"
+ "Q0lcbiIpOwogCisJbGlzdF9hZGQoJnJjMzI0MzRfcmVzX3BjaV9tZW0yLnNpYmxpbmcsICZyYzMy\n"
+ "NDM0X3Jlc19wY2lfbWVtMS5jaGlsZCk7CisKIAlpb3BvcnRfcmVzb3VyY2Uuc3RhcnQgPSByYzMy\n"
+ "NDM0X3Jlc19wY2lfaW8xLnN0YXJ0OwogCWlvcG9ydF9yZXNvdXJjZS5lbmQgPSByYzMyNDM0X3Jl\n"
+ "c19wY2lfaW8xLmVuZDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktY29t\n"
+ "bW9uLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYwppbmRleCA5MjYwMzViYjM3\n"
+ "OGQuLjI4ZmJlODNjOWRhZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktY29t\n"
+ "bW9uLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktY29tbW9uLmMKQEAgLTc2MSw3ICs3\n"
+ "NjEsOSBAQCB2b2lkIHBjaV9wcm9jZXNzX2JyaWRnZV9PRl9yYW5nZXMoc3RydWN0IHBjaV9jb250\n"
+ "cm9sbGVyICpob3NlLAogCQkJcmVzLT5mbGFncyA9IHJhbmdlLmZsYWdzOwogCQkJcmVzLT5zdGFy\n"
+ "dCA9IHJhbmdlLmNwdV9hZGRyOwogCQkJcmVzLT5lbmQgPSByYW5nZS5jcHVfYWRkciArIHJhbmdl\n"
+ "LnNpemUgLSAxOwotCQkJcmVzLT5wYXJlbnQgPSByZXMtPmNoaWxkID0gcmVzLT5zaWJsaW5nID0g\n"
+ "TlVMTDsKKwkJCXJlcy0+cGFyZW50ID0gTlVMTDsKKwkJCUlOSVRfTElTVF9IRUFEKCZyZXMtPmNo\n"
+ "aWxkKTsKKwkJCUlOSVRfTElTVF9IRUFEKCZyZXMtPnNpYmxpbmcpOwogCQl9CiAJfQogfQpkaWZm\n"
+ "IC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvaW9wb3J0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9p\n"
+ "b3BvcnQuYwppbmRleCBjY2E5MTM0Y2ZhN2QuLjk5ZWZlNGU5OGIxNiAxMDA2NDQKLS0tIGEvYXJj\n"
+ "aC9zcGFyYy9rZXJuZWwvaW9wb3J0LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvaW9wb3J0LmMK\n"
+ "QEAgLTY2OSw3ICs2NjksNyBAQCBzdGF0aWMgaW50IHNwYXJjX2lvX3Byb2Nfc2hvdyhzdHJ1Y3Qg\n"
+ "c2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiAJc3RydWN0IHJlc291cmNlICpyb290ID0gbS0+cHJpdmF0\n"
+ "ZSwgKnI7CiAJY29uc3QgY2hhciAqbm07CiAKLQlmb3IgKHIgPSByb290LT5jaGlsZDsgciAhPSBO\n"
+ "VUxMOyByID0gci0+c2libGluZykgeworCWxpc3RfZm9yX2VhY2hfZW50cnkociwgJnJvb3QtPmNo\n"
+ "aWxkLCBzaWJsaW5nKSB7CiAJCWlmICgobm0gPSByLT5uYW1lKSA9PSBOVUxMKSBubSA9ICI/Pz8i\n"
+ "OwogCQlzZXFfcHJpbnRmKG0sICIlMDE2bGx4LSUwMTZsbHg6ICVzXG4iLAogCQkJCSh1bnNpZ25l\n"
+ "ZCBsb25nIGxvbmcpci0+c3RhcnQsCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2Fz\n"
+ "bS9wY2ktYnJpZGdlLmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9wY2ktYnJpZGdlLmgKaW5k\n"
+ "ZXggMGI2OGM3NmVjMWU2Li5mNDg3YjA2ODE3ZGYgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2lu\n"
+ "Y2x1ZGUvYXNtL3BjaS1icmlkZ2UuaAorKysgYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9wY2kt\n"
+ "YnJpZGdlLmgKQEAgLTcxLDggKzcxLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHBjaWJpb3NfaW5p\n"
+ "dF9yZXNvdXJjZShzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKIAlyZXMtPmZsYWdzID0gZmxhZ3M7CiAJ\n"
+ "cmVzLT5uYW1lID0gbmFtZTsKIAlyZXMtPnBhcmVudCA9IE5VTEw7Ci0JcmVzLT5zaWJsaW5nID0g\n"
+ "TlVMTDsKLQlyZXMtPmNoaWxkID0gTlVMTDsKKwlJTklUX0xJU1RfSEVBRCgmcmVzLT5jaGlsZCk7\n"
+ "CisJSU5JVF9MSVNUX0hFQUQoJnJlcy0+c2libGluZyk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJp\n"
+ "dmVycy9laXNhL2Vpc2EtYnVzLmMgYi9kcml2ZXJzL2Vpc2EvZWlzYS1idXMuYwppbmRleCAxZTgw\n"
+ "NjJmNmRiZmMuLmRiYTc4Zjc1ZmQwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9laXNhL2Vpc2EtYnVz\n"
+ "LmMKKysrIGIvZHJpdmVycy9laXNhL2Vpc2EtYnVzLmMKQEAgLTQwOCw2ICs0MDgsOCBAQCBzdGF0\n"
+ "aWMgc3RydWN0IHJlc291cmNlIGVpc2Ffcm9vdF9yZXMgPSB7CiAJLnN0YXJ0ID0gMCwKIAkuZW5k\n"
+ "ICAgPSAweGZmZmZmZmZmLAogCS5mbGFncyA9IElPUkVTT1VSQ0VfSU8sCisJLnNpYmxpbmcgPSBM\n"
+ "SVNUX0hFQURfSU5JVChlaXNhX3Jvb3RfcmVzLnNpYmxpbmcpLAorCS5jaGlsZCAgPSBMSVNUX0hF\n"
+ "QURfSU5JVChlaXNhX3Jvb3RfcmVzLmNoaWxkKSwKIH07CiAKIHN0YXRpYyBpbnQgZWlzYV9idXNf\n"
+ "Y291bnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX21lbW9yeS5jIGIvZHJpdmVy\n"
+ "cy9ncHUvZHJtL2RybV9tZW1vcnkuYwppbmRleCBkNjllNGZjMWVlNzcuLjMzYmFhN2ZhNWU0MSAx\n"
+ "MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9tZW1vcnkuYworKysgYi9kcml2ZXJzL2dw\n"
+ "dS9kcm0vZHJtX21lbW9yeS5jCkBAIC0xNTUsOSArMTU1LDggQEAgdTY0IGRybV9nZXRfbWF4X2lv\n"
+ "bWVtKHZvaWQpCiAJc3RydWN0IHJlc291cmNlICp0bXA7CiAJcmVzb3VyY2Vfc2l6ZV90IG1heF9p\n"
+ "b21lbSA9IDA7CiAKLQlmb3IgKHRtcCA9IGlvbWVtX3Jlc291cmNlLmNoaWxkOyB0bXA7IHRtcCA9\n"
+ "IHRtcC0+c2libGluZykgeworCWxpc3RfZm9yX2VhY2hfZW50cnkodG1wLCAmaW9tZW1fcmVzb3Vy\n"
+ "Y2UuY2hpbGQsIHNpYmxpbmcpCiAJCW1heF9pb21lbSA9IG1heChtYXhfaW9tZW0sICB0bXAtPmVu\n"
+ "ZCk7Ci0JfQogCiAJcmV0dXJuIG1heF9pb21lbTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1\n"
+ "L2RybS9nbWE1MDAvZ3R0LmMgYi9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL2d0dC5jCmluZGV4IDM5\n"
+ "NDliMDk5MDkxNi4uYWRkZDNiYzAwOWFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZ21h\n"
+ "NTAwL2d0dC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvZ3R0LmMKQEAgLTU2NSw3ICs1\n"
+ "NjUsNyBAQCBpbnQgcHNiX2d0dF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCByZXN1\n"
+ "bWUpCiBpbnQgcHNiX2d0dF9yZXN0b3JlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3Ry\n"
+ "dWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVj\n"
+ "dCByZXNvdXJjZSAqciA9IGRldl9wcml2LT5ndHRfbWVtLT5jaGlsZDsKKwlzdHJ1Y3QgcmVzb3Vy\n"
+ "Y2UgKnI7CiAJc3RydWN0IGd0dF9yYW5nZSAqcmFuZ2U7CiAJdW5zaWduZWQgaW50IHJlc3RvcmVk\n"
+ "ID0gMCwgdG90YWwgPSAwLCBzaXplID0gMDsKIApAQCAtNTczLDE0ICs1NzMsMTMgQEAgaW50IHBz\n"
+ "Yl9ndHRfcmVzdG9yZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogCW11dGV4X2xvY2soJmRldl9w\n"
+ "cml2LT5ndHRfbXV0ZXgpOwogCXBzYl9ndHRfaW5pdChkZXYsIDEpOwogCi0Jd2hpbGUgKHIgIT0g\n"
+ "TlVMTCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkociwgJmRldl9wcml2LT5ndHRfbWVtLT5jaGls\n"
+ "ZCwgc2libGluZykgewogCQlyYW5nZSA9IGNvbnRhaW5lcl9vZihyLCBzdHJ1Y3QgZ3R0X3Jhbmdl\n"
+ "LCByZXNvdXJjZSk7CiAJCWlmIChyYW5nZS0+cGFnZXMpIHsKIAkJCXBzYl9ndHRfaW5zZXJ0KGRl\n"
+ "diwgcmFuZ2UsIDEpOwogCQkJc2l6ZSArPSByYW5nZS0+cmVzb3VyY2UuZW5kIC0gcmFuZ2UtPnJl\n"
+ "c291cmNlLnN0YXJ0OwogCQkJcmVzdG9yZWQrKzsKIAkJfQotCQlyID0gci0+c2libGluZzsKIAkJ\n"
+ "dG90YWwrKzsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+Z3R0X211dGV4KTsKZGlmZiAt\n"
+ "LWdpdCBhL2RyaXZlcnMvaHYvdm1idXNfZHJ2LmMgYi9kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jCmlu\n"
+ "ZGV4IGIxMGZlMjZjNDg5MS4uZDg3ZWM1YTFiYzRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h2L3Zt\n"
+ "YnVzX2Rydi5jCisrKyBiL2RyaXZlcnMvaHYvdm1idXNfZHJ2LmMKQEAgLTE0MTIsOSArMTQxMiw4\n"
+ "IEBAIHN0YXRpYyBhY3BpX3N0YXR1cyB2bWJ1c193YWxrX3Jlc291cmNlcyhzdHJ1Y3QgYWNwaV9y\n"
+ "ZXNvdXJjZSAqcmVzLCB2b2lkICpjdHgpCiB7CiAJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0ID0gMDsK\n"
+ "IAlyZXNvdXJjZV9zaXplX3QgZW5kID0gMDsKLQlzdHJ1Y3QgcmVzb3VyY2UgKm5ld19yZXM7CisJ\n"
+ "c3RydWN0IHJlc291cmNlICpuZXdfcmVzLCAqdG1wOwogCXN0cnVjdCByZXNvdXJjZSAqKm9sZF9y\n"
+ "ZXMgPSAmaHlwZXJ2X21taW87Ci0Jc3RydWN0IHJlc291cmNlICoqcHJldl9yZXMgPSBOVUxMOwog\n"
+ "CiAJc3dpdGNoIChyZXMtPnR5cGUpIHsKIApAQCAtMTQ2MSw0NCArMTQ2MCwzNiBAQCBzdGF0aWMg\n"
+ "YWNwaV9zdGF0dXMgdm1idXNfd2Fsa19yZXNvdXJjZXMoc3RydWN0IGFjcGlfcmVzb3VyY2UgKnJl\n"
+ "cywgdm9pZCAqY3R4KQogCS8qCiAJICogSWYgdHdvIHJhbmdlcyBhcmUgYWRqYWNlbnQsIG1lcmdl\n"
+ "IHRoZW0uCiAJICovCi0JZG8gewotCQlpZiAoISpvbGRfcmVzKSB7Ci0JCQkqb2xkX3JlcyA9IG5l\n"
+ "d19yZXM7Ci0JCQlicmVhazsKLQkJfQotCi0JCWlmICgoKCpvbGRfcmVzKS0+ZW5kICsgMSkgPT0g\n"
+ "bmV3X3Jlcy0+c3RhcnQpIHsKLQkJCSgqb2xkX3JlcyktPmVuZCA9IG5ld19yZXMtPmVuZDsKKwlp\n"
+ "ZiAoISpvbGRfcmVzKSB7CisJCSpvbGRfcmVzID0gbmV3X3JlczsKKwkJcmV0dXJuIEFFX09LOwor\n"
+ "CX0KKwl0bXAgPSAqb2xkX3JlczsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X2Zyb20odG1wLCAmdG1w\n"
+ "LT5wYXJlbnQtPmNoaWxkLCBzaWJsaW5nKSB7CisJCWlmICgodG1wLT5lbmQgKyAxKSA9PSBuZXdf\n"
+ "cmVzLT5zdGFydCkgeworCQkJdG1wLT5lbmQgPSBuZXdfcmVzLT5lbmQ7CiAJCQlrZnJlZShuZXdf\n"
+ "cmVzKTsKIAkJCWJyZWFrOwogCQl9CiAKLQkJaWYgKCgqb2xkX3JlcyktPnN0YXJ0ID09IG5ld19y\n"
+ "ZXMtPmVuZCArIDEpIHsKLQkJCSgqb2xkX3JlcyktPnN0YXJ0ID0gbmV3X3Jlcy0+c3RhcnQ7CisJ\n"
+ "CWlmICh0bXAtPnN0YXJ0ID09IG5ld19yZXMtPmVuZCArIDEpIHsKKwkJCXRtcC0+c3RhcnQgPSBu\n"
+ "ZXdfcmVzLT5zdGFydDsKIAkJCWtmcmVlKG5ld19yZXMpOwogCQkJYnJlYWs7CiAJCX0KIAotCQlp\n"
+ "ZiAoKCpvbGRfcmVzKS0+c3RhcnQgPiBuZXdfcmVzLT5lbmQpIHsKLQkJCW5ld19yZXMtPnNpYmxp\n"
+ "bmcgPSAqb2xkX3JlczsKLQkJCWlmIChwcmV2X3JlcykKLQkJCQkoKnByZXZfcmVzKS0+c2libGlu\n"
+ "ZyA9IG5ld19yZXM7Ci0JCQkqb2xkX3JlcyA9IG5ld19yZXM7CisJCWlmICh0bXAtPnN0YXJ0ID4g\n"
+ "bmV3X3Jlcy0+ZW5kKSB7CisJCQlsaXN0X2FkZCgmbmV3X3Jlcy0+c2libGluZywgdG1wLT5zaWJs\n"
+ "aW5nLnByZXYpOwogCQkJYnJlYWs7CiAJCX0KLQotCQlwcmV2X3JlcyA9IG9sZF9yZXM7Ci0JCW9s\n"
+ "ZF9yZXMgPSAmKCpvbGRfcmVzKS0+c2libGluZzsKLQotCX0gd2hpbGUgKDEpOworCX0KIAogCXJl\n"
+ "dHVybiBBRV9PSzsKIH0KIAogc3RhdGljIGludCB2bWJ1c19hY3BpX3JlbW92ZShzdHJ1Y3QgYWNw\n"
+ "aV9kZXZpY2UgKmRldmljZSkKIHsKLQlzdHJ1Y3QgcmVzb3VyY2UgKmN1cl9yZXM7Ci0Jc3RydWN0\n"
+ "IHJlc291cmNlICpuZXh0X3JlczsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAogCWlmIChoeXBl\n"
+ "cnZfbW1pbykgewogCQlpZiAoZmJfbW1pbykgewpAQCAtMTUwNywxMCArMTQ5OCw5IEBAIHN0YXRp\n"
+ "YyBpbnQgdm1idXNfYWNwaV9yZW1vdmUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiAJCQlm\n"
+ "Yl9tbWlvID0gTlVMTDsKIAkJfQogCi0JCWZvciAoY3VyX3JlcyA9IGh5cGVydl9tbWlvOyBjdXJf\n"
+ "cmVzOyBjdXJfcmVzID0gbmV4dF9yZXMpIHsKLQkJCW5leHRfcmVzID0gY3VyX3Jlcy0+c2libGlu\n"
+ "ZzsKLQkJCWtmcmVlKGN1cl9yZXMpOwotCQl9CisJCXJlcyA9IGh5cGVydl9tbWlvOworCQlsaXN0\n"
+ "X2Zvcl9lYWNoX2VudHJ5X2Zyb20ocmVzLCAmcmVzLT5wYXJlbnQtPmNoaWxkLCBzaWJsaW5nKQor\n"
+ "CQkJa2ZyZWUocmVzKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTE1OTYsNyArMTU4Niw4IEBAIGlu\n"
+ "dCB2bWJ1c19hbGxvY2F0ZV9tbWlvKHN0cnVjdCByZXNvdXJjZSAqKm5ldywgc3RydWN0IGh2X2Rl\n"
+ "dmljZSAqZGV2aWNlX29iaiwKIAkJfQogCX0KIAotCWZvciAoaXRlciA9IGh5cGVydl9tbWlvOyBp\n"
+ "dGVyOyBpdGVyID0gaXRlci0+c2libGluZykgeworCWl0ZXIgPSBoeXBlcnZfbW1pbzsKKwlsaXN0\n"
+ "X2Zvcl9lYWNoX2VudHJ5X2Zyb20oaXRlciwgJml0ZXItPnBhcmVudC0+Y2hpbGQsIHNpYmxpbmcp\n"
+ "IHsKIAkJaWYgKChpdGVyLT5zdGFydCA+PSBtYXgpIHx8IChpdGVyLT5lbmQgPD0gbWluKSkKIAkJ\n"
+ "CWNvbnRpbnVlOwogCkBAIC0xNjM5LDcgKzE2MzAsOCBAQCB2b2lkIHZtYnVzX2ZyZWVfbW1pbyhy\n"
+ "ZXNvdXJjZV9zaXplX3Qgc3RhcnQsIHJlc291cmNlX3NpemVfdCBzaXplKQogCXN0cnVjdCByZXNv\n"
+ "dXJjZSAqaXRlcjsKIAogCWRvd24oJmh5cGVydl9tbWlvX2xvY2spOwotCWZvciAoaXRlciA9IGh5\n"
+ "cGVydl9tbWlvOyBpdGVyOyBpdGVyID0gaXRlci0+c2libGluZykgeworCWl0ZXIgPSBoeXBlcnZf\n"
+ "bW1pbzsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X2Zyb20oaXRlciwgJml0ZXItPnBhcmVudC0+Y2hp\n"
+ "bGQsIHNpYmxpbmcpIHsKIAkJaWYgKChpdGVyLT5zdGFydCA+PSBzdGFydCArIHNpemUpIHx8IChp\n"
+ "dGVyLT5lbmQgPD0gc3RhcnQpKQogCQkJY29udGludWU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMv\n"
+ "aW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1tYWluLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0\n"
+ "aWNrL2lmb3JjZS9pZm9yY2UtbWFpbi5jCmluZGV4IGRhZWViNGM3ZTNiMC4uNWMwYmUyN2IzM2Zm\n"
+ "IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtbWFpbi5j\n"
+ "CisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1tYWluLmMKQEAgLTMw\n"
+ "NSw4ICszMDUsOCBAQCBpbnQgaWZvcmNlX2luaXRfZGV2aWNlKHN0cnVjdCBpZm9yY2UgKmlmb3Jj\n"
+ "ZSkKIAlpZm9yY2UtPmRldmljZV9tZW1vcnkuZW5kID0gMjAwOwogCWlmb3JjZS0+ZGV2aWNlX21l\n"
+ "bW9yeS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOwogCWlmb3JjZS0+ZGV2aWNlX21lbW9yeS5wYXJl\n"
+ "bnQgPSBOVUxMOwotCWlmb3JjZS0+ZGV2aWNlX21lbW9yeS5jaGlsZCA9IE5VTEw7Ci0JaWZvcmNl\n"
+ "LT5kZXZpY2VfbWVtb3J5LnNpYmxpbmcgPSBOVUxMOworCUlOSVRfTElTVF9IRUFEKCZpZm9yY2Ut\n"
+ "PmRldmljZV9tZW1vcnkuY2hpbGQpOworCUlOSVRfTElTVF9IRUFEKCZpZm9yY2UtPmRldmljZV9t\n"
+ "ZW1vcnkuc2libGluZyk7CiAKIC8qCiAgKiBXYWl0IHVudGlsIGRldmljZSByZWFkeSAtIHVudGls\n"
+ "IGl0IHNlbmRzIGl0cyBmaXJzdCByZXNwb25zZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZkaW1t\n"
+ "L25hbWVzcGFjZV9kZXZzLmMgYi9kcml2ZXJzL252ZGltbS9uYW1lc3BhY2VfZGV2cy5jCmluZGV4\n"
+ "IDI4YWZkZDY2ODkwNS4uZjUzZDQxMGQ5OTgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL252ZGltbS9u\n"
+ "YW1lc3BhY2VfZGV2cy5jCisrKyBiL2RyaXZlcnMvbnZkaW1tL25hbWVzcGFjZV9kZXZzLmMKQEAg\n"
+ "LTYzNyw3ICs2MzcsNyBAQCBzdGF0aWMgcmVzb3VyY2Vfc2l6ZV90IHNjYW5fYWxsb2NhdGUoc3Ry\n"
+ "dWN0IG5kX3JlZ2lvbiAqbmRfcmVnaW9uLAogIHJldHJ5OgogCWZpcnN0ID0gMDsKIAlmb3JfZWFj\n"
+ "aF9kcGFfcmVzb3VyY2UobmRkLCByZXMpIHsKLQkJc3RydWN0IHJlc291cmNlICpuZXh0ID0gcmVz\n"
+ "LT5zaWJsaW5nLCAqbmV3X3JlcyA9IE5VTEw7CisJCXN0cnVjdCByZXNvdXJjZSAqbmV4dCA9IHJl\n"
+ "c291cmNlX3NpYmxpbmcocmVzKSwgKm5ld19yZXMgPSBOVUxMOwogCQlyZXNvdXJjZV9zaXplX3Qg\n"
+ "YWxsb2NhdGUsIGF2YWlsYWJsZSA9IDA7CiAJCWVudW0gYWxsb2NfbG9jIGxvYyA9IEFMTE9DX0VS\n"
+ "UjsKIAkJY29uc3QgY2hhciAqYWN0aW9uOwpAQCAtNzYzLDcgKzc2Myw3IEBAIHN0YXRpYyByZXNv\n"
+ "dXJjZV9zaXplX3Qgc2Nhbl9hbGxvY2F0ZShzdHJ1Y3QgbmRfcmVnaW9uICpuZF9yZWdpb24sCiAJ\n"
+ "ICogYW4gaW5pdGlhbCAicG1lbS1yZXNlcnZlIHBhc3MiLiAgT25seSBkbyBhbiBpbml0aWFsIEJM\n"
+ "SyBhbGxvY2F0aW9uCiAJICogd2hlbiBub25lIG9mIHRoZSBEUEEgc3BhY2UgaXMgcmVzZXJ2ZWQu\n"
+ "CiAJICovCi0JaWYgKChpc19wbWVtIHx8ICFuZGQtPmRwYS5jaGlsZCkgJiYgbiA9PSB0b19hbGxv\n"
+ "Y2F0ZSkKKwlpZiAoKGlzX3BtZW0gfHwgbGlzdF9lbXB0eSgmbmRkLT5kcGEuY2hpbGQpKSAmJiBu\n"
+ "ID09IHRvX2FsbG9jYXRlKQogCQlyZXR1cm4gaW5pdF9kcGFfYWxsb2NhdGlvbihsYWJlbF9pZCwg\n"
+ "bmRfcmVnaW9uLCBuZF9tYXBwaW5nLCBuKTsKIAlyZXR1cm4gbjsKIH0KQEAgLTc3OSw3ICs3Nzks\n"
+ "NyBAQCBzdGF0aWMgaW50IG1lcmdlX2RwYShzdHJ1Y3QgbmRfcmVnaW9uICpuZF9yZWdpb24sCiAg\n"
+ "cmV0cnk6CiAJZm9yX2VhY2hfZHBhX3Jlc291cmNlKG5kZCwgcmVzKSB7CiAJCWludCByYzsKLQkJ\n"
+ "c3RydWN0IHJlc291cmNlICpuZXh0ID0gcmVzLT5zaWJsaW5nOworCQlzdHJ1Y3QgcmVzb3VyY2Ug\n"
+ "Km5leHQgPSByZXNvdXJjZV9zaWJsaW5nKHJlcyk7CiAJCXJlc291cmNlX3NpemVfdCBlbmQgPSBy\n"
+ "ZXMtPnN0YXJ0ICsgcmVzb3VyY2Vfc2l6ZShyZXMpOwogCiAJCWlmICghbmV4dCB8fCBzdHJjbXAo\n"
+ "cmVzLT5uYW1lLCBsYWJlbF9pZC0+aWQpICE9IDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZkaW1t\n"
+ "L25kLmggYi9kcml2ZXJzL252ZGltbS9uZC5oCmluZGV4IDMyZTAzNjRiNDhiOS4uZGE3ZGExNWUw\n"
+ "M2U3IDEwMDY0NAotLS0gYS9kcml2ZXJzL252ZGltbS9uZC5oCisrKyBiL2RyaXZlcnMvbnZkaW1t\n"
+ "L25kLmgKQEAgLTEwMiwxMSArMTAyLDEwIEBAIHVuc2lnbmVkIHNpemVvZl9uYW1lc3BhY2VfbGFi\n"
+ "ZWwoc3RydWN0IG52ZGltbV9kcnZkYXRhICpuZGQpOwogCQkodW5zaWduZWQgbG9uZyBsb25nKSAo\n"
+ "cmVzID8gcmVzLT5zdGFydCA6IDApLCAjI2FyZykKIAogI2RlZmluZSBmb3JfZWFjaF9kcGFfcmVz\n"
+ "b3VyY2UobmRkLCByZXMpIFwKLQlmb3IgKHJlcyA9IChuZGQpLT5kcGEuY2hpbGQ7IHJlczsgcmVz\n"
+ "ID0gcmVzLT5zaWJsaW5nKQorCWxpc3RfZm9yX2VhY2hfZW50cnkocmVzLCAmKG5kZCktPmRwYS5j\n"
+ "aGlsZCwgc2libGluZykKIAogI2RlZmluZSBmb3JfZWFjaF9kcGFfcmVzb3VyY2Vfc2FmZShuZGQs\n"
+ "IHJlcywgbmV4dCkgXAotCWZvciAocmVzID0gKG5kZCktPmRwYS5jaGlsZCwgbmV4dCA9IHJlcyA/\n"
+ "IHJlcy0+c2libGluZyA6IE5VTEw7IFwKLQkJCXJlczsgcmVzID0gbmV4dCwgbmV4dCA9IG5leHQg\n"
+ "PyBuZXh0LT5zaWJsaW5nIDogTlVMTCkKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVzLCBu\n"
+ "ZXh0LCAmKG5kZCktPmRwYS5jaGlsZCwgc2libGluZykKIAogc3RydWN0IG5kX3BlcmNwdV9sYW5l\n"
+ "IHsKIAlpbnQgY291bnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL2FkZHJlc3MuYyBiL2RyaXZl\n"
+ "cnMvb2YvYWRkcmVzcy5jCmluZGV4IDUzMzQ5OTEyYWM3NS4uZTJlMjU3MTlhYjUyIDEwMDY0NAot\n"
+ "LS0gYS9kcml2ZXJzL29mL2FkZHJlc3MuYworKysgYi9kcml2ZXJzL29mL2FkZHJlc3MuYwpAQCAt\n"
+ "MzMwLDcgKzMzMCw5IEBAIGludCBvZl9wY2lfcmFuZ2VfdG9fcmVzb3VyY2Uoc3RydWN0IG9mX3Bj\n"
+ "aV9yYW5nZSAqcmFuZ2UsCiB7CiAJaW50IGVycjsKIAlyZXMtPmZsYWdzID0gcmFuZ2UtPmZsYWdz\n"
+ "OwotCXJlcy0+cGFyZW50ID0gcmVzLT5jaGlsZCA9IHJlcy0+c2libGluZyA9IE5VTEw7CisJcmVz\n"
+ "LT5wYXJlbnQgPSBOVUxMOworCUlOSVRfTElTVF9IRUFEKCZyZXMtPmNoaWxkKTsKKwlJTklUX0xJ\n"
+ "U1RfSEVBRCgmcmVzLT5zaWJsaW5nKTsKIAlyZXMtPm5hbWUgPSBucC0+ZnVsbF9uYW1lOwogCiAJ\n"
+ "aWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bh\n"
+ "cmlzYy9sYmFfcGNpLmMgYi9kcml2ZXJzL3BhcmlzYy9sYmFfcGNpLmMKaW5kZXggNjliZDk4NDIx\n"
+ "ZWIxLi43NDgyYmRmZDE5NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFyaXNjL2xiYV9wY2kuYwor\n"
+ "KysgYi9kcml2ZXJzL3BhcmlzYy9sYmFfcGNpLmMKQEAgLTE3MCw4ICsxNzAsOCBAQCBsYmFfZHVt\n"
+ "cF9yZXMoc3RydWN0IHJlc291cmNlICpyLCBpbnQgZCkKIAlmb3IgKGkgPSBkOyBpIDsgLS1pKSBw\n"
+ "cmludGsoIiAiKTsKIAlwcmludGsoS0VSTl9ERUJVRyAiJXAgWyVseCwlbHhdLyVseFxuIiwgciwK\n"
+ "IAkJKGxvbmcpci0+c3RhcnQsIChsb25nKXItPmVuZCwgci0+ZmxhZ3MpOwotCWxiYV9kdW1wX3Jl\n"
+ "cyhyLT5jaGlsZCwgZCsyKTsKLQlsYmFfZHVtcF9yZXMoci0+c2libGluZywgZCk7CisJbGJhX2R1\n"
+ "bXBfcmVzKHJlc291cmNlX2ZpcnN0X2NoaWxkKCZyLT5jaGlsZCksIGQrMik7CisJbGJhX2R1bXBf\n"
+ "cmVzKHJlc291cmNlX3NpYmxpbmcociksIGQpOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMv\n"
+ "cGNpL2NvbnRyb2xsZXIvdm1kLmMgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL3ZtZC5jCmluZGV4\n"
+ "IDk0MmI2NGZjN2YxZi4uZTNhY2UyMDM0NWM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9jb250\n"
+ "cm9sbGVyL3ZtZC5jCisrKyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvdm1kLmMKQEAgLTU0Miwx\n"
+ "NCArNTQyLDE0IEBAIHN0YXRpYyBzdHJ1Y3QgcGNpX29wcyB2bWRfb3BzID0gewogCiBzdGF0aWMg\n"
+ "dm9pZCB2bWRfYXR0YWNoX3Jlc291cmNlcyhzdHJ1Y3Qgdm1kX2RldiAqdm1kKQogewotCXZtZC0+\n"
+ "ZGV2LT5yZXNvdXJjZVtWTURfTUVNQkFSMV0uY2hpbGQgPSAmdm1kLT5yZXNvdXJjZXNbMV07Ci0J\n"
+ "dm1kLT5kZXYtPnJlc291cmNlW1ZNRF9NRU1CQVIyXS5jaGlsZCA9ICZ2bWQtPnJlc291cmNlc1sy\n"
+ "XTsKKwlsaXN0X2FkZCgmdm1kLT5yZXNvdXJjZXNbMV0uc2libGluZywgJnZtZC0+ZGV2LT5yZXNv\n"
+ "dXJjZVtWTURfTUVNQkFSMV0uY2hpbGQpOworCWxpc3RfYWRkKCZ2bWQtPnJlc291cmNlc1syXS5z\n"
+ "aWJsaW5nLCAmdm1kLT5kZXYtPnJlc291cmNlW1ZNRF9NRU1CQVIyXS5jaGlsZCk7CiB9CiAKIHN0\n"
+ "YXRpYyB2b2lkIHZtZF9kZXRhY2hfcmVzb3VyY2VzKHN0cnVjdCB2bWRfZGV2ICp2bWQpCiB7Ci0J\n"
+ "dm1kLT5kZXYtPnJlc291cmNlW1ZNRF9NRU1CQVIxXS5jaGlsZCA9IE5VTEw7Ci0Jdm1kLT5kZXYt\n"
+ "PnJlc291cmNlW1ZNRF9NRU1CQVIyXS5jaGlsZCA9IE5VTEw7CisJSU5JVF9MSVNUX0hFQUQoJnZt\n"
+ "ZC0+ZGV2LT5yZXNvdXJjZVtWTURfTUVNQkFSMV0uY2hpbGQpOworCUlOSVRfTElTVF9IRUFEKCZ2\n"
+ "bWQtPmRldi0+cmVzb3VyY2VbVk1EX01FTUJBUjJdLmNoaWxkKTsKIH0KIAogLyoKZGlmZiAtLWdp\n"
+ "dCBhL2RyaXZlcnMvcGNpL3Byb2JlLmMgYi9kcml2ZXJzL3BjaS9wcm9iZS5jCmluZGV4IGFjODc2\n"
+ "ZTMyZGU0Yi4uOTYyNGRkMWRmZDQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wcm9iZS5jCisr\n"
+ "KyBiL2RyaXZlcnMvcGNpL3Byb2JlLmMKQEAgLTU5LDYgKzU5LDggQEAgc3RhdGljIHN0cnVjdCBy\n"
+ "ZXNvdXJjZSAqZ2V0X3BjaV9kb21haW5fYnVzbl9yZXMoaW50IGRvbWFpbl9ucikKIAlyLT5yZXMu\n"
+ "c3RhcnQgPSAwOwogCXItPnJlcy5lbmQgPSAweGZmOwogCXItPnJlcy5mbGFncyA9IElPUkVTT1VS\n"
+ "Q0VfQlVTIHwgSU9SRVNPVVJDRV9QQ0lfRklYRUQ7CisJSU5JVF9MSVNUX0hFQUQoJnItPnJlcy5j\n"
+ "aGlsZCk7CisJSU5JVF9MSVNUX0hFQUQoJnItPnJlcy5zaWJsaW5nKTsKIAogCWxpc3RfYWRkX3Rh\n"
+ "aWwoJnItPmxpc3QsICZwY2lfZG9tYWluX2J1c25fcmVzX2xpc3QpOwogCmRpZmYgLS1naXQgYS9k\n"
+ "cml2ZXJzL3BjaS9zZXR1cC1idXMuYyBiL2RyaXZlcnMvcGNpL3NldHVwLWJ1cy5jCmluZGV4IDc5\n"
+ "YjE4MjRlODNiNC4uOGU2ODVhZjg5MzhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9zZXR1cC1i\n"
+ "dXMuYworKysgYi9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYwpAQCAtMjEwNyw3ICsyMTA3LDcgQEAg\n"
+ "aW50IHBjaV9yZWFzc2lnbl9icmlkZ2VfcmVzb3VyY2VzKHN0cnVjdCBwY2lfZGV2ICpicmlkZ2Us\n"
+ "IHVuc2lnbmVkIGxvbmcgdHlwZSkKIAkJCQljb250aW51ZTsKIAogCQkJLyogSWdub3JlIEJBUnMg\n"
+ "d2hpY2ggYXJlIHN0aWxsIGluIHVzZSAqLwotCQkJaWYgKHJlcy0+Y2hpbGQpCisJCQlpZiAoIWxp\n"
+ "c3RfZW1wdHkoJnJlcy0+Y2hpbGQpKQogCQkJCWNvbnRpbnVlOwogCiAJCQlyZXQgPSBhZGRfdG9f\n"
+ "bGlzdCgmc2F2ZWQsIGJyaWRnZSwgcmVzLCAwLCAwKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGlu\n"
+ "dXgvaW9wb3J0LmggYi9pbmNsdWRlL2xpbnV4L2lvcG9ydC5oCmluZGV4IGRmZGNkMGJmZTU0ZS4u\n"
+ "Yjc0NTZhZTg4OWRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lvcG9ydC5oCisrKyBiL2lu\n"
+ "Y2x1ZGUvbGludXgvaW9wb3J0LmgKQEAgLTEyLDYgKzEyLDcgQEAKICNpZm5kZWYgX19BU1NFTUJM\n"
+ "WV9fCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5o\n"
+ "PgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIC8qCiAgKiBSZXNvdXJjZXMgYXJlIHRyZWUtbGlr\n"
+ "ZSwgYWxsb3dpbmcKICAqIG5lc3RpbmcgZXRjLi4KQEAgLTIyLDcgKzIzLDggQEAgc3RydWN0IHJl\n"
+ "c291cmNlIHsKIAljb25zdCBjaGFyICpuYW1lOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5z\n"
+ "aWduZWQgbG9uZyBkZXNjOwotCXN0cnVjdCByZXNvdXJjZSAqcGFyZW50LCAqc2libGluZywgKmNo\n"
+ "aWxkOworCXN0cnVjdCBsaXN0X2hlYWQgY2hpbGQsIHNpYmxpbmc7CisJc3RydWN0IHJlc291cmNl\n"
+ "ICpwYXJlbnQ7CiB9OwogCiAvKgpAQCAtMjE2LDcgKzIxOCw2IEBAIHN0YXRpYyBpbmxpbmUgYm9v\n"
+ "bCByZXNvdXJjZV9jb250YWlucyhzdHJ1Y3QgcmVzb3VyY2UgKnIxLCBzdHJ1Y3QgcmVzb3VyY2Ug\n"
+ "KnIyKQogCXJldHVybiByMS0+c3RhcnQgPD0gcjItPnN0YXJ0ICYmIHIxLT5lbmQgPj0gcjItPmVu\n"
+ "ZDsKIH0KIAotCiAvKiBDb252ZW5pZW5jZSBzaG9ydGhhbmQgd2l0aCBhbGxvY2F0aW9uICovCiAj\n"
+ "ZGVmaW5lIHJlcXVlc3RfcmVnaW9uKHN0YXJ0LG4sbmFtZSkJCV9fcmVxdWVzdF9yZWdpb24oJmlv\n"
+ "cG9ydF9yZXNvdXJjZSwgKHN0YXJ0KSwgKG4pLCAobmFtZSksIDApCiAjZGVmaW5lIHJlcXVlc3Rf\n"
+ "bXV4ZWRfcmVnaW9uKHN0YXJ0LG4sbmFtZSkJX19yZXF1ZXN0X3JlZ2lvbigmaW9wb3J0X3Jlc291\n"
+ "cmNlLCAoc3RhcnQpLCAobiksIChuYW1lKSwgSU9SRVNPVVJDRV9NVVhFRCkKQEAgLTI4Nyw2ICsy\n"
+ "ODgsMTggQEAgc3RhdGljIGlubGluZSBib29sIHJlc291cmNlX292ZXJsYXBzKHN0cnVjdCByZXNv\n"
+ "dXJjZSAqcjEsIHN0cnVjdCByZXNvdXJjZSAqcjIpCiAgICAgICAgcmV0dXJuIChyMS0+c3RhcnQg\n"
+ "PD0gcjItPmVuZCAmJiByMS0+ZW5kID49IHIyLT5zdGFydCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUg\n"
+ "c3RydWN0IHJlc291cmNlICpyZXNvdXJjZV9zaWJsaW5nKHN0cnVjdCByZXNvdXJjZSAqcmVzKQor\n"
+ "eworCWlmIChyZXMtPnBhcmVudCAmJiAhbGlzdF9pc19sYXN0KCZyZXMtPnNpYmxpbmcsICZyZXMt\n"
+ "PnBhcmVudC0+Y2hpbGQpKQorCQlyZXR1cm4gbGlzdF9uZXh0X2VudHJ5KHJlcywgc2libGluZyk7\n"
+ "CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJlc291cmNlICpyZXNv\n"
+ "dXJjZV9maXJzdF9jaGlsZChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCXJldHVybiBsaXN0\n"
+ "X2ZpcnN0X2VudHJ5X29yX251bGwoaGVhZCwgc3RydWN0IHJlc291cmNlLCBzaWJsaW5nKTsKK30K\n"
+ "KwogCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAjZW5kaWYJLyogX0xJTlVYX0lPUE9SVF9I\n"
+ "ICovCmRpZmYgLS1naXQgYS9rZXJuZWwvcmVzb3VyY2UuYyBiL2tlcm5lbC9yZXNvdXJjZS5jCmlu\n"
+ "ZGV4IDgxY2NkMTljMWQ5Zi4uYzk2ZTU4ZDNkMmY4IDEwMDY0NAotLS0gYS9rZXJuZWwvcmVzb3Vy\n"
+ "Y2UuYworKysgYi9rZXJuZWwvcmVzb3VyY2UuYwpAQCAtMzEsNiArMzEsOCBAQCBzdHJ1Y3QgcmVz\n"
+ "b3VyY2UgaW9wb3J0X3Jlc291cmNlID0gewogCS5zdGFydAk9IDAsCiAJLmVuZAk9IElPX1NQQUNF\n"
+ "X0xJTUlULAogCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCisJLnNpYmxpbmcgPSBMSVNUX0hFQURf\n"
+ "SU5JVChpb3BvcnRfcmVzb3VyY2Uuc2libGluZyksCisJLmNoaWxkICA9IExJU1RfSEVBRF9JTklU\n"
+ "KGlvcG9ydF9yZXNvdXJjZS5jaGlsZCksCiB9OwogRVhQT1JUX1NZTUJPTChpb3BvcnRfcmVzb3Vy\n"
+ "Y2UpOwogCkBAIC0zOSw2ICs0MSw4IEBAIHN0cnVjdCByZXNvdXJjZSBpb21lbV9yZXNvdXJjZSA9\n"
+ "IHsKIAkuc3RhcnQJPSAwLAogCS5lbmQJPSAtMSwKIAkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwK\n"
+ "Kwkuc2libGluZyA9IExJU1RfSEVBRF9JTklUKGlvbWVtX3Jlc291cmNlLnNpYmxpbmcpLAorCS5j\n"
+ "aGlsZCAgPSBMSVNUX0hFQURfSU5JVChpb21lbV9yZXNvdXJjZS5jaGlsZCksCiB9OwogRVhQT1JU\n"
+ "X1NZTUJPTChpb21lbV9yZXNvdXJjZSk7CiAKQEAgLTU3LDIwICs2MSwyMCBAQCBzdGF0aWMgREVG\n"
+ "SU5FX1JXTE9DSyhyZXNvdXJjZV9sb2NrKTsKICAqIGJ5IGJvb3QgbWVtIGFmdGVyIHRoZSBzeXN0\n"
+ "ZW0gaXMgdXAuIFNvIGZvciByZXVzaW5nIHRoZSByZXNvdXJjZSBlbnRyeQogICogd2UgbmVlZCB0\n"
+ "byByZW1lbWJlciB0aGUgcmVzb3VyY2UuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgKmJv\n"
+ "b3RtZW1fcmVzb3VyY2VfZnJlZTsKK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIGJvb3RtZW1fcmVz\n"
+ "b3VyY2VfZnJlZSA9IExJU1RfSEVBRF9JTklUKGJvb3RtZW1fcmVzb3VyY2VfZnJlZSk7CiBzdGF0\n"
+ "aWMgREVGSU5FX1NQSU5MT0NLKGJvb3RtZW1fcmVzb3VyY2VfbG9jayk7CiAKIHN0YXRpYyBzdHJ1\n"
+ "Y3QgcmVzb3VyY2UgKm5leHRfcmVzb3VyY2Uoc3RydWN0IHJlc291cmNlICpwLCBib29sIHNpYmxp\n"
+ "bmdfb25seSkKIHsKIAkvKiBDYWxsZXIgd2FudHMgdG8gdHJhdmVyc2UgdGhyb3VnaCBzaWJsaW5n\n"
+ "cyBvbmx5ICovCiAJaWYgKHNpYmxpbmdfb25seSkKLQkJcmV0dXJuIHAtPnNpYmxpbmc7CisJCXJl\n"
+ "dHVybiByZXNvdXJjZV9zaWJsaW5nKHApOwogCi0JaWYgKHAtPmNoaWxkKQotCQlyZXR1cm4gcC0+\n"
+ "Y2hpbGQ7Ci0Jd2hpbGUgKCFwLT5zaWJsaW5nICYmIHAtPnBhcmVudCkKKwlpZiAoIWxpc3RfZW1w\n"
+ "dHkoJnAtPmNoaWxkKSkKKwkJcmV0dXJuIHJlc291cmNlX2ZpcnN0X2NoaWxkKCZwLT5jaGlsZCk7\n"
+ "CisJd2hpbGUgKCFyZXNvdXJjZV9zaWJsaW5nKHApICYmIHAtPnBhcmVudCkKIAkJcCA9IHAtPnBh\n"
+ "cmVudDsKLQlyZXR1cm4gcC0+c2libGluZzsKKwlyZXR1cm4gcmVzb3VyY2Vfc2libGluZyhwKTsK\n"
+ "IH0KIAogc3RhdGljIHZvaWQgKnJfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYsIGxv\n"
+ "ZmZfdCAqcG9zKQpAQCAtOTAsNyArOTQsNyBAQCBzdGF0aWMgdm9pZCAqcl9zdGFydChzdHJ1Y3Qg\n"
+ "c2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQogCXN0cnVjdCByZXNvdXJjZSAqcCA9IFBERV9EQVRB\n"
+ "KGZpbGVfaW5vZGUobS0+ZmlsZSkpOwogCWxvZmZfdCBsID0gMDsKIAlyZWFkX2xvY2soJnJlc291\n"
+ "cmNlX2xvY2spOwotCWZvciAocCA9IHAtPmNoaWxkOyBwICYmIGwgPCAqcG9zOyBwID0gcl9uZXh0\n"
+ "KG0sIHAsICZsKSkKKwlmb3IgKHAgPSByZXNvdXJjZV9maXJzdF9jaGlsZCgmcC0+Y2hpbGQpOyBw\n"
+ "ICYmIGwgPCAqcG9zOyBwID0gcl9uZXh0KG0sIHAsICZsKSkKIAkJOwogCXJldHVybiBwOwogfQpA\n"
+ "QCAtMTUzLDggKzE1Nyw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfcmVzb3VyY2Uoc3RydWN0IHJlc291\n"
+ "cmNlICpyZXMpCiAKIAlpZiAoIVBhZ2VTbGFiKHZpcnRfdG9faGVhZF9wYWdlKHJlcykpKSB7CiAJ\n"
+ "CXNwaW5fbG9jaygmYm9vdG1lbV9yZXNvdXJjZV9sb2NrKTsKLQkJcmVzLT5zaWJsaW5nID0gYm9v\n"
+ "dG1lbV9yZXNvdXJjZV9mcmVlOwotCQlib290bWVtX3Jlc291cmNlX2ZyZWUgPSByZXM7CisJCWxp\n"
+ "c3RfYWRkKCZyZXMtPnNpYmxpbmcsICZib290bWVtX3Jlc291cmNlX2ZyZWUpOwogCQlzcGluX3Vu\n"
+ "bG9jaygmYm9vdG1lbV9yZXNvdXJjZV9sb2NrKTsKIAl9IGVsc2UgewogCQlrZnJlZShyZXMpOwpA\n"
+ "QCAtMTY2LDEwICsxNjksOSBAQCBzdGF0aWMgc3RydWN0IHJlc291cmNlICphbGxvY19yZXNvdXJj\n"
+ "ZShnZnBfdCBmbGFncykKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IE5VTEw7CiAKIAlzcGluX2xv\n"
+ "Y2soJmJvb3RtZW1fcmVzb3VyY2VfbG9jayk7Ci0JaWYgKGJvb3RtZW1fcmVzb3VyY2VfZnJlZSkg\n"
+ "ewotCQlyZXMgPSBib290bWVtX3Jlc291cmNlX2ZyZWU7Ci0JCWJvb3RtZW1fcmVzb3VyY2VfZnJl\n"
+ "ZSA9IHJlcy0+c2libGluZzsKLQl9CisJcmVzID0gcmVzb3VyY2VfZmlyc3RfY2hpbGQoJmJvb3Rt\n"
+ "ZW1fcmVzb3VyY2VfZnJlZSk7CisJaWYgKHJlcykKKwkJbGlzdF9kZWwoJnJlcy0+c2libGluZyk7\n"
+ "CiAJc3Bpbl91bmxvY2soJmJvb3RtZW1fcmVzb3VyY2VfbG9jayk7CiAKIAlpZiAocmVzKQpAQCAt\n"
+ "MTc3LDYgKzE3OSw4IEBAIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgKmFsbG9jX3Jlc291cmNlKGdm\n"
+ "cF90IGZsYWdzKQogCWVsc2UKIAkJcmVzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJlc291cmNl\n"
+ "KSwgZmxhZ3MpOwogCisJSU5JVF9MSVNUX0hFQUQoJnJlcy0+Y2hpbGQpOworCUlOSVRfTElTVF9I\n"
+ "RUFEKCZyZXMtPnNpYmxpbmcpOwogCXJldHVybiByZXM7CiB9CiAKQEAgLTE4NSw3ICsxODksNyBA\n"
+ "QCBzdGF0aWMgc3RydWN0IHJlc291cmNlICogX19yZXF1ZXN0X3Jlc291cmNlKHN0cnVjdCByZXNv\n"
+ "dXJjZSAqcm9vdCwgc3RydWN0IHJlc291cgogewogCXJlc291cmNlX3NpemVfdCBzdGFydCA9IG5l\n"
+ "dy0+c3RhcnQ7CiAJcmVzb3VyY2Vfc2l6ZV90IGVuZCA9IG5ldy0+ZW5kOwotCXN0cnVjdCByZXNv\n"
+ "dXJjZSAqdG1wLCAqKnA7CisJc3RydWN0IHJlc291cmNlICp0bXA7CiAKIAlpZiAoZW5kIDwgc3Rh\n"
+ "cnQpCiAJCXJldHVybiByb290OwpAQCAtMTkzLDY0ICsxOTcsNjIgQEAgc3RhdGljIHN0cnVjdCBy\n"
+ "ZXNvdXJjZSAqIF9fcmVxdWVzdF9yZXNvdXJjZShzdHJ1Y3QgcmVzb3VyY2UgKnJvb3QsIHN0cnVj\n"
+ "dCByZXNvdXIKIAkJcmV0dXJuIHJvb3Q7CiAJaWYgKGVuZCA+IHJvb3QtPmVuZCkKIAkJcmV0dXJu\n"
+ "IHJvb3Q7Ci0JcCA9ICZyb290LT5jaGlsZDsKLQlmb3IgKDs7KSB7Ci0JCXRtcCA9ICpwOwotCQlp\n"
+ "ZiAoIXRtcCB8fCB0bXAtPnN0YXJ0ID4gZW5kKSB7Ci0JCQluZXctPnNpYmxpbmcgPSB0bXA7Ci0J\n"
+ "CQkqcCA9IG5ldzsKKworCWlmIChsaXN0X2VtcHR5KCZyb290LT5jaGlsZCkpIHsKKwkJbGlzdF9h\n"
+ "ZGQoJm5ldy0+c2libGluZywgJnJvb3QtPmNoaWxkKTsKKwkJbmV3LT5wYXJlbnQgPSByb290Owor\n"
+ "CQlJTklUX0xJU1RfSEVBRCgmbmV3LT5jaGlsZCk7CisJCXJldHVybiBOVUxMOworCX0KKworCWxp\n"
+ "c3RfZm9yX2VhY2hfZW50cnkodG1wLCAmcm9vdC0+Y2hpbGQsIHNpYmxpbmcpIHsKKwkJaWYgKHRt\n"
+ "cC0+c3RhcnQgPiBlbmQpIHsKKwkJCWxpc3RfYWRkKCZuZXctPnNpYmxpbmcsIHRtcC0+c2libGlu\n"
+ "Zy5wcmV2KTsKIAkJCW5ldy0+cGFyZW50ID0gcm9vdDsKKwkJCUlOSVRfTElTVF9IRUFEKCZuZXct\n"
+ "PmNoaWxkKTsKIAkJCXJldHVybiBOVUxMOwogCQl9Ci0JCXAgPSAmdG1wLT5zaWJsaW5nOwogCQlp\n"
+ "ZiAodG1wLT5lbmQgPCBzdGFydCkKIAkJCWNvbnRpbnVlOwogCQlyZXR1cm4gdG1wOwogCX0KKwor\n"
+ "CWxpc3RfYWRkX3RhaWwoJm5ldy0+c2libGluZywgJnJvb3QtPmNoaWxkKTsKKwluZXctPnBhcmVu\n"
+ "dCA9IHJvb3Q7CisJSU5JVF9MSVNUX0hFQUQoJm5ldy0+Y2hpbGQpOworCXJldHVybiBOVUxMOwog\n"
+ "fQogCiBzdGF0aWMgaW50IF9fcmVsZWFzZV9yZXNvdXJjZShzdHJ1Y3QgcmVzb3VyY2UgKm9sZCwg\n"
+ "Ym9vbCByZWxlYXNlX2NoaWxkKQogewotCXN0cnVjdCByZXNvdXJjZSAqdG1wLCAqKnAsICpjaGQ7\n"
+ "CisJc3RydWN0IHJlc291cmNlICp0bXAsICpuZXh0LCAqY2hkOwogCi0JcCA9ICZvbGQtPnBhcmVu\n"
+ "dC0+Y2hpbGQ7Ci0JZm9yICg7OykgewotCQl0bXAgPSAqcDsKLQkJaWYgKCF0bXApCi0JCQlicmVh\n"
+ "azsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodG1wLCBuZXh0LCAmb2xkLT5wYXJlbnQtPmNo\n"
+ "aWxkLCBzaWJsaW5nKSB7CiAJCWlmICh0bXAgPT0gb2xkKSB7Ci0JCQlpZiAocmVsZWFzZV9jaGls\n"
+ "ZCB8fCAhKHRtcC0+Y2hpbGQpKSB7Ci0JCQkJKnAgPSB0bXAtPnNpYmxpbmc7CisJCQlpZiAocmVs\n"
+ "ZWFzZV9jaGlsZCB8fCBsaXN0X2VtcHR5KCZ0bXAtPmNoaWxkKSkgeworCQkJCWxpc3RfZGVsKCZ0\n"
+ "bXAtPnNpYmxpbmcpOwogCQkJfSBlbHNlIHsKLQkJCQlmb3IgKGNoZCA9IHRtcC0+Y2hpbGQ7OyBj\n"
+ "aGQgPSBjaGQtPnNpYmxpbmcpIHsKKwkJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoZCwgJnRtcC0+\n"
+ "Y2hpbGQsIHNpYmxpbmcpCiAJCQkJCWNoZC0+cGFyZW50ID0gdG1wLT5wYXJlbnQ7Ci0JCQkJCWlm\n"
+ "ICghKGNoZC0+c2libGluZykpCi0JCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJKnAgPSB0bXAtPmNo\n"
+ "aWxkOwotCQkJCWNoZC0+c2libGluZyA9IHRtcC0+c2libGluZzsKKwkJCQlsaXN0X3NwbGljZSgm\n"
+ "dG1wLT5jaGlsZCwgdG1wLT5zaWJsaW5nLnByZXYpOworCQkJCWxpc3RfZGVsKCZ0bXAtPnNpYmxp\n"
+ "bmcpOwogCQkJfQorCiAJCQlvbGQtPnBhcmVudCA9IE5VTEw7CiAJCQlyZXR1cm4gMDsKIAkJfQot\n"
+ "CQlwID0gJnRtcC0+c2libGluZzsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIHN0YXRpYyB2\n"
+ "b2lkIF9fcmVsZWFzZV9jaGlsZF9yZXNvdXJjZXMoc3RydWN0IHJlc291cmNlICpyKQogewotCXN0\n"
+ "cnVjdCByZXNvdXJjZSAqdG1wLCAqcDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnRtcCwgKm5leHQ7CiAJ\n"
+ "cmVzb3VyY2Vfc2l6ZV90IHNpemU7CiAKLQlwID0gci0+Y2hpbGQ7Ci0Jci0+Y2hpbGQgPSBOVUxM\n"
+ "OwotCXdoaWxlIChwKSB7Ci0JCXRtcCA9IHA7Ci0JCXAgPSBwLT5zaWJsaW5nOwotCisJbGlzdF9m\n"
+ "b3JfZWFjaF9lbnRyeV9zYWZlKHRtcCwgbmV4dCwgJnItPmNoaWxkLCBzaWJsaW5nKSB7CiAJCXRt\n"
+ "cC0+cGFyZW50ID0gTlVMTDsKLQkJdG1wLT5zaWJsaW5nID0gTlVMTDsKKwkJbGlzdF9kZWxfaW5p\n"
+ "dCgmdG1wLT5zaWJsaW5nKTsKIAkJX19yZWxlYXNlX2NoaWxkX3Jlc291cmNlcyh0bXApOwogCiAJ\n"
+ "CXByaW50ayhLRVJOX0RFQlVHICJyZWxlYXNlIGNoaWxkIHJlc291cmNlICVwUlxuIiwgdG1wKTsK\n"
+ "QEAgLTI1OSw2ICsyNjEsOCBAQCBzdGF0aWMgdm9pZCBfX3JlbGVhc2VfY2hpbGRfcmVzb3VyY2Vz\n"
+ "KHN0cnVjdCByZXNvdXJjZSAqcikKIAkJdG1wLT5zdGFydCA9IDA7CiAJCXRtcC0+ZW5kID0gc2l6\n"
+ "ZSAtIDE7CiAJfQorCisJSU5JVF9MSVNUX0hFQUQoJnRtcC0+Y2hpbGQpOwogfQogCiB2b2lkIHJl\n"
+ "bGVhc2VfY2hpbGRfcmVzb3VyY2VzKHN0cnVjdCByZXNvdXJjZSAqcikKQEAgLTM0Myw3ICszNDcs\n"
+ "OCBAQCBzdGF0aWMgaW50IGZpbmRfbmV4dF9pb21lbV9yZXMoc3RydWN0IHJlc291cmNlICpyZXMs\n"
+ "IHVuc2lnbmVkIGxvbmcgZGVzYywKIAogCXJlYWRfbG9jaygmcmVzb3VyY2VfbG9jayk7CiAKLQlm\n"
+ "b3IgKHAgPSBpb21lbV9yZXNvdXJjZS5jaGlsZDsgcDsgcCA9IG5leHRfcmVzb3VyY2UocCwgc2li\n"
+ "bGluZ19vbmx5KSkgeworCWZvciAocCA9IHJlc291cmNlX2ZpcnN0X2NoaWxkKCZpb21lbV9yZXNv\n"
+ "dXJjZS5jaGlsZCk7IHA7CisJCQlwID0gbmV4dF9yZXNvdXJjZShwLCBzaWJsaW5nX29ubHkpKSB7\n"
+ "CiAJCWlmICgocC0+ZmxhZ3MgJiByZXMtPmZsYWdzKSAhPSByZXMtPmZsYWdzKQogCQkJY29udGlu\n"
+ "dWU7CiAJCWlmICgoZGVzYyAhPSBJT1JFU19ERVNDX05PTkUpICYmIChkZXNjICE9IHAtPmRlc2Mp\n"
+ "KQpAQCAtNTMyLDcgKzUzNyw3IEBAIGludCByZWdpb25faW50ZXJzZWN0cyhyZXNvdXJjZV9zaXpl\n"
+ "X3Qgc3RhcnQsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzLAogCXN0cnVjdCByZXNv\n"
+ "dXJjZSAqcDsKIAogCXJlYWRfbG9jaygmcmVzb3VyY2VfbG9jayk7Ci0JZm9yIChwID0gaW9tZW1f\n"
+ "cmVzb3VyY2UuY2hpbGQ7IHAgOyBwID0gcC0+c2libGluZykgeworCWxpc3RfZm9yX2VhY2hfZW50\n"
+ "cnkocCwgJmlvbWVtX3Jlc291cmNlLmNoaWxkLCBzaWJsaW5nKSB7CiAJCWJvb2wgaXNfdHlwZSA9\n"
+ "ICgoKHAtPmZsYWdzICYgZmxhZ3MpID09IGZsYWdzKSAmJgogCQkJCSgoZGVzYyA9PSBJT1JFU19E\n"
+ "RVNDX05PTkUpIHx8CiAJCQkJIChkZXNjID09IHAtPmRlc2MpKSk7CkBAIC01ODYsNyArNTkxLDcg\n"
+ "QEAgc3RhdGljIGludCBfX2ZpbmRfcmVzb3VyY2Uoc3RydWN0IHJlc291cmNlICpyb290LCBzdHJ1\n"
+ "Y3QgcmVzb3VyY2UgKm9sZCwKIAkJCSByZXNvdXJjZV9zaXplX3QgIHNpemUsCiAJCQkgc3RydWN0\n"
+ "IHJlc291cmNlX2NvbnN0cmFpbnQgKmNvbnN0cmFpbnQpCiB7Ci0Jc3RydWN0IHJlc291cmNlICp0\n"
+ "aGlzID0gcm9vdC0+Y2hpbGQ7CisJc3RydWN0IHJlc291cmNlICp0aGlzID0gcmVzb3VyY2VfZmly\n"
+ "c3RfY2hpbGQoJnJvb3QtPmNoaWxkKTsKIAlzdHJ1Y3QgcmVzb3VyY2UgdG1wID0gKm5ldywgYXZh\n"
+ "aWwsIGFsbG9jOwogCiAJdG1wLnN0YXJ0ID0gcm9vdC0+c3RhcnQ7CkBAIC01OTYsNyArNjAxLDcg\n"
+ "QEAgc3RhdGljIGludCBfX2ZpbmRfcmVzb3VyY2Uoc3RydWN0IHJlc291cmNlICpyb290LCBzdHJ1\n"
+ "Y3QgcmVzb3VyY2UgKm9sZCwKIAkgKi8KIAlpZiAodGhpcyAmJiB0aGlzLT5zdGFydCA9PSByb290\n"
+ "LT5zdGFydCkgewogCQl0bXAuc3RhcnQgPSAodGhpcyA9PSBvbGQpID8gb2xkLT5zdGFydCA6IHRo\n"
+ "aXMtPmVuZCArIDE7Ci0JCXRoaXMgPSB0aGlzLT5zaWJsaW5nOworCQl0aGlzID0gcmVzb3VyY2Vf\n"
+ "c2libGluZyh0aGlzKTsKIAl9CiAJZm9yKDs7KSB7CiAJCWlmICh0aGlzKQpAQCAtNjMyLDcgKzYz\n"
+ "Nyw3IEBAIG5leHQ6CQlpZiAoIXRoaXMgfHwgdGhpcy0+ZW5kID09IHJvb3QtPmVuZCkKIAogCQlp\n"
+ "ZiAodGhpcyAhPSBvbGQpCiAJCQl0bXAuc3RhcnQgPSB0aGlzLT5lbmQgKyAxOwotCQl0aGlzID0g\n"
+ "dGhpcy0+c2libGluZzsKKwkJdGhpcyA9IHJlc291cmNlX3NpYmxpbmcodGhpcyk7CiAJfQogCXJl\n"
+ "dHVybiAtRUJVU1k7CiB9CkBAIC02NzYsNyArNjgxLDcgQEAgc3RhdGljIGludCByZWFsbG9jYXRl\n"
+ "X3Jlc291cmNlKHN0cnVjdCByZXNvdXJjZSAqcm9vdCwgc3RydWN0IHJlc291cmNlICpvbGQsCiAJ\n"
+ "CWdvdG8gb3V0OwogCX0KIAotCWlmIChvbGQtPmNoaWxkKSB7CisJaWYgKCFsaXN0X2VtcHR5KCZv\n"
+ "bGQtPmNoaWxkKSkgewogCQllcnIgPSAtRUJVU1k7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTc1Nyw3\n"
+ "ICs3NjIsNyBAQCBzdHJ1Y3QgcmVzb3VyY2UgKmxvb2t1cF9yZXNvdXJjZShzdHJ1Y3QgcmVzb3Vy\n"
+ "Y2UgKnJvb3QsIHJlc291cmNlX3NpemVfdCBzdGFydCkKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsK\n"
+ "IAogCXJlYWRfbG9jaygmcmVzb3VyY2VfbG9jayk7Ci0JZm9yIChyZXMgPSByb290LT5jaGlsZDsg\n"
+ "cmVzOyByZXMgPSByZXMtPnNpYmxpbmcpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcywgJnJv\n"
+ "b3QtPmNoaWxkLCBzaWJsaW5nKSB7CiAJCWlmIChyZXMtPnN0YXJ0ID09IHN0YXJ0KQogCQkJYnJl\n"
+ "YWs7CiAJfQpAQCAtNzkwLDMyICs3OTUsMjcgQEAgc3RhdGljIHN0cnVjdCByZXNvdXJjZSAqIF9f\n"
+ "aW5zZXJ0X3Jlc291cmNlKHN0cnVjdCByZXNvdXJjZSAqcGFyZW50LCBzdHJ1Y3QgcmVzb3UKIAkJ\n"
+ "CWJyZWFrOwogCX0KIAotCWZvciAobmV4dCA9IGZpcnN0OyA7IG5leHQgPSBuZXh0LT5zaWJsaW5n\n"
+ "KSB7CisJZm9yIChuZXh0ID0gZmlyc3Q7IDsgbmV4dCA9IHJlc291cmNlX3NpYmxpbmcobmV4dCkp\n"
+ "IHsKIAkJLyogUGFydGlhbCBvdmVybGFwPyBCYWQsIGFuZCB1bmZpeGFibGUgKi8KIAkJaWYgKG5l\n"
+ "eHQtPnN0YXJ0IDwgbmV3LT5zdGFydCB8fCBuZXh0LT5lbmQgPiBuZXctPmVuZCkKIAkJCXJldHVy\n"
+ "biBuZXh0OwotCQlpZiAoIW5leHQtPnNpYmxpbmcpCisJCWlmICghcmVzb3VyY2Vfc2libGluZyhu\n"
+ "ZXh0KSkKIAkJCWJyZWFrOwotCQlpZiAobmV4dC0+c2libGluZy0+c3RhcnQgPiBuZXctPmVuZCkK\n"
+ "KwkJaWYgKHJlc291cmNlX3NpYmxpbmcobmV4dCktPnN0YXJ0ID4gbmV3LT5lbmQpCiAJCQlicmVh\n"
+ "azsKIAl9Ci0KIAluZXctPnBhcmVudCA9IHBhcmVudDsKLQluZXctPnNpYmxpbmcgPSBuZXh0LT5z\n"
+ "aWJsaW5nOwotCW5ldy0+Y2hpbGQgPSBmaXJzdDsKKwlsaXN0X2FkZCgmbmV3LT5zaWJsaW5nLCAm\n"
+ "bmV4dC0+c2libGluZyk7CisJSU5JVF9MSVNUX0hFQUQoJm5ldy0+Y2hpbGQpOwogCi0JbmV4dC0+\n"
+ "c2libGluZyA9IE5VTEw7Ci0JZm9yIChuZXh0ID0gZmlyc3Q7IG5leHQ7IG5leHQgPSBuZXh0LT5z\n"
+ "aWJsaW5nKQorCS8qCisJICogRnJvbSBmaXJzdCB0byBuZXh0LCB0aGV5IGFsbCBmYWxsIGludG8g\n"
+ "bmV3J3MgcmVnaW9uLCBzbyBjaGFuZ2UgdGhlbQorCSAqIGFzIG5ldydzIGNoaWxkcmVuLgorCSAq\n"
+ "LworCWxpc3RfY3V0X3Bvc2l0aW9uKCZuZXctPmNoaWxkLCBmaXJzdC0+c2libGluZy5wcmV2LCAm\n"
+ "bmV4dC0+c2libGluZyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShuZXh0LCAmbmV3LT5jaGlsZCwg\n"
+ "c2libGluZykKIAkJbmV4dC0+cGFyZW50ID0gbmV3OwogCi0JaWYgKHBhcmVudC0+Y2hpbGQgPT0g\n"
+ "Zmlyc3QpIHsKLQkJcGFyZW50LT5jaGlsZCA9IG5ldzsKLQl9IGVsc2UgewotCQluZXh0ID0gcGFy\n"
+ "ZW50LT5jaGlsZDsKLQkJd2hpbGUgKG5leHQtPnNpYmxpbmcgIT0gZmlyc3QpCi0JCQluZXh0ID0g\n"
+ "bmV4dC0+c2libGluZzsKLQkJbmV4dC0+c2libGluZyA9IG5ldzsKLQl9CiAJcmV0dXJuIE5VTEw7\n"
+ "CiB9CiAKQEAgLTkzNywxOSArOTM3LDE3IEBAIHN0YXRpYyBpbnQgX19hZGp1c3RfcmVzb3VyY2Uo\n"
+ "c3RydWN0IHJlc291cmNlICpyZXMsIHJlc291cmNlX3NpemVfdCBzdGFydCwKIAlpZiAoKHN0YXJ0\n"
+ "IDwgcGFyZW50LT5zdGFydCkgfHwgKGVuZCA+IHBhcmVudC0+ZW5kKSkKIAkJZ290byBvdXQ7CiAK\n"
+ "LQlpZiAocmVzLT5zaWJsaW5nICYmIChyZXMtPnNpYmxpbmctPnN0YXJ0IDw9IGVuZCkpCisJaWYg\n"
+ "KHJlc291cmNlX3NpYmxpbmcocmVzKSAmJiAocmVzb3VyY2Vfc2libGluZyhyZXMpLT5zdGFydCA8\n"
+ "PSBlbmQpKQogCQlnb3RvIG91dDsKIAotCXRtcCA9IHBhcmVudC0+Y2hpbGQ7Ci0JaWYgKHRtcCAh\n"
+ "PSByZXMpIHsKLQkJd2hpbGUgKHRtcC0+c2libGluZyAhPSByZXMpCi0JCQl0bXAgPSB0bXAtPnNp\n"
+ "Ymxpbmc7CisJaWYgKHJlcy0+c2libGluZy5wcmV2ICE9ICZwYXJlbnQtPmNoaWxkKSB7CisJCXRt\n"
+ "cCA9IGxpc3RfcHJldl9lbnRyeShyZXMsIHNpYmxpbmcpOwogCQlpZiAoc3RhcnQgPD0gdG1wLT5l\n"
+ "bmQpCiAJCQlnb3RvIG91dDsKIAl9CiAKIHNraXA6Ci0JZm9yICh0bXAgPSByZXMtPmNoaWxkOyB0\n"
+ "bXA7IHRtcCA9IHRtcC0+c2libGluZykKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcCwgJnJlcy0+\n"
+ "Y2hpbGQsIHNpYmxpbmcpCiAJCWlmICgodG1wLT5zdGFydCA8IHN0YXJ0KSB8fCAodG1wLT5lbmQg\n"
+ "PiBlbmQpKQogCQkJZ290byBvdXQ7CiAKQEAgLTk5NiwyNyArOTk0LDMwIEBAIEVYUE9SVF9TWU1C\n"
+ "T0woYWRqdXN0X3Jlc291cmNlKTsKICAqLwogaW50IHJlcGFyZW50X3Jlc291cmNlcyhzdHJ1Y3Qg\n"
+ "cmVzb3VyY2UgKnBhcmVudCwgc3RydWN0IHJlc291cmNlICpyZXMpCiB7Ci0Jc3RydWN0IHJlc291\n"
+ "cmNlICpwLCAqKnBwOwotCXN0cnVjdCByZXNvdXJjZSAqKmZpcnN0cHAgPSBOVUxMOworCXN0cnVj\n"
+ "dCByZXNvdXJjZSAqcCwgKmZpcnN0ID0gTlVMTDsKIAotCWZvciAocHAgPSAmcGFyZW50LT5jaGls\n"
+ "ZDsgKHAgPSAqcHApICE9IE5VTEw7IHBwID0gJnAtPnNpYmxpbmcpIHsKKwlsaXN0X2Zvcl9lYWNo\n"
+ "X2VudHJ5KHAsICZwYXJlbnQtPmNoaWxkLCBzaWJsaW5nKSB7CiAJCWlmIChwLT5lbmQgPCByZXMt\n"
+ "PnN0YXJ0KQogCQkJY29udGludWU7CiAJCWlmIChyZXMtPmVuZCA8IHAtPnN0YXJ0KQogCQkJYnJl\n"
+ "YWs7CiAJCWlmIChwLT5zdGFydCA8IHJlcy0+c3RhcnQgfHwgcC0+ZW5kID4gcmVzLT5lbmQpCiAJ\n"
+ "CQlyZXR1cm4gLUVOT1RTVVBQOwkvKiBub3QgY29tcGxldGVseSBjb250YWluZWQgKi8KLQkJaWYg\n"
+ "KGZpcnN0cHAgPT0gTlVMTCkKLQkJCWZpcnN0cHAgPSBwcDsKKwkJaWYgKGZpcnN0ID09IE5VTEwp\n"
+ "CisJCQlmaXJzdCA9IHA7CiAJfQotCWlmIChmaXJzdHBwID09IE5VTEwpCisJaWYgKGZpcnN0ID09\n"
+ "IE5VTEwpCiAJCXJldHVybiAtRUNBTkNFTEVEOyAvKiBkaWRuJ3QgZmluZCBhbnkgY29uZmxpY3Rp\n"
+ "bmcgZW50cmllcz8gKi8KIAlyZXMtPnBhcmVudCA9IHBhcmVudDsKLQlyZXMtPmNoaWxkID0gKmZp\n"
+ "cnN0cHA7Ci0JcmVzLT5zaWJsaW5nID0gKnBwOwotCSpmaXJzdHBwID0gcmVzOwotCSpwcCA9IE5V\n"
+ "TEw7Ci0JZm9yIChwID0gcmVzLT5jaGlsZDsgcCAhPSBOVUxMOyBwID0gcC0+c2libGluZykgewor\n"
+ "CWxpc3RfYWRkKCZyZXMtPnNpYmxpbmcsIHAtPnNpYmxpbmcucHJldik7CisJSU5JVF9MSVNUX0hF\n"
+ "QUQoJnJlcy0+Y2hpbGQpOworCisJLyoKKwkgKiBGcm9tIGZpcnN0IHRvIHAncyBwcmV2aW91cyBz\n"
+ "aWJsaW5nLCB0aGV5IGFsbCBmYWxsIGludG8KKwkgKiByZXMncyByZWdpb24sIGNoYW5nZSB0aGVt\n"
+ "IGFzIHJlcydzIGNoaWxkcmVuLgorCSAqLworCWxpc3RfY3V0X3Bvc2l0aW9uKCZyZXMtPmNoaWxk\n"
+ "LCBmaXJzdC0+c2libGluZy5wcmV2LCByZXMtPnNpYmxpbmcucHJldik7CisJbGlzdF9mb3JfZWFj\n"
+ "aF9lbnRyeShwLCAmcmVzLT5jaGlsZCwgc2libGluZykgewogCQlwLT5wYXJlbnQgPSByZXM7CiAJ\n"
+ "CXByX2RlYnVnKCJQQ0k6IFJlcGFyZW50ZWQgJXMgJXBSIHVuZGVyICVzXG4iLAogCQkJIHAtPm5h\n"
+ "bWUsIHAsIHJlcy0+bmFtZSk7CkBAIC0xMjE2LDM0ICsxMjE3LDMyIEBAIEVYUE9SVF9TWU1CT0wo\n"
+ "X19yZXF1ZXN0X3JlZ2lvbik7CiB2b2lkIF9fcmVsZWFzZV9yZWdpb24oc3RydWN0IHJlc291cmNl\n"
+ "ICpwYXJlbnQsIHJlc291cmNlX3NpemVfdCBzdGFydCwKIAkJCXJlc291cmNlX3NpemVfdCBuKQog\n"
+ "ewotCXN0cnVjdCByZXNvdXJjZSAqKnA7CisJc3RydWN0IHJlc291cmNlICpyZXM7CiAJcmVzb3Vy\n"
+ "Y2Vfc2l6ZV90IGVuZDsKIAotCXAgPSAmcGFyZW50LT5jaGlsZDsKKwlyZXMgPSByZXNvdXJjZV9m\n"
+ "aXJzdF9jaGlsZCgmcGFyZW50LT5jaGlsZCk7CiAJZW5kID0gc3RhcnQgKyBuIC0gMTsKIAogCXdy\n"
+ "aXRlX2xvY2soJnJlc291cmNlX2xvY2spOwogCiAJZm9yICg7OykgewotCQlzdHJ1Y3QgcmVzb3Vy\n"
+ "Y2UgKnJlcyA9ICpwOwotCiAJCWlmICghcmVzKQogCQkJYnJlYWs7CiAJCWlmIChyZXMtPnN0YXJ0\n"
+ "IDw9IHN0YXJ0ICYmIHJlcy0+ZW5kID49IGVuZCkgewogCQkJaWYgKCEocmVzLT5mbGFncyAmIElP\n"
+ "UkVTT1VSQ0VfQlVTWSkpIHsKLQkJCQlwID0gJnJlcy0+Y2hpbGQ7CisJCQkJcmVzID0gcmVzb3Vy\n"
+ "Y2VfZmlyc3RfY2hpbGQoJnJlcy0+Y2hpbGQpOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJaWYg\n"
+ "KHJlcy0+c3RhcnQgIT0gc3RhcnQgfHwgcmVzLT5lbmQgIT0gZW5kKQogCQkJCWJyZWFrOwotCQkJ\n"
+ "KnAgPSByZXMtPnNpYmxpbmc7CisJCQlsaXN0X2RlbCgmcmVzLT5zaWJsaW5nKTsKIAkJCXdyaXRl\n"
+ "X3VubG9jaygmcmVzb3VyY2VfbG9jayk7CiAJCQlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0Vf\n"
+ "TVVYRUQpCiAJCQkJd2FrZV91cCgmbXV4ZWRfcmVzb3VyY2Vfd2FpdCk7CiAJCQlmcmVlX3Jlc291\n"
+ "cmNlKHJlcyk7CiAJCQlyZXR1cm47CiAJCX0KLQkJcCA9ICZyZXMtPnNpYmxpbmc7CisJCXJlcyA9\n"
+ "IHJlc291cmNlX3NpYmxpbmcocmVzKTsKIAl9CiAKIAl3cml0ZV91bmxvY2soJnJlc291cmNlX2xv\n"
+ "Y2spOwpAQCAtMTI3OCw5ICsxMjc3LDcgQEAgRVhQT1JUX1NZTUJPTChfX3JlbGVhc2VfcmVnaW9u\n"
+ "KTsKIGludCByZWxlYXNlX21lbV9yZWdpb25fYWRqdXN0YWJsZShzdHJ1Y3QgcmVzb3VyY2UgKnBh\n"
+ "cmVudCwKIAkJCXJlc291cmNlX3NpemVfdCBzdGFydCwgcmVzb3VyY2Vfc2l6ZV90IHNpemUpCiB7\n"
+ "Ci0Jc3RydWN0IHJlc291cmNlICoqcDsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQlzdHJ1Y3Qg\n"
+ "cmVzb3VyY2UgKm5ld19yZXM7CisJc3RydWN0IHJlc291cmNlICpyZXMsICpuZXdfcmVzOwogCXJl\n"
+ "c291cmNlX3NpemVfdCBlbmQ7CiAJaW50IHJldCA9IC1FSU5WQUw7CiAKQEAgLTEyOTEsMTYgKzEy\n"
+ "ODgsMTYgQEAgaW50IHJlbGVhc2VfbWVtX3JlZ2lvbl9hZGp1c3RhYmxlKHN0cnVjdCByZXNvdXJj\n"
+ "ZSAqcGFyZW50LAogCS8qIFRoZSBhbGxvY19yZXNvdXJjZSgpIHJlc3VsdCBnZXRzIGNoZWNrZWQg\n"
+ "bGF0ZXIgKi8KIAluZXdfcmVzID0gYWxsb2NfcmVzb3VyY2UoR0ZQX0tFUk5FTCk7CiAKLQlwID0g\n"
+ "JnBhcmVudC0+Y2hpbGQ7CisJcmVzID0gcmVzb3VyY2VfZmlyc3RfY2hpbGQoJnBhcmVudC0+Y2hp\n"
+ "bGQpOwogCXdyaXRlX2xvY2soJnJlc291cmNlX2xvY2spOwogCi0Jd2hpbGUgKChyZXMgPSAqcCkp\n"
+ "IHsKKwl3aGlsZSAoKHJlcykpIHsKIAkJaWYgKHJlcy0+c3RhcnQgPj0gZW5kKQogCQkJYnJlYWs7\n"
+ "CiAKIAkJLyogbG9vayBmb3IgdGhlIG5leHQgcmVzb3VyY2UgaWYgaXQgZG9lcyBub3QgZml0IGlu\n"
+ "dG8gKi8KIAkJaWYgKHJlcy0+c3RhcnQgPiBzdGFydCB8fCByZXMtPmVuZCA8IGVuZCkgewotCQkJ\n"
+ "cCA9ICZyZXMtPnNpYmxpbmc7CisJCQlyZXMgPSByZXNvdXJjZV9zaWJsaW5nKHJlcyk7CiAJCQlj\n"
+ "b250aW51ZTsKIAkJfQogCkBAIC0xMzA4LDE0ICsxMzA1LDE0IEBAIGludCByZWxlYXNlX21lbV9y\n"
+ "ZWdpb25fYWRqdXN0YWJsZShzdHJ1Y3QgcmVzb3VyY2UgKnBhcmVudCwKIAkJCWJyZWFrOwogCiAJ\n"
+ "CWlmICghKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0JVU1kpKSB7Ci0JCQlwID0gJnJlcy0+Y2hp\n"
+ "bGQ7CisJCQlyZXMgPSByZXNvdXJjZV9maXJzdF9jaGlsZCgmcmVzLT5jaGlsZCk7CiAJCQljb250\n"
+ "aW51ZTsKIAkJfQogCiAJCS8qIGZvdW5kIHRoZSB0YXJnZXQgcmVzb3VyY2U7IGxldCdzIGFkanVz\n"
+ "dCBhY2NvcmRpbmdseSAqLwogCQlpZiAocmVzLT5zdGFydCA9PSBzdGFydCAmJiByZXMtPmVuZCA9\n"
+ "PSBlbmQpIHsKIAkJCS8qIGZyZWUgdGhlIHdob2xlIGVudHJ5ICovCi0JCQkqcCA9IHJlcy0+c2li\n"
+ "bGluZzsKKwkJCWxpc3RfZGVsKCZyZXMtPnNpYmxpbmcpOwogCQkJZnJlZV9yZXNvdXJjZShyZXMp\n"
+ "OwogCQkJcmV0ID0gMDsKIAkJfSBlbHNlIGlmIChyZXMtPnN0YXJ0ID09IHN0YXJ0ICYmIHJlcy0+\n"
+ "ZW5kICE9IGVuZCkgewpAQCAtMTMzOCwxNCArMTMzNSwxMyBAQCBpbnQgcmVsZWFzZV9tZW1fcmVn\n"
+ "aW9uX2FkanVzdGFibGUoc3RydWN0IHJlc291cmNlICpwYXJlbnQsCiAJCQluZXdfcmVzLT5mbGFn\n"
+ "cyA9IHJlcy0+ZmxhZ3M7CiAJCQluZXdfcmVzLT5kZXNjID0gcmVzLT5kZXNjOwogCQkJbmV3X3Jl\n"
+ "cy0+cGFyZW50ID0gcmVzLT5wYXJlbnQ7Ci0JCQluZXdfcmVzLT5zaWJsaW5nID0gcmVzLT5zaWJs\n"
+ "aW5nOwotCQkJbmV3X3Jlcy0+Y2hpbGQgPSBOVUxMOworCQkJSU5JVF9MSVNUX0hFQUQoJm5ld19y\n"
+ "ZXMtPmNoaWxkKTsKIAogCQkJcmV0ID0gX19hZGp1c3RfcmVzb3VyY2UocmVzLCByZXMtPnN0YXJ0\n"
+ "LAogCQkJCQkJc3RhcnQgLSByZXMtPnN0YXJ0KTsKIAkJCWlmIChyZXQpCiAJCQkJYnJlYWs7Ci0J\n"
+ "CQlyZXMtPnNpYmxpbmcgPSBuZXdfcmVzOworCQkJbGlzdF9hZGQoJm5ld19yZXMtPnNpYmxpbmcs\n"
+ "ICZyZXMtPnNpYmxpbmcpOwogCQkJbmV3X3JlcyA9IE5VTEw7CiAJCX0KIApAQCAtMTUyNiw3ICsx\n"
+ "NTIyLDcgQEAgc3RhdGljIGludCBfX2luaXQgcmVzZXJ2ZV9zZXR1cChjaGFyICpzdHIpCiAJCQly\n"
+ "ZXMtPmVuZCA9IGlvX3N0YXJ0ICsgaW9fbnVtIC0gMTsKIAkJCXJlcy0+ZmxhZ3MgfD0gSU9SRVNP\n"
+ "VVJDRV9CVVNZOwogCQkJcmVzLT5kZXNjID0gSU9SRVNfREVTQ19OT05FOwotCQkJcmVzLT5jaGls\n"
+ "ZCA9IE5VTEw7CisJCQlJTklUX0xJU1RfSEVBRCgmcmVzLT5jaGlsZCk7CiAJCQlpZiAocmVxdWVz\n"
+ "dF9yZXNvdXJjZShwYXJlbnQsIHJlcykgPT0gMCkKIAkJCQlyZXNlcnZlZCA9IHgrMTsKIAkJfQpA\n"
+ "QCAtMTU0Niw3ICsxNTQyLDcgQEAgaW50IGlvbWVtX21hcF9zYW5pdHlfY2hlY2socmVzb3VyY2Vf\n"
+ "c2l6ZV90IGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIAlsb2ZmX3QgbDsKIAogCXJlYWRfbG9j\n"
+ "aygmcmVzb3VyY2VfbG9jayk7Ci0JZm9yIChwID0gcC0+Y2hpbGQ7IHAgOyBwID0gcl9uZXh0KE5V\n"
+ "TEwsIHAsICZsKSkgeworCWZvciAocCA9IHJlc291cmNlX2ZpcnN0X2NoaWxkKCZwLT5jaGlsZCk7\n"
+ "IHA7IHAgPSByX25leHQoTlVMTCwgcCwgJmwpKSB7CiAJCS8qCiAJCSAqIFdlIGNhbiBwcm9iYWJs\n"
+ "eSBza2lwIHRoZSByZXNvdXJjZXMgd2l0aG91dAogCQkgKiBJT1JFU09VUkNFX0lPIGF0dHJpYnV0\n"
+ "ZT8KQEAgLTE2MDIsNyArMTU5OCw3IEBAIGJvb2wgaW9tZW1faXNfZXhjbHVzaXZlKHU2NCBhZGRy\n"
+ "KQogCWFkZHIgPSBhZGRyICYgUEFHRV9NQVNLOwogCiAJcmVhZF9sb2NrKCZyZXNvdXJjZV9sb2Nr\n"
+ "KTsKLQlmb3IgKHAgPSBwLT5jaGlsZDsgcCA7IHAgPSByX25leHQoTlVMTCwgcCwgJmwpKSB7CisJ\n"
+ "Zm9yIChwID0gcmVzb3VyY2VfZmlyc3RfY2hpbGQoJnAtPmNoaWxkKTsgcDsgcCA9IHJfbmV4dChO\n"
+ "VUxMLCBwLCAmbCkpIHsKIAkJLyoKIAkJICogV2UgY2FuIHByb2JhYmx5IHNraXAgdGhlIHJlc291\n"
+ "cmNlcyB3aXRob3V0CiAJCSAqIElPUkVTT1VSQ0VfSU8gYXR0cmlidXRlPwotLSAKMi4xMy42Cgpf\n"
+ "X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpMaW51eC1udmRp\n"
+ "bW0gbWFpbGluZyBsaXN0CkxpbnV4LW52ZGltbUBsaXN0cy4wMS5vcmcKaHR0cHM6Ly9saXN0cy4w\n"
+ MS5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1udmRpbW0K
 
-7e6896005789564cf729788af5ebca9691c03db6b1f6cbf1ba378f12c11356e0
+e20d3a19e7a8f8d45c4e2f272400d9c993e8cfa521b3bb8440fb87050e5baac0

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.