git: 40accc7235c2 - main - aq(4): adopt native FreeBSD errno convention

From: Adrian Chadd <adrian_at_FreeBSD.org>
Date: Sat, 20 Jun 2026 19:10:36 UTC
The branch main has been updated by adrian:

URL: https://cgit.FreeBSD.org/src/commit/?id=40accc7235c2f0d2072f051099d183e7f21c2731

commit 40accc7235c2f0d2072f051099d183e7f21c2731
Author:     Nick Price <nick@spun.io>
AuthorDate: 2026-06-20 19:02:42 +0000
Commit:     Adrian Chadd <adrian@FreeBSD.org>
CommitDate: 2026-06-20 19:10:15 +0000

    aq(4): adopt native FreeBSD errno convention
    
    Convert the driver's internal error-handling chain from the Linux
    negative-errno convention to FreeBSD positive errno everywhere.
    
    - All `return (-EXXX)` become `return (EXXX)`, `int err = -EXXX` loses
      the sign, and `if (err < 0)` checks become `if (err != 0)` across
      aq_fw.c, aq_fw1x.c, aq_fw2x.c and aq_hw.c.
    - mac_soft_reset_flb_ returns ETIMEDOUT/0 instead of a bool so it
      matches its RBL sibling.
    - The ETIME and EOK aliases in aq_common.h are removed; all sites use
      ETIMEDOUT and 0 directly, and the `rc = -rc` sign flips in
      aq_if_attach_pre are dropped.
    
    Turn AQ_HW_WAIT_FOR into a statement expression evaluating to 0 on
    success or ETIMEDOUT on timeout, assigned explicitly at all seven call
    sites, instead of silently assigning ETIMEDOUT to a variable named err
    in the caller scope.  A statement expression rather than an inline
    function because every call must re-evaluate its condition each
    iteration -- one even assigns hw->mbox_addr as a side effect.
    
    Fix two correctness bugs surfaced by the conversion:
    
    - fw1x_get_stats gated its stats copy with `if (err >= 0)`, correct
      under negative errno but accepting every positive errno after the
      flip.  Change to `if (err == 0)`.
    - fw2x_reset returned 0 regardless of capability-download failure,
      silently leaving fw_caps = 0.  Return the real err.
    
    Harden aq_if_attach_pre: bit_alloc(4096, M_AQ, M_NOWAIT) was unchecked,
    so under OOM a later `ifconfig vlanN create` would NULL-deref the
    bitstring; check for NULL and fail with ENOMEM.  The fail label's
    hardcoded `return (ENXIO)` becomes `return (rc)` so each error path
    reports its real errno.
    
    Remove the dead error checks in aq_hw_offload_set: the
    `if (err != 0) goto err_exit` blocks after the void tpo_/rpo_/tdm_
    register-write helpers were unreachable (err is never set), and the real
    error capture is the aq_hw_err_from_flags call at the function tail.
    Drop the now-orphaned err_exit label.
    
    Reviewed by:    adrian
    Differential Revision:  https://reviews.freebsd.org/D57435
---
 sys/dev/aq/aq_common.h | 17 ++++----------
 sys/dev/aq/aq_fw.c     | 32 ++++++++++++-------------
 sys/dev/aq/aq_fw1x.c   | 24 +++++++++----------
 sys/dev/aq/aq_fw2x.c   | 34 +++++++++++++--------------
 sys/dev/aq/aq_hw.c     | 64 ++++++++++++++++++++++----------------------------
 sys/dev/aq/aq_main.c   | 21 ++++++++++-------
 6 files changed, 91 insertions(+), 101 deletions(-)

diff --git a/sys/dev/aq/aq_common.h b/sys/dev/aq/aq_common.h
index f31567480ec0..6529f249ff62 100644
--- a/sys/dev/aq/aq_common.h
+++ b/sys/dev/aq/aq_common.h
@@ -38,9 +38,6 @@
 #include <sys/types.h>
 
 
-#define ETIME ETIMEDOUT
-#define EOK 0
-
 #define BIT(nr) (1UL << (nr))
 
 #define usec_delay(x) DELAY(x)
