From: Serge Semin <fancer.lancer@gmail.com>
To: Logan Gunthorpe <logang@deltatee.com>
Cc: linux-kernel@vger.kernel.org, linux-ntb@googlegroups.com,
Jon Mason <jdmason@kudzu.us>, Dave Jiang <dave.jiang@intel.com>,
Allen Hubbe <allenbh@gmail.com>,
Shyam Sundar S K <Shyam-sundar.S-k@amd.com>,
Shuah Khan <shuah@kernel.org>
Subject: Re: [PATCH 4/8] NTB: ntb_pingpong: Choose doorbells based on port number
Date: Fri, 15 Jun 2018 22:49:29 +0300 [thread overview]
Message-ID: <20180615194929.GA24025@mobilestation> (raw)
In-Reply-To: <20180609000819.13883-5-logang@deltatee.com>
On Fri, Jun 08, 2018 at 06:08:14PM -0600, Logan Gunthorpe <logang@deltatee.com> wrote:
> This commit fixes pingpong support for existing drivers that do not
> implement ntb_default_port_number() and ntb_default_peer_port_number().
> This is required for hardware (like the crosslink topology of
> switchtec) which cannot assign reasonable port numbers to each port due
> to its perfect symmetry.
>
> Instead of picking the doorbell to use based on the the index of the
> peer, we use the peer's port number. This is a bit clearer and easier
> to understand.
>
Thanks for the patch. It was the original version of the ping-pong driver,
I was going to submit. But I've decided to develop it a bit different. And
here is why.
My goal was to create the multi-port version of the ping-pong test.
The idea of the new driver was to implement the cyclic port-to-port
ping-pong algorithm. Simply speaking each port selects two partner-ports,
one partner would be used as the source of pings and another one would be
target of pongs sent to with the defined delay.
Since IDT got a global Doorbell register, which is shared between all
the ports, I had to assign an unique doorbell bit to each port. I created a
simple algorithm, which linearised in general non-linear port numbers.
Then I used the globally unique port index to select the corresponding
doorbell bit. pp_init_flds() methods implements the corresponding algorithm,
while pp_find_next_peer() performs the next port selection to convey the
pong to.
Regarding the patch. The idea of using the port number instead of linearised
unique index should also work for Intel/AMD/IDT drivers. But the ports-space
linearization algorithm was created for the case if the real port numbers
would exceed the available Doorbell bits. I thought this might be the case of
multi-ports version of the switchtec driver.
Needless to say, that if Switchtec driver had the ports-index API implementation,
this patch wouldn't be needed.
Regards,
-Sergey
> Fixes: c7aeb0afdcc2 ("NTB: ntb_pp: Add full multi-port NTB API support")
> Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
> ---
> drivers/ntb/test/ntb_pingpong.c | 14 ++++++--------
> 1 file changed, 6 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/ntb/test/ntb_pingpong.c b/drivers/ntb/test/ntb_pingpong.c
> index 65865e460ab8..18d00eec7b02 100644
> --- a/drivers/ntb/test/ntb_pingpong.c
> +++ b/drivers/ntb/test/ntb_pingpong.c
> @@ -121,15 +121,14 @@ static int pp_find_next_peer(struct pp_ctx *pp)
> link = ntb_link_is_up(pp->ntb, NULL, NULL);
>
> /* Find next available peer */
> - if (link & pp->nmask) {
> + if (link & pp->nmask)
> pidx = __ffs64(link & pp->nmask);
> - out_db = BIT_ULL(pidx + 1);
> - } else if (link & pp->pmask) {
> + else if (link & pp->pmask)
> pidx = __ffs64(link & pp->pmask);
> - out_db = BIT_ULL(pidx);
> - } else {
> + else
> return -ENODEV;
> - }
> +
> + out_db = BIT_ULL(ntb_peer_port_number(pp->ntb, pidx));
>
> spin_lock(&pp->lock);
> pp->out_pidx = pidx;
> @@ -303,7 +302,7 @@ static void pp_init_flds(struct pp_ctx *pp)
> break;
> }
>
> - pp->in_db = BIT_ULL(pidx);
> + pp->in_db = BIT_ULL(lport);
> pp->pmask = GENMASK_ULL(pidx, 0) >> 1;
> pp->nmask = GENMASK_ULL(pcnt - 1, pidx);
>
> @@ -435,4 +434,3 @@ static void __exit pp_exit(void)
> debugfs_remove_recursive(pp_dbgfs_topdir);
> }
> module_exit(pp_exit);
> -
> --
> 2.11.0
>
> --
> You received this message because you are subscribed to the Google Groups "linux-ntb" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to linux-ntb+unsubscribe@googlegroups.com.
> To post to this group, send email to linux-ntb@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/msgid/linux-ntb/20180609000819.13883-5-logang%40deltatee.com.
> For more options, visit https://groups.google.com/d/optout.
next prev parent reply other threads:[~2018-06-15 19:49 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-06-09 0:08 [PATCH 0/8] Fix breakage caused by the NTB multi-port patchset Logan Gunthorpe
2018-06-09 0:08 ` [PATCH 1/8] NTB: ntb_tool: reading the link file should not end in a NULL byte Logan Gunthorpe
2018-06-15 19:47 ` Serge Semin
2018-06-09 0:08 ` [PATCH 2/8] NTB: Setup the DMA mask globally for all drivers Logan Gunthorpe
2018-06-11 20:51 ` Dave Jiang
2018-06-12 15:48 ` Jon Mason
2018-06-12 16:18 ` Logan Gunthorpe
2018-06-09 0:08 ` [PATCH 3/8] NTB: Fix the default port and peer numbers for legacy drivers Logan Gunthorpe
2018-06-12 15:59 ` Jon Mason
2018-06-12 16:30 ` Logan Gunthorpe
2018-06-15 19:48 ` Serge Semin
2018-06-15 19:51 ` Logan Gunthorpe
2018-06-09 0:08 ` [PATCH 4/8] NTB: ntb_pingpong: Choose doorbells based on port number Logan Gunthorpe
2018-06-15 19:49 ` Serge Semin [this message]
2018-06-15 19:56 ` Logan Gunthorpe
2018-06-09 0:08 ` [PATCH 5/8] NTB: perf: Don't require one more memory window than number of peers Logan Gunthorpe
2018-06-15 19:49 ` Serge Semin
2018-06-09 0:08 ` [PATCH 5/8] NTB: perf: Don't require one more memory window than peer Logan Gunthorpe
2018-06-09 0:09 ` Logan Gunthorpe
2018-06-09 0:08 ` [PATCH 6/8] NTB: perf: Fix support for hardware that doesn't have port numbers Logan Gunthorpe
2018-06-15 19:50 ` Serge Semin
2018-06-15 20:01 ` Logan Gunthorpe
2018-06-09 0:08 ` [PATCH 7/8] NTB: perf: Fix race condition when run with ntb_test Logan Gunthorpe
2018-06-15 19:51 ` Serge Semin
2018-06-15 20:00 ` Logan Gunthorpe
2018-06-09 0:08 ` [PATCH 8/8] NTB: ntb_test: Fix bug when counting remote files Logan Gunthorpe
2018-06-15 19:51 ` Serge Semin
2018-06-15 20:02 ` Logan Gunthorpe
2018-07-20 16:33 ` Logan Gunthorpe
2018-06-10 1:45 ` [PATCH 0/8] Fix breakage caused by the NTB multi-port patchset Allen Hubbe
2018-06-15 19:47 ` Serge Semin
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=20180615194929.GA24025@mobilestation \
--to=fancer.lancer@gmail.com \
--cc=Shyam-sundar.S-k@amd.com \
--cc=allenbh@gmail.com \
--cc=dave.jiang@intel.com \
--cc=jdmason@kudzu.us \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-ntb@googlegroups.com \
--cc=logang@deltatee.com \
--cc=shuah@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 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.