The gpiommc configfs context structure needs locking, as configfs does not lock access between files. --- a/drivers/mmc/host/gpiommc.c +++ b/drivers/mmc/host/gpiommc.c @@ -143,6 +143,8 @@ struct gpiommc_configfs_device { struct platform_device *pdev; /* The configuration */ struct gpiommc_platform_data pdata; + /* Mutex to protect this structure */ + struct mutex mutex; }; #define GPIO_INVALID -1 @@ -233,6 +235,8 @@ static ssize_t gpiommc_config_attr_show( unsigned int gpio; int err = 0; + mutex_lock(&dev->mutex); + if (attr == &gpiommc_attr_DI) { gpio = dev->pdata.pins.gpio_di; if (gpio == GPIO_INVALID) @@ -293,6 +297,8 @@ static ssize_t gpiommc_config_attr_show( WARN_ON(1); err = -ENOSYS; out: + mutex_unlock(&dev->mutex); + return err ? err : count; } @@ -352,6 +358,8 @@ static ssize_t gpiommc_config_attr_store int err = -EINVAL; unsigned long data; + mutex_lock(&dev->mutex); + if (attr == &gpiommc_attr_register) { err = strict_strtoul(page, 10, &data); if (err) @@ -477,6 +485,8 @@ static ssize_t gpiommc_config_attr_store WARN_ON(1); err = -ENOSYS; out: + mutex_unlock(&dev->mutex); + return err ? err : count; } @@ -513,6 +523,7 @@ static struct config_item *gpiommc_make_ if (!dev) return NULL; + mutex_init(&dev->mutex); config_item_init_type_name(&dev->item, name, &gpiommc_dev_ci_type); a href='/cgit/openwrt/em-br6478acv2/master-187ad058/'>summaryrefslogtreecommitdiffstats
path: root/include/prereq.mk
blob: 45ee77e9e6042a9f46af1356ac6a5770dd76ff53 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62