hc
2024-02-19 1c055e55a242a33e574e48be530e06770a210dcd
kernel/drivers/usb/gadget/legacy/inode.c
....@@ -12,6 +12,7 @@
1212 #include <linux/init.h>
1313 #include <linux/module.h>
1414 #include <linux/fs.h>
15
+#include <linux/fs_context.h>
1516 #include <linux/pagemap.h>
1617 #include <linux/uts.h>
1718 #include <linux/wait.h>
....@@ -20,7 +21,7 @@
2021 #include <linux/sched.h>
2122 #include <linux/slab.h>
2223 #include <linux/poll.h>
23
-#include <linux/mmu_context.h>
24
+#include <linux/kthread.h>
2425 #include <linux/aio.h>
2526 #include <linux/uio.h>
2627 #include <linux/refcount.h>
....@@ -228,6 +229,7 @@
228229 */
229230
230231 static const char *CHIP;
232
+static DEFINE_MUTEX(sb_mutex); /* Serialize superblock operations */
231233
232234 /*----------------------------------------------------------------------*/
233235
....@@ -313,7 +315,7 @@
313315 case STATE_EP_READY: /* not configured yet */
314316 if (is_write)
315317 return 0;
316
- // FALLTHRU
318
+ fallthrough;
317319 case STATE_EP_UNBOUND: /* clean disconnect */
318320 break;
319321 // case STATE_EP_DISABLED: /* "can't happen" */
....@@ -345,7 +347,7 @@
345347 spin_unlock_irq (&epdata->dev->lock);
346348
347349 if (likely (value == 0)) {
348
- value = wait_event_interruptible (done.wait, done.done);
350
+ value = wait_for_completion_interruptible(&done);
349351 if (value != 0) {
350352 spin_lock_irq (&epdata->dev->lock);
351353 if (likely (epdata->ep != NULL)) {
....@@ -354,13 +356,14 @@
354356 usb_ep_dequeue (epdata->ep, epdata->req);
355357 spin_unlock_irq (&epdata->dev->lock);
356358
357
- wait_event (done.wait, done.done);
359
+ wait_for_completion(&done);
358360 if (epdata->status == -ECONNRESET)
359361 epdata->status = -EINTR;
360362 } else {
361363 spin_unlock_irq (&epdata->dev->lock);
362364
363365 DBG (epdata->dev, "endpoint gone\n");
366
+ wait_for_completion(&done);
364367 epdata->status = -ENODEV;
365368 }
366369 }
....@@ -463,9 +466,9 @@
463466 struct kiocb *iocb = priv->iocb;
464467 size_t ret;
465468
466
- use_mm(mm);
469
+ kthread_use_mm(mm);
467470 ret = copy_to_iter(priv->buf, priv->actual, &priv->to);
468
- unuse_mm(mm);
471
+ kthread_unuse_mm(mm);
469472 if (!ret)
470473 ret = -EFAULT;
471474
....@@ -1085,7 +1088,7 @@
10851088 case GADGETFS_DISCONNECT:
10861089 if (dev->state == STATE_DEV_SETUP)
10871090 dev->setup_abort = 1;
1088
- // FALL THROUGH
1091
+ fallthrough;
10891092 case GADGETFS_CONNECT:
10901093 dev->ev_next = 0;
10911094 break;
....@@ -1220,27 +1223,27 @@
12201223 if (dev->state <= STATE_DEV_OPENED)
12211224 return DEFAULT_POLLMASK;
12221225
1223
- poll_wait(fd, &dev->wait, wait);
1226
+ poll_wait(fd, &dev->wait, wait);
12241227
1225
- spin_lock_irq (&dev->lock);
1228
+ spin_lock_irq(&dev->lock);
12261229
1227
- /* report fd mode change before acting on it */
1228
- if (dev->setup_abort) {
1229
- dev->setup_abort = 0;
1230
- mask = EPOLLHUP;
1231
- goto out;
1232
- }
1230
+ /* report fd mode change before acting on it */
1231
+ if (dev->setup_abort) {
1232
+ dev->setup_abort = 0;
1233
+ mask = EPOLLHUP;
1234
+ goto out;
1235
+ }
12331236
1234
- if (dev->state == STATE_DEV_SETUP) {
1235
- if (dev->setup_in || dev->setup_can_stall)
1236
- mask = EPOLLOUT;
1237
- } else {
1238
- if (dev->ev_next != 0)
1239
- mask = EPOLLIN;
1240
- }
1237
+ if (dev->state == STATE_DEV_SETUP) {
1238
+ if (dev->setup_in || dev->setup_can_stall)
1239
+ mask = EPOLLOUT;
1240
+ } else {
1241
+ if (dev->ev_next != 0)
1242
+ mask = EPOLLIN;
1243
+ }
12411244 out:
1242
- spin_unlock_irq(&dev->lock);
1243
- return mask;
1245
+ spin_unlock_irq(&dev->lock);
1246
+ return mask;
12441247 }
12451248
12461249 static long dev_ioctl (struct file *fd, unsigned code, unsigned long value)
....@@ -1394,7 +1397,6 @@
13941397 make_qualifier (dev);
13951398 break;
13961399 case USB_DT_OTHER_SPEED_CONFIG:
1397
- // FALLTHROUGH
13981400 case USB_DT_CONFIG:
13991401 value = config_buf (dev,
14001402 w_value >> 8,
....@@ -1731,7 +1733,7 @@
17311733 case STATE_DEV_UNCONNECTED:
17321734 next_event (dev, GADGETFS_SUSPEND);
17331735 ep0_readable (dev);
1734
- /* FALLTHROUGH */
1736
+ fallthrough;
17351737 default:
17361738 break;
17371739 }
....@@ -1748,7 +1750,7 @@
17481750 .suspend = gadgetfs_suspend,
17491751
17501752 .driver = {
1751
- .name = (char *) shortname,
1753
+ .name = shortname,
17521754 },
17531755 };
17541756
....@@ -1828,8 +1830,9 @@
18281830 spin_lock_irq (&dev->lock);
18291831 value = -EINVAL;
18301832 if (dev->buf) {
1833
+ spin_unlock_irq(&dev->lock);
18311834 kfree(kbuf);
1832
- goto fail;
1835
+ return value;
18331836 }
18341837 dev->buf = kbuf;
18351838
....@@ -1876,8 +1879,8 @@
18761879
18771880 value = usb_gadget_probe_driver(&gadgetfs_driver);
18781881 if (value != 0) {
1879
- kfree (dev->buf);
1880
- dev->buf = NULL;
1882
+ spin_lock_irq(&dev->lock);
1883
+ goto fail;
18811884 } else {
18821885 /* at this point "good" hardware has for the first time
18831886 * let the USB the host see us. alternatively, if users
....@@ -1894,6 +1897,9 @@
18941897 return value;
18951898
18961899 fail:
1900
+ dev->config = NULL;
1901
+ dev->hs_config = NULL;
1902
+ dev->dev = NULL;
18971903 spin_unlock_irq (&dev->lock);
18981904 pr_debug ("%s: %s fail %zd, %p\n", shortname, __func__, value, dev);
18991905 kfree (dev->buf);
....@@ -2003,17 +2009,24 @@
20032009 };
20042010
20052011 static int
2006
-gadgetfs_fill_super (struct super_block *sb, void *opts, int silent)
2012
+gadgetfs_fill_super (struct super_block *sb, struct fs_context *fc)
20072013 {
20082014 struct inode *inode;
20092015 struct dev_data *dev;
2016
+ int rc;
20102017
2011
- if (the_device)
2012
- return -ESRCH;
2018
+ mutex_lock(&sb_mutex);
2019
+
2020
+ if (the_device) {
2021
+ rc = -ESRCH;
2022
+ goto Done;
2023
+ }
20132024
20142025 CHIP = usb_get_gadget_udc_name();
2015
- if (!CHIP)
2016
- return -ENODEV;
2026
+ if (!CHIP) {
2027
+ rc = -ENODEV;
2028
+ goto Done;
2029
+ }
20172030
20182031 /* superblock */
20192032 sb->s_blocksize = PAGE_SIZE;
....@@ -2050,26 +2063,39 @@
20502063 * from binding to a controller.
20512064 */
20522065 the_device = dev;
2053
- return 0;
2066
+ rc = 0;
2067
+ goto Done;
20542068
2055
-Enomem:
2069
+ Enomem:
20562070 kfree(CHIP);
20572071 CHIP = NULL;
2072
+ rc = -ENOMEM;
20582073
2059
- return -ENOMEM;
2074
+ Done:
2075
+ mutex_unlock(&sb_mutex);
2076
+ return rc;
20602077 }
20612078
20622079 /* "mount -t gadgetfs path /dev/gadget" ends up here */
2063
-static struct dentry *
2064
-gadgetfs_mount (struct file_system_type *t, int flags,
2065
- const char *path, void *opts)
2080
+static int gadgetfs_get_tree(struct fs_context *fc)
20662081 {
2067
- return mount_single (t, flags, opts, gadgetfs_fill_super);
2082
+ return get_tree_single(fc, gadgetfs_fill_super);
2083
+}
2084
+
2085
+static const struct fs_context_operations gadgetfs_context_ops = {
2086
+ .get_tree = gadgetfs_get_tree,
2087
+};
2088
+
2089
+static int gadgetfs_init_fs_context(struct fs_context *fc)
2090
+{
2091
+ fc->ops = &gadgetfs_context_ops;
2092
+ return 0;
20682093 }
20692094
20702095 static void
20712096 gadgetfs_kill_sb (struct super_block *sb)
20722097 {
2098
+ mutex_lock(&sb_mutex);
20732099 kill_litter_super (sb);
20742100 if (the_device) {
20752101 put_dev (the_device);
....@@ -2077,6 +2103,7 @@
20772103 }
20782104 kfree(CHIP);
20792105 CHIP = NULL;
2106
+ mutex_unlock(&sb_mutex);
20802107 }
20812108
20822109 /*----------------------------------------------------------------------*/
....@@ -2084,7 +2111,7 @@
20842111 static struct file_system_type gadgetfs_type = {
20852112 .owner = THIS_MODULE,
20862113 .name = shortname,
2087
- .mount = gadgetfs_mount,
2114
+ .init_fs_context = gadgetfs_init_fs_context,
20882115 .kill_sb = gadgetfs_kill_sb,
20892116 };
20902117 MODULE_ALIAS_FS("gadgetfs");