aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Habets <mhabets@solarflare.com>2018-01-10 15:32:34 +0000
committerMichael Brown <mcb30@ipxe.org>2018-01-14 21:53:29 +0000
commit70189a8e4702016f654310e68d9ec4ec425e7344 (patch)
tree8ba48417819ba63dfbd9794f65a0347b583ab9d3
parent08db2fd55c80157d0c5329560f57b125ceb8adf8 (diff)
downloadipxe-70189a8e4702016f654310e68d9ec4ec425e7344.zip
ipxe-70189a8e4702016f654310e68d9ec4ec425e7344.tar.gz
ipxe-70189a8e4702016f654310e68d9ec4ec425e7344.tar.bz2
[netdevice] Make netdev_irq_enabled() independent of netdev_irq_supported()
The UNDI layer uses the NETDEV_IRQ_ENABLED flag to choose whether to return PXENV_UNDI_ISR_OUT_OURS or PXENV_UNDI_ISR_OUT_NOT_OURS for a given interrupt. For a network device that does not support interrupts, the flag will never be set and so pxenv_undi_isr() will always return PXENV_UNDI_ISR_OUT_NOT_OURS. This causes some NBPs (such as lpxelinux.0) to hang. Redefine NETDEV_IRQ_ENABLED as a simple administrative flag which can be set even on network devices that do not support interrupts. This allows pxenv_undi_isr() (which is the sole user of NETDEV_IRQ_ENABLED) to function as expected by lpxelinux.0. Signed-off-by: Martin Habets <mhabets@solarflare.com> Modified-by: Michael Brown <mcb30@ipxe.org> Signed-off-by: Michael Brown <mcb30@ipxe.org>
-rw-r--r--src/net/netdevice.c9
1 files changed, 3 insertions, 6 deletions
diff --git a/src/net/netdevice.c b/src/net/netdevice.c
index 4c211d7..71a37ec 100644
--- a/src/net/netdevice.c
+++ b/src/net/netdevice.c
@@ -874,12 +874,9 @@ void unregister_netdev ( struct net_device *netdev ) {
*/
void netdev_irq ( struct net_device *netdev, int enable ) {
- /* Do nothing if device does not support interrupts */
- if ( ! netdev_irq_supported ( netdev ) )
- return;
-
- /* Enable or disable device interrupts */
- netdev->op->irq ( netdev, enable );
+ /* Enable or disable device interrupts, if applicable */
+ if ( netdev_irq_supported ( netdev ) )
+ netdev->op->irq ( netdev, enable );
/* Record interrupt enabled state */
netdev->state &= ~NETDEV_IRQ_ENABLED;