lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Sun, 17 Jul 2016 23:55:59 -0700 From: kan.liang@...el.com To: davem@...emloft.net, linux-kernel@...r.kernel.org, intel-wired-lan@...ts.osuosl.org, netdev@...r.kernel.org Cc: jeffrey.t.kirsher@...el.com, mingo@...hat.com, peterz@...radead.org, kuznet@....inr.ac.ru, jmorris@...ei.org, yoshfuji@...ux-ipv6.org, kaber@...sh.net, akpm@...ux-foundation.org, keescook@...omium.org, viro@...iv.linux.org.uk, gorcunov@...nvz.org, john.stultz@...aro.org, aduyck@...antis.com, ben@...adent.org.uk, decot@...glers.com, jesse.brandeburg@...el.com, andi@...stfloor.org, Kan Liang <kan.liang@...el.com> Subject: [RFC PATCH 05/30] i40e/netpolicy: implement ndo_get_irq_info From: Kan Liang <kan.liang@...el.com> Implement ndo_get_irq_info in i40e driver to get irq information of rx and tx queues. Signed-off-by: Kan Liang <kan.liang@...el.com> --- drivers/net/ethernet/intel/i40e/i40e_main.c | 40 +++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c index ee1f0b2..8a919e44 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_main.c +++ b/drivers/net/ethernet/intel/i40e/i40e_main.c @@ -8996,6 +8996,45 @@ static int i40e_ndo_netpolicy_init(struct net_device *dev, return 0; } + +/** + * i40e_ndo_get_irq_info + * @dev: the net device pointer + * @info: irq information which need to be updated + * + * Update irq information of tx and rx queues + * Returns 0 on success, negative on failure + */ +static int i40e_ndo_get_irq_info(struct net_device *dev, + struct netpolicy_dev_info *info) +{ + struct i40e_netdev_priv *np = netdev_priv(dev); + struct i40e_vsi *vsi = np->vsi; + struct i40e_pf *pf = vsi->back; + int i; + + info->rx_num = vsi->num_queue_pairs; + info->rx_irq = kmalloc_array(info->rx_num, sizeof(u32), GFP_KERNEL); + if (!info->rx_irq) { + info->rx_num = 0; + return -ENOMEM; + } + + info->tx_num = vsi->num_queue_pairs; + info->tx_irq = kmalloc_array(info->tx_num, sizeof(u32), GFP_KERNEL); + if (!info->tx_irq) { + info->tx_num = 0; + kfree(info->rx_irq); + return -ENOMEM; + } + + for (i = 0; i < vsi->num_queue_pairs; i++) { + info->rx_irq[i] = pf->msix_entries[vsi->base_vector + i].vector; + info->tx_irq[i] = pf->msix_entries[vsi->base_vector + i].vector; + } + + return 0; +} #endif /* CONFIG_NETPOLICY */ static const struct net_device_ops i40e_netdev_ops = { @@ -9036,6 +9075,7 @@ static const struct net_device_ops i40e_netdev_ops = { .ndo_bridge_setlink = i40e_ndo_bridge_setlink, #ifdef CONFIG_NETPOLICY .ndo_netpolicy_init = i40e_ndo_netpolicy_init, + .ndo_get_irq_info = i40e_ndo_get_irq_info, #endif /* CONFIG_NETPOLICY */ }; -- 2.5.5
Powered by blists - more mailing lists