Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fa7a0449 authored by Richard Weinberger's avatar Richard Weinberger
Browse files

um: Implement um_free_irq()



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: default avatarRichard Weinberger <richard@nod.at>
Reviewed-by: default avatarThomas Gleixner <tglx@linutronix.de>
parent 2b76ebaa
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -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)
+1 −1
Original line number Diff line number Diff line
@@ -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);
+2 −2
Original line number Diff line number Diff line
@@ -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)
+1 −1
Original line number Diff line number Diff line
@@ -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;
+1 −1
Original line number Diff line number Diff line
@@ -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;
Loading