src/dpdk/drivers/net/ice/base/ice_common.c
static enum ice_status
ice_sq_send_cmd_retry(struct ice_hw *hw, struct ice_ctl_q_info *cq,
		      struct ice_aq_desc *desc, void *buf, u16 buf_size,
		      struct ice_sq_cd *cd)
{
	struct ice_aq_desc desc_cpy;
	enum ice_status status;
	bool is_cmd_for_retry;
	u8 *buf_cpy = NULL;
	u8 idx = 0;
	u16 opcode;

	opcode = LE16_TO_CPU(desc->opcode);
	is_cmd_for_retry = ice_should_retry_sq_send_cmd(opcode);
	ice_memset(&desc_cpy, 0, sizeof(desc_cpy), ICE_NONDMA_MEM);

	if (is_cmd_for_retry) {
		if (buf) {
			buf_cpy = (u8 *)ice_malloc(hw, buf_size);
			if (!buf_cpy)
				return ICE_ERR_NO_MEMORY;
		}

		ice_memcpy(&desc_cpy, desc, sizeof(desc_cpy),
			   ICE_NONDMA_TO_NONDMA);
	}

	do {
		status = ice_sq_send_cmd(hw, cq, desc, buf, buf_size, cd);

		if (!is_cmd_for_retry || status == ICE_SUCCESS ||
		    hw->adminq.sq_last_status != ICE_AQ_RC_EBUSY)
			break;

		if (buf_cpy)
			ice_memcpy(buf, buf_cpy, buf_size,
				   ICE_NONDMA_TO_NONDMA);

		ice_memcpy(desc, &desc_cpy, sizeof(desc_cpy),
			   ICE_NONDMA_TO_NONDMA);

		ice_msec_delay(ICE_SQ_SEND_DELAY_TIME_MS, false);

	} while (++idx < ICE_SQ_SEND_MAX_EXECUTE);

	if (buf_cpy)
		ice_free(hw, buf_cpy);

	return status;
}
/**
 * ice_sq_send_cmd_retry - send command to Control Queue (ATQ)
 * @hw: pointer to the HW struct
 * @cq: pointer to the specific Control queue
 * @desc: prefilled descriptor describing the command
 * @buf: buffer to use for indirect commands (or NULL for direct commands)
 * @buf_size: size of buffer for indirect commands (or 0 for direct commands)
 * @cd: pointer to command details structure
 *
 * Retry sending the FW Admin Queue command, multiple times, to the FW Admin
 * Queue if the EBUSY AQ error is returned.
 */


Retry sending the FW Admin Queue command, multiple times, to the FW Admin
Queue if the EBUSY AQ error is returned.
Retry sending the FW Admin Queue command multiple times to the FW Admin Queue if the EBUSY AQ error is returned .
static enum ice_status
ice_sq_send_cmd_retry(struct ice_hw *hw, struct ice_ctl_q_info *cq,
		      struct ice_aq_desc *desc, void *buf, u16 buf_size,
		      struct ice_sq_cd *cd)
{
	struct ice_aq_desc desc_cpy;
	enum ice_status status;
	bool is_cmd_for_retry;
	u8 *buf_cpy = NULL;
	u8 idx = 0;
	u16 opcode;
	opcode = LE16_TO_CPU(desc->opcode);
	is_cmd_for_retry = ice_should_retry_sq_send_cmd(opcode);
	ice_memset(&desc_cpy, 0, sizeof(desc_cpy), ICE_NONDMA_MEM);
	if (is_cmd_for_retry) {
		if (buf) {
			buf_cpy = (u8 *)ice_malloc(hw, buf_size);
			if (!buf_cpy)
				return ICE_ERR_NO_MEMORY;
		}
		ice_memcpy(&desc_cpy, desc, sizeof(desc_cpy),
			   ICE_NONDMA_TO_NONDMA);
	}
	do {
		status = ice_sq_send_cmd(hw, cq, desc, buf, buf_size, cd);
		if (!is_cmd_for_retry || status == ICE_SUCCESS ||
		    hw->adminq.sq_last_status != ICE_AQ_RC_EBUSY)
			break;
		if (buf_cpy)
			ice_memcpy(buf, buf_cpy, buf_size,
				   ICE_NONDMA_TO_NONDMA);
		ice_memcpy(desc, &desc_cpy, sizeof(desc_cpy),
			   ICE_NONDMA_TO_NONDMA);
		ice_msec_delay(ICE_SQ_SEND_DELAY_TIME_MS, false);
	} while (++idx < ICE_SQ_SEND_MAX_EXECUTE);
	if (buf_cpy)
		ice_free(hw, buf_cpy);
	return status;
}
static enum ice_status ice_sq_send_cmd_retry ( struct ice_hw * hw , struct ice_ctl_q_info * cq , struct ice_aq_desc * desc , void * buf , u16 buf_size , struct ice_sq_cd * cd ) { struct ice_aq_desc desc_cpy ; enum ice_status status ; bool is_cmd_for_retry ; u8 * buf_cpy = NULL ; u8 idx = 0 ; u16 opcode ; opcode = LE16_TO_CPU ( desc -> opcode ) ; is_cmd_for_retry = ice_should_retry_sq_send_cmd ( opcode ) ; ice_memset ( & desc_cpy , 0 , sizeof ( desc_cpy ) , ICE_NONDMA_MEM ) ; if ( is_cmd_for_retry ) { if ( buf ) { buf_cpy = ( u8 * ) ice_malloc ( hw , buf_size ) ; if ( ! buf_cpy ) return ICE_ERR_NO_MEMORY ; } ice_memcpy ( & desc_cpy , desc , sizeof ( desc_cpy ) , ICE_NONDMA_TO_NONDMA ) ; } do { status = ice_sq_send_cmd ( hw , cq , desc , buf , buf_size , cd ) ; if ( ! is_cmd_for_retry || status == ICE_SUCCESS || hw -> adminq . sq_last_status != ICE_AQ_RC_EBUSY ) break ; if ( buf_cpy ) ice_memcpy ( buf , buf_cpy , buf_size , ICE_NONDMA_TO_NONDMA ) ; ice_memcpy ( desc , & desc_cpy , sizeof ( desc_cpy ) , ICE_NONDMA_TO_NONDMA ) ; ice_msec_delay ( ICE_SQ_SEND_DELAY_TIME_MS , false ) ; } while ( ++ idx < ICE_SQ_SEND_MAX_EXECUTE ) ; if ( buf_cpy ) ice_free ( hw , buf_cpy ) ; return status ; }
ice_sq_send_cmd_retry - send command to Control Queue (ATQ)
 @hw: pointer to the HW struct
 @cq: pointer to the specific Control queue
 @desc: prefilled descriptor describing the command
 @buf: buffer to use for indirect commands (or NULL for direct commands)
 @buf_size: size of buffer for indirect commands (or 0 for direct commands)
 @cd: pointer to command details structure
ice_sq_send_cmd_retry - send command to Control Queue ( ATQ ) @hw : pointer to the HW struct @cq : pointer to the specific Control queue @desc : prefilled descriptor describing the command @buf : buffer to use for indirect commands ( or NULL for direct commands ) @buf_size : size of buffer for indirect commands ( or 0 for direct commands ) @cd : pointer to command details structure