From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Gleixner Subject: Re: [PATCH] tty: serial: sc16is7xx: implemented our own oneshot-like handling Date: Sun, 13 Mar 2016 11:25:05 +0100 (CET) Message-ID: References: <1457692476-19082-1-git-send-email-sean.nyekjaer@prevas.dk> Mime-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Return-path: In-Reply-To: <1457692476-19082-1-git-send-email-sean.nyekjaer@prevas.dk> Sender: linux-rt-users-owner@vger.kernel.org To: Sean Nyekjaer Cc: linux-serial@vger.kernel.org, Josh Cartwright , Greg Kroah-Hartman , linux-rt-users@vger.kernel.org, Jon Ringle List-Id: linux-serial@vger.kernel.org On Fri, 11 Mar 2016, Sean Nyekjaer wrote: > static irqreturn_t sc16is7xx_irq(int irq, void *dev_id) > { > struct sc16is7xx_port *s = (struct sc16is7xx_port *)dev_id; > + int i; > + > + for (i = 0; i < s->devtype->nr_uart; ++i) > + disable_irq_nosync(s->p[i].port.irq); Aside of the lack of a changelog. This is completely bogus. You disable the same interrupt a gazillion of times. > queue_kthread_work(&s->kworker, &s->irq_work); This driver should use a threaded interrupt instead of trying to emulate it via dis/enable_irq and a worker thread. Then you simply call c16is7xx_port_irq() right from the interrupt routine and the core code deals with the interrupt mask/unmask automatically. Thanks, tglx