if (q_vector->cpu == cpu)
                goto out_no_update;
 
-       r_idx = find_first_bit(q_vector->txr_idx, adapter->num_tx_queues);
-       for (i = 0; i < q_vector->txr_count; i++) {
+       r_idx = find_first_bit(q_vector->tx.idx, adapter->num_tx_queues);
+       for (i = 0; i < q_vector->tx.count; i++) {
                ixgbe_update_tx_dca(adapter, adapter->tx_ring[r_idx], cpu);
-               r_idx = find_next_bit(q_vector->txr_idx, adapter->num_tx_queues,
+               r_idx = find_next_bit(q_vector->tx.idx, adapter->num_tx_queues,
                                      r_idx + 1);
        }
 
-       r_idx = find_first_bit(q_vector->rxr_idx, adapter->num_rx_queues);
-       for (i = 0; i < q_vector->rxr_count; i++) {
+       r_idx = find_first_bit(q_vector->rx.idx, adapter->num_rx_queues);
+       for (i = 0; i < q_vector->rx.count; i++) {
                ixgbe_update_rx_dca(adapter, adapter->rx_ring[r_idx], cpu);
-               r_idx = find_next_bit(q_vector->rxr_idx, adapter->num_rx_queues,
+               r_idx = find_next_bit(q_vector->rx.idx, adapter->num_rx_queues,
                                      r_idx + 1);
        }
 
        for (v_idx = 0; v_idx < q_vectors; v_idx++) {
                q_vector = adapter->q_vector[v_idx];
                /* XXX for_each_set_bit(...) */
-               r_idx = find_first_bit(q_vector->rxr_idx,
+               r_idx = find_first_bit(q_vector->rx.idx,
                                       adapter->num_rx_queues);
 
-               for (i = 0; i < q_vector->rxr_count; i++) {
+               for (i = 0; i < q_vector->rx.count; i++) {
                        u8 reg_idx = adapter->rx_ring[r_idx]->reg_idx;
                        ixgbe_set_ivar(adapter, 0, reg_idx, v_idx);
-                       r_idx = find_next_bit(q_vector->rxr_idx,
+                       r_idx = find_next_bit(q_vector->rx.idx,
                                              adapter->num_rx_queues,
                                              r_idx + 1);
                }
-               r_idx = find_first_bit(q_vector->txr_idx,
+               r_idx = find_first_bit(q_vector->tx.idx,
                                       adapter->num_tx_queues);
 
-               for (i = 0; i < q_vector->txr_count; i++) {
+               for (i = 0; i < q_vector->tx.count; i++) {
                        u8 reg_idx = adapter->tx_ring[r_idx]->reg_idx;
                        ixgbe_set_ivar(adapter, 1, reg_idx, v_idx);
-                       r_idx = find_next_bit(q_vector->txr_idx,
+                       r_idx = find_next_bit(q_vector->tx.idx,
                                              adapter->num_tx_queues,
                                              r_idx + 1);
                }
 
-               if (q_vector->txr_count && !q_vector->rxr_count)
+               if (q_vector->tx.count && !q_vector->rx.count)
                        /* tx only */
                        q_vector->eitr = adapter->tx_eitr_param;
-               else if (q_vector->rxr_count)
+               else if (q_vector->rx.count)
                        /* rx or mixed */
                        q_vector->eitr = adapter->rx_eitr_param;
 
        u32 new_itr;
        u8 current_itr, ret_itr;
 
-       r_idx = find_first_bit(q_vector->txr_idx, adapter->num_tx_queues);
-       for (i = 0; i < q_vector->txr_count; i++) {
+       r_idx = find_first_bit(q_vector->tx.idx, adapter->num_tx_queues);
+       for (i = 0; i < q_vector->tx.count; i++) {
                struct ixgbe_ring *tx_ring = adapter->tx_ring[r_idx];
                ret_itr = ixgbe_update_itr(adapter, q_vector->eitr,
-                                          q_vector->tx_itr,
+                                          q_vector->tx.itr,
                                           tx_ring->total_packets,
                                           tx_ring->total_bytes);
                /* if the result for this queue would decrease interrupt
                 * rate for this vector then use that result */
-               q_vector->tx_itr = ((q_vector->tx_itr > ret_itr) ?
-                                   q_vector->tx_itr - 1 : ret_itr);
-               r_idx = find_next_bit(q_vector->txr_idx, adapter->num_tx_queues,
+               q_vector->tx.itr = ((q_vector->tx.itr > ret_itr) ?
+                                   q_vector->tx.itr - 1 : ret_itr);
+               r_idx = find_next_bit(q_vector->tx.idx, adapter->num_tx_queues,
                                      r_idx + 1);
        }
 
-       r_idx = find_first_bit(q_vector->rxr_idx, adapter->num_rx_queues);
-       for (i = 0; i < q_vector->rxr_count; i++) {
+       r_idx = find_first_bit(q_vector->rx.idx, adapter->num_rx_queues);
+       for (i = 0; i < q_vector->rx.count; i++) {
                struct ixgbe_ring *rx_ring = adapter->rx_ring[r_idx];
                ret_itr = ixgbe_update_itr(adapter, q_vector->eitr,
-                                          q_vector->rx_itr,
+                                          q_vector->rx.itr,
                                           rx_ring->total_packets,
                                           rx_ring->total_bytes);
                /* if the result for this queue would decrease interrupt
                 * rate for this vector then use that result */
-               q_vector->rx_itr = ((q_vector->rx_itr > ret_itr) ?
-                                   q_vector->rx_itr - 1 : ret_itr);
-               r_idx = find_next_bit(q_vector->rxr_idx, adapter->num_rx_queues,
+               q_vector->rx.itr = ((q_vector->rx.itr > ret_itr) ?
+                                   q_vector->rx.itr - 1 : ret_itr);
+               r_idx = find_next_bit(q_vector->rx.idx, adapter->num_rx_queues,
                                      r_idx + 1);
        }
 
-       current_itr = max(q_vector->rx_itr, q_vector->tx_itr);
+       current_itr = max(q_vector->rx.itr, q_vector->tx.itr);
 
        switch (current_itr) {
        /* counts and packets in update_itr are dependent on these numbers */
        struct ixgbe_ring     *tx_ring;
        int i, r_idx;
 
-       if (!q_vector->txr_count)
+       if (!q_vector->tx.count)
                return IRQ_HANDLED;
 
-       r_idx = find_first_bit(q_vector->txr_idx, adapter->num_tx_queues);
-       for (i = 0; i < q_vector->txr_count; i++) {
+       r_idx = find_first_bit(q_vector->tx.idx, adapter->num_tx_queues);
+       for (i = 0; i < q_vector->tx.count; i++) {
                tx_ring = adapter->tx_ring[r_idx];
                tx_ring->total_bytes = 0;
                tx_ring->total_packets = 0;
-               r_idx = find_next_bit(q_vector->txr_idx, adapter->num_tx_queues,
+               r_idx = find_next_bit(q_vector->tx.idx, adapter->num_tx_queues,
                                      r_idx + 1);
        }
 
                ixgbe_update_dca(q_vector);
 #endif
 
-       r_idx = find_first_bit(q_vector->rxr_idx, adapter->num_rx_queues);
-       for (i = 0; i < q_vector->rxr_count; i++) {
+       r_idx = find_first_bit(q_vector->rx.idx, adapter->num_rx_queues);
+       for (i = 0; i < q_vector->rx.count; i++) {
                rx_ring = adapter->rx_ring[r_idx];
                rx_ring->total_bytes = 0;
                rx_ring->total_packets = 0;
-               r_idx = find_next_bit(q_vector->rxr_idx, adapter->num_rx_queues,
+               r_idx = find_next_bit(q_vector->rx.idx, adapter->num_rx_queues,
                                      r_idx + 1);
        }
 
-       if (!q_vector->rxr_count)
+       if (!q_vector->rx.count)
                return IRQ_HANDLED;
 
        /* EIAM disabled interrupts (on this vector) for us */
        int r_idx;
        int i;
 
-       if (!q_vector->txr_count && !q_vector->rxr_count)
+       if (!q_vector->tx.count && !q_vector->rx.count)
                return IRQ_HANDLED;
 
-       r_idx = find_first_bit(q_vector->txr_idx, adapter->num_tx_queues);
-       for (i = 0; i < q_vector->txr_count; i++) {
+       r_idx = find_first_bit(q_vector->tx.idx, adapter->num_tx_queues);
+       for (i = 0; i < q_vector->tx.count; i++) {
                ring = adapter->tx_ring[r_idx];
                ring->total_bytes = 0;
                ring->total_packets = 0;
-               r_idx = find_next_bit(q_vector->txr_idx, adapter->num_tx_queues,
+               r_idx = find_next_bit(q_vector->tx.idx, adapter->num_tx_queues,
                                      r_idx + 1);
        }
 
-       r_idx = find_first_bit(q_vector->rxr_idx, adapter->num_rx_queues);
-       for (i = 0; i < q_vector->rxr_count; i++) {
+       r_idx = find_first_bit(q_vector->rx.idx, adapter->num_rx_queues);
+       for (i = 0; i < q_vector->rx.count; i++) {
                ring = adapter->rx_ring[r_idx];
                ring->total_bytes = 0;
                ring->total_packets = 0;
-               r_idx = find_next_bit(q_vector->rxr_idx, adapter->num_rx_queues,
+               r_idx = find_next_bit(q_vector->rx.idx, adapter->num_rx_queues,
                                      r_idx + 1);
        }
 
                ixgbe_update_dca(q_vector);
 #endif
 
-       r_idx = find_first_bit(q_vector->rxr_idx, adapter->num_rx_queues);
+       r_idx = find_first_bit(q_vector->rx.idx, adapter->num_rx_queues);
        rx_ring = adapter->rx_ring[r_idx];
 
        ixgbe_clean_rx_irq(q_vector, rx_ring, &work_done, budget);
                ixgbe_update_dca(q_vector);
 #endif
 
-       r_idx = find_first_bit(q_vector->txr_idx, adapter->num_tx_queues);
-       for (i = 0; i < q_vector->txr_count; i++) {
+       r_idx = find_first_bit(q_vector->tx.idx, adapter->num_tx_queues);
+       for (i = 0; i < q_vector->tx.count; i++) {
                ring = adapter->tx_ring[r_idx];
                tx_clean_complete &= ixgbe_clean_tx_irq(q_vector, ring);
-               r_idx = find_next_bit(q_vector->txr_idx, adapter->num_tx_queues,
+               r_idx = find_next_bit(q_vector->tx.idx, adapter->num_tx_queues,
                                      r_idx + 1);
        }
 
        /* attempt to distribute budget to each queue fairly, but don't allow
         * the budget to go below 1 because we'll exit polling */
-       budget /= (q_vector->rxr_count ?: 1);
+       budget /= (q_vector->rx.count ?: 1);
        budget = max(budget, 1);
-       r_idx = find_first_bit(q_vector->rxr_idx, adapter->num_rx_queues);
-       for (i = 0; i < q_vector->rxr_count; i++) {
+       r_idx = find_first_bit(q_vector->rx.idx, adapter->num_rx_queues);
+       for (i = 0; i < q_vector->rx.count; i++) {
                ring = adapter->rx_ring[r_idx];
                ixgbe_clean_rx_irq(q_vector, ring, &work_done, budget);
-               r_idx = find_next_bit(q_vector->rxr_idx, adapter->num_rx_queues,
+               r_idx = find_next_bit(q_vector->rx.idx, adapter->num_rx_queues,
                                      r_idx + 1);
        }
 
-       r_idx = find_first_bit(q_vector->rxr_idx, adapter->num_rx_queues);
+       r_idx = find_first_bit(q_vector->rx.idx, adapter->num_rx_queues);
        ring = adapter->rx_ring[r_idx];
        /* If all Rx work done, exit the polling mode */
        if (work_done < budget) {
                ixgbe_update_dca(q_vector);
 #endif
 
-       r_idx = find_first_bit(q_vector->txr_idx, adapter->num_tx_queues);
+       r_idx = find_first_bit(q_vector->tx.idx, adapter->num_tx_queues);
        tx_ring = adapter->tx_ring[r_idx];
 
        if (!ixgbe_clean_tx_irq(q_vector, tx_ring))
        struct ixgbe_q_vector *q_vector = a->q_vector[v_idx];
        struct ixgbe_ring *rx_ring = a->rx_ring[r_idx];
 
-       set_bit(r_idx, q_vector->rxr_idx);
-       q_vector->rxr_count++;
+       set_bit(r_idx, q_vector->rx.idx);
+       q_vector->rx.count++;
        rx_ring->q_vector = q_vector;
 }
 
        struct ixgbe_q_vector *q_vector = a->q_vector[v_idx];
        struct ixgbe_ring *tx_ring = a->tx_ring[t_idx];
 
-       set_bit(t_idx, q_vector->txr_idx);
-       q_vector->txr_count++;
+       set_bit(t_idx, q_vector->tx.idx);
+       q_vector->tx.count++;
        tx_ring->q_vector = q_vector;
 }
 
        if (err)
                return err;
 
-#define SET_HANDLER(_v) (((_v)->rxr_count && (_v)->txr_count)        \
+#define SET_HANDLER(_v) (((_v)->rx.count && (_v)->tx.count)        \
                                          ? &ixgbe_msix_clean_many : \
-                         (_v)->rxr_count ? &ixgbe_msix_clean_rx   : \
-                         (_v)->txr_count ? &ixgbe_msix_clean_tx   : \
+                         (_v)->rx.count ? &ixgbe_msix_clean_rx   : \
+                         (_v)->tx.count ? &ixgbe_msix_clean_tx   : \
                          NULL)
        for (vector = 0; vector < q_vectors; vector++) {
                struct ixgbe_q_vector *q_vector = adapter->q_vector[vector];
        u32 new_itr = q_vector->eitr;
        u8 current_itr;
 
-       q_vector->tx_itr = ixgbe_update_itr(adapter, new_itr,
-                                           q_vector->tx_itr,
+       q_vector->tx.itr = ixgbe_update_itr(adapter, new_itr,
+                                           q_vector->tx.itr,
                                            tx_ring->total_packets,
                                            tx_ring->total_bytes);
-       q_vector->rx_itr = ixgbe_update_itr(adapter, new_itr,
-                                           q_vector->rx_itr,
+       q_vector->rx.itr = ixgbe_update_itr(adapter, new_itr,
+                                           q_vector->rx.itr,
                                            rx_ring->total_packets,
                                            rx_ring->total_bytes);
 
-       current_itr = max(q_vector->rx_itr, q_vector->tx_itr);
+       current_itr = max(q_vector->rx.itr, q_vector->tx.itr);
 
        switch (current_itr) {
        /* counts and packets in update_itr are dependent on these numbers */
 
        for (i = 0; i < q_vectors; i++) {
                struct ixgbe_q_vector *q_vector = adapter->q_vector[i];
-               bitmap_zero(q_vector->rxr_idx, MAX_RX_QUEUES);
-               bitmap_zero(q_vector->txr_idx, MAX_TX_QUEUES);
-               q_vector->rxr_count = 0;
-               q_vector->txr_count = 0;
+               bitmap_zero(q_vector->rx.idx, MAX_RX_QUEUES);
+               bitmap_zero(q_vector->tx.idx, MAX_TX_QUEUES);
+               q_vector->rx.count = 0;
+               q_vector->tx.count = 0;
        }
 }
 
                i--;
                for (; i >= 0; i--) {
                        /* free only the irqs that were actually requested */
-                       if (!adapter->q_vector[i]->rxr_count &&
-                           !adapter->q_vector[i]->txr_count)
+                       if (!adapter->q_vector[i]->rx.count &&
+                           !adapter->q_vector[i]->tx.count)
                                continue;
 
                        free_irq(adapter->msix_entries[i].vector,
                q_vector = adapter->q_vector[q_idx];
                napi = &q_vector->napi;
                if (adapter->flags & IXGBE_FLAG_MSIX_ENABLED) {
-                       if (!q_vector->rxr_count || !q_vector->txr_count) {
-                               if (q_vector->txr_count == 1)
+                       if (!q_vector->rx.count || !q_vector->tx.count) {
+                               if (q_vector->tx.count == 1)
                                        napi->poll = &ixgbe_clean_txonly;
-                               else if (q_vector->rxr_count == 1)
+                               else if (q_vector->rx.count == 1)
                                        napi->poll = &ixgbe_clean_rxonly;
                        }
                }
                if (!q_vector)
                        goto err_out;
                q_vector->adapter = adapter;
-               if (q_vector->txr_count && !q_vector->rxr_count)
+               if (q_vector->tx.count && !q_vector->rx.count)
                        q_vector->eitr = adapter->tx_eitr_param;
                else
                        q_vector->eitr = adapter->rx_eitr_param;
                /* get one bit for every active tx/rx interrupt vector */
                for (i = 0; i < adapter->num_msix_vectors - NON_Q_VECTORS; i++) {
                        struct ixgbe_q_vector *qv = adapter->q_vector[i];
-                       if (qv->rxr_count || qv->txr_count)
+                       if (qv->rx.count || qv->tx.count)
                                eics |= ((u64)1 << i);
                }
        }