]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
Fix incorrect ISR PXE calls
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Mon, 27 Jun 2011 04:31:25 +0000 (06:31 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Mon, 27 Jun 2011 04:31:25 +0000 (06:31 +0200)
grub-core/net/drivers/i386/pc/pxe.c

index 084cdb876da4eef69c4419cf668b7cc8aabb010c..144df964c562c7d6b38ffbf49188de66ceb7bf8a 100644 (file)
@@ -165,7 +165,10 @@ grub_pxe_recv (const struct grub_net_card *dev __attribute__ ((unused)),
       isr->func_flag = GRUB_PXE_ISR_IN_START;
       grub_pxe_call (GRUB_PXENV_UNDI_ISR, isr, pxe_rm_entry);
       if (isr->status || isr->func_flag != GRUB_PXE_ISR_OUT_OURS)
-       return -1;
+       {
+         in_progress = 0;
+         return -1;
+       }
       grub_memset (isr, 0, sizeof (*isr));
       isr->func_flag = GRUB_PXE_ISR_IN_PROCESS;
       grub_pxe_call (GRUB_PXENV_UNDI_ISR, isr, pxe_rm_entry);
@@ -180,7 +183,10 @@ grub_pxe_recv (const struct grub_net_card *dev __attribute__ ((unused)),
   while (isr->func_flag != GRUB_PXE_ISR_OUT_RECEIVE)
     {
       if (isr->status || isr->func_flag == GRUB_PXE_ISR_OUT_DONE)
-       return -1;
+       {
+         in_progress = 0;
+         return -1;
+       }
       grub_memset (isr, 0, sizeof (*isr));
       isr->func_flag = GRUB_PXE_ISR_IN_GET_NEXT;
       grub_pxe_call (GRUB_PXENV_UNDI_ISR, isr, pxe_rm_entry);
@@ -198,11 +204,15 @@ grub_pxe_recv (const struct grub_net_card *dev __attribute__ ((unused)),
       isr->func_flag = GRUB_PXE_ISR_IN_GET_NEXT;
       grub_pxe_call (GRUB_PXENV_UNDI_ISR, isr, pxe_rm_entry);
       if (isr->status || isr->func_flag != GRUB_PXE_ISR_OUT_RECEIVE)
-       return -1;
+       {
+         in_progress = 1;
+         return -1;
+       }
 
       grub_memcpy (ptr, LINEAR (isr->buffer), isr->buffer_len);
       ptr += isr->buffer_len;
     }
+  in_progress = 1;
 
   return len;
 }