aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/generic/patches-2.6.33/923-gpiommc-configfs-locking.patch
blob: 2e4e820b2beb4361b60eb2cf6ca056e1b30e8fce (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
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);
 
pan> the patch name should be named like that : <index number>-this\_fixes\_bug\_foo\_and\_bar.patch \item if several, they have to be indexed with an integer number : 100-patch1, 200-patch2 ... \end{itemize} Your patch will be read and most likely be used as-is by the developpers if it is clean and working. If not, the patch will be accepted anyway and modified to be OpenWrt-rules compliant \subsubsection{Closing a ticket} A ticket might be closed by a developer because: \begin{itemize} \item the problem is already fixed (wontfix) \item the problem described is not judged as valid, and comes along with an explanation why (invalid) \item the developers know that this bug will be fixed upstream (wontfix) \item the problem is very similar to something that has already been reported (duplicate) \item the problem cannot be reproduced by the developers (worksforme) \end{itemize} A the same time, the reporter may want to get the ticket closed since he is not longer able to trigger the bug, or found it invalid by himself. When a ticket is closed by a developer and marked as "fixed", the comment contains the subversion changeset which corrects the bug.