region = &payload->region;
region->symbols_lookup = livepatch_symbols_lookup;
- region->start = payload->text_addr;
- region->end = payload->text_addr + payload->text_size;
+ region->text_start = payload->text_addr;
+ region->text_end = payload->text_addr + payload->text_size;
/* Optional sections. */
for ( i = 0; i < BUGFRAME_NR; i++ )
const void *instr = ALT_ORIG_PTR(a);
const void *replacement = ALT_REPL_PTR(a);
- if ( (instr < region->start && instr >= region->end) ||
- (replacement < region->start && replacement >= region->end) )
+ if ( (instr < region->text_start && instr >= region->text_end) ||
+ (replacement < region->text_start &&
+ replacement >= region->text_end) )
{
printk(XENLOG_ERR LIVEPATCH "%s Alt patching outside payload: %p\n",
elf->name, instr);
static struct virtual_region core = {
.list = LIST_HEAD_INIT(core.list),
- .start = _stext,
- .end = _etext,
+ .text_start = _stext,
+ .text_end = _etext,
};
/* Becomes irrelevant when __init sections are cleared. */
static struct virtual_region core_init __initdata = {
.list = LIST_HEAD_INIT(core_init.list),
- .start = _sinittext,
- .end = _einittext,
+ .text_start = _sinittext,
+ .text_end = _einittext,
};
/*
rcu_read_lock(&rcu_virtual_region_lock);
list_for_each_entry_rcu( region, &virtual_region_list, list )
{
- if ( (void *)addr >= region->start && (void *)addr < region->end )
+ if ( (void *)addr >= region->text_start &&
+ (void *)addr < region->text_end )
{
rcu_read_unlock(&rcu_virtual_region_lock);
return region;
rcu_read_lock(&rcu_virtual_region_lock);
list_for_each_entry_rcu( region, &virtual_region_list, list )
- modify_xen_mappings_lite((unsigned long)region->start,
- ROUNDUP((unsigned long)region->end, PAGE_SIZE),
+ modify_xen_mappings_lite((unsigned long)region->text_start,
+ PAGE_ALIGN((unsigned long)region->text_end),
PAGE_HYPERVISOR_RWX);
rcu_read_unlock(&rcu_virtual_region_lock);
}
rcu_read_lock(&rcu_virtual_region_lock);
list_for_each_entry_rcu( region, &virtual_region_list, list )
- modify_xen_mappings_lite((unsigned long)region->start,
- ROUNDUP((unsigned long)region->end, PAGE_SIZE),
+ modify_xen_mappings_lite((unsigned long)region->text_start,
+ PAGE_ALIGN((unsigned long)region->text_end),
PAGE_HYPERVISOR_RX);
rcu_read_unlock(&rcu_virtual_region_lock);
}
#include <xen/list.h>
#include <xen/symbols.h>
+/*
+ * Despite it's name, this is a module(ish) description.
+ *
+ * There's one region for the runtime .text/etc, one region for .init during
+ * boot only, and one region per livepatch.
+ */
struct virtual_region
{
struct list_head list;
- const void *start; /* Virtual address start. */
- const void *end; /* Virtual address end. */
+
+ const void *text_start; /* .text virtual address start. */
+ const void *text_end; /* .text virtual address end. */
/* If this is NULL the default lookup mechanism is used. */
symbols_lookup_t *symbols_lookup;