Received: by 10.213.65.68 with SMTP id h4csp1314066imn; Wed, 4 Apr 2018 17:06:20 -0700 (PDT) X-Google-Smtp-Source: AIpwx4/+1jR8r+k8vO35MZ1zjD8w+QwyLTZOFpinurxoMPHL3LG8jqRBg/V5WOyBaiN9JMkwCyJ/ X-Received: by 10.101.99.213 with SMTP id n21mr13287141pgv.202.1522886780888; Wed, 04 Apr 2018 17:06:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1522886780; cv=none; d=google.com; s=arc-20160816; b=tPUhkb37fcO2qzB/pe46qGBjUSJeB/bb9AgkHwCiZV8MuepXEM6HpyC/T4pKogoB2n UFLMXp1hUa16/CUEKrSx6wfog01fNPSflUDi7/Wi3BwreamfzhT5n4E1ccIB7x05Ejj0 U+4qtUggtTQ/nUADovH2ny9kTSdMDUsNa07LldyY2614XCvClJ8MwnoRIugt5ZbvX8pm ZCr6ocJKy0T/0gIyzJ1NpDWNhYAQq0wuUkHUbWFYM5J4MIUrorjo4RRH+an70keq0uVe kiQKPMPxA1fxDOy9mA5EB3f1bicmZ/Nl0tAmQIIKIzF6flz61ukm4J/zUpZrddBl8x2n Usyw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :references:in-reply-to:mime-version:dkim-signature :arc-authentication-results; bh=pfHOpbzve6KwsDFJzedFOjfD8GL/7tAC35fpdljMISc=; b=Me6Oel4p9iYPfX1j38heuAK8u972U1rYJkG7n7KjPXegC0/6rdQKMqnnJBHNUPGIFC uhC7iNiTfriliZ77x6+K38reBsgBWLopetSfq86dcQ+SbsEoFSw3SIXbPeNWOKv9UCAI 5BTioHTBKRPACQRw07v4b3BB7pTqMVI7CCojOyA7FugenuM1ONAFLyqGRTtvxeBlPe6h +Rc6N30RRHGbhoPLbIljUuuk6R5wMlLzPVHPxYRPknElai1GA5wxXIiigcE0DiIf6U3e dAj9jfJdAzXm72s7hLNVbeZ+CcI1WahJ23vOCnqCsxYpOcYFagw3CYopIwq3XfoMHWsk ATJQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=HRhYt0BR; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id y185si4557055pgd.359.2018.04.04.17.06.06; Wed, 04 Apr 2018 17:06:20 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=HRhYt0BR; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752594AbeDEAFA (ORCPT + 99 others); Wed, 4 Apr 2018 20:05:00 -0400 Received: from mail-oi0-f67.google.com ([209.85.218.67]:42155 "EHLO mail-oi0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752484AbeDEAE6 (ORCPT ); Wed, 4 Apr 2018 20:04:58 -0400 Received: by mail-oi0-f67.google.com with SMTP id l190-v6so20935300oig.9; Wed, 04 Apr 2018 17:04:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=pfHOpbzve6KwsDFJzedFOjfD8GL/7tAC35fpdljMISc=; b=HRhYt0BRNQCTH9VnvXvOAgQBQpSHB5X8o5oHub1hMscVR13iunSuE9VUgzHZuW0rlj WYhkubpAXOT/Pxx8FDU0q+TINpZQge0RCBRsJ6wqI6u8kmYHsNaWABRci5LsXXtt/jkf reVa7De1j3cqeKe5lQk6XQ7Jpt1Wp3CE+wQGAJOTgFWeRX5QG/J0bmhysAaEUi6ErF5M gOQLdFqCz0f3gyOyvz/59Tz51xEHS0Qjz4zBj7yFZ4czTzIbua4UJrbeeqLqMQ/clRX8 9C7ybYJVZzfWFwbSEvLD6xLIgNcsZsnsWELJLvhhJHWqhKL1HJMviMC0oe4zSQdY9BLW +pWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=pfHOpbzve6KwsDFJzedFOjfD8GL/7tAC35fpdljMISc=; b=DmZ4O+DoEZttP+DxLheU9rxa+lcYdwSBrcW1vVdJu+sBfTu+8XYxK7gkPi8wQmRlS+ RT5up7PUZw/rAfyqYAqREycKPksBmGBEv/h1lryb0p+aUObqLSblODRJ7O7hLCr+ion/ kUV735FEENbyTh5+6Ybth54hBjUbpq92qJuOR/734VK/MHdBuBPjZUHAnzkYTAOldMl1 Lxy5X45dcn6AoBEow885XyCJKgu72eTf0KaZ1T/mfx9UypPZGPwxcRv67VdlNw4CbOQx 21Jw+M1RP2Cp+7o7JG1CAshwJsgCeGmxdTTdPyHoA0Xe6+YzPvY6oollrLzNlfFqq3JN rnwg== X-Gm-Message-State: ALQs6tC6lNzNphluj6wCY4njyZZnpK2jMHJBGdcjoOoQCCaaLKM8FBiE itxBJ44OiyX5zz+BYZH+ingAMU6x4niprjJevtI= X-Received: by 2002:aca:2804:: with SMTP id 4-v6mr11777100oix.74.1522886697879; Wed, 04 Apr 2018 17:04:57 -0700 (PDT) MIME-Version: 1.0 Received: by 10.74.210.78 with HTTP; Wed, 4 Apr 2018 17:04:57 -0700 (PDT) In-Reply-To: References: <1522798129-14588-1-git-send-email-wanpengli@tencent.com> <1522798129-14588-3-git-send-email-wanpengli@tencent.com> <48d06146-f508-e883-72cb-881e043f9c72@redhat.com> From: Wanpeng Li Date: Thu, 5 Apr 2018 08:04:57 +0800 Message-ID: Subject: Re: [PATCH v5 2/2] KVM: X86: Add Force Emulation Prefix for "emulate the next instruction" To: Paolo Bonzini Cc: David Hildenbrand , LKML , kvm , =?UTF-8?B?UmFkaW0gS3LEjW3DocWZ?= , Andrew Cooper , Konrad Rzeszutek Wilk , Liran Alon Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 2018-04-05 1:09 GMT+08:00 Paolo Bonzini : > On 04/04/2018 15:35, Wanpeng Li wrote: >> 2018-04-04 19:59 GMT+08:00 David Hildenbrand : >>> >>>> diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c >>>> index 1eb495e..a55ecef 100644 >>>> --- a/arch/x86/kvm/x86.c >>>> +++ b/arch/x86/kvm/x86.c >>>> @@ -146,6 +146,9 @@ bool __read_mostly enable_vmware_backdoor = false; >>>> module_param(enable_vmware_backdoor, bool, S_IRUGO); >>>> EXPORT_SYMBOL_GPL(enable_vmware_backdoor); >>>> >>>> +static bool __read_mostly force_emulation_prefix = false; >>>> +module_param(force_emulation_prefix, bool, S_IRUGO); >>>> + >>>> #define KVM_NR_SHARED_MSRS 16 >>>> >>>> struct kvm_shared_msrs_global { >>>> @@ -4844,6 +4847,21 @@ int handle_ud(struct kvm_vcpu *vcpu) >>>> { >>>> enum emulation_result er; >>>> >>>> + if (force_emulation_prefix) { >>>> + char sig[5]; /* ud2; .ascii "kvm" */ >>>> + struct x86_exception e; >>>> + >>>> + if (kvm_read_guest_virt(&vcpu->arch.emulate_ctxt, >>>> + kvm_get_linear_rip(vcpu), sig, sizeof(sig), &e)) >>>> + goto emulate_ud; >>>> + >>>> + if (memcmp(sig, "\xf\xbkvm", sizeof(sig)) == 0) { >>>> + kvm_rip_write(vcpu, kvm_rip_read(vcpu) + sizeof(sig)); >>>> + return emulate_instruction(vcpu, 0) == EMULATE_DONE; >>> >>> What if we would have an invalid instruction here? Shouldn't you handle >>> the emulate_instruction() like below? >>> (e.g. keep a variable with the emulation type (0 vs EMULTYPE_TRAP_UD) >>> and reuse emulate_ud below) >> >> emulate_instruction(vcpu, 0) can handle invalid instruction. > > But David's observation is still better because your code doesn't handle usermode exits. My code handles it, return emulate_instruction(vcpu, 0) == EMULATE_DONE, it will return 0 since EMULATE_USER_EXIT == EMULATE_DONE fails. > I've fixed this up. Thanks. The codes similar to my v3 but more beauty. :) I change to this view since Radim's comments to v3 https://www.spinics.net/lists/kvm/msg166999.html Regards, Wanpeng Li