ibmvnic: Consolidate code in replenish_rx_pool()
authorSukadev Bhattiprolu <sukadev@linux.ibm.com>
Wed, 15 Sep 2021 03:52:51 +0000 (20:52 -0700)
committerDavid S. Miller <davem@davemloft.net>
Wed, 15 Sep 2021 10:12:23 +0000 (11:12 +0100)
For better readability, consolidate related code in replenish_rx_pool()
and add some comments.

Reviewed-by: Rick Lindsley <ricklind@linux.vnet.ibm.com>
Reviewed-by: Dany Madden <drt@linux.ibm.com>
Signed-off-by: Sukadev Bhattiprolu <sukadev@linux.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/ibm/ibmvnic.c

index a775c69e4fd7f089d56341fca8ad979bd98c3488..e8b1231be48579c1c5f31c9f2763ab36b465d7f1 100644 (file)
@@ -371,6 +371,8 @@ static void replenish_rx_pool(struct ibmvnic_adapter *adapter,
                }
 
                index = pool->free_map[pool->next_free];
+               pool->free_map[pool->next_free] = IBMVNIC_INVALID_MAP;
+               pool->next_free = (pool->next_free + 1) % pool->size;
 
                if (pool->rx_buff[index].skb)
                        dev_err(dev, "Inconsistent free_map!\n");
@@ -380,14 +382,15 @@ static void replenish_rx_pool(struct ibmvnic_adapter *adapter,
                dst = pool->long_term_buff.buff + offset;
                memset(dst, 0, pool->buff_size);
                dma_addr = pool->long_term_buff.addr + offset;
-               pool->rx_buff[index].data = dst;
 
-               pool->free_map[pool->next_free] = IBMVNIC_INVALID_MAP;
+               /* add the skb to an rx_buff in the pool */
+               pool->rx_buff[index].data = dst;
                pool->rx_buff[index].dma = dma_addr;
                pool->rx_buff[index].skb = skb;
                pool->rx_buff[index].pool_index = pool->index;
                pool->rx_buff[index].size = pool->buff_size;
 
+               /* queue the rx_buff for the next send_subcrq_indirect */
                sub_crq = &ind_bufp->indir_arr[ind_bufp->index++];
                memset(sub_crq, 0, sizeof(*sub_crq));
                sub_crq->rx_add.first = IBMVNIC_CRQ_CMD;
@@ -405,7 +408,8 @@ static void replenish_rx_pool(struct ibmvnic_adapter *adapter,
                shift = 8;
 #endif
                sub_crq->rx_add.len = cpu_to_be32(pool->buff_size << shift);
-               pool->next_free = (pool->next_free + 1) % pool->size;
+
+               /* if send_subcrq_indirect queue is full, flush to VIOS */
                if (ind_bufp->index == IBMVNIC_MAX_IND_DESCS ||
                    i == count - 1) {
                        lpar_rc =