[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20120705220040.GA15685@thunk.org>
Date: Thu, 5 Jul 2012 18:00:40 -0400
From: Theodore Ts'o <tytso@....edu>
To: Linus Torvalds <torvalds@...ux-foundation.org>
Cc: Matt Mackall <mpm@...enic.com>,
Linux Kernel Developers List <linux-kernel@...r.kernel.org>,
w@....eu, ewust@...ch.edu, zakir@...ch.edu, greg@...ah.com,
nadiah@...ucsd.edu, jhalderm@...ch.edu, tglx@...utronix.de,
davem@...emloft.net, stable@...nel.org
Subject: Re: [PATCH 01/10] random: make 'add_interrupt_randomness()' do
something sane
On Thu, Jul 05, 2012 at 02:47:52PM -0700, Linus Torvalds wrote:
> On Thu, Jul 5, 2012 at 2:39 PM, Matt Mackall <mpm@...enic.com> wrote:
> >
> > From my read, this code path gets called on timer interrupts too.
>
> That's hopefully never true for any normal cases (timers are *very*
> special - they tend to go through their own architecture-specific
> stuff). On modern PC's, for example, the timers happen through the
> local apic timers directly.
>
> In fact, with SMP, it's a really bad idea to use a normal irq for
> timer interrupts, since you really really want per-CPU-core timers.
>
> But yes, we should probably make sure that *if* the architecture uses
> regular interrupts for timers we don't count them. The problematic
> embedded platforms are often pretty crap hardware: even when they are
> SMP, they might use an external timer irq (and then we broadcast the
> thing). I think we have the IRQF_TIMER flag for that, so we could add
> a check for that.
Like this?
- Ted
diff --git a/kernel/irq/handle.c b/kernel/irq/handle.c
index 8270db0..0ce4863 100644
--- a/kernel/irq/handle.c
+++ b/kernel/irq/handle.c
@@ -133,7 +133,7 @@ irqreturn_t
handle_irq_event_percpu(struct irq_desc *desc, struct irqaction *action)
{
irqreturn_t retval = IRQ_NONE;
- unsigned int random = 0, irq = desc->irq_data.irq;
+ unsigned int random = 1, irq = desc->irq_data.irq;
do {
irqreturn_t res;
@@ -161,7 +161,8 @@ handle_irq_event_percpu(struct irq_desc *desc, struct irqaction *action)
/* Fall through to add to randomness */
case IRQ_HANDLED:
- random |= action->flags;
+ if (action->flags & __IRQF_TIMER)
+ random = 0;
break;
default:
@@ -172,7 +173,8 @@ handle_irq_event_percpu(struct irq_desc *desc, struct irqaction *action)
action = action->next;
} while (action);
- add_interrupt_randomness(irq);
+ if (random)
+ add_interrupt_randomness(irq);
if (!noirqdebug)
note_interrupt(irq, desc, retval);
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists