diff options
author | Paul Gortmaker <paul.gortmaker@windriver.com> | 2018-08-24 13:17:51 -0400 |
---|---|---|
committer | Paul Gortmaker <paul.gortmaker@windriver.com> | 2018-08-24 13:17:51 -0400 |
commit | 5727a98ffeea8efee3e937ece992216814517421 (patch) | |
tree | fdd36d31ae1d18a542a36b4f2296e26bdc7235cf | |
parent | 2aed82b1188d43a3d9a4364635ad0e3c353836b3 (diff) | |
download | longterm-queue-4.12-5727a98ffeea8efee3e937ece992216814517421.tar.gz |
drop patches with post-4.12 Fixes: tags
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
20 files changed, 0 insertions, 1528 deletions
diff --git a/queue/IB-core-Verify-that-QP-is-security-enabled-in-create.patch b/queue/IB-core-Verify-that-QP-is-security-enabled-in-create.patch deleted file mode 100644 index 1655e2d..0000000 --- a/queue/IB-core-Verify-that-QP-is-security-enabled-in-create.patch +++ /dev/null @@ -1,52 +0,0 @@ -From 4a50881bbac309e6f0684816a180bc3c14e1485d Mon Sep 17 00:00:00 2001 -From: Moni Shoua <monis@mellanox.com> -Date: Sun, 24 Dec 2017 13:54:58 +0200 -Subject: [PATCH] IB/core: Verify that QP is security enabled in create and - destroy - -commit 4a50881bbac309e6f0684816a180bc3c14e1485d upstream. - -The XRC target QP create flow sets up qp_sec only if there is an IB link with -LSM security enabled. However, several other related uAPI entry points blindly -follow the qp_sec NULL pointer, resulting in a possible oops. - -Check for NULL before using qp_sec. - -Cc: <stable@vger.kernel.org> # v4.12 -Fixes: d291f1a65232 ("IB/core: Enforce PKey security on QPs") -Reviewed-by: Daniel Jurgens <danielj@mellanox.com> -Signed-off-by: Moni Shoua <monis@mellanox.com> -Signed-off-by: Leon Romanovsky <leon@kernel.org> -Signed-off-by: Jason Gunthorpe <jgg@mellanox.com> - -diff --git a/drivers/infiniband/core/security.c b/drivers/infiniband/core/security.c -index feafdb961c48..59b2f96d986a 100644 ---- a/drivers/infiniband/core/security.c -+++ b/drivers/infiniband/core/security.c -@@ -386,6 +386,9 @@ int ib_open_shared_qp_security(struct ib_qp *qp, struct ib_device *dev) - if (ret) - return ret; - -+ if (!qp->qp_sec) -+ return 0; -+ - mutex_lock(&real_qp->qp_sec->mutex); - ret = check_qp_port_pkey_settings(real_qp->qp_sec->ports_pkeys, - qp->qp_sec); -diff --git a/drivers/infiniband/core/verbs.c b/drivers/infiniband/core/verbs.c -index 3fb8fb6cc824..e36d27ed4daa 100644 ---- a/drivers/infiniband/core/verbs.c -+++ b/drivers/infiniband/core/verbs.c -@@ -1438,7 +1438,8 @@ int ib_close_qp(struct ib_qp *qp) - spin_unlock_irqrestore(&real_qp->device->event_handler_lock, flags); - - atomic_dec(&real_qp->usecnt); -- ib_close_shared_qp_security(qp->qp_sec); -+ if (qp->qp_sec) -+ ib_close_shared_qp_security(qp->qp_sec); - kfree(qp); - - return 0; --- -2.15.0 - diff --git a/queue/IB-hfi-Only-read-capability-registers-if-the-capabil.patch b/queue/IB-hfi-Only-read-capability-registers-if-the-capabil.patch deleted file mode 100644 index 7227bfe..0000000 --- a/queue/IB-hfi-Only-read-capability-registers-if-the-capabil.patch +++ /dev/null @@ -1,88 +0,0 @@ -From 4c009af473b2026caaa26107e34d7cc68dad7756 Mon Sep 17 00:00:00 2001 -From: "Michael J. Ruhl" <michael.j.ruhl@intel.com> -Date: Fri, 22 Dec 2017 08:47:20 -0800 -Subject: [PATCH] IB/hfi: Only read capability registers if the capability - exists - -commit 4c009af473b2026caaa26107e34d7cc68dad7756 upstream. - -During driver init, various registers are saved to allow restoration -after an FLR or gen3 bump. Some of these registers are not available -in some circumstances (i.e. Virtual machines). - -This bug makes the driver unusable when the PCI device is passed into -a VM, it fails during probe. - -Delete unnecessary register read/write, and only access register if -the capability exists. - -Cc: <stable@vger.kernel.org> # 4.14.x -Fixes: a618b7e40af2 ("IB/hfi1: Move saving PCI values to a separate function") -Reviewed-by: Mike Marciniszyn <mike.marciniszyn@intel.com> -Signed-off-by: Michael J. Ruhl <michael.j.ruhl@intel.com> -Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com> -Signed-off-by: Jason Gunthorpe <jgg@mellanox.com> - -diff --git a/drivers/infiniband/hw/hfi1/hfi.h b/drivers/infiniband/hw/hfi1/hfi.h -index 4a9b4d7efe63..8ce9118d4a7f 100644 ---- a/drivers/infiniband/hw/hfi1/hfi.h -+++ b/drivers/infiniband/hw/hfi1/hfi.h -@@ -1131,7 +1131,6 @@ struct hfi1_devdata { - u16 pcie_lnkctl; - u16 pcie_devctl2; - u32 pci_msix0; -- u32 pci_lnkctl3; - u32 pci_tph2; - - /* -diff --git a/drivers/infiniband/hw/hfi1/pcie.c b/drivers/infiniband/hw/hfi1/pcie.c -index 09e50fd2a08f..8c7e7a60b715 100644 ---- a/drivers/infiniband/hw/hfi1/pcie.c -+++ b/drivers/infiniband/hw/hfi1/pcie.c -@@ -411,15 +411,12 @@ int restore_pci_variables(struct hfi1_devdata *dd) - if (ret) - goto error; - -- ret = pci_write_config_dword(dd->pcidev, PCIE_CFG_SPCIE1, -- dd->pci_lnkctl3); -- if (ret) -- goto error; -- -- ret = pci_write_config_dword(dd->pcidev, PCIE_CFG_TPH2, dd->pci_tph2); -- if (ret) -- goto error; -- -+ if (pci_find_ext_capability(dd->pcidev, PCI_EXT_CAP_ID_TPH)) { -+ ret = pci_write_config_dword(dd->pcidev, PCIE_CFG_TPH2, -+ dd->pci_tph2); -+ if (ret) -+ goto error; -+ } - return 0; - - error: -@@ -469,15 +466,12 @@ int save_pci_variables(struct hfi1_devdata *dd) - if (ret) - goto error; - -- ret = pci_read_config_dword(dd->pcidev, PCIE_CFG_SPCIE1, -- &dd->pci_lnkctl3); -- if (ret) -- goto error; -- -- ret = pci_read_config_dword(dd->pcidev, PCIE_CFG_TPH2, &dd->pci_tph2); -- if (ret) -- goto error; -- -+ if (pci_find_ext_capability(dd->pcidev, PCI_EXT_CAP_ID_TPH)) { -+ ret = pci_read_config_dword(dd->pcidev, PCIE_CFG_TPH2, -+ &dd->pci_tph2); -+ if (ret) -+ goto error; -+ } - return 0; - - error: --- -2.15.0 - diff --git a/queue/Revert-mlx5-move-affinity-hints-assignments-to-gener.patch b/queue/Revert-mlx5-move-affinity-hints-assignments-to-gener.patch deleted file mode 100644 index d9a3238..0000000 --- a/queue/Revert-mlx5-move-affinity-hints-assignments-to-gener.patch +++ /dev/null @@ -1,340 +0,0 @@ -From 231243c82793428467524227ae02ca451e6a98e7 Mon Sep 17 00:00:00 2001 -From: Saeed Mahameed <saeedm@mellanox.com> -Date: Fri, 10 Nov 2017 15:59:52 +0900 -Subject: [PATCH] Revert "mlx5: move affinity hints assignments to generic - code" - -commit 231243c82793428467524227ae02ca451e6a98e7 upstream. - -Before the offending commit, mlx5 core did the IRQ affinity itself, -and it seems that the new generic code have some drawbacks and one -of them is the lack for user ability to modify irq affinity after -the initial affinity values got assigned. - -The issue is still being discussed and a solution in the new generic code -is required, until then we need to revert this patch. - -This fixes the following issue: -echo <new affinity> > /proc/irq/<x>/smp_affinity -fails with -EIO - -This reverts commit a435393acafbf0ecff4deb3e3cb554b34f0d0664. -Note: kept mlx5_get_vector_affinity in include/linux/mlx5/driver.h since -it is used in mlx5_ib driver. - -Fixes: a435393acafb ("mlx5: move affinity hints assignments to generic code") -Cc: Sagi Grimberg <sagi@grimberg.me> -Cc: Thomas Gleixner <tglx@linutronix.de> -Cc: Jes Sorensen <jsorensen@fb.com> -Reported-by: Jes Sorensen <jsorensen@fb.com> -Signed-off-by: Saeed Mahameed <saeedm@mellanox.com> - -diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en.h b/drivers/net/ethernet/mellanox/mlx5/core/en.h -index c0872b3284cb..43f9054830e5 100644 ---- a/drivers/net/ethernet/mellanox/mlx5/core/en.h -+++ b/drivers/net/ethernet/mellanox/mlx5/core/en.h -@@ -590,6 +590,7 @@ struct mlx5e_channel { - struct mlx5_core_dev *mdev; - struct hwtstamp_config *tstamp; - int ix; -+ int cpu; - }; - - struct mlx5e_channels { -diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c -index d2b057a3e512..cbec66bc82f1 100644 ---- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c -+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c -@@ -71,11 +71,6 @@ struct mlx5e_channel_param { - struct mlx5e_cq_param icosq_cq; - }; - --static int mlx5e_get_node(struct mlx5e_priv *priv, int ix) --{ -- return pci_irq_get_node(priv->mdev->pdev, MLX5_EQ_VEC_COMP_BASE + ix); --} -- - static bool mlx5e_check_fragmented_striding_rq_cap(struct mlx5_core_dev *mdev) - { - return MLX5_CAP_GEN(mdev, striding_rq) && -@@ -444,17 +439,16 @@ static int mlx5e_rq_alloc_mpwqe_info(struct mlx5e_rq *rq, - int wq_sz = mlx5_wq_ll_get_size(&rq->wq); - int mtt_sz = mlx5e_get_wqe_mtt_sz(); - int mtt_alloc = mtt_sz + MLX5_UMR_ALIGN - 1; -- int node = mlx5e_get_node(c->priv, c->ix); - int i; - - rq->mpwqe.info = kzalloc_node(wq_sz * sizeof(*rq->mpwqe.info), -- GFP_KERNEL, node); -+ GFP_KERNEL, cpu_to_node(c->cpu)); - if (!rq->mpwqe.info) - goto err_out; - - /* We allocate more than mtt_sz as we will align the pointer */ -- rq->mpwqe.mtt_no_align = kzalloc_node(mtt_alloc * wq_sz, -- GFP_KERNEL, node); -+ rq->mpwqe.mtt_no_align = kzalloc_node(mtt_alloc * wq_sz, GFP_KERNEL, -+ cpu_to_node(c->cpu)); - if (unlikely(!rq->mpwqe.mtt_no_align)) - goto err_free_wqe_info; - -@@ -562,7 +556,7 @@ static int mlx5e_alloc_rq(struct mlx5e_channel *c, - int err; - int i; - -- rqp->wq.db_numa_node = mlx5e_get_node(c->priv, c->ix); -+ rqp->wq.db_numa_node = cpu_to_node(c->cpu); - - err = mlx5_wq_ll_create(mdev, &rqp->wq, rqc_wq, &rq->wq, - &rq->wq_ctrl); -@@ -629,8 +623,7 @@ static int mlx5e_alloc_rq(struct mlx5e_channel *c, - default: /* MLX5_WQ_TYPE_LINKED_LIST */ - rq->wqe.frag_info = - kzalloc_node(wq_sz * sizeof(*rq->wqe.frag_info), -- GFP_KERNEL, -- mlx5e_get_node(c->priv, c->ix)); -+ GFP_KERNEL, cpu_to_node(c->cpu)); - if (!rq->wqe.frag_info) { - err = -ENOMEM; - goto err_rq_wq_destroy; -@@ -1000,13 +993,13 @@ static int mlx5e_alloc_xdpsq(struct mlx5e_channel *c, - sq->uar_map = mdev->mlx5e_res.bfreg.map; - sq->min_inline_mode = params->tx_min_inline_mode; - -- param->wq.db_numa_node = mlx5e_get_node(c->priv, c->ix); -+ param->wq.db_numa_node = cpu_to_node(c->cpu); - err = mlx5_wq_cyc_create(mdev, ¶m->wq, sqc_wq, &sq->wq, &sq->wq_ctrl); - if (err) - return err; - sq->wq.db = &sq->wq.db[MLX5_SND_DBR]; - -- err = mlx5e_alloc_xdpsq_db(sq, mlx5e_get_node(c->priv, c->ix)); -+ err = mlx5e_alloc_xdpsq_db(sq, cpu_to_node(c->cpu)); - if (err) - goto err_sq_wq_destroy; - -@@ -1053,13 +1046,13 @@ static int mlx5e_alloc_icosq(struct mlx5e_channel *c, - sq->channel = c; - sq->uar_map = mdev->mlx5e_res.bfreg.map; - -- param->wq.db_numa_node = mlx5e_get_node(c->priv, c->ix); -+ param->wq.db_numa_node = cpu_to_node(c->cpu); - err = mlx5_wq_cyc_create(mdev, ¶m->wq, sqc_wq, &sq->wq, &sq->wq_ctrl); - if (err) - return err; - sq->wq.db = &sq->wq.db[MLX5_SND_DBR]; - -- err = mlx5e_alloc_icosq_db(sq, mlx5e_get_node(c->priv, c->ix)); -+ err = mlx5e_alloc_icosq_db(sq, cpu_to_node(c->cpu)); - if (err) - goto err_sq_wq_destroy; - -@@ -1126,13 +1119,13 @@ static int mlx5e_alloc_txqsq(struct mlx5e_channel *c, - if (MLX5_IPSEC_DEV(c->priv->mdev)) - set_bit(MLX5E_SQ_STATE_IPSEC, &sq->state); - -- param->wq.db_numa_node = mlx5e_get_node(c->priv, c->ix); -+ param->wq.db_numa_node = cpu_to_node(c->cpu); - err = mlx5_wq_cyc_create(mdev, ¶m->wq, sqc_wq, &sq->wq, &sq->wq_ctrl); - if (err) - return err; - sq->wq.db = &sq->wq.db[MLX5_SND_DBR]; - -- err = mlx5e_alloc_txqsq_db(sq, mlx5e_get_node(c->priv, c->ix)); -+ err = mlx5e_alloc_txqsq_db(sq, cpu_to_node(c->cpu)); - if (err) - goto err_sq_wq_destroy; - -@@ -1504,8 +1497,8 @@ static int mlx5e_alloc_cq(struct mlx5e_channel *c, - struct mlx5_core_dev *mdev = c->priv->mdev; - int err; - -- param->wq.buf_numa_node = mlx5e_get_node(c->priv, c->ix); -- param->wq.db_numa_node = mlx5e_get_node(c->priv, c->ix); -+ param->wq.buf_numa_node = cpu_to_node(c->cpu); -+ param->wq.db_numa_node = cpu_to_node(c->cpu); - param->eq_ix = c->ix; - - err = mlx5e_alloc_cq_common(mdev, param, cq); -@@ -1604,6 +1597,11 @@ static void mlx5e_close_cq(struct mlx5e_cq *cq) - mlx5e_free_cq(cq); - } - -+static int mlx5e_get_cpu(struct mlx5e_priv *priv, int ix) -+{ -+ return cpumask_first(priv->mdev->priv.irq_info[ix].mask); -+} -+ - static int mlx5e_open_tx_cqs(struct mlx5e_channel *c, - struct mlx5e_params *params, - struct mlx5e_channel_param *cparam) -@@ -1752,12 +1750,13 @@ static int mlx5e_open_channel(struct mlx5e_priv *priv, int ix, - { - struct mlx5e_cq_moder icocq_moder = {0, 0}; - struct net_device *netdev = priv->netdev; -+ int cpu = mlx5e_get_cpu(priv, ix); - struct mlx5e_channel *c; - unsigned int irq; - int err; - int eqn; - -- c = kzalloc_node(sizeof(*c), GFP_KERNEL, mlx5e_get_node(priv, ix)); -+ c = kzalloc_node(sizeof(*c), GFP_KERNEL, cpu_to_node(cpu)); - if (!c) - return -ENOMEM; - -@@ -1765,6 +1764,7 @@ static int mlx5e_open_channel(struct mlx5e_priv *priv, int ix, - c->mdev = priv->mdev; - c->tstamp = &priv->tstamp; - c->ix = ix; -+ c->cpu = cpu; - c->pdev = &priv->mdev->pdev->dev; - c->netdev = priv->netdev; - c->mkey_be = cpu_to_be32(priv->mdev->mlx5e_res.mkey.key); -@@ -1853,8 +1853,7 @@ static void mlx5e_activate_channel(struct mlx5e_channel *c) - for (tc = 0; tc < c->num_tc; tc++) - mlx5e_activate_txqsq(&c->sq[tc]); - mlx5e_activate_rq(&c->rq); -- netif_set_xps_queue(c->netdev, -- mlx5_get_vector_affinity(c->priv->mdev, c->ix), c->ix); -+ netif_set_xps_queue(c->netdev, get_cpu_mask(c->cpu), c->ix); - } - - static void mlx5e_deactivate_channel(struct mlx5e_channel *c) -diff --git a/drivers/net/ethernet/mellanox/mlx5/core/main.c b/drivers/net/ethernet/mellanox/mlx5/core/main.c -index 5f323442cc5a..8a89c7e8cd63 100644 ---- a/drivers/net/ethernet/mellanox/mlx5/core/main.c -+++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c -@@ -317,9 +317,6 @@ static int mlx5_alloc_irq_vectors(struct mlx5_core_dev *dev) - { - struct mlx5_priv *priv = &dev->priv; - struct mlx5_eq_table *table = &priv->eq_table; -- struct irq_affinity irqdesc = { -- .pre_vectors = MLX5_EQ_VEC_COMP_BASE, -- }; - int num_eqs = 1 << MLX5_CAP_GEN(dev, log_max_eq); - int nvec; - -@@ -333,10 +330,9 @@ static int mlx5_alloc_irq_vectors(struct mlx5_core_dev *dev) - if (!priv->irq_info) - goto err_free_msix; - -- nvec = pci_alloc_irq_vectors_affinity(dev->pdev, -+ nvec = pci_alloc_irq_vectors(dev->pdev, - MLX5_EQ_VEC_COMP_BASE + 1, nvec, -- PCI_IRQ_MSIX | PCI_IRQ_AFFINITY, -- &irqdesc); -+ PCI_IRQ_MSIX); - if (nvec < 0) - return nvec; - -@@ -622,6 +618,63 @@ u64 mlx5_read_internal_timer(struct mlx5_core_dev *dev) - return (u64)timer_l | (u64)timer_h1 << 32; - } - -+static int mlx5_irq_set_affinity_hint(struct mlx5_core_dev *mdev, int i) -+{ -+ struct mlx5_priv *priv = &mdev->priv; -+ int irq = pci_irq_vector(mdev->pdev, MLX5_EQ_VEC_COMP_BASE + i); -+ -+ if (!zalloc_cpumask_var(&priv->irq_info[i].mask, GFP_KERNEL)) { -+ mlx5_core_warn(mdev, "zalloc_cpumask_var failed"); -+ return -ENOMEM; -+ } -+ -+ cpumask_set_cpu(cpumask_local_spread(i, priv->numa_node), -+ priv->irq_info[i].mask); -+ -+ if (IS_ENABLED(CONFIG_SMP) && -+ irq_set_affinity_hint(irq, priv->irq_info[i].mask)) -+ mlx5_core_warn(mdev, "irq_set_affinity_hint failed, irq 0x%.4x", irq); -+ -+ return 0; -+} -+ -+static void mlx5_irq_clear_affinity_hint(struct mlx5_core_dev *mdev, int i) -+{ -+ struct mlx5_priv *priv = &mdev->priv; -+ int irq = pci_irq_vector(mdev->pdev, MLX5_EQ_VEC_COMP_BASE + i); -+ -+ irq_set_affinity_hint(irq, NULL); -+ free_cpumask_var(priv->irq_info[i].mask); -+} -+ -+static int mlx5_irq_set_affinity_hints(struct mlx5_core_dev *mdev) -+{ -+ int err; -+ int i; -+ -+ for (i = 0; i < mdev->priv.eq_table.num_comp_vectors; i++) { -+ err = mlx5_irq_set_affinity_hint(mdev, i); -+ if (err) -+ goto err_out; -+ } -+ -+ return 0; -+ -+err_out: -+ for (i--; i >= 0; i--) -+ mlx5_irq_clear_affinity_hint(mdev, i); -+ -+ return err; -+} -+ -+static void mlx5_irq_clear_affinity_hints(struct mlx5_core_dev *mdev) -+{ -+ int i; -+ -+ for (i = 0; i < mdev->priv.eq_table.num_comp_vectors; i++) -+ mlx5_irq_clear_affinity_hint(mdev, i); -+} -+ - int mlx5_vector2eqn(struct mlx5_core_dev *dev, int vector, int *eqn, - unsigned int *irqn) - { -@@ -1097,6 +1150,12 @@ static int mlx5_load_one(struct mlx5_core_dev *dev, struct mlx5_priv *priv, - goto err_stop_eqs; - } - -+ err = mlx5_irq_set_affinity_hints(dev); -+ if (err) { -+ dev_err(&pdev->dev, "Failed to alloc affinity hint cpumask\n"); -+ goto err_affinity_hints; -+ } -+ - err = mlx5_init_fs(dev); - if (err) { - dev_err(&pdev->dev, "Failed to init flow steering\n"); -@@ -1154,6 +1213,9 @@ err_sriov: - mlx5_cleanup_fs(dev); - - err_fs: -+ mlx5_irq_clear_affinity_hints(dev); -+ -+err_affinity_hints: - free_comp_eqs(dev); - - err_stop_eqs: -@@ -1222,6 +1284,7 @@ static int mlx5_unload_one(struct mlx5_core_dev *dev, struct mlx5_priv *priv, - - mlx5_sriov_detach(dev); - mlx5_cleanup_fs(dev); -+ mlx5_irq_clear_affinity_hints(dev); - free_comp_eqs(dev); - mlx5_stop_eqs(dev); - mlx5_put_uars_page(dev, priv->uar); -diff --git a/include/linux/mlx5/driver.h b/include/linux/mlx5/driver.h -index a886b51511ab..40a6f33c4cde 100644 ---- a/include/linux/mlx5/driver.h -+++ b/include/linux/mlx5/driver.h -@@ -556,6 +556,7 @@ struct mlx5_core_sriov { - }; - - struct mlx5_irq_info { -+ cpumask_var_t mask; - char name[MLX5_MAX_IRQ_NAME]; - }; - --- -2.15.0 - diff --git a/queue/USB-chipidea-msm-fix-ulpi-node-lookup.patch b/queue/USB-chipidea-msm-fix-ulpi-node-lookup.patch deleted file mode 100644 index b1582dc..0000000 --- a/queue/USB-chipidea-msm-fix-ulpi-node-lookup.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 964728f9f407eca0b417fdf8e784b7a76979490c Mon Sep 17 00:00:00 2001 -From: Johan Hovold <johan@kernel.org> -Date: Mon, 13 Nov 2017 11:12:58 +0100 -Subject: [PATCH] USB: chipidea: msm: fix ulpi-node lookup - -commit 964728f9f407eca0b417fdf8e784b7a76979490c upstream. - -Fix child-node lookup during probe, which ended up searching the whole -device tree depth-first starting at the parent rather than just matching -on its children. - -Note that the original premature free of the parent node has already -been fixed separately, but that fix was apparently never backported to -stable. - -Fixes: 47654a162081 ("usb: chipidea: msm: Restore wrapper settings after reset") -Fixes: b74c43156c0c ("usb: chipidea: msm: ci_hdrc_msm_probe() missing of_node_get()") -Cc: stable <stable@vger.kernel.org> # 4.10: b74c43156c0c -Cc: Stephen Boyd <stephen.boyd@linaro.org> -Cc: Frank Rowand <frank.rowand@sony.com> -Signed-off-by: Johan Hovold <johan@kernel.org> -Signed-off-by: Peter Chen <peter.chen@nxp.com> - -diff --git a/drivers/usb/chipidea/ci_hdrc_msm.c b/drivers/usb/chipidea/ci_hdrc_msm.c -index 3593ce0ec641..880009987460 100644 ---- a/drivers/usb/chipidea/ci_hdrc_msm.c -+++ b/drivers/usb/chipidea/ci_hdrc_msm.c -@@ -247,7 +247,7 @@ static int ci_hdrc_msm_probe(struct platform_device *pdev) - if (ret) - goto err_mux; - -- ulpi_node = of_find_node_by_name(of_node_get(pdev->dev.of_node), "ulpi"); -+ ulpi_node = of_get_child_by_name(pdev->dev.of_node, "ulpi"); - if (ulpi_node) { - phy_node = of_get_next_available_child(ulpi_node, NULL); - ci->hsic = of_device_is_compatible(phy_node, "qcom,usb-hsic-phy"); --- -2.15.0 - diff --git a/queue/block-don-t-let-passthrough-IO-go-into-.make_request.patch b/queue/block-don-t-let-passthrough-IO-go-into-.make_request.patch deleted file mode 100644 index a35d61b..0000000 --- a/queue/block-don-t-let-passthrough-IO-go-into-.make_request.patch +++ /dev/null @@ -1,102 +0,0 @@ -From 14cb0dc6479dc5ebc63b3a459a5d89a2f1b39fed Mon Sep 17 00:00:00 2001 -From: Ming Lei <ming.lei@redhat.com> -Date: Mon, 18 Dec 2017 15:40:43 +0800 -Subject: [PATCH] block: don't let passthrough IO go into .make_request_fn() - -commit 14cb0dc6479dc5ebc63b3a459a5d89a2f1b39fed upstream. - -Commit a8821f3f3("block: Improvements to bounce-buffer handling") tries -to make sure that the bio to .make_request_fn won't exceed BIO_MAX_PAGES, -but ignores that passthrough I/O can use blk_queue_bounce() too. -Especially, passthrough IO may not be sector-aligned, and the check -of 'sectors < bio_sectors(*bio_orig)' inside __blk_queue_bounce() may -become true even though the max bvec number doesn't exceed BIO_MAX_PAGES, -then cause the bio splitted, and the original passthrough bio is submited -to generic_make_request(). - -This patch fixes this issue by checking if the bio is passthrough IO, -and use bio_kmalloc() to allocate the cloned passthrough bio. - -Cc: NeilBrown <neilb@suse.com> -Fixes: a8821f3f3("block: Improvements to bounce-buffer handling") -Tested-by: Michele Ballabio <barra_cuda@katamail.com> -Signed-off-by: Ming Lei <ming.lei@redhat.com> -Signed-off-by: Jens Axboe <axboe@kernel.dk> - -diff --git a/block/bounce.c b/block/bounce.c -index fceb1a96480b..1d05c422c932 100644 ---- a/block/bounce.c -+++ b/block/bounce.c -@@ -200,6 +200,7 @@ static void __blk_queue_bounce(struct request_queue *q, struct bio **bio_orig, - unsigned i = 0; - bool bounce = false; - int sectors = 0; -+ bool passthrough = bio_is_passthrough(*bio_orig); - - bio_for_each_segment(from, *bio_orig, iter) { - if (i++ < BIO_MAX_PAGES) -@@ -210,13 +211,14 @@ static void __blk_queue_bounce(struct request_queue *q, struct bio **bio_orig, - if (!bounce) - return; - -- if (sectors < bio_sectors(*bio_orig)) { -+ if (!passthrough && sectors < bio_sectors(*bio_orig)) { - bio = bio_split(*bio_orig, sectors, GFP_NOIO, bounce_bio_split); - bio_chain(bio, *bio_orig); - generic_make_request(*bio_orig); - *bio_orig = bio; - } -- bio = bio_clone_bioset(*bio_orig, GFP_NOIO, bounce_bio_set); -+ bio = bio_clone_bioset(*bio_orig, GFP_NOIO, passthrough ? NULL : -+ bounce_bio_set); - - bio_for_each_segment_all(to, bio, i) { - struct page *page = to->bv_page; -diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h -index 8089ca17db9a..abd06f540863 100644 ---- a/include/linux/blkdev.h -+++ b/include/linux/blkdev.h -@@ -241,14 +241,24 @@ struct request { - struct request *next_rq; - }; - -+static inline bool blk_op_is_scsi(unsigned int op) -+{ -+ return op == REQ_OP_SCSI_IN || op == REQ_OP_SCSI_OUT; -+} -+ -+static inline bool blk_op_is_private(unsigned int op) -+{ -+ return op == REQ_OP_DRV_IN || op == REQ_OP_DRV_OUT; -+} -+ - static inline bool blk_rq_is_scsi(struct request *rq) - { -- return req_op(rq) == REQ_OP_SCSI_IN || req_op(rq) == REQ_OP_SCSI_OUT; -+ return blk_op_is_scsi(req_op(rq)); - } - - static inline bool blk_rq_is_private(struct request *rq) - { -- return req_op(rq) == REQ_OP_DRV_IN || req_op(rq) == REQ_OP_DRV_OUT; -+ return blk_op_is_private(req_op(rq)); - } - - static inline bool blk_rq_is_passthrough(struct request *rq) -@@ -256,6 +266,13 @@ static inline bool blk_rq_is_passthrough(struct request *rq) - return blk_rq_is_scsi(rq) || blk_rq_is_private(rq); - } - -+static inline bool bio_is_passthrough(struct bio *bio) -+{ -+ unsigned op = bio_op(bio); -+ -+ return blk_op_is_scsi(op) || blk_op_is_private(op); -+} -+ - static inline unsigned short req_get_ioprio(struct request *req) - { - return req->ioprio; --- -2.15.0 - diff --git a/queue/block-fix-blk_rq_append_bio.patch b/queue/block-fix-blk_rq_append_bio.patch deleted file mode 100644 index 6a6b69b..0000000 --- a/queue/block-fix-blk_rq_append_bio.patch +++ /dev/null @@ -1,158 +0,0 @@ -From 0abc2a10389f0c9070f76ca906c7382788036b93 Mon Sep 17 00:00:00 2001 -From: Jens Axboe <axboe@kernel.dk> -Date: Mon, 18 Dec 2017 15:40:44 +0800 -Subject: [PATCH] block: fix blk_rq_append_bio - -commit 0abc2a10389f0c9070f76ca906c7382788036b93 upstream. - -Commit caa4b02476e3(blk-map: call blk_queue_bounce from blk_rq_append_bio) -moves blk_queue_bounce() into blk_rq_append_bio(), but don't consider -the fact that the bounced bio becomes invisible to caller since the -parameter type is 'struct bio *'. Make it a pointer to a pointer to -a bio, so the caller sees the right bio also after a bounce. - -Fixes: caa4b02476e3 ("blk-map: call blk_queue_bounce from blk_rq_append_bio") -Cc: Christoph Hellwig <hch@lst.de> -Reported-by: Michele Ballabio <barra_cuda@katamail.com> -(handling failure of blk_rq_append_bio(), only call bio_get() after -blk_rq_append_bio() returns OK) -Tested-by: Michele Ballabio <barra_cuda@katamail.com> -Signed-off-by: Ming Lei <ming.lei@redhat.com> -Signed-off-by: Jens Axboe <axboe@kernel.dk> - -diff --git a/block/blk-map.c b/block/blk-map.c -index b21f8e86f120..d3a94719f03f 100644 ---- a/block/blk-map.c -+++ b/block/blk-map.c -@@ -12,22 +12,29 @@ - #include "blk.h" - - /* -- * Append a bio to a passthrough request. Only works can be merged into -- * the request based on the driver constraints. -+ * Append a bio to a passthrough request. Only works if the bio can be merged -+ * into the request based on the driver constraints. - */ --int blk_rq_append_bio(struct request *rq, struct bio *bio) -+int blk_rq_append_bio(struct request *rq, struct bio **bio) - { -- blk_queue_bounce(rq->q, &bio); -+ struct bio *orig_bio = *bio; -+ -+ blk_queue_bounce(rq->q, bio); - - if (!rq->bio) { -- blk_rq_bio_prep(rq->q, rq, bio); -+ blk_rq_bio_prep(rq->q, rq, *bio); - } else { -- if (!ll_back_merge_fn(rq->q, rq, bio)) -+ if (!ll_back_merge_fn(rq->q, rq, *bio)) { -+ if (orig_bio != *bio) { -+ bio_put(*bio); -+ *bio = orig_bio; -+ } - return -EINVAL; -+ } - -- rq->biotail->bi_next = bio; -- rq->biotail = bio; -- rq->__data_len += bio->bi_iter.bi_size; -+ rq->biotail->bi_next = *bio; -+ rq->biotail = *bio; -+ rq->__data_len += (*bio)->bi_iter.bi_size; - } - - return 0; -@@ -73,14 +80,12 @@ static int __blk_rq_map_user_iov(struct request *rq, - * We link the bounce buffer in and could have to traverse it - * later so we have to get a ref to prevent it from being freed - */ -- ret = blk_rq_append_bio(rq, bio); -- bio_get(bio); -+ ret = blk_rq_append_bio(rq, &bio); - if (ret) { -- bio_endio(bio); - __blk_rq_unmap_user(orig_bio); -- bio_put(bio); - return ret; - } -+ bio_get(bio); - - return 0; - } -@@ -213,7 +218,7 @@ int blk_rq_map_kern(struct request_queue *q, struct request *rq, void *kbuf, - int reading = rq_data_dir(rq) == READ; - unsigned long addr = (unsigned long) kbuf; - int do_copy = 0; -- struct bio *bio; -+ struct bio *bio, *orig_bio; - int ret; - - if (len > (queue_max_hw_sectors(q) << 9)) -@@ -236,10 +241,11 @@ int blk_rq_map_kern(struct request_queue *q, struct request *rq, void *kbuf, - if (do_copy) - rq->rq_flags |= RQF_COPY_USER; - -- ret = blk_rq_append_bio(rq, bio); -+ orig_bio = bio; -+ ret = blk_rq_append_bio(rq, &bio); - if (unlikely(ret)) { - /* request is too big */ -- bio_put(bio); -+ bio_put(orig_bio); - return ret; - } - -diff --git a/drivers/scsi/osd/osd_initiator.c b/drivers/scsi/osd/osd_initiator.c -index a4f28b7e4c65..e18877177f1b 100644 ---- a/drivers/scsi/osd/osd_initiator.c -+++ b/drivers/scsi/osd/osd_initiator.c -@@ -1576,7 +1576,9 @@ static struct request *_make_request(struct request_queue *q, bool has_write, - return req; - - for_each_bio(bio) { -- ret = blk_rq_append_bio(req, bio); -+ struct bio *bounce_bio = bio; -+ -+ ret = blk_rq_append_bio(req, &bounce_bio); - if (ret) - return ERR_PTR(ret); - } -diff --git a/drivers/target/target_core_pscsi.c b/drivers/target/target_core_pscsi.c -index 7c69b4a9694d..0d99b242e82e 100644 ---- a/drivers/target/target_core_pscsi.c -+++ b/drivers/target/target_core_pscsi.c -@@ -920,7 +920,7 @@ pscsi_map_sg(struct se_cmd *cmd, struct scatterlist *sgl, u32 sgl_nents, - " %d i: %d bio: %p, allocating another" - " bio\n", bio->bi_vcnt, i, bio); - -- rc = blk_rq_append_bio(req, bio); -+ rc = blk_rq_append_bio(req, &bio); - if (rc) { - pr_err("pSCSI: failed to append bio\n"); - goto fail; -@@ -938,7 +938,7 @@ pscsi_map_sg(struct se_cmd *cmd, struct scatterlist *sgl, u32 sgl_nents, - } - - if (bio) { -- rc = blk_rq_append_bio(req, bio); -+ rc = blk_rq_append_bio(req, &bio); - if (rc) { - pr_err("pSCSI: failed to append bio\n"); - goto fail; -diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h -index abd06f540863..100d0df38026 100644 ---- a/include/linux/blkdev.h -+++ b/include/linux/blkdev.h -@@ -965,7 +965,7 @@ extern int blk_rq_prep_clone(struct request *rq, struct request *rq_src, - extern void blk_rq_unprep_clone(struct request *rq); - extern blk_status_t blk_insert_cloned_request(struct request_queue *q, - struct request *rq); --extern int blk_rq_append_bio(struct request *rq, struct bio *bio); -+extern int blk_rq_append_bio(struct request *rq, struct bio **bio); - extern void blk_delay_queue(struct request_queue *, unsigned long); - extern void blk_queue_split(struct request_queue *, struct bio **); - extern void blk_recount_segments(struct request_queue *, struct bio *); --- -2.15.0 - diff --git a/queue/cpufreq-schedutil-Use-idle_calls-counter-of-the-remo.patch b/queue/cpufreq-schedutil-Use-idle_calls-counter-of-the-remo.patch deleted file mode 100644 index 9d5ad73..0000000 --- a/queue/cpufreq-schedutil-Use-idle_calls-counter-of-the-remo.patch +++ /dev/null @@ -1,72 +0,0 @@ -From 466a2b42d67644447a1765276259a3ea5531ddff Mon Sep 17 00:00:00 2001 -From: Joel Fernandes <joelaf@google.com> -Date: Thu, 21 Dec 2017 02:22:45 +0100 -Subject: [PATCH] cpufreq: schedutil: Use idle_calls counter of the remote CPU - -commit 466a2b42d67644447a1765276259a3ea5531ddff upstream. - -Since the recent remote cpufreq callback work, its possible that a cpufreq -update is triggered from a remote CPU. For single policies however, the current -code uses the local CPU when trying to determine if the remote sg_cpu entered -idle or is busy. This is incorrect. To remedy this, compare with the nohz tick -idle_calls counter of the remote CPU. - -Fixes: 674e75411fc2 (sched: cpufreq: Allow remote cpufreq callbacks) -Acked-by: Viresh Kumar <viresh.kumar@linaro.org> -Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org> -Signed-off-by: Joel Fernandes <joelaf@google.com> -Cc: 4.14+ <stable@vger.kernel.org> # 4.14+ -Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> - -diff --git a/include/linux/tick.h b/include/linux/tick.h -index f442d1a42025..7cc35921218e 100644 ---- a/include/linux/tick.h -+++ b/include/linux/tick.h -@@ -119,6 +119,7 @@ extern void tick_nohz_idle_exit(void); - extern void tick_nohz_irq_exit(void); - extern ktime_t tick_nohz_get_sleep_length(void); - extern unsigned long tick_nohz_get_idle_calls(void); -+extern unsigned long tick_nohz_get_idle_calls_cpu(int cpu); - extern u64 get_cpu_idle_time_us(int cpu, u64 *last_update_time); - extern u64 get_cpu_iowait_time_us(int cpu, u64 *last_update_time); - #else /* !CONFIG_NO_HZ_COMMON */ -diff --git a/kernel/sched/cpufreq_schedutil.c b/kernel/sched/cpufreq_schedutil.c -index 2f52ec0f1539..d6717a3331a1 100644 ---- a/kernel/sched/cpufreq_schedutil.c -+++ b/kernel/sched/cpufreq_schedutil.c -@@ -244,7 +244,7 @@ static void sugov_iowait_boost(struct sugov_cpu *sg_cpu, unsigned long *util, - #ifdef CONFIG_NO_HZ_COMMON - static bool sugov_cpu_is_busy(struct sugov_cpu *sg_cpu) - { -- unsigned long idle_calls = tick_nohz_get_idle_calls(); -+ unsigned long idle_calls = tick_nohz_get_idle_calls_cpu(sg_cpu->cpu); - bool ret = idle_calls == sg_cpu->saved_idle_calls; - - sg_cpu->saved_idle_calls = idle_calls; -diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c -index 99578f06c8d4..77555faf6fbc 100644 ---- a/kernel/time/tick-sched.c -+++ b/kernel/time/tick-sched.c -@@ -985,6 +985,19 @@ ktime_t tick_nohz_get_sleep_length(void) - return ts->sleep_length; - } - -+/** -+ * tick_nohz_get_idle_calls_cpu - return the current idle calls counter value -+ * for a particular CPU. -+ * -+ * Called from the schedutil frequency scaling governor in scheduler context. -+ */ -+unsigned long tick_nohz_get_idle_calls_cpu(int cpu) -+{ -+ struct tick_sched *ts = tick_get_tick_sched(cpu); -+ -+ return ts->idle_calls; -+} -+ - /** - * tick_nohz_get_idle_calls - return the current idle calls counter value - * --- -2.15.0 - diff --git a/queue/ipv4-fib-Fix-metrics-match-when-deleting-a-route.patch b/queue/ipv4-fib-Fix-metrics-match-when-deleting-a-route.patch deleted file mode 100644 index 9a16f4c..0000000 --- a/queue/ipv4-fib-Fix-metrics-match-when-deleting-a-route.patch +++ /dev/null @@ -1,58 +0,0 @@ -From d03a45572efa068fa64db211d6d45222660e76c5 Mon Sep 17 00:00:00 2001 -From: Phil Sutter <phil@nwl.cc> -Date: Tue, 19 Dec 2017 15:17:13 +0100 -Subject: [PATCH] ipv4: fib: Fix metrics match when deleting a route - -commit d03a45572efa068fa64db211d6d45222660e76c5 upstream. - -The recently added fib_metrics_match() causes a regression for routes -with both RTAX_FEATURES and RTAX_CC_ALGO if the latter has -TCP_CONG_NEEDS_ECN flag set: - -| # ip link add d0 type dummy -| # ip link set d0 up -| # ip route add 172.29.29.0/24 dev d0 features ecn congctl dctcp -| # ip route del 172.29.29.0/24 dev d0 features ecn congctl dctcp -| RTNETLINK answers: No such process - -During route insertion, fib_convert_metrics() detects that the given CC -algo requires ECN and hence sets DST_FEATURE_ECN_CA bit in -RTAX_FEATURES. - -During route deletion though, fib_metrics_match() compares stored -RTAX_FEATURES value with that from userspace (which obviously has no -knowledge about DST_FEATURE_ECN_CA) and fails. - -Fixes: 5f9ae3d9e7e4a ("ipv4: do metrics match when looking up and deleting a route") -Signed-off-by: Phil Sutter <phil@nwl.cc> -Signed-off-by: David S. Miller <davem@davemloft.net> - -diff --git a/net/ipv4/fib_semantics.c b/net/ipv4/fib_semantics.c -index f04d944f8abe..c586597da20d 100644 ---- a/net/ipv4/fib_semantics.c -+++ b/net/ipv4/fib_semantics.c -@@ -698,7 +698,7 @@ bool fib_metrics_match(struct fib_config *cfg, struct fib_info *fi) - - nla_for_each_attr(nla, cfg->fc_mx, cfg->fc_mx_len, remaining) { - int type = nla_type(nla); -- u32 val; -+ u32 fi_val, val; - - if (!type) - continue; -@@ -715,7 +715,11 @@ bool fib_metrics_match(struct fib_config *cfg, struct fib_info *fi) - val = nla_get_u32(nla); - } - -- if (fi->fib_metrics->metrics[type - 1] != val) -+ fi_val = fi->fib_metrics->metrics[type - 1]; -+ if (type == RTAX_FEATURES) -+ fi_val &= ~DST_FEATURE_ECN_CA; -+ -+ if (fi_val != val) - return false; - } - --- -2.15.0 - diff --git a/queue/ipv6-Honor-specified-parameters-in-fibmatch-lookup.patch b/queue/ipv6-Honor-specified-parameters-in-fibmatch-lookup.patch deleted file mode 100644 index e891a64..0000000 --- a/queue/ipv6-Honor-specified-parameters-in-fibmatch-lookup.patch +++ /dev/null @@ -1,94 +0,0 @@ -From 58acfd714e6b02e8617448b431c2b64a2f1f0792 Mon Sep 17 00:00:00 2001 -From: Ido Schimmel <idosch@mellanox.com> -Date: Wed, 20 Dec 2017 12:28:25 +0200 -Subject: [PATCH] ipv6: Honor specified parameters in fibmatch lookup - -commit 58acfd714e6b02e8617448b431c2b64a2f1f0792 upstream. - -Currently, parameters such as oif and source address are not taken into -account during fibmatch lookup. Example (IPv4 for reference) before -patch: - -$ ip -4 route show -192.0.2.0/24 dev dummy0 proto kernel scope link src 192.0.2.1 -198.51.100.0/24 dev dummy1 proto kernel scope link src 198.51.100.1 - -$ ip -6 route show -2001:db8:1::/64 dev dummy0 proto kernel metric 256 pref medium -2001:db8:2::/64 dev dummy1 proto kernel metric 256 pref medium -fe80::/64 dev dummy0 proto kernel metric 256 pref medium -fe80::/64 dev dummy1 proto kernel metric 256 pref medium - -$ ip -4 route get fibmatch 192.0.2.2 oif dummy0 -192.0.2.0/24 dev dummy0 proto kernel scope link src 192.0.2.1 -$ ip -4 route get fibmatch 192.0.2.2 oif dummy1 -RTNETLINK answers: No route to host - -$ ip -6 route get fibmatch 2001:db8:1::2 oif dummy0 -2001:db8:1::/64 dev dummy0 proto kernel metric 256 pref medium -$ ip -6 route get fibmatch 2001:db8:1::2 oif dummy1 -2001:db8:1::/64 dev dummy0 proto kernel metric 256 pref medium - -After: - -$ ip -6 route get fibmatch 2001:db8:1::2 oif dummy0 -2001:db8:1::/64 dev dummy0 proto kernel metric 256 pref medium -$ ip -6 route get fibmatch 2001:db8:1::2 oif dummy1 -RTNETLINK answers: Network is unreachable - -The problem stems from the fact that the necessary route lookup flags -are not set based on these parameters. - -Instead of duplicating the same logic for fibmatch, we can simply -resolve the original route from its copy and dump it instead. - -Fixes: 18c3a61c4264 ("net: ipv6: RTM_GETROUTE: return matched fib result when requested") -Signed-off-by: Ido Schimmel <idosch@mellanox.com> -Acked-by: David Ahern <dsahern@gmail.com> -Signed-off-by: David S. Miller <davem@davemloft.net> - -diff --git a/net/ipv6/route.c b/net/ipv6/route.c -index 2bc91c349273..0458b761f3c5 100644 ---- a/net/ipv6/route.c -+++ b/net/ipv6/route.c -@@ -4298,19 +4298,13 @@ static int inet6_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh, - if (!ipv6_addr_any(&fl6.saddr)) - flags |= RT6_LOOKUP_F_HAS_SADDR; - -- if (!fibmatch) -- dst = ip6_route_input_lookup(net, dev, &fl6, flags); -- else -- dst = ip6_route_lookup(net, &fl6, 0); -+ dst = ip6_route_input_lookup(net, dev, &fl6, flags); - - rcu_read_unlock(); - } else { - fl6.flowi6_oif = oif; - -- if (!fibmatch) -- dst = ip6_route_output(net, NULL, &fl6); -- else -- dst = ip6_route_lookup(net, &fl6, 0); -+ dst = ip6_route_output(net, NULL, &fl6); - } - - -@@ -4327,6 +4321,15 @@ static int inet6_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh, - goto errout; - } - -+ if (fibmatch && rt->dst.from) { -+ struct rt6_info *ort = container_of(rt->dst.from, -+ struct rt6_info, dst); -+ -+ dst_hold(&ort->dst); -+ ip6_rt_put(rt); -+ rt = ort; -+ } -+ - skb = alloc_skb(NLMSG_GOODSIZE, GFP_KERNEL); - if (!skb) { - ip6_rt_put(rt); --- -2.15.0 - diff --git a/queue/ipv6-set-all.accept_dad-to-0-by-default.patch b/queue/ipv6-set-all.accept_dad-to-0-by-default.patch deleted file mode 100644 index c2e2b17..0000000 --- a/queue/ipv6-set-all.accept_dad-to-0-by-default.patch +++ /dev/null @@ -1,65 +0,0 @@ -From 094009531612246d9e13f9e0c3ae2205d7f63a0a Mon Sep 17 00:00:00 2001 -From: Nicolas Dichtel <nicolas.dichtel@6wind.com> -Date: Tue, 14 Nov 2017 14:21:32 +0100 -Subject: [PATCH] ipv6: set all.accept_dad to 0 by default - -commit 094009531612246d9e13f9e0c3ae2205d7f63a0a upstream. - -With commits 35e015e1f577 and a2d3f3e33853, the global 'accept_dad' flag -is also taken into account (default value is 1). If either global or -per-interface flag is non-zero, DAD will be enabled on a given interface. - -This is not backward compatible: before those patches, the user could -disable DAD just by setting the per-interface flag to 0. Now, the -user instead needs to set both flags to 0 to actually disable DAD. - -Restore the previous behaviour by setting the default for the global -'accept_dad' flag to 0. This way, DAD is still enabled by default, -as per-interface flags are set to 1 on device creation, but setting -them to 0 is enough to disable DAD on a given interface. - -- Before 35e015e1f57a7 and a2d3f3e33853: - global per-interface DAD enabled -[default] 1 1 yes - X 0 no - X 1 yes - -- After 35e015e1f577 and a2d3f3e33853: - global per-interface DAD enabled -[default] 1 1 yes - 0 0 no - 0 1 yes - 1 0 yes - -- After this fix: - global per-interface DAD enabled - 1 1 yes - 0 0 no -[default] 0 1 yes - 1 0 yes - -Fixes: 35e015e1f577 ("ipv6: fix net.ipv6.conf.all interface DAD handlers") -Fixes: a2d3f3e33853 ("ipv6: fix net.ipv6.conf.all.accept_dad behaviour for real") -CC: Stefano Brivio <sbrivio@redhat.com> -CC: Matteo Croce <mcroce@redhat.com> -CC: Erik Kline <ek@google.com> -Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com> -Acked-by: Stefano Brivio <sbrivio@redhat.com> -Signed-off-by: David S. Miller <davem@davemloft.net> - -diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c -index a6dffd65eb9d..a0ae1c9d37df 100644 ---- a/net/ipv6/addrconf.c -+++ b/net/ipv6/addrconf.c -@@ -231,7 +231,7 @@ static struct ipv6_devconf ipv6_devconf __read_mostly = { - .proxy_ndp = 0, - .accept_source_route = 0, /* we do not accept RH0 by default. */ - .disable_ipv6 = 0, -- .accept_dad = 1, -+ .accept_dad = 0, - .suppress_frag_ndisc = 1, - .accept_ra_mtu = 1, - .stable_secret = { --- -2.15.0 - diff --git a/queue/net-mlx5-FPGA-return-EINVAL-if-size-is-zero.patch b/queue/net-mlx5-FPGA-return-EINVAL-if-size-is-zero.patch deleted file mode 100644 index 595173e..0000000 --- a/queue/net-mlx5-FPGA-return-EINVAL-if-size-is-zero.patch +++ /dev/null @@ -1,51 +0,0 @@ -From bae115a2bb479142605726e6aa130f43f50e801a Mon Sep 17 00:00:00 2001 -From: Kamal Heib <kamalh@mellanox.com> -Date: Sun, 29 Oct 2017 04:03:37 +0200 -Subject: [PATCH] net/mlx5: FPGA, return -EINVAL if size is zero - -commit bae115a2bb479142605726e6aa130f43f50e801a upstream. - -Currently, if a size of zero is passed to -mlx5_fpga_mem_{read|write}_i2c() -the "err" return value will not be initialized, which triggers gcc -warnings: - -[..]/mlx5/core/fpga/sdk.c:87 mlx5_fpga_mem_read_i2c() error: -uninitialized symbol 'err'. -[..]/mlx5/core/fpga/sdk.c:115 mlx5_fpga_mem_write_i2c() error: -uninitialized symbol 'err'. - -fix that. - -Fixes: a9956d35d199 ('net/mlx5: FPGA, Add SBU infrastructure') -Signed-off-by: Kamal Heib <kamalh@mellanox.com> -Reviewed-by: Yevgeny Kliteynik <kliteyn@mellanox.com> -Signed-off-by: Saeed Mahameed <saeedm@mellanox.com> - -diff --git a/drivers/net/ethernet/mellanox/mlx5/core/fpga/sdk.c b/drivers/net/ethernet/mellanox/mlx5/core/fpga/sdk.c -index 3c11d6e2160a..14962969c5ba 100644 ---- a/drivers/net/ethernet/mellanox/mlx5/core/fpga/sdk.c -+++ b/drivers/net/ethernet/mellanox/mlx5/core/fpga/sdk.c -@@ -66,6 +66,9 @@ static int mlx5_fpga_mem_read_i2c(struct mlx5_fpga_device *fdev, size_t size, - u8 actual_size; - int err; - -+ if (!size) -+ return -EINVAL; -+ - if (!fdev->mdev) - return -ENOTCONN; - -@@ -95,6 +98,9 @@ static int mlx5_fpga_mem_write_i2c(struct mlx5_fpga_device *fdev, size_t size, - u8 actual_size; - int err; - -+ if (!size) -+ return -EINVAL; -+ - if (!fdev->mdev) - return -ENOTCONN; - --- -2.15.0 - diff --git a/queue/net-sched-fix-static-key-imbalance-in-case-of-ingres.patch b/queue/net-sched-fix-static-key-imbalance-in-case-of-ingres.patch deleted file mode 100644 index 7dbc980..0000000 --- a/queue/net-sched-fix-static-key-imbalance-in-case-of-ingres.patch +++ /dev/null @@ -1,61 +0,0 @@ -From b59e6979a86384e68b0ab6ffeab11f0034fba82d Mon Sep 17 00:00:00 2001 -From: Jiri Pirko <jiri@mellanox.com> -Date: Fri, 15 Dec 2017 12:40:13 +0100 -Subject: [PATCH] net: sched: fix static key imbalance in case of - ingress/clsact_init error - -commit b59e6979a86384e68b0ab6ffeab11f0034fba82d upstream. - -Move static key increments to the beginning of the init function -so they pair 1:1 with decrements in ingress/clsact_destroy, -which is called in case ingress/clsact_init fails. - -Fixes: 6529eaba33f0 ("net: sched: introduce tcf block infractructure") -Signed-off-by: Jiri Pirko <jiri@mellanox.com> -Acked-by: Cong Wang <xiyou.wangcong@gmail.com> -Signed-off-by: David S. Miller <davem@davemloft.net> - -diff --git a/net/sched/sch_ingress.c b/net/sched/sch_ingress.c -index 5e1cd2e5df87..fc1286f499c1 100644 ---- a/net/sched/sch_ingress.c -+++ b/net/sched/sch_ingress.c -@@ -68,6 +68,8 @@ static int ingress_init(struct Qdisc *sch, struct nlattr *opt) - struct net_device *dev = qdisc_dev(sch); - int err; - -+ net_inc_ingress_queue(); -+ - mini_qdisc_pair_init(&q->miniqp, sch, &dev->miniq_ingress); - - q->block_info.binder_type = TCF_BLOCK_BINDER_TYPE_CLSACT_INGRESS; -@@ -78,7 +80,6 @@ static int ingress_init(struct Qdisc *sch, struct nlattr *opt) - if (err) - return err; - -- net_inc_ingress_queue(); - sch->flags |= TCQ_F_CPUSTATS; - - return 0; -@@ -172,6 +173,9 @@ static int clsact_init(struct Qdisc *sch, struct nlattr *opt) - struct net_device *dev = qdisc_dev(sch); - int err; - -+ net_inc_ingress_queue(); -+ net_inc_egress_queue(); -+ - mini_qdisc_pair_init(&q->miniqp_ingress, sch, &dev->miniq_ingress); - - q->ingress_block_info.binder_type = TCF_BLOCK_BINDER_TYPE_CLSACT_INGRESS; -@@ -192,9 +196,6 @@ static int clsact_init(struct Qdisc *sch, struct nlattr *opt) - if (err) - return err; - -- net_inc_ingress_queue(); -- net_inc_egress_queue(); -- - sch->flags |= TCQ_F_CPUSTATS; - - return 0; --- -2.15.0 - diff --git a/queue/phylink-ensure-AN-is-enabled.patch b/queue/phylink-ensure-AN-is-enabled.patch deleted file mode 100644 index f2ff8d1..0000000 --- a/queue/phylink-ensure-AN-is-enabled.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 74ee0e8c1bf9925c59cc8f1c65c29adf6e4cf603 Mon Sep 17 00:00:00 2001 -From: Russell King <rmk+kernel@armlinux.org.uk> -Date: Wed, 20 Dec 2017 23:21:34 +0000 -Subject: [PATCH] phylink: ensure AN is enabled - -commit 74ee0e8c1bf9925c59cc8f1c65c29adf6e4cf603 upstream. - -Ensure that we mark AN as enabled at boot time, rather than leaving -it disabled. This is noticable if your SFP module is fiber, and -it supports faster speeds than 1G with 2.5G support in place. - -Fixes: 9525ae83959b ("phylink: add phylink infrastructure") -Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> -Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> -Signed-off-by: David S. Miller <davem@davemloft.net> - -diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c -index 8d06a083ac4c..827f3f92560e 100644 ---- a/drivers/net/phy/phylink.c -+++ b/drivers/net/phy/phylink.c -@@ -526,6 +526,7 @@ struct phylink *phylink_create(struct net_device *ndev, struct device_node *np, - pl->link_config.pause = MLO_PAUSE_AN; - pl->link_config.speed = SPEED_UNKNOWN; - pl->link_config.duplex = DUPLEX_UNKNOWN; -+ pl->link_config.an_enabled = true; - pl->ops = ops; - __set_bit(PHYLINK_DISABLE_STOPPED, &pl->phylink_disable_state); - --- -2.15.0 - diff --git a/queue/phylink-ensure-the-PHY-interface-mode-is-appropriate.patch b/queue/phylink-ensure-the-PHY-interface-mode-is-appropriate.patch deleted file mode 100644 index 5afe9b0..0000000 --- a/queue/phylink-ensure-the-PHY-interface-mode-is-appropriate.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 182088aa3c6c7f7c20a2c1dcc9ded4a3fc631f38 Mon Sep 17 00:00:00 2001 -From: Russell King <rmk+kernel@armlinux.org.uk> -Date: Wed, 20 Dec 2017 23:21:28 +0000 -Subject: [PATCH] phylink: ensure the PHY interface mode is appropriately set - -commit 182088aa3c6c7f7c20a2c1dcc9ded4a3fc631f38 upstream. - -When setting the ethtool settings, ensure that the validated PHY -interface mode is propagated to the current link settings, so that -2500BaseX can be selected. - -Fixes: 9525ae83959b ("phylink: add phylink infrastructure") -Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> -Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> -Signed-off-by: David S. Miller <davem@davemloft.net> - -diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c -index 5dc9668dde34..8d06a083ac4c 100644 ---- a/drivers/net/phy/phylink.c -+++ b/drivers/net/phy/phylink.c -@@ -951,6 +951,7 @@ int phylink_ethtool_ksettings_set(struct phylink *pl, - mutex_lock(&pl->state_mutex); - /* Configure the MAC to match the new settings */ - linkmode_copy(pl->link_config.advertising, our_kset.link_modes.advertising); -+ pl->link_config.interface = config.interface; - pl->link_config.speed = our_kset.base.speed; - pl->link_config.duplex = our_kset.base.duplex; - pl->link_config.an_enabled = our_kset.base.autoneg != AUTONEG_DISABLE; --- -2.15.0 - diff --git a/queue/series b/queue/series index 49b13cd..d231c3f 100644 --- a/queue/series +++ b/queue/series @@ -9,18 +9,13 @@ ASoC-fsl_ssi-AC-97-ops-need-regmap-clock-and-cleanin.patch ASoC-twl4030-fix-child-node-lookup.patch ASoC-tlv320aic31xx-Fix-GPIO1-register-definition.patch gpio-fix-gpio-line-names-property-retrieval.patch -IB-hfi-Only-read-capability-registers-if-the-capabil.patch IB-mlx5-Serialize-access-to-the-VMA-list.patch IB-uverbs-Fix-command-checking-as-part-of-ib_uverbs_.patch -IB-core-Verify-that-QP-is-security-enabled-in-create.patch ALSA-hda-Drop-useless-WARN_ON.patch ALSA-hda-Add-MIC_NO_PRESENCE-fixup-for-2-HP-machines.patch ALSA-hda-change-the-location-for-one-mic-on-a-Lenovo.patch ALSA-hda-fix-headset-mic-detection-issue-on-a-Dell-m.patch ALSA-hda-Fix-missing-COEF-init-for-ALC225-295-299.patch -cpufreq-schedutil-Use-idle_calls-counter-of-the-remo.patch -block-fix-blk_rq_append_bio.patch -block-don-t-let-passthrough-IO-go-into-.make_request.patch kbuild-add-fno-stack-check-to-kernel-build-options.patch ipv4-igmp-guard-against-silly-MTU-values.patch ipv6-mcast-better-catch-silly-mtu-values.patch @@ -63,24 +58,11 @@ tipc-fix-hanging-poll-for-stream-sockets.patch mlxsw-spectrum-Disable-MAC-learning-for-ovs-port.patch tcp-fix-potential-underestimation-on-rcv_rtt.patch net-phy-marvell-Limit-88m1101-autoneg-errata-to-88E1.patch -ipv6-Honor-specified-parameters-in-fibmatch-lookup.patch -net-mlx5-FPGA-return-EINVAL-if-size-is-zero.patch -vxlan-restore-dev-mtu-setting-based-on-lower-device.patch -net-sched-fix-static-key-imbalance-in-case-of-ingres.patch bnxt_en-Fix-sources-of-spurious-netpoll-warnings.patch -phylink-ensure-the-PHY-interface-mode-is-appropriate.patch -phylink-ensure-AN-is-enabled.patch -ipv4-fib-Fix-metrics-match-when-deleting-a-route.patch -ipv6-set-all.accept_dad-to-0-by-default.patch -Revert-mlx5-move-affinity-hints-assignments-to-gener.patch -skbuff-orphan-frags-before-zerocopy-clone.patch -skbuff-skb_copy_ubufs-must-release-uarg-even-without.patch -sparc64-repair-calling-incorrect-hweight-function-fr.patch usbip-fix-usbip-bind-writing-random-string-after-com.patch usbip-prevent-leaking-socket-pointer-address-in-mess.patch usbip-stub-stop-printing-kernel-pointer-addresses-in.patch usbip-vhci-stop-printing-kernel-pointer-addresses-in.patch -USB-chipidea-msm-fix-ulpi-node-lookup.patch USB-serial-ftdi_sio-add-id-for-Airbus-DS-P8GR.patch USB-serial-qcserial-add-Sierra-Wireless-EM7565.patch USB-serial-option-add-support-for-Telit-ME910-PID-0x.patch @@ -95,7 +77,6 @@ binder-fix-proc-files-use-after-free.patch phy-tegra-fix-device-tree-node-lookups.patch drivers-base-cacheinfo-fix-cache-type-for-non-archit.patch staging-android-ion-Fix-dma-direction-for-dma_sync_s.patch -x86-32-Fix-kexec-with-stack-canary-CONFIG_CC_STACKPR.patch n_tty-fix-EXTPROC-vs-ICANON-interaction-with-TIOCINQ.patch tty-fix-tty_ldisc_receive_buf-documentation.patch KVM-arm64-Store-vcpu-on-the-stack-during-__guest_ent.patch diff --git a/queue/skbuff-orphan-frags-before-zerocopy-clone.patch b/queue/skbuff-orphan-frags-before-zerocopy-clone.patch deleted file mode 100644 index 5d2608f..0000000 --- a/queue/skbuff-orphan-frags-before-zerocopy-clone.patch +++ /dev/null @@ -1,52 +0,0 @@ -From 268b790679422a89e9ab0685d9f291edae780c98 Mon Sep 17 00:00:00 2001 -From: Willem de Bruijn <willemb@google.com> -Date: Wed, 20 Dec 2017 17:37:49 -0500 -Subject: [PATCH] skbuff: orphan frags before zerocopy clone - -commit 268b790679422a89e9ab0685d9f291edae780c98 upstream. - -Call skb_zerocopy_clone after skb_orphan_frags, to avoid duplicate -calls to skb_uarg(skb)->callback for the same data. - -skb_zerocopy_clone associates skb_shinfo(skb)->uarg from frag_skb -with each segment. This is only safe for uargs that do refcounting, -which is those that pass skb_orphan_frags without dropping their -shared frags. For others, skb_orphan_frags drops the user frags and -sets the uarg to NULL, after which sock_zerocopy_clone has no effect. - -Qemu hangs were reported due to duplicate vhost_net_zerocopy_callback -calls for the same data causing the vhost_net_ubuf_ref_>refcount to -drop below zero. - -Link: http://lkml.kernel.org/r/<CAF=yD-LWyCD4Y0aJ9O0e_CHLR+3JOeKicRRTEVCPxgw4XOcqGQ@mail.gmail.com> -Fixes: 1f8b977ab32d ("sock: enable MSG_ZEROCOPY") -Reported-by: Andreas Hartmann <andihartmann@01019freenet.de> -Reported-by: David Hill <dhill@redhat.com> -Signed-off-by: Willem de Bruijn <willemb@google.com> -Signed-off-by: David S. Miller <davem@davemloft.net> - -diff --git a/net/core/skbuff.c b/net/core/skbuff.c -index a592ca025fc4..edf40ac0cd07 100644 ---- a/net/core/skbuff.c -+++ b/net/core/skbuff.c -@@ -3654,8 +3654,6 @@ normal: - - skb_shinfo(nskb)->tx_flags |= skb_shinfo(head_skb)->tx_flags & - SKBTX_SHARED_FRAG; -- if (skb_zerocopy_clone(nskb, head_skb, GFP_ATOMIC)) -- goto err; - - while (pos < offset + len) { - if (i >= nfrags) { -@@ -3681,6 +3679,8 @@ normal: - - if (unlikely(skb_orphan_frags(frag_skb, GFP_ATOMIC))) - goto err; -+ if (skb_zerocopy_clone(nskb, frag_skb, GFP_ATOMIC)) -+ goto err; - - *nskb_frag = *frag; - __skb_frag_ref(nskb_frag); --- -2.15.0 - diff --git a/queue/skbuff-skb_copy_ubufs-must-release-uarg-even-without.patch b/queue/skbuff-skb_copy_ubufs-must-release-uarg-even-without.patch deleted file mode 100644 index 5a0ddb4..0000000 --- a/queue/skbuff-skb_copy_ubufs-must-release-uarg-even-without.patch +++ /dev/null @@ -1,43 +0,0 @@ -From b90ddd568792bcb0054eaf0f61785c8f80c3bd1c Mon Sep 17 00:00:00 2001 -From: Willem de Bruijn <willemb@google.com> -Date: Wed, 20 Dec 2017 17:37:50 -0500 -Subject: [PATCH] skbuff: skb_copy_ubufs must release uarg even without user - frags - -commit b90ddd568792bcb0054eaf0f61785c8f80c3bd1c upstream. - -skb_copy_ubufs creates a private copy of frags[] to release its hold -on user frags, then calls uarg->callback to notify the owner. - -Call uarg->callback even when no frags exist. This edge case can -happen when zerocopy_sg_from_iter finds enough room in skb_headlen -to copy all the data. - -Fixes: 3ece782693c4 ("sock: skb_copy_ubufs support for compound pages") -Signed-off-by: Willem de Bruijn <willemb@google.com> -Signed-off-by: David S. Miller <davem@davemloft.net> - -diff --git a/net/core/skbuff.c b/net/core/skbuff.c -index edf40ac0cd07..a3cb0be4c6f3 100644 ---- a/net/core/skbuff.c -+++ b/net/core/skbuff.c -@@ -1178,7 +1178,7 @@ int skb_copy_ubufs(struct sk_buff *skb, gfp_t gfp_mask) - u32 d_off; - - if (!num_frags) -- return 0; -+ goto release; - - if (skb_shared(skb) || skb_unclone(skb, gfp_mask)) - return -EINVAL; -@@ -1238,6 +1238,7 @@ int skb_copy_ubufs(struct sk_buff *skb, gfp_t gfp_mask) - __skb_fill_page_desc(skb, new_frags - 1, head, 0, d_off); - skb_shinfo(skb)->nr_frags = new_frags; - -+release: - skb_zcopy_clear(skb, false); - return 0; - } --- -2.15.0 - diff --git a/queue/sparc64-repair-calling-incorrect-hweight-function-fr.patch b/queue/sparc64-repair-calling-incorrect-hweight-function-fr.patch deleted file mode 100644 index 29ce9f3..0000000 --- a/queue/sparc64-repair-calling-incorrect-hweight-function-fr.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 59585b4be9ae4dc6506551709bdcd6f5210b8a01 Mon Sep 17 00:00:00 2001 -From: Jan Engelhardt <jengelh@inai.de> -Date: Mon, 25 Dec 2017 03:43:53 +0100 -Subject: [PATCH] sparc64: repair calling incorrect hweight function from stubs - -commit 59585b4be9ae4dc6506551709bdcd6f5210b8a01 upstream. - -Commit v4.12-rc4-1-g9289ea7f952b introduced a mistake that made the -64-bit hweight stub call the 16-bit hweight function. - -Fixes: 9289ea7f952b ("sparc64: Use indirect calls in hamming weight stubs") -Signed-off-by: Jan Engelhardt <jengelh@inai.de> -Signed-off-by: David S. Miller <davem@davemloft.net> - -diff --git a/arch/sparc/lib/hweight.S b/arch/sparc/lib/hweight.S -index e5547b22cd18..0ddbbb031822 100644 ---- a/arch/sparc/lib/hweight.S -+++ b/arch/sparc/lib/hweight.S -@@ -44,8 +44,8 @@ EXPORT_SYMBOL(__arch_hweight32) - .previous - - ENTRY(__arch_hweight64) -- sethi %hi(__sw_hweight16), %g1 -- jmpl %g1 + %lo(__sw_hweight16), %g0 -+ sethi %hi(__sw_hweight64), %g1 -+ jmpl %g1 + %lo(__sw_hweight64), %g0 - nop - ENDPROC(__arch_hweight64) - EXPORT_SYMBOL(__arch_hweight64) --- -2.15.0 - diff --git a/queue/vxlan-restore-dev-mtu-setting-based-on-lower-device.patch b/queue/vxlan-restore-dev-mtu-setting-based-on-lower-device.patch deleted file mode 100644 index 37ba610..0000000 --- a/queue/vxlan-restore-dev-mtu-setting-based-on-lower-device.patch +++ /dev/null @@ -1,56 +0,0 @@ -From f870c1ff65a6d1f3a083f277280802ee09a5b44d Mon Sep 17 00:00:00 2001 -From: Alexey Kodanev <alexey.kodanev@oracle.com> -Date: Thu, 14 Dec 2017 20:20:00 +0300 -Subject: [PATCH] vxlan: restore dev->mtu setting based on lower device - -commit f870c1ff65a6d1f3a083f277280802ee09a5b44d upstream. - -Stefano Brivio says: - Commit a985343ba906 ("vxlan: refactor verification and - application of configuration") introduced a change in the - behaviour of initial MTU setting: earlier, the MTU for a link - created on top of a given lower device, without an initial MTU - specification, was set to the MTU of the lower device minus - headroom as a result of this path in vxlan_dev_configure(): - - if (!conf->mtu) - dev->mtu = lowerdev->mtu - - (use_ipv6 ? VXLAN6_HEADROOM : VXLAN_HEADROOM); - - which is now gone. Now, the initial MTU, in absence of a - configured value, is simply set by ether_setup() to ETH_DATA_LEN - (1500 bytes). - - This breaks userspace expectations in case the MTU of - the lower device is higher than 1500 bytes minus headroom. - -This patch restores the previous behaviour on newlink operation. Since -max_mtu can be negative and we update dev->mtu directly, also check it -for valid minimum. - -Reported-by: Junhan Yan <juyan@redhat.com> -Fixes: a985343ba906 ("vxlan: refactor verification and application of configuration") -Signed-off-by: Alexey Kodanev <alexey.kodanev@oracle.com> -Acked-by: Stefano Brivio <sbrivio@redhat.com> -Signed-off-by: Stefano Brivio <sbrivio@redhat.com> -Signed-off-by: David S. Miller <davem@davemloft.net> - -diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c -index 19b9cc51079e..1000b0e4ee01 100644 ---- a/drivers/net/vxlan.c -+++ b/drivers/net/vxlan.c -@@ -3103,6 +3103,11 @@ static void vxlan_config_apply(struct net_device *dev, - - max_mtu = lowerdev->mtu - (use_ipv6 ? VXLAN6_HEADROOM : - VXLAN_HEADROOM); -+ if (max_mtu < ETH_MIN_MTU) -+ max_mtu = ETH_MIN_MTU; -+ -+ if (!changelink && !conf->mtu) -+ dev->mtu = max_mtu; - } - - if (dev->mtu > max_mtu) --- -2.15.0 - diff --git a/queue/x86-32-Fix-kexec-with-stack-canary-CONFIG_CC_STACKPR.patch b/queue/x86-32-Fix-kexec-with-stack-canary-CONFIG_CC_STACKPR.patch deleted file mode 100644 index a9916c6..0000000 --- a/queue/x86-32-Fix-kexec-with-stack-canary-CONFIG_CC_STACKPR.patch +++ /dev/null @@ -1,84 +0,0 @@ -From ac461122c88a10b7d775de2f56467f097c9e627a Mon Sep 17 00:00:00 2001 -From: Linus Torvalds <torvalds@linux-foundation.org> -Date: Wed, 27 Dec 2017 11:48:50 -0800 -Subject: [PATCH] x86-32: Fix kexec with stack canary - (CONFIG_CC_STACKPROTECTOR) - -commit ac461122c88a10b7d775de2f56467f097c9e627a upstream. - -Commit e802a51ede91 ("x86/idt: Consolidate IDT invalidation") cleaned up -and unified the IDT invalidation that existed in a couple of places. It -changed no actual real code. - -Despite not changing any actual real code, it _did_ change code generation: -by implementing the common idt_invalidate() function in -archx86/kernel/idt.c, it made the use of the function in -arch/x86/kernel/machine_kexec_32.c be a real function call rather than an -(accidental) inlining of the function. - -That, in turn, exposed two issues: - - - in load_segments(), we had incorrectly reset all the segment - registers, which then made the stack canary load (which gcc does - using offset of %gs) cause a trap. Instead of %gs pointing to the - stack canary, it will be the normal zero-based kernel segment, and - the stack canary load will take a page fault at address 0x14. - - - to make this even harder to debug, we had invalidated the GDT just - before calling idt_invalidate(), which meant that the fault happened - with an invalid GDT, which in turn causes a triple fault and - immediate reboot. - -Fix this by - - (a) not reloading the special segments in load_segments(). We currently - don't do any percpu accesses (which would require %fs on x86-32) in - this area, but there's no reason to think that we might not want to - do them, and like %gs, it's pointless to break it. - - (b) doing idt_invalidate() before invalidating the GDT, to keep things - at least _slightly_ more debuggable for a bit longer. Without a - IDT, traps will not work. Without a GDT, traps also will not work, - but neither will any segment loads etc. So in a very real sense, - the GDT is even more core than the IDT. - -Fixes: e802a51ede91 ("x86/idt: Consolidate IDT invalidation") -Reported-and-tested-by: Alexandru Chirvasitu <achirvasub@gmail.com> -Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> -Signed-off-by: Thomas Gleixner <tglx@linutronix.de> -Cc: Denys Vlasenko <dvlasenk@redhat.com> -Cc: Peter Zijlstra <peterz@infradead.org> -Cc: Brian Gerst <brgerst@gmail.com> -Cc: Steven Rostedt <rostedt@goodmis.org> -Cc: Borislav Petkov <bp@alien8.de> -Cc: Andy Lutomirski <luto@kernel.org> -Cc: Josh Poimboeuf <jpoimboe@redhat.com> -Cc: stable@vger.kernel.org -Link: https://lkml.kernel.org/r/alpine.LFD.2.21.1712271143180.8572@i7.lan - -diff --git a/arch/x86/kernel/machine_kexec_32.c b/arch/x86/kernel/machine_kexec_32.c -index 00bc751c861c..edfede768688 100644 ---- a/arch/x86/kernel/machine_kexec_32.c -+++ b/arch/x86/kernel/machine_kexec_32.c -@@ -48,8 +48,6 @@ static void load_segments(void) - "\tmovl $"STR(__KERNEL_DS)",%%eax\n" - "\tmovl %%eax,%%ds\n" - "\tmovl %%eax,%%es\n" -- "\tmovl %%eax,%%fs\n" -- "\tmovl %%eax,%%gs\n" - "\tmovl %%eax,%%ss\n" - : : : "eax", "memory"); - #undef STR -@@ -232,8 +230,8 @@ void machine_kexec(struct kimage *image) - * The gdt & idt are now invalid. - * If you want to load them you must set up your own idt & gdt. - */ -- set_gdt(phys_to_virt(0), 0); - idt_invalidate(phys_to_virt(0)); -+ set_gdt(phys_to_virt(0), 0); - - /* now call it */ - image->start = relocate_kernel_ptr((unsigned long)image->head, --- -2.15.0 - |