|
@@ -72,6 +72,9 @@ struct undi_nic {
|
72
|
72
|
/** Delay between retries of PXENV_UNDI_INITIALIZE */
|
73
|
73
|
#define UNDI_INITIALIZE_RETRY_DELAY_MS 200
|
74
|
74
|
|
|
75
|
+/** Maximum number of calls to PXENV_UNDI_ISR per poll */
|
|
76
|
+#define UNDI_POLL_QUOTA 4
|
|
77
|
+
|
75
|
78
|
/** Alignment of received frame payload */
|
76
|
79
|
#define UNDI_RX_ALIGN 16
|
77
|
80
|
|
|
@@ -328,6 +331,7 @@ static void undinet_poll ( struct net_device *netdev ) {
|
328
|
331
|
struct undi_nic *undinic = netdev->priv;
|
329
|
332
|
struct s_PXENV_UNDI_ISR undi_isr;
|
330
|
333
|
struct io_buffer *iobuf = NULL;
|
|
334
|
+ unsigned int quota = UNDI_POLL_QUOTA;
|
331
|
335
|
size_t len;
|
332
|
336
|
size_t reserve_len;
|
333
|
337
|
size_t frag_len;
|
|
@@ -366,7 +370,7 @@ static void undinet_poll ( struct net_device *netdev ) {
|
366
|
370
|
}
|
367
|
371
|
|
368
|
372
|
/* Run through the ISR loop */
|
369
|
|
- while ( 1 ) {
|
|
373
|
+ while ( quota-- ) {
|
370
|
374
|
profile_start ( &undinet_isr_call_profiler );
|
371
|
375
|
if ( ( rc = pxeparent_call ( undinet_entry, PXENV_UNDI_ISR,
|
372
|
376
|
&undi_isr,
|