lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Mon, 22 Aug 2016 19:26:40 -0400 From: Brijesh Singh <brijesh.singh@....com> To: <simon.guinot@...uanux.org>, <linux-efi@...r.kernel.org>, <brijesh.singh@....com>, <kvm@...r.kernel.org>, <rkrcmar@...hat.com>, <matt@...eblueprint.co.uk>, <linus.walleij@...aro.org>, <linux-mm@...ck.org>, <paul.gortmaker@...driver.com>, <hpa@...or.com>, <dan.j.williams@...el.com>, <aarcange@...hat.com>, <sfr@...b.auug.org.au>, <andriy.shevchenko@...ux.intel.com>, <herbert@...dor.apana.org.au>, <bhe@...hat.com>, <xemul@...allels.com>, <joro@...tes.org>, <x86@...nel.org>, <mingo@...hat.com>, <msalter@...hat.com>, <ross.zwisler@...ux.intel.com>, <bp@...e.de>, <dyoung@...hat.com>, <thomas.lendacky@....com>, <jroedel@...e.de>, <keescook@...omium.org>, <toshi.kani@....com>, <mathieu.desnoyers@...icios.com>, <devel@...uxdriverproject.org>, <tglx@...utronix.de>, <mchehab@...nel.org>, <iamjoonsoo.kim@....com>, <labbott@...oraproject.org>, <tony.luck@...el.com>, <alexandre.bounine@....com>, <kuleshovmail@...il.com>, <linux-kernel@...r.kernel.org>, <mcgrof@...nel.org>, <linux-crypto@...r.kernel.org>, <pbonzini@...hat.com>, <akpm@...ux-foundation.org>, <davem@...emloft.net> Subject: [RFC PATCH v1 15/28] x86: Unroll string I/O when SEV is active From: Tom Lendacky <thomas.lendacky@....com> Secure Encrypted Virtualization (SEV) does not support string I/O, so unroll the string I/O operation into a loop operating on one element at a time. Signed-off-by: Tom Lendacky <thomas.lendacky@....com> --- arch/x86/include/asm/io.h | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/arch/x86/include/asm/io.h b/arch/x86/include/asm/io.h index de25aad..130b3e2 100644 --- a/arch/x86/include/asm/io.h +++ b/arch/x86/include/asm/io.h @@ -303,14 +303,32 @@ static inline unsigned type in##bwl##_p(int port) \ \ static inline void outs##bwl(int port, const void *addr, unsigned long count) \ { \ - asm volatile("rep; outs" #bwl \ - : "+S"(addr), "+c"(count) : "d"(port)); \ + if (sev_active) { \ + unsigned type *value = (unsigned type *)addr; \ + while (count) { \ + out##bwl(*value, port); \ + value++; \ + count--; \ + } \ + } else { \ + asm volatile("rep; outs" #bwl \ + : "+S"(addr), "+c"(count) : "d"(port)); \ + } \ } \ \ static inline void ins##bwl(int port, void *addr, unsigned long count) \ { \ - asm volatile("rep; ins" #bwl \ - : "+D"(addr), "+c"(count) : "d"(port)); \ + if (sev_active) { \ + unsigned type *value = (unsigned type *)addr; \ + while (count) { \ + *value = in##bwl(port); \ + value++; \ + count--; \ + } \ + } else { \ + asm volatile("rep; ins" #bwl \ + : "+D"(addr), "+c"(count) : "d"(port)); \ + } \ } BUILDIO(b, b, char)
Powered by blists - more mailing lists