Skip to content

Commit e686243

Browse files
AxelLinbrgl
authored andcommitted
gpio: mlxbf2: Fix sleeping while holding spinlock
mutex_lock() can sleep, don't call mutex_lock() while holding spin_lock. Fixes: bc0ae0e ("gpio: add driver for Mellanox BlueField 2 GPIO controller") Signed-off-by: Axel Lin <[email protected]> Acked-by: [email protected] Signed-off-by: Bartosz Golaszewski <[email protected]>
1 parent e75dfba commit e686243

File tree

1 file changed

+3
-3
lines changed

1 file changed

+3
-3
lines changed

drivers/gpio/gpio-mlxbf2.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -127,17 +127,17 @@ static int mlxbf2_gpio_lock_acquire(struct mlxbf2_gpio_context *gs)
127127
{
128128
u32 arm_gpio_lock_val;
129129

130-
spin_lock(&gs->gc.bgpio_lock);
131130
mutex_lock(yu_arm_gpio_lock_param.lock);
131+
spin_lock(&gs->gc.bgpio_lock);
132132

133133
arm_gpio_lock_val = readl(yu_arm_gpio_lock_param.io);
134134

135135
/*
136136
* When lock active bit[31] is set, ModeX is write enabled
137137
*/
138138
if (YU_LOCK_ACTIVE_BIT(arm_gpio_lock_val)) {
139-
mutex_unlock(yu_arm_gpio_lock_param.lock);
140139
spin_unlock(&gs->gc.bgpio_lock);
140+
mutex_unlock(yu_arm_gpio_lock_param.lock);
141141
return -EINVAL;
142142
}
143143

@@ -152,8 +152,8 @@ static int mlxbf2_gpio_lock_acquire(struct mlxbf2_gpio_context *gs)
152152
static void mlxbf2_gpio_lock_release(struct mlxbf2_gpio_context *gs)
153153
{
154154
writel(YU_ARM_GPIO_LOCK_RELEASE, yu_arm_gpio_lock_param.io);
155-
mutex_unlock(yu_arm_gpio_lock_param.lock);
156155
spin_unlock(&gs->gc.bgpio_lock);
156+
mutex_unlock(yu_arm_gpio_lock_param.lock);
157157
}
158158

159159
/*

0 commit comments

Comments
 (0)