bonzini pushed to ipxe (master). "Synchronize with QEMU 2.3.0 submodule (..more)"

notifications at fedoraproject.org notifications at fedoraproject.org
Thu Apr 16 08:57:19 UTC 2015


>From cf5216a4fefb7234f6035637556996e883ee5442 Mon Sep 17 00:00:00 2001
From: Paolo Bonzini <pbonzini at redhat.com>
Date: Thu, 16 Apr 2015 10:35:00 +0200
Subject: Synchronize with QEMU 2.3.0 submodule

- Update to latest upstream snapshot
- Switch source to .tar.xz
- Include patches from QEMU submodule
- Use config file for configuration
- Distribute additional permissions on top of GPLv2 ("UBDL")

diff --git a/.gitignore b/.gitignore
index cc20952..ac22839 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,4 @@
 noarch/
 .build*.log
 *.src.rpm
+/ipxe-20150407-gitdc795b9f.tar.xz
diff --git a/0001-Customize-ROM-banner-timeout.patch b/0001-Customize-ROM-banner-timeout.patch
deleted file mode 100644
index ec52d98..0000000
--- a/0001-Customize-ROM-banner-timeout.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From e6f314fa42148c9915b96b7541994c450ae9487c Mon Sep 17 00:00:00 2001
-From: Alex Williamson <alex.williamson at redhat.com>
-Date: Mon, 3 Mar 2014 10:34:14 -0700
-Subject: [PATCH] Customize ROM banner timeout
-
-Users want some opportunity to interact with the iPXE shell, but
-tools like libguestfs want to boot as quickly as possible.  Create
-a compromise by disabling the interactive banner prompt during ROM
-initialization, but retaining it when we actually attempt to boot
-from the device.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=842932
-
-Signed-off-by: Alex Williamson <alex.williamson at redhat.com>
----
- src/config/general.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/config/general.h b/src/config/general.h
-index 589798f..07df6a1 100644
---- a/src/config/general.h
-+++ b/src/config/general.h
-@@ -43,7 +43,7 @@ FILE_LICENCE ( GPL2_OR_LATER );
-  * to the user.
-  */
- #define BANNER_TIMEOUT		20
--#define ROM_BANNER_TIMEOUT	( 2 * BANNER_TIMEOUT )
-+#define ROM_BANNER_TIMEOUT	0
- 
- /*
-  * Network protocols
diff --git a/0002-config-Enable-PNG-support.patch b/0002-config-Enable-PNG-support.patch
deleted file mode 100644
index b9637cc..0000000
--- a/0002-config-Enable-PNG-support.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-From 22e7c8723aa5a9251f1b8d76869f61bb1a2a59df Mon Sep 17 00:00:00 2001
-From: Cole Robinson <crobinso at redhat.com>
-Date: Mon, 3 Mar 2014 18:30:35 -0500
-Subject: [PATCH] config: Enable PNG support
-
-Requested here: https://bugzilla.redhat.com/show_bug.cgi?id=1058176
----
- src/config/general.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/config/general.h b/src/config/general.h
-index 07df6a1..57850b0 100644
---- a/src/config/general.h
-+++ b/src/config/general.h
-@@ -115,7 +115,7 @@ FILE_LICENCE ( GPL2_OR_LATER );
- //#define	IMAGE_EFI		/* EFI image support */
- //#define	IMAGE_SDI		/* SDI image support */
- //#define	IMAGE_PNM		/* PNM image support */
--//#define	IMAGE_PNG		/* PNG image support */
-+#define	IMAGE_PNG		/* PNG image support */
- 
- /*
-  * Command-line commands to include
diff --git a/config.local.general.h b/config.local.general.h
new file mode 100644
index 0000000..5b0d135
--- /dev/null
+++ b/config.local.general.h
@@ -0,0 +1,10 @@
+/* Requested here: https://bugzilla.redhat.com/show_bug.cgi?id=842932 */
+#undef BANNER_TIMEOUT
+#define BANNER_TIMEOUT 30
+#undef ROM_BANNER_TIMEOUT
+#define ROM_BANNER_TIMEOUT 0
+
+/* Requested here: https://bugzilla.redhat.com/show_bug.cgi?id=1058176 */
+#define IMAGE_PNG
+
+#undef EFI_PROTO_LOAD_FILE
diff --git a/ipxe.spec b/ipxe.spec
index bb86047..81a0c9f 100644
--- a/ipxe.spec
+++ b/ipxe.spec
@@ -29,30 +29,30 @@
 # snapshots using the folowing commands:
 #
 # $ hash=`git log -1 --format='%h'`
