]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.15-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 26 Jul 2014 19:00:44 +0000 (12:00 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 26 Jul 2014 19:00:44 +0000 (12:00 -0700)
added patches:
aio-protect-reqs_available-updates-from-changes-in-interrupt-handlers.patch
arc-implement-ptrace-ptrace_get_thread_area.patch
arm-dts-imx-add-alias-for-ethernet-controller.patch
don-t-trigger-congestion-wait-on-dirty-but-not-writeout-pages.patch
gpio-dwapb-drop-irq_setup_generic_chip.patch
ib-mlx5-enable-block-multicast-loopback-for-kernel-consumers.patch
iwlwifi-mvm-disable-cts-to-self.patch
sched-fix-possible-divide-by-zero-in-avg_atom-calculation.patch
x86-efi-include-a-.bss-section-within-the-pe-coff-headers.patch

queue-3.15/aio-protect-reqs_available-updates-from-changes-in-interrupt-handlers.patch [new file with mode: 0644]
queue-3.15/arc-implement-ptrace-ptrace_get_thread_area.patch [new file with mode: 0644]
queue-3.15/arm-dts-imx-add-alias-for-ethernet-controller.patch [new file with mode: 0644]
queue-3.15/don-t-trigger-congestion-wait-on-dirty-but-not-writeout-pages.patch [new file with mode: 0644]
queue-3.15/gpio-dwapb-drop-irq_setup_generic_chip.patch [new file with mode: 0644]
queue-3.15/ib-mlx5-enable-block-multicast-loopback-for-kernel-consumers.patch [new file with mode: 0644]
queue-3.15/iwlwifi-mvm-disable-cts-to-self.patch [new file with mode: 0644]
queue-3.15/sched-fix-possible-divide-by-zero-in-avg_atom-calculation.patch [new file with mode: 0644]
queue-3.15/series
queue-3.15/x86-efi-include-a-.bss-section-within-the-pe-coff-headers.patch [new file with mode: 0644]

diff --git a/queue-3.15/aio-protect-reqs_available-updates-from-changes-in-interrupt-handlers.patch b/queue-3.15/aio-protect-reqs_available-updates-from-changes-in-interrupt-handlers.patch
new file mode 100644 (file)
index 0000000..ad781d5
--- /dev/null
@@ -0,0 +1,72 @@
+From 263782c1c95bbddbb022dc092fd89a36bb8d5577 Mon Sep 17 00:00:00 2001
+From: Benjamin LaHaise <bcrl@kvack.org>
+Date: Mon, 14 Jul 2014 12:49:26 -0400
+Subject: aio: protect reqs_available updates from changes in interrupt handlers
+
+From: Benjamin LaHaise <bcrl@kvack.org>
+
+commit 263782c1c95bbddbb022dc092fd89a36bb8d5577 upstream.
+
+As of commit f8567a3845ac05bb28f3c1b478ef752762bd39ef it is now possible to
+have put_reqs_available() called from irq context.  While put_reqs_available()
+is per cpu, it did not protect itself from interrupts on the same CPU.  This
+lead to aio_complete() corrupting the available io requests count when run
+under a heavy O_DIRECT workloads as reported by Robert Elliott.  Fix this by
+disabling irq updates around the per cpu batch updates of reqs_available.
+
+Many thanks to Robert and folks for testing and tracking this down.
+
+Reported-by: Robert Elliot <Elliott@hp.com>
+Tested-by: Robert Elliot <Elliott@hp.com>
+Signed-off-by: Benjamin LaHaise <bcrl@kvack.org>
+Cc: Jens Axboe <axboe@kernel.dk>, Christoph Hellwig <hch@infradead.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ fs/aio.c |    7 +++++++
+ 1 file changed, 7 insertions(+)
+
+--- a/fs/aio.c
++++ b/fs/aio.c
+@@ -830,16 +830,20 @@ void exit_aio(struct mm_struct *mm)
+ static void put_reqs_available(struct kioctx *ctx, unsigned nr)
+ {
+       struct kioctx_cpu *kcpu;
++      unsigned long flags;
+       preempt_disable();
+       kcpu = this_cpu_ptr(ctx->cpu);
++      local_irq_save(flags);
+       kcpu->reqs_available += nr;
++
+       while (kcpu->reqs_available >= ctx->req_batch * 2) {
+               kcpu->reqs_available -= ctx->req_batch;
+               atomic_add(ctx->req_batch, &ctx->reqs_available);
+       }
++      local_irq_restore(flags);
+       preempt_enable();
+ }
+@@ -847,10 +851,12 @@ static bool get_reqs_available(struct ki
+ {
+       struct kioctx_cpu *kcpu;
+       bool ret = false;
++      unsigned long flags;
+       preempt_disable();
+       kcpu = this_cpu_ptr(ctx->cpu);
++      local_irq_save(flags);
+       if (!kcpu->reqs_available) {
+               int old, avail = atomic_read(&ctx->reqs_available);
+@@ -869,6 +875,7 @@ static bool get_reqs_available(struct ki
+       ret = true;
+       kcpu->reqs_available--;
+ out:
++      local_irq_restore(flags);
+       preempt_enable();
+       return ret;
+ }
diff --git a/queue-3.15/arc-implement-ptrace-ptrace_get_thread_area.patch b/queue-3.15/arc-implement-ptrace-ptrace_get_thread_area.patch
new file mode 100644 (file)
index 0000000..3d745f2
--- /dev/null
@@ -0,0 +1,44 @@
+From a4b6cb735b25aa84a462a1985e3e43bebaf5beb4 Mon Sep 17 00:00:00 2001
+From: Anton Kolesov <Anton.Kolesov@synopsys.com>
+Date: Fri, 20 Jun 2014 20:28:39 +0400
+Subject: ARC: Implement ptrace(PTRACE_GET_THREAD_AREA)
+
+From: Anton Kolesov <Anton.Kolesov@synopsys.com>
+
+commit a4b6cb735b25aa84a462a1985e3e43bebaf5beb4 upstream.
+
+This patch adds implementation of GET_THREAD_AREA ptrace request type. This
+is required by GDB to debug NPTL applications.
+
+Signed-off-by: Anton Kolesov <Anton.Kolesov@synopsys.com>
+Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/arc/include/uapi/asm/ptrace.h |    1 +
+ arch/arc/kernel/ptrace.c           |    4 ++++
+ 2 files changed, 5 insertions(+)
+
+--- a/arch/arc/include/uapi/asm/ptrace.h
++++ b/arch/arc/include/uapi/asm/ptrace.h
+@@ -11,6 +11,7 @@
+ #ifndef _UAPI__ASM_ARC_PTRACE_H
+ #define _UAPI__ASM_ARC_PTRACE_H
++#define PTRACE_GET_THREAD_AREA        25
+ #ifndef __ASSEMBLY__
+ /*
+--- a/arch/arc/kernel/ptrace.c
++++ b/arch/arc/kernel/ptrace.c
+@@ -146,6 +146,10 @@ long arch_ptrace(struct task_struct *chi
+       pr_debug("REQ=%ld: ADDR =0x%lx, DATA=0x%lx)\n", request, addr, data);
+       switch (request) {
++      case PTRACE_GET_THREAD_AREA:
++              ret = put_user(task_thread_info(child)->thr_ptr,
++                             (unsigned long __user *)data);
++              break;
+       default:
+               ret = ptrace_request(child, request, addr, data);
+               break;
diff --git a/queue-3.15/arm-dts-imx-add-alias-for-ethernet-controller.patch b/queue-3.15/arm-dts-imx-add-alias-for-ethernet-controller.patch
new file mode 100644 (file)
index 0000000..3f3f88f
--- /dev/null
@@ -0,0 +1,107 @@
+From 22970070e027cbbb9b2878f8f7c31d0d7f29e94d Mon Sep 17 00:00:00 2001
+From: Marek Vasut <marex@denx.de>
+Date: Fri, 28 Feb 2014 12:58:41 +0100
+Subject: ARM: dts: imx: Add alias for ethernet controller
+
+From: Marek Vasut <marex@denx.de>
+
+commit 22970070e027cbbb9b2878f8f7c31d0d7f29e94d upstream.
+
+Add alias for FEC ethernet on i.MX to allow bootloaders (like U-Boot)
+patch-in the MAC address for FEC using this alias.
+
+Signed-off-by: Marek Vasut <marex@denx.de>
+Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/arm/boot/dts/imx25.dtsi   |    1 +
+ arch/arm/boot/dts/imx27.dtsi   |    1 +
+ arch/arm/boot/dts/imx35.dtsi   |    1 +
+ arch/arm/boot/dts/imx50.dtsi   |    1 +
+ arch/arm/boot/dts/imx51.dtsi   |    1 +
+ arch/arm/boot/dts/imx53.dtsi   |    1 +
+ arch/arm/boot/dts/imx6qdl.dtsi |    1 +
+ arch/arm/boot/dts/imx6sl.dtsi  |    1 +
+ 8 files changed, 8 insertions(+)
+
+--- a/arch/arm/boot/dts/imx25.dtsi
++++ b/arch/arm/boot/dts/imx25.dtsi
+@@ -14,6 +14,7 @@
+ / {
+       aliases {
++              ethernet0 = &fec;
+               gpio0 = &gpio1;
+               gpio1 = &gpio2;
+               gpio2 = &gpio3;
+--- a/arch/arm/boot/dts/imx27.dtsi
++++ b/arch/arm/boot/dts/imx27.dtsi
+@@ -16,6 +16,7 @@
+ / {
+       aliases {
++              ethernet0 = &fec;
+               gpio0 = &gpio1;
+               gpio1 = &gpio2;
+               gpio2 = &gpio3;
+--- a/arch/arm/boot/dts/imx35.dtsi
++++ b/arch/arm/boot/dts/imx35.dtsi
+@@ -13,6 +13,7 @@
+ / {
+       aliases {
++              ethernet0 = &fec;
+               gpio0 = &gpio1;
+               gpio1 = &gpio2;
+               gpio2 = &gpio3;
+--- a/arch/arm/boot/dts/imx50.dtsi
++++ b/arch/arm/boot/dts/imx50.dtsi
+@@ -17,6 +17,7 @@
+ / {
+       aliases {
++              ethernet0 = &fec;
+               gpio0 = &gpio1;
+               gpio1 = &gpio2;
+               gpio2 = &gpio3;
+--- a/arch/arm/boot/dts/imx51.dtsi
++++ b/arch/arm/boot/dts/imx51.dtsi
+@@ -19,6 +19,7 @@
+ / {
+       aliases {
++              ethernet0 = &fec;
+               gpio0 = &gpio1;
+               gpio1 = &gpio2;
+               gpio2 = &gpio3;
+--- a/arch/arm/boot/dts/imx53.dtsi
++++ b/arch/arm/boot/dts/imx53.dtsi
+@@ -18,6 +18,7 @@
+ / {
+       aliases {
++              ethernet0 = &fec;
+               gpio0 = &gpio1;
+               gpio1 = &gpio2;
+               gpio2 = &gpio3;
+--- a/arch/arm/boot/dts/imx6qdl.dtsi
++++ b/arch/arm/boot/dts/imx6qdl.dtsi
+@@ -16,6 +16,7 @@
+ / {
+       aliases {
++              ethernet0 = &fec;
+               can0 = &can1;
+               can1 = &can2;
+               gpio0 = &gpio1;
+--- a/arch/arm/boot/dts/imx6sl.dtsi
++++ b/arch/arm/boot/dts/imx6sl.dtsi
+@@ -14,6 +14,7 @@
+ / {
+       aliases {
++              ethernet0 = &fec;
+               gpio0 = &gpio1;
+               gpio1 = &gpio2;
+               gpio2 = &gpio3;
diff --git a/queue-3.15/don-t-trigger-congestion-wait-on-dirty-but-not-writeout-pages.patch b/queue-3.15/don-t-trigger-congestion-wait-on-dirty-but-not-writeout-pages.patch
new file mode 100644 (file)
index 0000000..9208fcd
--- /dev/null
@@ -0,0 +1,81 @@
+From b738d764652dc5aab1c8939f637112981fce9e0e Mon Sep 17 00:00:00 2001
+From: Linus Torvalds <torvalds@linux-foundation.org>
+Date: Sun, 8 Jun 2014 14:17:00 -0700
+Subject: Don't trigger congestion wait on dirty-but-not-writeout pages
+
+From: Linus Torvalds <torvalds@linux-foundation.org>
+
+commit b738d764652dc5aab1c8939f637112981fce9e0e upstream.
+
+shrink_inactive_list() used to wait 0.1s to avoid congestion when all
+the pages that were isolated from the inactive list were dirty but not
+under active writeback.  That makes no real sense, and apparently causes
+major interactivity issues under some loads since 3.11.
+
+The ostensible reason for it was to wait for kswapd to start writing
+pages, but that seems questionable as well, since the congestion wait
+code seems to trigger for kswapd itself as well.  Also, the logic behind
+delaying anything when we haven't actually started writeback is not
+clear - it only delays actually starting that writeback.
+
+We'll still trigger the congestion waiting if
+
+ (a) the process is kswapd, and we hit pages flagged for immediate
+     reclaim
+
+ (b) the process is not kswapd, and the zone backing dev writeback is
+     actually congested.
+
+This probably needs to be revisited, but as it is this fixes a reported
+regression.
+
+Reported-by: Felipe Contreras <felipe.contreras@gmail.com>
+Pinpointed-by: Hillf Danton <dhillf@gmail.com>
+Cc: Michal Hocko <mhocko@suse.cz>
+Cc: Andrew Morton <akpm@linux-foundation.org>
+Cc: Mel Gorman <mgorman@suse.de>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+[mhocko@suse.cz: backport to 3.12 stable tree]
+Fixes: e2be15f6c3ee ('mm: vmscan: stall page reclaim and writeback pages based on dirty/writepage pages encountered')
+Reported-by: Felipe Contreras <felipe.contreras@gmail.com>
+Pinpointed-by: Hillf Danton <dhillf@gmail.com>
+Cc: Michal Hocko <mhocko@suse.cz>
+Cc: Andrew Morton <akpm@linux-foundation.org>
+Cc: Mel Gorman <mgorman@suse.de>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Michal Hocko <mhocko@suse.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ mm/vmscan.c |   11 +++++------
+ 1 file changed, 5 insertions(+), 6 deletions(-)
+
+--- a/mm/vmscan.c
++++ b/mm/vmscan.c
+@@ -1554,19 +1554,18 @@ shrink_inactive_list(unsigned long nr_to
+                * If dirty pages are scanned that are not queued for IO, it
+                * implies that flushers are not keeping up. In this case, flag
+                * the zone ZONE_TAIL_LRU_DIRTY and kswapd will start writing
+-               * pages from reclaim context. It will forcibly stall in the
+-               * next check.
++               * pages from reclaim context.
+                */
+               if (nr_unqueued_dirty == nr_taken)
+                       zone_set_flag(zone, ZONE_TAIL_LRU_DIRTY);
+               /*
+-               * In addition, if kswapd scans pages marked marked for
+-               * immediate reclaim and under writeback (nr_immediate), it
+-               * implies that pages are cycling through the LRU faster than
++               * If kswapd scans pages marked marked for immediate
++               * reclaim and under writeback (nr_immediate), it implies
++               * that pages are cycling through the LRU faster than
+                * they are written so also forcibly stall.
+                */
+-              if (nr_unqueued_dirty == nr_taken || nr_immediate)
++              if (nr_immediate)
+                       congestion_wait(BLK_RW_ASYNC, HZ/10);
+       }
diff --git a/queue-3.15/gpio-dwapb-drop-irq_setup_generic_chip.patch b/queue-3.15/gpio-dwapb-drop-irq_setup_generic_chip.patch
new file mode 100644 (file)
index 0000000..bbe2583
--- /dev/null
@@ -0,0 +1,37 @@
+From 11d3d334af07408ce3a68860c40006ddcd343da5 Mon Sep 17 00:00:00 2001
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Mon, 7 Apr 2014 12:13:05 +0200
+Subject: gpio: dwapb: drop irq_setup_generic_chip()
+
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+
+commit 11d3d334af07408ce3a68860c40006ddcd343da5 upstream.
+
+The driver calls irq_alloc_domain_generic_chips() which creates a gc and
+adds it to gc_list. The driver later then calls irq_setup_generic_chip()
+which also initializes the gc and adds it to the gc_list() and this
+corrupts the list. Enable LIST_DEBUG and you see the kernel complain.
+This isn't required, irq_alloc_domain_generic_chips() did the init.
+
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Tested-by: Alan Tull <delicious.quinoa@gmail.com>
+Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
+Signed-off-by: dann frazier <dann.frazier@canonical.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpio/gpio-dwapb.c |    3 ---
+ 1 file changed, 3 deletions(-)
+
+--- a/drivers/gpio/gpio-dwapb.c
++++ b/drivers/gpio/gpio-dwapb.c
+@@ -260,9 +260,6 @@ static void dwapb_configure_irqs(struct
+       ct->regs.ack = GPIO_PORTA_EOI;
+       ct->regs.mask = GPIO_INTMASK;
+-      irq_setup_generic_chip(irq_gc, IRQ_MSK(port->bgc.gc.ngpio),
+-                      IRQ_GC_INIT_NESTED_LOCK, IRQ_NOREQUEST, 0);
+-
+       irq_set_chained_handler(irq, dwapb_irq_handler);
+       irq_set_handler_data(irq, gpio);
diff --git a/queue-3.15/ib-mlx5-enable-block-multicast-loopback-for-kernel-consumers.patch b/queue-3.15/ib-mlx5-enable-block-multicast-loopback-for-kernel-consumers.patch
new file mode 100644 (file)
index 0000000..22117f9
--- /dev/null
@@ -0,0 +1,35 @@
+From 652c1a05171695d21b84dd3a723606b50eeb80fd Mon Sep 17 00:00:00 2001
+From: Or Gerlitz <ogerlitz@mellanox.com>
+Date: Wed, 25 Jun 2014 16:44:14 +0300
+Subject: IB/mlx5: Enable "block multicast loopback" for kernel consumers
+
+From: Or Gerlitz <ogerlitz@mellanox.com>
+
+commit 652c1a05171695d21b84dd3a723606b50eeb80fd upstream.
+
+In commit f360d88a2efd, we advertise blocking multicast loopback to both
+kernel and userspace consumers, but don't allow kernel consumers (e.g IPoIB)
+to use it with their UD QPs.  Fix that.
+
+Fixes: f360d88a2efd ("IB/mlx5: Add block multicast loopback support")
+Reported-by: Haggai Eran <haggaie@mellanox.com>
+Signed-off-by: Eli Cohen <eli@mellanox.com>
+Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com>
+Signed-off-by: Roland Dreier <roland@purestorage.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/infiniband/hw/mlx5/qp.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/infiniband/hw/mlx5/qp.c
++++ b/drivers/infiniband/hw/mlx5/qp.c
+@@ -671,7 +671,7 @@ static int create_kernel_qp(struct mlx5_
+       int err;
+       uuari = &dev->mdev.priv.uuari;
+-      if (init_attr->create_flags & ~IB_QP_CREATE_SIGNATURE_EN)
++      if (init_attr->create_flags & ~(IB_QP_CREATE_SIGNATURE_EN | IB_QP_CREATE_BLOCK_MULTICAST_LOOPBACK))
+               return -EINVAL;
+       if (init_attr->qp_type == MLX5_IB_QPT_REG_UMR)
diff --git a/queue-3.15/iwlwifi-mvm-disable-cts-to-self.patch b/queue-3.15/iwlwifi-mvm-disable-cts-to-self.patch
new file mode 100644 (file)
index 0000000..8afbf19
--- /dev/null
@@ -0,0 +1,40 @@
+From dc271ee0d04d12d6bfabacbec803289a7072fbd9 Mon Sep 17 00:00:00 2001
+From: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
+Date: Thu, 3 Jul 2014 20:46:35 +0300
+Subject: iwlwifi: mvm: disable CTS to Self
+
+From: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
+
+commit dc271ee0d04d12d6bfabacbec803289a7072fbd9 upstream.
+
+Firmware folks seem say that this flag can make trouble.
+Drop it. The advantage of CTS to self is that it slightly
+reduces the cost of the protection, but make the protection
+less reliable.
+
+Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+
+---
+ drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c |    8 ++------
+ 1 file changed, 2 insertions(+), 6 deletions(-)
+
+--- a/drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c
++++ b/drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c
+@@ -667,13 +667,9 @@ static void iwl_mvm_mac_ctxt_cmd_common(
+       if (vif->bss_conf.qos)
+               cmd->qos_flags |= cpu_to_le32(MAC_QOS_FLG_UPDATE_EDCA);
+-      /* Don't use cts to self as the fw doesn't support it currently. */
+-      if (vif->bss_conf.use_cts_prot) {
++      if (vif->bss_conf.use_cts_prot)
+               cmd->protection_flags |= cpu_to_le32(MAC_PROT_FLG_TGG_PROTECT);
+-              if (IWL_UCODE_API(mvm->fw->ucode_ver) >= 8)
+-                      cmd->protection_flags |=
+-                              cpu_to_le32(MAC_PROT_FLG_SELF_CTS_EN);
+-      }
++
+       IWL_DEBUG_RATE(mvm, "use_cts_prot %d, ht_operation_mode %d\n",
+                      vif->bss_conf.use_cts_prot,
+                      vif->bss_conf.ht_operation_mode);
diff --git a/queue-3.15/sched-fix-possible-divide-by-zero-in-avg_atom-calculation.patch b/queue-3.15/sched-fix-possible-divide-by-zero-in-avg_atom-calculation.patch
new file mode 100644 (file)
index 0000000..6c340aa
--- /dev/null
@@ -0,0 +1,44 @@
+From b0ab99e7736af88b8ac1b7ae50ea287fffa2badc Mon Sep 17 00:00:00 2001
+From: Mateusz Guzik <mguzik@redhat.com>
+Date: Sat, 14 Jun 2014 15:00:09 +0200
+Subject: sched: Fix possible divide by zero in avg_atom() calculation
+
+From: Mateusz Guzik <mguzik@redhat.com>
+
+commit b0ab99e7736af88b8ac1b7ae50ea287fffa2badc upstream.
+
+proc_sched_show_task() does:
+
+  if (nr_switches)
+       do_div(avg_atom, nr_switches);
+
+nr_switches is unsigned long and do_div truncates it to 32 bits, which
+means it can test non-zero on e.g. x86-64 and be truncated to zero for
+division.
+
+Fix the problem by using div64_ul() instead.
+
+As a side effect calculations of avg_atom for big nr_switches are now correct.
+
+Signed-off-by: Mateusz Guzik <mguzik@redhat.com>
+Signed-off-by: Peter Zijlstra <peterz@infradead.org>
+Cc: Linus Torvalds <torvalds@linux-foundation.org>
+Link: http://lkml.kernel.org/r/1402750809-31991-1-git-send-email-mguzik@redhat.com
+Signed-off-by: Ingo Molnar <mingo@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ kernel/sched/debug.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/kernel/sched/debug.c
++++ b/kernel/sched/debug.c
+@@ -608,7 +608,7 @@ void proc_sched_show_task(struct task_st
+               avg_atom = p->se.sum_exec_runtime;
+               if (nr_switches)
+-                      do_div(avg_atom, nr_switches);
++                      avg_atom = div64_ul(avg_atom, nr_switches);
+               else
+                       avg_atom = -1LL;
index 400d9d9dde9583e6825727bb426acc34c3e345d1..8d5ca80d90a1c1a480dcfb4fee87223396954659 100644 (file)
@@ -98,3 +98,12 @@ dm-cache-metadata-do-not-allow-the-data-block-size-to-change.patch
 rdma-cxgb4-initialize-the-device-status-page.patch
 pm-sleep-fix-request_firmware-error-at-resume.patch
 locking-mutex-disable-optimistic-spinning-on-some-architectures.patch
+sched-fix-possible-divide-by-zero-in-avg_atom-calculation.patch
+x86-efi-include-a-.bss-section-within-the-pe-coff-headers.patch
+ib-mlx5-enable-block-multicast-loopback-for-kernel-consumers.patch
+aio-protect-reqs_available-updates-from-changes-in-interrupt-handlers.patch
+gpio-dwapb-drop-irq_setup_generic_chip.patch
+arm-dts-imx-add-alias-for-ethernet-controller.patch
+iwlwifi-mvm-disable-cts-to-self.patch
+don-t-trigger-congestion-wait-on-dirty-but-not-writeout-pages.patch
+arc-implement-ptrace-ptrace_get_thread_area.patch
diff --git a/queue-3.15/x86-efi-include-a-.bss-section-within-the-pe-coff-headers.patch b/queue-3.15/x86-efi-include-a-.bss-section-within-the-pe-coff-headers.patch
new file mode 100644 (file)
index 0000000..76b643a
--- /dev/null
@@ -0,0 +1,179 @@
+From c7fb93ec51d462ec3540a729ba446663c26a0505 Mon Sep 17 00:00:00 2001
+From: Michael Brown <mbrown@fensystems.co.uk>
+Date: Thu, 10 Jul 2014 12:26:20 +0100
+Subject: x86/efi: Include a .bss section within the PE/COFF headers
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Michael Brown <mbrown@fensystems.co.uk>
+
+commit c7fb93ec51d462ec3540a729ba446663c26a0505 upstream.
+
+The PE/COFF headers currently describe only the initialised-data
+portions of the image, and result in no space being allocated for the
+uninitialised-data portions.  Consequently, the EFI boot stub will end
+up overwriting unexpected areas of memory, with unpredictable results.
+
+Fix by including a .bss section in the PE/COFF headers (functionally
+equivalent to the init_size field in the bzImage header).
+
+Signed-off-by: Michael Brown <mbrown@fensystems.co.uk>
+Cc: Thomas Bächler <thomas@archlinux.org>
+Cc: Josh Boyer <jwboyer@fedoraproject.org>
+Signed-off-by: Matt Fleming <matt.fleming@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/x86/boot/header.S      |   26 ++++++++++++++++++++++----
+ arch/x86/boot/tools/build.c |   38 ++++++++++++++++++++++++++++++--------
+ 2 files changed, 52 insertions(+), 12 deletions(-)
+
+--- a/arch/x86/boot/header.S
++++ b/arch/x86/boot/header.S
+@@ -91,10 +91,9 @@ bs_die:
+       .section ".bsdata", "a"
+ bugger_off_msg:
+-      .ascii  "Direct floppy boot is not supported. "
+-      .ascii  "Use a boot loader program instead.\r\n"
++      .ascii  "Use a boot loader.\r\n"
+       .ascii  "\n"
+-      .ascii  "Remove disk and press any key to reboot ...\r\n"
++      .ascii  "Remove disk and press any key to reboot...\r\n"
+       .byte   0
+ #ifdef CONFIG_EFI_STUB
+@@ -108,7 +107,7 @@ coff_header:
+ #else
+       .word   0x8664                          # x86-64
+ #endif
+-      .word   3                               # nr_sections
++      .word   4                               # nr_sections
+       .long   0                               # TimeDateStamp
+       .long   0                               # PointerToSymbolTable
+       .long   1                               # NumberOfSymbols
+@@ -250,6 +249,25 @@ section_table:
+       .word   0                               # NumberOfLineNumbers
+       .long   0x60500020                      # Characteristics (section flags)
++      #
++      # The offset & size fields are filled in by build.c.
++      #
++      .ascii  ".bss"
++      .byte   0
++      .byte   0
++      .byte   0
++      .byte   0
++      .long   0
++      .long   0x0
++      .long   0                               # Size of initialized data
++                                              # on disk
++      .long   0x0
++      .long   0                               # PointerToRelocations
++      .long   0                               # PointerToLineNumbers
++      .word   0                               # NumberOfRelocations
++      .word   0                               # NumberOfLineNumbers
++      .long   0xc8000080                      # Characteristics (section flags)
++
+ #endif /* CONFIG_EFI_STUB */
+       # Kernel attributes; used by setup.  This is part 1 of the
+--- a/arch/x86/boot/tools/build.c
++++ b/arch/x86/boot/tools/build.c
+@@ -143,7 +143,7 @@ static void usage(void)
+ #ifdef CONFIG_EFI_STUB
+-static void update_pecoff_section_header(char *section_name, u32 offset, u32 size)
++static void update_pecoff_section_header_fields(char *section_name, u32 vma, u32 size, u32 datasz, u32 offset)
+ {
+       unsigned int pe_header;
+       unsigned short num_sections;
+@@ -164,10 +164,10 @@ static void update_pecoff_section_header
+                       put_unaligned_le32(size, section + 0x8);
+                       /* section header vma field */
+-                      put_unaligned_le32(offset, section + 0xc);
++                      put_unaligned_le32(vma, section + 0xc);
+                       /* section header 'size of initialised data' field */
+-                      put_unaligned_le32(size, section + 0x10);
++                      put_unaligned_le32(datasz, section + 0x10);
+                       /* section header 'file offset' field */
+                       put_unaligned_le32(offset, section + 0x14);
+@@ -179,6 +179,11 @@ static void update_pecoff_section_header
+       }
+ }
++static void update_pecoff_section_header(char *section_name, u32 offset, u32 size)
++{
++      update_pecoff_section_header_fields(section_name, offset, size, size, offset);
++}
++
+ static void update_pecoff_setup_and_reloc(unsigned int size)
+ {
+       u32 setup_offset = 0x200;
+@@ -203,9 +208,6 @@ static void update_pecoff_text(unsigned
+       pe_header = get_unaligned_le32(&buf[0x3c]);
+-      /* Size of image */
+-      put_unaligned_le32(file_sz, &buf[pe_header + 0x50]);
+-
+       /*
+        * Size of code: Subtract the size of the first sector (512 bytes)
+        * which includes the header.
+@@ -220,6 +222,22 @@ static void update_pecoff_text(unsigned
+       update_pecoff_section_header(".text", text_start, text_sz);
+ }
++static void update_pecoff_bss(unsigned int file_sz, unsigned int init_sz)
++{
++      unsigned int pe_header;
++      unsigned int bss_sz = init_sz - file_sz;
++
++      pe_header = get_unaligned_le32(&buf[0x3c]);
++
++      /* Size of uninitialized data */
++      put_unaligned_le32(bss_sz, &buf[pe_header + 0x24]);
++
++      /* Size of image */
++      put_unaligned_le32(init_sz, &buf[pe_header + 0x50]);
++
++      update_pecoff_section_header_fields(".bss", file_sz, bss_sz, 0, 0);
++}
++
+ static int reserve_pecoff_reloc_section(int c)
+ {
+       /* Reserve 0x20 bytes for .reloc section */
+@@ -259,6 +277,8 @@ static void efi_stub_entry_update(void)
+ static inline void update_pecoff_setup_and_reloc(unsigned int size) {}
+ static inline void update_pecoff_text(unsigned int text_start,
+                                     unsigned int file_sz) {}
++static inline void update_pecoff_bss(unsigned int file_sz,
++                                   unsigned int init_sz) {}
+ static inline void efi_stub_defaults(void) {}
+ static inline void efi_stub_entry_update(void) {}
+@@ -310,7 +330,7 @@ static void parse_zoffset(char *fname)
+ int main(int argc, char ** argv)
+ {
+-      unsigned int i, sz, setup_sectors;
++      unsigned int i, sz, setup_sectors, init_sz;
+       int c;
+       u32 sys_size;
+       struct stat sb;
+@@ -376,7 +396,9 @@ int main(int argc, char ** argv)
+       buf[0x1f1] = setup_sectors-1;
+       put_unaligned_le32(sys_size, &buf[0x1f4]);
+-      update_pecoff_text(setup_sectors * 512, sz + i + ((sys_size * 16) - sz));
++      update_pecoff_text(setup_sectors * 512, i + (sys_size * 16));
++      init_sz = get_unaligned_le32(&buf[0x260]);
++      update_pecoff_bss(i + (sys_size * 16), init_sz);
+       efi_stub_entry_update();