cpupowertools add.
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+64
@@ -0,0 +1,64 @@
|
||||
From 16d917b130d782b94fa02afc7bdf0d4aae689da4 Mon Sep 17 00:00:00 2001
|
||||
From: Bjorn Helgaas <bhelgaas@google.com>
|
||||
Date: Tue, 8 Nov 2016 14:25:24 -0600
|
||||
Subject: [PATCH] PCI: Don't attempt to claim shadow copies of ROM
|
||||
|
||||
If we're using a shadow copy of a PCI device ROM, the shadow copy is in RAM
|
||||
and the device never sees accesses to it and doesn't respond to it. We
|
||||
don't have to route the shadow range to the PCI device, and the device
|
||||
doesn't have to claim the range.
|
||||
|
||||
Previously we treated the shadow copy as though it were the ROM BAR, and we
|
||||
failed to claim it because the region wasn't routed to the device:
|
||||
|
||||
pci 0000:01:00.0: Video device with shadowed ROM at [mem 0x000c0000-0x000dffff]
|
||||
pci_bus 0000:01: Allocating resources
|
||||
pci 0000:01:00.0: can't claim BAR 6 [mem 0x000c0000-0x000dffff]: no compatible bridge window
|
||||
|
||||
The failure path of pcibios_allocate_dev_rom_resource() cleared out the
|
||||
resource start address, which also caused the following ioremap() warning:
|
||||
|
||||
WARNING: CPU: 0 PID: 116 at /build/linux-akdJXO/linux-4.8.0/arch/x86/mm/ioremap.c:121 __ioremap_caller+0x1ec/0x370
|
||||
ioremap on RAM at 0x0000000000000000 - 0x000000000001ffff
|
||||
|
||||
Handle an option ROM shadow copy as RAM, without trying to insert it into
|
||||
the iomem resource tree.
|
||||
|
||||
This fixes a regression caused by 0c0e0736acad ("PCI: Set ROM shadow
|
||||
location in arch code, not in PCI core"), which appeared in v4.6. The
|
||||
regression causes video device initialization to fail. This was reported
|
||||
on AMD Turks, but it likely affects others as well.
|
||||
|
||||
Fixes: 0c0e0736acad ("PCI: Set ROM shadow location in arch code, not in PCI core")
|
||||
Reported-and-tested-by: Vecu Bosseur <vecu.bosseur@gmail.com>
|
||||
Link: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1627496
|
||||
Link: https://bugzilla.kernel.org/show_bug.cgi?id=175391
|
||||
Link: https://bugzilla.redhat.com/show_bug.cgi?id=1352272
|
||||
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
|
||||
CC: stable@vger.kernel.org # v4.6+
|
||||
---
|
||||
drivers/pci/setup-res.c | 8 ++++++++
|
||||
1 file changed, 8 insertions(+)
|
||||
|
||||
diff --git a/drivers/pci/setup-res.c b/drivers/pci/setup-res.c
|
||||
index 66c4d8f..9526e34 100644
|
||||
--- a/drivers/pci/setup-res.c
|
||||
+++ b/drivers/pci/setup-res.c
|
||||
@@ -121,6 +121,14 @@ int pci_claim_resource(struct pci_dev *dev, int resource)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
+ /*
|
||||
+ * If we have a shadow copy in RAM, the PCI device doesn't respond
|
||||
+ * to the shadow range, so we don't need to claim it, and upstream
|
||||
+ * bridges don't need to route the range to the device.
|
||||
+ */
|
||||
+ if (res->flags & IORESOURCE_ROM_SHADOW)
|
||||
+ return 0;
|
||||
+
|
||||
root = pci_find_parent_resource(dev, res);
|
||||
if (!root) {
|
||||
dev_info(&dev->dev, "can't claim BAR %d %pR: no compatible bridge window\n",
|
||||
--
|
||||
2.10.2
|
||||
|
||||
-39
@@ -1,39 +0,0 @@
|
||||
From 5c33677c87cbe44ae04df69c4a29c1750a9ec4e5 Mon Sep 17 00:00:00 2001
|
||||
From: Andy Whitcroft <apw@canonical.com>
|
||||
Date: Tue, 11 Oct 2016 15:16:57 +0100
|
||||
Subject: [PATCH] dm raid: fix compat_features validation
|
||||
|
||||
In ecbfb9f118bce4 ("dm raid: add raid level takeover support") a new
|
||||
compatible feature flag was added. Validation for these compat_features
|
||||
was added but this only passes for new raid mappings with this feature
|
||||
flag. This causes previously created raid mappings to be failed at
|
||||
import.
|
||||
|
||||
Check compat_features for the only valid combination.
|
||||
|
||||
Fixes: ecbfb9f118bce4 ("dm raid: add raid level takeover support")
|
||||
Cc: stable@vger.kernel.org # v4.8
|
||||
Signed-off-by: Andy Whitcroft <apw@canonical.com>
|
||||
Signed-off-by: Heinz Mauelshagen <heinzm@redhat.com>
|
||||
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
|
||||
---
|
||||
drivers/md/dm-raid.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/md/dm-raid.c b/drivers/md/dm-raid.c
|
||||
index 8abde6b..2a39700 100644
|
||||
--- a/drivers/md/dm-raid.c
|
||||
+++ b/drivers/md/dm-raid.c
|
||||
@@ -2258,7 +2258,8 @@ static int super_validate(struct raid_set *rs, struct md_rdev *rdev)
|
||||
if (!mddev->events && super_init_validation(rs, rdev))
|
||||
return -EINVAL;
|
||||
|
||||
- if (le32_to_cpu(sb->compat_features) != FEATURE_FLAG_SUPPORTS_V190) {
|
||||
+ if (le32_to_cpu(sb->compat_features) &&
|
||||
+ le32_to_cpu(sb->compat_features) != FEATURE_FLAG_SUPPORTS_V190) {
|
||||
rs->ti->error = "Unable to assemble array: Unknown flag(s) in compatible feature flags";
|
||||
return -EINVAL;
|
||||
}
|
||||
--
|
||||
2.10.1
|
||||
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
From 757124d95c42bb579d67df51e51789849929ee31 Mon Sep 17 00:00:00 2001
|
||||
From: Alex Deucher <alexander.deucher@amd.com>
|
||||
Date: Thu, 3 Nov 2016 17:47:51 -0400
|
||||
Subject: [PATCH] drm/amdgpu: fix crash in acp_hw_fini
|
||||
|
||||
On CZ/ST systems with AZ rather than ACP audio, we need to bail
|
||||
early in hw_fini since there is nothing to do.
|
||||
|
||||
bug: https://bugs.freedesktop.org/show_bug.cgi?id=98276
|
||||
|
||||
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
|
||||
Cc: stable@vger.kernel.org
|
||||
---
|
||||
drivers/gpu/drm/amd/amdgpu/amdgpu_acp.c | 5 ++++-
|
||||
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_acp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_acp.c
|
||||
index 892d60f..2057683 100644
|
||||
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_acp.c
|
||||
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_acp.c
|
||||
@@ -395,9 +395,12 @@ static int acp_hw_fini(void *handle)
|
||||
{
|
||||
int i, ret;
|
||||
struct device *dev;
|
||||
-
|
||||
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
|
||||
|
||||
+ /* return early if no ACP */
|
||||
+ if (!adev->acp.acp_genpd)
|
||||
+ return 0;
|
||||
+
|
||||
for (i = 0; i < ACP_DEVS ; i++) {
|
||||
dev = get_mfd_cell_dev(adev->acp.acp_cell[i].name, i);
|
||||
ret = pm_genpd_remove_device(&adev->acp.acp_genpd->gpd, dev);
|
||||
--
|
||||
2.10.2
|
||||
|
||||
+88
@@ -0,0 +1,88 @@
|
||||
From fbb21c5202ae7f1e71e832b1af59fb047da6383e Mon Sep 17 00:00:00 2001
|
||||
From: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
|
||||
Date: Tue, 1 Nov 2016 11:47:59 -0700
|
||||
Subject: [PATCH] drm/i915/dp: BDW cdclk fix for DP audio
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
According to BSpec, cdclk for BDW has to be not less than 432 MHz with DP
|
||||
audio enabled, port width x4, and link rate HBR2 (5.4 GHz). With cdclk less
|
||||
than 432 MHz, enabling audio leads to pipe FIFO underruns and displays
|
||||
cycling on/off.
|
||||
|
||||
From BSpec:
|
||||
"Display» BDW-SKL» dpr» [Register] DP_TP_CTL [BDW+,EXCLUDE(CHV)]
|
||||
Workaround : Do not use DisplayPort with CDCLK less than 432 MHz, audio
|
||||
enabled, port width x4, and link rate HBR2 (5.4 GHz), or else there may
|
||||
be audio corruption or screen corruption."
|
||||
|
||||
Since, some DP configurations (e.g., MST) use port width x4 and HBR2
|
||||
link rate, let's increase the cdclk to >= 432 MHz to enable audio for those
|
||||
cases.
|
||||
|
||||
v4: Changed commit message
|
||||
v3: Combine BDW pixel rate adjustments into a function (Jani)
|
||||
v2: Restrict fix to BDW
|
||||
Retain the set cdclk across modesets (Ville)
|
||||
Cc: stable@vger.kernel.org
|
||||
Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
|
||||
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
|
||||
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
|
||||
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
|
||||
Link: http://patchwork.freedesktop.org/patch/msgid/1478026080-2925-1-git-send-email-dhinakaran.pandiyan@intel.com
|
||||
|
||||
(cherry picked from commit b30ce9e0552aa017ac6f2243f3c2d8e36fe52e69)
|
||||
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
|
||||
---
|
||||
drivers/gpu/drm/i915/intel_display.c | 27 ++++++++++++++++++++++++---
|
||||
1 file changed, 24 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
|
||||
index 0ad1879..4f57f8c 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_display.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_display.c
|
||||
@@ -10243,6 +10243,27 @@ static void bxt_modeset_commit_cdclk(struct drm_atomic_state *old_state)
|
||||
bxt_set_cdclk(to_i915(dev), req_cdclk);
|
||||
}
|
||||
|
||||
+static int bdw_adjust_min_pipe_pixel_rate(struct intel_crtc_state *crtc_state,
|
||||
+ int pixel_rate)
|
||||
+{
|
||||
+ /* pixel rate mustn't exceed 95% of cdclk with IPS on BDW */
|
||||
+ if (crtc_state->ips_enabled)
|
||||
+ pixel_rate = DIV_ROUND_UP(pixel_rate * 100, 95);
|
||||
+
|
||||
+ /* BSpec says "Do not use DisplayPort with CDCLK less than
|
||||
+ * 432 MHz, audio enabled, port width x4, and link rate
|
||||
+ * HBR2 (5.4 GHz), or else there may be audio corruption or
|
||||
+ * screen corruption."
|
||||
+ */
|
||||
+ if (intel_crtc_has_dp_encoder(crtc_state) &&
|
||||
+ crtc_state->has_audio &&
|
||||
+ crtc_state->port_clock >= 540000 &&
|
||||
+ crtc_state->lane_count == 4)
|
||||
+ pixel_rate = max(432000, pixel_rate);
|
||||
+
|
||||
+ return pixel_rate;
|
||||
+}
|
||||
+
|
||||
/* compute the max rate for new configuration */
|
||||
static int ilk_max_pixel_rate(struct drm_atomic_state *state)
|
||||
{
|
||||
@@ -10268,9 +10289,9 @@ static int ilk_max_pixel_rate(struct drm_atomic_state *state)
|
||||
|
||||
pixel_rate = ilk_pipe_pixel_rate(crtc_state);
|
||||
|
||||
- /* pixel rate mustn't exceed 95% of cdclk with IPS on BDW */
|
||||
- if (IS_BROADWELL(dev_priv) && crtc_state->ips_enabled)
|
||||
- pixel_rate = DIV_ROUND_UP(pixel_rate * 100, 95);
|
||||
+ if (IS_BROADWELL(dev_priv))
|
||||
+ pixel_rate = bdw_adjust_min_pipe_pixel_rate(crtc_state,
|
||||
+ pixel_rate);
|
||||
|
||||
intel_state->min_pixclk[i] = pixel_rate;
|
||||
}
|
||||
--
|
||||
2.10.2
|
||||
|
||||
+56
@@ -0,0 +1,56 @@
|
||||
From 61e0c5438866d0e737937fc35d752538960e1e9f Mon Sep 17 00:00:00 2001
|
||||
From: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
|
||||
Date: Wed, 2 Nov 2016 13:13:21 -0700
|
||||
Subject: [PATCH] drm/i915/dp: Extend BDW DP audio workaround to GEN9 platforms
|
||||
|
||||
According to BSpec, cdclk for BDW has to be not less than 432 MHz with DP
|
||||
audio enabled, port width x4, and link rate HBR2 (5.4 GHz). With cdclk less
|
||||
than 432 MHz, enabling audio leads to pipe FIFO underruns and displays
|
||||
cycling on/off.
|
||||
|
||||
Let's apply this work around to GEN9 platforms too, as it fixes the same
|
||||
issue.
|
||||
|
||||
v2: Move drm_device to drm_i915_private conversion
|
||||
|
||||
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97907
|
||||
Cc: stable@vger.kernel.org
|
||||
Cc: Libin Yang <libin.yang@linux.intel.com>
|
||||
Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
|
||||
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
|
||||
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
|
||||
Link: http://patchwork.freedesktop.org/patch/msgid/1478117601-19122-1-git-send-email-dhinakaran.pandiyan@intel.com
|
||||
(cherry picked from commit 9c7540241885838cfc7fa58c4a8bd75be0303ed1)
|
||||
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
|
||||
---
|
||||
drivers/gpu/drm/i915/intel_display.c | 6 ++++--
|
||||
1 file changed, 4 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
|
||||
index 4f57f8c..81c1149 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_display.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_display.c
|
||||
@@ -10246,8 +10246,10 @@ static void bxt_modeset_commit_cdclk(struct drm_atomic_state *old_state)
|
||||
static int bdw_adjust_min_pipe_pixel_rate(struct intel_crtc_state *crtc_state,
|
||||
int pixel_rate)
|
||||
{
|
||||
+ struct drm_i915_private *dev_priv = to_i915(crtc_state->base.crtc->dev);
|
||||
+
|
||||
/* pixel rate mustn't exceed 95% of cdclk with IPS on BDW */
|
||||
- if (crtc_state->ips_enabled)
|
||||
+ if (IS_BROADWELL(dev_priv) && crtc_state->ips_enabled)
|
||||
pixel_rate = DIV_ROUND_UP(pixel_rate * 100, 95);
|
||||
|
||||
/* BSpec says "Do not use DisplayPort with CDCLK less than
|
||||
@@ -10289,7 +10291,7 @@ static int ilk_max_pixel_rate(struct drm_atomic_state *state)
|
||||
|
||||
pixel_rate = ilk_pipe_pixel_rate(crtc_state);
|
||||
|
||||
- if (IS_BROADWELL(dev_priv))
|
||||
+ if (IS_BROADWELL(dev_priv) || IS_GEN9(dev_priv))
|
||||
pixel_rate = bdw_adjust_min_pipe_pixel_rate(crtc_state,
|
||||
pixel_rate);
|
||||
|
||||
--
|
||||
2.10.2
|
||||
|
||||
-75
@@ -1,75 +0,0 @@
|
||||
From 5a920b85f2c6e3fd7d9dd9bb3f3345e9085e2360 Mon Sep 17 00:00:00 2001
|
||||
From: Paulo Zanoni <paulo.r.zanoni@intel.com>
|
||||
Date: Tue, 4 Oct 2016 14:37:32 -0300
|
||||
Subject: drm/i915/gen9: fix DDB partitioning for multi-screen cases
|
||||
|
||||
With the previous code we were only recomputing the DDB partitioning
|
||||
for the CRTCs included in the atomic commit, so any other active CRTCs
|
||||
would end up having their DDB registers zeroed. In this patch we make
|
||||
sure that the computed state starts as a copy of the current
|
||||
partitioning, and then we only zero the DDBs that we're actually
|
||||
going to recompute.
|
||||
|
||||
How to reproduce the bug:
|
||||
1 - Enable the primary plane on pipe A
|
||||
2 - Enable the primary plane on pipe B
|
||||
3 - Enable the cursor or sprite plane on pipe A
|
||||
|
||||
Step 3 will zero the DDB partitioning for pipe B since it's not
|
||||
included in the commit that enabled the cursor or sprite for pipe A.
|
||||
|
||||
I expect this to fix many FIFO underrun problems on gen9+.
|
||||
|
||||
v2:
|
||||
- Mention the cursor on the steps to reproduce the problem (Paulo).
|
||||
- Add Testcase tag provided by Maarten (Maarten).
|
||||
|
||||
Testcase: kms_cursor_legacy.cursorA-vs-flipB-atomic-transitions
|
||||
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=96226
|
||||
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=96828
|
||||
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97450
|
||||
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97596
|
||||
Bugzilla: https://www.phoronix.com/scan.php?page=news_item&px=Intel-Skylake-Multi-Screen-Woes
|
||||
Cc: stable@vger.kernel.org
|
||||
Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
|
||||
Reviewed-by: Lyude <cpaul@redhat.com>
|
||||
Link: http://patchwork.freedesktop.org/patch/msgid/1475602652-17326-1-git-send-email-paulo.r.zanoni@intel.com
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
|
||||
index 7f1748a..fe6c1c6 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_pm.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_pm.c
|
||||
@@ -3362,13 +3362,15 @@ skl_allocate_pipe_ddb(struct intel_crtc_state *cstate,
|
||||
int num_active;
|
||||
int id, i;
|
||||
|
||||
+ /* Clear the partitioning for disabled planes. */
|
||||
+ memset(ddb->plane[pipe], 0, sizeof(ddb->plane[pipe]));
|
||||
+ memset(ddb->y_plane[pipe], 0, sizeof(ddb->y_plane[pipe]));
|
||||
+
|
||||
if (WARN_ON(!state))
|
||||
return 0;
|
||||
|
||||
if (!cstate->base.active) {
|
||||
ddb->pipe[pipe].start = ddb->pipe[pipe].end = 0;
|
||||
- memset(ddb->plane[pipe], 0, sizeof(ddb->plane[pipe]));
|
||||
- memset(ddb->y_plane[pipe], 0, sizeof(ddb->y_plane[pipe]));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -4054,6 +4056,12 @@ skl_compute_ddb(struct drm_atomic_state *state)
|
||||
intel_state->wm_results.dirty_pipes = ~0;
|
||||
}
|
||||
|
||||
+ /*
|
||||
+ * We're not recomputing for the pipes not included in the commit, so
|
||||
+ * make sure we start with the current state.
|
||||
+ */
|
||||
+ memcpy(ddb, &dev_priv->wm.skl_hw.ddb, sizeof(*ddb));
|
||||
+
|
||||
for_each_intel_crtc_mask(dev, intel_crtc, realloc_pipes) {
|
||||
struct intel_crtc_state *cstate;
|
||||
|
||||
--
|
||||
cgit v0.10.2
|
||||
|
||||
@@ -1,242 +0,0 @@
|
||||
From fcd91dd449867c6bfe56a81cabba76b829fd05cd Mon Sep 17 00:00:00 2001
|
||||
From: Sabrina Dubroca <sd@queasysnail.net>
|
||||
Date: Thu, 20 Oct 2016 15:58:02 +0200
|
||||
Subject: [PATCH] net: add recursion limit to GRO
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Currently, GRO can do unlimited recursion through the gro_receive
|
||||
handlers. This was fixed for tunneling protocols by limiting tunnel GRO
|
||||
to one level with encap_mark, but both VLAN and TEB still have this
|
||||
problem. Thus, the kernel is vulnerable to a stack overflow, if we
|
||||
receive a packet composed entirely of VLAN headers.
|
||||
|
||||
This patch adds a recursion counter to the GRO layer to prevent stack
|
||||
overflow. When a gro_receive function hits the recursion limit, GRO is
|
||||
aborted for this skb and it is processed normally. This recursion
|
||||
counter is put in the GRO CB, but could be turned into a percpu counter
|
||||
if we run out of space in the CB.
|
||||
|
||||
Thanks to Vladimír Beneš <vbenes@redhat.com> for the initial bug report.
|
||||
|
||||
Fixes: CVE-2016-7039
|
||||
Fixes: 9b174d88c257 ("net: Add Transparent Ethernet Bridging GRO support.")
|
||||
Fixes: 66e5133f19e9 ("vlan: Add GRO support for non hardware accelerated vlan")
|
||||
Signed-off-by: Sabrina Dubroca <sd@queasysnail.net>
|
||||
Reviewed-by: Jiri Benc <jbenc@redhat.com>
|
||||
Acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
|
||||
Acked-by: Tom Herbert <tom@herbertland.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/geneve.c | 2 +-
|
||||
drivers/net/vxlan.c | 2 +-
|
||||
include/linux/netdevice.h | 39 ++++++++++++++++++++++++++++++++++++++-
|
||||
net/8021q/vlan.c | 2 +-
|
||||
net/core/dev.c | 1 +
|
||||
net/ethernet/eth.c | 2 +-
|
||||
net/ipv4/af_inet.c | 2 +-
|
||||
net/ipv4/fou.c | 4 ++--
|
||||
net/ipv4/gre_offload.c | 2 +-
|
||||
net/ipv4/udp_offload.c | 2 +-
|
||||
net/ipv6/ip6_offload.c | 2 +-
|
||||
11 files changed, 49 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c
|
||||
index 3c20e87..16af1ce 100644
|
||||
--- a/drivers/net/geneve.c
|
||||
+++ b/drivers/net/geneve.c
|
||||
@@ -453,7 +453,7 @@ static struct sk_buff **geneve_gro_receive(struct sock *sk,
|
||||
|
||||
skb_gro_pull(skb, gh_len);
|
||||
skb_gro_postpull_rcsum(skb, gh, gh_len);
|
||||
- pp = ptype->callbacks.gro_receive(head, skb);
|
||||
+ pp = call_gro_receive(ptype->callbacks.gro_receive, head, skb);
|
||||
flush = 0;
|
||||
|
||||
out_unlock:
|
||||
diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
|
||||
index e7d1668..c1639a3 100644
|
||||
--- a/drivers/net/vxlan.c
|
||||
+++ b/drivers/net/vxlan.c
|
||||
@@ -583,7 +583,7 @@ static struct sk_buff **vxlan_gro_receive(struct sock *sk,
|
||||
}
|
||||
}
|
||||
|
||||
- pp = eth_gro_receive(head, skb);
|
||||
+ pp = call_gro_receive(eth_gro_receive, head, skb);
|
||||
flush = 0;
|
||||
|
||||
out:
|
||||
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
|
||||
index 465e128..91ee364 100644
|
||||
--- a/include/linux/netdevice.h
|
||||
+++ b/include/linux/netdevice.h
|
||||
@@ -2169,7 +2169,10 @@ struct napi_gro_cb {
|
||||
/* Used to determine if flush_id can be ignored */
|
||||
u8 is_atomic:1;
|
||||
|
||||
- /* 5 bit hole */
|
||||
+ /* Number of gro_receive callbacks this packet already went through */
|
||||
+ u8 recursion_counter:4;
|
||||
+
|
||||
+ /* 1 bit hole */
|
||||
|
||||
/* used to support CHECKSUM_COMPLETE for tunneling protocols */
|
||||
__wsum csum;
|
||||
@@ -2180,6 +2183,40 @@ struct napi_gro_cb {
|
||||
|
||||
#define NAPI_GRO_CB(skb) ((struct napi_gro_cb *)(skb)->cb)
|
||||
|
||||
+#define GRO_RECURSION_LIMIT 15
|
||||
+static inline int gro_recursion_inc_test(struct sk_buff *skb)
|
||||
+{
|
||||
+ return ++NAPI_GRO_CB(skb)->recursion_counter == GRO_RECURSION_LIMIT;
|
||||
+}
|
||||
+
|
||||
+typedef struct sk_buff **(*gro_receive_t)(struct sk_buff **, struct sk_buff *);
|
||||
+static inline struct sk_buff **call_gro_receive(gro_receive_t cb,
|
||||
+ struct sk_buff **head,
|
||||
+ struct sk_buff *skb)
|
||||
+{
|
||||
+ if (unlikely(gro_recursion_inc_test(skb))) {
|
||||
+ NAPI_GRO_CB(skb)->flush |= 1;
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ return cb(head, skb);
|
||||
+}
|
||||
+
|
||||
+typedef struct sk_buff **(*gro_receive_sk_t)(struct sock *, struct sk_buff **,
|
||||
+ struct sk_buff *);
|
||||
+static inline struct sk_buff **call_gro_receive_sk(gro_receive_sk_t cb,
|
||||
+ struct sock *sk,
|
||||
+ struct sk_buff **head,
|
||||
+ struct sk_buff *skb)
|
||||
+{
|
||||
+ if (unlikely(gro_recursion_inc_test(skb))) {
|
||||
+ NAPI_GRO_CB(skb)->flush |= 1;
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ return cb(sk, head, skb);
|
||||
+}
|
||||
+
|
||||
struct packet_type {
|
||||
__be16 type; /* This is really htons(ether_type). */
|
||||
struct net_device *dev; /* NULL is wildcarded here */
|
||||
diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c
|
||||
index 8de138d..f2531ad 100644
|
||||
--- a/net/8021q/vlan.c
|
||||
+++ b/net/8021q/vlan.c
|
||||
@@ -664,7 +664,7 @@ static struct sk_buff **vlan_gro_receive(struct sk_buff **head,
|
||||
|
||||
skb_gro_pull(skb, sizeof(*vhdr));
|
||||
skb_gro_postpull_rcsum(skb, vhdr, sizeof(*vhdr));
|
||||
- pp = ptype->callbacks.gro_receive(head, skb);
|
||||
+ pp = call_gro_receive(ptype->callbacks.gro_receive, head, skb);
|
||||
|
||||
out_unlock:
|
||||
rcu_read_unlock();
|
||||
diff --git a/net/core/dev.c b/net/core/dev.c
|
||||
index b09ac57..dbc8713 100644
|
||||
--- a/net/core/dev.c
|
||||
+++ b/net/core/dev.c
|
||||
@@ -4511,6 +4511,7 @@ static enum gro_result dev_gro_receive(struct napi_struct *napi, struct sk_buff
|
||||
NAPI_GRO_CB(skb)->flush = 0;
|
||||
NAPI_GRO_CB(skb)->free = 0;
|
||||
NAPI_GRO_CB(skb)->encap_mark = 0;
|
||||
+ NAPI_GRO_CB(skb)->recursion_counter = 0;
|
||||
NAPI_GRO_CB(skb)->is_fou = 0;
|
||||
NAPI_GRO_CB(skb)->is_atomic = 1;
|
||||
NAPI_GRO_CB(skb)->gro_remcsum_start = 0;
|
||||
diff --git a/net/ethernet/eth.c b/net/ethernet/eth.c
|
||||
index 66dff5e..02acfff 100644
|
||||
--- a/net/ethernet/eth.c
|
||||
+++ b/net/ethernet/eth.c
|
||||
@@ -439,7 +439,7 @@ struct sk_buff **eth_gro_receive(struct sk_buff **head,
|
||||
|
||||
skb_gro_pull(skb, sizeof(*eh));
|
||||
skb_gro_postpull_rcsum(skb, eh, sizeof(*eh));
|
||||
- pp = ptype->callbacks.gro_receive(head, skb);
|
||||
+ pp = call_gro_receive(ptype->callbacks.gro_receive, head, skb);
|
||||
|
||||
out_unlock:
|
||||
rcu_read_unlock();
|
||||
diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c
|
||||
index 1effc98..9648c97 100644
|
||||
--- a/net/ipv4/af_inet.c
|
||||
+++ b/net/ipv4/af_inet.c
|
||||
@@ -1391,7 +1391,7 @@ struct sk_buff **inet_gro_receive(struct sk_buff **head, struct sk_buff *skb)
|
||||
skb_gro_pull(skb, sizeof(*iph));
|
||||
skb_set_transport_header(skb, skb_gro_offset(skb));
|
||||
|
||||
- pp = ops->callbacks.gro_receive(head, skb);
|
||||
+ pp = call_gro_receive(ops->callbacks.gro_receive, head, skb);
|
||||
|
||||
out_unlock:
|
||||
rcu_read_unlock();
|
||||
diff --git a/net/ipv4/fou.c b/net/ipv4/fou.c
|
||||
index cf50f7e..030d153 100644
|
||||
--- a/net/ipv4/fou.c
|
||||
+++ b/net/ipv4/fou.c
|
||||
@@ -249,7 +249,7 @@ static struct sk_buff **fou_gro_receive(struct sock *sk,
|
||||
if (!ops || !ops->callbacks.gro_receive)
|
||||
goto out_unlock;
|
||||
|
||||
- pp = ops->callbacks.gro_receive(head, skb);
|
||||
+ pp = call_gro_receive(ops->callbacks.gro_receive, head, skb);
|
||||
|
||||
out_unlock:
|
||||
rcu_read_unlock();
|
||||
@@ -441,7 +441,7 @@ static struct sk_buff **gue_gro_receive(struct sock *sk,
|
||||
if (WARN_ON_ONCE(!ops || !ops->callbacks.gro_receive))
|
||||
goto out_unlock;
|
||||
|
||||
- pp = ops->callbacks.gro_receive(head, skb);
|
||||
+ pp = call_gro_receive(ops->callbacks.gro_receive, head, skb);
|
||||
flush = 0;
|
||||
|
||||
out_unlock:
|
||||
diff --git a/net/ipv4/gre_offload.c b/net/ipv4/gre_offload.c
|
||||
index 96e0efe..d5cac99 100644
|
||||
--- a/net/ipv4/gre_offload.c
|
||||
+++ b/net/ipv4/gre_offload.c
|
||||
@@ -229,7 +229,7 @@ static struct sk_buff **gre_gro_receive(struct sk_buff **head,
|
||||
/* Adjusted NAPI_GRO_CB(skb)->csum after skb_gro_pull()*/
|
||||
skb_gro_postpull_rcsum(skb, greh, grehlen);
|
||||
|
||||
- pp = ptype->callbacks.gro_receive(head, skb);
|
||||
+ pp = call_gro_receive(ptype->callbacks.gro_receive, head, skb);
|
||||
flush = 0;
|
||||
|
||||
out_unlock:
|
||||
diff --git a/net/ipv4/udp_offload.c b/net/ipv4/udp_offload.c
|
||||
index f9333c9..b2be1d9 100644
|
||||
--- a/net/ipv4/udp_offload.c
|
||||
+++ b/net/ipv4/udp_offload.c
|
||||
@@ -295,7 +295,7 @@ struct sk_buff **udp_gro_receive(struct sk_buff **head, struct sk_buff *skb,
|
||||
|
||||
skb_gro_pull(skb, sizeof(struct udphdr)); /* pull encapsulating udp header */
|
||||
skb_gro_postpull_rcsum(skb, uh, sizeof(struct udphdr));
|
||||
- pp = udp_sk(sk)->gro_receive(sk, head, skb);
|
||||
+ pp = call_gro_receive_sk(udp_sk(sk)->gro_receive, sk, head, skb);
|
||||
|
||||
out_unlock:
|
||||
rcu_read_unlock();
|
||||
diff --git a/net/ipv6/ip6_offload.c b/net/ipv6/ip6_offload.c
|
||||
index e7bfd55..1fcf61f 100644
|
||||
--- a/net/ipv6/ip6_offload.c
|
||||
+++ b/net/ipv6/ip6_offload.c
|
||||
@@ -246,7 +246,7 @@ static struct sk_buff **ipv6_gro_receive(struct sk_buff **head,
|
||||
|
||||
skb_gro_postpull_rcsum(skb, iph, nlen);
|
||||
|
||||
- pp = ops->callbacks.gro_receive(head, skb);
|
||||
+ pp = call_gro_receive(ops->callbacks.gro_receive, head, skb);
|
||||
|
||||
out_unlock:
|
||||
rcu_read_unlock();
|
||||
--
|
||||
2.10.1
|
||||
|
||||
@@ -41,9 +41,6 @@ Revert-cpufreq-pcc-Enable-autoload-of-pcc-cpufreq-fo.patch
|
||||
# breaks nvidia304
|
||||
Revert-x86-mm-mtrr-Remove-kernel-internal-MTRR-inter.patch
|
||||
|
||||
# fix non-booting systems
|
||||
x86-smpboot-Init-apic-mapping-before-usage.patch
|
||||
|
||||
###
|
||||
### Core
|
||||
###
|
||||
@@ -68,6 +65,9 @@ kernel-governor-cpupower-Correct-return-type-of-cpu_power_is_cpu_onl.patch
|
||||
pci-add-ALI-M5229-ide-compatibility-mode-quirk.patch
|
||||
pci-quirks-drop-devinit-exit.patch
|
||||
|
||||
# fix video detection failure on Amd Turks
|
||||
PCI-Don-t-attempt-to-claim-shadow-copies-of-ROM.patch
|
||||
|
||||
###
|
||||
### PNP core
|
||||
###
|
||||
@@ -139,9 +139,6 @@ nvmepatch1-V4.patch
|
||||
nvmepatch2-V4.patch
|
||||
nvmepatch3-V4.patch
|
||||
|
||||
# fix feature check, reported on dev@ ml
|
||||
dm-raid-fix-compat_features-validation.patch
|
||||
|
||||
###
|
||||
### Char
|
||||
###
|
||||
@@ -190,13 +187,12 @@ gpu-drm-mach64-linux-3.14-buildfix.patch
|
||||
gpu-drm-mach64-3.17-buildfix.patch
|
||||
gpu-drm-mach64-3.18-buildfix.patch
|
||||
|
||||
# Attempt to fix FIFO underrun problems:
|
||||
# (from https://patchwork.freedesktop.org/patch/113642/ and
|
||||
# also from https://bugs.freedesktop.org/attachment.cgi?id=127264, first reference from
|
||||
# https://bugs.freedesktop.org/show_bug.cgi?id=97450). Does not completely resolve the
|
||||
# issues but reduce.
|
||||
# now in drm-next: https://cgit.freedesktop.org/~airlied/linux/commit?h=drm-next&id=5a920b85f2c6e3fd7d9dd9bb3f3345e9085e2360
|
||||
gpu-drm-i915-gen9-fix-DDB-partitioning-for-multi-screen-cases.patch
|
||||
# amdgpu crash
|
||||
gpu-drm-amdgpu-fix-crash-in-acp_hw_fini.patch
|
||||
|
||||
# i915 dp fix
|
||||
gpu-drm-i915-dp-BDW-cdclk-fix-for-DP-audio.patch
|
||||
gpu-drm-i915-dp-Extend-BDW-DP-audio-workaround-to-GEN9-p.patch
|
||||
|
||||
###
|
||||
### Hardware Monitoring
|
||||
@@ -252,9 +248,6 @@ net-netfilter-psd-2.6.35-buildfix.patch
|
||||
# rtlwifi regression
|
||||
net-wireless-rtlwifi-Fix-regression-caused-by-commit-d86e64768859.patch
|
||||
|
||||
# CVE-2016-7039
|
||||
net-add-recursion-limit-to-GRO.patch
|
||||
|
||||
###
|
||||
### Platform drivers
|
||||
###
|
||||
|
||||
-61
@@ -1,61 +0,0 @@
|
||||
From 1e90a13d0c3dc94512af1ccb2b6563e8297838fa Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Gleixner <tglx@linutronix.de>
|
||||
Date: Sat, 29 Oct 2016 13:42:42 +0200
|
||||
Subject: [PATCH] x86/smpboot: Init apic mapping before usage
|
||||
|
||||
The recent changes, which forced the registration of the boot cpu on UP
|
||||
systems, which do not have ACPI tables, have been fixed for systems w/o
|
||||
local APIC, but left a wreckage for systems which have neither ACPI nor
|
||||
mptables, but the CPU has an APIC, e.g. virtualbox.
|
||||
|
||||
The boot process crashes in prefill_possible_map() as it wants to register
|
||||
the boot cpu, which needs to access the local apic, but the local APIC is
|
||||
not yet mapped.
|
||||
|
||||
There is no reason why init_apic_mapping() can't be invoked before
|
||||
prefill_possible_map(). So instead of playing another silly early mapping
|
||||
game, as the ACPI/mptables code does, we just move init_apic_mapping()
|
||||
before the call to prefill_possible_map().
|
||||
|
||||
In hindsight, I should have noticed that combination earlier.
|
||||
|
||||
Sorry for the churn (also in stable)!
|
||||
|
||||
Fixes: ff8560512b8d ("x86/boot/smp: Don't try to poke disabled/non-existent APIC")
|
||||
Reported-and-debugged-by: Michal Necasek <michal.necasek@oracle.com>
|
||||
Reported-and-tested-by: Wolfgang Bauer <wbauer@tmo.at>
|
||||
Cc: prarit@redhat.com
|
||||
Cc: ville.syrjala@linux.intel.com
|
||||
Cc: michael.thayer@oracle.com
|
||||
Cc: knut.osmundsen@oracle.com
|
||||
Cc: frank.mehnert@oracle.com
|
||||
Cc: Borislav Petkov <bp@alien8.de>
|
||||
Cc: stable@vger.kernel.org
|
||||
Link: http://lkml.kernel.org/r/alpine.DEB.2.20.1610282114380.5053@nanos
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
---
|
||||
arch/x86/kernel/setup.c | 7 ++++++-
|
||||
1 file changed, 6 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
|
||||
index bbfbca5..9c337b0 100644
|
||||
--- a/arch/x86/kernel/setup.c
|
||||
+++ b/arch/x86/kernel/setup.c
|
||||
@@ -1222,11 +1222,16 @@ void __init setup_arch(char **cmdline_p)
|
||||
if (smp_found_config)
|
||||
get_smp_config();
|
||||
|
||||
+ /*
|
||||
+ * Systems w/o ACPI and mptables might not have it mapped the local
|
||||
+ * APIC yet, but prefill_possible_map() might need to access it.
|
||||
+ */
|
||||
+ init_apic_mappings();
|
||||
+
|
||||
prefill_possible_map();
|
||||
|
||||
init_cpu_to_node();
|
||||
|
||||
- init_apic_mappings();
|
||||
io_apic_init_mappings();
|
||||
|
||||
kvm_guest_init();
|
||||
@@ -16,10 +16,10 @@
|
||||
<BuildDependencies>
|
||||
<Dependency>pciutils-devel</Dependency>
|
||||
</BuildDependencies>
|
||||
<Patches>
|
||||
<!-- Linux patches -->
|
||||
<Patch level="1" compressionType="xz">patches/linux/patch-4.8.6.xz</Patch>
|
||||
<!-- Mageia Linux patches // compatible with http://svnweb.mageia.org/packages/cauldron/kernel/releases/4.8.6/1.mga6/PATCHES/patches/series-->
|
||||
<Patches>
|
||||
<!-- Linux patches -->
|
||||
<Patch level="1" compressionType="xz">patches/linux/patch-4.8.8.xz</Patch>
|
||||
<!-- Mageia Linux patches // compatible with http://svnweb.mageia.org/packages/cauldron/kernel/releases/4.8.8/1.mga6/PATCHES/patches/series-->
|
||||
<!--stable patches-->
|
||||
<!--other patches-->
|
||||
<Patch level="1">patches/mageia/Revert-ipmi-Start-the-timer-and-thread-on-internal-m.patch</Patch>
|
||||
@@ -28,12 +28,12 @@
|
||||
<Patch level="1">patches/mageia/x86-default_poweroff_up_machines.patch</Patch>
|
||||
<Patch level="1">patches/mageia/x86-increase-default-minimum-vmalloc-area-by-64MB-to-192MB.patch</Patch>
|
||||
<Patch level="1">patches/mageia/Revert-cpufreq-pcc-Enable-autoload-of-pcc-cpufreq-fo.patch</Patch>
|
||||
<Patch level="1">patches/mageia/x86-smpboot-Init-apic-mapping-before-usage.patch</Patch>
|
||||
<Patch level="1">patches/mageia/Revert-x86-mm-mtrr-Remove-kernel-internal-MTRR-inter.patch</Patch>
|
||||
<Patch level="1">patches/mageia/base-cacheinfo-silence-DT-warnings.patch</Patch>
|
||||
<Patch level="1">patches/mageia/kernel-governor-cpupower-Correct-return-type-of-cpu_power_is_cpu_onl.patch</Patch>
|
||||
<Patch level="1">patches/mageia/pci-add-ALI-M5229-ide-compatibility-mode-quirk.patch</Patch>
|
||||
<Patch level="1">patches/mageia/pci-quirks-drop-devinit-exit.patch</Patch>
|
||||
<Patch level="1">patches/mageia/PCI-Don-t-attempt-to-claim-shadow-copies-of-ROM.patch</Patch>
|
||||
<Patch level="1">patches/mageia/acpi-CLEVO-M360S-disable_acpi_irq.patch</Patch>
|
||||
<Patch level="1">patches/mageia/acpi-processor-M720SR-limit-to-C2.patch</Patch>
|
||||
<Patch level="1">patches/mageia/ACPI-video-Add-a-quirk-to-force-acpi-video-backlight.patch</Patch>
|
||||
@@ -54,7 +54,6 @@
|
||||
<Patch level="1">patches/mageia/nvmepatch1-V4.patch</Patch>
|
||||
<Patch level="1">patches/mageia/nvmepatch2-V4.patch</Patch>
|
||||
<Patch level="1">patches/mageia/nvmepatch3-V4.patch</Patch>
|
||||
<Patch level="1">patches/mageia/dm-raid-fix-compat_features-validation.patch</Patch>
|
||||
<Patch level="1">patches/mageia/fs-aufs-4.8.patch</Patch>
|
||||
<Patch level="1">patches/mageia/fs-aufs-4.8-modular.patch</Patch>
|
||||
<Patch level="1">patches/mageia/firewire-ieee1394-module-aliases.patch</Patch>
|
||||
@@ -77,7 +76,9 @@
|
||||
<Patch level="1">patches/mageia/gpu-drm-mach64-linux-3.14-buildfix.patch</Patch>
|
||||
<Patch level="1">patches/mageia/gpu-drm-mach64-3.17-buildfix.patch</Patch>
|
||||
<Patch level="1">patches/mageia/gpu-drm-mach64-3.18-buildfix.patch</Patch--><!--1-->
|
||||
<Patch level="1">patches/mageia/gpu-drm-i915-gen9-fix-DDB-partitioning-for-multi-screen-cases.patch</Patch>
|
||||
<Patch level="1">patches/mageia/gpu-drm-amdgpu-fix-crash-in-acp_hw_fini.patch</Patch>
|
||||
<Patch level="1">patches/mageia/gpu-drm-i915-dp-BDW-cdclk-fix-for-DP-audio.patch</Patch>
|
||||
<Patch level="1">patches/mageia/gpu-drm-i915-dp-Extend-BDW-DP-audio-workaround-to-GEN9-p.patch</Patch>
|
||||
<Patch level="1">patches/mageia/input-i8042-quirks-for-Fujitsu-Lifebook-A544-and-Lif.patch</Patch>
|
||||
<Patch level="1">patches/mageia/net-sis190-fix-list-usage.patch</Patch>
|
||||
<Patch level="1">patches/mageia/net-netfilter-IFWLOG.patch</Patch>
|
||||
@@ -91,7 +92,6 @@
|
||||
<Patch level="1">patches/mageia/net-netfilter-psd-mdv.patch</Patch>
|
||||
<Patch level="1">patches/mageia/net-netfilter-psd-2.6.35-buildfix.patch</Patch>
|
||||
<Patch level="1">patches/mageia/net-wireless-rtlwifi-Fix-regression-caused-by-commit-d86e64768859.patch</Patch>
|
||||
<Patch level="1">patches/mageia/net-add-recursion-limit-to-GRO.patch</Patch>
|
||||
<Patch level="1">patches/mageia/platform-x86-add-shuttle-wmi-driver.patch</Patch>
|
||||
<Patch level="1">patches/mageia/platform-x86-shuttle-wmi-drop-devinit-exit.patch</Patch>
|
||||
<Patch level="1">patches/mageia/platform-x86-shuttle-wmi-4.2-buildfix.patch</Patch>
|
||||
@@ -155,6 +155,13 @@
|
||||
</Provides>-->
|
||||
</Package>
|
||||
<History>
|
||||
<Update release="7">
|
||||
<Date>2016-11-18</Date>
|
||||
<Version>4.8.8</Version>
|
||||
<Comment>Release bump</Comment>
|
||||
<Name>PisiLinux Community</Name>
|
||||
<Email>admin@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="6">
|
||||
<Date>2016-08-24</Date>
|
||||
<Version>4.7.2</Version>
|
||||
|
||||
Reference in New Issue
Block a user