mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
um: Print minimum physical memory requirement
Print a more sensible message about the minimum physical memory requirement. Signed-off-by: Thomas Meyer <thomas@m3y3r.de> Signed-off-by: Richard Weinberger <richard@nod.at>
This commit is contained in:
parent
33bbc30654
commit
fe205bdd13
1 changed files with 35 additions and 6 deletions
|
@ -57,22 +57,51 @@ void map_memory(unsigned long virt, unsigned long phys, unsigned long len,
|
||||||
|
|
||||||
extern int __syscall_stub_start;
|
extern int __syscall_stub_start;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* setup_physmem() - Setup physical memory for UML
|
||||||
|
* @start: Start address of the physical kernel memory,
|
||||||
|
* i.e start address of the executable image.
|
||||||
|
* @reserve_end: end address of the physical kernel memory.
|
||||||
|
* @len: Length of total physical memory that should be mapped/made
|
||||||
|
* available, in bytes.
|
||||||
|
* @highmem: Number of highmem bytes that should be mapped/made available.
|
||||||
|
*
|
||||||
|
* Creates an unlinked temporary file of size (len + highmem) and memory maps
|
||||||
|
* it on the last executable image address (uml_reserved).
|
||||||
|
*
|
||||||
|
* The offset is needed as the length of the total physical memory
|
||||||
|
* (len + highmem) includes the size of the memory used be the executable image,
|
||||||
|
* but the mapped-to address is the last address of the executable image
|
||||||
|
* (uml_reserved == end address of executable image).
|
||||||
|
*
|
||||||
|
* The memory mapped memory of the temporary file is used as backing memory
|
||||||
|
* of all user space processes/kernel tasks.
|
||||||
|
*/
|
||||||
void __init setup_physmem(unsigned long start, unsigned long reserve_end,
|
void __init setup_physmem(unsigned long start, unsigned long reserve_end,
|
||||||
unsigned long len, unsigned long long highmem)
|
unsigned long len, unsigned long long highmem)
|
||||||
{
|
{
|
||||||
unsigned long reserve = reserve_end - start;
|
unsigned long reserve = reserve_end - start;
|
||||||
int pfn = PFN_UP(__pa(reserve_end));
|
unsigned long pfn = PFN_UP(__pa(reserve_end));
|
||||||
int delta = (len - reserve) >> PAGE_SHIFT;
|
unsigned long delta = (len - reserve) >> PAGE_SHIFT;
|
||||||
int err, offset, bootmap_size;
|
unsigned long offset, bootmap_size;
|
||||||
|
long map_size;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
offset = uml_reserved - uml_physmem;
|
||||||
|
map_size = len - offset;
|
||||||
|
if(map_size <= 0) {
|
||||||
|
printf("Too few physical memory! Needed=%d, given=%d\n",
|
||||||
|
offset, len);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
physmem_fd = create_mem_file(len + highmem);
|
physmem_fd = create_mem_file(len + highmem);
|
||||||
|
|
||||||
offset = uml_reserved - uml_physmem;
|
|
||||||
err = os_map_memory((void *) uml_reserved, physmem_fd, offset,
|
err = os_map_memory((void *) uml_reserved, physmem_fd, offset,
|
||||||
len - offset, 1, 1, 1);
|
map_size, 1, 1, 1);
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
printf("setup_physmem - mapping %ld bytes of memory at 0x%p "
|
printf("setup_physmem - mapping %ld bytes of memory at 0x%p "
|
||||||
"failed - errno = %d\n", len - offset,
|
"failed - errno = %d\n", map_size,
|
||||||
(void *) uml_reserved, err);
|
(void *) uml_reserved, err);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue