summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorqctecmdr <qctecmdr@localhost>2019-04-18 05:14:03 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2019-04-18 05:14:03 -0700
commit340693a4079ec7e813d7e0728acf67126b2d7093 (patch)
tree9ea1a23434651c5407c0d62d4b4de564a6fd69c7
parent5bd0ffcc446c6e5e74f01f61aa55dc6016ad258a (diff)
parenta046b9df8665bf18f559926c1e5689016be40a1b (diff)
downloaddata-kernel-340693a4079ec7e813d7e0728acf67126b2d7093.tar.gz
Merge "rmnet_perf: Spinlock fix for module param"
-rw-r--r--drivers/rmnet/perf/rmnet_perf_opt.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/rmnet/perf/rmnet_perf_opt.c b/drivers/rmnet/perf/rmnet_perf_opt.c
index 91d7e72..991800d 100644
--- a/drivers/rmnet/perf/rmnet_perf_opt.c
+++ b/drivers/rmnet/perf/rmnet_perf_opt.c
@@ -78,13 +78,17 @@ static int rmnet_perf_set_opt_mode(const char *val,
const struct kernel_param *kp)
{
struct rmnet_perf *perf;
+ unsigned long ht_flags;
int old_mode = rmnet_perf_opt_mode;
int rc = -EINVAL;
char value[4];
strlcpy(value, val, 4);
value[3] = '\0';
- spin_lock(&rmnet_perf_opt_lock);
+
+ local_bh_disable();
+ spin_lock_irqsave(&rmnet_perf_opt_lock, ht_flags);
+
if (!strcmp(value, "tcp"))
rmnet_perf_opt_mode = RMNET_PERF_OPT_MODE_TCP;
else if (!strcmp(value, "udp"))
@@ -121,7 +125,9 @@ static int rmnet_perf_set_opt_mode(const char *val,
}
out:
- spin_unlock(&rmnet_perf_opt_lock);
+ spin_unlock_irqrestore(&rmnet_perf_opt_lock, ht_flags);
+ local_bh_enable();
+
return rc;
}