From patchwork Wed Apr 12 17:43:35 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sumit Semwal X-Patchwork-Id: 97324 Delivered-To: patch@linaro.org Received: by 10.140.109.52 with SMTP id k49csp374289qgf; Wed, 12 Apr 2017 10:44:18 -0700 (PDT) X-Received: by 10.98.65.1 with SMTP id o1mr67149942pfa.221.1492019058198; Wed, 12 Apr 2017 10:44:18 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id j29si17209540pfj.125.2017.04.12.10.44.17; Wed, 12 Apr 2017 10:44:18 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752372AbdDLRoI (ORCPT + 6 others); Wed, 12 Apr 2017 13:44:08 -0400 Received: from mail-pf0-f171.google.com ([209.85.192.171]:34031 "EHLO mail-pf0-f171.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755161AbdDLRoE (ORCPT ); Wed, 12 Apr 2017 13:44:04 -0400 Received: by mail-pf0-f171.google.com with SMTP id c198so16975967pfc.1 for ; Wed, 12 Apr 2017 10:44:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=AEZKrYJWPrcoOIprXMfUvjQWwMFTkyg83QVrp4VTiFk=; b=axE2nXLFYnRui9/SFqmnY/byEotE+FpAHQCkyraQRJxliklLSCsf+Fkyx0Bn78jehD b4pw5m+SRDRbt1KNuFic0Ha5TbIvoXiKGWCCS82geNu6NpKaoIU/cmS9bRGFYE44ArUv BVxeEHeYnkiNBlFu02/6b9z2rTN1aLw8or3Yw= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=AEZKrYJWPrcoOIprXMfUvjQWwMFTkyg83QVrp4VTiFk=; b=ZOwse2mXSMrsoOMOCSRcrVE0YkmjsdrRGdAA0gOG3qdJxAznMLx8ruh2tbicnPHVAt la4fXOjYdc6xMf461DlObtW60tgGOqc1poQeGevdLub4sLMzOccShV/XldW63LMoqCf7 UEjySlDWzD3C7YuK/rONznhmqNiWB8pcylpy2srGrBWeKKMc/AsgqXn4ne0TBI3buu2I VbksH/Xywt63LGeVKz+Iep7Rq6lt9gmbhdx65q1v0EtWVn8mlbA+0GO9bexBPKbQievD eEUFmXE9/g7AnskXMfl8XKYheXHo8tFBzb/Iks1Sl2KoGTKChRaMD6acgs1pEGnkDoji F1kw== X-Gm-Message-State: AFeK/H2C83QaXvjurfKEYmLifmkNbGI+SMrGLxGEbM6VLXgNE9z8K763YrT0WoCYWPviKeQ3 X-Received: by 10.84.241.74 with SMTP id u10mr44175811plm.28.1492019043684; Wed, 12 Apr 2017 10:44:03 -0700 (PDT) Received: from phantom.lan ([106.51.225.38]) by smtp.gmail.com with ESMTPSA id r17sm37750019pfa.13.2017.04.12.10.44.00 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 12 Apr 2017 10:44:02 -0700 (PDT) From: Sumit Semwal To: stable@vger.kernel.org Cc: Jack Morgenstein , Tariq Toukan , "David S . Miller" , Sumit Semwal Subject: [v2 PATCH for-4.4 01/16] net/mlx4_core: Fix when to save some qp context flags for dynamic VST to VGT transitions Date: Wed, 12 Apr 2017 23:13:35 +0530 Message-Id: <1492019030-13567-2-git-send-email-sumit.semwal@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1492019030-13567-1-git-send-email-sumit.semwal@linaro.org> References: <1492019030-13567-1-git-send-email-sumit.semwal@linaro.org> Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Jack Morgenstein [ Upstream commit 7c3945bc2073554bb2ecf983e073dee686679c53 ] Save the qp context flags byte containing the flag disabling vlan stripping in the RESET to INIT qp transition, rather than in the INIT to RTR transition. Per the firmware spec, the flags in this byte are active in the RESET to INIT transition. As a result of saving the flags in the incorrect qp transition, when switching dynamically from VGT to VST and back to VGT, the vlan remained stripped (as is required for VST) and did not return to not-stripped (as is required for VGT). v2: correct upstream commit. Fixes: f0f829bf42cd ("net/mlx4_core: Add immediate activate for VGT->VST->VGT") Signed-off-by: Jack Morgenstein Signed-off-by: Tariq Toukan Signed-off-by: David S. Miller Signed-off-by: Sumit Semwal --- drivers/net/ethernet/mellanox/mlx4/resource_tracker.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) -- 2.7.4 diff --git a/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c b/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c index d314d96..d1fc7fa 100644 --- a/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c +++ b/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c @@ -2955,6 +2955,9 @@ int mlx4_RST2INIT_QP_wrapper(struct mlx4_dev *dev, int slave, put_res(dev, slave, srqn, RES_SRQ); qp->srq = srq; } + + /* Save param3 for dynamic changes from VST back to VGT */ + qp->param3 = qpc->param3; put_res(dev, slave, rcqn, RES_CQ); put_res(dev, slave, mtt_base, RES_MTT); res_end_move(dev, slave, RES_QP, qpn); @@ -3747,7 +3750,6 @@ int mlx4_INIT2RTR_QP_wrapper(struct mlx4_dev *dev, int slave, int qpn = vhcr->in_modifier & 0x7fffff; struct res_qp *qp; u8 orig_sched_queue; - __be32 orig_param3 = qpc->param3; u8 orig_vlan_control = qpc->pri_path.vlan_control; u8 orig_fvl_rx = qpc->pri_path.fvl_rx; u8 orig_pri_path_fl = qpc->pri_path.fl; @@ -3789,7 +3791,6 @@ out: */ if (!err) { qp->sched_queue = orig_sched_queue; - qp->param3 = orig_param3; qp->vlan_control = orig_vlan_control; qp->fvl_rx = orig_fvl_rx; qp->pri_path_fl = orig_pri_path_fl; From patchwork Wed Apr 12 17:43:36 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sumit Semwal X-Patchwork-Id: 97325 Delivered-To: patch@linaro.org Received: by 10.140.109.52 with SMTP id k49csp374291qgf; Wed, 12 Apr 2017 10:44:18 -0700 (PDT) X-Received: by 10.84.198.3 with SMTP id o3mr50191237pld.45.1492019058487; Wed, 12 Apr 2017 10:44:18 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id j29si17209540pfj.125.2017.04.12.10.44.18; Wed, 12 Apr 2017 10:44:18 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752285AbdDLRoK (ORCPT + 6 others); Wed, 12 Apr 2017 13:44:10 -0400 Received: from mail-pf0-f169.google.com ([209.85.192.169]:36159 "EHLO mail-pf0-f169.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752282AbdDLRoI (ORCPT ); Wed, 12 Apr 2017 13:44:08 -0400 Received: by mail-pf0-f169.google.com with SMTP id o126so16977682pfb.3 for ; Wed, 12 Apr 2017 10:44:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=atbcb7lX3h77w7YV1E92ebkzD0IL7GtDPTqC3upC8Ck=; b=cZAWMetcZi4zduMPMzp21Q0eM1fFutXC0dz/F6BGXIjGGcljiLwIg9U/UjC/h3FGoA 992ZynQQ0QIdsquWQp3hySJ73jjwHpdprzq2dZSdFs6fX6EFpXZN5Djn/TIXr7ikr6pR 0u4LBfH7Pf3P4y2eXKWtEpJUXJVo1LSs5hD6c= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=atbcb7lX3h77w7YV1E92ebkzD0IL7GtDPTqC3upC8Ck=; b=VtoqkH7aNKyePEoYy0IPn7lPtTRtkNqj6D0f22PzV3BASm0vnvLkNCxZ0Nz3TwKTZ3 RZGLjQgaDjIg6IEPwMAiosN83negvVR9raB5fHFTmNBOkvsXsJNeDJedTB1dsUgfR2Ob ukvm40kqkAtzhhmCJOwk0LQ4vtQhOebQRC6hLUIaYyPDbNDMI+cZmn7kKUiwo9AP9tHg mAQ2ZarDI8xLN7sRbNDrKVqHKq5vS9LGc1W8m0ZymCimMNbmQ3fScwzMa8u6sRd8CbW/ 7pnABunNjFi02lgDA0gVcXWPhtSH2iaTNHWU+pp4v1AVgjB/keug6ElNYA5IcUA3NK5W 5aTA== X-Gm-Message-State: AFeK/H2O8CvUmRJ+6UOpYnC9yCGc8WsHSin/nFj3M4sGjlEShxfqHvF6EtDCGgV02y2UmnQN X-Received: by 10.84.196.164 with SMTP id l33mr85027143pld.0.1492019047027; Wed, 12 Apr 2017 10:44:07 -0700 (PDT) Received: from phantom.lan ([106.51.225.38]) by smtp.gmail.com with ESMTPSA id r17sm37750019pfa.13.2017.04.12.10.44.03 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 12 Apr 2017 10:44:05 -0700 (PDT) From: Sumit Semwal To: stable@vger.kernel.org Cc: Jack Morgenstein , Matan Barak , Tariq Toukan , "David S . Miller" , Sumit Semwal Subject: [v2 PATCH for-4.4 02/16] net/mlx4_core: Fix racy CQ (Completion Queue) free Date: Wed, 12 Apr 2017 23:13:36 +0530 Message-Id: <1492019030-13567-3-git-send-email-sumit.semwal@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1492019030-13567-1-git-send-email-sumit.semwal@linaro.org> References: <1492019030-13567-1-git-send-email-sumit.semwal@linaro.org> Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Jack Morgenstein [ Upstream commit 291c566a28910614ce42d0ffe82196eddd6346f4 ] In function mlx4_cq_completion() and mlx4_cq_event(), the radix_tree_lookup requires a rcu_read_lock. This is mandatory: if another core frees the CQ, it could run the radix_tree_node_rcu_free() call_rcu() callback while its being used by the radix tree lookup function. Additionally, in function mlx4_cq_event(), since we are adding the rcu lock around the radix-tree lookup, we no longer need to take the spinlock. Also, the synchronize_irq() call for the async event eliminates the need for incrementing the cq reference count in mlx4_cq_event(). Other changes: 1. In function mlx4_cq_free(), replace spin_lock_irq with spin_lock: we no longer take this spinlock in the interrupt context. The spinlock here, therefore, simply protects against different threads simultaneously invoking mlx4_cq_free() for different cq's. 2. In function mlx4_cq_free(), we move the radix tree delete to before the synchronize_irq() calls. This guarantees that we will not access this cq during any subsequent interrupts, and therefore can safely free the CQ after the synchronize_irq calls. The rcu_read_lock in the interrupt handlers only needs to protect against corrupting the radix tree; the interrupt handlers may access the cq outside the rcu_read_lock due to the synchronize_irq calls which protect against premature freeing of the cq. 3. In function mlx4_cq_event(), we change the mlx_warn message to mlx4_dbg. 4. We leave the cq reference count mechanism in place, because it is still needed for the cq completion tasklet mechanism. Fixes: 6d90aa5cf17b ("net/mlx4_core: Make sure there are no pending async events when freeing CQ") Fixes: 225c7b1feef1 ("IB/mlx4: Add a driver Mellanox ConnectX InfiniBand adapters") Signed-off-by: Jack Morgenstein Signed-off-by: Matan Barak Signed-off-by: Tariq Toukan Signed-off-by: David S. Miller Signed-off-by: Sumit Semwal --- drivers/net/ethernet/mellanox/mlx4/cq.c | 38 +++++++++++++++++---------------- 1 file changed, 20 insertions(+), 18 deletions(-) -- 2.7.4 diff --git a/drivers/net/ethernet/mellanox/mlx4/cq.c b/drivers/net/ethernet/mellanox/mlx4/cq.c index 3348e64..6eba580 100644 --- a/drivers/net/ethernet/mellanox/mlx4/cq.c +++ b/drivers/net/ethernet/mellanox/mlx4/cq.c @@ -101,13 +101,19 @@ void mlx4_cq_completion(struct mlx4_dev *dev, u32 cqn) { struct mlx4_cq *cq; + rcu_read_lock(); cq = radix_tree_lookup(&mlx4_priv(dev)->cq_table.tree, cqn & (dev->caps.num_cqs - 1)); + rcu_read_unlock(); + if (!cq) { mlx4_dbg(dev, "Completion event for bogus CQ %08x\n", cqn); return; } + /* Acessing the CQ outside of rcu_read_lock is safe, because + * the CQ is freed only after interrupt handling is completed. + */ ++cq->arm_sn; cq->comp(cq); @@ -118,23 +124,19 @@ void mlx4_cq_event(struct mlx4_dev *dev, u32 cqn, int event_type) struct mlx4_cq_table *cq_table = &mlx4_priv(dev)->cq_table; struct mlx4_cq *cq; - spin_lock(&cq_table->lock); - + rcu_read_lock(); cq = radix_tree_lookup(&cq_table->tree, cqn & (dev->caps.num_cqs - 1)); - if (cq) - atomic_inc(&cq->refcount); - - spin_unlock(&cq_table->lock); + rcu_read_unlock(); if (!cq) { - mlx4_warn(dev, "Async event for bogus CQ %08x\n", cqn); + mlx4_dbg(dev, "Async event for bogus CQ %08x\n", cqn); return; } + /* Acessing the CQ outside of rcu_read_lock is safe, because + * the CQ is freed only after interrupt handling is completed. + */ cq->event(cq, event_type); - - if (atomic_dec_and_test(&cq->refcount)) - complete(&cq->free); } static int mlx4_SW2HW_CQ(struct mlx4_dev *dev, struct mlx4_cmd_mailbox *mailbox, @@ -301,9 +303,9 @@ int mlx4_cq_alloc(struct mlx4_dev *dev, int nent, if (err) return err; - spin_lock_irq(&cq_table->lock); + spin_lock(&cq_table->lock); err = radix_tree_insert(&cq_table->tree, cq->cqn, cq); - spin_unlock_irq(&cq_table->lock); + spin_unlock(&cq_table->lock); if (err) goto err_icm; @@ -347,9 +349,9 @@ int mlx4_cq_alloc(struct mlx4_dev *dev, int nent, return 0; err_radix: - spin_lock_irq(&cq_table->lock); + spin_lock(&cq_table->lock); radix_tree_delete(&cq_table->tree, cq->cqn); - spin_unlock_irq(&cq_table->lock); + spin_unlock(&cq_table->lock); err_icm: mlx4_cq_free_icm(dev, cq->cqn); @@ -368,15 +370,15 @@ void mlx4_cq_free(struct mlx4_dev *dev, struct mlx4_cq *cq) if (err) mlx4_warn(dev, "HW2SW_CQ failed (%d) for CQN %06x\n", err, cq->cqn); + spin_lock(&cq_table->lock); + radix_tree_delete(&cq_table->tree, cq->cqn); + spin_unlock(&cq_table->lock); + synchronize_irq(priv->eq_table.eq[MLX4_CQ_TO_EQ_VECTOR(cq->vector)].irq); if (priv->eq_table.eq[MLX4_CQ_TO_EQ_VECTOR(cq->vector)].irq != priv->eq_table.eq[MLX4_EQ_ASYNC].irq) synchronize_irq(priv->eq_table.eq[MLX4_EQ_ASYNC].irq); - spin_lock_irq(&cq_table->lock); - radix_tree_delete(&cq_table->tree, cq->cqn); - spin_unlock_irq(&cq_table->lock); - if (atomic_dec_and_test(&cq->refcount)) complete(&cq->free); wait_for_completion(&cq->free); From patchwork Wed Apr 12 17:43:37 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sumit Semwal X-Patchwork-Id: 97326 Delivered-To: patch@linaro.org Received: by 10.140.109.52 with SMTP id k49csp374293qgf; Wed, 12 Apr 2017 10:44:18 -0700 (PDT) X-Received: by 10.98.89.70 with SMTP id n67mr67217751pfb.224.1492019058757; Wed, 12 Apr 2017 10:44:18 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id j29si17209540pfj.125.2017.04.12.10.44.18; Wed, 12 Apr 2017 10:44:18 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755407AbdDLRoP (ORCPT + 6 others); Wed, 12 Apr 2017 13:44:15 -0400 Received: from mail-pg0-f50.google.com ([74.125.83.50]:33660 "EHLO mail-pg0-f50.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752057AbdDLRoK (ORCPT ); Wed, 12 Apr 2017 13:44:10 -0400 Received: by mail-pg0-f50.google.com with SMTP id x125so18158191pgb.0 for ; Wed, 12 Apr 2017 10:44:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=67zwpDSwzzseEn0mOPJ+tcd9kp2QD4TSIfiNXkeYLnU=; b=j+2Rcixc5BkdT90s8nrr3/EX577ZmVCPl3APwYUc0MzXHaFGOQD10wQRXZW9gYBw1N 9LjZ8csuER0FmNFDfgN67KHVCGxF2GG/6qRryY6+LA6tOrza0uoSbBwWDsYz7GwpY69v lla0AmkgMuPOUkjTqWMDtLHE+MPHYjra2NsPI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=67zwpDSwzzseEn0mOPJ+tcd9kp2QD4TSIfiNXkeYLnU=; b=m42i8Afbyd011RnBbj4iObChLEM/elTmYtbAN+RrS+DiZ356Q9PmipkSSUQKUBHudi 95dzVdeSdOUEmXUk8CsnEvouCQOgxBzfUyrY8w8D/12t/uvsnMa40z1MA7yrF0GkmA4/ k/oM/HjM++G6W+I5+qGJHbgM8ONcKrzs5vpApk7eNF6Z/x914CC4jhjqodtPBWnQabUn va1V+6WQLIdx47pO4gsJNDcVBAfsmlW3uX8gfkbeJT9ITJt1Bfp1DXKh2IKYIKVQxlD2 N7r2iaoFR64CrRJEBXBBj9B2K2zQojjZMEX8Zr0Vfgywy1CNfcV3VyispW23tOiE0oiD xHcw== X-Gm-Message-State: AFeK/H1BG3cKEgPQvIgFbZGfRYO0xxiSooF9YZZ3dmuIKBDD2BJGiGY8MypD791s90iVRrbj X-Received: by 10.99.156.2 with SMTP id f2mr47825062pge.65.1492019049989; Wed, 12 Apr 2017 10:44:09 -0700 (PDT) Received: from phantom.lan ([106.51.225.38]) by smtp.gmail.com with ESMTPSA id r17sm37750019pfa.13.2017.04.12.10.44.07 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 12 Apr 2017 10:44:08 -0700 (PDT) From: Sumit Semwal To: stable@vger.kernel.org Cc: Eugenia Emantayev , Tariq Toukan , "David S . Miller" , Sumit Semwal Subject: [v2 PATCH for-4.4 03/16] net/mlx4_en: Fix bad WQE issue Date: Wed, 12 Apr 2017 23:13:37 +0530 Message-Id: <1492019030-13567-4-git-send-email-sumit.semwal@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1492019030-13567-1-git-send-email-sumit.semwal@linaro.org> References: <1492019030-13567-1-git-send-email-sumit.semwal@linaro.org> Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Eugenia Emantayev [ Upstream commit 6496bbf0ec481966ef9ffe5b6660d8d1b55c60cc ] Single send WQE in RX buffer should be stamped with software ownership in order to prevent the flow of QP in error in FW once UPDATE_QP is called. Fixes: 9f519f68cfff ('mlx4_en: Not using Shared Receive Queues') Signed-off-by: Eugenia Emantayev Signed-off-by: Tariq Toukan Signed-off-by: David S. Miller Signed-off-by: Sumit Semwal --- drivers/net/ethernet/mellanox/mlx4/en_rx.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) -- 2.7.4 diff --git a/drivers/net/ethernet/mellanox/mlx4/en_rx.c b/drivers/net/ethernet/mellanox/mlx4/en_rx.c index 28a4b34..82bf1b5 100644 --- a/drivers/net/ethernet/mellanox/mlx4/en_rx.c +++ b/drivers/net/ethernet/mellanox/mlx4/en_rx.c @@ -439,8 +439,14 @@ int mlx4_en_activate_rx_rings(struct mlx4_en_priv *priv) ring->cqn = priv->rx_cq[ring_ind]->mcq.cqn; ring->stride = stride; - if (ring->stride <= TXBB_SIZE) + if (ring->stride <= TXBB_SIZE) { + /* Stamp first unused send wqe */ + __be32 *ptr = (__be32 *)ring->buf; + __be32 stamp = cpu_to_be32(1 << STAMP_SHIFT); + *ptr = stamp; + /* Move pointer to start of rx section */ ring->buf += TXBB_SIZE; + } ring->log_stride = ffs(ring->stride) - 1; ring->buf_size = ring->size * ring->stride; From patchwork Wed Apr 12 17:43:38 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sumit Semwal X-Patchwork-Id: 97327 Delivered-To: patch@linaro.org Received: by 10.140.109.52 with SMTP id k49csp374295qgf; Wed, 12 Apr 2017 10:44:19 -0700 (PDT) X-Received: by 10.98.213.138 with SMTP id d132mr4467233pfg.172.1492019059047; Wed, 12 Apr 2017 10:44:19 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id j29si17209540pfj.125.2017.04.12.10.44.18; Wed, 12 Apr 2017 10:44:19 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752057AbdDLRoQ (ORCPT + 6 others); Wed, 12 Apr 2017 13:44:16 -0400 Received: from mail-pg0-f45.google.com ([74.125.83.45]:34673 "EHLO mail-pg0-f45.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755347AbdDLRoN (ORCPT ); Wed, 12 Apr 2017 13:44:13 -0400 Received: by mail-pg0-f45.google.com with SMTP id 21so18163040pgg.1 for ; Wed, 12 Apr 2017 10:44:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=q4MHM8Ry+qyRFBf2kgtGxjSEJ0pWHgg8MgH/QgFJLi0=; b=HY2GAYSmCszi6oT7sf5nuOjYbT5jrx5zj3xSmpWqUmNvcLi2Uh5On/aFNudmITHq0n D2iCEKyhocr53870rrPTEzCdxtXEPFmcb6n7z7fmw0uzZOnydHNmW9b4bSRCJhCMMCHS 0FkrpCHnZ3k7Y+naODfodSzW9HfhX141ml1pk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=q4MHM8Ry+qyRFBf2kgtGxjSEJ0pWHgg8MgH/QgFJLi0=; b=F8Yg+0ixvMSCUUMWsnkVUpmr81jaau1Knf3/IHGsi/oy3aVNITQN1/A52/dpN1CsRE hj+UcWxiccXIs+uSm4d7FHxPCRAXgD9z/TeNMjAtprncT1A4b0APsRNVQVEWLsT2BR21 14yN04rfxkL0JoUoNPnEtyouzkxzFVWenMTu86MhgUHfV6yKzdKp2R6OUCZ6AXUynBnj V8sLAhws/JzStOCvK9Cyi1Bkuje0L9CfpO05lWq2CHzSI0oQ43oLF46Rq0lQ+vJCgZ0n dr2fd2rG4DmW2odvnkhMwhzDed1hMca9rrJ8VwVjy9C/u+v9Pz2Q0UiwXb6BWHRyLpEp 6fjA== X-Gm-Message-State: AN3rC/4rVFV8xNv+NU0h1y8LLylmH0eHV5jLzItw5D9V7jBkGES2rtXsqktnOWv+WPFY+36K X-Received: by 10.84.238.194 with SMTP id l2mr36248530pln.7.1492019052632; Wed, 12 Apr 2017 10:44:12 -0700 (PDT) Received: from phantom.lan ([106.51.225.38]) by smtp.gmail.com with ESMTPSA id r17sm37750019pfa.13.2017.04.12.10.44.10 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 12 Apr 2017 10:44:11 -0700 (PDT) From: Sumit Semwal To: stable@vger.kernel.org Cc: NeilBrown , Trond Myklebust , Sumit Semwal Subject: [v2 PATCH for-4.4 04/16] SUNRPC: fix refcounting problems with auth_gss messages. Date: Wed, 12 Apr 2017 23:13:38 +0530 Message-Id: <1492019030-13567-5-git-send-email-sumit.semwal@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1492019030-13567-1-git-send-email-sumit.semwal@linaro.org> References: <1492019030-13567-1-git-send-email-sumit.semwal@linaro.org> Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: NeilBrown [ Upstream commit 1cded9d2974fe4fe339fc0ccd6638b80d465ab2c ] There are two problems with refcounting of auth_gss messages. First, the reference on the pipe->pipe list (taken by a call to rpc_queue_upcall()) is not counted. It seems to be assumed that a message in pipe->pipe will always also be in pipe->in_downcall, where it is correctly reference counted. However there is no guaranty of this. I have a report of a NULL dereferences in rpc_pipe_read() which suggests a msg that has been freed is still on the pipe->pipe list. One way I imagine this might happen is: - message is queued for uid=U and auth->service=S1 - rpc.gssd reads this message and starts processing. This removes the message from pipe->pipe - message is queued for uid=U and auth->service=S2 - rpc.gssd replies to the first message. gss_pipe_downcall() calls __gss_find_upcall(pipe, U, NULL) and it finds the *second* message, as new messages are placed at the head of ->in_downcall, and the service type is not checked. - This second message is removed from ->in_downcall and freed by gss_release_msg() (even though it is still on pipe->pipe) - rpc.gssd tries to read another message, and dereferences a pointer to this message that has just been freed. I fix this by incrementing the reference count before calling rpc_queue_upcall(), and decrementing it if that fails, or normally in gss_pipe_destroy_msg(). It seems strange that the reply doesn't target the message more precisely, but I don't know all the details. In any case, I think the reference counting irregularity became a measureable bug when the extra arg was added to __gss_find_upcall(), hence the Fixes: line below. The second problem is that if rpc_queue_upcall() fails, the new message is not freed. gss_alloc_msg() set the ->count to 1, gss_add_msg() increments this to 2, gss_unhash_msg() decrements to 1, then the pointer is discarded so the memory never gets freed. Fixes: 9130b8dbc6ac ("SUNRPC: allow for upcalls for same uid but different gss service") Cc: stable@vger.kernel.org Link: https://bugzilla.opensuse.org/show_bug.cgi?id=1011250 Signed-off-by: NeilBrown Signed-off-by: Trond Myklebust Signed-off-by: Sumit Semwal --- net/sunrpc/auth_gss/auth_gss.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) -- 2.7.4 diff --git a/net/sunrpc/auth_gss/auth_gss.c b/net/sunrpc/auth_gss/auth_gss.c index 06095cc..1f0687d 100644 --- a/net/sunrpc/auth_gss/auth_gss.c +++ b/net/sunrpc/auth_gss/auth_gss.c @@ -541,9 +541,13 @@ gss_setup_upcall(struct gss_auth *gss_auth, struct rpc_cred *cred) return gss_new; gss_msg = gss_add_msg(gss_new); if (gss_msg == gss_new) { - int res = rpc_queue_upcall(gss_new->pipe, &gss_new->msg); + int res; + atomic_inc(&gss_msg->count); + res = rpc_queue_upcall(gss_new->pipe, &gss_new->msg); if (res) { gss_unhash_msg(gss_new); + atomic_dec(&gss_msg->count); + gss_release_msg(gss_new); gss_msg = ERR_PTR(res); } } else @@ -836,6 +840,7 @@ gss_pipe_destroy_msg(struct rpc_pipe_msg *msg) warn_gssd(); gss_release_msg(gss_msg); } + gss_release_msg(gss_msg); } static void gss_pipe_dentry_destroy(struct dentry *dir, From patchwork Wed Apr 12 17:43:39 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sumit Semwal X-Patchwork-Id: 97328 Delivered-To: patch@linaro.org Received: by 10.140.109.52 with SMTP id k49csp374303qgf; Wed, 12 Apr 2017 10:44:21 -0700 (PDT) X-Received: by 10.99.4.195 with SMTP id 186mr67614805pge.77.1492019061012; Wed, 12 Apr 2017 10:44:21 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id j29si17209540pfj.125.2017.04.12.10.44.20; Wed, 12 Apr 2017 10:44:20 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755448AbdDLRoT (ORCPT + 6 others); Wed, 12 Apr 2017 13:44:19 -0400 Received: from mail-pf0-f177.google.com ([209.85.192.177]:36192 "EHLO mail-pf0-f177.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755347AbdDLRoQ (ORCPT ); Wed, 12 Apr 2017 13:44:16 -0400 Received: by mail-pf0-f177.google.com with SMTP id o126so16979201pfb.3 for ; Wed, 12 Apr 2017 10:44:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=4n9EQVqvlLgoN381H0Mw8wjmFMLasxMbzhHcz1ZoZWk=; b=XMYJAiFM2UgbTfIgkDlrTlin3FdTvdKGXA6FPHf36Ktv6gePzdmYA/kxRXmZTvcYpn pZZ0b95b51xenDsTZI2XYNnqt9k79zklED+fO0xuwrXNSLY3w/RWtf4vTtA79DdYNVOq ocW4mQWwFjFiu5bJw2Aw5THSDgWqHgdbBZgRU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=4n9EQVqvlLgoN381H0Mw8wjmFMLasxMbzhHcz1ZoZWk=; b=mOU5sk/6YCk7azOldlZnbG0TLSCOA6WuHLSfVokwC4RYxwY8Dy8F5gkyCqLDt8ZLOs zc1cC7L0xHNAF9xyLICnz8e+De1KqrKqyR21S5JDL3Vt5t2Fo/NMXrh9WmMcKj3P0m/U xTNVM5BKAif7yzc3n9Va3By4PS6rvDMGR1C6hTijWNuqqmcnCBlF0wA+h/DDP/tNV7Gj KbqLhLE8bdWireXwMszSSLvLAtYEUckV/kiRW5P+jOeVIk+qj285NJRucLnd183BezOk XVQxbvqEGn9ORO6G8iDdNQEOnd4UUy364/L8+SwGIMacNNAKTML66z9Zs4TJR+Tjm0V5 y6vw== X-Gm-Message-State: AFeK/H2Nh9uP1z//8DE1//FJi8dA1wH4/gU+H72k+kSIPmBzkJpKqabi/KU8T21j1Vt7/LFM X-Received: by 10.99.178.81 with SMTP id t17mr68376169pgo.136.1492019055240; Wed, 12 Apr 2017 10:44:15 -0700 (PDT) Received: from phantom.lan ([106.51.225.38]) by smtp.gmail.com with ESMTPSA id r17sm37750019pfa.13.2017.04.12.10.44.12 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 12 Apr 2017 10:44:14 -0700 (PDT) From: Sumit Semwal To: stable@vger.kernel.org Cc: Thomas Falcon , "David S . Miller" , Sumit Semwal Subject: [v2 PATCH for-4.4 05/16] ibmveth: set correct gso_size and gso_type Date: Wed, 12 Apr 2017 23:13:39 +0530 Message-Id: <1492019030-13567-6-git-send-email-sumit.semwal@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1492019030-13567-1-git-send-email-sumit.semwal@linaro.org> References: <1492019030-13567-1-git-send-email-sumit.semwal@linaro.org> Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Thomas Falcon [ Upstream commit 7b5967389f5a8dfb9d32843830f5e2717e20995d ] This patch is based on an earlier one submitted by Jon Maxwell with the following commit message: "We recently encountered a bug where a few customers using ibmveth on the same LPAR hit an issue where a TCP session hung when large receive was enabled. Closer analysis revealed that the session was stuck because the one side was advertising a zero window repeatedly. We narrowed this down to the fact the ibmveth driver did not set gso_size which is translated by TCP into the MSS later up the stack. The MSS is used to calculate the TCP window size and as that was abnormally large, it was calculating a zero window, even although the sockets receive buffer was completely empty." We rely on the Virtual I/O Server partition in a pseries environment to provide the MSS through the TCP header checksum field. The stipulation is that users should not disable checksum offloading if rx packet aggregation is enabled through VIOS. Some firmware offerings provide the MSS in the RX buffer. This is signalled by a bit in the RX queue descriptor. Reviewed-by: Brian King Reviewed-by: Pradeep Satyanarayana Reviewed-by: Marcelo Ricardo Leitner Reviewed-by: Jonathan Maxwell Reviewed-by: David Dai Signed-off-by: Thomas Falcon Signed-off-by: David S. Miller Signed-off-by: Sumit Semwal --- drivers/net/ethernet/ibm/ibmveth.c | 65 ++++++++++++++++++++++++++++++++++++-- drivers/net/ethernet/ibm/ibmveth.h | 1 + 2 files changed, 64 insertions(+), 2 deletions(-) -- 2.7.4 diff --git a/drivers/net/ethernet/ibm/ibmveth.c b/drivers/net/ethernet/ibm/ibmveth.c index 7af870a..855c43d 100644 --- a/drivers/net/ethernet/ibm/ibmveth.c +++ b/drivers/net/ethernet/ibm/ibmveth.c @@ -58,7 +58,7 @@ static struct kobj_type ktype_veth_pool; static const char ibmveth_driver_name[] = "ibmveth"; static const char ibmveth_driver_string[] = "IBM Power Virtual Ethernet Driver"; -#define ibmveth_driver_version "1.05" +#define ibmveth_driver_version "1.06" MODULE_AUTHOR("Santiago Leon "); MODULE_DESCRIPTION("IBM Power Virtual Ethernet Driver"); @@ -137,6 +137,11 @@ static inline int ibmveth_rxq_frame_offset(struct ibmveth_adapter *adapter) return ibmveth_rxq_flags(adapter) & IBMVETH_RXQ_OFF_MASK; } +static inline int ibmveth_rxq_large_packet(struct ibmveth_adapter *adapter) +{ + return ibmveth_rxq_flags(adapter) & IBMVETH_RXQ_LRG_PKT; +} + static inline int ibmveth_rxq_frame_length(struct ibmveth_adapter *adapter) { return be32_to_cpu(adapter->rx_queue.queue_addr[adapter->rx_queue.index].length); @@ -1172,6 +1177,45 @@ map_failed: goto retry_bounce; } +static void ibmveth_rx_mss_helper(struct sk_buff *skb, u16 mss, int lrg_pkt) +{ + int offset = 0; + + /* only TCP packets will be aggregated */ + if (skb->protocol == htons(ETH_P_IP)) { + struct iphdr *iph = (struct iphdr *)skb->data; + + if (iph->protocol == IPPROTO_TCP) { + offset = iph->ihl * 4; + skb_shinfo(skb)->gso_type = SKB_GSO_TCPV4; + } else { + return; + } + } else if (skb->protocol == htons(ETH_P_IPV6)) { + struct ipv6hdr *iph6 = (struct ipv6hdr *)skb->data; + + if (iph6->nexthdr == IPPROTO_TCP) { + offset = sizeof(struct ipv6hdr); + skb_shinfo(skb)->gso_type = SKB_GSO_TCPV6; + } else { + return; + } + } else { + return; + } + /* if mss is not set through Large Packet bit/mss in rx buffer, + * expect that the mss will be written to the tcp header checksum. + */ + if (lrg_pkt) { + skb_shinfo(skb)->gso_size = mss; + } else if (offset) { + struct tcphdr *tcph = (struct tcphdr *)(skb->data + offset); + + skb_shinfo(skb)->gso_size = ntohs(tcph->check); + tcph->check = 0; + } +} + static int ibmveth_poll(struct napi_struct *napi, int budget) { struct ibmveth_adapter *adapter = @@ -1180,6 +1224,7 @@ static int ibmveth_poll(struct napi_struct *napi, int budget) int frames_processed = 0; unsigned long lpar_rc; struct iphdr *iph; + u16 mss = 0; restart_poll: while (frames_processed < budget) { @@ -1197,9 +1242,21 @@ restart_poll: int length = ibmveth_rxq_frame_length(adapter); int offset = ibmveth_rxq_frame_offset(adapter); int csum_good = ibmveth_rxq_csum_good(adapter); + int lrg_pkt = ibmveth_rxq_large_packet(adapter); skb = ibmveth_rxq_get_buffer(adapter); + /* if the large packet bit is set in the rx queue + * descriptor, the mss will be written by PHYP eight + * bytes from the start of the rx buffer, which is + * skb->data at this stage + */ + if (lrg_pkt) { + __be64 *rxmss = (__be64 *)(skb->data + 8); + + mss = (u16)be64_to_cpu(*rxmss); + } + new_skb = NULL; if (length < rx_copybreak) new_skb = netdev_alloc_skb(netdev, length); @@ -1233,11 +1290,15 @@ restart_poll: if (iph->check == 0xffff) { iph->check = 0; iph->check = ip_fast_csum((unsigned char *)iph, iph->ihl); - adapter->rx_large_packets++; } } } + if (length > netdev->mtu + ETH_HLEN) { + ibmveth_rx_mss_helper(skb, mss, lrg_pkt); + adapter->rx_large_packets++; + } + napi_gro_receive(napi, skb); /* send it up */ netdev->stats.rx_packets++; diff --git a/drivers/net/ethernet/ibm/ibmveth.h b/drivers/net/ethernet/ibm/ibmveth.h index 4eade67..7acda04 100644 --- a/drivers/net/ethernet/ibm/ibmveth.h +++ b/drivers/net/ethernet/ibm/ibmveth.h @@ -209,6 +209,7 @@ struct ibmveth_rx_q_entry { #define IBMVETH_RXQ_TOGGLE 0x80000000 #define IBMVETH_RXQ_TOGGLE_SHIFT 31 #define IBMVETH_RXQ_VALID 0x40000000 +#define IBMVETH_RXQ_LRG_PKT 0x04000000 #define IBMVETH_RXQ_NO_CSUM 0x02000000 #define IBMVETH_RXQ_CSUM_GOOD 0x01000000 #define IBMVETH_RXQ_OFF_MASK 0x0000FFFF From patchwork Wed Apr 12 17:43:40 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sumit Semwal X-Patchwork-Id: 97335 Delivered-To: patch@linaro.org Received: by 10.140.109.52 with SMTP id k49csp374443qgf; Wed, 12 Apr 2017 10:44:45 -0700 (PDT) X-Received: by 10.98.82.85 with SMTP id g82mr5793749pfb.245.1492019085471; Wed, 12 Apr 2017 10:44:45 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l17si21057414pgj.292.2017.04.12.10.44.45; Wed, 12 Apr 2017 10:44:45 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755221AbdDLRon (ORCPT + 6 others); Wed, 12 Apr 2017 13:44:43 -0400 Received: from mail-pf0-f181.google.com ([209.85.192.181]:35516 "EHLO mail-pf0-f181.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755276AbdDLRoi (ORCPT ); Wed, 12 Apr 2017 13:44:38 -0400 Received: by mail-pf0-f181.google.com with SMTP id i5so16972988pfc.2 for ; Wed, 12 Apr 2017 10:44:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=oNxw+sy1EveL++rW+DEoiFtyLivmL8OCPP6+1+UOKDM=; b=LjbSfgPr0KxJs8qkGylhklz/aNejRumPgv9AxIdSPROc4/AARJg9uvkJbl3m3r12s6 qjTHcGH0kx7WQpNMvdtDnCQiIDvpACRqHygV/V05SVzmtrYJ7ofozEQPVjjLn7o7O0ft E6gVwp6Hfl5bGN6fARrTyXEJZlvfH873zjnBc= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=oNxw+sy1EveL++rW+DEoiFtyLivmL8OCPP6+1+UOKDM=; b=Hoq908Mgz6K8xnAn3SSrpIaIMCC+5fKugRp7l6N+2mIAW9b24DLzJ/mKBJWWOt4Q8S fT73Vo4iQEgTvPd7d24/PQqAbS64Akvf/FXBk4HDKJCYzEo24NhImZytj66mLjRBiHx1 bxsS2D2FtUe5tJyntrhyX5gXnX2XEfUZ0addylh7wMipV6g2p5oqObUf/kE5CQO1KC9y VoAS7dJaket0TN/DH3h1qOUfOWFkPqnD2fXHZLZPI0bAUx4SK0psW6pKpAUf+rv8pIaV Qo6O313NSvLGDnfZcodwpvNJcKM58wq3W0ofj3sMqTIivQT/0L0Mtvg8TYmwIgJQM8bL sDdQ== X-Gm-Message-State: AFeK/H1EYH/wWcq0VxZ9RjlniFDXpLe5eURUe8exbKlB/pf78Rs2W5+FeMsTEHulgl3GI5wR X-Received: by 10.84.239.8 with SMTP id w8mr83988291plk.73.1492019058138; Wed, 12 Apr 2017 10:44:18 -0700 (PDT) Received: from phantom.lan ([106.51.225.38]) by smtp.gmail.com with ESMTPSA id r17sm37750019pfa.13.2017.04.12.10.44.15 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 12 Apr 2017 10:44:17 -0700 (PDT) From: Sumit Semwal To: stable@vger.kernel.org Cc: Thomas Falcon , "David S . Miller" , Sumit Semwal Subject: [v2 PATCH for-4.4 06/16] ibmveth: calculate gso_segs for large packets Date: Wed, 12 Apr 2017 23:13:40 +0530 Message-Id: <1492019030-13567-7-git-send-email-sumit.semwal@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1492019030-13567-1-git-send-email-sumit.semwal@linaro.org> References: <1492019030-13567-1-git-send-email-sumit.semwal@linaro.org> Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Thomas Falcon [ Upstream commit 94acf164dc8f1184e8d0737be7125134c2701dbe ] Include calculations to compute the number of segments that comprise an aggregated large packet. Signed-off-by: Thomas Falcon Reviewed-by: Marcelo Ricardo Leitner Reviewed-by: Jonathan Maxwell Signed-off-by: David S. Miller Signed-off-by: Sumit Semwal --- drivers/net/ethernet/ibm/ibmveth.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) -- 2.7.4 diff --git a/drivers/net/ethernet/ibm/ibmveth.c b/drivers/net/ethernet/ibm/ibmveth.c index 855c43d..f9e4988 100644 --- a/drivers/net/ethernet/ibm/ibmveth.c +++ b/drivers/net/ethernet/ibm/ibmveth.c @@ -1179,7 +1179,9 @@ map_failed: static void ibmveth_rx_mss_helper(struct sk_buff *skb, u16 mss, int lrg_pkt) { + struct tcphdr *tcph; int offset = 0; + int hdr_len; /* only TCP packets will be aggregated */ if (skb->protocol == htons(ETH_P_IP)) { @@ -1206,14 +1208,20 @@ static void ibmveth_rx_mss_helper(struct sk_buff *skb, u16 mss, int lrg_pkt) /* if mss is not set through Large Packet bit/mss in rx buffer, * expect that the mss will be written to the tcp header checksum. */ + tcph = (struct tcphdr *)(skb->data + offset); if (lrg_pkt) { skb_shinfo(skb)->gso_size = mss; } else if (offset) { - struct tcphdr *tcph = (struct tcphdr *)(skb->data + offset); - skb_shinfo(skb)->gso_size = ntohs(tcph->check); tcph->check = 0; } + + if (skb_shinfo(skb)->gso_size) { + hdr_len = offset + tcph->doff * 4; + skb_shinfo(skb)->gso_segs = + DIV_ROUND_UP(skb->len - hdr_len, + skb_shinfo(skb)->gso_size); + } } static int ibmveth_poll(struct napi_struct *napi, int budget) From patchwork Wed Apr 12 17:43:41 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sumit Semwal X-Patchwork-Id: 97329 Delivered-To: patch@linaro.org Received: by 10.140.109.52 with SMTP id k49csp374340qgf; Wed, 12 Apr 2017 10:44:27 -0700 (PDT) X-Received: by 10.99.125.27 with SMTP id y27mr68971383pgc.79.1492019067408; Wed, 12 Apr 2017 10:44:27 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id j29si17209540pfj.125.2017.04.12.10.44.27; Wed, 12 Apr 2017 10:44:27 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754042AbdDLRo0 (ORCPT + 6 others); Wed, 12 Apr 2017 13:44:26 -0400 Received: from mail-pg0-f45.google.com ([74.125.83.45]:35862 "EHLO mail-pg0-f45.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755318AbdDLRoV (ORCPT ); Wed, 12 Apr 2017 13:44:21 -0400 Received: by mail-pg0-f45.google.com with SMTP id g2so17970967pge.3 for ; Wed, 12 Apr 2017 10:44:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=LGgqYQfwZzthFOxg27vzhErvV+HFGso5CO2q5oFQM0o=; b=Y99pDq9D/AgSw73X8IhA2bi+pYT5SiL9ed0IK2xaM4gLbmWCuSgQGtFaH51YCHjl0n rsAyGIKg/Zq4evLe057OLQK1W4ot/KNAb64cdl074GW7VsRZLy8C4H6kRyhT2j007nI2 JtDsQ+x86o/7+KCOkooegNGA3/wM59e5Ti+vg= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=LGgqYQfwZzthFOxg27vzhErvV+HFGso5CO2q5oFQM0o=; b=n59XWHn337r2nkX9nIeLG3rCDk/OuuXEziPweWt0td8QkeVOAOvcDHpAtCW6H6kzTm MD7FjtGFRB3wXLDfQ+PYOn55OO7Ljkavc/hmmvq4X/I//e1Y+/VtRyZWNVZi0c1ZbwQ8 4SCgWdTbeh0eRxIXSjwwXlyXiEc92YumpcBaUhJIZX69W8Y3s2RCT5VW/j+25MLGKa3F tGOHxszIKOfh1Ql9eoBGnlVPDLRPqfExyDQ0hjx1a/y1SE0DE6A3prLHnEGprTrHQjJp Dv4OZjg8PR7XKjouK9TfdJuzhSb/z88sQwEJrLiV/V0VciKAr6DHLDosKo6niWvmK6rp RWpA== X-Gm-Message-State: AN3rC/4jKc52aUZfVL3VXOgMlqYkJxFcJoJEc8ilaQVt489S+GqvSFzlKHztVqV63gJf8Joz X-Received: by 10.84.139.67 with SMTP id 61mr30057043plq.106.1492019061001; Wed, 12 Apr 2017 10:44:21 -0700 (PDT) Received: from phantom.lan ([106.51.225.38]) by smtp.gmail.com with ESMTPSA id r17sm37750019pfa.13.2017.04.12.10.44.18 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 12 Apr 2017 10:44:20 -0700 (PDT) From: Sumit Semwal To: stable@vger.kernel.org Cc: Vitaly Kuznetsov , "K . Y . Srinivasan" , Greg Kroah-Hartman , Sumit Semwal Subject: [v2 PATCH for-4.4 07/16] Drivers: hv: get rid of redundant messagecount in create_gpadl_header() Date: Wed, 12 Apr 2017 23:13:41 +0530 Message-Id: <1492019030-13567-8-git-send-email-sumit.semwal@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1492019030-13567-1-git-send-email-sumit.semwal@linaro.org> References: <1492019030-13567-1-git-send-email-sumit.semwal@linaro.org> Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Vitaly Kuznetsov [ Upstream commit 4d63763296ab7865a98bc29cc7d77145815ef89f ] We use messagecount only once in vmbus_establish_gpadl() to check if it is safe to iterate through the submsglist. We can just initialize the list header in all cases in create_gpadl_header() instead. Signed-off-by: Vitaly Kuznetsov Signed-off-by: K. Y. Srinivasan Signed-off-by: Greg Kroah-Hartman Signed-off-by: Sumit Semwal --- drivers/hv/channel.c | 38 ++++++++++++++++---------------------- 1 file changed, 16 insertions(+), 22 deletions(-) -- 2.7.4 diff --git a/drivers/hv/channel.c b/drivers/hv/channel.c index 1ef37c7..fb1e3df 100644 --- a/drivers/hv/channel.c +++ b/drivers/hv/channel.c @@ -223,8 +223,7 @@ EXPORT_SYMBOL_GPL(vmbus_open); * create_gpadl_header - Creates a gpadl for the specified buffer */ static int create_gpadl_header(void *kbuffer, u32 size, - struct vmbus_channel_msginfo **msginfo, - u32 *messagecount) + struct vmbus_channel_msginfo **msginfo) { int i; int pagecount; @@ -268,7 +267,6 @@ static int create_gpadl_header(void *kbuffer, u32 size, gpadl_header->range[0].pfn_array[i] = slow_virt_to_phys( kbuffer + PAGE_SIZE * i) >> PAGE_SHIFT; *msginfo = msgheader; - *messagecount = 1; pfnsum = pfncount; pfnleft = pagecount - pfncount; @@ -308,7 +306,6 @@ static int create_gpadl_header(void *kbuffer, u32 size, } msgbody->msgsize = msgsize; - (*messagecount)++; gpadl_body = (struct vmbus_channel_gpadl_body *)msgbody->msg; @@ -337,6 +334,8 @@ static int create_gpadl_header(void *kbuffer, u32 size, msgheader = kzalloc(msgsize, GFP_KERNEL); if (msgheader == NULL) goto nomem; + + INIT_LIST_HEAD(&msgheader->submsglist); msgheader->msgsize = msgsize; gpadl_header = (struct vmbus_channel_gpadl_header *) @@ -351,7 +350,6 @@ static int create_gpadl_header(void *kbuffer, u32 size, kbuffer + PAGE_SIZE * i) >> PAGE_SHIFT; *msginfo = msgheader; - *messagecount = 1; } return 0; @@ -376,7 +374,6 @@ int vmbus_establish_gpadl(struct vmbus_channel *channel, void *kbuffer, struct vmbus_channel_gpadl_body *gpadl_body; struct vmbus_channel_msginfo *msginfo = NULL; struct vmbus_channel_msginfo *submsginfo; - u32 msgcount; struct list_head *curr; u32 next_gpadl_handle; unsigned long flags; @@ -385,7 +382,7 @@ int vmbus_establish_gpadl(struct vmbus_channel *channel, void *kbuffer, next_gpadl_handle = (atomic_inc_return(&vmbus_connection.next_gpadl_handle) - 1); - ret = create_gpadl_header(kbuffer, size, &msginfo, &msgcount); + ret = create_gpadl_header(kbuffer, size, &msginfo); if (ret) return ret; @@ -408,24 +405,21 @@ int vmbus_establish_gpadl(struct vmbus_channel *channel, void *kbuffer, if (ret != 0) goto cleanup; - if (msgcount > 1) { - list_for_each(curr, &msginfo->submsglist) { + list_for_each(curr, &msginfo->submsglist) { + submsginfo = (struct vmbus_channel_msginfo *)curr; + gpadl_body = + (struct vmbus_channel_gpadl_body *)submsginfo->msg; - submsginfo = (struct vmbus_channel_msginfo *)curr; - gpadl_body = - (struct vmbus_channel_gpadl_body *)submsginfo->msg; + gpadl_body->header.msgtype = + CHANNELMSG_GPADL_BODY; + gpadl_body->gpadl = next_gpadl_handle; - gpadl_body->header.msgtype = - CHANNELMSG_GPADL_BODY; - gpadl_body->gpadl = next_gpadl_handle; + ret = vmbus_post_msg(gpadl_body, + submsginfo->msgsize - + sizeof(*submsginfo)); + if (ret != 0) + goto cleanup; - ret = vmbus_post_msg(gpadl_body, - submsginfo->msgsize - - sizeof(*submsginfo)); - if (ret != 0) - goto cleanup; - - } } wait_for_completion(&msginfo->waitevent); From patchwork Wed Apr 12 17:43:42 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sumit Semwal X-Patchwork-Id: 97331 Delivered-To: patch@linaro.org Received: by 10.140.109.52 with SMTP id k49csp374419qgf; Wed, 12 Apr 2017 10:44:42 -0700 (PDT) X-Received: by 10.98.157.150 with SMTP id a22mr19903172pfk.255.1492019082512; Wed, 12 Apr 2017 10:44:42 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l17si21057414pgj.292.2017.04.12.10.44.42; Wed, 12 Apr 2017 10:44:42 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753882AbdDLRoc (ORCPT + 6 others); Wed, 12 Apr 2017 13:44:32 -0400 Received: from mail-pf0-f170.google.com ([209.85.192.170]:34105 "EHLO mail-pf0-f170.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755221AbdDLRo3 (ORCPT ); Wed, 12 Apr 2017 13:44:29 -0400 Received: by mail-pf0-f170.google.com with SMTP id c198so16979428pfc.1 for ; Wed, 12 Apr 2017 10:44:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=VLHjgau/bHn36t9u38eVY9C1h0TFKG2NxVBdYg6dTE8=; b=EKwK+S8zGLqcvCnVHDvbND6c52fvS1Vn2C/XE73/IA1xXYAqHsrUXdiWroD0iT8YQa J+3PGsBbQ4IjzMWR8oNtBcVsd3Y44nAHQYQSMmcvJKi7lH+vghLjqA5ASPGd8ek5RDpu GJRzMajNQXvcnjCnTS78Xl0njsFV2LHIPMNFA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=VLHjgau/bHn36t9u38eVY9C1h0TFKG2NxVBdYg6dTE8=; b=OH2PXxRalckBjScOGK0lnLVcFLAzAvweAs59Fl3qj2v40hRlep7h/EN9jXs7JMNKM6 y9TnQVqa69Tm1a/Mxigmty50MkQglfrbyhXjWPjh9QM0/dqnThI9IbQedPGDl9xyt/wM 8uSdGhz7gstFgLqqdkiGOcdQwt7BYxiVVqiwhQAg8n4ic0vy4qdm5WZ3JQnEaQ7gtQbQ qi6Jaee4oHkk4E1ELLEJaelymEjv0pqgEOK/et5V+4ynNkaNNh5QcUUWNUZQRBWJ6kf+ fuSFjMDcdStTW3o6q2rDB9pcRAU9RwglcCyQfdWa0X6Kxxor4kOOX8WhTGYfk96mc0Tj PfDA== X-Gm-Message-State: AFeK/H2lURAv6Nwk44IMb5k8gnt87u0EZA0zyZqQuoqLiHEVehEh7vWVjZVTZnfsKC0kDTqI X-Received: by 10.84.241.74 with SMTP id u10mr44177510plm.28.1492019063814; Wed, 12 Apr 2017 10:44:23 -0700 (PDT) Received: from phantom.lan ([106.51.225.38]) by smtp.gmail.com with ESMTPSA id r17sm37750019pfa.13.2017.04.12.10.44.21 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 12 Apr 2017 10:44:22 -0700 (PDT) From: Sumit Semwal To: stable@vger.kernel.org Cc: Vitaly Kuznetsov , "K . Y . Srinivasan" , Greg Kroah-Hartman , Sumit Semwal Subject: [v2 PATCH for-4.4 08/16] Drivers: hv: don't leak memory in vmbus_establish_gpadl() Date: Wed, 12 Apr 2017 23:13:42 +0530 Message-Id: <1492019030-13567-9-git-send-email-sumit.semwal@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1492019030-13567-1-git-send-email-sumit.semwal@linaro.org> References: <1492019030-13567-1-git-send-email-sumit.semwal@linaro.org> Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Vitaly Kuznetsov [ Upstream commit 7cc80c98070ccc7940fc28811c92cca0a681015d ] In some cases create_gpadl_header() allocates submessages but we never free them. Signed-off-by: Vitaly Kuznetsov Signed-off-by: K. Y. Srinivasan Signed-off-by: Greg Kroah-Hartman Signed-off-by: Sumit Semwal --- drivers/hv/channel.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) -- 2.7.4 diff --git a/drivers/hv/channel.c b/drivers/hv/channel.c index fb1e3df..ec61ad8 100644 --- a/drivers/hv/channel.c +++ b/drivers/hv/channel.c @@ -373,7 +373,7 @@ int vmbus_establish_gpadl(struct vmbus_channel *channel, void *kbuffer, struct vmbus_channel_gpadl_header *gpadlmsg; struct vmbus_channel_gpadl_body *gpadl_body; struct vmbus_channel_msginfo *msginfo = NULL; - struct vmbus_channel_msginfo *submsginfo; + struct vmbus_channel_msginfo *submsginfo, *tmp; struct list_head *curr; u32 next_gpadl_handle; unsigned long flags; @@ -430,6 +430,10 @@ cleanup: spin_lock_irqsave(&vmbus_connection.channelmsg_lock, flags); list_del(&msginfo->msglistentry); spin_unlock_irqrestore(&vmbus_connection.channelmsg_lock, flags); + list_for_each_entry_safe(submsginfo, tmp, &msginfo->submsglist, + msglistentry) { + kfree(submsginfo); + } kfree(msginfo); return ret; From patchwork Wed Apr 12 17:43:43 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sumit Semwal X-Patchwork-Id: 97330 Delivered-To: patch@linaro.org Received: by 10.140.109.52 with SMTP id k49csp374418qgf; Wed, 12 Apr 2017 10:44:42 -0700 (PDT) X-Received: by 10.99.7.3 with SMTP id 3mr70669085pgh.95.1492019082246; Wed, 12 Apr 2017 10:44:42 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l17si21057414pgj.292.2017.04.12.10.44.42; Wed, 12 Apr 2017 10:44:42 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755256AbdDLRoa (ORCPT + 6 others); Wed, 12 Apr 2017 13:44:30 -0400 Received: from mail-pf0-f170.google.com ([209.85.192.170]:32936 "EHLO mail-pf0-f170.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755308AbdDLRo2 (ORCPT ); Wed, 12 Apr 2017 13:44:28 -0400 Received: by mail-pf0-f170.google.com with SMTP id s16so17038186pfs.0 for ; Wed, 12 Apr 2017 10:44:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=x0wPPRlTP+hG57wtidoHWk2+vjoeHDkgoaF0MMqIcI8=; b=Y1qsapLzBaufqwdHjHxRoZIpDR8wgEkea6b+wIDzDR38ifKZ4BpfUGxWXYerBtnIP6 E926UJny7UIf+iPCIVSGMyogECu7d5/1ULdlXWCXZ4EM+9aRsKvefOCmc71ierRS8Wx7 N6r+sn+4J3KmehBTHMl37+YrKCxIDhgVV2iGE= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=x0wPPRlTP+hG57wtidoHWk2+vjoeHDkgoaF0MMqIcI8=; b=htuKg/m32BD10J8urKR1V3AGLxNvVEFqytTz/Zpv/ftMoyp63lu6sYby0i9TYJ9WAq 2t7NuAblFX/uUIWPznnLVrkeHl7r2G3MURPd5RiyG+byb1R0P8fOQNe6wW0CaOfOe78N KuFRRtj7ZVIU5vbjni7AmjqSom0VxrZKdNogC7MQWLhmqwR1f9yXLmjc3s72s68Qorfj 8CHswjrLxkWQ4xATwbussOzbP24FYLdiq9MoRL/cR1X6dsYzbITvHxUTNa2pLpUnJDUE Z+ETv7+Qr9oDsGS1xLRgOoWzJoHYtf0NLxZ45Vz3i3thNsfvhQl0OddASd4br7EQ6mEk HoYA== X-Gm-Message-State: AN3rC/5A+GdSotFTJyQCxVrMKjFEOaBdUIIVbKU/Je5Ie/NPdtZ8ev45wpauPkQ/sGER76Oe X-Received: by 10.84.173.67 with SMTP id o61mr36874212plb.46.1492019067633; Wed, 12 Apr 2017 10:44:27 -0700 (PDT) Received: from phantom.lan ([106.51.225.38]) by smtp.gmail.com with ESMTPSA id r17sm37750019pfa.13.2017.04.12.10.44.24 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 12 Apr 2017 10:44:25 -0700 (PDT) From: Sumit Semwal To: stable@vger.kernel.org Cc: Vitaly Kuznetsov , "K . Y . Srinivasan" , Greg Kroah-Hartman , Sumit Semwal Subject: [v2 PATCH for-4.4 09/16] Drivers: hv: get rid of timeout in vmbus_open() Date: Wed, 12 Apr 2017 23:13:43 +0530 Message-Id: <1492019030-13567-10-git-send-email-sumit.semwal@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1492019030-13567-1-git-send-email-sumit.semwal@linaro.org> References: <1492019030-13567-1-git-send-email-sumit.semwal@linaro.org> Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Vitaly Kuznetsov [ Upstream commit 396e287fa2ff46e83ae016cdcb300c3faa3b02f6 ] vmbus_teardown_gpadl() can result in infinite wait when it is called on 5 second timeout in vmbus_open(). The issue is caused by the fact that gpadl teardown operation won't ever succeed for an opened channel and the timeout isn't always enough. As a guest, we can always trust the host to respond to our request (and there is nothing we can do if it doesn't). Signed-off-by: Vitaly Kuznetsov Signed-off-by: K. Y. Srinivasan Signed-off-by: Greg Kroah-Hartman Signed-off-by: Sumit Semwal --- drivers/hv/channel.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) -- 2.7.4 diff --git a/drivers/hv/channel.c b/drivers/hv/channel.c index ec61ad8..800598c 100644 --- a/drivers/hv/channel.c +++ b/drivers/hv/channel.c @@ -73,7 +73,6 @@ int vmbus_open(struct vmbus_channel *newchannel, u32 send_ringbuffer_size, void *in, *out; unsigned long flags; int ret, err = 0; - unsigned long t; struct page *page; spin_lock_irqsave(&newchannel->lock, flags); @@ -183,11 +182,7 @@ int vmbus_open(struct vmbus_channel *newchannel, u32 send_ringbuffer_size, goto error1; } - t = wait_for_completion_timeout(&open_info->waitevent, 5*HZ); - if (t == 0) { - err = -ETIMEDOUT; - goto error1; - } + wait_for_completion(&open_info->waitevent); spin_lock_irqsave(&vmbus_connection.channelmsg_lock, flags); list_del(&open_info->msglistentry); From patchwork Wed Apr 12 17:43:44 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sumit Semwal X-Patchwork-Id: 97332 Delivered-To: patch@linaro.org Received: by 10.140.109.52 with SMTP id k49csp374422qgf; Wed, 12 Apr 2017 10:44:42 -0700 (PDT) X-Received: by 10.84.214.129 with SMTP id j1mr83630462pli.23.1492019082788; Wed, 12 Apr 2017 10:44:42 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l17si21057414pgj.292.2017.04.12.10.44.42; Wed, 12 Apr 2017 10:44:42 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755318AbdDLRog (ORCPT + 6 others); Wed, 12 Apr 2017 13:44:36 -0400 Received: from mail-pf0-f180.google.com ([209.85.192.180]:35564 "EHLO mail-pf0-f180.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755093AbdDLRob (ORCPT ); Wed, 12 Apr 2017 13:44:31 -0400 Received: by mail-pf0-f180.google.com with SMTP id i5so16975240pfc.2 for ; Wed, 12 Apr 2017 10:44:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=nvuryFGNPGCQ0OvrpADpfSou8jt4E6kEASBeHvbi9dE=; b=ecevXUrTs0+OAol46QFEAxLgaEOGJhsT0NI/LgboWgfT2Gsf/thfvmQpZdxop9TiCR SRMF7I+kFaymR9kHHTFNbLu1+5/Qw0KLWFeDgu8lcGMP9YcxsBnYpSGYfN09xUau5QJi AtAyLUC2J9Hj8l4MS4fziLe7JnA5EbOkt/wUU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=nvuryFGNPGCQ0OvrpADpfSou8jt4E6kEASBeHvbi9dE=; b=Ex7XNisex/nmn9s7VdcoRqZM38xpSEzroZjamrCTIGG6uOZMVHIiiuX/3v8Kh03/xX iAebLbHXDOH/hVIJWVEzogQSXSXmzdWYXF4lEjqYj7sv4n5h6xNIYZf7RyjVjhoGqh22 kI9oZlWhWjasRYFWM0SbgHP8ua5wk8kZn3PGGjlwzeLJwj2+IdsT0Fjp+tMUBGz1W1+Z jedix8Y74OvMnPGQ5wtdPaeflAR5LQvNCZjQQ1sp2vFtUo7fvK6Ba6hywT7nTjlVeESe ZyZnXZYxYJssCSbx7tfSaFbE4rx4im8TJ/HjCI0Rruae8R4qizO+BVpIWW6fNXT+zRgf 6/9Q== X-Gm-Message-State: AFeK/H2VHpkWUP2rHf9wBrcCZls8c2j+2EmetzDmWBxP9/tSAlHsYURE7yWu9evW4jV42anv X-Received: by 10.84.179.99 with SMTP id a90mr82740781plc.26.1492019070325; Wed, 12 Apr 2017 10:44:30 -0700 (PDT) Received: from phantom.lan ([106.51.225.38]) by smtp.gmail.com with ESMTPSA id r17sm37750019pfa.13.2017.04.12.10.44.27 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 12 Apr 2017 10:44:29 -0700 (PDT) From: Sumit Semwal To: stable@vger.kernel.org Cc: "K. Y. Srinivasan" , Greg Kroah-Hartman , Sumit Semwal Subject: [v2 PATCH for-4.4 10/16] Drivers: hv: vmbus: Reduce the delay between retries in vmbus_post_msg() Date: Wed, 12 Apr 2017 23:13:44 +0530 Message-Id: <1492019030-13567-11-git-send-email-sumit.semwal@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1492019030-13567-1-git-send-email-sumit.semwal@linaro.org> References: <1492019030-13567-1-git-send-email-sumit.semwal@linaro.org> Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: "K. Y. Srinivasan" [ Upstream commit 8de0d7e951826d7592e0ba1da655b175c4aa0923 ] The current delay between retries is unnecessarily high and is negatively affecting the time it takes to boot the system. Signed-off-by: K. Y. Srinivasan Signed-off-by: Greg Kroah-Hartman Signed-off-by: Sumit Semwal --- drivers/hv/connection.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) -- 2.7.4 diff --git a/drivers/hv/connection.c b/drivers/hv/connection.c index 4fc2e88..2bbc530 100644 --- a/drivers/hv/connection.c +++ b/drivers/hv/connection.c @@ -429,7 +429,7 @@ int vmbus_post_msg(void *buffer, size_t buflen) union hv_connection_id conn_id; int ret = 0; int retries = 0; - u32 msec = 1; + u32 usec = 1; conn_id.asu32 = 0; conn_id.u.id = VMBUS_MESSAGE_CONNECTION_ID; @@ -462,9 +462,9 @@ int vmbus_post_msg(void *buffer, size_t buflen) } retries++; - msleep(msec); - if (msec < 2048) - msec *= 2; + udelay(usec); + if (usec < 2048) + usec *= 2; } return ret; } From patchwork Wed Apr 12 17:43:45 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sumit Semwal X-Patchwork-Id: 97333 Delivered-To: patch@linaro.org Received: by 10.140.109.52 with SMTP id k49csp374426qgf; Wed, 12 Apr 2017 10:44:43 -0700 (PDT) X-Received: by 10.98.92.1 with SMTP id q1mr68618070pfb.209.1492019083056; Wed, 12 Apr 2017 10:44:43 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l17si21057414pgj.292.2017.04.12.10.44.42; Wed, 12 Apr 2017 10:44:43 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755308AbdDLRoh (ORCPT + 6 others); Wed, 12 Apr 2017 13:44:37 -0400 Received: from mail-pf0-f181.google.com ([209.85.192.181]:36261 "EHLO mail-pf0-f181.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754869AbdDLRoe (ORCPT ); Wed, 12 Apr 2017 13:44:34 -0400 Received: by mail-pf0-f181.google.com with SMTP id o126so16982354pfb.3 for ; Wed, 12 Apr 2017 10:44:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=pJPpAxTCXAFWsJOMqb2N3RYGj35hZ9PAsgs24tOjD04=; b=Z4BrXYrl/bMffWeJBXj3e/VH88UTJcfiNyzkt7Q2geBekfdssxnt+a3vsDRDy2qTRX dqQuPVijsjsupeBZIbotLzNyFZtJksUGCAhkaXAdGCdSJ+1Y6omhevjEBHbC2d3tE+/1 myUV8q7HXJXklmNEzrvu3q2qozMi10otB5BXo= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=pJPpAxTCXAFWsJOMqb2N3RYGj35hZ9PAsgs24tOjD04=; b=DBFb+UAhxE8zcHY7r+gVBYIP42iv7ffRu+Jzed4JVQw4D9WkMxWrEF1BWeHZwzgn6A Do0lrk/j0H8NyzEOz4nWzMd57nSroa6rZvbaSlK8no5chMSqk9hmHTAHkv4i5dBrvWpk LAeNc1sHTyrltdpVl7dSMtJIpCEiQIh0FRD4YDtByWllnify2+2K6xl02DgMc+AooqHU H4DbyjbdwgfVI93AXGrNFX5AtLHWTtdP3+5BI/RYEzUX7sIe5i2/s6hAc7tJBgtX2wNw aDuUSxFbs+8VJpaINU4AvWNuRtElgWDPAo66d3v6YL4fV8dg84bWkMKSyLAutjc0oQAf Ju5w== X-Gm-Message-State: AN3rC/4gsloGJr6NLgUACqJlqbzh7DMgr6jY47ZBdfr+/US6tX6lpMJqDLHuG4tB455MUjVr X-Received: by 10.84.131.97 with SMTP id 88mr11144591pld.40.1492019073410; Wed, 12 Apr 2017 10:44:33 -0700 (PDT) Received: from phantom.lan ([106.51.225.38]) by smtp.gmail.com with ESMTPSA id r17sm37750019pfa.13.2017.04.12.10.44.30 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 12 Apr 2017 10:44:32 -0700 (PDT) From: Sumit Semwal To: stable@vger.kernel.org Cc: Vitaly Kuznetsov , "K . Y . Srinivasan" , Greg Kroah-Hartman , Sumit Semwal Subject: [v2 PATCH for-4.4 11/16] Tools: hv: kvp: ensure kvp device fd is closed on exec Date: Wed, 12 Apr 2017 23:13:45 +0530 Message-Id: <1492019030-13567-12-git-send-email-sumit.semwal@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1492019030-13567-1-git-send-email-sumit.semwal@linaro.org> References: <1492019030-13567-1-git-send-email-sumit.semwal@linaro.org> Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Vitaly Kuznetsov [ Upstream commit 26840437cbd6d3625ea6ab34e17cd34bb810c861 ] KVP daemon does fork()/exec() (with popen()) so we need to close our fds to avoid sharing them with child processes. The immediate implication of not doing so I see is SELinux complaining about 'ip' trying to access '/dev/vmbus/hv_kvp'. Signed-off-by: Vitaly Kuznetsov Signed-off-by: K. Y. Srinivasan Signed-off-by: Greg Kroah-Hartman Signed-off-by: Sumit Semwal --- tools/hv/hv_kvp_daemon.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -- 2.7.4 diff --git a/tools/hv/hv_kvp_daemon.c b/tools/hv/hv_kvp_daemon.c index 0d9f48e..bc7adb8 100644 --- a/tools/hv/hv_kvp_daemon.c +++ b/tools/hv/hv_kvp_daemon.c @@ -1433,7 +1433,7 @@ int main(int argc, char *argv[]) openlog("KVP", 0, LOG_USER); syslog(LOG_INFO, "KVP starting; pid is:%d", getpid()); - kvp_fd = open("/dev/vmbus/hv_kvp", O_RDWR); + kvp_fd = open("/dev/vmbus/hv_kvp", O_RDWR | O_CLOEXEC); if (kvp_fd < 0) { syslog(LOG_ERR, "open /dev/vmbus/hv_kvp failed; error: %d %s", From patchwork Wed Apr 12 17:43:46 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sumit Semwal X-Patchwork-Id: 97334 Delivered-To: patch@linaro.org Received: by 10.140.109.52 with SMTP id k49csp374431qgf; Wed, 12 Apr 2017 10:44:43 -0700 (PDT) X-Received: by 10.98.204.155 with SMTP id j27mr16298299pfk.213.1492019083338; Wed, 12 Apr 2017 10:44:43 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l17si21057414pgj.292.2017.04.12.10.44.43; Wed, 12 Apr 2017 10:44:43 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754869AbdDLRoj (ORCPT + 6 others); Wed, 12 Apr 2017 13:44:39 -0400 Received: from mail-pg0-f52.google.com ([74.125.83.52]:33767 "EHLO mail-pg0-f52.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755093AbdDLRoh (ORCPT ); Wed, 12 Apr 2017 13:44:37 -0400 Received: by mail-pg0-f52.google.com with SMTP id x125so18163164pgb.0 for ; Wed, 12 Apr 2017 10:44:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=XvfGN4kuV2GaT9V0Hew0AdCq55FIICrp9Uuj/cDy4xQ=; b=GGvw/2zrGpE+RoaIY2QmKo6BzsFTPo2LKKxN0xCGMek8yy5oPnVYMym2Dcged5rub0 omQTgUteFcAs6bA/VfAUlF45lGuhzgDZJrdLxH+4lqBNQKDrpwJHloFw+rhzqdaWyVFp Qf0pb9b0jIMqPgAAL/hlLItsqvpFU5v9SOqOI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=XvfGN4kuV2GaT9V0Hew0AdCq55FIICrp9Uuj/cDy4xQ=; b=ZCSrJcUBRSab7XaMj2uUw7vsgOAnKuw5H1RELzkQ7NX44dftF75jfrBycJCaKw2A1Q nS82S9lUb6TGKlmBTDLvNqH7RKDr4F5grfR3Du4woOu21ATrxC5HjkRSdtZZayvIXWRa p/C8cmGJA4VGOalZ2iwU+z1IaKYvcD3WVvyyRKLcUE7a64NKoCWDWOKhYexf8HOMhehG XalviuOnoyBggqzqmIcQhE/RB7tJv5HwitzX6r1MIgzpxtGfy/O2vGNHJUba0aqp0WcX 4y7rRYUxmEtBE4vQXeCKC9tpU5Ml4Vo+OI2e18iS6vc2fw1F1+qJTHWrivF/n0aN0Xk9 9ONA== X-Gm-Message-State: AFeK/H1NcPBZl7C9+zCKuc9k3QrweXQnZTNGg63pC6mZingbd8BmW7kt5sirfu6tOlwM4kl5 X-Received: by 10.98.34.20 with SMTP id i20mr48214699pfi.102.1492019076487; Wed, 12 Apr 2017 10:44:36 -0700 (PDT) Received: from phantom.lan ([106.51.225.38]) by smtp.gmail.com with ESMTPSA id r17sm37750019pfa.13.2017.04.12.10.44.33 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 12 Apr 2017 10:44:35 -0700 (PDT) From: Sumit Semwal To: stable@vger.kernel.org Cc: Vitaly Kuznetsov , "K . Y . Srinivasan" , Greg Kroah-Hartman , Sumit Semwal Subject: [v2 PATCH for-4.4 12/16] Drivers: hv: balloon: keep track of where ha_region starts Date: Wed, 12 Apr 2017 23:13:46 +0530 Message-Id: <1492019030-13567-13-git-send-email-sumit.semwal@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1492019030-13567-1-git-send-email-sumit.semwal@linaro.org> References: <1492019030-13567-1-git-send-email-sumit.semwal@linaro.org> Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Vitaly Kuznetsov [ Upstream commit 7cf3b79ec85ee1a5bbaaf936bb1d050dc652983b ] Windows 2012 (non-R2) does not specify hot add region in hot add requests and the logic in hot_add_req() is trying to find a 128Mb-aligned region covering the request. It may also happen that host's requests are not 128Mb aligned and the created ha_region will start before the first specified PFN. We can't online these non-present pages but we don't remember the real start of the region. This is a regression introduced by the commit 5abbbb75d733 ("Drivers: hv: hv_balloon: don't lose memory when onlining order is not natural"). While the idea of keeping the 'moving window' was wrong (as there is no guarantee that hot add requests come ordered) we should still keep track of covered_start_pfn. This is not a revert, the logic is different. Signed-off-by: Vitaly Kuznetsov Signed-off-by: K. Y. Srinivasan Signed-off-by: Greg Kroah-Hartman Signed-off-by: Sumit Semwal --- drivers/hv/hv_balloon.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) -- 2.7.4 diff --git a/drivers/hv/hv_balloon.c b/drivers/hv/hv_balloon.c index 43af913..1542d89 100644 --- a/drivers/hv/hv_balloon.c +++ b/drivers/hv/hv_balloon.c @@ -430,13 +430,14 @@ struct dm_info_msg { * currently hot added. We hot add in multiples of 128M * chunks; it is possible that we may not be able to bring * online all the pages in the region. The range - * covered_end_pfn defines the pages that can + * covered_start_pfn:covered_end_pfn defines the pages that can * be brough online. */ struct hv_hotadd_state { struct list_head list; unsigned long start_pfn; + unsigned long covered_start_pfn; unsigned long covered_end_pfn; unsigned long ha_end_pfn; unsigned long end_pfn; @@ -682,7 +683,8 @@ static void hv_online_page(struct page *pg) list_for_each(cur, &dm_device.ha_region_list) { has = list_entry(cur, struct hv_hotadd_state, list); - cur_start_pgp = (unsigned long)pfn_to_page(has->start_pfn); + cur_start_pgp = (unsigned long) + pfn_to_page(has->covered_start_pfn); cur_end_pgp = (unsigned long)pfn_to_page(has->covered_end_pfn); if (((unsigned long)pg >= cur_start_pgp) && @@ -854,6 +856,7 @@ static unsigned long process_hot_add(unsigned long pg_start, list_add_tail(&ha_region->list, &dm_device.ha_region_list); ha_region->start_pfn = rg_start; ha_region->ha_end_pfn = rg_start; + ha_region->covered_start_pfn = pg_start; ha_region->covered_end_pfn = pg_start; ha_region->end_pfn = rg_start + rg_size; } From patchwork Wed Apr 12 17:43:47 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sumit Semwal X-Patchwork-Id: 97336 Delivered-To: patch@linaro.org Received: by 10.140.109.52 with SMTP id k49csp374530qgf; Wed, 12 Apr 2017 10:45:03 -0700 (PDT) X-Received: by 10.98.158.16 with SMTP id s16mr26039964pfd.159.1492019103262; Wed, 12 Apr 2017 10:45:03 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id z21si18652409pgh.397.2017.04.12.10.45.03; Wed, 12 Apr 2017 10:45:03 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755276AbdDLRop (ORCPT + 6 others); Wed, 12 Apr 2017 13:44:45 -0400 Received: from mail-pg0-f54.google.com ([74.125.83.54]:33780 "EHLO mail-pg0-f54.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755093AbdDLRok (ORCPT ); Wed, 12 Apr 2017 13:44:40 -0400 Received: by mail-pg0-f54.google.com with SMTP id x125so18163774pgb.0 for ; Wed, 12 Apr 2017 10:44:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=EuLNoZMLfU/22HGDkGMh41LW2mo8H8L2dXXCoH87VFI=; b=gZtQbC2GQN3oK7xp4JOWvkEPXV+DmbGKWVrJiYFSZslHfTNR4XcAgniphs6WsC+VR6 ghBOfUImtTfHhm0wMz3RDF7fWYyMvp/gnWCyJnQzxyKFWmsOexsAQolbkwzeJdjkrmII anjdU0KKNvsyxJ93IQ7c97vWgQoUv+2TAeqEE= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=EuLNoZMLfU/22HGDkGMh41LW2mo8H8L2dXXCoH87VFI=; b=aY0U+c8IgVOYnf0g3s5QItLbVkrntm0Jb8cI2UcH8KGdLFrHASi6bqK40iWr0VAfFu gf5tpC3oZqwXUEOfQpDDLzhcZI8GY46ON0WqQaY7+Nf2QF9uGulHzZRTdj7JbPXxgquz NThg3a/guHnDu+RDqK60lMy5c7kVfmvbLNbw1g6BHsI03un3/cukMr3LC4Kh6poW2dvm 4rE8xyJiUmAwQUbx2ZxxEqsvGlqULlD3Nw5aBtidmJy62Sr74UH/AR4A3AZZYxL4Ru/h Kbn7IH9rZLbEdcw/BexNmu1opryiYKWuiLdpEzAyNJPTAaT4ray6Py3e4IokyCor27n9 Z85w== X-Gm-Message-State: AFeK/H1AtkV9TVRw1C6m/OhtgLWKi3wU+h5qwIGsbX8ZpJ8cnJnxNMOxC+d5UNZ1PJ0+ky88 X-Received: by 10.99.2.209 with SMTP id 200mr67557726pgc.181.1492019079712; Wed, 12 Apr 2017 10:44:39 -0700 (PDT) Received: from phantom.lan ([106.51.225.38]) by smtp.gmail.com with ESMTPSA id r17sm37750019pfa.13.2017.04.12.10.44.36 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 12 Apr 2017 10:44:38 -0700 (PDT) From: Sumit Semwal To: stable@vger.kernel.org Cc: Vitaly Kuznetsov , "K . Y . Srinivasan" , Greg Kroah-Hartman , Sumit Semwal Subject: [v2 PATCH for-4.4 13/16] Drivers: hv: balloon: account for gaps in hot add regions Date: Wed, 12 Apr 2017 23:13:47 +0530 Message-Id: <1492019030-13567-14-git-send-email-sumit.semwal@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1492019030-13567-1-git-send-email-sumit.semwal@linaro.org> References: <1492019030-13567-1-git-send-email-sumit.semwal@linaro.org> Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Vitaly Kuznetsov [ Upstream commit cb7a5724c7e1bfb5766ad1c3beba14cc715991cf ] I'm observing the following hot add requests from the WS2012 host: hot_add_req: start_pfn = 0x108200 count = 330752 hot_add_req: start_pfn = 0x158e00 count = 193536 hot_add_req: start_pfn = 0x188400 count = 239616 As the host doesn't specify hot add regions we're trying to create 128Mb-aligned region covering the first request, we create the 0x108000 - 0x160000 region and we add 0x108000 - 0x158e00 memory. The second request passes the pfn_covered() check, we enlarge the region to 0x108000 - 0x190000 and add 0x158e00 - 0x188200 memory. The problem emerges with the third request as it starts at 0x188400 so there is a 0x200 gap which is not covered. As the end of our region is 0x190000 now it again passes the pfn_covered() check were we just adjust the covered_end_pfn and make it 0x188400 instead of 0x188200 which means that we'll try to online 0x188200-0x188400 pages but these pages were never assigned to us and we crash. We can't react to such requests by creating new hot add regions as it may happen that the whole suggested range falls into the previously identified 128Mb-aligned area so we'll end up adding nothing or create intersecting regions and our current logic doesn't allow that. Instead, create a list of such 'gaps' and check for them in the page online callback. Signed-off-by: Vitaly Kuznetsov Signed-off-by: K. Y. Srinivasan Signed-off-by: Greg Kroah-Hartman Signed-off-by: Sumit Semwal --- drivers/hv/hv_balloon.c | 131 ++++++++++++++++++++++++++++++++++-------------- 1 file changed, 94 insertions(+), 37 deletions(-) -- 2.7.4 diff --git a/drivers/hv/hv_balloon.c b/drivers/hv/hv_balloon.c index 1542d89..354da7f 100644 --- a/drivers/hv/hv_balloon.c +++ b/drivers/hv/hv_balloon.c @@ -441,6 +441,16 @@ struct hv_hotadd_state { unsigned long covered_end_pfn; unsigned long ha_end_pfn; unsigned long end_pfn; + /* + * A list of gaps. + */ + struct list_head gap_list; +}; + +struct hv_hotadd_gap { + struct list_head list; + unsigned long start_pfn; + unsigned long end_pfn; }; struct balloon_state { @@ -596,18 +606,46 @@ static struct notifier_block hv_memory_nb = { .priority = 0 }; +/* Check if the particular page is backed and can be onlined and online it. */ +static void hv_page_online_one(struct hv_hotadd_state *has, struct page *pg) +{ + unsigned long cur_start_pgp; + unsigned long cur_end_pgp; + struct hv_hotadd_gap *gap; + + cur_start_pgp = (unsigned long)pfn_to_page(has->covered_start_pfn); + cur_end_pgp = (unsigned long)pfn_to_page(has->covered_end_pfn); -static void hv_bring_pgs_online(unsigned long start_pfn, unsigned long size) + /* The page is not backed. */ + if (((unsigned long)pg < cur_start_pgp) || + ((unsigned long)pg >= cur_end_pgp)) + return; + + /* Check for gaps. */ + list_for_each_entry(gap, &has->gap_list, list) { + cur_start_pgp = (unsigned long) + pfn_to_page(gap->start_pfn); + cur_end_pgp = (unsigned long) + pfn_to_page(gap->end_pfn); + if (((unsigned long)pg >= cur_start_pgp) && + ((unsigned long)pg < cur_end_pgp)) { + return; + } + } + + /* This frame is currently backed; online the page. */ + __online_page_set_limits(pg); + __online_page_increment_counters(pg); + __online_page_free(pg); +} + +static void hv_bring_pgs_online(struct hv_hotadd_state *has, + unsigned long start_pfn, unsigned long size) { int i; - for (i = 0; i < size; i++) { - struct page *pg; - pg = pfn_to_page(start_pfn + i); - __online_page_set_limits(pg); - __online_page_increment_counters(pg); - __online_page_free(pg); - } + for (i = 0; i < size; i++) + hv_page_online_one(has, pfn_to_page(start_pfn + i)); } static void hv_mem_hot_add(unsigned long start, unsigned long size, @@ -684,26 +722,24 @@ static void hv_online_page(struct page *pg) list_for_each(cur, &dm_device.ha_region_list) { has = list_entry(cur, struct hv_hotadd_state, list); cur_start_pgp = (unsigned long) - pfn_to_page(has->covered_start_pfn); - cur_end_pgp = (unsigned long)pfn_to_page(has->covered_end_pfn); + pfn_to_page(has->start_pfn); + cur_end_pgp = (unsigned long)pfn_to_page(has->end_pfn); - if (((unsigned long)pg >= cur_start_pgp) && - ((unsigned long)pg < cur_end_pgp)) { - /* - * This frame is currently backed; online the - * page. - */ - __online_page_set_limits(pg); - __online_page_increment_counters(pg); - __online_page_free(pg); - } + /* The page belongs to a different HAS. */ + if (((unsigned long)pg < cur_start_pgp) || + ((unsigned long)pg >= cur_end_pgp)) + continue; + + hv_page_online_one(has, pg); + break; } } -static bool pfn_covered(unsigned long start_pfn, unsigned long pfn_cnt) +static int pfn_covered(unsigned long start_pfn, unsigned long pfn_cnt) { struct list_head *cur; struct hv_hotadd_state *has; + struct hv_hotadd_gap *gap; unsigned long residual, new_inc; if (list_empty(&dm_device.ha_region_list)) @@ -718,6 +754,24 @@ static bool pfn_covered(unsigned long start_pfn, unsigned long pfn_cnt) */ if (start_pfn < has->start_pfn || start_pfn >= has->end_pfn) continue; + + /* + * If the current start pfn is not where the covered_end + * is, create a gap and update covered_end_pfn. + */ + if (has->covered_end_pfn != start_pfn) { + gap = kzalloc(sizeof(struct hv_hotadd_gap), GFP_ATOMIC); + if (!gap) + return -ENOMEM; + + INIT_LIST_HEAD(&gap->list); + gap->start_pfn = has->covered_end_pfn; + gap->end_pfn = start_pfn; + list_add_tail(&gap->list, &has->gap_list); + + has->covered_end_pfn = start_pfn; + } + /* * If the current hot add-request extends beyond * our current limit; extend it. @@ -734,19 +788,10 @@ static bool pfn_covered(unsigned long start_pfn, unsigned long pfn_cnt) has->end_pfn += new_inc; } - /* - * If the current start pfn is not where the covered_end - * is, update it. - */ - - if (has->covered_end_pfn != start_pfn) - has->covered_end_pfn = start_pfn; - - return true; - + return 1; } - return false; + return 0; } static unsigned long handle_pg_range(unsigned long pg_start, @@ -785,6 +830,8 @@ static unsigned long handle_pg_range(unsigned long pg_start, if (pgs_ol > pfn_cnt) pgs_ol = pfn_cnt; + has->covered_end_pfn += pgs_ol; + pfn_cnt -= pgs_ol; /* * Check if the corresponding memory block is already * online by checking its last previously backed page. @@ -793,10 +840,8 @@ static unsigned long handle_pg_range(unsigned long pg_start, */ if (start_pfn > has->start_pfn && !PageReserved(pfn_to_page(start_pfn - 1))) - hv_bring_pgs_online(start_pfn, pgs_ol); + hv_bring_pgs_online(has, start_pfn, pgs_ol); - has->covered_end_pfn += pgs_ol; - pfn_cnt -= pgs_ol; } if ((has->ha_end_pfn < has->end_pfn) && (pfn_cnt > 0)) { @@ -834,13 +879,19 @@ static unsigned long process_hot_add(unsigned long pg_start, unsigned long rg_size) { struct hv_hotadd_state *ha_region = NULL; + int covered; if (pfn_cnt == 0) return 0; - if (!dm_device.host_specified_ha_region) - if (pfn_covered(pg_start, pfn_cnt)) + if (!dm_device.host_specified_ha_region) { + covered = pfn_covered(pg_start, pfn_cnt); + if (covered < 0) + return 0; + + if (covered) goto do_pg_range; + } /* * If the host has specified a hot-add range; deal with it first. @@ -852,6 +903,7 @@ static unsigned long process_hot_add(unsigned long pg_start, return 0; INIT_LIST_HEAD(&ha_region->list); + INIT_LIST_HEAD(&ha_region->gap_list); list_add_tail(&ha_region->list, &dm_device.ha_region_list); ha_region->start_pfn = rg_start; @@ -1584,6 +1636,7 @@ static int balloon_remove(struct hv_device *dev) struct hv_dynmem_device *dm = hv_get_drvdata(dev); struct list_head *cur, *tmp; struct hv_hotadd_state *has; + struct hv_hotadd_gap *gap, *tmp_gap; if (dm->num_pages_ballooned != 0) pr_warn("Ballooned pages: %d\n", dm->num_pages_ballooned); @@ -1600,6 +1653,10 @@ static int balloon_remove(struct hv_device *dev) #endif list_for_each_safe(cur, tmp, &dm->ha_region_list) { has = list_entry(cur, struct hv_hotadd_state, list); + list_for_each_entry_safe(gap, tmp_gap, &has->gap_list, list) { + list_del(&gap->list); + kfree(gap); + } list_del(&has->list); kfree(has); } From patchwork Wed Apr 12 17:43:48 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sumit Semwal X-Patchwork-Id: 97339 Delivered-To: patch@linaro.org Received: by 10.140.109.52 with SMTP id k49csp374592qgf; Wed, 12 Apr 2017 10:45:13 -0700 (PDT) X-Received: by 10.84.214.16 with SMTP id h16mr20066458pli.96.1492019113799; Wed, 12 Apr 2017 10:45:13 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id z21si18652409pgh.397.2017.04.12.10.45.13; Wed, 12 Apr 2017 10:45:13 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755399AbdDLRo4 (ORCPT + 6 others); Wed, 12 Apr 2017 13:44:56 -0400 Received: from mail-pf0-f178.google.com ([209.85.192.178]:34181 "EHLO mail-pf0-f178.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753066AbdDLRox (ORCPT ); Wed, 12 Apr 2017 13:44:53 -0400 Received: by mail-pf0-f178.google.com with SMTP id c198so16983041pfc.1 for ; Wed, 12 Apr 2017 10:44:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=b/4EdhaVvM16veNbBlzw6pKOeSID24uDb6DOWoRvntM=; b=JXsyRIAyYn/UEdhNisqhvq2j7/uVWo9KzhDwPs/6DwlJq0lpFCHQvYpkWd8YHsslcU ywy2ljVNC7yMjIc/d9VEaKoQ0qzLdes3P3vatlOd+G0hmR9WUAILd62OxCeuEEDMvhE0 oF3ia3yqXBtOVNh/MziOWNZmfVgLN/mDM7wOU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=b/4EdhaVvM16veNbBlzw6pKOeSID24uDb6DOWoRvntM=; b=NpX+/XEZJJFxO9bvgKzEqXkgQbXGdRHfR8t8HLQxuXB6qZ1kSd767kbG9aX4jD+9TE iHSV/m/m3nhwE5FViqdSQl6KiECWAy0a1jn0Z7PshDScl/PjL2hvULthOyPEdE1Zt6SJ uNc3gMsiLUL9dGErDwihH/CYaRun7OYyYKqT/wOdlKgZOv+zuqrlz4pepJ7FjnW/4o+m 14e3zulHm9lERa+O4gvizXvvdaHTTDCF5NXB5PVbS3ZHprVJl75+pHreG/KrVzJ9h4tE skm/cluwpgWTskbHJnSlVks+1qgcz/rhWwSiYlMK53uPFUlYdPRoms0hXafKF20O5QHm drUQ== X-Gm-Message-State: AFeK/H3WdQqnwhTnJQbjwgx8+pzSKGNzsz2G9XdrOv19qYytHaBc4bDXIF2dYtEnJOxuOcTb X-Received: by 10.84.197.1 with SMTP id m1mr84314715pld.183.1492019082666; Wed, 12 Apr 2017 10:44:42 -0700 (PDT) Received: from phantom.lan ([106.51.225.38]) by smtp.gmail.com with ESMTPSA id r17sm37750019pfa.13.2017.04.12.10.44.39 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 12 Apr 2017 10:44:41 -0700 (PDT) From: Sumit Semwal To: stable@vger.kernel.org Cc: Vitaly Kuznetsov , "K . Y . Srinivasan" , Greg Kroah-Hartman , Sumit Semwal Subject: [v2 PATCH for-4.4 14/16] hv: don't reset hv_context.tsc_page on crash Date: Wed, 12 Apr 2017 23:13:48 +0530 Message-Id: <1492019030-13567-15-git-send-email-sumit.semwal@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1492019030-13567-1-git-send-email-sumit.semwal@linaro.org> References: <1492019030-13567-1-git-send-email-sumit.semwal@linaro.org> Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Vitaly Kuznetsov [ Upstream commit 56ef6718a1d8d77745033c5291e025ce18504159 ] It may happen that secondary CPUs are still alive and resetting hv_context.tsc_page will cause a consequent crash in read_hv_clock_tsc() as we don't check for it being not NULL there. It is safe as we're not freeing this page anyways. Signed-off-by: Vitaly Kuznetsov Signed-off-by: K. Y. Srinivasan Cc: Signed-off-by: Greg Kroah-Hartman Signed-off-by: Sumit Semwal --- drivers/hv/hv.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) -- 2.7.4 diff --git a/drivers/hv/hv.c b/drivers/hv/hv.c index ddbf7e7..8ce1f2e 100644 --- a/drivers/hv/hv.c +++ b/drivers/hv/hv.c @@ -305,9 +305,10 @@ void hv_cleanup(bool crash) hypercall_msr.as_uint64 = 0; wrmsrl(HV_X64_MSR_REFERENCE_TSC, hypercall_msr.as_uint64); - if (!crash) + if (!crash) { vfree(hv_context.tsc_page); - hv_context.tsc_page = NULL; + hv_context.tsc_page = NULL; + } } #endif } From patchwork Wed Apr 12 17:43:49 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sumit Semwal X-Patchwork-Id: 97337 Delivered-To: patch@linaro.org Received: by 10.140.109.52 with SMTP id k49csp374533qgf; Wed, 12 Apr 2017 10:45:03 -0700 (PDT) X-Received: by 10.84.232.205 with SMTP id x13mr26917227plm.153.1492019103535; Wed, 12 Apr 2017 10:45:03 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id z21si18652409pgh.397.2017.04.12.10.45.03; Wed, 12 Apr 2017 10:45:03 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754249AbdDLRow (ORCPT + 6 others); Wed, 12 Apr 2017 13:44:52 -0400 Received: from mail-pg0-f48.google.com ([74.125.83.48]:33793 "EHLO mail-pg0-f48.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755178AbdDLRor (ORCPT ); Wed, 12 Apr 2017 13:44:47 -0400 Received: by mail-pg0-f48.google.com with SMTP id 21so18169506pgg.1 for ; Wed, 12 Apr 2017 10:44:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=18SwAii/IQRWqTWRoBqgj1Esna8k0ayO/Q1NCJQo/6w=; b=XVbZJLhczyVYpKY+Ek9JjI34RNlq5nEBMBt9K+T4fMOqPNCdQgwi3lYQwRqyq6WXvj JbiSt1wtq6Ge85zOOUzOLPJY8Tzf4ii2i/2BzW6k07eX8rOewnXQ3p5gW+TNQHrqGmzM AQC9ZxCmBd37epuTBRh/8ap+ogpyyV2pavsLY= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=18SwAii/IQRWqTWRoBqgj1Esna8k0ayO/Q1NCJQo/6w=; b=E+MtB6pTI5+dWiHBUttO34VdIQOYZntXDhgI3ikhVr9qAuk7hXYMz2rNDTDGda/+qr rXsFmUHeGacaPDyUd4kKCLcDtSwDWYxa3TyPxttA1+mKBYk+2rwxT9finCrGuEGsS1Vi Vmsl5sSGaj6XRQUhhed9I3kXNUKiZ3pDkCtpWkxfbUOvvYEDqgjOWG03uYfdB6FQ2eCB vXcNRgqpGhZW7iBF7975ATdb8PwlX/v6GG7nzekw4ShEmUJ+tI36bB8Sy8Rgmircznhj C8em6wLUJ6Nhgkb/Usu99t+YpRF5HBVXRdcwlT4sVB+ykAISlAxLocaDRdSZw+0U6KBJ QDGg== X-Gm-Message-State: AN3rC/411h3WEZwekR8ZJ3U8DEfUjHmsorb60sURVO29MEXTo2EgCvEwhSZ7I/Dgb8+ZVEwU X-Received: by 10.99.149.86 with SMTP id t22mr29732246pgn.154.1492019086292; Wed, 12 Apr 2017 10:44:46 -0700 (PDT) Received: from phantom.lan ([106.51.225.38]) by smtp.gmail.com with ESMTPSA id r17sm37750019pfa.13.2017.04.12.10.44.42 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 12 Apr 2017 10:44:45 -0700 (PDT) From: Sumit Semwal To: stable@vger.kernel.org Cc: Gabriel Krisman Bertazi , Brian King , Douglas Miller , linux-block@vger.kernel.org, linux-scsi@vger.kernel.org, Jens Axboe , Sumit Semwal Subject: [v2 PATCH for-4.4 15/16] blk-mq: Avoid memory reclaim when remapping queues Date: Wed, 12 Apr 2017 23:13:49 +0530 Message-Id: <1492019030-13567-16-git-send-email-sumit.semwal@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1492019030-13567-1-git-send-email-sumit.semwal@linaro.org> References: <1492019030-13567-1-git-send-email-sumit.semwal@linaro.org> Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Gabriel Krisman Bertazi [ Upstream commit 36e1f3d107867b25c616c2fd294f5a1c9d4e5d09 ] While stressing memory and IO at the same time we changed SMT settings, we were able to consistently trigger deadlocks in the mm system, which froze the entire machine. I think that under memory stress conditions, the large allocations performed by blk_mq_init_rq_map may trigger a reclaim, which stalls waiting on the block layer remmaping completion, thus deadlocking the system. The trace below was collected after the machine stalled, waiting for the hotplug event completion. The simplest fix for this is to make allocations in this path non-reclaimable, with GFP_NOIO. With this patch, We couldn't hit the issue anymore. This should apply on top of Jens's for-next branch cleanly. Changes since v1: - Use GFP_NOIO instead of GFP_NOWAIT. Call Trace: [c000000f0160aaf0] [c000000f0160ab50] 0xc000000f0160ab50 (unreliable) [c000000f0160acc0] [c000000000016624] __switch_to+0x2e4/0x430 [c000000f0160ad20] [c000000000b1a880] __schedule+0x310/0x9b0 [c000000f0160ae00] [c000000000b1af68] schedule+0x48/0xc0 [c000000f0160ae30] [c000000000b1b4b0] schedule_preempt_disabled+0x20/0x30 [c000000f0160ae50] [c000000000b1d4fc] __mutex_lock_slowpath+0xec/0x1f0 [c000000f0160aed0] [c000000000b1d678] mutex_lock+0x78/0xa0 [c000000f0160af00] [d000000019413cac] xfs_reclaim_inodes_ag+0x33c/0x380 [xfs] [c000000f0160b0b0] [d000000019415164] xfs_reclaim_inodes_nr+0x54/0x70 [xfs] [c000000f0160b0f0] [d0000000194297f8] xfs_fs_free_cached_objects+0x38/0x60 [xfs] [c000000f0160b120] [c0000000003172c8] super_cache_scan+0x1f8/0x210 [c000000f0160b190] [c00000000026301c] shrink_slab.part.13+0x21c/0x4c0 [c000000f0160b2d0] [c000000000268088] shrink_zone+0x2d8/0x3c0 [c000000f0160b380] [c00000000026834c] do_try_to_free_pages+0x1dc/0x520 [c000000f0160b450] [c00000000026876c] try_to_free_pages+0xdc/0x250 [c000000f0160b4e0] [c000000000251978] __alloc_pages_nodemask+0x868/0x10d0 [c000000f0160b6f0] [c000000000567030] blk_mq_init_rq_map+0x160/0x380 [c000000f0160b7a0] [c00000000056758c] blk_mq_map_swqueue+0x33c/0x360 [c000000f0160b820] [c000000000567904] blk_mq_queue_reinit+0x64/0xb0 [c000000f0160b850] [c00000000056a16c] blk_mq_queue_reinit_notify+0x19c/0x250 [c000000f0160b8a0] [c0000000000f5d38] notifier_call_chain+0x98/0x100 [c000000f0160b8f0] [c0000000000c5fb0] __cpu_notify+0x70/0xe0 [c000000f0160b930] [c0000000000c63c4] notify_prepare+0x44/0xb0 [c000000f0160b9b0] [c0000000000c52f4] cpuhp_invoke_callback+0x84/0x250 [c000000f0160ba10] [c0000000000c570c] cpuhp_up_callbacks+0x5c/0x120 [c000000f0160ba60] [c0000000000c7cb8] _cpu_up+0xf8/0x1d0 [c000000f0160bac0] [c0000000000c7eb0] do_cpu_up+0x120/0x150 [c000000f0160bb40] [c0000000006fe024] cpu_subsys_online+0x64/0xe0 [c000000f0160bb90] [c0000000006f5124] device_online+0xb4/0x120 [c000000f0160bbd0] [c0000000006f5244] online_store+0xb4/0xc0 [c000000f0160bc20] [c0000000006f0a68] dev_attr_store+0x68/0xa0 [c000000f0160bc60] [c0000000003ccc30] sysfs_kf_write+0x80/0xb0 [c000000f0160bca0] [c0000000003cbabc] kernfs_fop_write+0x17c/0x250 [c000000f0160bcf0] [c00000000030fe6c] __vfs_write+0x6c/0x1e0 [c000000f0160bd90] [c000000000311490] vfs_write+0xd0/0x270 [c000000f0160bde0] [c0000000003131fc] SyS_write+0x6c/0x110 [c000000f0160be30] [c000000000009204] system_call+0x38/0xec Signed-off-by: Gabriel Krisman Bertazi Cc: Brian King Cc: Douglas Miller Cc: linux-block@vger.kernel.org Cc: linux-scsi@vger.kernel.org Signed-off-by: Jens Axboe Signed-off-by: Sumit Semwal --- block/blk-mq.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) -- 2.7.4 diff --git a/block/blk-mq.c b/block/blk-mq.c index d8d63c3..0d1af3e 100644 --- a/block/blk-mq.c +++ b/block/blk-mq.c @@ -1470,7 +1470,7 @@ static struct blk_mq_tags *blk_mq_init_rq_map(struct blk_mq_tag_set *set, INIT_LIST_HEAD(&tags->page_list); tags->rqs = kzalloc_node(set->queue_depth * sizeof(struct request *), - GFP_KERNEL | __GFP_NOWARN | __GFP_NORETRY, + GFP_NOIO | __GFP_NOWARN | __GFP_NORETRY, set->numa_node); if (!tags->rqs) { blk_mq_free_tags(tags); @@ -1496,7 +1496,7 @@ static struct blk_mq_tags *blk_mq_init_rq_map(struct blk_mq_tag_set *set, do { page = alloc_pages_node(set->numa_node, - GFP_KERNEL | __GFP_NOWARN | __GFP_NORETRY | __GFP_ZERO, + GFP_NOIO | __GFP_NOWARN | __GFP_NORETRY | __GFP_ZERO, this_order); if (page) break; @@ -1517,7 +1517,7 @@ static struct blk_mq_tags *blk_mq_init_rq_map(struct blk_mq_tag_set *set, * Allow kmemleak to scan these pages as they contain pointers * to additional allocations like via ops->init_request(). */ - kmemleak_alloc(p, order_to_size(this_order), 1, GFP_KERNEL); + kmemleak_alloc(p, order_to_size(this_order), 1, GFP_NOIO); entries_per_page = order_to_size(this_order) / rq_size; to_do = min(entries_per_page, set->queue_depth - i); left -= to_do * rq_size; From patchwork Wed Apr 12 17:43:50 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sumit Semwal X-Patchwork-Id: 97338 Delivered-To: patch@linaro.org Received: by 10.140.109.52 with SMTP id k49csp374538qgf; Wed, 12 Apr 2017 10:45:04 -0700 (PDT) X-Received: by 10.99.9.66 with SMTP id 63mr70382424pgj.22.1492019104550; Wed, 12 Apr 2017 10:45:04 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id z21si18652409pgh.397.2017.04.12.10.45.04; Wed, 12 Apr 2017 10:45:04 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752369AbdDLRo5 (ORCPT + 6 others); Wed, 12 Apr 2017 13:44:57 -0400 Received: from mail-pf0-f180.google.com ([209.85.192.180]:34208 "EHLO mail-pf0-f180.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755307AbdDLRoz (ORCPT ); Wed, 12 Apr 2017 13:44:55 -0400 Received: by mail-pf0-f180.google.com with SMTP id c198so16984343pfc.1 for ; Wed, 12 Apr 2017 10:44:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=4FgTjXrKB+1qieC2Ko4wiZ96yYb+24Bg8mgSFe1+KO4=; b=X9H6mvxZJPQk6w+I6Q4FC0wKLIA9IclwupIFXGQ8gSSuQAYaAIyPJAZdvtEwZq2ldY 77HyWV97b8QD5jnl1ezFCRxDfPU0K2ImB7U43Xsv/VZaKY8146P9o5KU5iAGrwyPYmE7 1k+//b+eSRdmnq+kQK2QIGgayDbGOAZBUtnOI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=4FgTjXrKB+1qieC2Ko4wiZ96yYb+24Bg8mgSFe1+KO4=; b=NsN4+cbSduVkTTFjOyMASwVh5IMeMD0YTKAos+YEALp7HBSuXJLwRnHImmXsJF+4vs hGpruOxfdP9Itdn/rMH1j01tRJ7C0Xlh72JtrPOSDTBA8gYSMMA6qyLC2WW6FdUkhiTo 6yDodpdWk8V/mRZLBBw2qBp1p0i8tI8ncb0STggmsc5xWqnqQDpFX4ScnRLs0Ol00S1h LvFY1HkHTuq8WM8HVMqsBzLvsRZF6ljCy5A5PkdDSCw/RPBcD7zohNAeHnmy1xjCX2xc U76wDJWA6C0//sS8yIU9vCrBgS7C0bZ++XgGncVuhNPyrDD43SdNzjKR4I8mf7RVsKX4 vMXA== X-Gm-Message-State: AFeK/H0zxsu2wdzQXJB0jshVmPHf2nyXuLl3shN5cq2xKqJxtGrBpg+pDdtjSD1M0Dco3VM6 X-Received: by 10.99.119.69 with SMTP id s66mr68769968pgc.196.1492019089312; Wed, 12 Apr 2017 10:44:49 -0700 (PDT) Received: from phantom.lan ([106.51.225.38]) by smtp.gmail.com with ESMTPSA id r17sm37750019pfa.13.2017.04.12.10.44.46 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 12 Apr 2017 10:44:48 -0700 (PDT) From: Sumit Semwal To: stable@vger.kernel.org Cc: Guenter Roeck , Douglas Anderson , Greg Kroah-Hartman , Sumit Semwal Subject: [v2 PATCH for-4.4 16/16] usb: hub: Wait for connection to be reestablished after port reset Date: Wed, 12 Apr 2017 23:13:50 +0530 Message-Id: <1492019030-13567-17-git-send-email-sumit.semwal@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1492019030-13567-1-git-send-email-sumit.semwal@linaro.org> References: <1492019030-13567-1-git-send-email-sumit.semwal@linaro.org> Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Guenter Roeck [ Upstream commit 22547c4cc4fe20698a6a85a55b8788859134b8e4 ] On a system with a defective USB device connected to an USB hub, an endless sequence of port connect events was observed. The sequence of events as observed is as follows: - Port reports connected event (port status=USB_PORT_STAT_CONNECTION). - Event handler debounces port and resets it by calling hub_port_reset(). - hub_port_reset() calls hub_port_wait_reset() to wait for the reset to complete. - The reset completes, but USB_PORT_STAT_CONNECTION is not immediately set in the port status register. - hub_port_wait_reset() returns -ENOTCONN. - Port initialization sequence is aborted. - A few milliseconds later, the port again reports a connected event, and the sequence repeats. This continues either forever or, randomly, stops if the connection is already re-established when the port status is read. It results in a high rate of udev events. This in turn destabilizes userspace since the above sequence holds the device mutex pretty much continuously and prevents userspace from actually reading the device status. To prevent the problem from happening, let's wait for the connection to be re-established after a port reset. If the device was actually disconnected, the code will still return an error, but it will do so only after the long reset timeout. Cc: Douglas Anderson Signed-off-by: Guenter Roeck Acked-by: Alan Stern Signed-off-by: Greg Kroah-Hartman Signed-off-by: Sumit Semwal --- drivers/usb/core/hub.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) -- 2.7.4 diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index 9e62c93..7c2d87b 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c @@ -2602,8 +2602,15 @@ static int hub_port_wait_reset(struct usb_hub *hub, int port1, if (ret < 0) return ret; - /* The port state is unknown until the reset completes. */ - if (!(portstatus & USB_PORT_STAT_RESET)) + /* + * The port state is unknown until the reset completes. + * + * On top of that, some chips may require additional time + * to re-establish a connection after the reset is complete, + * so also wait for the connection to be re-established. + */ + if (!(portstatus & USB_PORT_STAT_RESET) && + (portstatus & USB_PORT_STAT_CONNECTION)) break; /* switch to the long delay after two short delay failures */