linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 01/15] platform: goldfish: pipe: Move the file-scope goldfish_interrupt_tasklet variable into the driver state
@ 2018-10-03 17:17 rkir
  2018-10-03 17:17 ` [PATCH v3 02/15] platform: goldfish: pipe: Move the file-scope goldfish_pipe_miscdev " rkir
                   ` (13 more replies)
  0 siblings, 14 replies; 30+ messages in thread
From: rkir @ 2018-10-03 17:17 UTC (permalink / raw)
  To: gregkh; +Cc: linux-kernel, tkjos, Roman Kiryanov

From: Roman Kiryanov <rkir@google.com>

This is a series of patches to move mutable file-scope variables
into the driver state. This change will help to introduce another
version of the pipe driver (with different state) for the older
host interface or having several instances of this device.

Signed-off-by: Roman Kiryanov <rkir@google.com>
---
Changes in v3:
 - No change.
Changes in v2:
 - Updated the commit message.

 drivers/platform/goldfish/goldfish_pipe.c | 24 +++++++++++++++--------
 1 file changed, 16 insertions(+), 8 deletions(-)

diff --git a/drivers/platform/goldfish/goldfish_pipe.c b/drivers/platform/goldfish/goldfish_pipe.c
index 56665e879e5a..ba9aede17d57 100644
--- a/drivers/platform/goldfish/goldfish_pipe.c
+++ b/drivers/platform/goldfish/goldfish_pipe.c
@@ -208,6 +208,9 @@ struct goldfish_pipe_dev {
 	int irq;
 	int version;
 	unsigned char __iomem *base;
+
+	/* an irq tasklet to run goldfish_interrupt_task */
+	struct tasklet_struct irq_tasklet;
 };
 
 static struct goldfish_pipe_dev goldfish_pipe_dev;
@@ -582,14 +585,14 @@ static struct goldfish_pipe *signalled_pipes_pop_front(
 	return pipe;
 }
 
