]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.10-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 4 Jun 2014 21:04:03 +0000 (14:04 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 4 Jun 2014 21:04:03 +0000 (14:04 -0700)
added patches:
acpi-blacklist-add-dmi_enable_osi_linux-quirk-for-asus-eee-pc-1015px.patch
dm-crypt-fix-cpu-hotplug-crash-by-removing-per-cpu-structure.patch
i2c-designware-mask-all-interrupts-during-i2c-controller-enable.patch
i2c-rcar-bail-out-on-zero-length-transfers.patch
i2c-s3c2410-resume-race-fix.patch
libata-clean-up-zpodd-when-a-port-is-detached.patch

queue-3.10/acpi-blacklist-add-dmi_enable_osi_linux-quirk-for-asus-eee-pc-1015px.patch [new file with mode: 0644]
queue-3.10/dm-crypt-fix-cpu-hotplug-crash-by-removing-per-cpu-structure.patch [new file with mode: 0644]
queue-3.10/i2c-designware-mask-all-interrupts-during-i2c-controller-enable.patch [new file with mode: 0644]
queue-3.10/i2c-rcar-bail-out-on-zero-length-transfers.patch [new file with mode: 0644]
queue-3.10/i2c-s3c2410-resume-race-fix.patch [new file with mode: 0644]
queue-3.10/libata-clean-up-zpodd-when-a-port-is-detached.patch [new file with mode: 0644]
queue-3.10/series

diff --git a/queue-3.10/acpi-blacklist-add-dmi_enable_osi_linux-quirk-for-asus-eee-pc-1015px.patch b/queue-3.10/acpi-blacklist-add-dmi_enable_osi_linux-quirk-for-asus-eee-pc-1015px.patch
new file mode 100644 (file)
index 0000000..01f2bd8
--- /dev/null
@@ -0,0 +1,49 @@
+From f6e6e1b9fee88c90586787b71dc49bb3ce62bb89 Mon Sep 17 00:00:00 2001
+From: Hans de Goede <hdegoede@redhat.com>
+Date: Mon, 5 May 2014 11:38:09 +0200
+Subject: ACPI / blacklist: Add dmi_enable_osi_linux quirk for Asus EEE PC 1015PX
+
+From: Hans de Goede <hdegoede@redhat.com>
+
+commit f6e6e1b9fee88c90586787b71dc49bb3ce62bb89 upstream.
+
+Without this this EEE PC exports a non working WMI interface, with this it
+exports a working "good old" eeepc_laptop interface, fixing brightness control
+not working as well as rfkill being stuck in a permanent wireless blocked
+state.
+
+This is not an ideal way to fix this, but various attempts to fix this
+otherwise have failed, see:
+
+References: https://bugzilla.redhat.com/show_bug.cgi?id=1067181
+Reported-and-tested-by: lou.cardone@gmail.com
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/acpi/blacklist.c |   13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+--- a/drivers/acpi/blacklist.c
++++ b/drivers/acpi/blacklist.c
+@@ -327,6 +327,19 @@ static struct dmi_system_id acpi_osi_dmi
+                    DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T500"),
+               },
+       },
++      /*
++       * Without this this EEEpc exports a non working WMI interface, with
++       * this it exports a working "good old" eeepc_laptop interface, fixing
++       * both brightness control, and rfkill not working.
++       */
++      {
++      .callback = dmi_enable_osi_linux,
++      .ident = "Asus EEE PC 1015PX",
++      .matches = {
++                   DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK Computer INC."),
++                   DMI_MATCH(DMI_PRODUCT_NAME, "1015PX"),
++              },
++      },
+       {}
+ };
diff --git a/queue-3.10/dm-crypt-fix-cpu-hotplug-crash-by-removing-per-cpu-structure.patch b/queue-3.10/dm-crypt-fix-cpu-hotplug-crash-by-removing-per-cpu-structure.patch
new file mode 100644 (file)
index 0000000..fdac86d
--- /dev/null
@@ -0,0 +1,224 @@
+From 610f2de3559c383caf8fbbf91e9968102dff7ca0 Mon Sep 17 00:00:00 2001
+From: Mikulas Patocka <mpatocka@redhat.com>
+Date: Thu, 20 Feb 2014 18:01:01 -0500
+Subject: dm crypt: fix cpu hotplug crash by removing per-cpu structure
+
+From: Mikulas Patocka <mpatocka@redhat.com>
+
+commit 610f2de3559c383caf8fbbf91e9968102dff7ca0 upstream.
+
+The DM crypt target used per-cpu structures to hold pointers to a
+ablkcipher_request structure.  The code assumed that the work item keeps
+executing on a single CPU, so it didn't use synchronization when
+accessing this structure.
+
+If a CPU is disabled by writing 0 to /sys/devices/system/cpu/cpu*/online,
+the work item could be moved to another CPU.  This causes dm-crypt
+crashes, like the following, because the code starts using an incorrect
+ablkcipher_request:
+
+ smpboot: CPU 7 is now offline
+ BUG: unable to handle kernel NULL pointer dereference at 0000000000000130
+ IP: [<ffffffffa1862b3d>] crypt_convert+0x12d/0x3c0 [dm_crypt]
+ ...
+ Call Trace:
+  [<ffffffffa1864415>] ? kcryptd_crypt+0x305/0x470 [dm_crypt]
+  [<ffffffff81062060>] ? finish_task_switch+0x40/0xc0
+  [<ffffffff81052a28>] ? process_one_work+0x168/0x470
+  [<ffffffff8105366b>] ? worker_thread+0x10b/0x390
+  [<ffffffff81053560>] ? manage_workers.isra.26+0x290/0x290
+  [<ffffffff81058d9f>] ? kthread+0xaf/0xc0
+  [<ffffffff81058cf0>] ? kthread_create_on_node+0x120/0x120
+  [<ffffffff813464ac>] ? ret_from_fork+0x7c/0xb0
+  [<ffffffff81058cf0>] ? kthread_create_on_node+0x120/0x120
+
+Fix this bug by removing the per-cpu definition.  The structure
+ablkcipher_request is accessed via a pointer from convert_context.
+Consequently, if the work item is rescheduled to a different CPU, the
+thread still uses the same ablkcipher_request.
+
+This change may undermine performance improvements intended by commit
+c0297721 ("dm crypt: scale to multiple cpus") on select hardware.  In
+practice no performance difference was observed on recent hardware.  But
+regardless, correctness is more important than performance.
+
+Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
+Signed-off-by: Mike Snitzer <snitzer@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/md/dm-crypt.c |   61 +++++++++-----------------------------------------
+ 1 file changed, 12 insertions(+), 49 deletions(-)
+
+--- a/drivers/md/dm-crypt.c
++++ b/drivers/md/dm-crypt.c
+@@ -18,7 +18,6 @@
+ #include <linux/crypto.h>
+ #include <linux/workqueue.h>
+ #include <linux/backing-dev.h>
+-#include <linux/percpu.h>
+ #include <linux/atomic.h>
+ #include <linux/scatterlist.h>
+ #include <asm/page.h>
+@@ -44,6 +43,7 @@ struct convert_context {
+       unsigned int idx_out;
+       sector_t cc_sector;
+       atomic_t cc_pending;
++      struct ablkcipher_request *req;
+ };
+ /*
+@@ -105,15 +105,7 @@ struct iv_lmk_private {
+ enum flags { DM_CRYPT_SUSPENDED, DM_CRYPT_KEY_VALID };
+ /*
+- * Duplicated per-CPU state for cipher.
+- */
+-struct crypt_cpu {
+-      struct ablkcipher_request *req;
+-};
+-
+-/*
+- * The fields in here must be read only after initialization,
+- * changing state should be in crypt_cpu.
++ * The fields in here must be read only after initialization.
+  */
+ struct crypt_config {
+       struct dm_dev *dev;
+@@ -143,12 +135,6 @@ struct crypt_config {
+       sector_t iv_offset;
+       unsigned int iv_size;
+-      /*
+-       * Duplicated per cpu state. Access through
+-       * per_cpu_ptr() only.
+-       */
+-      struct crypt_cpu __percpu *cpu;
+-
+       /* ESSIV: struct crypto_cipher *essiv_tfm */
+       void *iv_private;
+       struct crypto_ablkcipher **tfms;
+@@ -184,11 +170,6 @@ static void clone_init(struct dm_crypt_i
+ static void kcryptd_queue_crypt(struct dm_crypt_io *io);
+ static u8 *iv_of_dmreq(struct crypt_config *cc, struct dm_crypt_request *dmreq);
+-static struct crypt_cpu *this_crypt_config(struct crypt_config *cc)
+-{
+-      return this_cpu_ptr(cc->cpu);
+-}
+-
+ /*
+  * Use this to access cipher attributes that are the same for each CPU.
+  */
+@@ -738,16 +719,15 @@ static void kcryptd_async_done(struct cr
+ static void crypt_alloc_req(struct crypt_config *cc,
+                           struct convert_context *ctx)
+ {
+-      struct crypt_cpu *this_cc = this_crypt_config(cc);
+       unsigned key_index = ctx->cc_sector & (cc->tfms_count - 1);
+-      if (!this_cc->req)
+-              this_cc->req = mempool_alloc(cc->req_pool, GFP_NOIO);
++      if (!ctx->req)
++              ctx->req = mempool_alloc(cc->req_pool, GFP_NOIO);
+-      ablkcipher_request_set_tfm(this_cc->req, cc->tfms[key_index]);
+-      ablkcipher_request_set_callback(this_cc->req,
++      ablkcipher_request_set_tfm(ctx->req, cc->tfms[key_index]);
++      ablkcipher_request_set_callback(ctx->req,
+           CRYPTO_TFM_REQ_MAY_BACKLOG | CRYPTO_TFM_REQ_MAY_SLEEP,
+-          kcryptd_async_done, dmreq_of_req(cc, this_cc->req));
++          kcryptd_async_done, dmreq_of_req(cc, ctx->req));
+ }
+ /*
+@@ -756,7 +736,6 @@ static void crypt_alloc_req(struct crypt
+ static int crypt_convert(struct crypt_config *cc,
+                        struct convert_context *ctx)
+ {
+-      struct crypt_cpu *this_cc = this_crypt_config(cc);
+       int r;
+       atomic_set(&ctx->cc_pending, 1);
+@@ -768,7 +747,7 @@ static int crypt_convert(struct crypt_co
+               atomic_inc(&ctx->cc_pending);
+-              r = crypt_convert_block(cc, ctx, this_cc->req);
++              r = crypt_convert_block(cc, ctx, ctx->req);
+               switch (r) {
+               /* async */
+@@ -777,7 +756,7 @@ static int crypt_convert(struct crypt_co
+                       INIT_COMPLETION(ctx->restart);
+                       /* fall through*/
+               case -EINPROGRESS:
+-                      this_cc->req = NULL;
++                      ctx->req = NULL;
+                       ctx->cc_sector++;
+                       continue;
+@@ -876,6 +855,7 @@ static struct dm_crypt_io *crypt_io_allo
+       io->sector = sector;
+       io->error = 0;
+       io->base_io = NULL;
++      io->ctx.req = NULL;
+       atomic_set(&io->io_pending, 0);
+       return io;
+@@ -901,6 +881,8 @@ static void crypt_dec_pending(struct dm_
+       if (!atomic_dec_and_test(&io->io_pending))
+               return;
++      if (io->ctx.req)
++              mempool_free(io->ctx.req, cc->req_pool);
+       mempool_free(io, cc->io_pool);
+       if (likely(!base_io))
+@@ -1326,8 +1308,6 @@ static int crypt_wipe_key(struct crypt_c
+ static void crypt_dtr(struct dm_target *ti)
+ {
+       struct crypt_config *cc = ti->private;
+-      struct crypt_cpu *cpu_cc;
+-      int cpu;
+       ti->private = NULL;
+@@ -1339,13 +1319,6 @@ static void crypt_dtr(struct dm_target *
+       if (cc->crypt_queue)
+               destroy_workqueue(cc->crypt_queue);
+-      if (cc->cpu)
+-              for_each_possible_cpu(cpu) {
+-                      cpu_cc = per_cpu_ptr(cc->cpu, cpu);
+-                      if (cpu_cc->req)
+-                              mempool_free(cpu_cc->req, cc->req_pool);
+-              }
+-
+       crypt_free_tfms(cc);
+       if (cc->bs)
+@@ -1364,9 +1337,6 @@ static void crypt_dtr(struct dm_target *
+       if (cc->dev)
+               dm_put_device(ti, cc->dev);
+-      if (cc->cpu)
+-              free_percpu(cc->cpu);
+-
+       kzfree(cc->cipher);
+       kzfree(cc->cipher_string);
+@@ -1421,13 +1391,6 @@ static int crypt_ctr_cipher(struct dm_ta
+       if (tmp)
+               DMWARN("Ignoring unexpected additional cipher options");
+-      cc->cpu = __alloc_percpu(sizeof(*(cc->cpu)),
+-                               __alignof__(struct crypt_cpu));
+-      if (!cc->cpu) {
+-              ti->error = "Cannot allocate per cpu state";
+-              goto bad_mem;
+-      }
+-
+       /*
+        * For compatibility with the original dm-crypt mapping format, if
+        * only the cipher name is supplied, use cbc-plain.
diff --git a/queue-3.10/i2c-designware-mask-all-interrupts-during-i2c-controller-enable.patch b/queue-3.10/i2c-designware-mask-all-interrupts-during-i2c-controller-enable.patch
new file mode 100644 (file)
index 0000000..de4901c
--- /dev/null
@@ -0,0 +1,58 @@
+From 47bb27e78867997040a228328f2a631c3c7f2c82 Mon Sep 17 00:00:00 2001
+From: "Du, Wenkai" <wenkai.du@intel.com>
+Date: Thu, 10 Apr 2014 23:03:19 +0000
+Subject: i2c: designware: Mask all interrupts during i2c controller enable
+
+From: "Du, Wenkai" <wenkai.du@intel.com>
+
+commit 47bb27e78867997040a228328f2a631c3c7f2c82 upstream.
+
+There have been "i2c_designware 80860F41:00: controller timed out" errors
+on a number of Baytrail platforms. The issue is caused by incorrect value in
+Interrupt Mask Register (DW_IC_INTR_MASK)  when i2c core is being enabled.
+This causes call to __i2c_dw_enable() to immediately start the transfer which
+leads to timeout. There are 3 failure modes observed:
+
+1. Failure in S0 to S3 resume path
+
+The default value after reset for DW_IC_INTR_MASK is 0x8ff. When we start
+the first transaction after resuming from system sleep, TX_EMPTY interrupt
+is already unmasked because of the hardware default.
+
+2. Failure in normal operational path
+
+This failure happens rarely and is hard to reproduce. Debug trace showed that
+DW_IC_INTR_MASK had value of 0x254 when failure occurred, which meant
+TX_EMPTY was unmasked.
+
+3. Failure in S3 to S0 suspend path
+
+This failure also happens rarely and is hard to reproduce. Adding debug trace
+that read DW_IC_INTR_MASK made this failure not reproducible. But from ISR
+call trace we could conclude TX_EMPTY was unmasked when problem occurred.
+
+The patch masks all interrupts before the controller is enabled to resolve the
+faulty DW_IC_INTR_MASK conditions.
+
+Signed-off-by: Wenkai Du <wenkai.du@intel.com>
+Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>
+[wsa: improved the comment and removed typo in commit msg]
+Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/i2c/busses/i2c-designware-core.c |    3 +++
+ 1 file changed, 3 insertions(+)
+
+--- a/drivers/i2c/busses/i2c-designware-core.c
++++ b/drivers/i2c/busses/i2c-designware-core.c
+@@ -380,6 +380,9 @@ static void i2c_dw_xfer_init(struct dw_i
+               ic_con &= ~DW_IC_CON_10BITADDR_MASTER;
+       dw_writel(dev, ic_con, DW_IC_CON);
++      /* enforce disabled interrupts (due to HW issues) */
++      i2c_dw_disable_int(dev);
++
+       /* Enable the adapter */
+       __i2c_dw_enable(dev, true);
diff --git a/queue-3.10/i2c-rcar-bail-out-on-zero-length-transfers.patch b/queue-3.10/i2c-rcar-bail-out-on-zero-length-transfers.patch
new file mode 100644 (file)
index 0000000..3242979
--- /dev/null
@@ -0,0 +1,46 @@
+From d7653964c590ba846aa11a8f6edf409773cbc492 Mon Sep 17 00:00:00 2001
+From: Wolfram Sang <wsa+renesas@sang-engineering.com>
+Date: Mon, 5 May 2014 18:36:21 +0200
+Subject: i2c: rcar: bail out on zero length transfers
+
+From: Wolfram Sang <wsa+renesas@sang-engineering.com>
+
+commit d7653964c590ba846aa11a8f6edf409773cbc492 upstream.
+
+This hardware does not support zero length transfers. Instead, the
+driver does one (random) byte transfers currently with undefined results
+for the slaves. We now bail out.
+
+Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
+Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/i2c/busses/i2c-rcar.c |    9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+--- a/drivers/i2c/busses/i2c-rcar.c
++++ b/drivers/i2c/busses/i2c-rcar.c
+@@ -541,6 +541,12 @@ static int rcar_i2c_master_xfer(struct i
+       ret = -EINVAL;
+       for (i = 0; i < num; i++) {
++              /* This HW can't send STOP after address phase */
++              if (msgs[i].len == 0) {
++                      ret = -EOPNOTSUPP;
++                      break;
++              }
++
+               /*-------------- spin lock -----------------*/
+               spin_lock_irqsave(&priv->lock, flags);
+@@ -605,7 +611,8 @@ static int rcar_i2c_master_xfer(struct i
+ static u32 rcar_i2c_func(struct i2c_adapter *adap)
+ {
+-      return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL;
++      /* This HW can't do SMBUS_QUICK and NOSTART */
++      return I2C_FUNC_I2C | (I2C_FUNC_SMBUS_EMUL & ~I2C_FUNC_SMBUS_QUICK);
+ }
+ static const struct i2c_algorithm rcar_i2c_algo = {
diff --git a/queue-3.10/i2c-s3c2410-resume-race-fix.patch b/queue-3.10/i2c-s3c2410-resume-race-fix.patch
new file mode 100644 (file)
index 0000000..5424143
--- /dev/null
@@ -0,0 +1,40 @@
+From ce78cc071f5f541480e381cc0241d37590041a9d Mon Sep 17 00:00:00 2001
+From: Olof Johansson <olof@lixom.net>
+Date: Fri, 11 Apr 2014 15:19:41 -0700
+Subject: i2c: s3c2410: resume race fix
+
+From: Olof Johansson <olof@lixom.net>
+
+commit ce78cc071f5f541480e381cc0241d37590041a9d upstream.
+
+Don't unmark the device as suspended until after it's been re-setup.
+
+The main race would be w.r.t. an i2c driver that gets resumed at the same
+time (asyncronously), that is allowed to do a transfer since suspended
+is set to 0 before reinit, but really should have seen the -EIO return
+instead.
+
+Signed-off-by: Olof Johansson <olof@lixom.net>
+Signed-off-by: Doug Anderson <dianders@chromium.org>
+Acked-by: Kukjin Kim <kgene.kim@samsung.com>
+Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/i2c/busses/i2c-s3c2410.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/i2c/busses/i2c-s3c2410.c
++++ b/drivers/i2c/busses/i2c-s3c2410.c
+@@ -1204,10 +1204,10 @@ static int s3c24xx_i2c_resume(struct dev
+       struct platform_device *pdev = to_platform_device(dev);
+       struct s3c24xx_i2c *i2c = platform_get_drvdata(pdev);
+-      i2c->suspended = 0;
+       clk_prepare_enable(i2c->clk);
+       s3c24xx_i2c_init(i2c);
+       clk_disable_unprepare(i2c->clk);
++      i2c->suspended = 0;
+       return 0;
+ }
diff --git a/queue-3.10/libata-clean-up-zpodd-when-a-port-is-detached.patch b/queue-3.10/libata-clean-up-zpodd-when-a-port-is-detached.patch
new file mode 100644 (file)
index 0000000..8b1efa1
--- /dev/null
@@ -0,0 +1,50 @@
+From a6f9bf4d2f965b862b95213303d154e02957eed8 Mon Sep 17 00:00:00 2001
+From: Levente Kurusa <levex@linux.com>
+Date: Tue, 6 May 2014 15:57:48 +0200
+Subject: libata: clean up ZPODD when a port is detached
+
+From: Levente Kurusa <levex@linux.com>
+
+commit a6f9bf4d2f965b862b95213303d154e02957eed8 upstream.
+
+When a ZPODD device is unbound via sysfs, the ACPI notify handler
+is not removed. This causes panics as observed in Bug #74601. The
+panic only happens when the wake happens from outside the kernel
+(i.e. inserting a media or pressing a button). Add a loop to
+ata_port_detach which loops through the port's devices and checks
+if zpodd is enabled, if so call zpodd_exit.
+
+Reviewed-by: Aaron Lu <aaron.lu@intel.com>
+Signed-off-by: Levente Kurusa <levex@linux.com>
+Signed-off-by: Tejun Heo <tj@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/ata/libata-core.c |    9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+--- a/drivers/ata/libata-core.c
++++ b/drivers/ata/libata-core.c
+@@ -6300,6 +6300,8 @@ int ata_host_activate(struct ata_host *h
+ static void ata_port_detach(struct ata_port *ap)
+ {
+       unsigned long flags;
++      struct ata_link *link;
++      struct ata_device *dev;
+       if (!ap->ops->error_handler)
+               goto skip_eh;
+@@ -6319,6 +6321,13 @@ static void ata_port_detach(struct ata_p
+       cancel_delayed_work_sync(&ap->hotplug_task);
+  skip_eh:
++      /* clean up zpodd on port removal */
++      ata_for_each_link(link, ap, HOST_FIRST) {
++              ata_for_each_dev(dev, link, ALL) {
++                      if (zpodd_dev_enabled(dev))
++                              zpodd_exit(dev);
++              }
++      }
+       if (ap->pmp_link) {
+               int i;
+               for (i = 0; i < SATA_PMP_MAX_PORTS; i++)
index 109fd506cfc744d6d3abe05da06a7e882b80134d..03a01006e8d333f6a2ecbbeee7bfab119e6d8a91 100644 (file)
@@ -87,3 +87,9 @@ target-iser-fix-wrong-connection-requests-list-addition.patch
 target-iser-fix-iscsit_accept_np-and-rdma_cm-racy-flow.patch
 target-don-t-allow-setting-wc-emulation-if-device-doesn-t-support.patch
 powerpc-tm-fix-crash-when-forking-inside-a-transaction.patch
+dm-crypt-fix-cpu-hotplug-crash-by-removing-per-cpu-structure.patch
+libata-clean-up-zpodd-when-a-port-is-detached.patch
+acpi-blacklist-add-dmi_enable_osi_linux-quirk-for-asus-eee-pc-1015px.patch
+i2c-rcar-bail-out-on-zero-length-transfers.patch
+i2c-designware-mask-all-interrupts-during-i2c-controller-enable.patch
+i2c-s3c2410-resume-race-fix.patch