All of lore.kernel.org
 help / color / mirror / Atom feed
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()?


  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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.