]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
wifi: iwlwifi: cfg: Limit cb_size to valid range
authorPei Xiao <xiaopei01@kylinos.cn>
Tue, 27 May 2025 08:03:55 +0000 (16:03 +0800)
committerMiri Korenblit <miriam.rachel.korenblit@intel.com>
Wed, 18 Jun 2025 07:40:52 +0000 (10:40 +0300)
on arm64 defconfig build failed with gcc-8:

drivers/net/wireless/intel/iwlwifi/pcie/ctxt-info.c:208:3:
include/linux/bitfield.h:195:3: error: call to '__field_overflow'
declared with attribute error: value doesn't fit into mask
   __field_overflow();     \
   ^~~~~~~~~~~~~~~~~~
include/linux/bitfield.h:215:2: note: in expansion of macro '____MAKE_OP'
  ____MAKE_OP(u##size,u##size,,)
  ^~~~~~~~~~~
include/linux/bitfield.h:218:1: note: in expansion of macro '__MAKE_OP'
 __MAKE_OP(32)

Limit cb_size to valid range to fix it.

Signed-off-by: Pei Xiao <xiaopei01@kylinos.cn>
Link: https://patch.msgid.link/7b373a4426070d50b5afb3269fd116c18ce3aea8.1748332709.git.xiaopei01@kylinos.cn
Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
drivers/net/wireless/intel/iwlwifi/pcie/ctxt-info.c

index cb36baac14da88874b7b13074180dc2a20366048..4f2be0c1bd97e7797331fec8f31a61629e9938e1 100644 (file)
@@ -166,7 +166,7 @@ int iwl_pcie_ctxt_info_init(struct iwl_trans *trans,
        struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
        struct iwl_context_info *ctxt_info;
        struct iwl_context_info_rbd_cfg *rx_cfg;
-       u32 control_flags = 0, rb_size;
+       u32 control_flags = 0, rb_size, cb_size;
        dma_addr_t phys;
        int ret;
 
@@ -202,11 +202,12 @@ int iwl_pcie_ctxt_info_init(struct iwl_trans *trans,
                rb_size = IWL_CTXT_INFO_RB_SIZE_4K;
        }
 
-       WARN_ON(RX_QUEUE_CB_SIZE(iwl_trans_get_num_rbds(trans)) > 12);
+       cb_size = RX_QUEUE_CB_SIZE(iwl_trans_get_num_rbds(trans));
+       if (WARN_ON(cb_size > 12))
+               cb_size = 12;
+
        control_flags = IWL_CTXT_INFO_TFD_FORMAT_LONG;
-       control_flags |=
-               u32_encode_bits(RX_QUEUE_CB_SIZE(iwl_trans_get_num_rbds(trans)),
-                               IWL_CTXT_INFO_RB_CB_SIZE);
+       control_flags |= u32_encode_bits(cb_size, IWL_CTXT_INFO_RB_CB_SIZE);
        control_flags |= u32_encode_bits(rb_size, IWL_CTXT_INFO_RB_SIZE);
        ctxt_info->control.control_flags = cpu_to_le32(control_flags);