Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F137788617
D50585.id156232.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
6 KB
Referenced Files
None
Subscribers
None
D50585.id156232.diff
View Options
diff --git a/stand/common/metadata.c b/stand/common/metadata.c
--- a/stand/common/metadata.c
+++ b/stand/common/metadata.c
@@ -123,14 +123,14 @@
addr = xp->f_addr + xp->f_size;
}
/* Pad to a page boundary */
- addr = roundup(addr, PAGE_SIZE);
+ addr = md_align(addr);
/* Copy our environment */
envp = addr;
addr = md_copyenv(addr);
/* Pad to a page boundary */
- addr = roundup(addr, PAGE_SIZE);
+ addr = md_align(addr);
#if defined(LOADER_FDT_SUPPORT)
/* Copy out FDT */
@@ -141,7 +141,7 @@
{
size = fdt_copy(addr);
fdtp = addr;
- addr = roundup(addr + size, PAGE_SIZE);
+ addr = md_align(addr + size);
}
#endif
@@ -176,7 +176,7 @@
*modulep = addr;
size = md_copymodules(0, kern64);
- kernend = roundup(addr + size, PAGE_SIZE);
+ kernend = md_align(addr + size);
md = file_findmetadata(kfp, MODINFOMD_KERNEND);
if (kern64) {
diff --git a/stand/common/modinfo.h b/stand/common/modinfo.h
--- a/stand/common/modinfo.h
+++ b/stand/common/modinfo.h
@@ -16,5 +16,6 @@
vm_offset_t md_copymodules(vm_offset_t addr, bool kern64);
vm_offset_t md_copyenv(vm_offset_t addr);
+vm_offset_t md_align(vm_offset_t addr);
#endif /* COMMON_MODINFO_H */
diff --git a/stand/common/modinfo.c b/stand/common/modinfo.c
--- a/stand/common/modinfo.c
+++ b/stand/common/modinfo.c
@@ -194,3 +194,22 @@
last = start;
return(last);
}
+
+/*
+ * Take the ending address and round it up to the currently required
+ * alignment. This typically is the page size, but is the larger of the compiled
+ * kernel page size, the loader page size, and the typical page size on the
+ * platform.
+ *
+ * XXX For the moment, it's just PAGE_SIZE to make the refactoring go faster,
+ * but needs to hook-in arch_loadaddr (or its replacement) functionality.
+ *
+ * Also, we may need other logical things when dealing with different types of
+ * page sizes and/or masking or sizes. This works well for addr and sizes, but
+ * not for masks.
+ */
+vm_offset_t
+md_align(vm_offset_t addr)
+{
+ return (roundup(addr, PAGE_SIZE));
+}
diff --git a/stand/efi/loader/bootinfo.c b/stand/efi/loader/bootinfo.c
--- a/stand/efi/loader/bootinfo.c
+++ b/stand/efi/loader/bootinfo.c
@@ -389,18 +389,18 @@
}
/* Pad to a page boundary. */
- addr = roundup(addr, PAGE_SIZE);
+ addr = md_align(addr);
#ifdef EFI
addr = build_font_module(addr);
/* Pad to a page boundary. */
- addr = roundup(addr, PAGE_SIZE);
+ addr = md_align(addr);
addr = build_splash_module(addr);
/* Pad to a page boundary. */
- addr = roundup(addr, PAGE_SIZE);
+ addr = md_align(addr);
#endif
/* Copy our environment. */
@@ -408,7 +408,7 @@
addr = md_copyenv(addr);
/* Pad to a page boundary. */
- addr = roundup(addr, PAGE_SIZE);
+ addr = md_align(addr);
#if defined(LOADER_FDT_SUPPORT)
/* Handle device tree blob */
@@ -417,7 +417,7 @@
/* Pad to a page boundary */
if (dtb_size)
- addr += roundup(dtb_size, PAGE_SIZE);
+ addr += md_align(dtb_size);
#endif
kfp = file_findfile(NULL, md_kerntype);
@@ -461,7 +461,7 @@
#endif
size = md_copymodules(0, is64); /* Find the size of the modules */
- kernend = roundup(addr + size, PAGE_SIZE);
+ kernend = md_align(addr + size);
*kernendp = kernend;
/* patch MODINFOMD_KERNEND */
diff --git a/stand/i386/libi386/bootinfo32.c b/stand/i386/libi386/bootinfo32.c
--- a/stand/i386/libi386/bootinfo32.c
+++ b/stand/i386/libi386/bootinfo32.c
@@ -118,7 +118,7 @@
addr = xp->f_addr + xp->f_size;
}
/* pad to a page boundary */
- addr = roundup(addr, PAGE_SIZE);
+ addr = md_align(addr);
addr = build_font_module(addr);
@@ -127,7 +127,7 @@
addr = md_copyenv(addr);
/* pad to a page boundary */
- addr = roundup(addr, PAGE_SIZE);
+ addr = md_align(addr);
kfp = file_findfile(NULL, md_kerntype);
if (kfp == NULL)
@@ -145,7 +145,7 @@
/* Figure out the size and location of the metadata */
*modulep = addr;
size = md_copymodules(0, false);
- kernend = roundup(addr + size, PAGE_SIZE);
+ kernend = md_align(addr + size);
*kernendp = kernend;
/* patch MODINFOMD_KERNEND */
diff --git a/stand/i386/libi386/bootinfo64.c b/stand/i386/libi386/bootinfo64.c
--- a/stand/i386/libi386/bootinfo64.c
+++ b/stand/i386/libi386/bootinfo64.c
@@ -136,7 +136,7 @@
addr = xp->f_addr + xp->f_size;
}
/* pad to a page boundary */
- addr = roundup(addr, PAGE_SIZE);
+ addr = md_align(addr);
addr = build_font_module(addr);
@@ -161,11 +161,11 @@
size = md_copymodules(0, true);
/* copy our environment */
- envp = roundup(addr + size, PAGE_SIZE);
+ envp = md_align(addr + size);
addr = md_copyenv(envp);
/* set kernend */
- kernend = roundup(addr, PAGE_SIZE);
+ kernend = md_align(addr);
*kernendp = kernend;
/* patch MODINFOMD_KERNEND */
diff --git a/stand/userboot/userboot/bootinfo32.c b/stand/userboot/userboot/bootinfo32.c
--- a/stand/userboot/userboot/bootinfo32.c
+++ b/stand/userboot/userboot/bootinfo32.c
@@ -99,14 +99,14 @@
addr = xp->f_addr + xp->f_size;
}
/* pad to a page boundary */
- addr = roundup(addr, PAGE_SIZE);
+ addr = md_align(addr);
/* copy our environment */
envp = addr;
addr = md_copyenv(addr);
/* pad to a page boundary */
- addr = roundup(addr, PAGE_SIZE);
+ addr = md_align(addr);
kfp = file_findfile(NULL, md_kerntype);
if (kfp == NULL)
@@ -123,7 +123,7 @@
/* Figure out the size and location of the metadata */
*modulep = addr;
size = md_copymodules(0, false);
- kernend = roundup(addr + size, PAGE_SIZE);
+ kernend = md_align(addr + size);
*kernendp = kernend;
/* patch MODINFOMD_KERNEND */
diff --git a/stand/userboot/userboot/bootinfo64.c b/stand/userboot/userboot/bootinfo64.c
--- a/stand/userboot/userboot/bootinfo64.c
+++ b/stand/userboot/userboot/bootinfo64.c
@@ -131,14 +131,14 @@
addr = xp->f_addr + xp->f_size;
}
/* pad to a page boundary */
- addr = roundup(addr, PAGE_SIZE);
+ addr = md_align(addr);
/* copy our environment */
envp = addr;
addr = md_copyenv(addr);
/* pad to a page boundary */
- addr = roundup(addr, PAGE_SIZE);
+ addr = md_align(addr);
kfp = file_findfile(NULL, md_kerntype);
if (kfp == NULL)
@@ -152,7 +152,7 @@
/* Figure out the size and location of the metadata */
*modulep = addr;
size = md_copymodules(0, true);
- kernend = roundup(addr + size, PAGE_SIZE);
+ kernend = md_align(addr + size);
*kernendp = kernend;
/* patch MODINFOMD_KERNEND */
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Nov 26, 9:01 PM (1 h, 39 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
26226330
Default Alt Text
D50585.id156232.diff (6 KB)
Attached To
Mode
D50585: stand: Introduce md_align
Attached
Detach File
Event Timeline
Log In to Comment