net: thunderx: add workqueue control structures for handle ndo_set_rx_mode request
authorVadim Lomovtsev <Vadim.Lomovtsev@cavium.com>
Fri, 30 Mar 2018 11:59:52 +0000 (04:59 -0700)
committerDavid S. Miller <davem@davemloft.net>
Sun, 1 Apr 2018 02:18:17 +0000 (22:18 -0400)
The kernel calls ndo_set_rx_mode() callback from atomic context which
causes messaging timeouts between VF and PF (as they’re implemented via
MSIx). So in order to handle ndo_set_rx_mode() we need to get rid of it.

This commit implements necessary workqueue related structures to let VF
queue kernel request processing in non-atomic context later.

Signed-off-by: Vadim Lomovtsev <Vadim.Lomovtsev@cavium.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/cavium/thunder/nic.h

index 069289b4f96875958f476102a722027bca3c119a..5fc46c5a4f368bcbefabb980193b27a738418782 100644 (file)
@@ -265,6 +265,22 @@ struct nicvf_drv_stats {
 
 struct cavium_ptp;
 
+struct xcast_addr {
+       struct list_head list;
+       u64              addr;
+};
+
+struct xcast_addr_list {
+       struct list_head list;
+       int              count;
+};
+
+struct nicvf_work {
+       struct delayed_work    work;
+       u8                     mode;
+       struct xcast_addr_list *mc;
+};
+
 struct nicvf {
        struct nicvf            *pnicvf;
        struct net_device       *netdev;
@@ -313,6 +329,7 @@ struct nicvf {
        struct nicvf_pfc        pfc;
        struct tasklet_struct   qs_err_task;
        struct work_struct      reset_task;
+       struct nicvf_work       rx_mode_work;
 
        /* PTP timestamp */
        struct cavium_ptp       *ptp_clock;