lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20140317111213.GG27873@lukather>
Date:	Mon, 17 Mar 2014 12:12:13 +0100
From:	Maxime Ripard <maxime.ripard@...e-electrons.com>
To:	Hans de Goede <hdegoede@...hat.com>
Cc:	Thomas Gleixner <tglx@...utronix.de>,
	linux-arm-kernel@...ts.infradead.org,
	devicetree <devicetree@...r.kernel.org>,
	linux-kernel@...r.kernel.org, linux-sunxi@...glegroups.com
Subject: Re: [PATCH v2 1/2] irqchip: sun4i: Use handle_fasteoi_irq for all
 interrupts

On Sat, Mar 15, 2014 at 04:04:53PM +0100, Hans de Goede wrote:
> Since the sun4i irq chip does not require any action and clears the interrupt
> when the level goes back to inactive, we don't need to mask / unmask for
> non oneshot IRQs, to achieve this we make sun4i_irq_ack a nop for all irqs
> except irq 0 and use handle_fasteoi_irq for all interrupts.
> 
> Now there might be a case when the device reactivates the interrupt
> before the RETI. But that does not matter as we run the primary
> interrupt handlers with interrupts disabled.
> 
> This also allows us to get rid of needing to use 2 irq_chip structs, this
> means that the IRQCHIP_EOI_THREADED | IRQCHIP_EOI_IF_HANDLED will now influence
> all interrupts rather then just irq 0, but that does not matter as the eoi
> is now a nop anyways for all interrupts but irq 0.
> 
> Signed-off-by: Hans de Goede <hdegoede@...hat.com>
> ---
>  drivers/irqchip/irq-sun4i.c | 18 ++++--------------
>  1 file changed, 4 insertions(+), 14 deletions(-)
> 
> diff --git a/drivers/irqchip/irq-sun4i.c b/drivers/irqchip/irq-sun4i.c
> index a0ed1ea..6a8c88d 100644
> --- a/drivers/irqchip/irq-sun4i.c
> +++ b/drivers/irqchip/irq-sun4i.c
> @@ -45,6 +45,9 @@ static void sun4i_irq_ack(struct irq_data *irqd)
>  	int reg = irq / 32;
>  	u32 val;
>  
> +	if (irq != 0)
> +		return; /* Only IRQ 0 / the ENMI needs to be acked */
> +
>  	val = readl(sun4i_irq_base + SUN4I_IRQ_PENDING_REG(reg));
>  	writel(val | (1 << irq_off),
>  	       sun4i_irq_base + SUN4I_IRQ_PENDING_REG(reg));
> @@ -76,13 +79,6 @@ static void sun4i_irq_unmask(struct irq_data *irqd)
>  
>  static struct irq_chip sun4i_irq_chip = {
>  	.name		= "sun4i_irq",
> -	.irq_mask	= sun4i_irq_mask,
> -	.irq_unmask	= sun4i_irq_unmask,
> -};
> -
> -/* IRQ 0 / the ENMI needs a late eoi call */
> -static struct irq_chip sun4i_irq_chip_enmi = {
> -	.name		= "sun4i_irq",
>  	.irq_eoi	= sun4i_irq_ack,
>  	.irq_mask	= sun4i_irq_mask,
>  	.irq_unmask	= sun4i_irq_unmask,
> @@ -92,13 +88,7 @@ static struct irq_chip sun4i_irq_chip_enmi = {
>  static int sun4i_irq_map(struct irq_domain *d, unsigned int virq,
>  			 irq_hw_number_t hw)
>  {
> -	if (hw == 0)
> -		irq_set_chip_and_handler(virq, &sun4i_irq_chip_enmi,
> -					 handle_fasteoi_irq);
> -	else
> -		irq_set_chip_and_handler(virq, &sun4i_irq_chip,
> -					 handle_level_irq);
> -
> +	irq_set_chip_and_handler(virq, &sun4i_irq_chip, handle_fasteoi_irq);
>  	set_irq_flags(virq, IRQF_VALID | IRQF_PROBE);

Oh.. And you just did. Nevermind then.

Acked-by: Maxime Ripard <maxime.ripard@...e-electrons.com>

-- 
Maxime Ripard, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com

Download attachment "signature.asc" of type "application/pgp-signature" (837 bytes)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