From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S266173AbUHRNjO (ORCPT ); Wed, 18 Aug 2004 09:39:14 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S266303AbUHRNjO (ORCPT ); Wed, 18 Aug 2004 09:39:14 -0400 Received: from cantor.suse.de ([195.135.220.2]:44177 "EHLO Cantor.suse.de") by vger.kernel.org with ESMTP id S266173AbUHRNed (ORCPT ); Wed, 18 Aug 2004 09:34:33 -0400 Date: Wed, 18 Aug 2004 15:30:05 +0200 Message-ID: From: Takashi Iwai To: Thomas Charbonnel Cc: Ingo Molnar , Lee Revell , Florian Schmidt , linux-kernel , Felipe Alfaro Solana Subject: Re: [patch] voluntary-preempt-2.6.8.1-P2 In-Reply-To: <1092831726.5777.160.camel@localhost> References: <20040816023655.GA8746@elte.hu> <1092624221.867.118.camel@krustophenia.net> <20040816032806.GA11750@elte.hu> <20040816033623.GA12157@elte.hu> <1092627691.867.150.camel@krustophenia.net> <20040816034618.GA13063@elte.hu> <1092628493.810.3.camel@krustophenia.net> <20040816040515.GA13665@elte.hu> <1092654819.5057.18.camel@localhost> <20040816113131.GA30527@elte.hu> <20040816120933.GA4211@elte.hu> <1092831726.5777.160.camel@localhost> User-Agent: Wanderlust/2.10.1 (Watching The Wheels) SEMI/1.14.5 (Awara-Onsen) FLIM/1.14.5 (Demachiyanagi) APEL/10.6 MULE XEmacs/21.4 (patch 15) (Security Through Obscurity) (i386-suse-linux) MIME-Version: 1.0 (generated by SEMI 1.14.5 - "Awara-Onsen") Content-Type: text/plain; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org At Wed, 18 Aug 2004 14:22:07 +0200, Thomas Charbonnel wrote: > > As a side note, and this has already been reported here several times, > the SA_INTERRUPT flag set notably by the sound card drivers handlers is > not honored on current kernels if the device is not the first one to be > registered. A simple fix would be to add SA_INTERRUPT handlers at the > beginning instead of the end of the irq queue in setup_irq. > > Similarly, when using SA_SAMPLE_RANDOM, all devices on the given irq > contribute to the entropy, even those that have a predictable interrupt > rate (e.g. sound cards), and/or for which the number of interrupts could > outweight the number of interrupts of the original SA_SAMPLE_RANDOM > driver. Hmm, something like this? Takashi --- linux/arch/i386/kernel/irq.c 2004-08-18 15:15:18.272067276 +0200 +++ linux/arch/i386/kernel/irq.c 2004-08-18 15:26:13.513979698 +0200 @@ -219,15 +219,22 @@ inline void synchronize_irq(unsigned int asmlinkage int handle_IRQ_event(unsigned int irq, struct pt_regs *regs, struct irqaction *action) { - int status = 1; /* Force the "do bottom halves" bit */ - int retval = 0; - - if (!(action->flags & SA_INTERRUPT)) + int status; + int ret, retval = 0; + struct irqaction *ac; + + status = 0; + for (ac = action; ac; ac = ac->next) + status |= ac->flags; + if (!(status & SA_INTERRUPT)) local_irq_enable(); + status = 0; do { - status |= action->flags; - retval |= action->handler(irq, action->dev_id, regs); + ret = action->handler(irq, action->dev_id, regs); + if (ret) + status |= action->flags; + retval |= ret; action = action->next; } while (action); if (status & SA_SAMPLE_RANDOM)