summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Brown2018-03-21 09:28:05 +0100
committerMichael Brown2018-03-21 09:28:05 +0100
commit0600ffeb3051a3ccbd56a4d6999d3eb55bc886df (patch)
treeac545a82980f71b98ad27cceb4ef4f421a570f4a
parent[build] Prevent use of MMX and SSE registers (diff)
downloadipxe-0600ffeb3051a3ccbd56a4d6999d3eb55bc886df.tar.gz
ipxe-0600ffeb3051a3ccbd56a4d6999d3eb55bc886df.tar.xz
ipxe-0600ffeb3051a3ccbd56a4d6999d3eb55bc886df.zip
[undi] Treat invalid IRQ numbers as non-fatal errors
If the underlying PXE stack reports an invalid IRQ number (above IRQ_MAX), treat this as equivalent to an empty IRQ number and fall back to using polling mode. Signed-off-by: Michael Brown <mcb30@ipxe.org>
-rw-r--r--src/arch/x86/drivers/net/undinet.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/src/arch/x86/drivers/net/undinet.c b/src/arch/x86/drivers/net/undinet.c
index 78191181..e8ec772e 100644
--- a/src/arch/x86/drivers/net/undinet.c
+++ b/src/arch/x86/drivers/net/undinet.c
@@ -938,10 +938,9 @@ int undinet_probe ( struct undi_device *undi, struct device *dev ) {
memcpy ( netdev->ll_addr, undi_info.CurrentNodeAddress, ETH_ALEN );
undinic->irq = undi_info.IntNumber;
if ( undinic->irq > IRQ_MAX ) {
- DBGC ( undinic, "UNDINIC %p has invalid IRQ %d\n",
+ DBGC ( undinic, "UNDINIC %p ignoring invalid IRQ %d\n",
undinic, undinic->irq );
- rc = -EINVAL;
- goto err_bad_irq;
+ undinic->irq = 0;
}
DBGC ( undinic, "UNDINIC %p has MAC address %s and IRQ %d\n",
undinic, eth_ntoa ( netdev->hw_addr ), undinic->irq );
@@ -984,7 +983,6 @@ int undinet_probe ( struct undi_device *undi, struct device *dev ) {
err_register:
err_undi_get_iface_info:
- err_bad_irq:
err_undi_get_information:
err_undi_initialize:
/* Shut down UNDI stack */