[Differential] D9904: fix UEFI boot on physical machines

2017-03-06 Thread Phabricator
This revision was automatically updated to reflect the committed changes.
Closed by commit rS314770: loader.efi: fix recent UEFI-boot regression on 
physical machines (authored by dexuan).

CHANGED PRIOR TO COMMIT
  https://reviews.freebsd.org/D9904?vs=26023=26027#toc

REPOSITORY
  rS FreeBSD src repository

CHANGES SINCE LAST UPDATE
  https://reviews.freebsd.org/D9904?vs=26023=26027

REVISION DETAIL
  https://reviews.freebsd.org/D9904

AFFECTED FILES
  head/sys/boot/efi/loader/copy.c

EMAIL PREFERENCES
  https://reviews.freebsd.org/settings/panel/emailpreferences/

To: decui_microsoft.com, imp, jhb, will, kib, delphij, emaste, marcel, 
honzhan_microsoft.com, howard0su_gmail.com, tsoome, gonzo, manu, andrew, 
sbruno, ambrisko, allanjude, bapt, cem, smh, ian, sepherosa_gmail.com
Cc: freebsd-virtualization-list
diff --git a/head/sys/boot/efi/loader/copy.c b/head/sys/boot/efi/loader/copy.c
--- a/head/sys/boot/efi/loader/copy.c
+++ b/head/sys/boot/efi/loader/copy.c
@@ -53,7 +53,7 @@
 	UINT32 dver;
 	EFI_STATUS status;
 	int i, ndesc;
-	unsigned long available_pages;
+	unsigned long available_pages = 0;
 
 	sz = 0;
 	status = BS->GetMemoryMap(, 0, , , );
@@ -70,7 +70,6 @@
 	}
 
 	ndesc = sz / dsz;
-
 	for (i = 0, p = map; i < ndesc;
 	 i++, p = NextMemoryDescriptor(p, dsz)) {
 		start = p->PhysicalStart;
@@ -81,20 +80,38 @@
 			continue;
 
 		if (p->Type != EfiConventionalMemory)
-			continue;
+			printf("Warning: wrong EFI memory type: %d\n",
+			p->Type);
 
 		available_pages = p->NumberOfPages -
 			((KERNEL_PHYSICAL_BASE - start) >> EFI_PAGE_SHIFT);
+		break;
+	}
+
+	if (available_pages == 0) {
+		printf("Can't find valid memory map for staging area!\n");
+		goto out;
+	}
 
-		if (*nr_pages > available_pages) {
-			printf("staging area size is reduced: %ld -> %ld!\n",
-			*nr_pages, available_pages);
-			*nr_pages = available_pages;
-		}
+	for ( ; i < ndesc;
+	 i++, p = NextMemoryDescriptor(p, dsz)) {
+		if (p->Type != EfiConventionalMemory &&
+		p->Type != EfiLoaderData)
+			break;
 
-		break;
+		if (p->PhysicalStart != end)
+			break;
+
+		end = p->PhysicalStart + p->NumberOfPages * EFI_PAGE_SIZE;
+
+		available_pages += p->NumberOfPages;
 	}
 
+	if (*nr_pages > available_pages) {
+		printf("Staging area's size is reduced: %ld -> %ld!\n",
+		*nr_pages, available_pages);
+		*nr_pages = available_pages;
+	}
 out:
 	free(map);
 }

___
freebsd-virtualization@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-virtualization
To unsubscribe, send any mail to 
"freebsd-virtualization-unsubscr...@freebsd.org"

[Differential] D9904: fix UEFI boot on physical machines

2017-03-06 Thread sepherosa_gmail.com (Sepherosa Ziehau)
sepherosa_gmail.com accepted this revision.
This revision has a positive review.

REVISION DETAIL
  https://reviews.freebsd.org/D9904

EMAIL PREFERENCES
  https://reviews.freebsd.org/settings/panel/emailpreferences/

To: decui_microsoft.com, imp, jhb, will, kib, delphij, emaste, marcel, 
honzhan_microsoft.com, howard0su_gmail.com, tsoome, gonzo, manu, andrew, 
sbruno, ambrisko, allanjude, bapt, cem, smh, ian, sepherosa_gmail.com
Cc: freebsd-virtualization-list
___
freebsd-virtualization@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-virtualization
To unsubscribe, send any mail to 
"freebsd-virtualization-unsubscr...@freebsd.org"


[Differential] D9904: fix UEFI boot on physical machines

2017-03-05 Thread decui_microsoft.com (Dexuan Cui)
decui_microsoft.com updated the summary for this revision.

REVISION DETAIL
  https://reviews.freebsd.org/D9904

EMAIL PREFERENCES
  https://reviews.freebsd.org/settings/panel/emailpreferences/

