diff --git a/target/linux/x86/patches-3.3/003-via-rhine-crash-fix.patch b/target/linux/x86/patches-3.3/003-via-rhine-crash-fix.patch
new file mode 100644
index 0000000000000000000000000000000000000000..26bc380da76d7565629addc4f101b39d1632a626
--- /dev/null
+++ b/target/linux/x86/patches-3.3/003-via-rhine-crash-fix.patch
@@ -0,0 +1,60 @@
+--- a/drivers/net/ethernet/via/via-rhine.c
++++ b/drivers/net/ethernet/via/via-rhine.c
+@@ -689,9 +689,12 @@ static void __devinit rhine_reload_eepro
+ #ifdef CONFIG_NET_POLL_CONTROLLER
+ static void rhine_poll(struct net_device *dev)
+ {
+-	disable_irq(dev->irq);
+-	rhine_interrupt(dev->irq, (void *)dev);
+-	enable_irq(dev->irq);
++	struct rhine_private *rp = netdev_priv(dev);
++	const int irq = rp->pdev->irq;
++
++	disable_irq(irq);
++	rhine_interrupt(irq, dev);
++	enable_irq(irq);
+ }
+ #endif
+
+@@ -929,7 +932,6 @@ static int __devinit rhine_init_one(stru
+ 	dev = alloc_etherdev(sizeof(struct rhine_private));
+ 	if (!dev) {
+ 		rc = -ENOMEM;
+-		dev_err(&pdev->dev, "alloc_etherdev failed\n");
+ 		goto err_out;
+ 	}
+ 	SET_NETDEV_DEV(dev, &pdev->dev);
+@@ -973,7 +975,6 @@ static int __devinit rhine_init_one(stru
+ 	}
+ #endif /* USE_MMIO */
+
+-	dev->base_addr = (unsigned long)ioaddr;
+ 	rp->base = ioaddr;
+
+ 	/* Get chip registers into a sane state */
+@@ -996,8 +997,6 @@ static int __devinit rhine_init_one(stru
+ 	if (!phy_id)
+ 		phy_id = ioread8(ioaddr + 0x6C);
+
+-	dev->irq = pdev->irq;
+-
+ 	spin_lock_init(&rp->lock);
+ 	mutex_init(&rp->task_lock);
+ 	INIT_WORK(&rp->reset_task, rhine_reset_task);
+@@ -1158,7 +1157,6 @@ static void alloc_rbufs(struct net_devic
+ 		rp->rx_skbuff[i] = skb;
+ 		if (skb == NULL)
+ 			break;
+-		skb->dev = dev;                 /* Mark as being used by this device. */
+
+ 		rp->rx_skbuff_dma[i] =
+ 			pci_map_single(rp->pdev, skb->data, rp->rx_buf_sz,
+@@ -1943,7 +1941,6 @@ static int rhine_rx(struct net_device *d
+ 			rp->rx_skbuff[entry] = skb;
+ 			if (skb == NULL)
+ 				break;	/* Better luck next round. */
+-			skb->dev = dev;	/* Mark as being used by this device. */
+ 			rp->rx_skbuff_dma[entry] =
+ 				pci_map_single(rp->pdev, skb->data,
+ 					       rp->rx_buf_sz,
+