public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Ed Swierk <eswierk@skyportsystems.com>
To: Aaro Koskinen <aaro.koskinen@iki.fi>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	David Daney <ddaney@caviumnetworks.com>,
	driverdev-devel <devel@driverdev.osuosl.org>,
	lkml <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 0/9] staging: octeon: multi rx group (queue) support
Date: Wed, 31 Aug 2016 09:20:07 -0700	[thread overview]
Message-ID: <57C703B7.6010900@skyportsystems.com> (raw)
In-Reply-To: <20160831062915.GD14316@raspberrypi.musicnaut.iki.fi>

Aaro Koskinen wrote:
> Oops, looks like I tested without CONFIG_NET_POLL_CONTROLLER enabled
> and that seems to be broken. Sorry.

I'm not using CONFIG_NET_POLL_CONTROLLER either; the problem is in the
normal cvm_oct_napi_poll() path.

Here's my workaround:

--- a/drivers/staging/octeon/ethernet-rx.c
+++ b/drivers/staging/octeon/ethernet-rx.c
@@ -159,7 +159,7 @@ static inline int cvm_oct_check_rcv_error(cvmx_wqe_t *work)
 	return 0;
 }

-static int cvm_oct_poll(struct oct_rx_group *rx_group, int budget)
+static int cvm_oct_poll(int group, int budget)
 {
 	const int	coreid = cvmx_get_core_num();
 	u64	old_group_mask;
@@ -181,13 +181,13 @@ static int cvm_oct_poll(struct oct_rx_group *rx_group, int budget)
 	if (OCTEON_IS_MODEL(OCTEON_CN68XX)) {
 		old_group_mask = cvmx_read_csr(CVMX_SSO_PPX_GRP_MSK(coreid));
 		cvmx_write_csr(CVMX_SSO_PPX_GRP_MSK(coreid),
-			       BIT(rx_group->group));
+			       BIT(group));
 		cvmx_read_csr(CVMX_SSO_PPX_GRP_MSK(coreid)); /* Flush */
 	} else {
 		old_group_mask = cvmx_read_csr(CVMX_POW_PP_GRP_MSKX(coreid));
 		cvmx_write_csr(CVMX_POW_PP_GRP_MSKX(coreid),
 			       (old_group_mask & ~0xFFFFull) |
-			       BIT(rx_group->group));
+			       BIT(group));
 	}

 	if (USE_ASYNC_IOBDMA) {
@@ -212,15 +212,15 @@ static int cvm_oct_poll(struct oct_rx_group *rx_group, int budget)
 		if (!work) {
 			if (OCTEON_IS_MODEL(OCTEON_CN68XX)) {
 				cvmx_write_csr(CVMX_SSO_WQ_IQ_DIS,
-					       BIT(rx_group->group));
+					       BIT(group));
 				cvmx_write_csr(CVMX_SSO_WQ_INT,
-					       BIT(rx_group->group));
+					       BIT(group));
 			} else {
 				union cvmx_pow_wq_int wq_int;

 				wq_int.u64 = 0;
-				wq_int.s.iq_dis = BIT(rx_group->group);
-				wq_int.s.wq_int = BIT(rx_group->group);
+				wq_int.s.iq_dis = BIT(group);
+				wq_int.s.wq_int = BIT(group);
 				cvmx_write_csr(CVMX_POW_WQ_INT, wq_int.u64);
 			}
 			break;
@@ -447,7 +447,7 @@ static int cvm_oct_napi_poll(struct napi_struct *napi, int budget)
 						     napi);
 	int rx_count;

-	rx_count = cvm_oct_poll(rx_group, budget);
+	rx_count = cvm_oct_poll(rx_group->group, budget);

 	if (rx_count < budget) {
 		/* No more work */
@@ -466,7 +466,7 @@ static int cvm_oct_napi_poll(struct napi_struct *napi, int budget)
  */
 void cvm_oct_poll_controller(struct net_device *dev)
 {
-	cvm_oct_poll(oct_rx_group, 16);
+	cvm_oct_poll(oct_rx_group->group, 16);
 }
 #endif

> Can you see multiple ethernet IRQs in /proc/interrupts and their
> counters increasing?
> 
> With receive_group_order=4 you should see 16 IRQs.

I see the 16 IRQs, and the first one does increase. But packets don't make
it to the application.

--Ed

  reply	other threads:[~2016-08-31 16:19 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-08-30 18:47 [PATCH 0/9] staging: octeon: multi rx group (queue) support Aaro Koskinen
2016-08-30 18:47 ` [PATCH 1/9] staging: octeon: disable rx interrupts in oct_rx_shutdown Aaro Koskinen
2016-08-30 18:47 ` [PATCH 2/9] staging: octeon: use passed interrupt number in the handler Aaro Koskinen
2016-08-30 18:47 ` [PATCH 3/9] staging: octeon: pass the NAPI instance reference to irq handler Aaro Koskinen
2016-08-30 18:47 ` [PATCH 4/9] staging: octeon: move common poll code into a separate function Aaro Koskinen
2016-08-30 18:47 ` [PATCH 5/9] staging: octeon: create a struct for rx group specific data Aaro Koskinen
2016-08-30 18:47 ` [PATCH 6/9] staging: octeon: move irq into " Aaro Koskinen
2016-08-30 18:47 ` [PATCH 7/9] staging: octeon: move group number into rx group data Aaro Koskinen
2016-08-30 18:47 ` [PATCH 8/9] staging: octeon: support enabling multiple rx groups Aaro Koskinen
2016-08-30 18:47 ` [PATCH 9/9] staging: octeon: enable taking multiple rx groups into use Aaro Koskinen
2016-08-31  1:12 ` [PATCH 0/9] staging: octeon: multi rx group (queue) support Ed Swierk
2016-08-31  6:29   ` Aaro Koskinen
2016-08-31 16:20     ` Ed Swierk [this message]
2016-08-31 21:20       ` Aaro Koskinen
2016-09-01  1:52         ` Ed Swierk
2016-08-31 15:06   ` Aaro Koskinen
2016-08-31 16:10     ` David Daney

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=57C703B7.6010900@skyportsystems.com \
    --to=eswierk@skyportsystems.com \
    --cc=aaro.koskinen@iki.fi \
    --cc=ddaney@caviumnetworks.com \
    --cc=devel@driverdev.osuosl.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-kernel@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