From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S935884AbcHaQTc (ORCPT ); Wed, 31 Aug 2016 12:19:32 -0400 Received: from mail-pa0-f42.google.com ([209.85.220.42]:35034 "EHLO mail-pa0-f42.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S935056AbcHaQT2 (ORCPT ); Wed, 31 Aug 2016 12:19:28 -0400 Message-ID: <57C703B7.6010900@skyportsystems.com> Date: Wed, 31 Aug 2016 09:20:07 -0700 From: Ed Swierk User-Agent: Postbox 4.0.8 (Macintosh/20151105) MIME-Version: 1.0 To: Aaro Koskinen CC: Greg Kroah-Hartman , David Daney , driverdev-devel , lkml Subject: Re: [PATCH 0/9] staging: octeon: multi rx group (queue) support References: <20160830184753.21006-1-aaro.koskinen@iki.fi> <20160831062915.GD14316@raspberrypi.musicnaut.iki.fi> In-Reply-To: <20160831062915.GD14316@raspberrypi.musicnaut.iki.fi> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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