diff options
author | Bogdan Hamciuc <bogdan.hamciuc@freescale.com> | 2013-04-18 09:13:22 (GMT) |
---|---|---|
committer | Fleming Andrew-AFLEMING <AFLEMING@freescale.com> | 2013-04-18 21:44:06 (GMT) |
commit | e6966c11a2b71c0031d9160dac94d1375fef7cb8 (patch) | |
tree | 284125f4250db0bea5beb6fbc9c3cae0f26e13d4 | |
parent | 66c33b00ac2a7d2c4da9c52ce583cb7d48f6dd2f (diff) | |
download | linux-fsl-qoriq-e6966c11a2b71c0031d9160dac94d1375fef7cb8.tar.xz |
dpaa_eth: Add NETPOLL support
Add NETPOLL support to the dpaa-ethernet driver. This is particularly
useful in tandem with the Netconsole module, when we'd want to drop tons
of logs (e.g. Ftrace logs) and the serial console is just too slow for
that.
Signed-off-by: Bogdan Hamciuc <bogdan.hamciuc@freescale.com>
Change-Id: Ic20b62603c58910d86d17afdd9a85e4b049526f1
Reviewed-on: http://git.am.freescale.net:8181/1538
Reviewed-by: Sovaiala Cristian-Constantin-B39531 <Cristian.Sovaiala@freescale.com>
Reviewed-by: Bucur Madalin-Cristian-B32716 <madalin.bucur@freescale.com>
Reviewed-by: Fleming Andrew-AFLEMING <AFLEMING@freescale.com>
Tested-by: Fleming Andrew-AFLEMING <AFLEMING@freescale.com>
-rw-r--r-- | drivers/net/ethernet/freescale/dpa/dpaa_eth.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/drivers/net/ethernet/freescale/dpa/dpaa_eth.c b/drivers/net/ethernet/freescale/dpa/dpaa_eth.c index 5c020f2..bc1e53d 100644 --- a/drivers/net/ethernet/freescale/dpa/dpaa_eth.c +++ b/drivers/net/ethernet/freescale/dpa/dpaa_eth.c @@ -3034,6 +3034,20 @@ static void __cold dpa_timeout(struct net_device *net_dev) percpu_priv->stats.tx_errors++; } +#ifdef CONFIG_NET_POLL_CONTROLLER +static void dpaa_eth_poll_controller(struct net_device *net_dev) +{ + struct dpa_priv_s *priv = netdev_priv(net_dev); + struct dpa_percpu_priv_s *percpu_priv = + this_cpu_ptr(priv->percpu_priv); + struct napi_struct napi = percpu_priv->napi; + + qman_irqsource_remove(QM_PIRQ_DQRI); + qman_poll_dqrr(napi.weight); + qman_irqsource_add(QM_PIRQ_DQRI); +} +#endif + static int dpa_bp_cmp(const void *dpa_bp0, const void *dpa_bp1) { return ((struct dpa_bp *)dpa_bp0)->size - @@ -3505,6 +3519,9 @@ static const struct net_device_ops dpa_private_ops = { .ndo_set_features = dpa_set_features, .ndo_fix_features = dpa_fix_features, .ndo_do_ioctl = dpa_ioctl, +#ifdef CONFIG_NET_POLL_CONTROLLER + .ndo_poll_controller = dpaa_eth_poll_controller, +#endif }; static const struct net_device_ops dpa_shared_ops = { |