Lines Matching defs:q_vector
321 struct igc_hw *hw = &ring->q_vector->adapter->hw;
545 rx_ring->q_vector->napi.napi_id);
2007 skb = napi_alloc_skb(&rx_ring->q_vector->napi,
2193 struct igc_adapter *adapter = rx_ring->q_vector->adapter;
2587 static void igc_update_rx_stats(struct igc_q_vector *q_vector,
2590 struct igc_ring *ring = q_vector->rx.ring;
2597 q_vector->rx.total_packets += packets;
2598 q_vector->rx.total_bytes += bytes;
2601 static int igc_clean_rx_irq(struct igc_q_vector *q_vector, const int budget)
2604 struct igc_adapter *adapter = q_vector->adapter;
2605 struct igc_ring *rx_ring = q_vector->rx.ring;
2714 napi_gro_receive(&q_vector->napi, skb);
2729 igc_update_rx_stats(q_vector, total_packets, total_bytes);
2747 skb = napi_alloc_skb(&ring->q_vector->napi, totalsize);
2767 static void igc_dispatch_skb_zc(struct igc_q_vector *q_vector,
2771 struct igc_ring *ring = q_vector->rx.ring;
2785 napi_gro_receive(&q_vector->napi, skb);
2797 static int igc_clean_rx_irq_zc(struct igc_q_vector *q_vector, const int budget)
2799 struct igc_adapter *adapter = q_vector->adapter;
2800 struct igc_ring *ring = q_vector->rx.ring;
2855 igc_dispatch_skb_zc(q_vector, desc, ctx);
2884 igc_update_rx_stats(q_vector, total_packets, total_bytes);
2897 static void igc_update_tx_stats(struct igc_q_vector *q_vector,
2900 struct igc_ring *ring = q_vector->tx.ring;
2907 q_vector->tx.total_bytes += bytes;
2908 q_vector->tx.total_packets += packets;
3125 * @q_vector: pointer to q_vector containing needed info
3130 static bool igc_clean_tx_irq(struct igc_q_vector *q_vector, int napi_budget)
3132 struct igc_adapter *adapter = q_vector->adapter;
3134 unsigned int budget = q_vector->tx.work_limit;
3135 struct igc_ring *tx_ring = q_vector->tx.ring;
3237 igc_update_tx_stats(q_vector, total_packets, total_bytes);
4220 static void igc_assign_vector(struct igc_q_vector *q_vector, int msix_vector)
4222 struct igc_adapter *adapter = q_vector->adapter;
4227 if (q_vector->rx.ring)
4228 rx_queue = q_vector->rx.ring->reg_idx;
4229 if (q_vector->tx.ring)
4230 tx_queue = q_vector->tx.ring->reg_idx;
4242 q_vector->eims_value = BIT(msix_vector);
4249 /* add q_vector eims value to global eims_enable_mask */
4250 adapter->eims_enable_mask |= q_vector->eims_value;
4252 /* configure q_vector to set itr on first interrupt */
4253 q_vector->set_itr = 1;
4295 igc_assign_vector(adapter->q_vector[i], vector++);
4394 struct igc_q_vector *q_vector = adapter->q_vector[v_idx];
4399 if (!q_vector)
4402 if (q_vector->tx.ring)
4403 adapter->tx_ring[q_vector->tx.ring->queue_index] = NULL;
4405 if (q_vector->rx.ring)
4406 adapter->rx_ring[q_vector->rx.ring->queue_index] = NULL;
4408 netif_napi_del(&q_vector->napi);
4416 * This function frees the memory allocated to the q_vector.
4420 struct igc_q_vector *q_vector = adapter->q_vector[v_idx];
4422 adapter->q_vector[v_idx] = NULL;
4427 if (q_vector)
4428 kfree_rcu(q_vector, rcu);
4437 * to freeing the q_vector.
4455 * @q_vector: pointer to q_vector
4468 static void igc_update_itr(struct igc_q_vector *q_vector,
4520 static void igc_set_itr(struct igc_q_vector *q_vector)
4522 struct igc_adapter *adapter = q_vector->adapter;
4523 u32 new_itr = q_vector->itr_val;
4537 igc_update_itr(q_vector, &q_vector->tx);
4538 igc_update_itr(q_vector, &q_vector->rx);
4540 current_itr = max(q_vector->rx.itr, q_vector->tx.itr);
4544 ((q_vector->rx.ring && adapter->rx_itr_setting == 3) ||
4545 (!q_vector->rx.ring && adapter->tx_itr_setting == 3)))
4564 if (new_itr != q_vector->itr_val) {
4569 new_itr = new_itr > q_vector->itr_val ?
4570 max((new_itr * q_vector->itr_val) /
4571 (new_itr + (q_vector->itr_val >> 2)),
4579 q_vector->itr_val = new_itr;
4580 q_vector->set_itr = 1;
4672 * @q_vector: pointer to q_vector
4684 static void igc_update_ring_itr(struct igc_q_vector *q_vector)
4686 struct igc_adapter *adapter = q_vector->adapter;
4687 int new_val = q_vector->itr_val;
4703 packets = q_vector->rx.total_packets;
4705 avg_wire_size = q_vector->rx.total_bytes / packets;
4707 packets = q_vector->tx.total_packets;
4710 q_vector->tx.total_bytes / packets);
4730 ((q_vector->rx.ring && adapter->rx_itr_setting == 3) ||
4731 (!q_vector->rx.ring && adapter->tx_itr_setting == 3)))
4735 if (new_val != q_vector->itr_val) {
4736 q_vector->itr_val = new_val;
4737 q_vector->set_itr = 1;
4740 q_vector->rx.total_bytes = 0;
4741 q_vector->rx.total_packets = 0;
4742 q_vector->tx.total_bytes = 0;
4743 q_vector->tx.total_packets = 0;
4746 static void igc_ring_irq_enable(struct igc_q_vector *q_vector)
4748 struct igc_adapter *adapter = q_vector->adapter;
4751 if ((q_vector->rx.ring && (adapter->rx_itr_setting & 3)) ||
4752 (!q_vector->rx.ring && (adapter->tx_itr_setting & 3))) {
4754 igc_set_itr(q_vector);
4756 igc_update_ring_itr(q_vector);
4761 wr32(IGC_EIMS, q_vector->eims_value);
4803 struct igc_q_vector *q_vector = container_of(napi,
4806 struct igc_ring *rx_ring = q_vector->rx.ring;
4810 if (q_vector->tx.ring)
4811 clean_complete = igc_clean_tx_irq(q_vector, budget);
4815 igc_clean_rx_irq_zc(q_vector, budget) :
4816 igc_clean_rx_irq(q_vector, budget);
4831 igc_ring_irq_enable(q_vector);
4846 * We allocate one q_vector. If allocation fails we return -ENOMEM.
4853 struct igc_q_vector *q_vector;
4863 /* allocate q_vector and rings */
4864 q_vector = adapter->q_vector[v_idx];
4865 if (!q_vector)
4866 q_vector = kzalloc(struct_size(q_vector, ring, ring_count),
4869 memset(q_vector, 0, struct_size(q_vector, ring, ring_count));
4870 if (!q_vector)
4874 netif_napi_add(adapter->netdev, &q_vector->napi, igc_poll);
4876 /* tie q_vector and adapter together */
4877 adapter->q_vector[v_idx] = q_vector;
4878 q_vector->adapter = adapter;
4881 q_vector->tx.work_limit = adapter->tx_work_limit;
4884 q_vector->itr_register = adapter->io_addr + IGC_EITR(0);
4885 q_vector->itr_val = IGC_START_ITR;
4888 ring = q_vector->ring;
4894 q_vector->itr_val = adapter->rx_itr_setting;
4898 q_vector->itr_val = adapter->tx_itr_setting;
4907 ring->q_vector = q_vector;
4909 /* update q_vector Tx values */
4910 igc_add_ring(ring, &q_vector->tx);
4929 ring->q_vector = q_vector;
4931 /* update q_vector Rx values */
4932 igc_add_ring(ring, &q_vector->rx);
4949 * We allocate one q_vector per queue interrupt. If allocation fails we
5093 struct igc_q_vector *q_vector = adapter->q_vector[vector];
5095 if (q_vector->rx.ring)
5097 q_vector->rx.ring->queue_index,
5100 if (q_vector->tx.ring)
5102 q_vector->tx.ring->queue_index,
5122 napi = &adapter->q_vector[i]->napi;
5130 igc_assign_vector(adapter->q_vector[0], 0);
5352 if (adapter->q_vector[i]) {
5353 napi_synchronize(&adapter->q_vector[i]->napi);
5355 napi_disable(&adapter->q_vector[i]->napi);
5634 * @data: pointer to a q_vector
5666 static void igc_write_itr(struct igc_q_vector *q_vector)
5668 u32 itr_val = q_vector->itr_val & IGC_QVECTOR_MASK;
5670 if (!q_vector->set_itr)
5678 writel(itr_val, q_vector->itr_register);
5679 q_vector->set_itr = 0;
5684 struct igc_q_vector *q_vector = data;
5687 igc_write_itr(q_vector);
5689 napi_schedule(&q_vector->napi);
5719 struct igc_q_vector *q_vector = adapter->q_vector[i];
5723 q_vector->itr_register = adapter->io_addr + IGC_EITR(vector);
5725 if (q_vector->rx.ring && q_vector->tx.ring)
5726 sprintf(q_vector->name, "%s-TxRx-%u", netdev->name,
5727 q_vector->rx.ring->queue_index);
5728 else if (q_vector->tx.ring)
5729 sprintf(q_vector->name, "%s-tx-%u", netdev->name,
5730 q_vector->tx.ring->queue_index);
5731 else if (q_vector->rx.ring)
5732 sprintf(q_vector->name, "%s-rx-%u", netdev->name,
5733 q_vector->rx.ring->queue_index);
5735 sprintf(q_vector->name, "%s-unused", netdev->name);
5738 igc_msix_ring, 0, q_vector->name,
5739 q_vector);
5743 netif_napi_set_irq(&q_vector->napi,
5757 adapter->q_vector[i]);
5991 struct igc_q_vector *q_vector = adapter->q_vector[i];
5994 if (!q_vector->rx.ring)
5997 rx_ring = adapter->rx_ring[q_vector->rx.ring->queue_index];
6000 eics |= q_vector->eims_value;
6036 struct igc_q_vector *q_vector = adapter->q_vector[0];
6041 igc_write_itr(q_vector);
6060 napi_schedule(&q_vector->napi);
6073 struct igc_q_vector *q_vector = adapter->q_vector[0];
6086 igc_write_itr(q_vector);
6106 napi_schedule(&q_vector->napi);
6120 adapter->q_vector[i]);
6156 igc_assign_vector(adapter->q_vector[0], 0);
6234 napi = &adapter->q_vector[i]->napi;
6912 struct igc_q_vector *q_vector)
6917 eics |= q_vector->eims_value;
6924 struct igc_q_vector *q_vector;
6941 q_vector = adapter->q_vector[queue_id];
6942 if (!napi_if_scheduled_mark_missed(&q_vector->napi))
6943 igc_trigger_rxtxq_interrupt(adapter, q_vector);
7776 struct igc_hw *hw = &ring->q_vector->adapter->hw;
7794 struct igc_adapter *adapter = ring->q_vector->adapter;
7812 struct igc_adapter *adapter = ring->q_vector->adapter;