public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/4] um: Implement um_free_irq()
@ 2012-04-17 20:37 Richard Weinberger
  2012-04-17 20:37 ` [PATCH 2/4] um: Remove usage of irq_chip->release() Richard Weinberger
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Richard Weinberger @ 2012-04-17 20:37 UTC (permalink / raw)
  To: user-mode-linux-devel; +Cc: linux-kernel, tglx, Richard Weinberger

Instead of using chip->release() we can achieve the same
using a simple wrapper for free_irq().
We have already um_request_irq(), so um_free_irq() is the perfect
counterpart.

Signed-off-by: Richard Weinberger <richard@nod.at>
---
 arch/um/drivers/chan_kern.c       |    9 +++++----
 arch/um/drivers/line.c            |    2 +-
 arch/um/drivers/net_kern.c        |    4 ++--
 arch/um/drivers/port_kern.c       |    2 +-
 arch/um/drivers/xterm_kern.c      |    2 +-
 arch/um/include/shared/irq_kern.h |    2 +-
 arch/um/kernel/irq.c              |    7 +++++++
 7 files changed, 18 insertions(+), 10 deletions(-)

diff --git a/arch/um/drivers/chan_kern.c b/arch/um/drivers/chan_kern.c
index ca4c7eb..45e248c 100644
--- a/arch/um/drivers/chan_kern.c
+++ b/arch/um/drivers/chan_kern.c
@@ -8,6 +8,7 @@
 #include <linux/tty_flip.h>
 #include "chan.h"
 #include "os.h"
+#include "irq_kern.h"
 
 #ifdef CONFIG_NOCONFIG_CHAN
 static void *not_configged_init(char *str, int device,
@@ -213,9 +214,9 @@ void free_irqs(void)
 		chan = list_entry(ele, struct chan, free_list);
 
 		if (chan->input && chan->enabled)
-			free_irq(chan->line->driver->read_irq, chan);
+			um_free_irq(chan->line->driver->read_irq, chan);
 		if (chan->output && chan->enabled)
-			free_irq(chan->line->driver->write_irq, chan);
+			um_free_irq(chan->line->driver->write_irq, chan);
 		chan->enabled = 0;
 	}
 }
@@ -234,9 +235,9 @@ static void close_one_chan(struct chan *chan, int delay_free_irq)
 	}
 	else {
 		if (chan->input && chan->enabled)
-			free_irq(chan->line->driver->read_irq, chan);
+			um_free_irq(chan->line->driver->read_irq, chan);
 		if (chan->output && chan->enabled)
-			free_irq(chan->line->driver->write_irq, chan);
+			um_free_irq(chan->line->driver->write_irq, chan);
 		chan->enabled = 0;
 	}
 	if (chan->ops->close != NULL)
diff --git a/arch/um/drivers/line.c b/arch/um/drivers/line.c
index 4ab0d9c..acfd0e0 100644
--- a/arch/um/drivers/line.c
+++ b/arch/um/drivers/line.c
@@ -699,7 +699,7 @@ struct winch {
 static void __free_winch(struct work_struct *work)
 {
 	struct winch *winch = container_of(work, struct winch, work);
-	free_irq(WINCH_IRQ, winch);
+	um_free_irq(WINCH_IRQ, winch);
 
 	if (winch->pid != -1)
 		os_kill_process(winch->pid, 1);
diff --git a/arch/um/drivers/net_kern.c b/arch/um/drivers/net_kern.c
index 95f4416..0d60c56 100644
--- a/arch/um/drivers/net_kern.c
+++ b/arch/um/drivers/net_kern.c
@@ -195,7 +195,7 @@ static int uml_net_close(struct net_device *dev)
 
 	netif_stop_queue(dev);
 
-	free_irq(dev->irq, dev);
+	um_free_irq(dev->irq, dev);
 	if (lp->close != NULL)
 		(*lp->close)(lp->fd, &lp->user);
 	lp->fd = -1;
@@ -835,7 +835,7 @@ static void close_devices(void)
 	spin_lock(&opened_lock);
 	list_for_each(ele, &opened) {
 		lp = list_entry(ele, struct uml_net_private, list);
-		free_irq(lp->dev->irq, lp->dev);
+		um_free_irq(lp->dev->irq, lp->dev);
 		if ((lp->close != NULL) && (lp->fd >= 0))
 			(*lp->close)(lp->fd, &lp->user);
 		if (lp->remove != NULL)
diff --git a/arch/um/drivers/port_kern.c b/arch/um/drivers/port_kern.c
index e31680e..11866ff 100644
--- a/arch/um/drivers/port_kern.c
+++ b/arch/um/drivers/port_kern.c
@@ -254,7 +254,7 @@ int port_wait(void *data)
 		 * connection.  Then we loop here throwing out failed
 		 * connections until a good one is found.
 		 */
-		free_irq(TELNETD_IRQ, conn);
+		um_free_irq(TELNETD_IRQ, conn);
 
 		if (conn->fd >= 0)
 			break;
diff --git a/arch/um/drivers/xterm_kern.c b/arch/um/drivers/xterm_kern.c
index 8bd130f..b68bbe2 100644
--- a/arch/um/drivers/xterm_kern.c
+++ b/arch/um/drivers/xterm_kern.c
@@ -65,7 +65,7 @@ int xterm_fd(int socket, int *pid_out)
 	 * isn't set) this will hang... */
 	wait_for_completion(&data->ready);
 
-	free_irq(XTERM_IRQ, data);
+	um_free_irq(XTERM_IRQ, data);
 
 	ret = data->new_fd;
 	*pid_out = data->pid;
diff --git a/arch/um/include/shared/irq_kern.h b/arch/um/include/shared/irq_kern.h
index b05d22f..7a5bfa6 100644
--- a/arch/um/include/shared/irq_kern.h
+++ b/arch/um/include/shared/irq_kern.h
@@ -13,6 +13,6 @@ extern int um_request_irq(unsigned int irq, int fd, int type,
 			  irq_handler_t handler,
 			  unsigned long irqflags,  const char * devname,
 			  void *dev_id);
-
+void um_free_irq(unsigned int irq, void *dev);
 #endif
 
diff --git a/arch/um/kernel/irq.c b/arch/um/kernel/irq.c
index 71b8c94..47a09ee 100644
--- a/arch/um/kernel/irq.c
+++ b/arch/um/kernel/irq.c
@@ -297,6 +297,13 @@ unsigned int do_IRQ(int irq, struct uml_pt_regs *regs)
 	return 1;
 }
 
+void um_free_irq(unsigned int irq, void *dev)
+{
+	free_irq_by_irq_and_dev(irq, dev);
+	free_irq(irq, dev);
+}
+EXPORT_SYMBOL(um_free_irq);
+
 int um_request_irq(unsigned int irq, int fd, int type,
 		   irq_handler_t handler,
 		   unsigned long irqflags, const char * devname,
-- 
1.7.7.3


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

* [PATCH 2/4] um: Remove usage of irq_chip->release()
  2012-04-17 20:37 [PATCH 1/4] um: Implement um_free_irq() Richard Weinberger
@ 2012-04-17 20:37 ` Richard Weinberger
  2012-04-17 20:37 ` [PATCH 3/4] um: Remove CONFIG_IRQ_RELEASE_METHOD Richard Weinberger
  2012-04-17 20:37 ` [PATCH 4/4] irq: Remove irq_chip->release() Richard Weinberger
  2 siblings, 0 replies; 7+ messages in thread
