hv: cpu: using struct cpu_gp_regs for general-purpose regs in inter_excp_ctx

The purpos is to unify the layout of general-purpose regs in interrupt/excpetion context.

Signed-off-by: Binbin Wu <binbin.wu@intel.com>
Acked-by: Eddie Dong <eddie.dong@intel.com>
This commit is contained in:
Binbin Wu 2018-07-24 20:20:43 +08:00 committed by lijinxia
parent 586b527e2c
commit f1b9f5ac97
3 changed files with 78 additions and 94 deletions

View File

@ -265,42 +265,45 @@ vector =0x20
*/ */
.align 8 .align 8
excp_save_frame: excp_save_frame:
pushq %r11 pushq %r15
pushq %r10 pushq %r14
pushq %r9 pushq %r13
pushq %r8 pushq %r12
pushq %rdi pushq %r11
pushq %rsi pushq %r10
pushq %rdx pushq %r9
pushq %rcx pushq %r8
pushq %rax pushq %rdi
pushq %rbp pushq %rsi
pushq %rbx pushq %rbp
pushq %r15 pushq %rsp
pushq %r14 pushq %rbx
pushq %r13 pushq %rdx
pushq %r12 pushq %rcx
pushq %rax
/* Put current stack pointer into 1st param register (rdi) */ /* Put current stack pointer into 1st param register (rdi) */
movq %rsp, %rdi movq %rsp, %rdi
call dispatch_exception call dispatch_exception
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbx
popq %rbp
popq %rax popq %rax
popq %rcx popq %rcx
popq %rdx popq %rdx
popq %rbx
popq %rsp
popq %rbp
popq %rsi popq %rsi
popq %rdi popq %rdi
popq %r8 popq %r8
popq %r9 popq %r9
popq %r10 popq %r10
popq %r11 popq %r11
popq %r12
popq %r13
popq %r14
popq %r15
/* Skip vector and error code*/ /* Skip vector and error code*/
add $16, %rsp add $16, %rsp
@ -315,45 +318,44 @@ excp_save_frame:
*/ */
.align 8 .align 8
excp_rsvd: excp_rsvd:
pushq %r11 pushq %r15
pushq %r10 pushq %r14
pushq %r9 pushq %r13
pushq %r8 pushq %r12
pushq %rdi pushq %r11
pushq %rsi pushq %r10
pushq %rdx pushq %r9
pushq %rcx pushq %r8
pushq %rax pushq %rdi
pushq %rsi
pushq %rbp
pushq %rbp pushq %rsp
pushq %rbx pushq %rbx
pushq %r15 pushq %rdx
pushq %r14 pushq %rcx
pushq %r13 pushq %rax
pushq %r12
/* Put current stack pointer into 1st param register (rdi) */ /* Put current stack pointer into 1st param register (rdi) */
movq %rsp, %rdi movq %rsp, %rdi
call dispatch_exception call dispatch_exception
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbx
popq %rbp
popq %rax popq %rax
popq %rcx popq %rcx
popq %rdx popq %rdx
popq %rbx
popq %rsp
popq %rbp
popq %rsi popq %rsi
popq %rdi popq %rdi
popq %r8 popq %r8
popq %r9 popq %r9
popq %r10 popq %r10
popq %r11 popq %r11
popq %r12
popq %r13
popq %r14
popq %r15
/* Skip vector and error code*/ /* Skip vector and error code*/
add $16, %rsp add $16, %rsp
@ -367,23 +369,22 @@ excp_rsvd:
*/ */
.align 8 .align 8
external_interrupt_save_frame: external_interrupt_save_frame:
pushq %r11 pushq %r15
pushq %r10 pushq %r14
pushq %r9 pushq %r13
pushq %r8 pushq %r12
pushq %rdi pushq %r11
pushq %rsi pushq %r10
pushq %rdx pushq %r9
pushq %rcx pushq %r8
pushq %rax pushq %rdi
pushq %rsi
pushq %rbp
pushq %rbp pushq %rsp
pushq %rbx pushq %rbx
pushq %r15 pushq %rdx
pushq %r14 pushq %rcx
pushq %r13 pushq %rax
pushq %r12
/* Put current stack pointer into 1st param register (rdi) */ /* Put current stack pointer into 1st param register (rdi) */
movq %rsp, %rdi movq %rsp, %rdi
@ -395,22 +396,22 @@ external_interrupt_save_frame:
* are for Guest, and we can execute softirq in hv_main() loop * are for Guest, and we can execute softirq in hv_main() loop
*/ */
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbx
popq %rbp
popq %rax popq %rax
popq %rcx popq %rcx
popq %rdx popq %rdx
popq %rbx
popq %rsp
popq %rbp
popq %rsi popq %rsi
popq %rdi popq %rdi
popq %r8 popq %r8
popq %r9 popq %r9
popq %r10 popq %r10
popq %r11 popq %r11
popq %r12
popq %r13
popq %r14
popq %r15
/* Skip vector and error code*/ /* Skip vector and error code*/
add $16, %rsp add $16, %rsp

