On Sun, Jan 03, 2021 at 09:11:24AM -0800, James Smart wrote: > +static inline struct efct_hw_io * > +_efct_hw_io_alloc(struct efct_hw *hw) > +{ > + struct efct_hw_io *io = NULL; > + > + if (!list_empty(&hw->io_free)) { > + io = list_first_entry(&hw->io_free, struct efct_hw_io, > + list_entry); > + list_del(&io->list_entry); > + } > + if (io) { > + INIT_LIST_HEAD(&io->list_entry); > + list_add_tail(&io->list_entry, &hw->io_inuse); > + io->state = EFCT_HW_IO_STATE_INUSE; > + io->abort_reqtag = U32_MAX; > + io->wq = hw->wq_cpu_array[raw_smp_processor_id()]; This one will also crash for system with more than 128 CPUs. > + if (!io->wq) { > + efc_log_err(hw->os, "WQ not assigned for cpu:%d\n", > + raw_smp_processor_id()); > + io->wq = hw->hw_wq[0]; > + } > + kref_init(&io->ref); > + io->release = efct_hw_io_free_internal; > + } else { > + atomic_add_return(1, &hw->io_alloc_failed_count); > + } > + > + return io; > +}