From: Richard Weinberger @ 2012-04-17 20:37 UTC (permalink / raw)
  To: user-mode-linux-devel; +Cc: linux-kernel, tglx, Richard Weinberger

UML does no longer need irq_chip->release().

Signed-off-by: Richard Weinberger <richard@nod.at>
---
 arch/um/kernel/irq.c |    2 --
 1 files changed, 0 insertions(+), 2 deletions(-)

diff --git a/arch/um/kernel/irq.c b/arch/um/kernel/irq.c
index 47a09ee..00506c3 100644
--- a/arch/um/kernel/irq.c
+++ b/arch/um/kernel/irq.c
@@ -334,7 +334,6 @@ static void dummy(struct irq_data *d)
 /* This is used for everything else than the timer. */
 static struct irq_chip normal_irq_type = {
 	.name = "SIGIO",
-	.release = free_irq_by_irq_and_dev,
 	.irq_disable = dummy,
 	.irq_enable = dummy,
 	.irq_ack = dummy,
@@ -342,7 +341,6 @@ static struct irq_chip normal_irq_type = {
 
 static struct irq_chip SIGVTALRM_irq_type = {
 	.name = "SIGVTALRM",
-	.release = free_irq_by_irq_and_dev,
 	.irq_disable = dummy,
 	.irq_enable = dummy,
 	.irq_ack = dummy,
-- 
1.7.7.3


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

* [PATCH 3/4] um: Remove CONFIG_IRQ_RELEASE_METHOD
  2012-04-17 20:37 [PATCH 1/4] um: Implement um_free_irq() Richard Weinberger
  2012-04-17 20:37 ` [PATCH 2/4] um: Remove usage of irq_chip->release() Richard Weinberger
@ 2012-04-17 20:37 ` Richard Weinberger
  2012-04-17 20:37 ` [PATCH 4/4] irq: Remove irq_chip->release() Richard Weinberger
  2 siblings, 0 replies; 7+ messages in thread
From: Richard Weinberger @ 2012-04-17 20:37 UTC (permalink / raw)
  To: user-mode-linux-devel; +Cc: linux-kernel, tglx, Richard Weinberger

UML does no longer need CONFIG_IRQ_RELEASE_METHOD.

Signed-off-by: Richard Weinberger <richard@nod.at>
---
 arch/um/Kconfig.common |    5 -----
 arch/um/defconfig      |    1 -
 2 files changed, 0 insertions(+), 6 deletions(-)

diff --git a/arch/um/Kconfig.common b/arch/um/Kconfig.common
index 20a49ba..43ef890 100644
--- a/arch/um/Kconfig.common
+++ b/arch/um/Kconfig.common
@@ -56,11 +56,6 @@ config GENERIC_CLOCKEVENTS
 	bool
 	default y
 
-# Used in kernel/irq/manage.c and include/linux/irq.h
-config IRQ_RELEASE_METHOD
-	bool
-	default y
-
 config HZ
 	int
 	default 100
diff --git a/arch/um/defconfig b/arch/um/defconfig
index fdc97e2..7823ab1 100644
--- a/arch/um/defconfig
+++ b/arch/um/defconfig
@@ -12,7 +12,6 @@ CONFIG_LOCKDEP_SUPPORT=y
 CONFIG_GENERIC_CALIBRATE_DELAY=y
 CONFIG_GENERIC_BUG=y
 CONFIG_GENERIC_CLOCKEVENTS=y
-CONFIG_IRQ_RELEASE_METHOD=y
 CONFIG_HZ=100
 
 #
-- 
1.7.7.3


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

* [PATCH 4/4] irq: Remove irq_chip->release()
  2012-04-17 20:37 [PATCH 1/4] um: Implement um_free_irq() Richard Weinberger
  2012-04-17 20:37 ` [PATCH 2/4] um: Remove usage of irq_chip->release() Richard Weinberger
  2012-04-17 20:37 ` [PATCH 3/4] um: Remove CONFIG_IRQ_RELEASE_METHOD Richard Weinberger
@ 2012-04-17 20:37 ` Richard Weinberger
  2012-04-17 20:43   ` Thomas Gleixner
  2012-04-18  7:46   ` [uml-devel] " Geert Uytterhoeven
  2 siblings, 2 replies; 7+ messages in thread
From: Richard Weinberger @ 2012-04-17 20:37 UTC (permalink / raw)
  To: user-mode-linux-devel; +Cc: linux-kernel, tglx, Richard Weinberger

As it's only user (UML) does no longer need it we can get
rid of it.

Signed-off-by: Richard Weinberger <richard@nod.at>
---
 include/linux/irq.h |    5 -----
 kernel/irq/manage.c |    6 ------
 2 files changed, 0 insertions(+), 11 deletions(-)

diff --git a/include/linux/irq.h b/include/linux/irq.h
index 7810406..76c5eb4 100644
--- a/include/linux/irq.h
+++ b/include/linux/irq.h
@@ -328,11 +328,6 @@ struct irq_chip {
 	void		(*irq_print_chip)(struct irq_data *data, struct seq_file *p);
 
 	unsigned long	flags;
-
-	/* Currently used only by UML, might disappear one day.*/
-#ifdef CONFIG_IRQ_RELEASE_METHOD
-	void		(*release)(unsigned int irq, void *dev_id);
-#endif
 };
 
 /*
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
index 89a3ea8..9b7f68a 100644
--- a/kernel/irq/manage.c
+++ b/kernel/irq/manage.c
@@ -1204,12 +1204,6 @@ static struct irqaction *__free_irq(unsigned int irq, void *dev_id)
 	/* Found it - now remove it from the list of entries: */
 	*action_ptr = action->next;
 
-	/* Currently used only by UML, might disappear one day: */
-#ifdef CONFIG_IRQ_RELEASE_METHOD
-	if (desc->irq_data.chip->release)
-		desc->irq_data.chip->release(irq, dev_id);
-#endif
-
 	/* If this was the last handler, shut down the IRQ line: */
 	if (!desc->action)
 		irq_shutdown(desc);
-- 
1.7.7.3


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

* Re: [PATCH 4/4] irq: Remove irq_chip->release()
  2012-04-17 20:37 ` [PATCH 4/4] irq: Remove irq_chip->release() Richard Weinberger
@ 2012-04-17 20:43   ` Thomas Gleixner
  2012-04-18  7:46   ` [uml-devel] " Geert Uytterhoeven
  1 sibling, 0 replies; 7+ messages in thread
From: Thomas Gleixner @ 2012-04-17 20:43 UTC (permalink / raw)
  To: Richard Weinberger; +Cc: user-mode-linux-devel, linux-kernel

On Tue, 17 Apr 2012, Richard Weinberger wrote:

> As it's only user (UML) does no longer need it we can get
> rid of it.
> 
> Signed-off-by: Richard Weinberger <richard@nod.at>

Nice work!

Please add my Reviewed-by to the series.

Thanks,

	tglx

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

* Re: [uml-devel] [PATCH 4/4] irq: Remove irq_chip->release()
  2012-04-17 20:37 ` [PATCH 4/4] irq: Remove irq_chip->release() Richard Weinberger
  2012-04-17 20:43   ` Thomas Gleixner
@ 2012-04-18  7:46   ` Geert Uytterhoeven
  2012-04-18  8:22     ` Richard Weinberger
  1 sibling, 1 reply; 7+ messages in thread
From: Geert Uytterhoeven @ 2012-04-18  7:46 UTC (permalink / raw)
  To: Richard Weinberger; +Cc: user-mode-linux-devel, tglx, linux-kernel

On Tue, Apr 17, 2012 at 22:37, Richard Weinberger <richard@nod.at> wrote:
> As it's only user (UML) does no longer need it we can get
> rid of it.

But now all drivers have to call um_free_irq() instead of free_irq()?
Are there any generic drivers not specific to UML we do want to use on UML?

Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

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

* Re: [uml-devel] [PATCH 4/4] irq: Remove irq_chip->release()
  2012-04-18  7:46   ` [uml-devel] " Geert Uytterhoeven
@ 2012-04-18  8:22     ` Richard Weinberger
  0 siblings, 0 replies; 7+ messages in thread
From: Richard Weinberger @ 2012-04-18  8:22 UTC (permalink / raw)
  To: Geert Uytterhoeven; +Cc: user-mode-linux-devel, tglx, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 580 bytes --]

Am 18.04.2012 09:46, schrieb Geert Uytterhoeven:
> On Tue, Apr 17, 2012 at 22:37, Richard Weinberger <richard@nod.at> wrote:
>> As it's only user (UML) does no longer need it we can get
>> rid of it.
> 
> But now all drivers have to call um_free_irq() instead of free_irq()?

No. They can still use free_irq().
Only drivers on top of SIGIO and SIGVTALRAM irq chips have to use um_free_irq().
But ATAIK all drivers on UML use SIGIO, SIGVTALRAM.

> Are there any generic drivers not specific to UML we do want to use on UML?

I don't think so.

Thanks,
//richard


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 490 bytes --]

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

end of thread, other threads:[~2012-04-18  8:22 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-04-17 20:37 [PATCH 1/4] um: Implement um_free_irq() Richard Weinberger
2012-04-17 20:37 ` [PATCH 2/4] um: Remove usage of irq_chip->release() Richard Weinberger
2012-04-17 20:37 ` [PATCH 3/4] um: Remove CONFIG_IRQ_RELEASE_METHOD Richard Weinberger
2012-04-17 20:37 ` [PATCH 4/4] irq: Remove irq_chip->release() Richard Weinberger
2012-04-17 20:43   ` Thomas Gleixner
2012-04-18  7:46   ` [uml-devel] " Geert Uytterhoeven
2012-04-18  8:22     ` Richard Weinberger

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox