[Pkg-xen-changes] r213 - trunk/xen-3.0/debian/patches

Bastian Blank waldi at costa.debian.org
Tue Aug 15 17:00:26 UTC 2006


Author: waldi
Date: Tue Aug 15 17:00:25 2006
New Revision: 213

Added:
   trunk/xen-3.0/debian/patches/backport-9373.dpatch   (contents, props changed)
Modified:
   trunk/xen-3.0/debian/patches/00list

Log:
* debian/patches/00list: Add backport-9373.
* debian/patches/backport-9373.dpatch: Add.


Modified: trunk/xen-3.0/debian/patches/00list
==============================================================================
--- trunk/xen-3.0/debian/patches/00list	(original)
+++ trunk/xen-3.0/debian/patches/00list	Tue Aug 15 17:00:25 2006
@@ -3,3 +3,4 @@
 version
 compile_date
 default-network
+backport-9373

Added: trunk/xen-3.0/debian/patches/backport-9373.dpatch
==============================================================================
--- (empty file)
+++ trunk/xen-3.0/debian/patches/backport-9373.dpatch	Tue Aug 15 17:00:25 2006
@@ -0,0 +1,159 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: No description.
+
+diff -r 15089a58a425 -r dd974a4e20fd xen/arch/x86/x86_32/entry.S
+--- a/xen/arch/x86/x86_32/entry.S	Mon Jun 12 14:18:52 2006 +0100
++++ b/xen/arch/x86/x86_32/entry.S	Tue Jun 13 11:32:16 2006 +0100
+@@ -168,7 +168,8 @@ ENTRY(hypercall)
+ 	SAVE_ALL(b)
+         sti
+         GET_CURRENT(%ebx)
+-        andl $(NR_hypercalls-1),%eax
++        cmpl  $NR_hypercalls,%eax
++        jae   bad_hypercall
+         PERFC_INCR(PERFC_hypercalls, %eax)
+ #ifndef NDEBUG
+         /* Deliberately corrupt parameter regs not used by this hypercall. */
+@@ -257,6 +258,10 @@ process_nmi:
+         jmp  test_all_events
+ 1:      bts  $_VCPUF_nmi_pending,VCPU_flags(%ebx)
+         jmp  test_guest_events
++
++bad_hypercall:
++        movl $-ENOSYS,UREGS_eax(%esp)
++        jmp  test_all_events
+ 
+ /* CREATE A BASIC EXCEPTION FRAME ON GUEST OS (RING-1) STACK:            */
+ /*   {EIP, CS, EFLAGS, [ESP, SS]}                                        */
+diff -r 15089a58a425 -r dd974a4e20fd xen/arch/x86/x86_64/entry.S
+--- a/xen/arch/x86/x86_64/entry.S	Mon Jun 12 14:18:52 2006 +0100
++++ b/xen/arch/x86/x86_64/entry.S	Tue Jun 13 11:32:16 2006 +0100
+@@ -124,7 +124,8 @@ ENTRY(syscall_enter)
+ 
+ /*hypercall:*/
+         movq  %r10,%rcx
+-        andq  $(NR_hypercalls-1),%rax
++        cmpq  $NR_hypercalls,%rax
++        jae   bad_hypercall
+ #ifndef NDEBUG
+         /* Deliberately corrupt parameter regs not used by this hypercall. */
+         pushq %rdi; pushq %rsi; pushq %rdx; pushq %rcx; pushq %r8 ; pushq %r9 
+@@ -136,7 +137,6 @@ ENTRY(syscall_enter)
+         rep   stosq
+         popq  %r9 ; popq  %r8 ; popq  %rcx; popq  %rdx; popq  %rsi; popq  %rdi
+         movq  UREGS_rax(%rsp),%rax
+-        andq  $(NR_hypercalls-1),%rax
+         pushq %rax
+         pushq UREGS_rip+8(%rsp)
+ #endif
+@@ -211,7 +211,11 @@ process_nmi:
+         jmp  test_all_events
+ 1:      bts  $_VCPUF_nmi_pending,VCPU_flags(%rbx)
+         jmp  test_guest_events
+-	
++
++bad_hypercall:
++        movq $-ENOSYS,UREGS_rax(%rsp)
++        jmp  test_all_events
++
+ /* CREATE A BASIC EXCEPTION FRAME ON GUEST OS STACK:                     */
+ /*   { RCX, R11, [DS-GS,] [CR2,] [ERRCODE,] RIP, CS, RFLAGS, RSP, SS }   */
+ /* %rdx: trap_bounce, %rbx: struct vcpu                           */
+diff -r 15089a58a425 -r dd974a4e20fd xen/include/asm-x86/multicall.h
+--- a/xen/include/asm-x86/multicall.h	Mon Jun 12 14:18:52 2006 +0100
++++ b/xen/include/asm-x86/multicall.h	Tue Jun 13 11:32:16 2006 +0100
+@@ -5,48 +5,59 @@
+ #ifndef __ASM_X86_MULTICALL_H__
+ #define __ASM_X86_MULTICALL_H__
+ 
++#include <xen/errno.h>
+ #include <asm/asm_defns.h>
+ 
+ #ifdef __x86_64__
+ 
+-#define do_multicall_call(_call)                         \
+-    do {                                                 \
+-        __asm__ __volatile__ (                           \
+-            "movq  "STR(MULTICALL_op)"(%0),%%rax; "      \
+-            "andq  $("STR(NR_hypercalls)"-1),%%rax; "    \
+-            "leaq  "STR(hypercall_table)"(%%rip),%%rdi; "\
+-            "leaq  (%%rdi,%%rax,8),%%rax; "              \
+-            "movq  "STR(MULTICALL_arg0)"(%0),%%rdi; "    \
+-            "movq  "STR(MULTICALL_arg1)"(%0),%%rsi; "    \
+-            "movq  "STR(MULTICALL_arg2)"(%0),%%rdx; "    \
+-            "movq  "STR(MULTICALL_arg3)"(%0),%%rcx; "    \
+-            "movq  "STR(MULTICALL_arg4)"(%0),%%r8; "     \
+-            "callq *(%%rax); "                           \
+-            "movq  %%rax,"STR(MULTICALL_result)"(%0); "  \
+-            : : "b" (_call)                              \
+-              /* all the caller-saves registers */       \
+-            : "rax", "rcx", "rdx", "rsi", "rdi",         \
+-              "r8",  "r9",  "r10", "r11" );              \
++#define do_multicall_call(_call)                             \
++    do {                                                     \
++        __asm__ __volatile__ (                               \
++            "    movq  "STR(MULTICALL_op)"(%0),%%rax; "      \
++            "    cmpq  $("STR(NR_hypercalls)"),%%rax; "      \
++            "    jae   2f; "                                 \
++            "    leaq  "STR(hypercall_table)"(%%rip),%%rdi; "\
++            "    leaq  (%%rdi,%%rax,8),%%rax; "              \
++            "    movq  "STR(MULTICALL_arg0)"(%0),%%rdi; "    \
++            "    movq  "STR(MULTICALL_arg1)"(%0),%%rsi; "    \
++            "    movq  "STR(MULTICALL_arg2)"(%0),%%rdx; "    \
++            "    movq  "STR(MULTICALL_arg3)"(%0),%%rcx; "    \
++            "    movq  "STR(MULTICALL_arg4)"(%0),%%r8; "     \
++            "    callq *(%%rax); "                           \
++            "1:  movq  %%rax,"STR(MULTICALL_result)"(%0)\n"  \
++            ".section .fixup,\"ax\"\n"                       \
++            "2:  movq  $-"STR(ENOSYS)",%%rax\n"              \
++            "    jmp   1b\n"                                 \
++            ".previous\n"                                    \
++            : : "b" (_call)                                  \
++              /* all the caller-saves registers */           \
++            : "rax", "rcx", "rdx", "rsi", "rdi",             \
++              "r8",  "r9",  "r10", "r11" );                  \
+     } while ( 0 )
+ 
+ #else
+ 
+-#define do_multicall_call(_call)                       \
+-    do {                                               \
+-        __asm__ __volatile__ (                         \
+-            "pushl "STR(MULTICALL_arg4)"(%0); "        \
+-            "pushl "STR(MULTICALL_arg3)"(%0); "        \
+-            "pushl "STR(MULTICALL_arg2)"(%0); "        \
+-            "pushl "STR(MULTICALL_arg1)"(%0); "        \
+-            "pushl "STR(MULTICALL_arg0)"(%0); "        \
+-            "movl  "STR(MULTICALL_op)"(%0),%%eax; "    \
+-            "andl  $("STR(NR_hypercalls)"-1),%%eax; "  \
+-            "call  *hypercall_table(,%%eax,4); "       \
+-            "movl  %%eax,"STR(MULTICALL_result)"(%0); "\
+-            "addl  $20,%%esp; "                        \
+-            : : "b" (_call)                            \
+-              /* all the caller-saves registers */     \
+-            : "eax", "ecx", "edx" );                   \
++#define do_multicall_call(_call)                             \
++    do {                                                     \
++        __asm__ __volatile__ (                               \
++            "    pushl "STR(MULTICALL_arg4)"(%0); "          \
++            "    pushl "STR(MULTICALL_arg3)"(%0); "          \
++            "    pushl "STR(MULTICALL_arg2)"(%0); "          \
++            "    pushl "STR(MULTICALL_arg1)"(%0); "          \
++            "    pushl "STR(MULTICALL_arg0)"(%0); "          \
++            "    movl  "STR(MULTICALL_op)"(%0),%%eax; "      \
++            "    cmpl  $("STR(NR_hypercalls)"),%%eax; "      \
++            "    jae   2f; "                                 \
++            "    call  *hypercall_table(,%%eax,4); "         \
++            "1:  movl  %%eax,"STR(MULTICALL_result)"(%0); "  \
++            "    addl  $20,%%esp\n"                          \
++            ".section .fixup,\"ax\"\n"                       \
++            "2:  movl  $-"STR(ENOSYS)",%%eax\n"              \
++            "    jmp   1b\n"                                 \
++            ".previous\n"                                    \
++            : : "b" (_call)                                  \
++              /* all the caller-saves registers */           \
++            : "eax", "ecx", "edx" );                         \
+     } while ( 0 )
+ 
+ #endif



More information about the Pkg-xen-changes mailing list