--- x/drivers/infiniband/core/device.c +++ y/drivers/infiniband/core/device.c @@ -506,6 +506,7 @@ static void ib_device_release(struct dev if (dev->hw_stats_data) ib_device_release_hw_stats(dev->hw_stats_data); if (dev->port_data) { + ib_cache_cleanup_one(dev); ib_cache_release_one(dev); ib_security_release_port_pkey_list(dev); rdma_counter_release(dev); --- x/drivers/infiniband/core/cache.c +++ y/drivers/infiniband/core/cache.c @@ -393,11 +393,7 @@ static void del_gid(struct ib_device *ib write_lock_irq(&table->rwlock); entry = table->data_vec[ix]; entry->state = GID_TABLE_ENTRY_PENDING_DEL; - /* - * For non RoCE protocol, GID entry slot is ready to use. - */ - if (!rdma_protocol_roce(ib_dev, port)) - table->data_vec[ix] = NULL; + table->data_vec[ix] = NULL; write_unlock_irq(&table->rwlock); if (rdma_cap_roce_gid_table(ib_dev, port)) @@ -824,7 +820,7 @@ static void cleanup_gid_table_port(struc mutex_lock(&table->lock); for (i = 0; i < table->sz; ++i) { - if (is_gid_entry_valid(table->data_vec[i])) + if (table->data_vec[i]) del_gid(ib_dev, port, table, i); } mutex_unlock(&table->lock);