@@ -50,16 +47,12 @@
 #define msec_delay_irq(x) DELAY(x*1000)
 #endif
 
-#define AQ_HW_WAIT_FOR(_B_, _US_, _N_) \
-do { \
-        unsigned int i; \
-	for (i = _N_; (!(_B_)) && i; --i) { \
+#define AQ_HW_WAIT_FOR(_B_, _US_, _N_) ({ \
+	unsigned int _i; \
+	for (_i = (_N_); !(_B_) && _i; --_i) \
 		usec_delay(_US_); \
-	} \
-	if (!i) { \
-		err = -1; \
-	} \
-} while (0)
+	(_i == 0) ? ETIMEDOUT : 0; \
+})
 
 
 #define LOWORD(a) ((uint16_t)(a))
diff --git a/sys/dev/aq/aq_fw.c b/sys/dev/aq/aq_fw.c
index 3ab5909882e1..487137e9c61e 100644
--- a/sys/dev/aq/aq_fw.c
+++ b/sys/dev/aq/aq_fw.c
@@ -112,7 +112,7 @@ aq_fw_reset(struct aq_hw* hw)
 
 	if (k == 1000) {
 		aq_log_error("Neither RBL nor FLB started");
-		return (-EBUSY);
+		return (EBUSY);
 	}
 
 	hw->rbl_enabled = bootExitCode != 0;
@@ -133,7 +133,7 @@ aq_fw_reset(struct aq_hw* hw)
 
 	aq_fw_bootloader_mode mode = boot_mode_unknown;
 	int err = mac_soft_reset_(hw, &mode);
-	if (err < 0) {
+	if (err != 0) {
 		aq_log_error("MAC reset failed: %d", err);
 		return (err);
 	}
@@ -151,12 +151,12 @@ aq_fw_reset(struct aq_hw* hw)
 
 	case boot_mode_unknown:
 		aq_log_error("F/W bootload error: unknown bootloader type");
-		return (-ENOTSUP);
+		return (ENOTSUP);
 
 	case boot_mode_rbl_host_bootload:
 #if AQ_CFG_HOST_BOOT_DISABLE
 		aq_log_error("RBL> Host Bootload mode: this driver does not support Host Boot");
-		return (-ENOTSUP);
+		return (ENOTSUP);
 #else
 		trace(dbg_init, "RBL> Host Bootload mode");
 		break;
@@ -168,7 +168,7 @@ aq_fw_reset(struct aq_hw* hw)
 	 */
 	aq_log_error("RBL> F/W Host Bootload not implemented");
 
-	return (-ENOTSUP);
+	return (ENOTSUP);
 }
 
 int
@@ -184,16 +184,16 @@ aq_fw_ops_init(struct aq_hw* hw)
 	if (hw->fw_version.major_version == 1) {
 		trace(dbg_init, "using F/W ops v1.x");
 		hw->fw_ops = &aq_fw1x_ops;
-		return (EOK);
+		return (0);
 	} else if (hw->fw_version.major_version >= 2) {
 		trace(dbg_init, "using F/W ops v2.x");
 		hw->fw_ops = &aq_fw2x_ops;
-		return (EOK);
+		return (0);
 	}
 
 	aq_log_error("aq_fw_ops_init(): invalid F/W version %#x",
 	    hw->fw_version.raw);
-	return (-ENOTSUP);
+	return (ENOTSUP);
 }
 
 
@@ -260,7 +260,7 @@ mac_soft_reset_flb_(struct aq_hw* hw)
 		if (flb_status == 0) {
 			trace_error(dbg_init,
 			    "FLB> MAC kickstart failed: timed out");
-			return (false);
+			return (ETIMEDOUT);
 		}
 
 		trace(dbg_init, "FLB> MAC kickstart done, %d ms", k);
@@ -290,11 +290,11 @@ mac_soft_reset_flb_(struct aq_hw* hw)
 
 	if (!restart_completed) {
 		trace_error(dbg_init, "FLB> Global Soft Reset failed");
-		return (false);
+		return (ETIMEDOUT);
 	}
 
 	trace(dbg_init, "FLB> F/W restart: %d ms", k * 10);
