mlx5e_redirect_rqts(priv);
        mlx5e_update_carrier(priv);
        mlx5e_timestamp_init(priv);
+#ifdef CONFIG_RFS_ACCEL
+       priv->netdev->rx_cpu_rmap = priv->mdev->rmap;
+#endif
 
        schedule_delayed_work(&priv->update_stats_work, 0);
 
 
 #include <linux/kmod.h>
 #include <linux/delay.h>
 #include <linux/mlx5/mlx5_ifc.h>
+#ifdef CONFIG_RFS_ACCEL
+#include <linux/cpu_rmap.h>
+#endif
 #include "mlx5_core.h"
 #include "fs_core.h"
 #ifdef CONFIG_MLX5_CORE_EN
        struct mlx5_eq_table *table = &dev->priv.eq_table;
        struct mlx5_eq *eq, *n;
 
+#ifdef CONFIG_RFS_ACCEL
+       if (dev->rmap) {
+               free_irq_cpu_rmap(dev->rmap);
+               dev->rmap = NULL;
+       }
+#endif
        spin_lock(&table->lock);
        list_for_each_entry_safe(eq, n, &table->comp_eqs_list, list) {
                list_del(&eq->list);
        INIT_LIST_HEAD(&table->comp_eqs_list);
        ncomp_vec = table->num_comp_vectors;
        nent = MLX5_COMP_EQ_SIZE;
+#ifdef CONFIG_RFS_ACCEL
+       dev->rmap = alloc_irq_cpu_rmap(ncomp_vec);
+       if (!dev->rmap)
+               return -ENOMEM;
+#endif
        for (i = 0; i < ncomp_vec; i++) {
                eq = kzalloc(sizeof(*eq), GFP_KERNEL);
                if (!eq) {
                        goto clean;
                }
 
+#ifdef CONFIG_RFS_ACCEL
+               irq_cpu_rmap_add(dev->rmap,
+                                dev->priv.msix_arr[i + MLX5_EQ_VEC_COMP_BASE].vector);
+#endif
                snprintf(name, MLX5_MAX_IRQ_NAME, "mlx5_comp%d", i);
                err = mlx5_create_map_eq(dev, eq,
                                         i + MLX5_EQ_VEC_COMP_BASE, nent, 0,