To: decui_microsoft.com, imp, jhb, will, kib, delphij, emaste, marcel, 
sepherosa_gmail.com, honzhan_microsoft.com, howard0su_gmail.com, tsoome, gonzo, 
manu, andrew, sbruno, ambrisko, allanjude, bapt, cem, smh, ian
Cc: freebsd-virtualization-list
___
freebsd-virtualization@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-virtualization
To unsubscribe, send any mail to 
"freebsd-virtualization-unsubscr...@freebsd.org"


[Differential] D9904: fix UEFI boot on physical machines

2017-03-05 Thread decui_microsoft.com (Dexuan Cui)
decui_microsoft.com updated the summary for this revision.
decui_microsoft.com updated this revision to Diff 26023.

CHANGES SINCE LAST UPDATE
  https://reviews.freebsd.org/D9904?vs=26020=26023

REVISION DETAIL
  https://reviews.freebsd.org/D9904

AFFECTED FILES
  sys/boot/efi/loader/copy.c

EMAIL PREFERENCES
  https://reviews.freebsd.org/settings/panel/emailpreferences/

To: decui_microsoft.com, imp, jhb, will, kib, delphij, emaste, marcel, 
sepherosa_gmail.com, honzhan_microsoft.com, howard0su_gmail.com, tsoome, gonzo, 
manu, andrew, sbruno, ambrisko, allanjude, bapt, cem, smh, ian
Cc: freebsd-virtualization-list
diff --git a/sys/boot/efi/loader/copy.c b/sys/boot/efi/loader/copy.c
--- a/sys/boot/efi/loader/copy.c
+++ b/sys/boot/efi/loader/copy.c
@@ -53,7 +53,7 @@
 	UINT32 dver;
 	EFI_STATUS status;
 	int i, ndesc;
-	unsigned long available_pages;
+	unsigned long available_pages = 0;
 
 	sz = 0;
 	status = BS->GetMemoryMap(, 0, , , );
@@ -70,7 +70,6 @@
 	}
 
 	ndesc = sz / dsz;
-
 	for (i = 0, p = map; i < ndesc;
 	 i++, p = NextMemoryDescriptor(p, dsz)) {
 		start = p->PhysicalStart;
@@ -81,20 +80,38 @@
 			continue;
 
 		if (p->Type != EfiConventionalMemory)
-			continue;
+			printf("Warning: wrong EFI memory type: %d\n",
+			p->Type);
 
 		available_pages = p->NumberOfPages -
 			((KERNEL_PHYSICAL_BASE - start) >> EFI_PAGE_SHIFT);
+		break;
+	}
+
+	if (available_pages == 0) {
+		printf("Can't find valid memory map for staging area!\n");
+		goto out;
+	}
 
-		if (*nr_pages > available_pages) {
-			printf("staging area size is reduced: %ld -> %ld!\n",
-			*nr_pages, available_pages);
-			*nr_pages = available_pages;
-		}
+	for ( ; i < ndesc;
+	 i++, p = NextMemoryDescriptor(p, dsz)) {
+		if (p->Type != EfiConventionalMemory &&
+		p->Type != EfiLoaderData)
+			break;
 
-		break;
+		if (p->PhysicalStart != end)
+			break;
+
+		end = p->PhysicalStart + p->NumberOfPages * EFI_PAGE_SIZE;
+
+		available_pages += p->NumberOfPages;
 	}
 
+	if (*nr_pages > available_pages) {
+		printf("Staging area's size is reduced: %ld -> %ld!\n",
+		*nr_pages, available_pages);
+		*nr_pages = available_pages;
+	}
 out:
 	free(map);
 }

___
freebsd-virtualization@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-virtualization
To unsubscribe, send any mail to 
"freebsd-virtualization-unsubscr...@freebsd.org"

[Differential] D9904: fix UEFI boot on physical machines

2017-03-05 Thread decui_microsoft.com (Dexuan Cui)
decui_microsoft.com added a subscriber: freebsd-virtualization-list.

REVISION DETAIL
  https://reviews.freebsd.org/D9904

EMAIL PREFERENCES
  https://reviews.freebsd.org/settings/panel/emailpreferences/

To: decui_microsoft.com, imp, jhb, will, kib, delphij, emaste, marcel, 
sepherosa_gmail.com, honzhan_microsoft.com, howard0su_gmail.com, tsoome, gonzo, 
manu, andrew, sbruno, ambrisko, allanjude, bapt, cem, smh, ian
Cc: freebsd-virtualization-list
___
freebsd-virtualization@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-virtualization
To unsubscribe, send any mail to 
"freebsd-virtualization-unsubscr...@freebsd.org"