From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jiri Pirko Subject: Re: [patch net-next 3/4] mlxsw: Add interface to access registers and process events Date: Fri, 24 Jul 2015 07:24:53 +0200 Message-ID: <20150724052453.GB2178@nanopsycho.orion> References: <1437666216-3149-1-git-send-email-jiri@resnulli.us> <1437666216-3149-4-git-send-email-jiri@resnulli.us> <20150723211218.GB504@gospo.home.greyhouse.net> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: netdev@vger.kernel.org, davem@davemloft.net, idosch@mellanox.com, eladr@mellanox.com, ogerlitz@mellanox.com, sfeldma@gmail.com, roopa@cumulusnetworks.com, f.fainelli@gmail.com, tgraf@suug.ch, ast@plumgrid.com, jhs@mojatatu.com, daniel@iogearbox.net, john.fastabend@gmail.com, simon.horman@netronome.com, linville@tuxdriver.com, andy@greyhouse.net, shm@cumulusnetworks.com, nhorman@tuxdriver.com, Jiri Pirko To: Andy Gospodarek Return-path: Received: from mail-wi0-f178.google.com ([209.85.212.178]:38874 "EHLO mail-wi0-f178.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751254AbbGXFY4 (ORCPT ); Fri, 24 Jul 2015 01:24:56 -0400 Received: by wibxm9 with SMTP id xm9so12082312wib.1 for ; Thu, 23 Jul 2015 22:24:55 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20150723211218.GB504@gospo.home.greyhouse.net> Sender: netdev-owner@vger.kernel.org List-ID: Thu, Jul 23, 2015 at 11:12:20PM CEST, gospo@cumulusnetworks.com wrote: >On Thu, Jul 23, 2015 at 05:43:35PM +0200, Jiri Pirko wrote: >> From: Ido Schimmel >> >> Add the ability to construct mailbox-style register access messages >> called EMADs with provisions to construct and parse the registers payload. >> Implement EMAD transaction layer which is responsible for the reliable >> transmission of EMADs. >> Also, add an infrastructure used by the switch driver to register for >> particular events generated by the device. >> >> Signed-off-by: Ido Schimmel >> Signed-off-by: Jiri Pirko >> Signed-off-by: Elad Raz >> --- >> drivers/net/ethernet/mellanox/mlxsw/core.c | 736 ++++++++++++++++ >> drivers/net/ethernet/mellanox/mlxsw/core.h | 21 + >> drivers/net/ethernet/mellanox/mlxsw/emad.h | 127 +++ >> drivers/net/ethernet/mellanox/mlxsw/port.h | 19 + >> drivers/net/ethernet/mellanox/mlxsw/reg.h | 1289 ++++++++++++++++++++++++++++ >> 5 files changed, 2192 insertions(+) >> create mode 100644 drivers/net/ethernet/mellanox/mlxsw/emad.h >> create mode 100644 drivers/net/ethernet/mellanox/mlxsw/reg.h >> >> diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.c b/drivers/net/ethernet/mellanox/mlxsw/core.c >> index 211ec9b..bd0f692 100644 >> --- a/drivers/net/ethernet/mellanox/mlxsw/core.c >> +++ b/drivers/net/ethernet/mellanox/mlxsw/core.c >[...] >> + struct list_head event_listener_list; >> + struct { >> + struct sk_buff *resp_skb; >> + u64 tid; >> + wait_queue_head_t wait; >> + bool trans_active; >> + struct mutex lock; /* One EMAD transaction at a time. */ >> + bool use_emad; >> + } emad; >> struct mlxsw_core_pcpu_stats __percpu *pcpu_stats; >> struct dentry *dbg_dir; >> struct { >[...] >> } >> >> INIT_LIST_HEAD(&mlxsw_core->rx_listener_list); >> + INIT_LIST_HEAD(&mlxsw_core->event_listener_list); >> mlxsw_core->driver = mlxsw_driver; >> mlxsw_core->bus = mlxsw_bus; >> mlxsw_core->bus_priv = bus_priv; >[...] >> + /* No reason to save item if we did not manage to register an RX >> + * listener for it. >> + */ >> + list_add_rcu(&el_item->list, &mlxsw_core->event_listener_list); >> + > >I see where 'event_listener_list' is defined and where entries are >added/removed, but where is the code that would receive these events and >presumably search this list so all handlers registered (currently just >PUDE) can handle events? That is handled by calling mlxsw_core_rx_listener_register. that will add each event handler as a item to &mlxsw_core->rx_listener_list These rx_listeners are called from mlxsw_core_skb_receive. So event is here a special case of rx_listener. The event list is used just to contain struct mlxsw_event_listener_item instances.