Received: by 2002:a25:5b86:0:0:0:0:0 with SMTP id p128csp437203ybb; Thu, 28 Mar 2019 05:41:04 -0700 (PDT) X-Google-Smtp-Source: APXvYqyoLeVOIZxHjlyavc1H1hzqm13SMaofQzl0XRUnCMU4KT6Glx+avMkoUy7EanOlr8eOYkcJ X-Received: by 2002:a17:902:2b87:: with SMTP id l7mr1355401plb.38.1553776864238; Thu, 28 Mar 2019 05:41:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1553776864; cv=none; d=google.com; s=arc-20160816; b=in8MyUQB4y7tJKYvaB1+T9rkRoWgQ6X8XBCZP/VkWtzQX2qtCD85o3bSrdlWQB54QT iqY7ewh//VmHj+nG2RyZ9EJW9jYbefWExjmafxIWSb5RVZtg07dp7WZLGUT1PMLEJnH0 iX0P6ql2EjmUmxtv5zlTWBLV1tnJ0TZ5orHAw46bY5JVSkaKogAUhAhFeoJHKLqwIHri kD9VXw3sB0uulIDX5gjJcVTX934iXemlY7bqo/uVAbBdGH7ALq46oFP0PwIX9LGkiWXv FPAxjJlebGikrMDy8cHdFaCSP+Ycqyl/onhwX0W7hsm4mekEaJ1EZa72xniiTvXdak5n nG8Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=tbyTO9CyNl5K/JknNyQIoO5Fxii6yZRySzxpIsgqrnE=; b=M9BRq5IrO050cjseG0cBQZqCKQya2JXS1n9XRBwe1B4icghwf3BaskLe8m5zx/icJJ aCCJATTRq5zkssZ+oTTZaNvN3T9a7Us60eH5SPDmim3ZuQbQjQOqCWRsPHREKnADWSUu kAl0PB2N1rO7ayrDk8H+nnD+BQZv3xFgtAryDQB14orq0Hoyp9DovFzthjMw5kXk9ALW fi+a5uJOHbuZ7+3CnhuqQRnJn0AL/vDOAe4kueqCG2qVBQ0QfPebxxoI/Y2NOu7O9lkY lZAMzd7nsbDaqBqYYnt0MmYx1pdtJH9x1GSQYuNbREt2T+K0XU5s5FNafWcL/UjzGFh7 4ZMg== ARC-Authentication-Results: i=1; mx.google.com; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id p16si5271700pff.85.2019.03.28.05.40.48; Thu, 28 Mar 2019 05:41:04 -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; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727772AbfC1Mia (ORCPT + 99 others); Thu, 28 Mar 2019 08:38:30 -0400 Received: from mga09.intel.com ([134.134.136.24]:34153 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727237AbfC1Mgq (ORCPT ); Thu, 28 Mar 2019 08:36:46 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga102.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 28 Mar 2019 05:36:45 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.60,280,1549958400"; d="scan'208";a="138009668" Received: from black.fi.intel.com ([10.237.72.28]) by orsmga003.jf.intel.com with ESMTP; 28 Mar 2019 05:36:42 -0700 Received: by black.fi.intel.com (Postfix, from userid 1001) id 2045A1613; Thu, 28 Mar 2019 14:36:35 +0200 (EET) From: Mika Westerberg To: linux-kernel@vger.kernel.org Cc: Michael Jamet , Yehezkel Bernat , Andreas Noever , Lukas Wunner , "David S . Miller" , Andy Shevchenko , Christian Kellner , Mario.Limonciello@dell.com, Mika Westerberg , netdev@vger.kernel.org Subject: [PATCH v3 27/36] thunderbolt: Do not tear down tunnels when driver is unloaded Date: Thu, 28 Mar 2019 15:36:24 +0300 Message-Id: <20190328123633.42882-28-mika.westerberg@linux.intel.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190328123633.42882-1-mika.westerberg@linux.intel.com> References: <20190328123633.42882-1-mika.westerberg@linux.intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Now that we have capability to discover existing tunnels during driver load there is no point tearing down tunnels when the driver gets unloaded. Instead we can just leave them running. If user disconnects devices while there is no Thunderbolt driver loaded, tunneled protocol hotplug happens and is handled by the corresponding driver (pciehp in case of PCIe tunnel, GFX driver in case of DP tunnel). Signed-off-by: Mika Westerberg --- drivers/thunderbolt/path.c | 10 ++++------ drivers/thunderbolt/tb.c | 4 +--- drivers/thunderbolt/tunnel.c | 10 +--------- 3 files changed, 6 insertions(+), 18 deletions(-) diff --git a/drivers/thunderbolt/path.c b/drivers/thunderbolt/path.c index daef74548197..9df79548a941 100644 --- a/drivers/thunderbolt/path.c +++ b/drivers/thunderbolt/path.c @@ -304,17 +304,15 @@ struct tb_path *tb_path_alloc(struct tb *tb, struct tb_port *src, int src_hopid, } /** - * tb_path_free() - free a deactivated path + * tb_path_free() - free a path + * @path: Path to free + * + * Frees a path. The path does not need to be deactivated. */ void tb_path_free(struct tb_path *path) { int i; - if (path->activated) { - tb_WARN(path->tb, "trying to free an activated path\n") - return; - } - for (i = 0; i < path->path_length; i++) { const struct tb_path_hop *hop = &path->hops[i]; diff --git a/drivers/thunderbolt/tb.c b/drivers/thunderbolt/tb.c index c5e96e7ac37a..8a97a4e19638 100644 --- a/drivers/thunderbolt/tb.c +++ b/drivers/thunderbolt/tb.c @@ -500,10 +500,8 @@ static void tb_stop(struct tb *tb) struct tb_tunnel *n; /* tunnels are only present after everything has been initialized */ - list_for_each_entry_safe(tunnel, n, &tcm->tunnel_list, list) { - tb_tunnel_deactivate(tunnel); + list_for_each_entry_safe(tunnel, n, &tcm->tunnel_list, list) tb_tunnel_free(tunnel); - } tb_switch_remove(tb->root_switch); tcm->hotplug_active = false; /* signal tb_handle_hotplug to quit */ } diff --git a/drivers/thunderbolt/tunnel.c b/drivers/thunderbolt/tunnel.c index 21d3393c6e9c..0bc6639c6e74 100644 --- a/drivers/thunderbolt/tunnel.c +++ b/drivers/thunderbolt/tunnel.c @@ -475,7 +475,7 @@ struct tb_tunnel *tb_tunnel_alloc_dp(struct tb *tb, struct tb_port *in, * tb_tunnel_free() - free a tunnel * @tunnel: Tunnel to be freed * - * The tunnel must have been deactivated. + * Frees a tunnel. The tunnel does not need to be deactivated. */ void tb_tunnel_free(struct tb_tunnel *tunnel) { @@ -484,14 +484,6 @@ void tb_tunnel_free(struct tb_tunnel *tunnel) if (!tunnel) return; - for (i = 0; i < tunnel->npaths; i++) { - if (tunnel->paths[i] && tunnel->paths[i]->activated) { - tb_tunnel_WARN(tunnel, - "trying to free an activated tunnel\n"); - return; - } - } - for (i = 0; i < tunnel->npaths; i++) { if (tunnel->paths[i]) tb_path_free(tunnel->paths[i]); -- 2.20.1