Oracle bugzilla 13341
December 28, 2011
Chuck Anderson

Port linux-2.6.18-enable-entropy-for-all.patch from EL5u7 to EL5u8

diff -up linux-2.6.18-300.0.0.0.1.el5.x86_64/drivers/net/bnx2.c.orig linux-2.6.18-300.0.0.0.1.el5.x86_64/drivers/net/bnx2.c
--- linux-2.6.18-300.0.0.0.1.el5.x86_64/drivers/net/bnx2.c.orig	2011-12-28 16:22:48.000000000 -0800
+++ linux-2.6.18-300.0.0.0.1.el5.x86_64/drivers/net/bnx2.c	2011-12-28 16:24:17.000000000 -0800
@@ -83,11 +83,11 @@ static int disable_msi = 0;
 module_param(disable_msi, int, 0);
 MODULE_PARM_DESC(disable_msi, "Disable Message Signaled Interrupt (MSI)");
 
-static int enable_entropy = 0;
+static int enable_entropy = 1;
 
-module_param(enable_entropy, int, 0);
+module_param(enable_entropy, int, 1);
 MODULE_PARM_DESC(enable_entropy,
-		 "Allow bnx2 to populate the /dev/random entropy pool");
+	"Allow bnx2 to populate the /dev/random entropy pool (default=1)");
 
 typedef enum {
 	BCM5706 = 0,
--- linux-2.6.18-339.0.0.0.1.el5.x86_64/drivers/net/bnx2x/bnx2x_cmn.c.orig	2012-09-26 12:17:21.000000000 -0700
+++ linux-2.6.18-339.0.0.0.1.el5.x86_64/drivers/net/bnx2x/bnx2x_cmn.c	2012-09-26 12:24:48.000000000 -0700
@@ -1422,7 +1422,7 @@
 	int i, rc, offset = 0;
 
 	rc = request_irq(bp->msix_table[offset++].vector,
-			 bnx2x_msix_sp_int, 0,
+			 bnx2x_msix_sp_int, IRQF_SAMPLE_RANDOM,
 			 bp->dev->name, bp->dev);
 	if (rc) {
 		BNX2X_ERR("request sp irq failed\n");
@@ -1438,7 +1438,8 @@
 			 bp->dev->name, i);
 
 		rc = request_irq(bp->msix_table[offset].vector,
-				 bnx2x_msix_fp_int, 0, fp->name, fp);
+				 bnx2x_msix_fp_int, IRQF_SAMPLE_RANDOM,
+				 fp->name, fp);
 		if (rc) {
 			BNX2X_ERR("request fp #%d irq (%d) failed  rc %d\n", i,
 			      bp->msix_table[offset].vector, rc);
@@ -1479,9 +1480,9 @@
 	unsigned int irq;
 
 	if (bp->flags & (USING_MSI_FLAG | USING_MSIX_FLAG))
-		flags = 0;
+		flags = IRQF_SAMPLE_RANDOM;
 	else
-		flags = IRQF_SHARED;
+		flags = IRQF_SHARED | IRQF_SAMPLE_RANDOM;
 
 	if (bp->flags & USING_MSIX_FLAG)
 		irq = bp->msix_table[0].vector;
diff -up linux-2.6.18-300.0.0.0.1.el5.x86_64/drivers/net/e1000e/netdev.c.orig linux-2.6.18-300.0.0.0.1.el5.x86_64/drivers/net/e1000e/netdev.c
--- linux-2.6.18-300.0.0.0.1.el5.x86_64/drivers/net/e1000e/netdev.c.orig	2011-12-28 16:25:13.000000000 -0800
+++ linux-2.6.18-300.0.0.0.1.el5.x86_64/drivers/net/e1000e/netdev.c	2011-12-28 16:33:16.000000000 -0800
@@ -1927,7 +1927,8 @@ static int e1000_request_msix(struct e10
 	else
 		memcpy(adapter->rx_ring->name, netdev->name, IFNAMSIZ);
 	err = request_irq(adapter->msix_entries[vector].vector,
-			  e1000_intr_msix_rx, 0, adapter->rx_ring->name,
+			  e1000_intr_msix_rx, IRQF_SAMPLE_RANDOM,
+			  adapter->rx_ring->name,
 			  netdev);
 	if (err)
 		goto out;
@@ -1942,7 +1943,8 @@ static int e1000_request_msix(struct e10
 	else
 		memcpy(adapter->tx_ring->name, netdev->name, IFNAMSIZ);
 	err = request_irq(adapter->msix_entries[vector].vector,
-			  e1000_intr_msix_tx, 0, adapter->tx_ring->name,
+			  e1000_intr_msix_tx, IRQF_SAMPLE_RANDOM,
+			  adapter->tx_ring->name,
 			  netdev);
 	if (err)
 		goto out;
@@ -1951,7 +1953,8 @@ static int e1000_request_msix(struct e10
 	vector++;
 
 	err = request_irq(adapter->msix_entries[vector].vector,
-			  e1000_msix_other, 0, netdev->name, netdev);
+			  e1000_msix_other, IRQF_SAMPLE_RANDOM,
+			  netdev->name, netdev);
 	if (err)
 		goto out;
 
@@ -1982,7 +1985,8 @@ static int e1000_request_irq(struct e100
 		e1000e_set_interrupt_capability(adapter);
 	}
 	if (adapter->flags & FLAG_MSI_ENABLED) {
-		err = request_irq(adapter->pdev->irq, e1000_intr_msi, 0,
+		err = request_irq(adapter->pdev->irq, e1000_intr_msi,
+				  IRQF_SAMPLE_RANDOM,
 				  netdev->name, netdev);
 		if (!err)
 			return err;
@@ -1992,7 +1996,8 @@ static int e1000_request_irq(struct e100
 		adapter->int_mode = E1000E_INT_MODE_LEGACY;
 	}
 
-	err = request_irq(adapter->pdev->irq, e1000_intr, IRQF_SHARED,
+	err = request_irq(adapter->pdev->irq, e1000_intr,
+			  IRQF_SHARED|IRQF_SAMPLE_RANDOM,
 			  netdev->name, netdev);
 	if (err)
 		e_err("Unable to allocate interrupt, Error: %d\n", err);
@@ -3581,7 +3586,8 @@ static int e1000_test_msi_interrupt(stru
 	if (err)
 		goto msi_test_failed;
 
-	err = request_irq(adapter->pdev->irq, e1000_intr_msi_test, 0,
+	err = request_irq(adapter->pdev->irq, e1000_intr_msi_test,
+			  IRQF_SAMPLE_RANDOM,
 			  netdev->name, netdev);
 	if (err) {
 		pci_disable_msi(adapter->pdev);
--- linux-2.6.18-339.0.0.0.1.el5.x86_64/drivers/net/igb/igb_main.c.orig	2012-09-26 12:27:04.000000000 -0700
+++ linux-2.6.18-339.0.0.0.1.el5.x86_64/drivers/net/igb/igb_main.c	2012-09-26 12:32:43.000000000 -0700
@@ -191,9 +191,10 @@
 MODULE_PARM_DESC(max_vfs, "Maximum number of virtual functions to allocate "
                  "per physical function");
 #endif /* CONFIG_PCI_IOV */
-static unsigned int entropy = 0;
-module_param(entropy, uint, 0);
-MODULE_PARM_DESC(entropy, "Allow igb to populate the /dev/random entropy pool");
+static unsigned int entropy = 1;
+module_param(entropy, uint, 1);
+MODULE_PARM_DESC(entropy,
+	"Allow igb to populate the /dev/random entropy pool (default=1)");
 
 static pci_ers_result_t igb_io_error_detected(struct pci_dev *,
 		     pci_channel_state_t);
@@ -898,7 +899,7 @@
 
 	if (entropy)
 		err = request_irq(adapter->msix_entries[vector].vector,
-		                  igb_msix_other, SA_SAMPLE_RANDOM,
+		                  igb_msix_other, IRQF_SAMPLE_RANDOM,
 		                  netdev->name, adapter);
 	else
 		err = request_irq(adapter->msix_entries[vector].vector,
@@ -926,7 +927,7 @@
 
 		if (entropy)
 			err = request_irq(adapter->msix_entries[vector].vector,
-			                  igb_msix_ring, SA_SAMPLE_RANDOM,
+			                  igb_msix_ring, IRQF_SAMPLE_RANDOM,
 			                  q_vector->name, q_vector);
 		else
 			err = request_irq(adapter->msix_entries[vector].vector,
@@ -1281,7 +1282,7 @@
 	if (adapter->flags & IGB_FLAG_HAS_MSI) {
 		if (entropy)
 			err = request_irq(pdev->irq, igb_intr_msi,
-					  SA_SAMPLE_RANDOM, netdev->name,
+					  IRQF_SAMPLE_RANDOM, netdev->name,
 					  adapter);
 		else
 			err = request_irq(pdev->irq, igb_intr_msi, 0,
@@ -1296,7 +1297,7 @@
 
 	if (entropy)
 		err = request_irq(pdev->irq, igb_intr,
-				  IRQF_SHARED | SA_SAMPLE_RANDOM,
+				  IRQF_SHARED | IRQF_SAMPLE_RANDOM,
 				  netdev->name, adapter);
 	else
 		err = request_irq(pdev->irq, igb_intr, IRQF_SHARED,
diff -up linux-2.6.18-300.0.0.0.1.el5.x86_64/drivers/net/ixgbe/ixgbe_main.c.orig linux-2.6.18-300.0.0.0.1.el5.x86_64/drivers/net/ixgbe/ixgbe_main.c
--- linux-2.6.18-300.0.0.0.1.el5.x86_64/drivers/net/ixgbe/ixgbe_main.c.orig	2011-12-28 16:47:46.000000000 -0800
+++ linux-2.6.18-300.0.0.0.1.el5.x86_64/drivers/net/ixgbe/ixgbe_main.c	2011-12-28 17:09:45.000000000 -0800
@@ -2324,8 +2324,8 @@ static int ixgbe_request_msix_irqs(struc
 			continue;
 		}
 		err = request_irq(adapter->msix_entries[vector].vector,
-				  handler, 0, q_vector->name,
-				  q_vector);
+				  handler, IRQF_SAMPLE_RANDOM,
+				  q_vector->name, q_vector);
 		if (err) {
 			e_err(probe, "request_irq failed for MSIX interrupt "
 			      "Error: %d\n", err);
@@ -2335,7 +2335,8 @@ static int ixgbe_request_msix_irqs(struc
 
 	sprintf(adapter->lsc_int_name, "%s:lsc", netdev->name);
 	err = request_irq(adapter->msix_entries[vector].vector,
-			  ixgbe_msix_lsc, 0, adapter->lsc_int_name, adapter);
+			  ixgbe_msix_lsc, IRQF_SAMPLE_RANDOM,
+			  adapter->lsc_int_name, adapter);
 	if (err) {
 		e_err(probe, "request_irq for msix_lsc failed: %d\n", err);
 		goto free_queue_irqs;
@@ -2497,10 +2498,12 @@ static int ixgbe_request_irq(struct ixgb
 	if (adapter->flags & IXGBE_FLAG_MSIX_ENABLED) {
 		err = ixgbe_request_msix_irqs(adapter);
 	} else if (adapter->flags & IXGBE_FLAG_MSI_ENABLED) {
-		err = request_irq(adapter->pdev->irq, ixgbe_intr, 0,
+		err = request_irq(adapter->pdev->irq, ixgbe_intr,
+				  IRQF_SAMPLE_RANDOM,
 				  netdev->name, adapter);
 	} else {
-		err = request_irq(adapter->pdev->irq, ixgbe_intr, IRQF_SHARED,
+		err = request_irq(adapter->pdev->irq, ixgbe_intr,
+				  IRQF_SHARED|IRQF_SAMPLE_RANDOM,
 				  netdev->name, adapter);
 	}
 
diff -up linux-2.6.18-300.0.0.0.1.el5.x86_64/drivers/net/ixgbevf/ixgbevf_main.c.orig linux-2.6.18-300.0.0.0.1.el5.x86_64/drivers/net/ixgbevf/ixgbevf_main.c
--- linux-2.6.18-300.0.0.0.1.el5.x86_64/drivers/net/ixgbevf/ixgbevf_main.c.orig	2011-12-28 17:11:22.000000000 -0800
+++ linux-2.6.18-300.0.0.0.1.el5.x86_64/drivers/net/ixgbevf/ixgbevf_main.c	2011-12-28 17:13:35.000000000 -0800
@@ -1151,7 +1151,8 @@ static int ixgbevf_request_msix_irqs(str
 			continue;
 		}
 		err = request_irq(adapter->msix_entries[vector].vector,
-				  handler, 0, adapter->name[vector],
+				  handler, IRQF_SAMPLE_RANDOM,
+				  adapter->name[vector],
 				  adapter->q_vector[vector]);
 		if (err) {
 			hw_dbg(&adapter->hw,
@@ -1163,7 +1164,8 @@ static int ixgbevf_request_msix_irqs(str
 
 	sprintf(adapter->name[vector], "%s:mbx", netdev->name);
 	err = request_irq(adapter->msix_entries[vector].vector,
-			  &ixgbevf_msix_mbx, 0, adapter->name[vector], netdev);
+			  &ixgbevf_msix_mbx, IRQF_SAMPLE_RANDOM,
+			  adapter->name[vector], netdev);
 	if (err) {
 		hw_dbg(&adapter->hw,
 		       "request_irq for msix_mbx failed: %d\n", err);
diff -up linux-2.6.18-300.0.0.0.1.el5.x86_64/drivers/net/ixgb/ixgb_main.c.orig linux-2.6.18-300.0.0.0.1.el5.x86_64/drivers/net/ixgb/ixgb_main.c
--- linux-2.6.18-300.0.0.0.1.el5.x86_64/drivers/net/ixgb/ixgb_main.c.orig	2011-12-28 17:14:35.000000000 -0800
+++ linux-2.6.18-300.0.0.0.1.el5.x86_64/drivers/net/ixgb/ixgb_main.c	2011-12-28 17:16:45.000000000 -0800
@@ -214,7 +214,7 @@ int
 ixgb_up(struct ixgb_adapter *adapter)
 {
 	struct net_device *netdev = adapter->netdev;
-	int err, irq_flags = IRQF_SHARED;
+	int err, irq_flags = IRQF_SHARED | IRQF_SAMPLE_RANDOM;
 	int max_frame = netdev->mtu + ENET_HEADER_SIZE + ENET_FCS_LENGTH;
 	struct ixgb_hw *hw = &adapter->hw;
 
@@ -238,7 +238,7 @@ ixgb_up(struct ixgb_adapter *adapter)
 		err = pci_enable_msi(adapter->pdev);
 		if (!err) {
 			adapter->have_msi = 1;
-			irq_flags = 0;
+			irq_flags = IRQF_SAMPLE_RANDOM;
 		}
 		/* proceed to try to request regular interrupt */
 	}
