mirror of https://github.com/ipxe/ipxe.git
[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>pull/68/head
parent
08db2fd55c
commit
70189a8e47
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue