X-Git-Url: https://git.tld-linux.org/?p=packages%2Fgrub2.git;a=blobdiff_plain;f=efi-net-fix.patch;fp=efi-net-fix.patch;h=0000000000000000000000000000000000000000;hp=41872c001d2da17788408ef25884f1d264c5ee6b;hb=86ce7c7dbd4244efa2e22bc08b0b231987f7df31;hpb=ef3736ee003f5c98c32dc03e73387c14adbb2fa6 diff --git a/efi-net-fix.patch b/efi-net-fix.patch deleted file mode 100644 index 41872c0..0000000 --- a/efi-net-fix.patch +++ /dev/null @@ -1,59 +0,0 @@ -From 886d93184b894a29b0bef1f2467230a20c7a33ce Mon Sep 17 00:00:00 2001 -From: Mark Salter -Date: Tue, 8 Apr 2014 10:58:11 -0400 -Subject: [PATCH] reopen SNP protocol for exclusive use by grub - -While working with pxeboot of grub on an ARM platform, I noticed -very poor network performance while grub was loading a kernel -and initramfs. The performance during the loading of grub itself -seemed reasonable. Digging into the issue, I found that the UEFI -firmware was periodically polling for network packets while grub -was downloading files. This was causing timeouts and retries in -the grub network stack. - -The solution I found was to reopen the SNP protocol for exclusive -use. This forces UEFI to shutdown its use of SNP so that grub is -not competing for incoming packets. - -Signed-off-by: Mark Salter ---- - grub-core/net/drivers/efi/efinet.c | 16 ++++++++++++++++ - 1 file changed, 16 insertions(+) - -diff --git a/grub-core/net/drivers/efi/efinet.c b/grub-core/net/drivers/efi/efinet.c -index 2b344d6..a6e4c79 100644 ---- a/grub-core/net/drivers/efi/efinet.c -+++ b/grub-core/net/drivers/efi/efinet.c -@@ -223,6 +223,7 @@ grub_efi_net_config_real (grub_efi_handle_t hnd, char **device, - { - struct grub_net_card *card; - grub_efi_device_path_t *dp; -+ grub_efi_simple_network_t *net; - - dp = grub_efi_get_device_path (hnd); - if (! dp) -@@ -250,6 +251,21 @@ grub_efi_net_config_real (grub_efi_handle_t hnd, char **device, - &pxe_mode->dhcp_ack, - sizeof (pxe_mode->dhcp_ack), - 1, device, path); -+ net = grub_efi_open_protocol (card->efi_handle, &net_io_guid, -+ GRUB_EFI_OPEN_PROTOCOL_BY_EXCLUSIVE); -+ if (net) { -+ if (net->mode->state == GRUB_EFI_NETWORK_STOPPED -+ && efi_call_1 (net->start, net) != GRUB_EFI_SUCCESS) -+ continue; -+ -+ if (net->mode->state == GRUB_EFI_NETWORK_STOPPED) -+ continue; -+ -+ if (net->mode->state == GRUB_EFI_NETWORK_STARTED -+ && efi_call_3 (net->initialize, net, 0, 0) != GRUB_EFI_SUCCESS) -+ continue; -+ card->efi_net = net; -+ } - return; - } - } --- -1.8.5.3 -