diff options
author | qctecmdr <qctecmdr@localhost> | 2019-04-18 05:14:03 -0700 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2019-04-18 05:14:03 -0700 |
commit | 340693a4079ec7e813d7e0728acf67126b2d7093 (patch) | |
tree | 9ea1a23434651c5407c0d62d4b4de564a6fd69c7 | |
parent | 5bd0ffcc446c6e5e74f01f61aa55dc6016ad258a (diff) | |
parent | a046b9df8665bf18f559926c1e5689016be40a1b (diff) | |
download | data-kernel-340693a4079ec7e813d7e0728acf67126b2d7093.tar.gz |
Merge "rmnet_perf: Spinlock fix for module param"
-rw-r--r-- | drivers/rmnet/perf/rmnet_perf_opt.c | 10 |
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; } |