iwlwifi: pcie: fix global table size
authorSara Sharon <sara.sharon@intel.com>
Mon, 14 Mar 2016 11:11:47 +0000 (13:11 +0200)
committerEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Wed, 30 Mar 2016 13:21:19 +0000 (16:21 +0300)
My patch resized the pool size, but neglected to resize
the global table, which is obviously wrong since the global
table maps the pool's rxb to vid one to one. This results
in a panic in 9000 devices.
Add a build bug to avoid such a case in the future.

Fixes: 7b5424361ec9 ("iwlwifi: pcie: fine tune number of rxbs")
Reported-by: Haim Dreyfuss <haim.dreyfuss@intel.com>
Signed-off-by: Sara Sharon <sara.sharon@intel.com>
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
drivers/net/wireless/intel/iwlwifi/pcie/internal.h
drivers/net/wireless/intel/iwlwifi/pcie/rx.c

index dadafbdef9d946199b8be927a2478fea079150b1..34bf7cede7f454f80ffe4140ea63e1c13ed2aca6 100644 (file)
@@ -348,7 +348,7 @@ struct iwl_tso_hdr_page {
 struct iwl_trans_pcie {
        struct iwl_rxq *rxq;
        struct iwl_rx_mem_buffer rx_pool[RX_POOL_SIZE];
-       struct iwl_rx_mem_buffer *global_table[MQ_RX_TABLE_SIZE];
+       struct iwl_rx_mem_buffer *global_table[RX_POOL_SIZE];
        struct iwl_rb_allocator rba;
        struct iwl_trans *trans;
        struct iwl_drv *drv;
index 4be3c35afd1928913c31b7b4fccb45f5776b5721..e379dbab685a1e8e55b21b78f5d1e626f6f1ad0d 100644 (file)
@@ -908,6 +908,8 @@ int iwl_pcie_rx_init(struct iwl_trans *trans)
        allocator_pool_size = trans->num_rx_queues *
                (RX_CLAIM_REQ_ALLOC - RX_POST_REQ_ALLOC);
        num_alloc = queue_size + allocator_pool_size;
+       BUILD_BUG_ON(ARRAY_SIZE(trans_pcie->global_table) !=
+                    ARRAY_SIZE(trans_pcie->rx_pool));
        for (i = 0; i < num_alloc; i++) {
                struct iwl_rx_mem_buffer *rxb = &trans_pcie->rx_pool[i];