Page MenuHomeFreeBSD

D48971.id150918.diff
No OneTemporary

D48971.id150918.diff

diff --git a/sys/dev/gve/gve_main.c b/sys/dev/gve/gve_main.c
--- a/sys/dev/gve/gve_main.c
+++ b/sys/dev/gve/gve_main.c
@@ -196,6 +196,8 @@
gve_set_mtu(if_t ifp, uint32_t new_mtu)
{
struct gve_priv *priv = if_getsoftc(ifp);
+ const uint32_t max_problem_range = 8227;
+ const uint32_t min_problem_range = 7822;
int err;
if ((new_mtu > priv->max_mtu) || (new_mtu < ETHERMIN)) {
@@ -204,6 +206,19 @@
return (EINVAL);
}
+ /*
+ * When hardware LRO is enabled in DQ mode, MTUs within the range
+ * [7822, 8227] trigger hardware issues which cause a drastic drop
+ * in throughput.
+ */
+ if (!gve_is_gqi(priv) && !gve_disable_hw_lro &&
+ new_mtu >= min_problem_range && new_mtu <= max_problem_range) {
+ device_printf(priv->dev,
+ "Cannot set to MTU to %d within the range [%d, %d] while hardware LRO is enabled\n",
+ new_mtu, min_problem_range, max_problem_range);
+ return (EINVAL);
+ }
+
err = gve_adminq_set_mtu(priv, new_mtu);
if (err == 0) {
if (bootverbose)

File Metadata

Mime Type
text/plain
Expires
Sat, Jul 25, 1:46 AM (3 h, 38 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
35458704
Default Alt Text
D48971.id150918.diff (1003 B)

Event Timeline