]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.16-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 20 Sep 2014 17:48:51 +0000 (10:48 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 20 Sep 2014 17:48:51 +0000 (10:48 -0700)
added patches:
ahci-add-device-ids-for-intel-9-series-pch.patch
ahci-add-pcid-for-marvel-0x9182-controller.patch
drm-i915-disable-rcs-flips-on-ivybridge.patch
libata-widen-crucial-m550-blacklist-matching.patch
of-allow-mem_reserve-of-memory-with-a-base-address-of-zero.patch
of-irq-fix-lookup-to-use-interrupts-extended-property-first.patch
pata_scc-propagate-return-value-of-scc_wait_after_reset.patch
pwm-fix-period-and-polarity-in-pwm_get-for-non-perfect-matches.patch

queue-3.16/ahci-add-device-ids-for-intel-9-series-pch.patch [new file with mode: 0644]
queue-3.16/ahci-add-pcid-for-marvel-0x9182-controller.patch [new file with mode: 0644]
queue-3.16/drm-i915-disable-rcs-flips-on-ivybridge.patch [new file with mode: 0644]
queue-3.16/libata-widen-crucial-m550-blacklist-matching.patch [new file with mode: 0644]
queue-3.16/of-allow-mem_reserve-of-memory-with-a-base-address-of-zero.patch [new file with mode: 0644]
queue-3.16/of-irq-fix-lookup-to-use-interrupts-extended-property-first.patch [new file with mode: 0644]
queue-3.16/pata_scc-propagate-return-value-of-scc_wait_after_reset.patch [new file with mode: 0644]
queue-3.16/pwm-fix-period-and-polarity-in-pwm_get-for-non-perfect-matches.patch [new file with mode: 0644]
queue-3.16/series

diff --git a/queue-3.16/ahci-add-device-ids-for-intel-9-series-pch.patch b/queue-3.16/ahci-add-device-ids-for-intel-9-series-pch.patch
new file mode 100644 (file)
index 0000000..f2aea6e
--- /dev/null
@@ -0,0 +1,36 @@
+From 1b071a0947dbce5c184c12262e02540fbc493457 Mon Sep 17 00:00:00 2001
+From: James Ralston <james.d.ralston@intel.com>
+Date: Wed, 27 Aug 2014 14:29:07 -0700
+Subject: ahci: Add Device IDs for Intel 9 Series PCH
+
+From: James Ralston <james.d.ralston@intel.com>
+
+commit 1b071a0947dbce5c184c12262e02540fbc493457 upstream.
+
+This patch adds the AHCI mode SATA Device IDs for the Intel 9 Series PCH.
+
+Signed-off-by: James Ralston <james.d.ralston@intel.com>
+Signed-off-by: Tejun Heo <tj@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/ata/ahci.c |    8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+--- a/drivers/ata/ahci.c
++++ b/drivers/ata/ahci.c
+@@ -305,6 +305,14 @@ static const struct pci_device_id ahci_p
+       { PCI_VDEVICE(INTEL, 0x9c85), board_ahci }, /* Wildcat Point-LP RAID */
+       { PCI_VDEVICE(INTEL, 0x9c87), board_ahci }, /* Wildcat Point-LP RAID */
+       { PCI_VDEVICE(INTEL, 0x9c8f), board_ahci }, /* Wildcat Point-LP RAID */
++      { PCI_VDEVICE(INTEL, 0x8c82), board_ahci }, /* 9 Series AHCI */
++      { PCI_VDEVICE(INTEL, 0x8c83), board_ahci }, /* 9 Series AHCI */
++      { PCI_VDEVICE(INTEL, 0x8c84), board_ahci }, /* 9 Series RAID */
++      { PCI_VDEVICE(INTEL, 0x8c85), board_ahci }, /* 9 Series RAID */
++      { PCI_VDEVICE(INTEL, 0x8c86), board_ahci }, /* 9 Series RAID */
++      { PCI_VDEVICE(INTEL, 0x8c87), board_ahci }, /* 9 Series RAID */
++      { PCI_VDEVICE(INTEL, 0x8c8e), board_ahci }, /* 9 Series RAID */
++      { PCI_VDEVICE(INTEL, 0x8c8f), board_ahci }, /* 9 Series RAID */
+       /* JMicron 360/1/3/5/6, match class to avoid IDE function */
+       { PCI_VENDOR_ID_JMICRON, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
diff --git a/queue-3.16/ahci-add-pcid-for-marvel-0x9182-controller.patch b/queue-3.16/ahci-add-pcid-for-marvel-0x9182-controller.patch
new file mode 100644 (file)
index 0000000..8ebaf13
--- /dev/null
@@ -0,0 +1,32 @@
+From c5edfff9db6f4d2c35c802acb4abe0df178becee Mon Sep 17 00:00:00 2001
+From: Murali Karicheri <m-karicheri2@ti.com>
+Date: Fri, 5 Sep 2014 13:21:00 -0400
+Subject: ahci: add pcid for Marvel 0x9182 controller
+
+From: Murali Karicheri <m-karicheri2@ti.com>
+
+commit c5edfff9db6f4d2c35c802acb4abe0df178becee upstream.
+
+Keystone K2E EVM uses Marvel 0x9182 controller. This requires support
+for the ID in the ahci driver.
+
+Signed-off-by: Murali Karicheri <m-karicheri2@ti.com>
+Signed-off-by: Tejun Heo <tj@kernel.org>
+Cc: Santosh Shilimkar <santosh.shilimkar@ti.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/ata/ahci.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/drivers/ata/ahci.c
++++ b/drivers/ata/ahci.c
+@@ -450,6 +450,8 @@ static const struct pci_device_id ahci_p
+       { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x917a),
+         .driver_data = board_ahci_yes_fbs },                  /* 88se9172 */
+       { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9172),
++        .driver_data = board_ahci_yes_fbs },                  /* 88se9182 */
++      { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9182),
+         .driver_data = board_ahci_yes_fbs },                  /* 88se9172 */
+       { PCI_DEVICE(PCI_VENDOR_ID_MARVELL_EXT, 0x9192),
+         .driver_data = board_ahci_yes_fbs },                  /* 88se9172 on some Gigabyte */
diff --git a/queue-3.16/drm-i915-disable-rcs-flips-on-ivybridge.patch b/queue-3.16/drm-i915-disable-rcs-flips-on-ivybridge.patch
new file mode 100644 (file)
index 0000000..6efdcb1
--- /dev/null
@@ -0,0 +1,33 @@
+From 2a92d5bca1999b69c78f3c3e97b5484985b094b9 Mon Sep 17 00:00:00 2001
+From: Chris Wilson <chris@chris-wilson.co.uk>
+Date: Tue, 8 Jul 2014 10:40:29 +0100
+Subject: drm/i915: Disable RCS flips on Ivybridge
+
+From: Chris Wilson <chris@chris-wilson.co.uk>
+
+commit 2a92d5bca1999b69c78f3c3e97b5484985b094b9 upstream.
+
+We currently see random GPU hangs when using RCS flips with multiple
+pipes on Ivybridge. Now that we have mmio flips, we can fairly cheaply
+fallback to using CPU driven flips instead.
+
+Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
+Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=77104
+Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/i915/intel_display.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/drivers/gpu/drm/i915/intel_display.c
++++ b/drivers/gpu/drm/i915/intel_display.c
+@@ -9294,6 +9294,8 @@ static int intel_crtc_page_flip(struct d
+       if (IS_VALLEYVIEW(dev)) {
+               ring = &dev_priv->ring[BCS];
++      } else if (IS_IVYBRIDGE(dev)) {
++              ring = &dev_priv->ring[BCS];
+       } else if (INTEL_INFO(dev)->gen >= 7) {
+               ring = obj->ring;
+               if (ring == NULL || ring->id != RCS)
diff --git a/queue-3.16/libata-widen-crucial-m550-blacklist-matching.patch b/queue-3.16/libata-widen-crucial-m550-blacklist-matching.patch
new file mode 100644 (file)
index 0000000..f19e8a8
--- /dev/null
@@ -0,0 +1,34 @@
+From 2a13772a144d2956a7fedd18685921d0a9b8b783 Mon Sep 17 00:00:00 2001
+From: Tejun Heo <tj@kernel.org>
+Date: Mon, 18 Aug 2014 17:40:09 -0400
+Subject: libata: widen Crucial M550 blacklist matching
+
+From: Tejun Heo <tj@kernel.org>
+
+commit 2a13772a144d2956a7fedd18685921d0a9b8b783 upstream.
+
+Crucial M550 may cause data corruption on queued trims and is
+blacklisted.  The pattern used for it fails to match 1TB one as the
+capacity section will be four chars instead of three.  Widen the
+pattern.
+
+Signed-off-by: Tejun Heo <tj@kernel.org>
+Reported-by: Charles Reiss <woggling@gmail.com>
+Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=81071
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/ata/libata-core.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/ata/libata-core.c
++++ b/drivers/ata/libata-core.c
+@@ -4227,7 +4227,7 @@ static const struct ata_blacklist_entry
+       { "Micron_M500*",               NULL,   ATA_HORKAGE_NO_NCQ_TRIM, },
+       { "Crucial_CT???M500SSD*",      NULL,   ATA_HORKAGE_NO_NCQ_TRIM, },
+       { "Micron_M550*",               NULL,   ATA_HORKAGE_NO_NCQ_TRIM, },
+-      { "Crucial_CT???M550SSD*",      NULL,   ATA_HORKAGE_NO_NCQ_TRIM, },
++      { "Crucial_CT*M550SSD*",        NULL,   ATA_HORKAGE_NO_NCQ_TRIM, },
+       /*
+        * Some WD SATA-I drives spin up and down erratically when the link
diff --git a/queue-3.16/of-allow-mem_reserve-of-memory-with-a-base-address-of-zero.patch b/queue-3.16/of-allow-mem_reserve-of-memory-with-a-base-address-of-zero.patch
new file mode 100644 (file)
index 0000000..da9cab1
--- /dev/null
@@ -0,0 +1,38 @@
+From b5f2a8c02697c3685ccbbb66495465742ffa0dc1 Mon Sep 17 00:00:00 2001
+From: Al Cooper <alcooperx@gmail.com>
+Date: Wed, 6 Aug 2014 16:30:04 -0400
+Subject: of: Allow mem_reserve of memory with a base address of zero
+
+From: Al Cooper <alcooperx@gmail.com>
+
+commit b5f2a8c02697c3685ccbbb66495465742ffa0dc1 upstream.
+
+__reserved_mem_reserve_reg() won't reserve memory if the base address
+is zero. This change removes the check for a base address of zero and
+allows it to be reserved.
+
+Allowing the first 4K of memory to be reserved will help solve a
+problem on some ARM systems where the the first 16K of memory is
+unused and becomes allocable memory. This will prevent this memory
+from being used for DMA by drivers like the USB OHCI driver which
+consider a physical address of zero to be illegal.
+
+Signed-off-by: Al Cooper <alcooperx@gmail.com>
+Signed-off-by: Grant Likely <grant.likely@linaro.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/of/fdt.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/of/fdt.c
++++ b/drivers/of/fdt.c
+@@ -453,7 +453,7 @@ static int __init __reserved_mem_reserve
+               base = dt_mem_next_cell(dt_root_addr_cells, &prop);
+               size = dt_mem_next_cell(dt_root_size_cells, &prop);
+-              if (base && size &&
++              if (size &&
+                   early_init_dt_reserve_memory_arch(base, size, nomap) == 0)
+                       pr_debug("Reserved memory: reserved region for node '%s': base %pa, size %ld MiB\n",
+                               uname, &base, (unsigned long)size / SZ_1M);
diff --git a/queue-3.16/of-irq-fix-lookup-to-use-interrupts-extended-property-first.patch b/queue-3.16/of-irq-fix-lookup-to-use-interrupts-extended-property-first.patch
new file mode 100644 (file)
index 0000000..de32bbf
--- /dev/null
@@ -0,0 +1,82 @@
+From a9ecdc0fdc54aa499604dbd43132988effcac9b4 Mon Sep 17 00:00:00 2001
+From: Florian Fainelli <f.fainelli@gmail.com>
+Date: Wed, 6 Aug 2014 13:02:27 -0700
+Subject: of/irq: Fix lookup to use 'interrupts-extended' property first
+
+From: Florian Fainelli <f.fainelli@gmail.com>
+
+commit a9ecdc0fdc54aa499604dbd43132988effcac9b4 upstream.
+
+In case the Device Tree blob passed by the boot agent supplies both an
+'interrupts-extended' and an 'interrupts' property in order to allow for
+older kernels to be usable, prefer the new-style 'interrupts-extended'
+property which conveys a lot more information.
+
+This allows us to have bootloaders willingly maintaining backwards
+compatibility with older kernels without entirely deprecating the
+'interrupts' property.
+
+Update the bindings documentation to describe a situation where both the
+'interrupts-extended' and the 'interrupts' property are present, and
+which one takes precedence over the other.
+
+Acked-by: Rob Herring <robh@kernel.org>
+Signed-off-by: Brian Norris <computersforpeace@gmail.com>
+Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
+Signed-off-by: Grant Likely <grant.likely@linaro.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ Documentation/devicetree/bindings/interrupt-controller/interrupts.txt |   12 ++++---
+ drivers/of/irq.c                                                      |   17 +++++-----
+ 2 files changed, 16 insertions(+), 13 deletions(-)
+
+--- a/Documentation/devicetree/bindings/interrupt-controller/interrupts.txt
++++ b/Documentation/devicetree/bindings/interrupt-controller/interrupts.txt
+@@ -4,11 +4,13 @@ Specifying interrupt information for dev
+ 1) Interrupt client nodes
+ -------------------------
+-Nodes that describe devices which generate interrupts must contain an either an
+-"interrupts" property or an "interrupts-extended" property. These properties
+-contain a list of interrupt specifiers, one per output interrupt. The format of
+-the interrupt specifier is determined by the interrupt controller to which the
+-interrupts are routed; see section 2 below for details.
++Nodes that describe devices which generate interrupts must contain an
++"interrupts" property, an "interrupts-extended" property, or both. If both are
++present, the latter should take precedence; the former may be provided simply
++for compatibility with software that does not recognize the latter. These
++properties contain a list of interrupt specifiers, one per output interrupt. The
++format of the interrupt specifier is determined by the interrupt controller to
++which the interrupts are routed; see section 2 below for details.
+   Example:
+       interrupt-parent = <&intc1>;
+--- a/drivers/of/irq.c
++++ b/drivers/of/irq.c
+@@ -301,16 +301,17 @@ int of_irq_parse_one(struct device_node
+       /* Get the reg property (if any) */
+       addr = of_get_property(device, "reg", NULL);
++      /* Try the new-style interrupts-extended first */
++      res = of_parse_phandle_with_args(device, "interrupts-extended",
++                                      "#interrupt-cells", index, out_irq);
++      if (!res)
++              return of_irq_parse_raw(addr, out_irq);
++
+       /* Get the interrupts property */
+       intspec = of_get_property(device, "interrupts", &intlen);
+-      if (intspec == NULL) {
+-              /* Try the new-style interrupts-extended */
+-              res = of_parse_phandle_with_args(device, "interrupts-extended",
+-                                              "#interrupt-cells", index, out_irq);
+-              if (res)
+-                      return -EINVAL;
+-              return of_irq_parse_raw(addr, out_irq);
+-      }
++      if (intspec == NULL)
++              return -EINVAL;
++
+       intlen /= sizeof(*intspec);
+       pr_debug(" intspec=%d intlen=%d\n", be32_to_cpup(intspec), intlen);
diff --git a/queue-3.16/pata_scc-propagate-return-value-of-scc_wait_after_reset.patch b/queue-3.16/pata_scc-propagate-return-value-of-scc_wait_after_reset.patch
new file mode 100644 (file)
index 0000000..4308480
--- /dev/null
@@ -0,0 +1,65 @@
+From 4dc7c76cd500fa78c64adfda4b070b870a2b993c Mon Sep 17 00:00:00 2001
+From: Arjun Sreedharan <arjun024@gmail.com>
+Date: Sun, 17 Aug 2014 20:00:09 +0530
+Subject: pata_scc: propagate return value of scc_wait_after_reset
+
+From: Arjun Sreedharan <arjun024@gmail.com>
+
+commit 4dc7c76cd500fa78c64adfda4b070b870a2b993c upstream.
+
+scc_bus_softreset not necessarily should return zero.
+Propagate the error code.
+
+Signed-off-by: Arjun Sreedharan <arjun024@gmail.com>
+Signed-off-by: Tejun Heo <tj@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/ata/pata_scc.c |   15 +++++++--------
+ 1 file changed, 7 insertions(+), 8 deletions(-)
+
+--- a/drivers/ata/pata_scc.c
++++ b/drivers/ata/pata_scc.c
+@@ -585,7 +585,7 @@ static int scc_wait_after_reset(struct a
+  *    Note: Original code is ata_bus_softreset().
+  */
+-static unsigned int scc_bus_softreset(struct ata_port *ap, unsigned int devmask,
++static int scc_bus_softreset(struct ata_port *ap, unsigned int devmask,
+                                       unsigned long deadline)
+ {
+       struct ata_ioports *ioaddr = &ap->ioaddr;
+@@ -599,9 +599,7 @@ static unsigned int scc_bus_softreset(st
+       udelay(20);
+       out_be32(ioaddr->ctl_addr, ap->ctl);
+-      scc_wait_after_reset(&ap->link, devmask, deadline);
+-
+-      return 0;
++      return scc_wait_after_reset(&ap->link, devmask, deadline);
+ }
+ /**
+@@ -618,7 +616,8 @@ static int scc_softreset(struct ata_link
+ {
+       struct ata_port *ap = link->ap;
+       unsigned int slave_possible = ap->flags & ATA_FLAG_SLAVE_POSS;
+-      unsigned int devmask = 0, err_mask;
++      unsigned int devmask = 0;
++      int rc;
+       u8 err;
+       DPRINTK("ENTER\n");
+@@ -634,9 +633,9 @@ static int scc_softreset(struct ata_link
+       /* issue bus reset */
+       DPRINTK("about to softreset, devmask=%x\n", devmask);
+-      err_mask = scc_bus_softreset(ap, devmask, deadline);
+-      if (err_mask) {
+-              ata_port_err(ap, "SRST failed (err_mask=0x%x)\n", err_mask);
++      rc = scc_bus_softreset(ap, devmask, deadline);
++      if (rc) {
++              ata_port_err(ap, "SRST failed (err_mask=0x%x)\n", rc);
+               return -EIO;
+       }
diff --git a/queue-3.16/pwm-fix-period-and-polarity-in-pwm_get-for-non-perfect-matches.patch b/queue-3.16/pwm-fix-period-and-polarity-in-pwm_get-for-non-perfect-matches.patch
new file mode 100644 (file)
index 0000000..37ac8f5
--- /dev/null
@@ -0,0 +1,65 @@
+From d717ea73e36dd5659640fae82605ad85c4117f4d Mon Sep 17 00:00:00 2001
+From: Geert Uytterhoeven <geert+renesas@glider.be>
+Date: Wed, 13 Aug 2014 17:18:53 +0200
+Subject: pwm: Fix period and polarity in pwm_get() for non-perfect matches
+
+From: Geert Uytterhoeven <geert+renesas@glider.be>
+
+commit d717ea73e36dd5659640fae82605ad85c4117f4d upstream.
+
+If pwm_get() finds a look-up entry with a perfect match (both dev_id and
+con_id match), the loop is aborted, and "p" still points to the correct
+struct pwm_lookup.
+
+If only an entry with a matching dev_id or con_id is found, the loop
+terminates after traversing the whole list, and "p" now points to
+arbitrary memory, not part of the pwm_lookup list.
+Then pwm_set_period() and pwm_set_polarity() will set random values for
+period resp. polarity.
+
+To fix this, save period and polarity when finding a new best match,
+just like is done for chip (for the provider) and index.
+
+This fixes the LCD backlight on r8a7740/armadillo-legacy, which was fed
+period 0 and polarity -1068821144 instead of 33333 resp. 1.
+
+Fixes: 3796ce1d4d4b ("pwm: add period and polarity to struct pwm_lookup")
+Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
+Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/pwm/core.c |    8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+--- a/drivers/pwm/core.c
++++ b/drivers/pwm/core.c
+@@ -606,6 +606,8 @@ struct pwm_device *pwm_get(struct device
+       unsigned int best = 0;
+       struct pwm_lookup *p;
+       unsigned int match;
++      unsigned int period;
++      enum pwm_polarity polarity;
+       /* look up via DT first */
+       if (IS_ENABLED(CONFIG_OF) && dev && dev->of_node)
+@@ -653,6 +655,8 @@ struct pwm_device *pwm_get(struct device
+               if (match > best) {
+                       chip = pwmchip_find_by_name(p->provider);
+                       index = p->index;
++                      period = p->period;
++                      polarity = p->polarity;
+                       if (match != 3)
+                               best = match;
+@@ -668,8 +672,8 @@ struct pwm_device *pwm_get(struct device
+       if (IS_ERR(pwm))
+               return pwm;
+-      pwm_set_period(pwm, p->period);
+-      pwm_set_polarity(pwm, p->polarity);
++      pwm_set_period(pwm, period);
++      pwm_set_polarity(pwm, polarity);
+       return pwm;
index e09e63ad1b0986cf6ec34943df49eeb3f54d4119..510e9053b42ad10f5012af9940686fcb0cb420b8 100644 (file)
@@ -23,3 +23,11 @@ drm-radeon-atom-add-new-voltage-fetch-function-for-hawaii.patch
 drm-radeon-tweak-accel_working2-query-for-hawaii.patch
 drm-i915-fix-crash-when-failing-to-parse-mipi-vbt.patch
 drm-i915-read-head-register-back-in-init_ring_common-to-enforce-ordering.patch
+drm-i915-disable-rcs-flips-on-ivybridge.patch
+of-allow-mem_reserve-of-memory-with-a-base-address-of-zero.patch
+of-irq-fix-lookup-to-use-interrupts-extended-property-first.patch
+libata-widen-crucial-m550-blacklist-matching.patch
+pata_scc-propagate-return-value-of-scc_wait_after_reset.patch
+ahci-add-device-ids-for-intel-9-series-pch.patch
+ahci-add-pcid-for-marvel-0x9182-controller.patch
+pwm-fix-period-and-polarity-in-pwm_get-for-non-perfect-matches.patch