-	return (true);
+	return (0);
 }
 
 int
@@ -331,7 +331,7 @@ mac_soft_reset_rbl_(struct aq_hw* hw, aq_fw_bootloader_mode* mode)
 
 	if (rbl_status == 0 || rbl_status == 0xDEAD) {
 		trace_error(dbg_init, "RBL> RBL restart failed: timeout");
-		return (-EBUSY);
+		return (EBUSY);
 	}
 
 	if (rbl_status == RBL_STATUS_SUCCESS) {
@@ -344,10 +344,10 @@ mac_soft_reset_rbl_(struct aq_hw* hw, aq_fw_bootloader_mode* mode)
 		trace(dbg_init, "RBL> reset complete! [Host Bootload]");
 	} else {
 		trace_error(dbg_init, "unknown RBL status 0x%x", rbl_status);
-		return (-EBUSY);
+		return (EBUSY);
 	}
 
-	return (EOK);
+	return (0);
 }
 
 int
@@ -355,12 +355,12 @@ wait_init_mac_firmware_(struct aq_hw* hw)
 {
 	for (int i = 0; i < MAC_FW_START_TIMEOUT_MS; ++i) {
 		if ((hw->fw_version.raw = AQ_READ_REG(hw, 0x18)) != 0)
-			return (EOK);
+			return (0);
 
 		msec_delay(1);
 	}
 
 	trace_error(dbg_init,
 	    "timeout waiting for reg 0x18. MAC f/w NOT READY");
-	return (-EBUSY);
+	return (EBUSY);
 }
diff --git a/sys/dev/aq/aq_fw1x.c b/sys/dev/aq/aq_fw1x.c
index 5a409eef15f4..f5458b174c3f 100644
--- a/sys/dev/aq/aq_fw1x.c
+++ b/sys/dev/aq/aq_fw1x.c
@@ -186,7 +186,7 @@ fw1x_reset(struct aq_hw* hal)
 			 * Compare transaction ID to initial value.
 			 * If it's different means f/w is alive. We're done.
 			 */
