mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
bitkeeper revision 1.737.2.1 (403a19687Hq5Q8vjslGwmnEJKF9-Sg)
hypervisor.h, time.c, hypervisor-if.h, kernel.c, entry.S: Sanitise hypercall numbering. Added a get-xen-version hypercall.
This commit is contained in:
1 parent
18626a5fa6
commit
b375e36223
6 files changed
+90
-58
No files matched your search
@@ -176,12 +176,12 @@ static __inline__ int HYPERVISOR_stop(unsigned long srec)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static __inline__ long HYPERVISOR_set_dom_timer(void *timer_arg)
|
||||
static __inline__ long HYPERVISOR_set_timer_op(void *timer_arg)
|
||||
{
|
||||
int ret;
|
||||
__asm__ __volatile__ (
|
||||
TRAP_INSTR
|
||||
: "=a" (ret) : "0" (__HYPERVISOR_set_dom_timer),
|
||||
: "=a" (ret) : "0" (__HYPERVISOR_set_timer_op),
|
||||
"b" (timer_arg) : "memory" );
|
||||
|
||||
return ret;
|
||||
|
||||
@@ -704,28 +704,29 @@ nmi_io_err:
|
||||
|
||||
.data
|
||||
ENTRY(hypervisor_call_table)
|
||||
.long SYMBOL_NAME(do_set_trap_table)
|
||||
.long SYMBOL_NAME(do_set_trap_table) /* 0 */
|
||||
.long SYMBOL_NAME(do_mmu_update)
|
||||
.long SYMBOL_NAME(do_console_write)
|
||||
.long SYMBOL_NAME(do_set_gdt)
|
||||
.long SYMBOL_NAME(do_stack_switch)
|
||||
.long SYMBOL_NAME(do_set_callbacks)
|
||||
.long SYMBOL_NAME(do_set_callbacks) /* 5 */
|
||||
.long SYMBOL_NAME(do_net_io_op)
|
||||
.long SYMBOL_NAME(do_fpu_taskswitch)
|
||||
.long SYMBOL_NAME(do_sched_op)
|
||||
.long SYMBOL_NAME(do_set_timer_op)
|
||||
.long SYMBOL_NAME(do_dom0_op)
|
||||
.long SYMBOL_NAME(do_network_op)
|
||||
.long SYMBOL_NAME(do_network_op) /* 10 */
|
||||
.long SYMBOL_NAME(do_block_io_op)
|
||||
.long SYMBOL_NAME(do_set_debugreg)
|
||||
.long SYMBOL_NAME(do_get_debugreg)
|
||||
.long SYMBOL_NAME(do_update_descriptor)
|
||||
.long SYMBOL_NAME(do_set_fast_trap)
|
||||
.long SYMBOL_NAME(do_set_fast_trap) /* 15 */
|
||||
.long SYMBOL_NAME(do_dom_mem_op)
|
||||
.long SYMBOL_NAME(do_multicall)
|
||||
.long SYMBOL_NAME(do_kbd_op)
|
||||
.long SYMBOL_NAME(do_update_va_mapping)
|
||||
.long SYMBOL_NAME(do_set_timer_op) /* 20 */
|
||||
.long SYMBOL_NAME(do_event_channel_op)
|
||||
.long SYMBOL_NAME(do_xen_version)
|
||||
.rept NR_syscalls-((.-hypervisor_call_table)/4)
|
||||
.long SYMBOL_NAME(sys_ni_syscall)
|
||||
.long SYMBOL_NAME(do_ni_syscall)
|
||||
.endr
|
||||
+54
-35
@@ -266,6 +266,10 @@ void cmain(unsigned long magic, multiboot_info_t *mbi)
|
||||
}
|
||||
|
||||
|
||||
/*********************************
|
||||
* Various console code follows...
|
||||
*/
|
||||
|
||||
/* VGA text (mode 3) definitions. */
|
||||
#define COLUMNS 80
|
||||
#define LINES 25
|
||||
@@ -458,41 +462,6 @@ void printf(const char *fmt, ...)
|
||||
}
|
||||
|
||||
|
||||
void panic(const char *fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
char buf[128];
|
||||
unsigned long flags;
|
||||
extern void machine_restart(char *);
|
||||
|
||||
va_start(args, fmt);
|
||||
(void)vsnprintf(buf, sizeof(buf), fmt, args);
|
||||
va_end(args);
|
||||
|
||||
/* Spit out multiline message in one go. */
|
||||
spin_lock_irqsave(&console_lock, flags);
|
||||
__putstr("\n****************************************\n");
|
||||
__putstr(buf);
|
||||
__putstr("Aieee! CPU");
|
||||
sprintf(buf, "%d", smp_processor_id());
|
||||
__putstr(buf);
|
||||
__putstr(" is toast...\n");
|
||||
__putstr("****************************************\n\n");
|
||||
__putstr("Reboot in five seconds...\n");
|
||||
spin_unlock_irqrestore(&console_lock, flags);
|
||||
|
||||
mdelay(5000);
|
||||
machine_restart(0);
|
||||
}
|
||||
|
||||
|
||||
/* No-op syscall. */
|
||||
asmlinkage long sys_ni_syscall(void)
|
||||
{
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
|
||||
unsigned short compute_cksum(unsigned short *buf, int count)
|
||||
{
|
||||
unsigned long sum = 0;
|
||||
@@ -625,6 +594,38 @@ long do_console_write(char *str, unsigned int count)
|
||||
}
|
||||
|
||||
|
||||
/*********************************
|
||||
* Debugging/tracing/error-report.
|
||||
*/
|
||||
|
||||
void panic(const char *fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
char buf[128];
|
||||
unsigned long flags;
|
||||
extern void machine_restart(char *);
|
||||
|
||||
va_start(args, fmt);
|
||||
(void)vsnprintf(buf, sizeof(buf), fmt, args);
|
||||
va_end(args);
|
||||
|
||||
/* Spit out multiline message in one go. */
|
||||
spin_lock_irqsave(&console_lock, flags);
|
||||
__putstr("\n****************************************\n");
|
||||
__putstr(buf);
|
||||
__putstr("Aieee! CPU");
|
||||
sprintf(buf, "%d", smp_processor_id());
|
||||
__putstr(buf);
|
||||
__putstr(" is toast...\n");
|
||||
__putstr("****************************************\n\n");
|
||||
__putstr("Reboot in five seconds...\n");
|
||||
spin_unlock_irqrestore(&console_lock, flags);
|
||||
|
||||
mdelay(5000);
|
||||
machine_restart(0);
|
||||
}
|
||||
|
||||
|
||||
void __out_of_line_bug(int line)
|
||||
{
|
||||
printk("kernel BUG in header file at line %d\n", line);
|
||||
@@ -633,6 +634,24 @@ void __out_of_line_bug(int line)
|
||||
}
|
||||
|
||||
|
||||
/*********************************
|
||||
* Simple syscalls.
|
||||
*/
|
||||
|
||||
long do_xen_version(int cmd)
|
||||
{
|
||||
if ( cmd != 0 )
|
||||
return -ENOSYS;
|
||||
return (XEN_VERSION<<16) | (XEN_SUBVERSION);
|
||||
}
|
||||
|
||||
long do_ni_syscall(void)
|
||||
{
|
||||
/* No-op syscall. */
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* GRAVEYARD
|
||||
*/
|
||||
|
||||
@@ -49,19 +49,20 @@
|
||||
#define __HYPERVISOR_net_io_op 6
|
||||
#define __HYPERVISOR_fpu_taskswitch 7
|
||||
#define __HYPERVISOR_sched_op 8
|
||||
#define __HYPERVISOR_set_dom_timer 9
|
||||
#define __HYPERVISOR_dom0_op 10
|
||||
#define __HYPERVISOR_network_op 11
|
||||
#define __HYPERVISOR_block_io_op 12
|
||||
#define __HYPERVISOR_set_debugreg 13
|
||||
#define __HYPERVISOR_get_debugreg 14
|
||||
#define __HYPERVISOR_update_descriptor 15
|
||||
#define __HYPERVISOR_set_fast_trap 16
|
||||
#define __HYPERVISOR_dom_mem_op 17
|
||||
#define __HYPERVISOR_multicall 18
|
||||
#define __HYPERVISOR_kbd_op 19
|
||||
#define __HYPERVISOR_update_va_mapping 20
|
||||
#define __HYPERVISOR_dom0_op 9
|
||||
#define __HYPERVISOR_network_op 10
|
||||
#define __HYPERVISOR_block_io_op 11
|
||||
#define __HYPERVISOR_set_debugreg 12
|
||||
#define __HYPERVISOR_get_debugreg 13
|
||||
#define __HYPERVISOR_update_descriptor 14
|
||||
#define __HYPERVISOR_set_fast_trap 15
|
||||
#define __HYPERVISOR_dom_mem_op 16
|
||||
#define __HYPERVISOR_multicall 17
|
||||
#define __HYPERVISOR_kbd_op 18
|
||||
#define __HYPERVISOR_update_va_mapping 19
|
||||
#define __HYPERVISOR_set_timer_op 20
|
||||
#define __HYPERVISOR_event_channel_op 21
|
||||
#define __HYPERVISOR_xen_version 22
|
||||
|
||||
/* And the trap vector is... */
|
||||
#define TRAP_INSTR "int $0x82"
|
||||
|
||||
@@ -532,7 +532,7 @@ int set_timeout_timer(void)
|
||||
alarm = __jiffies_to_st(timer->expires);
|
||||
|
||||
/* Failure is pretty bad, but we'd best soldier on. */
|
||||
if ( HYPERVISOR_set_dom_timer(alarm) != 0 )
|
||||
if ( HYPERVISOR_set_timer_op(alarm) != 0 )
|
||||
ret = -1;
|
||||
|
||||
spin_unlock(&timerlist_lock);
|
||||
|
||||
@@ -294,14 +294,14 @@ static inline int HYPERVISOR_stop(unsigned long srec)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static inline long HYPERVISOR_set_dom_timer(u64 timeout)
|
||||
static inline long HYPERVISOR_set_timer_op(u64 timeout)
|
||||
{
|
||||
int ret;
|
||||
unsigned long timeout_hi = (unsigned long)(timeout>>32);
|
||||
unsigned long timeout_lo = (unsigned long)timeout;
|
||||
__asm__ __volatile__ (
|
||||
TRAP_INSTR
|
||||
: "=a" (ret) : "0" (__HYPERVISOR_set_dom_timer),
|
||||
: "=a" (ret) : "0" (__HYPERVISOR_set_timer_op),
|
||||
"b" (timeout_hi), "c" (timeout_lo) : "memory" );
|
||||
|
||||
return ret;
|
||||
@@ -435,4 +435,15 @@ static inline int HYPERVISOR_update_va_mapping(
|
||||
return ret;
|
||||
}
|
||||
|
||||
static inline int HYPERVISOR_xen_version(int cmd)
|
||||
{
|
||||
int ret;
|
||||
__asm__ __volatile__ (
|
||||
TRAP_INSTR
|
||||
: "=a" (ret) : "0" (__HYPERVISOR_xen_version),
|
||||
"b" (cmd) : "memory" );
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
#endif /* __HYPERVISOR_H__ */
|
||||