Messages in this thread Patch in this message | | | From | Peng Hao <> | Subject | [PATCH V5 3/4] misc/pvpanic: Avoid initializing multiple pvpanic devices | Date | Sun, 17 Feb 2019 00:50:42 +0800 |
| |
Avoid initializing multiple pvpanic devices when configure multiple pvpanic device driver type. Make sure that only one pvpanic device is working.
Signed-off-by: Peng Hao <peng.hao2@zte.com.cn> --- drivers/misc/pvpanic/pvpanic.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/drivers/misc/pvpanic/pvpanic.c b/drivers/misc/pvpanic/pvpanic.c index ccadec0..fbb5038 100644 --- a/drivers/misc/pvpanic/pvpanic.c +++ b/drivers/misc/pvpanic/pvpanic.c @@ -15,10 +15,13 @@ #include <linux/types.h> static struct { + struct mutex lock; struct platform_device *pdev; void __iomem *base; bool is_ioport; -} pvpanic_data; +} pvpanic_data = { + .lock = __MUTEX_INITIALIZER(pvpanic_data.lock), +}; #define PVPANIC_PANICKED (1 << 0) @@ -50,6 +53,12 @@ int pvpanic_add_device(struct device *dev, struct resource *res) struct platform_device *pdev; int ret; + mutex_lock(&pvpanic_data.lock); + if (pvpanic_data.pdev) { + mutex_unlock(&pvpanic_data.lock); + return -EEXIST; + } + pdev = platform_device_alloc("pvpanic", -1); if (!pdev) return -ENOMEM; @@ -64,9 +73,11 @@ int pvpanic_add_device(struct device *dev, struct resource *res) if (ret) goto err; pvpanic_data.pdev = pdev; + mutex_unlock(&pvpanic_data.lock); return 0; err: + mutex_unlock(&pvpanic_data.lock); platform_device_put(pdev); return ret; } -- 1.8.3.1
| |