From: Greg KH <gregkh@linuxfoundation.org>
To: Amir Levy <amir.jer.levy@intel.com>
Cc: andreas.noever@gmail.com, bhelgaas@google.com, corbet@lwn.net,
linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org,
netdev@vger.kernel.org, linux-doc@vger.kernel.org,
mario_limonciello@dell.com, thunderbolt-linux@intel.com,
mika.westerberg@intel.com, tomas.winkler@intel.com,
xiong.y.zhang@intel.com
Subject: Re: [PATCH v7 5/8] thunderbolt: Networking state machine
Date: Tue, 27 Sep 2016 16:15:05 +0200 [thread overview]
Message-ID: <20160927141505.GD21133@kroah.com> (raw)
In-Reply-To: <1474983821-2313-6-git-send-email-amir.jer.levy@intel.com>
On Tue, Sep 27, 2016 at 04:43:38PM +0300, Amir Levy wrote:
> This patch builds the peer to peer communication path.
> Communication is established by a negotiation process whereby messages are
> sent back and forth between the peers until a connection is established.
> This includes the Thunderbolt Network driver communication with the second
> peer via Intel Connection Manager(ICM) firmware.
> +--------------------+ +--------------------+
> |Host 1 | |Host 2 |
> | | | |
> | +-----------+ | | +-----------+ |
> | |Thunderbolt| | | |Thunderbolt| |
> | |Networking | | | |Networking | |
> | |Driver | | | |Driver | |
> | +-----------+ | | +-----------+ |
> | ^ | | ^ |
> | | | | | |
> | +------------+---+ | | +------------+---+ |
> | |Thunderbolt | | | | |Thunderbolt | | |
> | |Controller v | | | |Controller v | |
> | | +---+ | | | | +---+ | |
> | | |ICM|<-+-+------------+-+-------->|ICM| | |
> | | +---+ | | | | +---+ | |
> | +----------------+ | | +----------------+ |
> +--------------------+ +--------------------+
> Note that this patch only establishes the link between the two hosts and
> not Network Packet handling - this is dealt with in the next patch.
>
> Signed-off-by: Amir Levy <amir.jer.levy@intel.com>
> ---
> drivers/thunderbolt/icm/Makefile | 2 +-
> drivers/thunderbolt/icm/icm_nhi.c | 303 ++++++++++++++-
> drivers/thunderbolt/icm/net.c | 793 ++++++++++++++++++++++++++++++++++++++
> drivers/thunderbolt/icm/net.h | 70 ++++
> 4 files changed, 1157 insertions(+), 11 deletions(-)
> create mode 100644 drivers/thunderbolt/icm/net.c
>
> diff --git a/drivers/thunderbolt/icm/Makefile b/drivers/thunderbolt/icm/Makefile
> index f0d0fbb..94a2797 100644
> --- a/drivers/thunderbolt/icm/Makefile
> +++ b/drivers/thunderbolt/icm/Makefile
> @@ -1,2 +1,2 @@
> obj-${CONFIG_THUNDERBOLT_ICM} += thunderbolt-icm.o
> -thunderbolt-icm-objs := icm_nhi.o
> +thunderbolt-icm-objs := icm_nhi.o net.o
> diff --git a/drivers/thunderbolt/icm/icm_nhi.c b/drivers/thunderbolt/icm/icm_nhi.c
> index 984aa7c..578eb14 100644
> --- a/drivers/thunderbolt/icm/icm_nhi.c
> +++ b/drivers/thunderbolt/icm/icm_nhi.c
> @@ -74,6 +74,12 @@ static const struct nla_policy nhi_genl_policy[NHI_ATTR_MAX + 1] = {
> .len = TBT_ICM_RING_MAX_FRAME_SIZE },
> [NHI_ATTR_MSG_FROM_ICM] = { .type = NLA_BINARY,
> .len = TBT_ICM_RING_MAX_FRAME_SIZE },
> + [NHI_ATTR_LOCAL_ROUTE_STRING] = {.len = sizeof(struct route_string)},
> + [NHI_ATTR_LOCAL_UUID] = { .len = sizeof(uuid_be) },
> + [NHI_ATTR_REMOTE_UUID] = { .len = sizeof(uuid_be) },
> + [NHI_ATTR_LOCAL_DEPTH] = { .type = NLA_U8, },
> + [NHI_ATTR_ENABLE_FULL_E2E] = { .type = NLA_FLAG, },
> + [NHI_ATTR_MATCH_FRAME_ID] = { .type = NLA_FLAG, },
> };
>
> /* NHI genetlink family */
> @@ -522,6 +528,29 @@ int nhi_mailbox(struct tbt_nhi_ctxt *nhi_ctxt, u32 cmd, u32 data, bool deinit)
> return 0;
> }
>
> +static inline bool nhi_is_path_disconnected(u32 cmd, u8 num_ports)
> +{
> + return (cmd >= DISCONNECT_PORT_A_INTER_DOMAIN_PATH &&
> + cmd < (DISCONNECT_PORT_A_INTER_DOMAIN_PATH + num_ports));
> +}
> +
> +static int nhi_mailbox_disconn_path(struct tbt_nhi_ctxt *nhi_ctxt, u32 cmd)
> + __releases(&controllers_list_mutex)
> +{
> + struct port_net_dev *port;
> + u32 port_num = cmd - DISCONNECT_PORT_A_INTER_DOMAIN_PATH;
> +
> + port = &(nhi_ctxt->net_devices[port_num]);
> + mutex_lock(&port->state_mutex);
> +
> + mutex_unlock(&controllers_list_mutex);
> + port->medium_sts = MEDIUM_READY_FOR_APPROVAL;
> + if (port->net_dev)
> + negotiation_events(port->net_dev, MEDIUM_DISCONNECTED);
> + mutex_unlock(&port->state_mutex);
> + return 0;
> +}
> +
> static int nhi_mailbox_generic(struct tbt_nhi_ctxt *nhi_ctxt, u32 mb_cmd)
> __releases(&controllers_list_mutex)
> {
> @@ -571,13 +600,94 @@ static int nhi_genl_mailbox(__always_unused struct sk_buff *u_skb,
> return -ERESTART;
>
> nhi_ctxt = nhi_search_ctxt(*(u32 *)info->userhdr);
> - if (nhi_ctxt && !nhi_ctxt->d0_exit)
> - return nhi_mailbox_generic(nhi_ctxt, mb_cmd);
> + if (nhi_ctxt && !nhi_ctxt->d0_exit) {
> +
> + /* rwsem is released later by the below functions */
> + if (nhi_is_path_disconnected(cmd, nhi_ctxt->num_ports))
> + return nhi_mailbox_disconn_path(nhi_ctxt, cmd);
> + else
> + return nhi_mailbox_generic(nhi_ctxt, mb_cmd);
> +
> + }
>
> mutex_unlock(&controllers_list_mutex);
> return -ENODEV;
> }
>
> +static int nhi_genl_approve_networking(__always_unused struct sk_buff *u_skb,
> + struct genl_info *info)
> +{
> + struct tbt_nhi_ctxt *nhi_ctxt;
> + struct route_string *route_str;
> + int res = -ENODEV;
> + u8 port_num;
> +
> + if (!info || !info->userhdr || !info->attrs ||
> + !info->attrs[NHI_ATTR_LOCAL_ROUTE_STRING] ||
> + !info->attrs[NHI_ATTR_LOCAL_UUID] ||
> + !info->attrs[NHI_ATTR_REMOTE_UUID] ||
> + !info->attrs[NHI_ATTR_LOCAL_DEPTH])
> + return -EINVAL;
> +
> + /*
> + * route_str is an unique topological address
> + * used for approving remote controller
> + */
> + route_str = nla_data(info->attrs[NHI_ATTR_LOCAL_ROUTE_STRING]);
> + /* extracts the port we're connected to */
> + port_num = PORT_NUM_FROM_LINK(L0_PORT_NUM(route_str->lo));
> +
> + if (mutex_lock_interruptible(&controllers_list_mutex))
> + return -ERESTART;
> +
> + nhi_ctxt = nhi_search_ctxt(*(u32 *)info->userhdr);
> + if (nhi_ctxt && !nhi_ctxt->d0_exit) {
> + struct port_net_dev *port;
> +
> + if (port_num >= nhi_ctxt->num_ports) {
> + res = -EINVAL;
> + goto free_ctl_list;
> + }
> +
> + port = &(nhi_ctxt->net_devices[port_num]);
> +
> + mutex_lock(&port->state_mutex);
> + mutex_unlock(&controllers_list_mutex);
> +
> + if (port->medium_sts != MEDIUM_READY_FOR_APPROVAL) {
> + dev_info(&nhi_ctxt->pdev->dev,
> + "%s: controller id %#x in state %u <> MEDIUM_READY_FOR_APPROVAL\n",
> + __func__, nhi_ctxt->id, port->medium_sts);
Why is this needed? Don't spam the kernel log for a normal device
operation please, only report serious errors when something goes wrong.
And if this is an error, why is it dev_info()?
next prev parent reply other threads:[~2016-09-27 14:15 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-09-27 13:43 [PATCH v7 0/8] thunderbolt: Introducing Thunderbolt(TM) Networking Amir Levy
2016-09-27 13:43 ` [PATCH v7 1/8] thunderbolt: Macro rename Amir Levy
2016-09-27 13:43 ` [PATCH v7 2/8] thunderbolt: Updating the register definitions Amir Levy
2016-09-27 13:43 ` [PATCH v7 3/8] thunderbolt: Kconfig for Thunderbolt Networking Amir Levy
2016-09-27 14:00 ` Greg KH
2016-09-27 13:43 ` [PATCH v7 4/8] thunderbolt: Communication with the ICM (firmware) Amir Levy
2016-09-27 14:11 ` Greg KH
2016-09-27 13:43 ` [PATCH v7 5/8] thunderbolt: Networking state machine Amir Levy
2016-09-27 14:13 ` Greg KH
2016-09-27 14:15 ` Greg KH [this message]
2016-09-27 13:43 ` [PATCH v7 6/8] thunderbolt: Networking transmit and receive Amir Levy
2016-09-27 13:43 ` [PATCH v7 7/8] thunderbolt: Networking doc Amir Levy
2016-09-27 13:43 ` [PATCH v7 8/8] thunderbolt: Adding maintainer entry Amir Levy
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=20160927141505.GD21133@kroah.com \
--to=gregkh@linuxfoundation.org \
--cc=amir.jer.levy@intel.com \
--cc=andreas.noever@gmail.com \
--cc=bhelgaas@google.com \
--cc=corbet@lwn.net \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=mario_limonciello@dell.com \
--cc=mika.westerberg@intel.com \
--cc=netdev@vger.kernel.org \
--cc=thunderbolt-linux@intel.com \
--cc=tomas.winkler@intel.com \
--cc=xiong.y.zhang@intel.com \
/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;
as well as URLs for NNTP newsgroup(s).