-			return (EOK);
+			return (0);
 		}
 
 		/*
@@ -197,7 +197,7 @@ fw1x_reset(struct aq_hw* hal)
 	}
 
 	trace_error(dbg_init, "F/W 1.x reset finalize timeout");
-	return (-EBUSY);
+	return (EBUSY);
 }
 
 int
@@ -213,7 +213,7 @@ fw1x_set_mode(struct aq_hw* hw, enum aq_hw_fw_mpi_state_e mode,
 
 	AQ_WRITE_REG(hw, FW1X_MPI_CONTROL_ADR, state.val);
 
-	return (EOK);
+	return (0);
 }
 
 int
@@ -250,15 +250,15 @@ fw1x_get_mode(struct aq_hw* hw, enum aq_hw_fw_mpi_state_e* mode,
 
 	*fc = aq_fw_fc_none;
 
-	AQ_DBG_EXIT(EOK);
-	return (EOK);
+	AQ_DBG_EXIT(0);
+	return (0);
 }
 
 
 int
 fw1x_get_mac_addr(struct aq_hw* hw, uint8_t* mac)
 {
-	int err = -EFAULT;
+	int err = EFAULT;
 	uint32_t mac_addr[2];
 
 	AQ_DBG_ENTER();
@@ -266,13 +266,13 @@ fw1x_get_mac_addr(struct aq_hw* hw, uint8_t* mac)
 	uint32_t efuse_shadow_addr = AQ_READ_REG(hw, 0x374);
 	if (efuse_shadow_addr == 0) {
 		trace_error(dbg_init, "couldn't read eFUSE Shadow Address");
-		AQ_DBG_EXIT(-EFAULT);
-		return (-EFAULT);
+		AQ_DBG_EXIT(EFAULT);
+		return (EFAULT);
 	}
 
 	err = aq_hw_fw_downld_dwords(hw, efuse_shadow_addr + (40 * 4),
 	    mac_addr, ARRAY_SIZE(mac_addr));
-	if (err < 0) {
+	if (err != 0) {
 		mac_addr[0] = 0;
 		mac_addr[1] = 0;
 		AQ_DBG_EXIT(err);
@@ -287,8 +287,8 @@ fw1x_get_mac_addr(struct aq_hw* hw, uint8_t* mac)
 	trace(dbg_init, "fw1x> eFUSE MAC addr -> %02x-%02x-%02x-%02x-%02x-%02x",
 	    mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
 
-	AQ_DBG_EXIT(EOK);
-	return (EOK);
+	AQ_DBG_EXIT(0);
+	return (0);
 }
 
 int
@@ -300,7 +300,7 @@ fw1x_get_stats(struct aq_hw* hw, struct aq_hw_stats_s* stats)
 	err = aq_hw_fw_downld_dwords(hw, hw->mbox_addr,
 	    (uint32_t*)(void*)&hw->mbox, sizeof hw->mbox / sizeof(uint32_t));
 
-	if (err >= 0) {
+	if (err == 0) {
 		if (stats != &hw->mbox.stats)
 			memcpy(stats, &hw->mbox.stats, sizeof *stats);
 
diff --git a/sys/dev/aq/aq_fw2x.c b/sys/dev/aq/aq_fw2x.c
index 004121242ac1..aee7d80d7013 100644
--- a/sys/dev/aq/aq_fw2x.c
+++ b/sys/dev/aq/aq_fw2x.c
@@ -240,7 +240,7 @@ fw2x_reset(struct aq_hw* hw)
 	int err = aq_hw_fw_downld_dwords(hw,
 	    hw->mbox_addr + offsetof(fw2x_mailbox, caps),
 	    (uint32_t*)&caps, sizeof caps/sizeof(uint32_t));
-	if (err == EOK) {
+	if (err == 0) {
 		hw->fw_caps = caps.caps_lo | ((uint64_t)caps.caps_hi << 32);
 		trace(dbg_init,
 		     "fw2x> F/W capabilities mask = %llx",
@@ -250,8 +250,8 @@ fw2x_reset(struct aq_hw* hw)
 		     "fw2x> can't get F/W capabilities mask, error %d", err);
 	}
 
-	AQ_DBG_EXIT(EOK);
-	return (EOK);
+	AQ_DBG_EXIT(err);
+	return (err);
 }
 
 
@@ -310,12 +310,12 @@ fw2x_set_mode(struct aq_hw* hw, enum aq_hw_fw_mpi_state_e mode,
 
 	default:
 		trace_error(dbg_init, "fw2x> unknown MPI state %d", mode);
-		return (-EINVAL);
+		return (EINVAL);
 	}
 
 	set_mpi_ctrl_(hw, mpi_ctrl);
-	AQ_DBG_EXIT(EOK);
-	return (EOK);
+	AQ_DBG_EXIT(0);
+	return (0);
 }
 
 int
@@ -355,14 +355,14 @@ fw2x_get_mode(struct aq_hw* hw, enum aq_hw_fw_mpi_state_e* mode,
 	    (32 + CAPS_HI_PAUSE);
 
 //    AQ_DBG_EXIT(0);
-	return (EOK);
+	return (0);
 }
 
 
 int
 fw2x_get_mac_addr(struct aq_hw* hw, uint8_t* mac)
 {
-	int err = -EFAULT;
+	int err = EFAULT;
 	uint32_t mac_addr[2];
 
 	AQ_DBG_ENTER();
@@ -370,13 +370,13 @@ fw2x_get_mac_addr(struct aq_hw* hw, uint8_t* mac)
 	uint32_t efuse_shadow_addr = AQ_READ_REG(hw, 0x364);
 	if (efuse_shadow_addr == 0) {
 		trace_error(dbg_init, "couldn't read eFUSE Shadow Address");
-		AQ_DBG_EXIT(-EFAULT);
-		return (-EFAULT);
+		AQ_DBG_EXIT(EFAULT);
+		return (EFAULT);
 	}
 
 	err = aq_hw_fw_downld_dwords(hw, efuse_shadow_addr + (40 * 4), mac_addr,
 	    ARRAY_SIZE(mac_addr));
-	if (err < 0) {
+	if (err != 0) {
 		mac_addr[0] = 0;
 		mac_addr[1] = 0;
 		AQ_DBG_EXIT(err);
@@ -388,8 +388,8 @@ fw2x_get_mac_addr(struct aq_hw* hw, uint8_t* mac)
 
 	memcpy(mac, (uint8_t*)mac_addr, ETHER_ADDR_LEN);
 
-	AQ_DBG_EXIT(EOK);
-	return (EOK);
+	AQ_DBG_EXIT(0);
+	return (0);
 }
 
 static inline void
@@ -468,14 +468,14 @@ fw2x_get_stats(struct aq_hw* hw, struct aq_hw_stats_s* stats)
 
 	if ((hw->fw_caps & FW2X_CAP_STATISTICS) == 0) {
 		trace_warn(dbg_fw, "fw2x> statistics not supported by F/W");
-		return (-ENOTSUP);
+		return (ENOTSUP);
 	}
 
 	// Tell F/W to update the statistics.
 	if (!toggle_mpi_ctrl_and_wait_(hw, FW2X_CAP_STATISTICS, 1, 25)) {
 		trace_error(dbg_fw, "fw2x> statistics update timeout");
-		AQ_DBG_EXIT(-ETIME);
-		return (-ETIME);
+		AQ_DBG_EXIT(ETIMEDOUT);
+		return (ETIMEDOUT);
 	}
 
 	err = aq_hw_fw_downld_dwords(hw,
@@ -484,7 +484,7 @@ fw2x_get_stats(struct aq_hw* hw, struct aq_hw_stats_s* stats)
 
 	fw2x_stats_to_fw_stats_(stats, &fw2x_stats);
 
-	if (err != EOK)
+	if (err != 0)
 		trace_error(dbg_fw,
 		    "fw2x> download statistics data FAILED, error %d", err);
 
diff --git a/sys/dev/aq/aq_hw.c b/sys/dev/aq/aq_hw.c
index 3e3e4a9d2f47..f3f47c7ecb1e 100644
--- a/sys/dev/aq/aq_hw.c
+++ b/sys/dev/aq/aq_hw.c
@@ -81,16 +81,16 @@ aq_hw_fw_downld_dwords(struct aq_hw *hw, uint32_t a, uint32_t *p, uint32_t cnt)
 	int err = 0;
 
 //    AQ_DBG_ENTER();
-	AQ_HW_WAIT_FOR(reg_glb_cpu_sem_get(hw, AQ_HW_FW_SM_RAM) == 1U, 1U,
+	err = AQ_HW_WAIT_FOR(reg_glb_cpu_sem_get(hw, AQ_HW_FW_SM_RAM) == 1U, 1U,
 	     10000U);
 
-	if (err < 0) {
+	if (err != 0) {
 		bool is_locked;
 
 		reg_glb_cpu_sem_set(hw, 1U, AQ_HW_FW_SM_RAM);
 		is_locked = reg_glb_cpu_sem_get(hw, AQ_HW_FW_SM_RAM);
 		if (!is_locked) {
-			err = -ETIME;
+			err = ETIMEDOUT;
 			goto err_exit;
 		}
 	}
@@ -101,10 +101,10 @@ aq_hw_fw_downld_dwords(struct aq_hw *hw, uint32_t a, uint32_t *p, uint32_t cnt)
 		mif_mcp_up_mailbox_execute_operation_set(hw, 1);
 
 		if (IS_CHIP_FEATURE(hw, REVISION_B1))
-			AQ_HW_WAIT_FOR(a != mif_mcp_up_mailbox_addr_get(hw),
+			err = AQ_HW_WAIT_FOR(a != mif_mcp_up_mailbox_addr_get(hw),
 			    1U, 1000U);
 		else
-			AQ_HW_WAIT_FOR(!mif_mcp_up_mailbox_busy_get(hw), 1,
+			err = AQ_HW_WAIT_FOR(!mif_mcp_up_mailbox_busy_get(hw), 1,
 			     1000U);
 
 		*(p++) = mif_mcp_up_mailbox_data_get(hw);
@@ -142,16 +142,16 @@ aq_hw_init_ucp(struct aq_hw *hw)
 	hw->fw_version.raw = 0;
 
 	err = aq_fw_reset(hw);
-	if (err != EOK) {
+	if (err != 0) {
 		aq_log_error("aq_hw_init_ucp(): F/W reset failed, err %d", err);
 		return (err);
 	}
 
 	aq_hw_chip_features_init(hw, &hw->chip_features);
 	err = aq_fw_ops_init(hw);
-	if (err < 0) {
+	if (err != 0) {
 		aq_log_error("could not initialize F/W ops, err %d", err);
-		return (-1);
+		return (err);
 	}
 
 	if (hw->fw_version.major_version == 1) {
@@ -169,7 +169,7 @@ aq_hw_init_ucp(struct aq_hw *hw)
 	}
 
 	/* check 10 times by 1ms */