View File

@ -261,17 +261,17 @@ void dump_intr_excp_frame(struct intr_excp_ctx *ctx)
printf("= Vector=0x%016llX RIP=0x%016llX\n", printf("= Vector=0x%016llX RIP=0x%016llX\n",
ctx->vector, ctx->rip); ctx->vector, ctx->rip);
printf("= RAX=0x%016llX RBX=0x%016llX RCX=0x%016llX\n", printf("= RAX=0x%016llX RBX=0x%016llX RCX=0x%016llX\n",
ctx->rax, ctx->rbx, ctx->rcx); ctx->gp_regs.rax, ctx->gp_regs.rbx, ctx->gp_regs.rcx);
printf("= RDX=0x%016llX RDI=0x%016llX RSI=0x%016llX\n", printf("= RDX=0x%016llX RDI=0x%016llX RSI=0x%016llX\n",
ctx->rdx, ctx->rdi, ctx->rsi); ctx->gp_regs.rdx, ctx->gp_regs.rdi, ctx->gp_regs.rsi);
printf("= RSP=0x%016llX RBP=0x%016llX RBX=0x%016llX\n", printf("= RSP=0x%016llX RBP=0x%016llX RBX=0x%016llX\n",
ctx->rsp, ctx->rbp, ctx->rbx); ctx->gp_regs.rsp, ctx->gp_regs.rbp, ctx->gp_regs.rbx);
printf("= R8=0x%016llX R9=0x%016llX R10=0x%016llX\n", printf("= R8=0x%016llX R9=0x%016llX R10=0x%016llX\n",
ctx->r8, ctx->r9, ctx->r10); ctx->gp_regs.r8, ctx->gp_regs.r9, ctx->gp_regs.r10);
printf("= R11=0x%016llX R12=0x%016llX R13=0x%016llX\n", printf("= R11=0x%016llX R12=0x%016llX R13=0x%016llX\n",
ctx->r11, ctx->r12, ctx->r13); ctx->gp_regs.r11, ctx->gp_regs.r12, ctx->gp_regs.r13);
printf("= RFLAGS=0x%016llX R14=0x%016llX R15=0x%016llX\n", printf("= RFLAGS=0x%016llX R14=0x%016llX R15=0x%016llX\n",
ctx->rflags, ctx->r14, ctx->r15); ctx->rflags, ctx->gp_regs.r14, ctx->gp_regs.r15);
printf("= ERRCODE=0x%016llX CS=0x%016llX SS=0x%016llX\n", printf("= ERRCODE=0x%016llX CS=0x%016llX SS=0x%016llX\n",
ctx->error_code, ctx->cs, ctx->ss); ctx->error_code, ctx->cs, ctx->ss);
printf("\r\n"); printf("\r\n");
@ -285,7 +285,7 @@ void dump_exception(struct intr_excp_ctx *ctx, uint16_t pcpu_id)
/* Dump host context */ /* Dump host context */
dump_intr_excp_frame(ctx); dump_intr_excp_frame(ctx);
/* Show host stack */ /* Show host stack */
show_host_call_trace(ctx->rsp, ctx->rbp, pcpu_id); show_host_call_trace(ctx->gp_regs.rsp, ctx->gp_regs.rbp, pcpu_id);
/* Dump guest context */ /* Dump guest context */
dump_guest_context(pcpu_id); dump_guest_context(pcpu_id);

View File

@ -39,29 +39,12 @@
* Definition of the stack frame layout * Definition of the stack frame layout
*/ */
struct intr_excp_ctx { struct intr_excp_ctx {
uint64_t r12; struct cpu_gp_regs gp_regs;
uint64_t r13;
uint64_t r14;
uint64_t r15;
uint64_t rbx;
uint64_t rbp;
uint64_t rax;
uint64_t rcx;
uint64_t rdx;
uint64_t rsi;
uint64_t rdi;
uint64_t r8;
uint64_t r9;
uint64_t r10;
uint64_t r11;
uint64_t vector; uint64_t vector;
uint64_t error_code; uint64_t error_code;
uint64_t rip; uint64_t rip;
uint64_t cs; uint64_t cs;
uint64_t rflags; uint64_t rflags;
uint64_t rsp;
uint64_t ss; uint64_t ss;
}; };