--- /dev/null
+From 0e5585dc870af947fab2af96a88c2d8b4270247c Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Mon, 28 Mar 2016 10:21:20 -0400
+Subject: drm/radeon: add a dpm quirk for all R7 370 parts
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit 0e5585dc870af947fab2af96a88c2d8b4270247c upstream.
+
+Higher mclk values are not stable due to a bug somewhere.
+Limit them for now.
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/radeon/si_dpm.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- a/drivers/gpu/drm/radeon/si_dpm.c
++++ b/drivers/gpu/drm/radeon/si_dpm.c
+@@ -3007,6 +3007,10 @@ static void si_apply_state_adjust_rules(
+ ps->performance_levels[i].sclk = max_sclk;
+ }
+ }
++ /* limit mclk on all R7 370 parts for stability */
++ if (rdev->pdev->device == 0x6811 &&
++ rdev->pdev->revision == 0x81)
++ max_mclk = 120000;
+
+ /* XXX validate the min clocks required for display */
+
--- /dev/null
+From f971f2263deaa4a441e377b385c11aee0f3b3f9a Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Fri, 25 Mar 2016 10:31:04 -0400
+Subject: drm/radeon: add a dpm quirk for sapphire Dual-X R7 370 2G D5
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit f971f2263deaa4a441e377b385c11aee0f3b3f9a upstream.
+
+bug:
+https://bugs.freedesktop.org/show_bug.cgi?id=94692
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/radeon/si_dpm.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/gpu/drm/radeon/si_dpm.c
++++ b/drivers/gpu/drm/radeon/si_dpm.c
+@@ -2914,6 +2914,7 @@ static struct si_dpm_quirk si_dpm_quirk_
+ /* PITCAIRN - https://bugs.freedesktop.org/show_bug.cgi?id=76490 */
+ { PCI_VENDOR_ID_ATI, 0x6810, 0x1462, 0x3036, 0, 120000 },
+ { PCI_VENDOR_ID_ATI, 0x6811, 0x174b, 0xe271, 0, 120000 },
++ { PCI_VENDOR_ID_ATI, 0x6811, 0x174b, 0x2015, 0, 120000 },
+ { PCI_VENDOR_ID_ATI, 0x6810, 0x174b, 0xe271, 85000, 90000 },
+ { 0, 0, 0, 0 },
+ };
parisc-fix-kernel-crash-with-reversed-copy_from_user.patch
alsa-timer-use-mod_timer-for-rearming-the-system-timer.patch
mm-fix-invalid-node-in-alloc_migrate_target.patch
+drm-radeon-add-a-dpm-quirk-for-sapphire-dual-x-r7-370-2g-d5.patch
+drm-radeon-add-a-dpm-quirk-for-all-r7-370-parts.patch
+xen-events-mask-a-moving-irq.patch
--- /dev/null
+From ff1e22e7a638a0782f54f81a6c9cb139aca2da35 Mon Sep 17 00:00:00 2001
+From: Boris Ostrovsky <boris.ostrovsky@oracle.com>
+Date: Fri, 18 Mar 2016 10:11:07 -0400
+Subject: xen/events: Mask a moving irq
+
+From: Boris Ostrovsky <boris.ostrovsky@oracle.com>
+
+commit ff1e22e7a638a0782f54f81a6c9cb139aca2da35 upstream.
+
+Moving an unmasked irq may result in irq handler being invoked on both
+source and target CPUs.
+
+With 2-level this can happen as follows:
+
+On source CPU:
+ evtchn_2l_handle_events() ->
+ generic_handle_irq() ->
+ handle_edge_irq() ->
+ eoi_pirq():
+ irq_move_irq(data);
+
+ /***** WE ARE HERE *****/
+
+ if (VALID_EVTCHN(evtchn))
+ clear_evtchn(evtchn);
+
+If at this moment target processor is handling an unrelated event in
+evtchn_2l_handle_events()'s loop it may pick up our event since target's
+cpu_evtchn_mask claims that this event belongs to it *and* the event is
+unmasked and still pending. At the same time, source CPU will continue
+executing its own handle_edge_irq().
+
+With FIFO interrupt the scenario is similar: irq_move_irq() may result
+in a EVTCHNOP_unmask hypercall which, in turn, may make the event
+pending on the target CPU.
+
+We can avoid this situation by moving and clearing the event while
+keeping event masked.
+
+Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
+Signed-off-by: David Vrabel <david.vrabel@citrix.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/xen/events/events_base.c | 28 ++++++++++++++++++++++++----
+ 1 file changed, 24 insertions(+), 4 deletions(-)
+
+--- a/drivers/xen/events/events_base.c
++++ b/drivers/xen/events/events_base.c
+@@ -503,9 +503,19 @@ static void eoi_pirq(struct irq_data *da
+ struct physdev_eoi eoi = { .irq = pirq_from_irq(data->irq) };
+ int rc = 0;
+
+- irq_move_irq(data);
++ if (!VALID_EVTCHN(evtchn))
++ return;
+
+- if (VALID_EVTCHN(evtchn))
++ if (unlikely(irqd_is_setaffinity_pending(data))) {
++ int masked = test_and_set_mask(evtchn);
++
++ clear_evtchn(evtchn);
++
++ irq_move_masked_irq(data);
++
++ if (!masked)
++ unmask_evtchn(evtchn);
++ } else
+ clear_evtchn(evtchn);
+
+ if (pirq_needs_eoi(data->irq)) {
+@@ -1395,9 +1405,19 @@ static void ack_dynirq(struct irq_data *
+ {
+ int evtchn = evtchn_from_irq(data->irq);
+
+- irq_move_irq(data);
++ if (!VALID_EVTCHN(evtchn))
++ return;
+
+- if (VALID_EVTCHN(evtchn))
++ if (unlikely(irqd_is_setaffinity_pending(data))) {
++ int masked = test_and_set_mask(evtchn);
++
++ clear_evtchn(evtchn);
++
++ irq_move_masked_irq(data);
++
++ if (!masked)
++ unmask_evtchn(evtchn);
++ } else
+ clear_evtchn(evtchn);
+ }
+