[PATCH 13/14] random: Remove SA_SAMPLE_RANDOM from IRQ fastpath

From: Matt Mackall
Date: Fri May 05 2006 - 13:10:25 EST


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@xxxxxxxxxxx>

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@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/