-# $ date=`date '+%Y%m%d'`
-# $ git archive --output ipxe-${date}-git${hash}.tar.gz --prefix ipxe-${date}-git${hash}/ ${hash}
+# $ date=`git log -1 --format='%cd' --date=short | tr -d -`
+# $ git archive --prefix ipxe-${date}-git${hash}/ ${hash} | xz -7e > ipxe-${date}-git${hash}.tar.xz
 #
 # And then change these two:
 
-%global date 20140303
-%global hash ff1e7fc7
+%global date 20150407
+%global hash dc795b9f
 
 Name:    ipxe
 Version: %{date}
-Release: 3.git%{hash}%{?dist}
+Release: 1.git%{hash}%{?dist}
 Summary: A network boot loader
 
 Group:   System Environment/Base
-License: GPLv2 and BSD
+License: GPLv2 with additional permissions and BSD
 URL:     http://ipxe.org/
 
-Source0: %{name}-%{version}-git%{hash}.tar.gz
+Source0: %{name}-%{version}-git%{hash}.tar.xz
 Source1: USAGE
+Source2: config.local.general.h
 
-# Allow access to ipxe prompt if VM is set to pxe boot (bz #842932)
-Patch0001: 0001-Customize-ROM-banner-timeout.patch
-# Enable PNG support (bz #1058176)
-Patch0002: 0002-config-Enable-PNG-support.patch
+# From QEMU
+Patch1001: qemu-0001-efi_snp-improve-compliance-with-the-EFI_SIMPLE_NETWO.patch
+Patch1002: qemu-0002-efi-make-load-file-protocol-optional.patch
 
 %ifarch %{buildarches}
 BuildRequires: perl
@@ -60,6 +60,7 @@ BuildRequires: syslinux
 BuildRequires: mtools
 BuildRequires: mkisofs
 BuildRequires: edk2-tools
+BuildRequires: xz-devel
 
 BuildRequires: binutils-devel
 BuildRequires: binutils-x86_64-linux-gnu gcc-x86_64-linux-gnu
@@ -118,13 +119,15 @@ DNS, HTTP, iSCSI, etc.
 %prep
 %setup -q -n %{name}-%{version}-git%{hash}
 
-# Allow access to ipxe prompt if VM is set to pxe boot (bz #842932)
-%patch0001 -p1
-# Enable PNG support (bz #1058176)
-%patch0002 -p1
+# From QEMU
+%patch1001 -p1
+%patch1002 -p1
 
 cp -a %{SOURCE1} .
 
+# Apply local configuration tweaks
+cp -a %{SOURCE2} src/config/local/general.h
+
 %build
 %ifarch %{buildarches}
 # The src/Makefile.housekeeping relies on .git/index existing
@@ -202,19 +205,26 @@ done
 %{_datadir}/%{name}/ipxe.dsk
 %{_datadir}/%{name}/ipxe.lkrn
 %{_datadir}/%{name}/undionly.kpxe
-%doc COPYING COPYRIGHTS USAGE
+%doc COPYING COPYING.GPLv2 COPYING.UBDL USAGE
 
 %files roms -f rom.list
 %dir %{_datadir}/%{name}
-%doc COPYING COPYRIGHTS
+%doc COPYING COPYING.GPLv2 COPYING.UBDL
 
 %files roms-qemu -f qemu.rom.list
 %dir %{_datadir}/%{name}
 %dir %{_datadir}/%{name}.efi
-%doc COPYING COPYRIGHTS
+%doc COPYING COPYING.GPLv2 COPYING.UBDL
 %endif
 
 %changelog
+* Thu Apr 16 2015 Paolo Bonzini <pbonzini at redhat.com> - 20150407-1.gitdc795b9f
+- Update to latest upstream snapshot
+- Switch source to .tar.xz
+- Include patches from QEMU submodule
+- Use config file for configuration
+- Distribute additional permissions on top of GPLv2 ("UBDL")
+
 * Sat Aug 16 2014 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 20140303-3.gitff1e7fc7
 - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
 
