From: Joerg Roedel <joro@8bytes.org> To: x86@kernel.org Cc: hpa@zytor.com, Andy Lutomirski <luto@kernel.org>, Dave Hansen <dave.hansen@linux.intel.com>, Peter Zijlstra <peterz@infradead.org>, Thomas Hellstrom <thellstrom@vmware.com>, Jiri Slaby <jslaby@suse.cz>, Dan Williams <dan.j.williams@intel.com>, Tom Lendacky <thomas.lendacky@amd.com>, Juergen Gross <jgross@suse.com>, Kees Cook <keescook@chromium.org>, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, virtualization@lists.linux-foundation.org, Joerg Roedel <joro@8bytes.org>, Joerg Roedel <jroedel@suse.de> Subject: [PATCH 23/70] x86/sev-es: Add support for handling IOIO exceptions Date: Thu, 19 Mar 2020 10:13:20 +0100 [thread overview] Message-ID: <20200319091407.1481-24-joro@8bytes.org> (raw) In-Reply-To: <20200319091407.1481-1-joro@8bytes.org> From: Tom Lendacky <thomas.lendacky@amd.com> Add support for decoding and handling #VC exceptions for IOIO events. Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com> [ jroedel@suse.de: Adapted code to #VC handling framework ] Co-developed-by: Joerg Roedel <jroedel@suse.de> Signed-off-by: Joerg Roedel <jroedel@suse.de> --- arch/x86/boot/compressed/sev-es.c | 32 +++++ arch/x86/kernel/sev-es-shared.c | 202 ++++++++++++++++++++++++++++++ 2 files changed, 234 insertions(+) diff --git a/arch/x86/boot/compressed/sev-es.c b/arch/x86/boot/compressed/sev-es.c index 193c970a3379..ae5fbd371fd9 100644 --- a/arch/x86/boot/compressed/sev-es.c +++ b/arch/x86/boot/compressed/sev-es.c @@ -18,6 +18,35 @@ struct ghcb boot_ghcb_page __aligned(PAGE_SIZE); struct ghcb *boot_ghcb; +/* + * Copy a version of this function here - insn-eval.c can't be used in + * pre-decompression code. + */ +static bool insn_rep_prefix(struct insn *insn) +{ + int i; + + insn_get_prefixes(insn); + + for (i = 0; i < insn->prefixes.nbytes; i++) { + insn_byte_t p = insn->prefixes.bytes[i]; + + if (p == 0xf2 || p == 0xf3) + return true; + } + + return false; +} + +/* + * Only a dummy for insn_get_seg_base() - Early boot-code is 64bit only and + * doesn't use segments. + */ +static unsigned long insn_get_seg_base(struct pt_regs *regs, int seg_reg_idx) +{ + return 0UL; +} + static inline u64 sev_es_rd_ghcb_msr(void) { unsigned long low, high; @@ -117,6 +146,9 @@ void boot_vc_handler(struct pt_regs *regs, unsigned long exit_code) goto finish; switch (exit_code) { + case SVM_EXIT_IOIO: + result = vc_handle_ioio(boot_ghcb, &ctxt); + break; default: result = ES_UNSUPPORTED; break; diff --git a/arch/x86/kernel/sev-es-shared.c b/arch/x86/kernel/sev-es-shared.c index f0947ea3c601..46fc5318d1d7 100644 --- a/arch/x86/kernel/sev-es-shared.c +++ b/arch/x86/kernel/sev-es-shared.c @@ -205,3 +205,205 @@ static enum es_result vc_insn_string_write(struct es_em_ctxt *ctxt, return ret; } + +#define IOIO_TYPE_STR BIT(2) +#define IOIO_TYPE_IN 1 +#define IOIO_TYPE_INS (IOIO_TYPE_IN | IOIO_TYPE_STR) +#define IOIO_TYPE_OUT 0 +#define IOIO_TYPE_OUTS (IOIO_TYPE_OUT | IOIO_TYPE_STR) + +#define IOIO_REP BIT(3) + +#define IOIO_ADDR_64 BIT(9) +#define IOIO_ADDR_32 BIT(8) +#define IOIO_ADDR_16 BIT(7) + +#define IOIO_DATA_32 BIT(6) +#define IOIO_DATA_16 BIT(5) +#define IOIO_DATA_8 BIT(4) + +#define IOIO_SEG_ES (0 << 10) +#define IOIO_SEG_DS (3 << 10) + +static enum es_result vc_ioio_exitinfo(struct es_em_ctxt *ctxt, u64 *exitinfo) +{ + struct insn *insn = &ctxt->insn; + *exitinfo = 0; + + switch (insn->opcode.bytes[0]) { + /* INS opcodes */ + case 0x6c: + case 0x6d: + *exitinfo |= IOIO_TYPE_INS; + *exitinfo |= IOIO_SEG_ES; + *exitinfo |= (ctxt->regs->dx & 0xffff) << 16; + break; + + /* OUTS opcodes */ + case 0x6e: + case 0x6f: + *exitinfo |= IOIO_TYPE_OUTS; + *exitinfo |= IOIO_SEG_DS; + *exitinfo |= (ctxt->regs->dx & 0xffff) << 16; + break; + + /* IN immediate opcodes */ + case 0xe4: + case 0xe5: + *exitinfo |= IOIO_TYPE_IN; + *exitinfo |= insn->immediate.value << 16; + break; + + /* OUT immediate opcodes */ + case 0xe6: + case 0xe7: + *exitinfo |= IOIO_TYPE_OUT; + *exitinfo |= insn->immediate.value << 16; + break; + + /* IN register opcodes */ + case 0xec: + case 0xed: + *exitinfo |= IOIO_TYPE_IN; + *exitinfo |= (ctxt->regs->dx & 0xffff) << 16; + break; + + /* OUT register opcodes */ + case 0xee: + case 0xef: + *exitinfo |= IOIO_TYPE_OUT; + *exitinfo |= (ctxt->regs->dx & 0xffff) << 16; + break; + + default: + return ES_DECODE_FAILED; + } + + switch (insn->opcode.bytes[0]) { + case 0x6c: + case 0x6e: + case 0xe4: + case 0xe6: + case 0xec: + case 0xee: + /* Single byte opcodes */ + *exitinfo |= IOIO_DATA_8; + break; + default: + /* Length determined by instruction parsing */ + *exitinfo |= (insn->opnd_bytes == 2) ? IOIO_DATA_16 + : IOIO_DATA_32; + } + switch (insn->addr_bytes) { + case 2: + *exitinfo |= IOIO_ADDR_16; + break; + case 4: + *exitinfo |= IOIO_ADDR_32; + break; + case 8: + *exitinfo |= IOIO_ADDR_64; + break; + } + + if (insn_rep_prefix(insn)) + *exitinfo |= IOIO_REP; + + return ES_OK; +} + +static enum es_result vc_handle_ioio(struct ghcb *ghcb, struct es_em_ctxt *ctxt) +{ + struct pt_regs *regs = ctxt->regs; + u64 exit_info_1, exit_info_2; + enum es_result ret; + + ret = vc_ioio_exitinfo(ctxt, &exit_info_1); + if (ret != ES_OK) + return ret; + + if (exit_info_1 & IOIO_TYPE_STR) { + int df = (regs->flags & X86_EFLAGS_DF) ? -1 : 1; + unsigned int io_bytes, exit_bytes; + unsigned int ghcb_count, op_count; + unsigned long es_base; + u64 sw_scratch; + + /* + * For the string variants with rep prefix the amount of in/out + * operations per #VC exception is limited so that the kernel + * has a chance to take interrupts an re-schedule while the + * instruction is emulated. + */ + io_bytes = (exit_info_1 >> 4) & 0x7; + ghcb_count = sizeof(ghcb->shared_buffer) / io_bytes; + + op_count = (exit_info_1 & IOIO_REP) ? regs->cx : 1; + exit_info_2 = min(op_count, ghcb_count); + exit_bytes = exit_info_2 * io_bytes; + + es_base = insn_get_seg_base(ctxt->regs, INAT_SEG_REG_ES); + + if (!(exit_info_1 & IOIO_TYPE_IN)) { + ret = vc_insn_string_read(ctxt, + (void *)(es_base + regs->si), + ghcb->shared_buffer, io_bytes, + exit_info_2, df); + if (ret) + return ret; + } + + sw_scratch = __pa(ghcb) + offsetof(struct ghcb, shared_buffer); + ghcb_set_sw_scratch(ghcb, sw_scratch); + ret = sev_es_ghcb_hv_call(ghcb, ctxt, SVM_EXIT_IOIO, + exit_info_1, exit_info_2); + if (ret != ES_OK) + return ret; + + /* Everything went well, write back results */ + if (exit_info_1 & IOIO_TYPE_IN) { + ret = vc_insn_string_write(ctxt, + (void *)(es_base + regs->di), + ghcb->shared_buffer, io_bytes, + exit_info_2, df); + if (ret) + return ret; + + if (df) + regs->di -= exit_bytes; + else + regs->di += exit_bytes; + } else { + if (df) + regs->si -= exit_bytes; + else + regs->si += exit_bytes; + } + + if (exit_info_1 & IOIO_REP) + regs->cx -= exit_info_2; + + ret = regs->cx ? ES_RETRY : ES_OK; + + } else { + int bits = (exit_info_1 & 0x70) >> 1; + u64 rax = 0; + + if (!(exit_info_1 & IOIO_TYPE_IN)) + rax = lower_bits(regs->ax, bits); + + ghcb_set_rax(ghcb, rax); + + ret = sev_es_ghcb_hv_call(ghcb, ctxt, SVM_EXIT_IOIO, exit_info_1, 0); + if (ret != ES_OK) + return ret; + + if (exit_info_1 & IOIO_TYPE_IN) { + if (!ghcb_is_valid_rax(ghcb)) + return ES_VMM_ERROR; + regs->ax = lower_bits(ghcb->save.rax, bits); + } + } + + return ret; +} -- 2.17.1
WARNING: multiple messages have this Message-ID (diff)
From: Joerg Roedel <joro@8bytes.org> To: x86@kernel.org Cc: Juergen Gross <jgross@suse.com>, Tom Lendacky <thomas.lendacky@amd.com>, Thomas Hellstrom <thellstrom@vmware.com>, Joerg Roedel <jroedel@suse.de>, Kees Cook <keescook@chromium.org>, kvm@vger.kernel.org, Peter Zijlstra <peterz@infradead.org>, Joerg Roedel <joro@8bytes.org>, Dave Hansen <dave.hansen@linux.intel.com>, linux-kernel@vger.kernel.org, virtualization@lists.linux-foundation.org, Andy Lutomirski <luto@kernel.org>, hpa@zytor.com, Dan Williams <dan.j.williams@intel.com>, Jiri Slaby <jslaby@suse.cz> Subject: [PATCH 23/70] x86/sev-es: Add support for handling IOIO exceptions Date: Thu, 19 Mar 2020 10:13:20 +0100 [thread overview] Message-ID: <20200319091407.1481-24-joro@8bytes.org> (raw) In-Reply-To: <20200319091407.1481-1-joro@8bytes.org> From: Tom Lendacky <thomas.lendacky@amd.com> Add support for decoding and handling #VC exceptions for IOIO events. Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com> [ jroedel@suse.de: Adapted code to #VC handling framework ] Co-developed-by: Joerg Roedel <jroedel@suse.de> Signed-off-by: Joerg Roedel <jroedel@suse.de> --- arch/x86/boot/compressed/sev-es.c | 32 +++++ arch/x86/kernel/sev-es-shared.c | 202 ++++++++++++++++++++++++++++++ 2 files changed, 234 insertions(+) diff --git a/arch/x86/boot/compressed/sev-es.c b/arch/x86/boot/compressed/sev-es.c index 193c970a3379..ae5fbd371fd9 100644 --- a/arch/x86/boot/compressed/sev-es.c +++ b/arch/x86/boot/compressed/sev-es.c @@ -18,6 +18,35 @@ struct ghcb boot_ghcb_page __aligned(PAGE_SIZE); struct ghcb *boot_ghcb; +/* + * Copy a version of this function here - insn-eval.c can't be used in + * pre-decompression code. + */ +static bool insn_rep_prefix(struct insn *insn) +{ + int i; + + insn_get_prefixes(insn); + + for (i = 0; i < insn->prefixes.nbytes; i++) { + insn_byte_t p = insn->prefixes.bytes[i]; + + if (p == 0xf2 || p == 0xf3) + return true; + } + + return false; +} + +/* + * Only a dummy for insn_get_seg_base() - Early boot-code is 64bit only and + * doesn't use segments. + */ +static unsigned long insn_get_seg_base(struct pt_regs *regs, int seg_reg_idx) +{ + return 0UL; +} + static inline u64 sev_es_rd_ghcb_msr(void) { unsigned long low, high; @@ -117,6 +146,9 @@ void boot_vc_handler(struct pt_regs *regs, unsigned long exit_code) goto finish; switch (exit_code) { + case SVM_EXIT_IOIO: + result = vc_handle_ioio(boot_ghcb, &ctxt); + break; default: result = ES_UNSUPPORTED; break; diff --git a/arch/x86/kernel/sev-es-shared.c b/arch/x86/kernel/sev-es-shared.c index f0947ea3c601..46fc5318d1d7 100644 --- a/arch/x86/kernel/sev-es-shared.c +++ b/arch/x86/kernel/sev-es-shared.c @@ -205,3 +205,205 @@ static enum es_result vc_insn_string_write(struct es_em_ctxt *ctxt, return ret; } + +#define IOIO_TYPE_STR BIT(2) +#define IOIO_TYPE_IN 1 +#define IOIO_TYPE_INS (IOIO_TYPE_IN | IOIO_TYPE_STR) +#define IOIO_TYPE_OUT 0 +#define IOIO_TYPE_OUTS (IOIO_TYPE_OUT | IOIO_TYPE_STR) + +#define IOIO_REP BIT(3) + +#define IOIO_ADDR_64 BIT(9) +#define IOIO_ADDR_32 BIT(8) +#define IOIO_ADDR_16 BIT(7) + +#define IOIO_DATA_32 BIT(6) +#define IOIO_DATA_16 BIT(5) +#define IOIO_DATA_8 BIT(4) + +#define IOIO_SEG_ES (0 << 10) +#define IOIO_SEG_DS (3 << 10) + +static enum es_result vc_ioio_exitinfo(struct es_em_ctxt *ctxt, u64 *exitinfo) +{ + struct insn *insn = &ctxt->insn; + *exitinfo = 0; + + switch (insn->opcode.bytes[0]) { + /* INS opcodes */ + case 0x6c: + case 0x6d: + *exitinfo |= IOIO_TYPE_INS; + *exitinfo |= IOIO_SEG_ES; + *exitinfo |= (ctxt->regs->dx & 0xffff) << 16; + break; + + /* OUTS opcodes */ + case 0x6e: + case 0x6f: + *exitinfo |= IOIO_TYPE_OUTS; + *exitinfo |= IOIO_SEG_DS; + *exitinfo |= (ctxt->regs->dx & 0xffff) << 16; + break; + + /* IN immediate opcodes */ + case 0xe4: + case 0xe5: + *exitinfo |= IOIO_TYPE_IN; + *exitinfo |= insn->immediate.value << 16; + break; + + /* OUT immediate opcodes */ + case 0xe6: + case 0xe7: + *exitinfo |= IOIO_TYPE_OUT; + *exitinfo |= insn->immediate.value << 16; + break; + + /* IN register opcodes */ + case 0xec: + case 0xed: + *exitinfo |= IOIO_TYPE_IN; + *exitinfo |= (ctxt->regs->dx & 0xffff) << 16; + break; + + /* OUT register opcodes */ + case 0xee: + case 0xef: + *exitinfo |= IOIO_TYPE_OUT; + *exitinfo |= (ctxt->regs->dx & 0xffff) << 16; + break; + + default: + return ES_DECODE_FAILED; + } + + switch (insn->opcode.bytes[0]) { + case 0x6c: + case 0x6e: + case 0xe4: + case 0xe6: + case 0xec: + case 0xee: + /* Single byte opcodes */ + *exitinfo |= IOIO_DATA_8; + break; + default: + /* Length determined by instruction parsing */ + *exitinfo |= (insn->opnd_bytes == 2) ? IOIO_DATA_16 + : IOIO_DATA_32; + } + switch (insn->addr_bytes) { + case 2: + *exitinfo |= IOIO_ADDR_16; + break; + case 4: + *exitinfo |= IOIO_ADDR_32; + break; + case 8: + *exitinfo |= IOIO_ADDR_64; + break; + } + + if (insn_rep_prefix(insn)) + *exitinfo |= IOIO_REP; + + return ES_OK; +} + +static enum es_result vc_handle_ioio(struct ghcb *ghcb, struct es_em_ctxt *ctxt) +{ + struct pt_regs *regs = ctxt->regs; + u64 exit_info_1, exit_info_2; + enum es_result ret; + + ret = vc_ioio_exitinfo(ctxt, &exit_info_1); + if (ret != ES_OK) + return ret; + + if (exit_info_1 & IOIO_TYPE_STR) { + int df = (regs->flags & X86_EFLAGS_DF) ? -1 : 1; + unsigned int io_bytes, exit_bytes; + unsigned int ghcb_count, op_count; + unsigned long es_base; + u64 sw_scratch; + + /* + * For the string variants with rep prefix the amount of in/out + * operations per #VC exception is limited so that the kernel + * has a chance to take interrupts an re-schedule while the + * instruction is emulated. + */ + io_bytes = (exit_info_1 >> 4) & 0x7; + ghcb_count = sizeof(ghcb->shared_buffer) / io_bytes; + + op_count = (exit_info_1 & IOIO_REP) ? regs->cx : 1; + exit_info_2 = min(op_count, ghcb_count); + exit_bytes = exit_info_2 * io_bytes; + + es_base = insn_get_seg_base(ctxt->regs, INAT_SEG_REG_ES); + + if (!(exit_info_1 & IOIO_TYPE_IN)) { + ret = vc_insn_string_read(ctxt, + (void *)(es_base + regs->si), + ghcb->shared_buffer, io_bytes, + exit_info_2, df); + if (ret) + return ret; + } + + sw_scratch = __pa(ghcb) + offsetof(struct ghcb, shared_buffer); + ghcb_set_sw_scratch(ghcb, sw_scratch); + ret = sev_es_ghcb_hv_call(ghcb, ctxt, SVM_EXIT_IOIO, + exit_info_1, exit_info_2); + if (ret != ES_OK) + return ret; + + /* Everything went well, write back results */ + if (exit_info_1 & IOIO_TYPE_IN) { + ret = vc_insn_string_write(ctxt, + (void *)(es_base + regs->di), + ghcb->shared_buffer, io_bytes, + exit_info_2, df); + if (ret) + return ret; + + if (df) + regs->di -= exit_bytes; + else + regs->di += exit_bytes; + } else { + if (df) + regs->si -= exit_bytes; + else + regs->si += exit_bytes; + } + + if (exit_info_1 & IOIO_REP) + regs->cx -= exit_info_2; + + ret = regs->cx ? ES_RETRY : ES_OK; + + } else { + int bits = (exit_info_1 & 0x70) >> 1; + u64 rax = 0; + + if (!(exit_info_1 & IOIO_TYPE_IN)) + rax = lower_bits(regs->ax, bits); + + ghcb_set_rax(ghcb, rax); + + ret = sev_es_ghcb_hv_call(ghcb, ctxt, SVM_EXIT_IOIO, exit_info_1, 0); + if (ret != ES_OK) + return ret; + + if (exit_info_1 & IOIO_TYPE_IN) { + if (!ghcb_is_valid_rax(ghcb)) + return ES_VMM_ERROR; + regs->ax = lower_bits(ghcb->save.rax, bits); + } + } + + return ret; +} -- 2.17.1
next prev parent reply other threads:[~2020-03-19 9:18 UTC|newest] Thread overview: 243+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-03-19 9:12 [RFC PATCH 00/70 v2] x86: SEV-ES Guest Support Joerg Roedel 2020-03-19 9:12 ` [PATCH 01/70] KVM: SVM: Add GHCB definitions Joerg Roedel 2020-03-19 9:12 ` Joerg Roedel 2020-03-23 13:23 ` [PATCH] KVM: SVM: Use __packed shorthard Borislav Petkov 2020-03-24 12:43 ` Joerg Roedel 2020-03-19 9:12 ` [PATCH 02/70] KVM: SVM: Add GHCB Accessor functions Joerg Roedel 2020-03-19 9:12 ` Joerg Roedel 2020-03-19 9:13 ` [PATCH 03/70] x86/cpufeatures: Add SEV-ES CPU feature Joerg Roedel 2020-03-19 9:13 ` Joerg Roedel 2020-03-19 9:13 ` [PATCH 04/70] x86/traps: Move some definitions to <asm/trap_defs.h> Joerg Roedel 2020-03-19 9:13 ` [PATCH 05/70] x86/insn: Make inat-tables.c suitable for pre-decompression code Joerg Roedel 2020-03-19 9:13 ` Joerg Roedel 2020-03-25 15:39 ` Borislav Petkov 2020-03-27 3:02 ` Masami Hiramatsu 2020-03-27 3:02 ` Masami Hiramatsu 2020-04-16 15:24 ` Joerg Roedel 2020-04-16 15:24 ` Joerg Roedel 2020-04-17 12:50 ` Masami Hiramatsu 2020-04-17 13:39 ` Joerg Roedel 2020-03-19 9:13 ` [PATCH 06/70] x86/umip: Factor out instruction fetch Joerg Roedel 2020-03-26 17:21 ` Borislav Petkov 2020-03-19 9:13 ` [PATCH 07/70] x86/umip: Factor out instruction decoding Joerg Roedel 2020-03-19 9:13 ` Joerg Roedel 2020-03-26 17:24 ` Borislav Petkov 2020-03-19 9:13 ` [PATCH 08/70] x86/insn: Add insn_get_modrm_reg_off() Joerg Roedel 2020-03-19 9:13 ` Joerg Roedel 2020-03-27 3:57 ` Masami Hiramatsu 2020-03-19 9:13 ` [PATCH 09/70] x86/insn: Add insn_rep_prefix() helper Joerg Roedel 2020-03-19 9:13 ` Joerg Roedel 2020-03-27 3:56 ` Masami Hiramatsu 2020-03-19 9:13 ` [PATCH 10/70] x86/boot/compressed: Fix debug_puthex() parameter type Joerg Roedel 2020-03-28 11:23 ` [tip: x86/boot] " tip-bot2 for Joerg Roedel 2020-03-19 9:13 ` [PATCH 11/70] x86/boot/compressed/64: Disable red-zone usage Joerg Roedel 2020-03-19 9:13 ` Joerg Roedel 2020-03-31 13:16 ` Borislav Petkov 2020-03-19 9:13 ` [PATCH 12/70] x86/boot/compressed/64: Add IDT Infrastructure Joerg Roedel 2020-04-07 2:21 ` Arvind Sankar 2020-04-16 13:30 ` Joerg Roedel 2020-04-16 13:30 ` Joerg Roedel 2020-03-19 9:13 ` [PATCH 13/70] x86/boot/compressed/64: Rename kaslr_64.c to ident_map_64.c Joerg Roedel 2020-03-19 9:13 ` [PATCH 14/70] x86/boot/compressed/64: Add page-fault handler Joerg Roedel 2020-03-19 9:13 ` Joerg Roedel 2020-04-02 11:49 ` Borislav Petkov 2020-03-19 9:13 ` [PATCH 15/70] x86/boot/compressed/64: Always switch to own page-table Joerg Roedel 2020-04-06 11:56 ` Borislav Petkov 2020-03-19 9:13 ` [PATCH 16/70] x86/boot/compressed/64: Don't pre-map memory in KASLR code Joerg Roedel 2020-03-19 9:13 ` [PATCH 17/70] x86/boot/compressed/64: Change add_identity_map() to take start and end Joerg Roedel 2020-03-19 9:13 ` Joerg Roedel 2020-03-19 9:13 ` [PATCH 18/70] x86/boot/compressed/64: Add stage1 #VC handler Joerg Roedel 2020-03-19 9:13 ` Joerg Roedel 2020-03-20 21:16 ` David Rientjes 2020-03-20 22:19 ` Joerg Roedel 2020-04-06 12:41 ` Borislav Petkov 2020-03-19 9:13 ` [PATCH 19/70] x86/boot/compressed/64: Call set_sev_encryption_mask earlier Joerg Roedel 2020-03-19 9:13 ` Joerg Roedel 2020-03-19 9:13 ` [PATCH 20/70] x86/boot/compressed/64: Check return value of kernel_ident_mapping_init() Joerg Roedel 2020-03-19 9:13 ` [PATCH 21/70] x86/boot/compressed/64: Add function to map a page unencrypted Joerg Roedel 2020-03-19 9:13 ` Joerg Roedel 2020-03-20 20:53 ` David Rientjes 2020-03-20 21:02 ` Dave Hansen 2020-03-20 22:12 ` Joerg Roedel 2020-03-20 22:26 ` Dave Hansen 2020-03-21 15:40 ` Joerg Roedel 2020-03-21 15:40 ` Joerg Roedel 2020-03-19 9:13 ` [PATCH 22/70] x86/boot/compressed/64: Setup GHCB Based VC Exception handler Joerg Roedel 2020-03-19 9:13 ` Joerg Roedel 2020-03-19 9:13 ` Joerg Roedel [this message] 2020-03-19 9:13 ` [PATCH 23/70] x86/sev-es: Add support for handling IOIO exceptions Joerg Roedel 2020-03-20 21:03 ` David Rientjes 2020-03-20 22:24 ` Joerg Roedel 2020-03-19 9:13 ` [PATCH 24/70] x86/fpu: Move xgetbv()/xsetbv() into separate header Joerg Roedel 2020-03-19 9:13 ` Joerg Roedel 2020-03-19 9:13 ` [PATCH 25/70] x86/sev-es: Add CPUID handling to #VC handler Joerg Roedel 2020-03-19 9:13 ` Joerg Roedel 2020-03-19 9:13 ` [PATCH 26/70] x86/idt: Move IDT to data segment Joerg Roedel 2020-03-19 9:13 ` Joerg Roedel 2020-03-19 9:13 ` [PATCH 27/70] x86/idt: Split idt_data setup out of set_intr_gate() Joerg Roedel 2020-03-19 9:13 ` Joerg Roedel 2020-03-19 9:13 ` [PATCH 28/70] x86/idt: Move two function from k/idt.c to i/a/desc.h Joerg Roedel 2020-03-19 9:13 ` Joerg Roedel 2020-03-19 9:13 ` [PATCH 29/70] x86/head/64: Install boot GDT Joerg Roedel 2020-03-19 9:13 ` [PATCH 30/70] x86/head/64: Reload GDT after switch to virtual addresses Joerg Roedel 2020-03-19 9:13 ` Joerg Roedel 2020-03-19 9:13 ` [PATCH 31/70] x86/head/64: Load segment registers earlier Joerg Roedel 2020-03-19 9:13 ` Joerg Roedel 2020-03-19 9:13 ` [PATCH 32/70] x86/head/64: Switch to initial stack earlier Joerg Roedel 2020-03-19 9:13 ` Joerg Roedel 2020-03-19 9:13 ` [PATCH 33/70] x86/head/64: Build k/head64.c with -fno-stack-protector Joerg Roedel 2020-03-19 9:13 ` Joerg Roedel 2020-03-19 9:13 ` [PATCH 34/70] x86/head/64: Load IDT earlier Joerg Roedel 2020-03-19 9:13 ` [PATCH 35/70] x86/head/64: Move early exception dispatch to C code Joerg Roedel 2020-03-19 9:13 ` Joerg Roedel 2020-03-19 9:13 ` [PATCH 36/70] x86/sev-es: Add SEV-ES Feature Detection Joerg Roedel 2020-03-19 9:13 ` Joerg Roedel 2020-03-19 9:13 ` [PATCH 37/70] x86/sev-es: Compile early handler code into kernel image Joerg Roedel 2020-03-19 9:13 ` Joerg Roedel 2020-03-19 9:13 ` [PATCH 38/70] x86/sev-es: Setup early #VC handler Joerg Roedel 2020-03-19 9:13 ` Joerg Roedel 2020-03-19 9:13 ` [PATCH 39/70] x86/sev-es: Setup GHCB based boot " Joerg Roedel 2020-03-19 9:13 ` [PATCH 40/70] x86/sev-es: Setup per-cpu GHCBs for the runtime handler Joerg Roedel 2020-04-14 19:03 ` Mike Stunes 2020-04-14 19:03 ` Mike Stunes 2020-04-14 20:04 ` Tom Lendacky 2020-04-14 20:04 ` Tom Lendacky 2020-04-14 20:12 ` Dave Hansen 2020-04-14 20:12 ` Dave Hansen 2020-04-14 20:16 ` Tom Lendacky 2020-04-14 20:16 ` Tom Lendacky 2020-04-14 20:18 ` Tom Lendacky 2020-04-14 20:18 ` Tom Lendacky 2020-04-15 15:54 ` Joerg Roedel 2020-04-15 15:54 ` Joerg Roedel 2020-04-15 15:53 ` Joerg Roedel 2020-04-15 15:53 ` Joerg Roedel 2020-04-23 1:33 ` Bo Gan 2020-04-23 1:33 ` Bo Gan 2020-04-23 11:30 ` Joerg Roedel 2020-04-23 11:30 ` Joerg Roedel 2020-03-19 9:13 ` [PATCH 41/70] x86/sev-es: Add Runtime #VC Exception Handler Joerg Roedel 2020-03-19 9:13 ` Joerg Roedel 2020-03-19 15:44 ` Andy Lutomirski 2020-03-19 16:24 ` Joerg Roedel 2020-03-19 18:43 ` Andy Lutomirski 2020-03-19 19:38 ` Joerg Roedel 2020-03-19 9:13 ` [PATCH 42/70] x86/sev-es: Support nested #VC exceptions Joerg Roedel 2020-03-19 15:46 ` Andy Lutomirski 2020-03-19 15:46 ` Andy Lutomirski 2020-03-19 16:12 ` Joerg Roedel 2020-03-19 9:13 ` [PATCH 43/70] x86/sev-es: Wire up existing #VC exit-code handlers Joerg Roedel 2020-03-19 9:13 ` [PATCH 44/70] x86/sev-es: Handle instruction fetches from user-space Joerg Roedel 2020-03-19 9:13 ` [PATCH 45/70] x86/sev-es: Harden runtime #VC handler for exceptions " Joerg Roedel 2020-03-19 9:13 ` [PATCH 46/70] x86/sev-es: Filter exceptions not supported " Joerg Roedel 2020-03-19 9:13 ` [PATCH 47/70] x86/sev-es: Handle MMIO events Joerg Roedel 2020-03-19 9:13 ` [PATCH 48/70] x86/sev-es: Handle MMIO String Instructions Joerg Roedel 2020-03-19 9:13 ` [PATCH 49/70] x86/sev-es: Handle MSR events Joerg Roedel 2020-03-19 9:13 ` [PATCH 50/70] x86/sev-es: Handle DR7 read/write events Joerg Roedel 2020-03-19 9:13 ` [PATCH 51/70] x86/sev-es: Handle WBINVD Events Joerg Roedel 2020-03-19 9:13 ` [PATCH 52/70] x86/sev-es: Handle RDTSC Events Joerg Roedel 2020-03-19 9:13 ` [PATCH 53/70] x86/sev-es: Handle RDPMC Events Joerg Roedel 2020-03-19 9:13 ` [PATCH 54/70] x86/sev-es: Handle INVD Events Joerg Roedel 2020-03-19 9:13 ` [PATCH 55/70] x86/sev-es: Handle RDTSCP Events Joerg Roedel 2020-04-24 21:03 ` [PATCH] Allow RDTSC and RDTSCP from userspace Mike Stunes 2020-04-24 21:03 ` Mike Stunes 2020-04-24 21:24 ` Dave Hansen 2020-04-24 21:27 ` Tom Lendacky 2020-04-24 22:53 ` Dave Hansen 2020-04-25 12:49 ` Joerg Roedel 2020-04-25 18:15 ` Andy Lutomirski 2020-04-25 19:10 ` Joerg Roedel 2020-04-25 19:47 ` Andy Lutomirski 2020-04-25 20:23 ` Joerg Roedel 2020-04-25 22:10 ` Andy Lutomirski 2020-04-27 17:37 ` Should SEV-ES #VC use IST? (Re: [PATCH] Allow RDTSC and RDTSCP from userspace) Andy Lutomirski 2020-04-27 18:15 ` Andrew Cooper 2020-04-27 18:43 ` Tom Lendacky 2020-04-28 7:55 ` Joerg Roedel 2020-04-28 16:34 ` Andrew Cooper 2020-06-23 11:07 ` Peter Zijlstra 2020-06-23 11:07 ` Peter Zijlstra 2020-06-23 11:30 ` Joerg Roedel 2020-06-23 11:48 ` Peter Zijlstra 2020-06-23 11:48 ` Peter Zijlstra 2020-06-23 12:04 ` Joerg Roedel 2020-06-23 12:52 ` Peter Zijlstra 2020-06-23 12:52 ` Peter Zijlstra 2020-06-23 13:40 ` Joerg Roedel 2020-06-23 13:40 ` Joerg Roedel 2020-06-23 13:59 ` Peter Zijlstra 2020-06-23 13:59 ` Peter Zijlstra 2020-06-23 14:53 ` Peter Zijlstra 2020-06-23 14:53 ` Peter Zijlstra 2020-06-23 14:59 ` Joerg Roedel 2020-06-23 15:23 ` Peter Zijlstra 2020-06-23 15:23 ` Peter Zijlstra 2020-06-23 15:38 ` Peter Zijlstra 2020-06-23 15:38 ` Peter Zijlstra 2020-06-23 15:38 ` Joerg Roedel 2020-06-23 16:02 ` Peter Zijlstra 2020-06-23 16:02 ` Peter Zijlstra 2020-06-23 15:39 ` Andrew Cooper 2020-06-23 15:52 ` Peter Zijlstra 2020-06-23 15:52 ` Peter Zijlstra 2020-06-23 16:03 ` Dave Hansen 2020-06-23 16:13 ` Peter Zijlstra 2020-06-23 16:13 ` Peter Zijlstra 2020-06-23 16:13 ` Borislav Petkov 2020-06-23 11:51 ` Andrew Cooper 2020-06-23 12:47 ` Peter Zijlstra 2020-06-23 12:47 ` Peter Zijlstra 2020-06-23 13:57 ` Andrew Cooper 2020-06-23 13:57 ` Andrew Cooper 2020-06-23 15:51 ` Borislav Petkov 2020-06-23 9:45 ` Joerg Roedel 2020-06-23 10:45 ` Peter Zijlstra 2020-06-23 11:11 ` Joerg Roedel 2020-06-23 11:14 ` Peter Zijlstra 2020-06-23 11:14 ` Peter Zijlstra 2020-06-23 11:43 ` Joerg Roedel 2020-06-23 11:50 ` Peter Zijlstra 2020-06-23 11:50 ` Peter Zijlstra 2020-06-23 12:12 ` Joerg Roedel 2020-06-23 13:03 ` Peter Zijlstra 2020-06-23 13:03 ` Peter Zijlstra 2020-06-23 14:49 ` Joerg Roedel 2020-06-23 15:16 ` Peter Zijlstra 2020-06-23 15:16 ` Peter Zijlstra 2020-06-23 15:32 ` Andrew Cooper 2020-06-23 16:10 ` Borislav Petkov 2020-06-23 15:22 ` Andrew Cooper 2020-06-23 18:26 ` Andy Lutomirski 2020-06-23 18:56 ` Andrew Cooper 2020-04-27 18:47 ` [PATCH] Allow RDTSC and RDTSCP from userspace Dave Hansen 2020-04-25 12:28 ` Joerg Roedel 2020-03-19 9:13 ` [PATCH 56/70] x86/sev-es: Handle MONITOR/MONITORX Events Joerg Roedel 2020-03-19 9:13 ` [PATCH 57/70] x86/sev-es: Handle MWAIT/MWAITX Events Joerg Roedel 2020-03-19 9:13 ` [PATCH 58/70] x86/sev-es: Handle VMMCALL Events Joerg Roedel 2020-03-19 9:13 ` [PATCH 59/70] x86/sev-es: Handle #AC Events Joerg Roedel 2020-03-19 9:13 ` [PATCH 60/70] x86/sev-es: Handle #DB Events Joerg Roedel 2020-03-19 9:13 ` [PATCH 61/70] x86/paravirt: Allow hypervisor specific VMMCALL handling under SEV-ES Joerg Roedel 2020-03-19 9:13 ` [PATCH 62/70] x86/kvm: Add KVM " Joerg Roedel 2020-03-20 21:23 ` David Rientjes 2020-03-20 22:21 ` Joerg Roedel 2020-03-19 9:14 ` [PATCH 63/70] x86/vmware: Add VMware specific handling for VMMCALL " Joerg Roedel 2020-03-19 10:18 ` Thomas Hellstrom 2020-03-19 10:18 ` Thomas Hellstrom 2020-03-19 9:14 ` [PATCH 64/70] x86/realmode: Add SEV-ES specific trampoline entry point Joerg Roedel 2020-03-19 9:14 ` [PATCH 65/70] x86/realmode: Setup AP jump table Joerg Roedel 2020-03-19 9:14 ` [PATCH 66/70] x86/head/64: Don't call verify_cpu() on starting APs Joerg Roedel 2020-03-19 9:14 ` [PATCH 67/70] x86/head/64: Rename start_cpu0 Joerg Roedel 2020-03-19 9:14 ` [PATCH 68/70] x86/sev-es: Support CPU offline/online Joerg Roedel 2020-03-19 9:14 ` [PATCH 69/70] x86/cpufeature: Add SEV_ES_GUEST CPU Feature Joerg Roedel 2020-03-19 9:14 ` [PATCH 70/70] x86/sev-es: Add NMI state tracking Joerg Roedel 2020-03-19 15:35 ` Andy Lutomirski 2020-03-19 16:07 ` Joerg Roedel 2020-03-19 18:40 ` Andy Lutomirski 2020-03-19 19:26 ` Joerg Roedel 2020-03-19 21:27 ` Andy Lutomirski 2020-03-20 19:48 ` Joerg Roedel 2020-03-20 13:17 ` [RFC PATCH v2.1] x86/sev-es: Handle NMI State Joerg Roedel 2020-03-20 14:42 ` Dave Hansen 2020-03-20 19:42 ` Joerg Roedel 2020-03-19 16:53 ` [PATCH 70/70] x86/sev-es: Add NMI state tracking Mika Penttilä 2020-03-19 19:41 ` Joerg Roedel
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20200319091407.1481-24-joro@8bytes.org \ --to=joro@8bytes.org \ --cc=dan.j.williams@intel.com \ --cc=dave.hansen@linux.intel.com \ --cc=hpa@zytor.com \ --cc=jgross@suse.com \ --cc=jroedel@suse.de \ --cc=jslaby@suse.cz \ --cc=keescook@chromium.org \ --cc=kvm@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=luto@kernel.org \ --cc=peterz@infradead.org \ --cc=thellstrom@vmware.com \ --cc=thomas.lendacky@amd.com \ --cc=virtualization@lists.linux-foundation.org \ --cc=x86@kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.