lkml.org 
[lkml]   [2006]   [May]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 13/14] random: Remove SA_SAMPLE_RANDOM from IRQ fastpath
    Date
    Remove SA_SAMPLE_RANDOM

    This removes the SA_SAMPLE_RANDOM interface which was not used with
    sufficient paranoia and introduced an extra branch test into all IRQ
    handling.

    Signed-off-by: Matt Mackall <mpm@selenic.com>

    Index: 2.6/arch/arm/kernel/irq.c
    ===================================================================
    --- 2.6.orig/arch/arm/kernel/irq.c 2006-05-02 17:29:26.000000000 -0500
    +++ 2.6/arch/arm/kernel/irq.c 2006-05-03 16:42:56.000000000 -0500
    @@ -361,9 +361,6 @@ __do_irq(unsigned int irq, struct irqact
    action = action->next;
    } while (action);

    - if (status & SA_SAMPLE_RANDOM)
    - add_interrupt_randomness(irq);
    -
    spin_lock_irq(&irq_controller_lock);

    return retval;
    @@ -670,17 +667,6 @@ int setup_irq(unsigned int irq, struct i
    * so we have to be careful not to interfere with a
    * running system.
    */
    - if (new->flags & SA_SAMPLE_RANDOM) {
    - /*
    - * This function might sleep, we want to call it first,
    - * outside of the atomic block.
    - * Yes, this might clear the entropy pool if the wrong
    - * driver is attempted to be loaded, without actually
    - * installing a new handler, but is this really a problem,
    - * only the sysadmin is able to do this.
    - */
    - rand_initialize_irq(irq);
    - }

    /*
    * The following block of code has to be executed atomically
    Index: 2.6/arch/arm26/kernel/irq.c
    ===================================================================
    --- 2.6.orig/arch/arm26/kernel/irq.c 2006-04-20 17:01:04.000000000 -0500
    +++ 2.6/arch/arm26/kernel/irq.c 2006-05-03 16:42:43.000000000 -0500
    @@ -202,9 +202,6 @@ __do_irq(unsigned int irq, struct irqact
    action = action->next;
    } while (action);

    - if (status & SA_SAMPLE_RANDOM)
    - add_interrupt_randomness(irq);
    -
    spin_lock_irq(&irq_controller_lock);
    }

    @@ -452,17 +449,6 @@ int setup_irq(unsigned int irq, struct i
    * so we have to be careful not to interfere with a
    * running system.
    */
    - if (new->flags & SA_SAMPLE_RANDOM) {
    - /*
    - * This function might sleep, we want to call it first,
    - * outside of the atomic block.
    - * Yes, this might clear the entropy pool if the wrong
    - * driver is attempted to be loaded, without actually
    - * installing a new handler, but is this really a problem,
    - * only the sysadmin is able to do this.
    - */
    - rand_initialize_irq(irq);
    - }

    /*
    * The following block of code has to be executed atomically
    @@ -530,9 +516,6 @@ int setup_irq(unsigned int irq, struct i
    * SA_SHIRQ Interrupt is shared
    *
    * SA_INTERRUPT Disable local interrupts while processing
    - *
    - * SA_SAMPLE_RANDOM The interrupt can be used for entropy
    - *
    */

    //FIXME - handler used to return void - whats the significance of the change?
    Index: 2.6/arch/frv/kernel/irq-routing.c
    ===================================================================
    --- 2.6.orig/arch/frv/kernel/irq-routing.c 2006-05-02 17:29:26.000000000 -0500
    +++ 2.6/arch/frv/kernel/irq-routing.c 2006-05-03 16:42:29.000000000 -0500
    @@ -90,8 +90,6 @@ void distribute_irqs(struct irq_group *g
    action = action->next;
    } while (action);

    - if (status & SA_SAMPLE_RANDOM)
    - add_interrupt_randomness(irq);
    local_irq_disable();
    }
    }
    Index: 2.6/arch/frv/kernel/irq.c
    ===================================================================
    --- 2.6.orig/arch/frv/kernel/irq.c 2006-05-02 17:29:26.000000000 -0500
    +++ 2.6/arch/frv/kernel/irq.c 2006-05-03 16:42:23.000000000 -0500
    @@ -345,9 +345,6 @@ asmlinkage void do_NMI(void)
    * SA_SHIRQ Interrupt is shared
    *
    * SA_INTERRUPT Disable local interrupts while processing
    - *
    - * SA_SAMPLE_RANDOM The interrupt can be used for entropy
    - *
    */

    int request_irq(unsigned int irq,
    @@ -577,17 +574,6 @@ int setup_irq(unsigned int irq, struct i
    * so we have to be careful not to interfere with a
    * running system.
    */
    - if (new->flags & SA_SAMPLE_RANDOM) {
    - /*
    - * This function might sleep, we want to call it first,
    - * outside of the atomic block.
    - * Yes, this might clear the entropy pool if the wrong
    - * driver is attempted to be loaded, without actually
    - * installing a new handler, but is this really a problem,
    - * only the sysadmin is able to do this.
    - */
    - rand_initialize_irq(irq);
    - }

    /* must juggle the interrupt processing stuff with interrupts disabled */
    spin_lock_irqsave(&level->lock, flags);
    Index: 2.6/arch/h8300/kernel/ints.c
    ===================================================================
    --- 2.6.orig/arch/h8300/kernel/ints.c 2005-10-27 19:02:08.000000000 -0500
    +++ 2.6/arch/h8300/kernel/ints.c 2006-05-03 16:42:06.000000000 -0500
    @@ -158,9 +158,6 @@ int request_irq(unsigned int irq,
    irq_handle->devname = devname;
    irq_list[irq] = irq_handle;

    - if (irq_handle->flags & SA_SAMPLE_RANDOM)
    - rand_initialize_irq(irq);
    -
    enable_irq(irq);
    return 0;
    }
    @@ -222,8 +219,6 @@ asmlinkage void process_int(int irq, str
    if (irq_list[irq]) {
    irq_list[irq]->handler(irq, irq_list[irq]->dev_id, fp);
    irq_list[irq]->count++;
    - if (irq_list[irq]->flags & SA_SAMPLE_RANDOM)
    - add_interrupt_randomness(irq);
    }
    } else {
    BUG();
    Index: 2.6/arch/h8300/platform/h8s/ints.c
    ===================================================================
    --- 2.6.orig/arch/h8300/platform/h8s/ints.c 2006-04-20 17:01:04.000000000 -0500
    +++ 2.6/arch/h8300/platform/h8s/ints.c 2006-05-03 16:41:55.000000000 -0500
    @@ -192,9 +192,7 @@ int request_irq(unsigned int irq,
    irq_handle->dev_id = dev_id;
    irq_handle->devname = devname;
    irq_list[irq] = irq_handle;
    - if (irq_handle->flags & SA_SAMPLE_RANDOM)
    - rand_initialize_irq(irq);
    -
    +
    /* enable interrupt */
    /* compatible i386 */
    if (irq >= EXT_IRQ0 && irq <= EXT_IRQ15)
    @@ -270,8 +268,6 @@ asmlinkage void process_int(unsigned lon
    if (irq_list[vec]) {
    irq_list[vec]->handler(vec, irq_list[vec]->dev_id, fp);
    irq_list[vec]->count++;
    - if (irq_list[vec]->flags & SA_SAMPLE_RANDOM)
    - add_interrupt_randomness(vec);
    }
    } else {
    BUG();
    Index: 2.6/arch/sparc64/kernel/irq.c
    ===================================================================
    --- 2.6.orig/arch/sparc64/kernel/irq.c 2006-05-02 17:28:42.000000000 -0500
    +++ 2.6/arch/sparc64/kernel/irq.c 2006-05-03 16:41:41.000000000 -0500
    @@ -437,20 +437,6 @@ int request_irq(unsigned int irq, irqret
    if (unlikely(!bucket->irq_info))
    return -ENODEV;

    - if ((bucket != &pil0_dummy_bucket) && (irqflags & SA_SAMPLE_RANDOM)) {
    - /*
    - * This function might sleep, we want to call it first,
    - * outside of the atomic block. In SA_STATIC_ALLOC case,
    - * random driver's kmalloc will fail, but it is safe.
    - * If already initialized, random driver will not reinit.
    - * Yes, this might clear the entropy pool if the wrong
    - * driver is attempted to be loaded, without actually
    - * installing a new handler, but is this really a problem,
    - * only the sysadmin is able to do this.
    - */
    - rand_initialize_irq(irq);
    - }
    -
    spin_lock_irqsave(&irq_action_lock, flags);

    if (check_irq_sharing(bucket->pil, irqflags)) {
    @@ -673,10 +659,6 @@ static void process_bucket(int irq, stru
    } else {
    upa_writel(ICLR_IDLE, bp->iclr);
    }
    -
    - /* Test and add entropy */
    - if (random & SA_SAMPLE_RANDOM)
    - add_interrupt_randomness(irq);
    }
    out:
    bp->flags &= ~IBF_INPROGRESS;
    Index: 2.6/include/asm-mips/signal.h
    ===================================================================
    --- 2.6.orig/include/asm-mips/signal.h 2006-05-02 17:28:46.000000000 -0500
    +++ 2.6/include/asm-mips/signal.h 2006-05-03 16:41:15.000000000 -0500
    @@ -107,7 +107,6 @@ typedef unsigned long old_sigset_t; /*
    * SA_INTERRUPT is also used by the irq handling routines.
    * SA_SHIRQ flag is for shared interrupt support on PCI and EISA.
    */
    -#define SA_SAMPLE_RANDOM SA_RESTART

    #ifdef CONFIG_TRAD_SIGNALS
    #define sig_uses_siginfo(ka) ((ka)->sa.sa_flags & SA_SIGINFO)
    Index: 2.6/include/asm-xtensa/signal.h
    ===================================================================
    --- 2.6.orig/include/asm-xtensa/signal.h 2006-05-02 17:29:27.000000000 -0500
    +++ 2.6/include/asm-xtensa/signal.h 2006-05-03 16:41:12.000000000 -0500
    @@ -118,7 +118,6 @@ typedef struct {
    * SA_INTERRUPT is also used by the irq handling routines.
    * SA_SHIRQ is for shared interrupt support on PCI and EISA.
    */
    -#define SA_SAMPLE_RANDOM SA_RESTART
    #define SA_SHIRQ 0x04000000
    #define SA_PROBEIRQ 0x08000000
    #endif
    Index: 2.6/include/linux/signal.h
    ===================================================================
    --- 2.6.orig/include/linux/signal.h 2006-05-02 17:29:27.000000000 -0500
    +++ 2.6/include/linux/signal.h 2006-05-03 16:41:07.000000000 -0500
    @@ -16,7 +16,6 @@
    * SA_SHIRQ is for shared interrupt support on PCI and EISA.
    * SA_PROBEIRQ is set by callers when they expect sharing mismatches to occur
    */
    -#define SA_SAMPLE_RANDOM SA_RESTART
    #define SA_SHIRQ 0x04000000
    #define SA_PROBEIRQ 0x08000000

    Index: 2.6/kernel/irq/handle.c
    ===================================================================
    --- 2.6.orig/kernel/irq/handle.c 2006-04-20 17:00:51.000000000 -0500
    +++ 2.6/kernel/irq/handle.c 2006-05-03 16:41:01.000000000 -0500
    @@ -92,8 +92,6 @@ fastcall int handle_IRQ_event(unsigned i
    action = action->next;
    } while (action);

    - if (status & SA_SAMPLE_RANDOM)
    - add_interrupt_randomness(irq);
    local_irq_disable();

    return retval;
    Index: 2.6/kernel/irq/manage.c
    ===================================================================
    --- 2.6.orig/kernel/irq/manage.c 2006-05-02 17:29:28.000000000 -0500
    +++ 2.6/kernel/irq/manage.c 2006-05-03 16:40:55.000000000 -0500
    @@ -185,17 +185,6 @@ int setup_irq(unsigned int irq, struct i
    * so we have to be careful not to interfere with a
    * running system.
    */
    - if (new->flags & SA_SAMPLE_RANDOM) {
    - /*
    - * This function might sleep, we want to call it first,
    - * outside of the atomic block.
    - * Yes, this might clear the entropy pool if the wrong
    - * driver is attempted to be loaded, without actually
    - * installing a new handler, but is this really a problem,
    - * only the sysadmin is able to do this.
    - */
    - rand_initialize_irq(irq);
    - }

    /*
    * The following block of code has to be executed atomically
    @@ -364,7 +353,6 @@ EXPORT_SYMBOL(free_irq);
    *
    * SA_SHIRQ Interrupt is shared
    * SA_INTERRUPT Disable local interrupts while processing
    - * SA_SAMPLE_RANDOM The interrupt can be used for entropy
    *
    */
    int request_irq(unsigned int irq,
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2006-05-05 19:13    [W:4.280 / U:0.256 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site