/* * Remove bdi from bdi_list, and ensure that it is no longer visible */ static void bdi_remove_from_list(struct backing_dev_info *bdi) { spin_lock_bh(&bdi_lock); list_del_rcu(&bdi->bdi_list); spin_unlock_bh(&bdi_lock); synchronize_rcu_expedited(); }
static void acpi_os_map_cleanup(struct acpi_ioremap *map) { if (!map->refcount) { synchronize_rcu_expedited(); acpi_unmap(map->phys, map->virt); kfree(map); } }
/* * Test each non-SRCU synchronous grace-period wait API. This is * useful just after a change in mode for these primitives, and * during early boot. */ void rcu_test_sync_prims(void) { if (!IS_ENABLED(CONFIG_PROVE_RCU)) return; synchronize_rcu(); synchronize_rcu_bh(); synchronize_sched(); synchronize_rcu_expedited(); synchronize_rcu_bh_expedited(); synchronize_sched_expedited(); }
void mlx4_cq_free(struct mlx4_dev *dev, struct mlx4_cq *cq, int flags) { struct mlx4_priv *priv = mlx4_priv(dev); struct mlx4_cq_table *cq_table = &priv->cq_table; int err; err = mlx4_HW2SW_CQ(dev, NULL, cq->cqn); if (err) mlx4_warn(dev, "HW2SW_CQ failed (%d) for CQN %06x\n", err, cq->cqn); synchronize_irq(priv->eq_table.eq[cq->vector].irq); spin_lock_irq(&cq_table->lock); radix_tree_delete(&cq_table->tree, cq->cqn); spin_unlock_irq(&cq_table->lock); if (flags & MLX4_RCU_USE_EXPEDITED) synchronize_rcu_expedited(); else synchronize_rcu(); mlx4_cq_free_icm(dev, cq->cqn); }