--- linux-2.6.18.i686/drivers/net/igb/igb_main.c.orig	2009-07-10 13:45:12.645465000 -0700
+++ linux-2.6.18.i686/drivers/net/igb/igb_main.c	2009-07-13 12:35:15.019665000 -0700
@@ -43,9 +43,14 @@
 #include <linux/if_ether.h>
 #include "igb.h"
 
-#define DRV_VERSION "1.3.16-k2"
+#define DRV_VERSION "1.3.16-k2ora"
 char igb_driver_name[] = "igb";
 char igb_driver_version[] = DRV_VERSION;
+
+static int entropy = 0;
+
+module_param(entropy, int, 0);
+MODULE_PARM_DESC(entropy, "Allow igb to populate the /dev/random entropy pool");
 static const char igb_driver_string[] =
 				"Intel(R) Gigabit Ethernet Network Driver";
 static const char igb_copyright[] = "Copyright (c) 2007-2009 Intel Corporation.";
@@ -514,9 +519,16 @@ static int igb_request_msix(struct igb_a
 	for (i = 0; i < adapter->num_tx_queues; i++) {
 		struct igb_ring *ring = &(adapter->tx_ring[i]);
 		sprintf(ring->name, "%s-tx-%d", netdev->name, i);
-		err = request_irq(adapter->msix_entries[vector].vector,
-				  &igb_msix_tx, 0, ring->name,
-				  &(adapter->tx_ring[i]));
+                if (entropy)
+			err = request_irq(adapter->msix_entries[vector].vector,
+					&igb_msix_tx, SA_SAMPLE_RANDOM,
+					ring->name,
+					&(adapter->tx_ring[i]));
+		else
+			err = request_irq(adapter->msix_entries[vector].vector,
+					&igb_msix_tx, 0, ring->name,
+					&(adapter->tx_ring[i]));
+
 		if (err)
 			goto out;
 		ring->itr_register = E1000_EITR(0) + (vector << 2);
@@ -529,9 +541,16 @@ static int igb_request_msix(struct igb_a
 			sprintf(ring->netdev->name, "%s-rx-%d", netdev->name, i);
 		else
 			memcpy(ring->netdev->name, netdev->name, IFNAMSIZ);
-		err = request_irq(adapter->msix_entries[vector].vector,
-				  &igb_msix_rx, 0, ring->netdev->name,
-				  &(adapter->rx_ring[i]));
+		if (entropy)
+			err = request_irq(adapter->msix_entries[vector].vector,
+					&igb_msix_rx, SA_SAMPLE_RANDOM,
+					ring->netdev->name,
+					&(adapter->rx_ring[i]));
+		else
+			err = request_irq(adapter->msix_entries[vector].vector,
+					&igb_msix_rx, 0, ring->netdev->name,
+					&(adapter->rx_ring[i]));
+
 		if (err)
 			goto out;
 		ring->itr_register = E1000_EITR(0) + (vector << 2);
@@ -539,8 +558,14 @@ static int igb_request_msix(struct igb_a
 		vector++;
 	}
 
-	err = request_irq(adapter->msix_entries[vector].vector,
-			  &igb_msix_other, 0, netdev->name, netdev);
+	if (entropy)
+		err = request_irq(adapter->msix_entries[vector].vector,
+				&igb_msix_other, SA_SAMPLE_RANDOM,
+				netdev->name, netdev);
+	else
+		err = request_irq(adapter->msix_entries[vector].vector,
+				&igb_msix_other, 0, netdev->name, netdev);
+
 	if (err)
 		goto out;
 
@@ -664,8 +689,14 @@ static int igb_request_irq(struct igb_ad
 	}
 
 	if (adapter->flags & IGB_FLAG_HAS_MSI) {
-		err = request_irq(adapter->pdev->irq, &igb_intr_msi, 0,
-				  netdev->name, netdev);
+		if (entropy)
+			err = request_irq(adapter->pdev->irq, &igb_intr_msi,
+					SA_SAMPLE_RANDOM,
+					netdev->name, netdev);
+		else
+			err = request_irq(adapter->pdev->irq, &igb_intr_msi, 0,
+					netdev->name, netdev);
+
 		if (!err)
 			goto request_done;
 		/* fall back to legacy interrupts */
@@ -673,8 +704,13 @@ static int igb_request_irq(struct igb_ad
 		adapter->flags &= ~IGB_FLAG_HAS_MSI;
 	}
 
-	err = request_irq(adapter->pdev->irq, &igb_intr, IRQF_SHARED,
-			  netdev->name, netdev);
+	if (entropy)
+		err = request_irq(adapter->pdev->irq, &igb_intr,
+				IRQF_SHARED|SA_SAMPLE_RANDOM,
+				netdev->name, netdev);
+	else
+		err = request_irq(adapter->pdev->irq, &igb_intr, IRQF_SHARED,
+				netdev->name, netdev);
 
 	if (err)
 		dev_err(&adapter->pdev->dev, "Error %d getting interrupt\n",
