diff -urN gpxe-0.9.7/src/arch/i386/interface/pxe/pxe_undi.c gpxe-0.9.7-avoidspuriousirq/src/arch/i386/interface/pxe/pxe_undi.c
--- gpxe-0.9.7/src/arch/i386/interface/pxe/pxe_undi.c	2009-08-21 21:00:26.000000000 -0400
+++ gpxe-0.9.7-avoidspuriousirq/src/arch/i386/interface/pxe/pxe_undi.c	2009-08-21 20:59:51.000000000 -0400
@@ -277,14 +277,15 @@
 		}
 	}
 
+	/* Flag transmission as in-progress */
+	undi_tx_count++;
 	/* Transmit packet */
 	if ( ( rc = netdev_tx ( pxe_netdev, iobuf ) ) != 0 ) {
+		undi_tx_count--;
 		undi_transmit->Status = PXENV_STATUS ( rc );
 		return PXENV_EXIT_FAILURE;
 	}
 
-	/* Flag transmission as in-progress */
-	undi_tx_count++;
 
 	undi_transmit->Status = PXENV_STATUS_SUCCESS;
 	return PXENV_EXIT_SUCCESS;
