Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp2249495imm; Mon, 28 May 2018 04:46:00 -0700 (PDT) X-Google-Smtp-Source: AB8JxZoe4nO2C2cI2Nm2z9T82RmNbodUJ2yZfuxLk2oIlfTL348vxfn7sQ4cp26MItINlv+G5UAX X-Received: by 2002:a17:902:780a:: with SMTP id p10-v6mr13387941pll.281.1527507960869; Mon, 28 May 2018 04:46:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527507960; cv=none; d=google.com; s=arc-20160816; b=wH0qzRdTSZSjVkdgxd6NN82V+5XWzllVtdy81kzOwxApIw0vjcw4p9ZCSyFtrwqp87 naLvyze7XVwPJmPnzS/GYrJqpFoK0B7xgJUo+Idlvv/hcP34/jvXr9FfwMWRc6nOvSpL 2OdZ7Nm+t5TaCvRSGHqv8bVcbLQt1+6ZcbFEw+4fN+ZFPJDeGls4v3X5shFwjEwQmefg 41Vr3mcuqNZz80RW0zdFdDGzaVamjqdyLObTvuERey7w9WaywVB0OcryTaEUkVAafzFY XWEJABtlJf4M2G3YiJGtiftWrJ6O0PTb48QMN5NC54GTX6tp0wGVT1nP33os7gmcjlJj GlkQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :in-reply-to:message-id:date:subject:cc:to:from:dkim-signature :arc-authentication-results; bh=NiRIW9Un6i8qz8mWYFXskelHRMsiTwkKVQNkalXCbY4=; b=of9v+sA911t3oR6AoA36hgwb3U5BmQs6RfbW+paGv4b5npv/a2UIuKqqK2Zcmj0rk9 yOnZ3bWZdgVjhiGfbhzwRj1RlAi4MkJEldSf0zk11IBaoty0X3vpQEQM+lI28aOWDrAr Eah95L13CZVP9yqARwYw1gz7HBBs84+yVzZOv1M+KUsnJSQSgJESuqQATLG2tVYkVPZa Pvy6J7k3mBP8AWDG9U8iq+KrRF2Kg93N54Mggt8d1swY+YO6ar8LO4G4FbbTSHnC/dkp pPNOpeYZoqRCyeHDWh0S6Prh01ogLqPxFN9gXVx//+riWz6PWpVxP8Ntd3nl5RQJK5db jcqw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=UgEjDRdn; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id c6-v6si29843208plo.88.2018.05.28.04.45.46; Mon, 28 May 2018 04:46:00 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-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=@kernel.org header.s=default header.b=UgEjDRdn; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1424001AbeE1LLG (ORCPT + 99 others); Mon, 28 May 2018 07:11:06 -0400 Received: from mail.kernel.org ([198.145.29.99]:59036 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1423968AbeE1LLB (ORCPT ); Mon, 28 May 2018 07:11:01 -0400 Received: from localhost (LFbn-1-12247-202.w90-92.abo.wanadoo.fr [90.92.61.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id F27692089E; Mon, 28 May 2018 11:10:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1527505860; bh=mnKM906Keu0k2hkdNrKo1vSQtQc0t0+UlFuapa0uK24=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=UgEjDRdnZ6tKOjlU9qvyKxuAVFtMSXyml8Zcz8Gxe+xtK97qBRbb6z7jbJTK+M4/x G02rULJJJDFWM7aEmuB2BA5VaCSgB2uaRqW0+iD9yWVRzLueOWf2SvczpfyvYexmPa I0BAViuImjxdF+O9SPnDqqwF62qW//xTJ58CIGCY= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Jacob Keller , Andrew Bowers , Jeff Kirsher , Sasha Levin Subject: [PATCH 4.16 119/272] i40e: hold the RTNL lock while changing interrupt schemes Date: Mon, 28 May 2018 12:02:32 +0200 Message-Id: <20180528100251.155863020@linuxfoundation.org> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180528100240.256525891@linuxfoundation.org> References: <20180528100240.256525891@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.16-stable review patch. If anyone has any objections, please let me know. ------------------ From: Jacob Keller [ Upstream commit f0ee70a042e267a517e943220e18ae62d3c1995a ] When we suspend and resume, we need to clear and re-enable the interrupt scheme. This was previously not done while holding the RTNL lock, which could be problematic, because we are actually destroying and re-creating queues. Hold the RTNL lock for the entire sequence of preparing for reset, and when resuming. This additionally protects the flags related to interrupt scheme under RTNL lock so that their modification is properly threaded. This is part of a larger effort to remove the need for cmpxchg64 in i40e_set_priv_flags(). Signed-off-by: Jacob Keller Tested-by: Andrew Bowers Signed-off-by: Jeff Kirsher Signed-off-by: Sasha Levin Signed-off-by: Greg Kroah-Hartman --- drivers/net/ethernet/intel/i40e/i40e_main.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) --- a/drivers/net/ethernet/intel/i40e/i40e_main.c +++ b/drivers/net/ethernet/intel/i40e/i40e_main.c @@ -14216,7 +14216,13 @@ static int __maybe_unused i40e_suspend(s if (pf->wol_en && (pf->hw_features & I40E_HW_WOL_MC_MAGIC_PKT_WAKE)) i40e_enable_mc_magic_wake(pf); - i40e_prep_for_reset(pf, false); + /* Since we're going to destroy queues during the + * i40e_clear_interrupt_scheme() we should hold the RTNL lock for this + * whole section + */ + rtnl_lock(); + + i40e_prep_for_reset(pf, true); wr32(hw, I40E_PFPM_APM, (pf->wol_en ? I40E_PFPM_APM_APME_MASK : 0)); wr32(hw, I40E_PFPM_WUFC, (pf->wol_en ? I40E_PFPM_WUFC_MAG_MASK : 0)); @@ -14228,6 +14234,8 @@ static int __maybe_unused i40e_suspend(s */ i40e_clear_interrupt_scheme(pf); + rtnl_unlock(); + return 0; } @@ -14245,6 +14253,11 @@ static int __maybe_unused i40e_resume(st if (!test_bit(__I40E_SUSPENDED, pf->state)) return 0; + /* We need to hold the RTNL lock prior to restoring interrupt schemes, + * since we're going to be restoring queues + */ + rtnl_lock(); + /* We cleared the interrupt scheme when we suspended, so we need to * restore it now to resume device functionality. */ @@ -14255,7 +14268,9 @@ static int __maybe_unused i40e_resume(st } clear_bit(__I40E_DOWN, pf->state); - i40e_reset_and_rebuild(pf, false, false); + i40e_reset_and_rebuild(pf, false, true); + + rtnl_unlock(); /* Clear suspended state last after everything is recovered */ clear_bit(__I40E_SUSPENDED, pf->state);