summaryrefslogtreecommitdiff
path: root/lib/netdev-linux.c
diff options
context:
space:
mode:
authorWilliam Tu <u9012063@gmail.com>2020-04-14 06:22:55 -0700
committerIlya Maximets <i.maximets@ovn.org>2020-04-28 17:58:31 +0200
commit5bfc519fee499b5b8b1eeb2d26c1baa6a5f42d5b (patch)
tree3f58126a136172430e562dd69b681597aadc3b07 /lib/netdev-linux.c
parentffc0c87393012402e4647c07cc848f68aee7faf9 (diff)
downloadopenvswitch-5bfc519fee499b5b8b1eeb2d26c1baa6a5f42d5b.tar.gz
netdev-afxdp: Add interrupt mode netdev class.
The patch adds a new netdev class 'afxdp-nonpmd' to enable afxdp interrupt mode. This is similar to 'type=afxdp', except that the is_pmd field is set to false. As a result, the packet processing is handled by main thread, not pmd thread. This avoids burning the CPU to always 100% when there is no traffic. Signed-off-by: William Tu <u9012063@gmail.com> Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
Diffstat (limited to 'lib/netdev-linux.c')
-rw-r--r--lib/netdev-linux.c37
1 files changed, 23 insertions, 14 deletions
diff --git a/lib/netdev-linux.c b/lib/netdev-linux.c
index ff045cb12..1d7ed0145 100644
--- a/lib/netdev-linux.c
+++ b/lib/netdev-linux.c
@@ -3599,24 +3599,33 @@ const struct netdev_class netdev_internal_class = {
};
#ifdef HAVE_AF_XDP
+#define NETDEV_AFXDP_CLASS_COMMON \
+ .construct = netdev_afxdp_construct, \
+ .destruct = netdev_afxdp_destruct, \
+ .get_stats = netdev_afxdp_get_stats, \
+ .get_custom_stats = netdev_afxdp_get_custom_stats, \
+ .get_status = netdev_linux_get_status, \
+ .set_config = netdev_afxdp_set_config, \
+ .get_config = netdev_afxdp_get_config, \
+ .reconfigure = netdev_afxdp_reconfigure, \
+ .get_numa_id = netdev_linux_get_numa_id, \
+ .send = netdev_afxdp_batch_send, \
+ .rxq_construct = netdev_afxdp_rxq_construct, \
+ .rxq_destruct = netdev_afxdp_rxq_destruct, \
+ .rxq_recv = netdev_afxdp_rxq_recv
+
const struct netdev_class netdev_afxdp_class = {
NETDEV_LINUX_CLASS_COMMON,
+ NETDEV_AFXDP_CLASS_COMMON,
.type = "afxdp",
.is_pmd = true,
- .init = netdev_afxdp_init,
- .construct = netdev_afxdp_construct,
- .destruct = netdev_afxdp_destruct,
- .get_stats = netdev_afxdp_get_stats,
- .get_custom_stats = netdev_afxdp_get_custom_stats,
- .get_status = netdev_linux_get_status,
- .set_config = netdev_afxdp_set_config,
- .get_config = netdev_afxdp_get_config,
- .reconfigure = netdev_afxdp_reconfigure,
- .get_numa_id = netdev_linux_get_numa_id,
- .send = netdev_afxdp_batch_send,
- .rxq_construct = netdev_afxdp_rxq_construct,
- .rxq_destruct = netdev_afxdp_rxq_destruct,
- .rxq_recv = netdev_afxdp_rxq_recv,
+};
+
+const struct netdev_class netdev_afxdp_nonpmd_class = {
+ NETDEV_LINUX_CLASS_COMMON,
+ NETDEV_AFXDP_CLASS_COMMON,
+ .type = "afxdp-nonpmd",
+ .is_pmd = false,
};
#endif