diff options
| author | Jason Gunthorpe <jgg@nvidia.com> | 2021-10-19 14:09:25 -0300 | 
|---|---|---|
| committer | Jason Gunthorpe <jgg@nvidia.com> | 2021-10-19 14:09:25 -0300 | 
| commit | 71ee1f1275432421307d27dd4df43f33e60456de (patch) | |
| tree | a69e771c98ca332d0872612b61413b7fbd9e2765 /kernel/workqueue.c | |
| parent | ac0fffa0859b8e1e991939663b3ebdd80bf979e6 (diff) | |
| parent | ae0579acde812bc1efd074086ae3bc5eae170f20 (diff) | |
Merge brank 'mlx5_mkey' into rdma.git for-next
A small series to clean up the mlx5 mkey code across the mlx5_core and
InfiniBand.
* branch 'mlx5_mkey':
  RDMA/mlx5: Attach ndescs to mlx5_ib_mkey
  RDMA/mlx5: Move struct mlx5_core_mkey to mlx5_ib
  RDMA/mlx5: Replace struct mlx5_core_mkey by u32 key
  RDMA/mlx5: Remove pd from struct mlx5_core_mkey
  RDMA/mlx5: Remove size from struct mlx5_core_mkey
  RDMA/mlx5: Remove iova from struct mlx5_core_mkey
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
Diffstat (limited to 'kernel/workqueue.c')
| -rw-r--r-- | kernel/workqueue.c | 18 | 
1 files changed, 16 insertions, 2 deletions
diff --git a/kernel/workqueue.c b/kernel/workqueue.c index 33a6b4a2443d..1b3eb1e9531f 100644 --- a/kernel/workqueue.c +++ b/kernel/workqueue.c @@ -4830,8 +4830,16 @@ void show_workqueue_state(void)  		for_each_pwq(pwq, wq) {  			raw_spin_lock_irqsave(&pwq->pool->lock, flags); -			if (pwq->nr_active || !list_empty(&pwq->inactive_works)) +			if (pwq->nr_active || !list_empty(&pwq->inactive_works)) { +				/* +				 * Defer printing to avoid deadlocks in console +				 * drivers that queue work while holding locks +				 * also taken in their write paths. +				 */ +				printk_deferred_enter();  				show_pwq(pwq); +				printk_deferred_exit(); +			}  			raw_spin_unlock_irqrestore(&pwq->pool->lock, flags);  			/*  			 * We could be printing a lot from atomic context, e.g. @@ -4849,7 +4857,12 @@ void show_workqueue_state(void)  		raw_spin_lock_irqsave(&pool->lock, flags);  		if (pool->nr_workers == pool->nr_idle)  			goto next_pool; - +		/* +		 * Defer printing to avoid deadlocks in console drivers that +		 * queue work while holding locks also taken in their write +		 * paths. +		 */ +		printk_deferred_enter();  		pr_info("pool %d:", pool->id);  		pr_cont_pool_info(pool);  		pr_cont(" hung=%us workers=%d", @@ -4864,6 +4877,7 @@ void show_workqueue_state(void)  			first = false;  		}  		pr_cont("\n"); +		printk_deferred_exit();  	next_pool:  		raw_spin_unlock_irqrestore(&pool->lock, flags);  		/*  | 