diff --git a/qemu-0001-efi_snp-improve-compliance-with-the-EFI_SIMPLE_NETWO.patch b/qemu-0001-efi_snp-improve-compliance-with-the-EFI_SIMPLE_NETWO.patch
new file mode 100644
index 0000000..7f6febf
--- /dev/null
+++ b/qemu-0001-efi_snp-improve-compliance-with-the-EFI_SIMPLE_NETWO.patch
@@ -0,0 +1,160 @@
+From 9e870d92035ec7ca946e702236bfe104e964f8c6 Mon Sep 17 00:00:00 2001
+From: Laszlo Ersek <lersek at redhat.com>
+Date: Thu, 22 Jan 2015 22:05:35 +0100
+Subject: [PATCH 1/2] efi_snp: improve compliance with the
+ EFI_SIMPLE_NETWORK_PROTOCOL spec
+
+The efi_snp interface dates back to 2008, when the GetStatus() interface
+must have been seriously under-specified. The UEFI Specification (2.4)
+specifies EFI_SIMPLE_NETWORK_PROTOCOL in detail however. In short:
+
+- the Transmit() interface is assumed to link (not copy) the SNP client's
+  buffer and return at once (without blocking), taking ownership of the
+  buffer temporarily;
+
+- the GetStatus() interface releases one of the completed (transmitted or
+  internally copied) buffers back to the caller. If there are several
+  completed buffers, it is unspecified which one is returned.
+
+The EFI build of the grub boot loader actually verifies the buffer address
+returned by GetStatus(), therefore in efi_snp we must at least fake the
+queueing of client buffers. This patch doesn't track client buffers
+together with the internally queued io_buffer structures, we consider a
+client buffer recyclable as soon as we make a deep copy of it and queue
+the copy internally.
+
+Signed-off-by: Laszlo Ersek <lersek at redhat.com>
+Signed-off-by: Gerd Hoffmann <kraxel at redhat.com>
+---
+ src/include/ipxe/efi/efi_snp.h |  6 +++++
+ src/interface/efi/efi_snp.c    | 54 ++++++++++++++++++++++++------------------
+ 2 files changed, 37 insertions(+), 23 deletions(-)
+
+diff --git a/src/include/ipxe/efi/efi_snp.h b/src/include/ipxe/efi/efi_snp.h
+index a18bced..863a81a 100644
+--- a/src/include/ipxe/efi/efi_snp.h
++++ b/src/include/ipxe/efi/efi_snp.h
+@@ -18,6 +18,8 @@
+ #include <ipxe/efi/Protocol/HiiDatabase.h>
+ #include <ipxe/efi/Protocol/LoadFile.h>
+ 
++#define MAX_RECYCLED_TXBUFS 64
++
+ /** An SNP device */
+ struct efi_snp_device {
+ 	/** List of SNP devices */
+@@ -44,6 +46,10 @@ struct efi_snp_device {
+ 	 * Used in order to generate TX completions.
+ 	 */
+ 	unsigned int tx_count_txbufs;
++	/** Holds the addresses of recycled SNP client buffers; a ring. */
++	void *tx_recycled_txbufs[MAX_RECYCLED_TXBUFS];
++	/** The index of the first buffer to return to the SNP client. */
++	unsigned tx_first_txbuf;
+ 	/** Outstanding RX packet count (via "interrupt status") */
+ 	unsigned int rx_count_interrupts;
+ 	/** Outstanding RX packet count (via WaitForPacket event) */
+diff --git a/src/interface/efi/efi_snp.c b/src/interface/efi/efi_snp.c
+index 67fba34..c21af33 100644
+--- a/src/interface/efi/efi_snp.c
++++ b/src/interface/efi/efi_snp.c
+@@ -68,6 +68,14 @@ static void efi_snp_set_state ( struct efi_snp_device *snpdev ) {
+ 		 */
+ 		mode->State = EfiSimpleNetworkInitialized;
+ 	}
++
++	if (mode->State != EfiSimpleNetworkInitialized) {
++		/* Zero the number of recycled buffers when moving to any other
++		 * state than Initialized. Transmit() and GetStatus() are only
++		 * valid in Initialized.
++		 */
++		snpdev->tx_count_txbufs = 0;
++	}
+ }
+ 
+ /**
+@@ -446,12 +454,12 @@ efi_snp_nvdata ( EFI_SIMPLE_NETWORK_PROTOCOL *snp, BOOLEAN read,
+  *
+  * @v snp		SNP interface
+  * @v interrupts	Interrupt status, or NULL
+- * @v txbufs		Recycled transmit buffer address, or NULL
++ * @v txbuf		Recycled transmit buffer address, or NULL
+  * @ret efirc		EFI status code
+  */
+ static EFI_STATUS EFIAPI
+ efi_snp_get_status ( EFI_SIMPLE_NETWORK_PROTOCOL *snp,
+-		     UINT32 *interrupts, VOID **txbufs ) {
++		     UINT32 *interrupts, VOID **txbuf ) {
+ 	struct efi_snp_device *snpdev =
+ 		container_of ( snp, struct efi_snp_device, snp );
+ 
+@@ -485,30 +493,22 @@ efi_snp_get_status ( EFI_SIMPLE_NETWORK_PROTOCOL *snp,
+ 		DBGC2 ( snpdev, " INTS:%02x", *interrupts );
+ 	}
+ 
+-	/* TX completions.  It would be possible to design a more
+-	 * idiotic scheme for this, but it would be a challenge.
+-	 * According to the UEFI header file, txbufs will be filled in
+-	 * with a list of "recycled transmit buffers" (i.e. completed
+-	 * TX buffers).  Observant readers may care to note that
+-	 * *txbufs is a void pointer.  Precisely how a list of
+-	 * completed transmit buffers is meant to be represented as an
+-	 * array of voids is left as an exercise for the reader.
+-	 *
+-	 * The only users of this interface (MnpDxe/MnpIo.c and
+-	 * PxeBcDxe/Bc.c within the EFI dev kit) both just poll until
+-	 * seeing a non-NULL result return in txbufs.  This is valid
+-	 * provided that they do not ever attempt to transmit more
+-	 * than one packet concurrently (and that TX never times out).
++	/* In efi_snp_transmit() we enqueue packets by copying them (not by
++	 * linking them), hence we can recycle them immediately to the SNP
++	 * client.
+ 	 */
+-	if ( txbufs ) {
+-		if ( snpdev->tx_count_txbufs &&
+-		     list_empty ( &snpdev->netdev->tx_queue ) ) {
+-			*txbufs = "Which idiot designed this API?";
++	if ( txbuf ) {
++		if ( snpdev->tx_count_txbufs ) {
++			unsigned first;
++
++			first = snpdev->tx_first_txbuf++;
++			snpdev->tx_first_txbuf %= MAX_RECYCLED_TXBUFS;
++			*txbuf = snpdev->tx_recycled_txbufs[first];
+ 			snpdev->tx_count_txbufs--;
+ 		} else {
+-			*txbufs = NULL;
++			*txbuf = NULL;
+ 		}
+-		DBGC2 ( snpdev, " TX:%s", ( *txbufs ? "some" : "none" ) );
++		DBGC2 ( snpdev, " TX:%p", *txbuf );
+ 	}
+ 
+ 	DBGC2 ( snpdev, "\n" );
+@@ -560,6 +560,12 @@ efi_snp_transmit ( EFI_SIMPLE_NETWORK_PROTOCOL *snp,
+ 	if ( efi_snp_claimed )
+ 		return EFI_NOT_READY;
+ 
++	assert ( snpdev->tx_count_txbufs <= MAX_RECYCLED_TXBUFS );
++	if ( snpdev->tx_count_txbufs == MAX_RECYCLED_TXBUFS ) {
++		/* No room to recycle another buffer. */
++		return EFI_NOT_READY;
++	}
++
+ 	/* Sanity checks */
+ 	if ( ll_header_len ) {
+ 		if ( ll_header_len != ll_protocol->ll_header_len ) {
+@@ -626,7 +632,9 @@ efi_snp_transmit ( EFI_SIMPLE_NETWORK_PROTOCOL *snp,
+ 
+ 	/* Record transmission as outstanding */
+ 	snpdev->tx_count_interrupts++;
+-	snpdev->tx_count_txbufs++;
++	snpdev->tx_recycled_txbufs[(snpdev->tx_first_txbuf +
++				    snpdev->tx_count_txbufs++
++				   ) % MAX_RECYCLED_TXBUFS] = data;
+ 
+ 	return 0;
+ 
+-- 
+1.8.3.1
+
diff --git a/qemu-0002-efi-make-load-file-protocol-optional.patch b/qemu-0002-efi-make-load-file-protocol-optional.patch
new file mode 100644
index 0000000..f921a3b
--- /dev/null
+++ b/qemu-0002-efi-make-load-file-protocol-optional.patch
@@ -0,0 +1,102 @@
+From 2daea2b8dd2c504a4f76a6b0b67bd3c4a2957fc7 Mon Sep 17 00:00:00 2001
+From: Gerd Hoffmann <kraxel at redhat.com>
+Date: Tue, 10 Feb 2015 14:28:09 +0100
+Subject: [PATCH 2/2] [efi] make load file protocol optional
+
+The load file implementation added by commit
+c7c3d839fc9120aee28de9aabe452dc85ad91502 doesn't support loading
+arbitrary files from the tftp server, so efi applications trying
+to do exactly that fail to boot:
+
+  iPXE 1.0.0+ (17ace) -- Open Source Network Boot Firmware -- http://ipxe.org
+  Features: HTTP DNS TFTP EFI Menu
+
+  net0: 52:54:00:47:d3:07 using virtio-net on PCI00:09.0 (open)
+    [Link:up, TX:0 TXE:0 RX:13 RXE:2]
+    [RXE: 2 x "Operation not supported (http://ipxe.org/3c086083)"]
+  Configuring (net0 52:54:00:47:d3:07)...... ok
+  net0: 192.168.132.93/255.255.255.0 gw 192.168.132.1
+  Next server: 192.168.132.1
+  Filename: shim.efi
+  tftp://192.168.132.1/shim.efi... ok
+  Failed to open grubx64.efi - Not Found
+  Failed to load image grubx64.efi: Not Found
+  Failed to open MokManager.efi - Not Found
+  Failed to load image MokManager.efi: Not Found
+  Could not boot image: Error 0x7f04828e (http://ipxe.org/7f04828e)
+
+  Boot Failed. EFI Network
+
+This is not acceptable for qemu.  efi pxe configurations which work
+just fine with real hardware must work with qemu virtual machines too.
+
+This patch adds a config option for the load file protocol
+implementation, to allow it being disabled, so we can turn it off
+for the pxe roms shipped with qemu.
+
+The default for the new option maintains current behavior, i.e.
+load file is enabled unless you override it in config/local/general.h
+
+Suggested-by: Laszlo Ersek <lersek at redhat.com>
+
+See discussion here:
+  http://lists.ipxe.org/pipermail/ipxe-devel/2015-February/003979.html
+
+Signed-off-by: Gerd Hoffmann <kraxel at redhat.com>
+---
+ src/config/general.h        | 6 ++++++
+ src/interface/efi/efi_snp.c | 5 +++++
+ 2 files changed, 11 insertions(+)
+
+diff --git a/src/config/general.h b/src/config/general.h
+index 65c1f85..8c91601 100644
+--- a/src/config/general.h
++++ b/src/config/general.h
+@@ -142,6 +142,12 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
+ #undef	NONPNP_HOOK_INT19	/* Hook INT19 on non-PnP BIOSes */
+ 
+ /*
++ * EFI specific options
++ *
++ */
++#define EFI_PROTO_LOAD_FILE	/* register LOAD_FILE protocol */
++
++/*
+  * Error message tables to include
+  *
+  */
+diff --git a/src/interface/efi/efi_snp.c b/src/interface/efi/efi_snp.c
+index c21af33..85f4fa0 100644
+--- a/src/interface/efi/efi_snp.c
++++ b/src/interface/efi/efi_snp.c
+@@ -34,6 +34,7 @@ FILE_LICENCE ( GPL2_OR_LATER );
+ #include <ipxe/efi/efi_utils.h>
+ #include <ipxe/efi/efi_snp.h>
+ #include <usr/autoboot.h>
++#include <config/general.h>
+ 
+ /** List of SNP devices */
+ static LIST_HEAD ( efi_snp_devices );
+@@ -1033,7 +1034,9 @@ static int efi_snp_probe ( struct net_device *netdev ) {
+ 			&efi_nii_protocol_guid, &snpdev->nii,
+ 			&efi_nii31_protocol_guid, &snpdev->nii,
+ 			&efi_component_name2_protocol_guid, &snpdev->name2,
++#ifdef EFI_PROTO_LOAD_FILE
+ 			&efi_load_file_protocol_guid, &snpdev->load_file,
++#endif
+ 			NULL ) ) != 0 ) {
+ 		rc = -EEFI ( efirc );
+ 		DBGC ( snpdev, "SNPDEV %p could not install protocols: "
+@@ -1082,7 +1085,9 @@ static int efi_snp_probe ( struct net_device *netdev ) {
+ 			&efi_nii_protocol_guid, &snpdev->nii,
+ 			&efi_nii31_protocol_guid, &snpdev->nii,
+ 			&efi_component_name2_protocol_guid, &snpdev->name2,
++#ifdef EFI_PROTO_LOAD_FILE
+ 			&efi_load_file_protocol_guid, &snpdev->load_file,
++#endif
+ 			NULL );
+  err_install_protocol_interface:
+ 	free ( snpdev->path );
+-- 
+1.8.3.1
+
diff --git a/sources b/sources
index 40b9c99..1fb0cdf 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-be0cfc83c75438dd019e9b31fbd0fe4d  ipxe-20140303-gitff1e7fc7.tar.gz
+2f4e3cb017d569f6f108d640c8775a07  ipxe-20150407-gitdc795b9f.tar.xz
-- 
cgit v0.10.2


	http://pkgs.fedoraproject.org/cgit/ipxe.git/commit/?h=master&id=cf5216a4fefb7234f6035637556996e883ee5442


More information about the scm-commits mailing list