|
@@ -1654,20 +1654,25 @@ static void process_tid_release_list(struct work_struct *work)
|
|
|
*/
|
|
|
void cxgb4_remove_tid(struct tid_info *t, unsigned int chan, unsigned int tid)
|
|
|
{
|
|
|
- void *old;
|
|
|
struct sk_buff *skb;
|
|
|
struct adapter *adap = container_of(t, struct adapter, tids);
|
|
|
|
|
|
- old = t->tid_tab[tid];
|
|
|
+ WARN_ON(tid >= t->ntids);
|
|
|
+
|
|
|
+ if (t->tid_tab[tid]) {
|
|
|
+ t->tid_tab[tid] = NULL;
|
|
|
+ if (t->hash_base && (tid >= t->hash_base))
|
|
|
+ atomic_dec(&t->hash_tids_in_use);
|
|
|
+ else
|
|
|
+ atomic_dec(&t->tids_in_use);
|
|
|
+ }
|
|
|
+
|
|
|
skb = alloc_skb(sizeof(struct cpl_tid_release), GFP_ATOMIC);
|
|
|
if (likely(skb)) {
|
|
|
- t->tid_tab[tid] = NULL;
|
|
|
mk_tid_release(skb, chan, tid);
|
|
|
t4_ofld_send(adap, skb);
|
|
|
} else
|
|
|
cxgb4_queue_tid_release(t, chan, tid);
|
|
|
- if (old)
|
|
|
- atomic_dec(&t->tids_in_use);
|
|
|
}
|
|
|
EXPORT_SYMBOL(cxgb4_remove_tid);
|
|
|
|
|
@@ -1705,6 +1710,7 @@ static int tid_init(struct tid_info *t)
|
|
|
t->afree = NULL;
|
|
|
t->atids_in_use = 0;
|
|
|
atomic_set(&t->tids_in_use, 0);
|
|
|
+ atomic_set(&t->hash_tids_in_use, 0);
|
|
|
|
|
|
/* Setup the free list for atid_tab and clear the stid bitmap. */
|
|
|
if (natids) {
|
|
@@ -4814,6 +4820,22 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|
|
adapter->params.offload = 0;
|
|
|
}
|
|
|
|
|
|
+ if (is_offload(adapter)) {
|
|
|
+ if (t4_read_reg(adapter, LE_DB_CONFIG_A) & HASHEN_F) {
|
|
|
+ u32 hash_base, hash_reg;
|
|
|
+
|
|
|
+ if (chip <= CHELSIO_T5) {
|
|
|
+ hash_reg = LE_DB_TID_HASHBASE_A;
|
|
|
+ hash_base = t4_read_reg(adapter, hash_reg);
|
|
|
+ adapter->tids.hash_base = hash_base / 4;
|
|
|
+ } else {
|
|
|
+ hash_reg = T6_LE_DB_HASH_TID_BASE_A;
|
|
|
+ hash_base = t4_read_reg(adapter, hash_reg);
|
|
|
+ adapter->tids.hash_base = hash_base;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/* See what interrupts we'll be using */
|
|
|
if (msi > 1 && enable_msix(adapter) == 0)
|
|
|
adapter->flags |= USING_MSIX;
|