mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
bitkeeper revision 1.1172.1.1 (420ba344y-TLJ8cFOVA_8bN7wd3dMw)
Merge scramble.cl.cam.ac.uk:/auto/groups/xeno/BK/xeno.bk into scramble.cl.cam.ac.uk:/local/scratch/kaf24/xen-unstable.bk
This commit is contained in:
commit
52ba37dd67
9 files changed
+48
-32
No files matched your search
+1
-1
@@ -85,7 +85,7 @@ include/xen/banner.h: tools/figlet/figlet tools/figlet/xen.flf
|
||||
tools/figlet/figlet -d tools/figlet Xen $(XEN_VERSION).$(XEN_SUBVERSION)$(XEN_EXTRAVERSION) > $@.new
|
||||
@mv -f $@.new $@
|
||||
|
||||
include/asm-$(TARGET_ARCH)/asm-offsets.h: arch/$(TARGET_ARCH)/asm-offsets.s $(HDRS)
|
||||
include/asm-$(TARGET_ARCH)/asm-offsets.h: arch/$(TARGET_ARCH)/asm-offsets.s
|
||||
@(set -e; \
|
||||
echo "/*"; \
|
||||
echo " * DO NOT MODIFY."; \
|
||||
|
||||
@@ -19,7 +19,6 @@ override TARGET_ARCH := $(patsubst x86%,x86,$(TARGET_ARCH))
|
||||
|
||||
TARGET := $(BASEDIR)/xen
|
||||
HDRS := $(wildcard $(BASEDIR)/include/xen/*.h)
|
||||
HDRS += $(wildcard $(BASEDIR)/include/scsi/*.h)
|
||||
HDRS += $(wildcard $(BASEDIR)/include/public/*.h)
|
||||
HDRS += $(wildcard $(BASEDIR)/include/asm-$(TARGET_ARCH)/*.h)
|
||||
HDRS += $(wildcard $(BASEDIR)/include/asm-$(TARGET_ARCH)/$(TARGET_SUBARCH)/*.h)
|
||||
|
||||
@@ -27,7 +27,7 @@ $(TARGET)-syms: boot/$(TARGET_SUBARCH).o $(ALL_OBJS) $(TARGET_SUBARCH)/xen.lds
|
||||
$(LD) $(LDFLAGS) -T $(TARGET_SUBARCH)/xen.lds -N \
|
||||
boot/$(TARGET_SUBARCH).o $(ALL_OBJS) -o $@
|
||||
|
||||
asm-offsets.s: $(TARGET_SUBARCH)/asm-offsets.c
|
||||
asm-offsets.s: $(TARGET_SUBARCH)/asm-offsets.c $(HDRS)
|
||||
$(CC) $(CFLAGS) -S -o $@ $<
|
||||
|
||||
boot/mkelf32: boot/mkelf32.c
|
||||
|
||||
@@ -810,25 +810,6 @@ long do_set_trap_table(trap_info_t *traps)
|
||||
}
|
||||
|
||||
|
||||
long do_set_callbacks(unsigned long event_selector,
|
||||
unsigned long event_address,
|
||||
unsigned long failsafe_selector,
|
||||
unsigned long failsafe_address)
|
||||
{
|
||||
struct exec_domain *d = current;
|
||||
|
||||
if ( !VALID_CODESEL(event_selector) || !VALID_CODESEL(failsafe_selector) )
|
||||
return -EPERM;
|
||||
|
||||
d->arch.event_selector = event_selector;
|
||||
d->arch.event_address = event_address;
|
||||
d->arch.failsafe_selector = failsafe_selector;
|
||||
d->arch.failsafe_address = failsafe_address;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
long do_fpu_taskswitch(void)
|
||||
{
|
||||
set_bit(EDF_GUEST_STTS, ¤t->ed_flags);
|
||||
|
||||
@@ -274,3 +274,21 @@ long do_set_fast_trap(int idx)
|
||||
{
|
||||
return set_fast_trap(current, idx);
|
||||
}
|
||||
|
||||
long do_set_callbacks(unsigned long event_selector,
|
||||
unsigned long event_address,
|
||||
unsigned long failsafe_selector,
|
||||
unsigned long failsafe_address)
|
||||
{
|
||||
struct exec_domain *d = current;
|
||||
|
||||
if ( !VALID_CODESEL(event_selector) || !VALID_CODESEL(failsafe_selector) )
|
||||
return -EPERM;
|
||||
|
||||
d->arch.event_selector = event_selector;
|
||||
d->arch.event_address = event_address;
|
||||
d->arch.failsafe_selector = failsafe_selector;
|
||||
d->arch.failsafe_address = failsafe_address;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -43,10 +43,9 @@ void __dummy__(void)
|
||||
|
||||
OFFSET(EDOMAIN_processor, struct exec_domain, processor);
|
||||
OFFSET(EDOMAIN_vcpu_info, struct exec_domain, vcpu_info);
|
||||
OFFSET(EDOMAIN_event_sel, struct exec_domain, arch.event_selector);
|
||||
OFFSET(EDOMAIN_event_addr, struct exec_domain, arch.event_address);
|
||||
OFFSET(EDOMAIN_failsafe_sel, struct exec_domain, arch.failsafe_selector);
|
||||
OFFSET(EDOMAIN_failsafe_addr, struct exec_domain, arch.failsafe_address);
|
||||
OFFSET(EDOMAIN_syscall_addr, struct exec_domain, arch.syscall_address);
|
||||
OFFSET(EDOMAIN_trap_bounce, struct exec_domain, arch.trap_bounce);
|
||||
OFFSET(EDOMAIN_thread_flags, struct exec_domain, arch.flags);
|
||||
OFFSET(EDOMAIN_kernel_sp, struct exec_domain, arch.kernel_sp);
|
||||
|
||||
@@ -104,12 +104,15 @@ ENTRY(syscall_enter)
|
||||
movl $TRAP_syscall,4(%rsp)
|
||||
SAVE_ALL
|
||||
GET_CURRENT(%rbx)
|
||||
bts $_TF_kernel_mode,EDOMAIN_thread_flags(%rbx)
|
||||
jc hypercall
|
||||
swapgs
|
||||
movq %rbx,%rdi
|
||||
call SYMBOL_NAME(write_ptbase)
|
||||
jmp restore_all_guest
|
||||
testb $TF_kernel_mode,EDOMAIN_thread_flags(%rbx)
|
||||
jnz hypercall
|
||||
|
||||
leaq EDOMAIN_trap_bounce(%rbx),%rdx
|
||||
movq EDOMAIN_syscall_addr(%rbx),%rax
|
||||
movq %rax,TRAPBOUNCE_eip(%rdx)
|
||||
movw $0,TRAPBOUNCE_flags(%rdx)
|
||||
pushq restore_all_guest(%rip)
|
||||
jmp create_bounce_frame
|
||||
|
||||
hypercall:
|
||||
sti
|
||||
|
||||
@@ -256,3 +256,16 @@ void *decode_reg(struct xen_regs *regs, u8 b)
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
long do_set_callbacks(unsigned long event_address,
|
||||
unsigned long failsafe_address,
|
||||
unsigned long syscall_address)
|
||||
{
|
||||
struct exec_domain *d = current;
|
||||
|
||||
d->arch.event_address = event_address;
|
||||
d->arch.failsafe_address = failsafe_address;
|
||||
d->arch.syscall_address = syscall_address;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -68,12 +68,15 @@ struct arch_exec_domain
|
||||
* for segment registers %ds, %es, %fs and %gs:
|
||||
* %ds, %es, %fs, %gs, %eip, %cs, %eflags [, %oldesp, %oldss]
|
||||
*/
|
||||
unsigned long event_selector; /* entry CS */
|
||||
|
||||
unsigned long event_selector; /* entry CS (x86/32 only) */
|
||||
unsigned long event_address; /* entry EIP */
|
||||
|
||||
unsigned long failsafe_selector; /* entry CS */
|
||||
unsigned long failsafe_selector; /* entry CS (x86/32 only) */
|
||||
unsigned long failsafe_address; /* entry EIP */
|
||||
|
||||
unsigned long syscall_address; /* entry EIP (x86/64 only) */
|
||||
|
||||
/* Bounce information for propagating an exception to guest OS. */
|
||||
struct trap_bounce trap_bounce;
|
||||
|
||||
|
||||