-	AQ_HW_WAIT_FOR((hw->mbox_addr = AQ_READ_REG(hw, 0x360)) != 0, 400U, 20);
+	err = AQ_HW_WAIT_FOR((hw->mbox_addr = AQ_READ_REG(hw, 0x360)) != 0, 400U, 20);
 
 	aq_hw_fw_version ver_expected = { .raw = AQ_CFG_FW_MIN_VER_EXPECTED };
 	if (!aq_hw_ver_match(&ver_expected, &hw->fw_version))
@@ -187,7 +187,7 @@ aq_hw_mpi_create(struct aq_hw *hw)
 
 	AQ_DBG_ENTER();
 	err = aq_hw_init_ucp(hw);
-	if (err < 0)
+	if (err != 0)
 		goto err_exit;
 
 err_exit:
@@ -204,11 +204,11 @@ aq_hw_mpi_read_stats(struct aq_hw *hw, struct aq_hw_fw_mbox *pmbox)
 	if (hw->fw_ops && hw->fw_ops->get_stats) {
 		err = hw->fw_ops->get_stats(hw, &pmbox->stats);
 	} else {
-		err = -ENOTSUP;
+		err = ENOTSUP;
 		aq_log_error("get_stats() not supported by F/W");
 	}
 
-	if (err == EOK) {
+	if (err == 0) {
 		pmbox->stats.dpc = reg_rx_dma_stat_counter7get(hw);
 		pmbox->stats.cprc = stats_rx_lro_coalesced_pkt_count0_get(hw);
 	}
@@ -220,7 +220,7 @@ aq_hw_mpi_read_stats(struct aq_hw *hw, struct aq_hw_fw_mbox *pmbox)
 static int
 aq_hw_mpi_set(struct aq_hw *hw, enum aq_hw_fw_mpi_state_e state, uint32_t speed)
 {
-	int err = -ENOTSUP;
+	int err = ENOTSUP;
 	AQ_DBG_ENTERA("speed %d", speed);
 
 	if (hw->fw_ops && hw->fw_ops->set_mode) {
@@ -242,7 +242,7 @@ aq_hw_set_link_speed(struct aq_hw *hw, uint32_t speed)
 int
 aq_hw_get_link_state(struct aq_hw *hw, uint32_t *link_speed, struct aq_hw_fc_info *fc_neg)
 {
-	int err = EOK;
+	int err = 0;
 
  //   AQ_DBG_ENTER();
 
@@ -254,11 +254,11 @@ aq_hw_get_link_state(struct aq_hw *hw, uint32_t *link_speed, struct aq_hw_fc_inf
 		err = hw->fw_ops->get_mode(hw, &mode, &speed, &fc);
 	} else {
 		aq_log_error("get_mode() not supported by F/W");
-		AQ_DBG_EXIT(-ENOTSUP);
-		return (-ENOTSUP);
+		AQ_DBG_EXIT(ENOTSUP);
+		return (ENOTSUP);
 	}
 
-	if (err < 0) {
+	if (err != 0) {
 		aq_log_error("get_mode() failed, err %d", err);
 		AQ_DBG_EXIT(err);
 		return (err);
@@ -298,7 +298,7 @@ aq_hw_get_link_state(struct aq_hw *hw, uint32_t *link_speed, struct aq_hw_fc_inf
 int
 aq_hw_get_mac_permanent(struct aq_hw *hw,  uint8_t *mac)
 {
-	int err = -ENOTSUP;
+	int err = ENOTSUP;
 	AQ_DBG_ENTER();
 
 	if (hw->fw_ops && hw->fw_ops->get_mac_addr)
@@ -330,7 +330,7 @@ aq_hw_get_mac_permanent(struct aq_hw *hw,  uint8_t *mac)
 		h >>= 8;
 		mac[0] = (uint8_t)(0xFFU & h);
 
-		err = EOK;
+		err = 0;
 	}
 
 	AQ_DBG_EXIT(err);
@@ -366,15 +366,15 @@ aq_hw_reset(struct aq_hw *hw)
 	AQ_DBG_ENTER();
 
 	err = aq_fw_reset(hw);
-	if (err < 0)
+	if (err != 0)
 		goto err_exit;
 
 	itr_irq_reg_res_dis_set(hw, 0);
 	itr_res_irq_set(hw, 1);
 
 	/* check 10 times by 1ms */
-	AQ_HW_WAIT_FOR(itr_res_irq_get(hw) == 0, 1000, 10);
-	if (err < 0) {
+	err = AQ_HW_WAIT_FOR(itr_res_irq_get(hw) == 0, 1000, 10);
+	if (err != 0) {
 		printf("atlantic: IRQ reset failed: %d", err);
 		goto err_exit;
 	}
@@ -456,21 +456,14 @@ aq_hw_offload_set(struct aq_hw *hw)
 	/* TX checksums offloads*/
 	tpo_ipv4header_crc_offload_en_set(hw, 1);
 	tpo_tcp_udp_crc_offload_en_set(hw, 1);
-	if (err < 0)
-		goto err_exit;
 
 	/* RX checksums offloads*/
 	rpo_ipv4header_crc_offload_en_set(hw, 1);
 	rpo_tcp_udp_crc_offload_en_set(hw, 1);
-	if (err < 0)
-		goto err_exit;
 
 	/* LSO offloads*/
 	tdm_large_send_offload_en_set(hw, 0xFFFFFFFFU);
-	if (err < 0)
-		goto err_exit;
 
-/* LRO offloads */
 	{
 		uint32_t i = 0;
 		uint32_t val = (8U < HW_ATL_B0_LRO_RXD_MAX) ? 0x3U :
@@ -505,7 +498,6 @@ aq_hw_offload_set(struct aq_hw *hw)
 
 	err = aq_hw_err_from_flags(hw);
 
-err_exit:
 	AQ_DBG_EXIT(err);
 	return (err);
 }
@@ -606,7 +598,7 @@ aq_hw_mac_addr_set(struct aq_hw *hw, uint8_t *mac_addr, uint8_t index)
 
 	AQ_DBG_ENTER();
 	if (!mac_addr) {
-		err = -EINVAL;
+		err = EINVAL;
 		goto err_exit;
 	}
 	h = (mac_addr[0] << 8) | (mac_addr[1]);
@@ -654,7 +646,7 @@ aq_hw_init(struct aq_hw *hw, uint8_t *mac_addr, uint8_t adm_irq, bool msix)
 	aq_hw_qos_set(hw);
 
 	err = aq_hw_err_from_flags(hw);
-	if (err < 0)
+	if (err != 0)
 		goto err_exit;
 
 	/* Interrupts */
@@ -835,9 +827,9 @@ aq_hw_rss_hash_set(struct aq_hw_s *self,
 		rpf_rss_key_wr_data_set(self, key_data);
 		rpf_rss_key_addr_set(self, addr);
 		rpf_rss_key_wr_en_set(self, 1U);
-		AQ_HW_WAIT_FOR(rpf_rss_key_wr_en_get(self) == 0,
+		err = AQ_HW_WAIT_FOR(rpf_rss_key_wr_en_get(self) == 0,
 			       1000U, 10U);
-		if (err < 0)
+		if (err != 0)
 			goto err_exit;
 	}
 
@@ -899,9 +891,9 @@ aq_hw_rss_set(struct aq_hw_s *self,
 		rpf_rss_redir_tbl_wr_data_set(self, bitary[i]);
 		rpf_rss_redir_tbl_addr_set(self, i);
 		rpf_rss_redir_wr_en_set(self, 1U);
-		AQ_HW_WAIT_FOR(rpf_rss_redir_wr_en_get(self) == 0,
+		err = AQ_HW_WAIT_FOR(rpf_rss_redir_wr_en_get(self) == 0,
 			       1000U, 10U);
-		if (err < 0)
+		if (err != 0)
 			goto err_exit;
 	}
 
diff --git a/sys/dev/aq/aq_main.c b/sys/dev/aq/aq_main.c
index ebe8b13da795..fd278826bd2d 100644
--- a/sys/dev/aq/aq_main.c
+++ b/sys/dev/aq/aq_main.c
@@ -363,7 +363,7 @@ aq_if_attach_pre(if_ctx_t ctx)
 
 	/* Look up ops and caps. */
 	rc = aq_hw_mpi_create(hw);
-	if (rc < 0) {
+	if (rc != 0) {
 		AQ_DBG_ERROR(" %s: aq_hw_mpi_create fail err=%d", __func__, rc);
 		goto fail;
 	}
@@ -375,10 +375,11 @@ aq_if_attach_pre(if_ctx_t ctx)
 		aq_hw_reset(&softc->hw);
 	aq_hw_capabilities(softc);
 
-	if (aq_hw_get_mac_permanent(hw, hw->mac_addr) < 0) {
+	rc = aq_hw_get_mac_permanent(hw, hw->mac_addr);
+	if (rc != 0) {
 		AQ_DBG_ERROR("Unable to get mac addr from hw");
 		goto fail;
-	};
+	}
 
 	softc->admin_ticks = 0;
 
@@ -417,7 +418,11 @@ aq_if_attach_pre(if_ctx_t ctx)
 	/* iflib will map and release this bar */
 	scctx->isc_msix_bar = pci_msix_table_bar(softc->dev);
 
-	softc->vlan_tags  = bit_alloc(4096, M_AQ, M_NOWAIT);
+	softc->vlan_tags = bit_alloc(4096, M_AQ, M_NOWAIT);
+	if (softc->vlan_tags == NULL) {
+		rc = ENOMEM;
+		goto fail;
+	}
 
 	AQ_DBG_EXIT(rc);
 	return (rc);
@@ -428,7 +433,7 @@ fail:
 		    softc->mmio_rid, softc->mmio_res);
 
 	AQ_DBG_EXIT(rc);
-	return (ENXIO);
+	return (rc);
 }
 
 
@@ -672,7 +677,7 @@ aq_if_init(if_ctx_t ctx)
 
 	err = aq_hw_init(&softc->hw, softc->hw.mac_addr, softc->msix,
 	    softc->scctx->isc_intr == IFLIB_INTR_MSIX);
-	if (err != EOK) {
+	if (err != 0) {
 		device_printf(softc->dev, "atlantic: aq_hw_init: %d", err);
 	}
 
@@ -688,7 +693,7 @@ aq_if_init(if_ctx_t ctx)
 			    "atlantic: aq_ring_tx_init: %d", err);
 		}
 		err = aq_ring_tx_start(hw, ring);
-		if (err != EOK) {
+		if (err != 0) {
 			device_printf(softc->dev,
 			    "atlantic: aq_ring_tx_start: %d", err);
 		}
@@ -701,7 +706,7 @@ aq_if_init(if_ctx_t ctx)
 			    "atlantic: aq_ring_rx_init: %d", err);
 		}
 		err = aq_ring_rx_start(hw, ring);
-		if (err != EOK) {
+		if (err != 0) {
 			device_printf(softc->dev,
 			    "atlantic: aq_ring_rx_start: %d", err);
 		}