-static void goldfish_interrupt_task(unsigned long unused)
+static void goldfish_interrupt_task(unsigned long dev_addr)
 {
 	/* Iterate over the signalled pipes and wake them one by one */
+	struct goldfish_pipe_dev *dev = (struct goldfish_pipe_dev *)dev_addr;
 	struct goldfish_pipe *pipe;
 	int wakes;
 
-	while ((pipe = signalled_pipes_pop_front(&goldfish_pipe_dev, &wakes)) !=
-			NULL) {
+	while ((pipe = signalled_pipes_pop_front(dev, &wakes)) != NULL) {
 		if (wakes & PIPE_WAKE_CLOSED) {
 			pipe->flags = 1 << BIT_CLOSED_ON_HOST;
 		} else {
@@ -605,7 +608,6 @@ static void goldfish_interrupt_task(unsigned long unused)
 		wake_up_interruptible(&pipe->wake_queue);
 	}
 }
-static DECLARE_TASKLET(goldfish_interrupt_tasklet, goldfish_interrupt_task, 0);
 
 /*
  * The general idea of the interrupt handling:
@@ -648,7 +650,7 @@ static irqreturn_t goldfish_pipe_interrupt(int irq, void *dev_id)
 
 	spin_unlock_irqrestore(&dev->lock, flags);
 
-	tasklet_schedule(&goldfish_interrupt_tasklet);
+	tasklet_schedule(&dev->irq_tasklet);
 	return IRQ_HANDLED;
 }
 
@@ -800,9 +802,14 @@ static void write_pa_addr(void *addr, void __iomem *portl, void __iomem *porth)
 static int goldfish_pipe_device_init(struct platform_device *pdev)
 {
 	struct goldfish_pipe_dev *dev = &goldfish_pipe_dev;
-	int err = devm_request_irq(&pdev->dev, dev->irq,
-				goldfish_pipe_interrupt,
-				IRQF_SHARED, "goldfish_pipe", dev);
+	int err;
+
+	tasklet_init(&dev->irq_tasklet, &goldfish_interrupt_task,
+		     (unsigned long)dev);
+
+	err = devm_request_irq(&pdev->dev, dev->irq,
+			       goldfish_pipe_interrupt,
+			       IRQF_SHARED, "goldfish_pipe", dev);
 	if (err) {
 		dev_err(&pdev->dev, "unable to allocate IRQ for v2\n");
 		return err;
@@ -854,6 +861,7 @@ static int goldfish_pipe_device_init(struct platform_device *pdev)
 static void goldfish_pipe_device_deinit(struct platform_device *pdev)
 {
 	misc_deregister(&goldfish_pipe_miscdev);
+	tasklet_kill(&goldfish_pipe_dev.irq_tasklet);
 	kfree(goldfish_pipe_dev.pipes);
 	free_page((unsigned long)goldfish_pipe_dev.buffers);
 }
-- 
2.19.0.605.g01d371f741-goog


^ permalink raw reply related	[flat|nested] 30+ messages in thread

end of thread, other threads:[~2018-10-16 21:02 UTC | newest]

Thread overview: 30+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-10-03 17:17 [PATCH v3 01/15] platform: goldfish: pipe: Move the file-scope goldfish_interrupt_tasklet variable into the driver state rkir
2018-10-03 17:17 ` [PATCH v3 02/15] platform: goldfish: pipe: Move the file-scope goldfish_pipe_miscdev " rkir
2018-10-03 17:17 ` [PATCH v3 03/15] platform: goldfish: pipe: Move the file-scope goldfish_pipe_dev " rkir
2018-10-03 17:17 ` [PATCH v3 04/15] platform: goldfish: pipe: Call misc_deregister if init fails rkir
2018-10-03 17:17 ` [PATCH v3 05/15] platform: goldfish: pipe: Remove redundant casting rkir
2018-10-03 17:17 ` [PATCH v3 06/15] platform: goldfish: pipe: Move memory allocation from probe to init rkir
2018-10-15 18:34   ` Greg KH
2018-10-15 18:48     ` Roman Kiryanov
2018-10-15 18:56       ` Greg KH
2018-10-15 19:06         ` Roman Kiryanov
2018-10-16  6:27           ` Greg KH
2018-10-16 20:48             ` Roman Kiryanov
2018-10-03 17:17 ` [PATCH v3 07/15] platform: goldfish: pipe: Return status from "deinit" since "remove" does not do much rkir
2018-10-15 18:36   ` Greg KH
2018-10-15 22:04     ` Roman Kiryanov
2018-10-16  6:30       ` Greg KH
2018-10-03 17:17 ` [PATCH v3 08/15] platform: goldfish: pipe: Add a blank line to separate varibles and code rkir
2018-10-03 17:17 ` [PATCH v3 09/15] platform: goldfish: pipe: Move goldfish_pipe to goldfish_pipe_v2 rkir
2018-10-15 18:38   ` Greg KH
2018-10-15 18:55     ` Roman Kiryanov
2018-10-15 19:01       ` Greg KH
2018-10-15 20:23         ` Roman Kiryanov
2018-10-16  6:29           ` Greg KH
2018-10-16 21:02             ` Roman Kiryanov
2018-10-03 17:17 ` [PATCH v3 10/15] platform: goldfish: pipe: Remove the license boilerplate rkir
2018-10-03 17:17 ` [PATCH v3 11/15] platform: goldfish: pipe: Split the driver to v2 specific and the rest rkir
2018-10-03 17:17 ` [PATCH v3 12/15] platform: goldfish: pipe: Rename the init function (add "v2") rkir
2018-10-03 17:17 ` [PATCH v3 13/15] platform: goldfish: pipe: Add a dedicated constant for the device name rkir
2018-10-03 17:17 ` [PATCH v3 14/15] platform: goldfish: pipe: Rename PIPE_REG to PIPE_V2_REG rkir
2018-10-03 17:17 ` [PATCH v3 15/15] platform: goldfish: pipe: Add the goldfish_pipe_v1 driver rkir

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).