@@ -34,6 +34,7 @@
#include <xen/watchdog.h>
#include <asm/apic.h>
+#include <asm/boot.h>
#include <asm/cpu-policy.h>
#include <asm/delay.h>
#include <asm/nmi.h>
@@ -180,7 +181,7 @@ void __init microcode_scan_module(
if ( !test_bit(i, module_map) )
continue;
- _blob_start = bootstrap_map(&mod[i]);
+ _blob_start = bootstrap_map_multiboot(&mod[i]);
_blob_size = mod[i].mod_end;
if ( !_blob_start )
{
@@ -794,7 +795,7 @@ int __init microcode_init_cache(unsigned long *module_map,
microcode_scan_module(module_map, mbi);
if ( ucode_mod.mod_end )
- rc = early_update_cache(bootstrap_map(&ucode_mod),
+ rc = early_update_cache(bootstrap_map_multiboot(&ucode_mod),
ucode_mod.mod_end);
else if ( ucode_blob.size )
rc = early_update_cache(ucode_blob.data, ucode_blob.size);
@@ -817,7 +818,7 @@ static int __init early_microcode_update_cpu(void)
else if ( ucode_mod.mod_end )
{
len = ucode_mod.mod_end;
- data = bootstrap_map(&ucode_mod);
+ data = bootstrap_map_multiboot(&ucode_mod);
}
if ( !data )
@@ -16,6 +16,7 @@
#include <acpi/actables.h>
+#include <asm/boot.h>
#include <asm/bzimage.h>
#include <asm/dom0_build.h>
#include <asm/hvm/support.h>
@@ -1208,7 +1209,8 @@ int __init dom0_construct_pvh(struct domain *d, const module_t *image,
return rc;
}
- rc = pvh_load_kernel(d, image, image_headroom, initrd, bootstrap_map(image),
+ rc = pvh_load_kernel(d, image, image_headroom, initrd,
+ bootstrap_map_multiboot(image),
cmdline, &entry, &start_info);
if ( rc )
{
new file mode 100644
@@ -0,0 +1,32 @@
+#ifndef __ASM_X86_BOOT_H__
+#define __ASM_X86_BOOT_H__
+
+#include <xen/bootinfo.h>
+#include <xen/multiboot.h>
+
+#include <asm/setup.h>
+
+static inline void *bootstrap_map_multiboot(const module_t *mod)
+{
+ struct boot_module bm;
+
+ if ( !mod )
+ return bootstrap_map(NULL);
+
+ bm.start = mod->mod_start << PAGE_SHIFT;
+ bm.size = mod->mod_end;
+
+ return bootstrap_map(&bm);
+}
+
+#endif
+
+/*
+ * Local variables:
+ * mode: C
+ * c-file-style: "BSD"
+ * c-basic-offset: 4
+ * tab-width: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
@@ -1,6 +1,7 @@
#ifndef __X86_SETUP_H_
#define __X86_SETUP_H_
+#include <xen/bootinfo.h>
#include <xen/multiboot.h>
#include <asm/numa.h>
@@ -40,7 +41,7 @@ void setup_io_bitmap(struct domain *d);
unsigned long initial_images_nrpages(nodeid_t node);
void discard_initial_images(void);
-void *bootstrap_map(const module_t *mod);
+void *bootstrap_map(const struct boot_module *mod);
int xen_in_range(unsigned long mfn);
@@ -14,6 +14,7 @@
#include <xen/sched.h>
#include <xen/softirq.h>
+#include <asm/boot.h>
#include <asm/bzimage.h>
#include <asm/dom0_build.h>
#include <asm/guest.h>
@@ -374,7 +375,7 @@ int __init dom0_construct_pv(struct domain *d,
unsigned int flush_flags = 0;
start_info_t *si;
struct vcpu *v = d->vcpu[0];
- void *image_base = bootstrap_map(image);
+ void *image_base = bootstrap_map_multiboot(image);
unsigned long image_len = image->mod_end;
void *image_start = image_base + image_headroom;
unsigned long initrd_len = initrd ? initrd->mod_end : 0;
@@ -32,6 +32,7 @@
#include <compat/xen.h>
#endif
#include <xen/bitops.h>
+#include <asm/boot.h>
#include <asm/smp.h>
#include <asm/processor.h>
#include <asm/mpspec.h>
@@ -405,14 +406,14 @@ static void __init normalise_cpu_order(void)
* Ensure a given physical memory range is present in the bootstrap mappings.
* Use superpage mappings to ensure that pagetable memory needn't be allocated.
*/
-void *__init bootstrap_map(const module_t *mod)
+void *__init bootstrap_map(const struct boot_module *mod)
{
static unsigned long __initdata map_cur = BOOTSTRAP_MAP_BASE;
uint64_t start, end, mask = (1L << L2_PAGETABLE_SHIFT) - 1;
void *ret;
if ( system_state != SYS_STATE_early_boot )
- return mod ? mfn_to_virt(mod->mod_start) : NULL;
+ return mod ? maddr_to_virt(mod->start) : NULL;
if ( !mod )
{
@@ -421,8 +422,8 @@ void *__init bootstrap_map(const module_t *mod)
return NULL;
}
- start = (uint64_t)mod->mod_start << PAGE_SHIFT;
- end = start + mod->mod_end;
+ start = (uint64_t)mod->start;
+ end = start + mod->size;
if ( start >= end )
return NULL;
@@ -460,7 +461,7 @@ static void __init move_memory(
if ( mod.mod_end > blksz )
mod.mod_end = blksz;
sz = mod.mod_end - soffs;
- s = bootstrap_map(&mod);
+ s = bootstrap_map_multiboot(&mod);
mod.mod_start = (dst - doffs) >> PAGE_SHIFT;
mod.mod_end = doffs + size;
@@ -468,7 +469,7 @@ static void __init move_memory(
mod.mod_end = blksz;
if ( sz > mod.mod_end - doffs )
sz = mod.mod_end - doffs;
- d = bootstrap_map(&mod);
+ d = bootstrap_map_multiboot(&mod);
memmove(d + doffs, s + soffs, sz);
@@ -1360,8 +1361,9 @@ void __init noreturn __start_xen(unsigned long mbi_p)
mod[boot_info->nr_mods].mod_end = __2M_rwdata_end - _stext;
}
- boot_info->mods[0].arch->headroom = bzimage_headroom(bootstrap_map(mod),
- mod->mod_end);
+ boot_info->mods[0].arch->headroom =
+ bzimage_headroom(bootstrap_map_multiboot(mod), mod->mod_end);
+
bootstrap_map(NULL);
#ifndef highmem_start
@@ -10,6 +10,9 @@
#endif
struct boot_module {
+ paddr_t start;
+ size_t size;
+
struct arch_bootmodule *arch;
};
@@ -20,6 +20,7 @@
#include <xsm/xsm.h>
#ifdef CONFIG_MULTIBOOT
+#include <asm/boot.h>
#include <xen/multiboot.h>
#include <asm/setup.h>
#endif
@@ -49,7 +50,7 @@ int __init xsm_multiboot_policy_init(
if ( !test_bit(i, module_map) )
continue;
- _policy_start = bootstrap_map(mod + i);
+ _policy_start = bootstrap_map_multiboot(mod + i);
_policy_len = mod[i].mod_end;
if ( (xsm_magic_t)(*_policy_start) == XSM_MAGIC )