From: Mika Westerberg <mika.westerberg@linux.intel.com>
To: Lukas Wunner <lukas@wunner.de>
Cc: linux-kernel@vger.kernel.org,
Michael Jamet <michael.jamet@intel.com>,
Yehezkel Bernat <YehezkelShB@gmail.com>,
Andreas Noever <andreas.noever@gmail.com>,
"David S . Miller" <davem@davemloft.net>,
Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
netdev@vger.kernel.org
Subject: Re: [PATCH v2 17/28] thunderbolt: Add support for full PCIe daisy chains
Date: Mon, 25 Mar 2019 11:57:33 +0200 [thread overview]
Message-ID: <20190325095733.GC3622@lahna.fi.intel.com> (raw)
In-Reply-To: <20190324113144.wubme46hby7rj6r2@wunner.de>
On Sun, Mar 24, 2019 at 12:31:44PM +0100, Lukas Wunner wrote:
> On Wed, Feb 06, 2019 at 04:17:27PM +0300, Mika Westerberg wrote:
> > @@ -63,6 +71,16 @@ static void tb_discover_tunnels(struct tb_switch *sw)
> > }
> > }
> >
> > +static void tb_switch_authorize(struct work_struct *work)
> > +{
> > + struct tb_switch *sw = container_of(work, typeof(*sw), work);
> > +
> > + mutex_lock(&sw->tb->lock);
> > + if (!sw->is_unplugged)
> > + tb_domain_approve_switch(sw->tb, sw);
> > + mutex_unlock(&sw->tb->lock);
> > +}
> > +
>
> You're establishing PCI tunnels by having tb_scan_port() schedule
> tb_switch_authorize() via a work item, which in turn calls
> tb_domain_approve_switch(), which in turn calls tb_approve_switch(),
> which in turn calls tb_tunnel_pci().
>
> This seems kind of like a roundabout way of doing things, in particular
> since all switches are hardcoded to be automatically authorized.
>
> Why don't you just invoke tb_tunnel_pci() directly from tb_scan_port()?
Indeed, it does not make much sense to schedule separate work item just
for this.
I'm will remove it in v3. However, instead of always creating PCIe
tunnels I'm going to propose that we implement the "user" security level
in the software connection manager by default. While DMA protection
relies on IOMMU, doing this allows user to turn off PCIe tunneling
completely (or implement their own whitelisting of known good devices
for example).
> And why is the work item needed? I'm also confused that the work item
> has been present in struct tb_switch for 2 years but is put to use only
> now.
Yes, you are right - the work item here is not needed. It is actually
remnant from the original patch series. I'll cook a patch removing it.
> > -static void tb_activate_pcie_devices(struct tb *tb)
> > +static int tb_tunnel_pci(struct tb *tb, struct tb_switch *sw)
> > {
> [...]
> > + /*
> > + * Look up available down port. Since we are chaining, it is
> > + * typically found right above this switch.
> > + */
> > + down = NULL;
> > + parent_sw = tb_to_switch(sw->dev.parent);
> > + while (parent_sw) {
> > + down = tb_find_unused_down_port(parent_sw);
> > + if (down)
> > + break;
> > + parent_sw = tb_to_switch(parent_sw->dev.parent);
> > + }
>
> The problem I see here is that there's no guarantee that the switch
> on which you're selecting a down port is actually itself connected
> with a PCI tunnel. E.g., allocation of a tunnel to that parent
> switch may have failed. In that case you end up establishing a
> tunnel between that parent switch and the newly connected switch
> but the tunnel is of no use.
Since this is going through tb_domain_approve_switch() it does not allow
PCIe tunnel creation if the parent is not authorized first.
> It would seem more logical to me to walk down the chain of newly
> connected switches and try to establish a PCI tunnel to each of
> them in order. By deferring tunnel establishment to a work item,
> I think the tunnels may be established in an arbitrary order, right?
The workqueue is ordered so AFAIK they should be run in the order the
hotplug happened. In any case I'm going to remove the work item so this
should not be an issue.
next prev parent reply other threads:[~2019-03-25 9:57 UTC|newest]
Thread overview: 57+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-02-06 13:17 [PATCH v2 00/28] thunderbolt: Software connection manager improvements Mika Westerberg
2019-02-06 13:17 ` [PATCH v2 01/28] net: thunderbolt: Unregister ThunderboltIP protocol handler when suspending Mika Westerberg
2019-02-06 13:17 ` [PATCH v2 02/28] thunderbolt: Do not allocate switch if depth is greater than 6 Mika Westerberg
2019-02-06 13:17 ` [PATCH v2 03/28] thunderbolt: Enable TMU access when accessing port space on legacy devices Mika Westerberg
2019-02-06 13:17 ` [PATCH v2 04/28] thunderbolt: Add dummy read after port capability list walk on Light Ridge Mika Westerberg
2019-02-06 13:17 ` [PATCH v2 05/28] thunderbolt: Move LC specific functionality into a separate file Mika Westerberg
2019-02-06 13:17 ` [PATCH v2 06/28] thunderbolt: Configure lanes when switch is initialized Mika Westerberg
2019-02-06 13:17 ` [PATCH v2 07/28] thunderbolt: Set sleep bit when suspending switch Mika Westerberg
2019-02-06 13:17 ` [PATCH v2 08/28] thunderbolt: Properly disable path Mika Westerberg
2019-02-06 13:17 ` [PATCH v2 09/28] thunderbolt: Cache adapter specific capability offset into struct port Mika Westerberg
2019-02-06 13:17 ` [PATCH v2 10/28] thunderbolt: Rename tunnel_pci to tunnel Mika Westerberg
2019-02-06 13:17 ` [PATCH v2 11/28] thunderbolt: Generalize tunnel creation functionality Mika Westerberg
2019-02-06 13:17 ` [PATCH v2 12/28] thunderbolt: Add functions for allocating and releasing hop IDs Mika Westerberg
2019-02-10 12:13 ` Lukas Wunner
2019-02-11 8:30 ` Mika Westerberg
2019-02-12 12:43 ` Lukas Wunner
2019-02-12 12:51 ` Mika Westerberg
2019-02-12 12:59 ` Lukas Wunner
2019-02-12 13:02 ` Mika Westerberg
2019-02-06 13:17 ` [PATCH v2 13/28] thunderbolt: Add helper function to iterate from one port to another Mika Westerberg
2019-02-07 14:33 ` Andy Shevchenko
2019-02-11 6:16 ` Lukas Wunner
2019-02-11 9:54 ` Mika Westerberg
2019-02-12 13:55 ` Lukas Wunner
2019-02-12 19:03 ` Mika Westerberg
2019-02-06 13:17 ` [PATCH v2 14/28] thunderbolt: Extend tunnel creation to more than 2 adjacent switches Mika Westerberg
2019-02-10 15:33 ` Lukas Wunner
2019-02-11 8:45 ` Mika Westerberg
2019-02-12 12:54 ` Lukas Wunner
2019-02-06 13:17 ` [PATCH v2 15/28] thunderbolt: Deactivate all paths before restarting them Mika Westerberg
2019-02-11 6:35 ` Lukas Wunner
2019-02-11 8:52 ` Mika Westerberg
2019-02-06 13:17 ` [PATCH v2 16/28] thunderbolt: Discover preboot PCIe paths the boot firmware established Mika Westerberg
2019-02-12 17:49 ` Lukas Wunner
2019-02-12 18:34 ` Mika Westerberg
2019-02-12 19:42 ` Lukas Wunner
2019-02-13 8:30 ` Mika Westerberg
2019-02-06 13:17 ` [PATCH v2 17/28] thunderbolt: Add support for full PCIe daisy chains Mika Westerberg
2019-03-24 11:31 ` Lukas Wunner
2019-03-25 9:57 ` Mika Westerberg [this message]
2019-03-25 11:16 ` Lukas Wunner
2019-03-25 11:22 ` Mika Westerberg
2019-02-06 13:17 ` [PATCH v2 18/28] thunderbolt: Scan only valid NULL adapter ports in hotplug Mika Westerberg
2019-02-12 14:04 ` Lukas Wunner
2019-02-12 18:46 ` Mika Westerberg
2019-02-06 13:17 ` [PATCH v2 19/28] thunderbolt: Generalize port finding routines to support all port types Mika Westerberg
2019-02-06 13:17 ` [PATCH v2 20/28] thunderbolt: Rework NFC credits handling Mika Westerberg
2019-02-06 13:17 ` [PATCH v2 21/28] thunderbolt: Add support for Display Port tunnels Mika Westerberg
2019-02-07 14:28 ` Andy Shevchenko
2019-02-06 13:17 ` [PATCH v2 22/28] thunderbolt: Run tb_xdp_handle_request() in system workqueue Mika Westerberg
2019-02-06 13:17 ` [PATCH v2 23/28] thunderbolt: Add XDomain UUID exchange support Mika Westerberg
2019-02-06 13:17 ` [PATCH v2 24/28] thunderbolt: Add support for DMA tunnels Mika Westerberg
2019-02-06 13:17 ` [PATCH v2 25/28] thunderbolt: Make tb_switch_alloc() return ERR_PTR() Mika Westerberg
2019-02-06 13:17 ` [PATCH v2 26/28] thunderbolt: Add support for XDomain connections Mika Westerberg
2019-02-06 13:17 ` [PATCH v2 27/28] thunderbolt: Make rest of the logging to happen at debug level Mika Westerberg
2019-02-06 13:17 ` [PATCH v2 28/28] thunderbolt: Start firmware on Titan Ridge Apple systems Mika Westerberg
2019-02-07 14:22 ` [PATCH v2 00/28] thunderbolt: Software connection manager improvements Andy Shevchenko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190325095733.GC3622@lahna.fi.intel.com \
--to=mika.westerberg@linux.intel.com \
--cc=YehezkelShB@gmail.com \
--cc=andreas.noever@gmail.com \
--cc=andriy.shevchenko@linux.intel.com \
--cc=davem@davemloft.net \
--cc=linux-kernel@vger.kernel.org \
--cc=lukas@wunner.de \
--cc=michael.jamet@intel.com \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox