From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753040AbcCRFNg (ORCPT ); Fri, 18 Mar 2016 01:13:36 -0400 Received: from mail-bl2on0089.outbound.protection.outlook.com ([65.55.169.89]:24864 "EHLO na01-bl2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752983AbcCRFNZ (ORCPT ); Fri, 18 Mar 2016 01:13:25 -0400 Authentication-Results: amd.com; dkim=none (message not signed) header.d=none;amd.com; dmarc=none action=none header.from=amd.com; Subject: Re: [PATCH] KVM: split kvm_vcpu_wake_up from kvm_vcpu_kick To: =?UTF-8?B?UmFkaW0gS3LEjW3DocWZ?= References: <1457124368-2025-1-git-send-email-Suravee.Suthikulpanit@amd.com> <1457124368-2025-8-git-send-email-Suravee.Suthikulpanit@amd.com> <20160309205512.GD19459@potion.brq.redhat.com> <56EB0918.80709@amd.com> <20160317202727.GA6465@potion.brq.redhat.com> CC: , , , , , , , , From: Suravee Suthikulpanit Message-ID: <56EB8E61.4010702@amd.com> Date: Fri, 18 Mar 2016 12:13:05 +0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.5.1 MIME-Version: 1.0 In-Reply-To: <20160317202727.GA6465@potion.brq.redhat.com> Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 8bit X-Originating-IP: [124.121.8.20] X-ClientProxiedBy: HKXPR03CA0083.apcprd03.prod.outlook.com (25.163.104.41) To BLUPR12MB0433.namprd12.prod.outlook.com (25.162.92.139) X-MS-Office365-Filtering-Correlation-Id: 762521f1-e338-4c20-d13c-08d34eec062e X-Microsoft-Exchange-Diagnostics: 1;BLUPR12MB0433;2:hHlwqKrgLm3JrFId4f8x/OxhHdvIOzNAY6Vs7n59mZ4QrNoU3aDG72+OQYMBPuluWEjScGQuL+4ANEjEYzJRqcyRe2NTUb94+gOaWd309bNhhN8/JZ2OWHCWSZQLB+cehmv6mIbNKOv1IZuG1PSpY6FMagD7NdWfHHCH9EwUKglFC6xlSq5XChgyyfdBh0bC;3:T7oauKWhjqg6My3oy9fLn6zvmAzzk71VQEg09Kvxj3LaPpzGG98jwIwK6IFUFRLDMjEslvizXpVFdh/0SzeFaggYAy46zcVfmq5+KMt4FUkhXZwg6agy64KVf3IQUe4O;25:QN3vcYFZPY6o8hihGJm2rB5p0PWycRzKqFL/THh+w8KmA/4ChXqXEVJ6L/JLlQ1PKNTc2AxiCiyRIon2HGq/j+WzQ7CiuBBTgjP0cubNDguPHXh7oDXAdiL5Z0Crcu0b/4YtKmigjlcFYyslqLJaTNfslsUEPTmbP+zBNt3lkHxFkCw/xBoJ0SKX6jMddP7PwR5C7FbuTkswlHDaiAGgz9VIik5NdxgzjluLAC1wtRB7uBhZffRpY7n3H0JAm2D+F2fpW+g/1ZFUjCzXtKAaNjFPzZsSMxa8H/6mlP7HJTWh3qaybMqVASXvxQ/HF5osVS7mEHO6eSRNxNVMab/Ge5KkiCEI4MJ5ZbSuT6nuUT3L0pr4AXvuTT1nhCVBBSxvcSfq4ohCH7wA5RoDAJJZraYUQRsTpr9PzLUOA2/fVqLkAW8ui2psJ5jNrRCY1gbVJQxOvy5EWXAuJztz7QfrXLlWGQkaCqxoxKIB/H9wNLw= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BLUPR12MB0433; X-Microsoft-Exchange-Diagnostics: 1;BLUPR12MB0433;20:ZWUx2gSI3hB0MNn7BMMV3YRWG1M2mYPxj6Fpk0mPFLW/NuwRmhsphXSHq8bN0ggd1G4PaXdTpSknAwMPjMi/Jf4JHP7hC9VrN1fZYlm+85Jk2SNHmAbj4jN5cA+jCvCW+F2iyYbhWjzD9VMmVWxdp7bkMvwBmvMV8o4Y9RM9e08WS03LICPTYW5RVQRMRhYfyiSb5Fi5f+RFZxBexJgQxOO50/w9khfzSX2PU+/wU8xjVXwFhLVNjS1TWwNqskQOhG+3Fqk7/N1wruI9r7Y5WVxUUsvoXU4TOQ9SkvW3F6Cm7hQZxdus1lPqTMK9xUmouYoYz0F3TOicgV3/JrF29glCRelTMrZqeV9xEKqvIJnPcI8rpnevbHunwceKdmg5u2ClfXaSNo/ez2w4USrFSgXt3V7KU//i4ObJTsPLadhc0y2733EokFq/BWX2nzRzSLOVsS4g4TRI0CX9qUmfY18cBUOZApc3EYuuMD/CnLWzApldxQDBnvNmvJyTk2VL;4:dLmfcfJxyHGsMbj46zZ1L7NcRJoTyIRQm4gA5wrSoikyG9IRynBUoJ7HW6NzDIdojAa8FrLzJqgwR9BamAIm4qP4ISTzn3a9plo25jtEBBwykof7NJgScbRWx1pAhVvmIspwbzLZU4ngrHXVbOEKnoiixNov4AaT/2gJSrcCufELseYh381zE9Hu9tCkpoj5/oDvvzMBQaU/m5+J9YYgVOaZ6dRy44B9m75oWtZqXA+oXfLFzW2bv/Sqy28OysusU08sH8HiDByaF6u9MOEHB5hPMKaYQOp7MxPjoycRy56eVflCnQ2SeDpkgQafzyYRb3A59VwBmmiNr4Fs+T8QY0EmzIBPRv9ChAjsVuvAUka1yeJJTK8lERgYrkzMTQBq X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001);SRVR:BLUPR12MB0433;BCL:0;PCL:0;RULEID:;SRVR:BLUPR12MB0433; X-Forefront-PRVS: 088552DE73 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6049001)(6009001)(377454003)(24454002)(479174004)(164054003)(377424004)(6116002)(3846002)(65956001)(65806001)(4326007)(54356999)(66066001)(586003)(86362001)(80316001)(64126003)(117156001)(47776003)(2870700001)(2950100001)(5004730100002)(93886004)(23676002)(50466002)(81166005)(77096005)(189998001)(36756003)(110136002)(5008740100001)(65816999)(4001350100001)(76176999)(50986999)(42186005)(92566002)(19580405001)(19580395003);DIR:OUT;SFP:1101;SCL:1;SRVR:BLUPR12MB0433;H:[192.168.0.19];FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtCTFVQUjEyTUIwNDMzOzIzOjZaUkhwUjE1MVNqNXozTUlFaWJvcjBZWWNK?= =?utf-8?B?WXc5RkI2NzBkYWhUanRrZ0ozcDExYlp3L2U2NlI3aUs0RmlDcmNaUU9iN0FM?= =?utf-8?B?Q2p6NlNDblZHSGwzMFdUdjhJOFdlNEZQVXVQaStnaTUvSXhHQS9GM3dVdCtQ?= =?utf-8?B?TEJ2d1dwRXZzOTE2MTZjS2FpOTQza2k5cm5DNXVzaUxhRnp5eFdwSFYyZlB1?= =?utf-8?B?cDkxSE1zbU53REY0ZnFxL2xuQStWME5OZW54SHd0SGpWb0ZQZStRSFdTWjI4?= =?utf-8?B?UU1RTWM1Z0tLRDdaL2x0UURXVEN6Sm5sem02VDl2LzBELzNVNVl2c2IzeEdZ?= =?utf-8?B?aG9yei9SV1E5UWo0Q09sYUUzM1ZTZjZPR2kyYVFZOVlnYUdDb2I2cEZEbXRy?= =?utf-8?B?Y2xjSFNlRXUvUlNNZ21TZXFwMllJejFZSlMybkxDZ2FmZG1Ja1pmSWg0cnIy?= =?utf-8?B?bm4vNHNxZk5MVHI1ajYvWmJ2b2syenpncS9YM2F6QzlxRmt4aFlIK3BPUUlQ?= =?utf-8?B?dFZaRnB0eGUwMkRUVGY4cGxBekRJb1VOYWV3UWl5dXgyb3o0RVdnTFBjSzRx?= =?utf-8?B?MUt6enBtOU5RWmNSY3FzNWIxVnVyNGg3a3lWem5HSHA3NW80VFh5cDFuN1J0?= =?utf-8?B?YTJwbEJ2VysybFE4bEpoRHVscS9FbUlGNFhTSmtBdU9takc2T2ZWbkVMMmJH?= =?utf-8?B?Rmp4TU90REVseXluT0lLVnEybHp6YUVNYzJjNFNwV0xwb3d5THVMT1NDSlMx?= =?utf-8?B?R2dtT1IvM2FEcmljbjFlVHNGenJDMUdyNFRxaXhhUWVzK1g1bmtiYm8rM05D?= =?utf-8?B?Q3d5R2gzR3YrMDhZc2J1WGoya0dmUUI3VHlBR0dFU2RZY1cvSFRKaGJGSVZK?= =?utf-8?B?UXRMU3liWkl6Y3FXNk1YZTFyV3IyazRMZUYwaWdJVEZrRnVNK3N5elFnL3pC?= =?utf-8?B?MTdHOXNOT2pDb3FRbDhrdkV2UkZxMHlrWFdJb1VHOXZCTEVZa1c3Tyt2cGFk?= =?utf-8?B?aFdHTEdGUlp5S1Y2UWpXZmtCNUdseW1CTlk4U0M0YWRSNEdQbUR2eDQzOWpv?= =?utf-8?B?VzNmMCt1aFFIRnl0R1NKZlQyVkF4L2NZUUdXNE5nZUwxWVJqM2pPZUYwd3ZO?= =?utf-8?B?QmtxMmdNTm5ITUhzbDJrY1FqVnlhaEdSNzZCc3dPVlphZXpHeE05QVlsNmda?= =?utf-8?B?eUJHOHdOMUcrRlNoc1JKeUpVSDdKeU02VVpKL083a2FJc0ViSVJvV2dGSlo2?= =?utf-8?B?TUNzWDQrNmw2ZENyVW9sNDdsaXJlYUJ4MVVUdmNIRllXWFpNSk1vbFVOeUtT?= =?utf-8?B?N05oaFUvSVhHL3hMRGhTTjFGZ2tadmFKUmxHMllSeHkvZ2swRlNMdHdML2xu?= =?utf-8?B?Z1FONmdFWHI5cEF1QnN0eDdFb3NOVzd0MCt2Z2NjMTR2cGU0NDVPU21pMjZt?= =?utf-8?B?TzVxTE1OTzZhOGJ1MU1wUVZKMzFnWkdRZnUzNkNDSlVaUHBXU1NhakprejJi?= =?utf-8?B?RU1Bdz09?= X-Microsoft-Exchange-Diagnostics: 1;BLUPR12MB0433;5:t4yYCLs+oZySjgPe2KDSKMoImBDXFyyRovpxw1uo9VjQKR0FbDse8xdyNRHbWrPFYdZxYrADKZikTPntEmxEJkAzLXFGVwlUbVEr5C630Mb1hmLuofcz1YxhqNgHxsyOQNEdtHhBT3u6VoDTK8JZPA==;24:A8SJq+k6khZadS+Blo8FRdfqdi/VrY7apgqmzQNpgmYgjO8KnPYNW1i4BS/fQyX7UgRNUODpv1TT0ZEOmeIRjkaj/avhd9lUWf/SfUG+iPY=;20:HkgU5R54j6qUdu9B8ERHL8ViU2v5zbwoBntwJ3HZTpR0G19L04zQ2I/R/MruDM9Xp4UCxFJ92QyRLz93e+gCToc/ckLzxbDSGn1AlFb8oIrH9PFUUAcKUgHcm8o1uqzn1wgfR6xTqZjUZAtTeNhUkyFYpxrIChC3SVlF7w/R6+39KTKz6iB0CWskhvxAwPJvEWMp47JtYJ6tMXjia2Gia44UPS34NUZaHleSZQ6u0RQxQYA14A7GPl2qwurFFg5M X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Mar 2016 05:13:17.9694 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLUPR12MB0433 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, On 03/18/2016 03:27 AM, Radim Krčmář wrote: > 2016-03-18 02:44+0700, Suravee Suthikulpanit: >> On 3/10/16 03:55, Radim Krčmář wrote: >>> 2016-03-04 14:46-0600, Suravee Suthikulpanit: >>>>> From: Suravee Suthikulpanit >>>>> >>>>> Introduce VMEXIT handlers, avic_incp_ipi_interception() and >>>>> avic_noaccel_interception(). >>>>> >>>>> Signed-off-by: Suravee Suthikulpanit >>>>> --- >>>>> diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c >>>>> @@ -3690,6 +3690,264 @@ static int mwait_interception(struct vcpu_svm *svm) >>>>> + case AVIC_INCMP_IPI_ERR_TARGET_NOT_RUN: { >>>>> + kvm_for_each_vcpu(i, vcpu, kvm) { >>>>> + if (!kvm_apic_match_dest(vcpu, apic, >>>>> + icrl & APIC_SHORT_MASK, >>>>> + GET_APIC_DEST_FIELD(icrh), >>>>> + icrl & APIC_DEST_MASK)) >>>>> + continue; >>>>> + >>>>> + kvm_vcpu_kick(vcpu); >>> KVM shouldn't kick VCPUs that are running. (Imagine a broadcast when >>> most VCPUs are in guest mode.) >> >> So, besides checking if the vcpu match the destination, I will add the check >> to see if the is_running bit is set before calling kvm_vcpu_kick() > > That will do. > >>> I think a new helper might be useful here: we only want to wake up from >>> wait queue, but never force VCPU out of guest mode ... kvm_vcpu_kick() >>> does both. >> >> If I only kick non-running vcpu, do I still need this new helper function? > > I would prefer it. It's a minor performance optimization (non-running > VCPUs aren't in guest mode) and makes our intent clear. Please use > include the following patch and use kvm_vcpu_wake_up instead. > > ---8<--- > AVIC has a use for kvm_vcpu_wake_up. > > Signed-off-by: Radim Krčmář > --- > include/linux/kvm_host.h | 1 + > virt/kvm/kvm_main.c | 19 +++++++++++++------ > 2 files changed, 14 insertions(+), 6 deletions(-) > > diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h > index 861f690aa791..7b269626a3b3 100644 > --- a/include/linux/kvm_host.h > +++ b/include/linux/kvm_host.h > @@ -650,6 +650,7 @@ void kvm_vcpu_mark_page_dirty(struct kvm_vcpu *vcpu, gfn_t gfn); > void kvm_vcpu_block(struct kvm_vcpu *vcpu); > void kvm_arch_vcpu_blocking(struct kvm_vcpu *vcpu); > void kvm_arch_vcpu_unblocking(struct kvm_vcpu *vcpu); > +void kvm_vcpu_wake_up(struct kvm_vcpu *vcpu); > void kvm_vcpu_kick(struct kvm_vcpu *vcpu); > int kvm_vcpu_yield_to(struct kvm_vcpu *target); > void kvm_vcpu_on_spin(struct kvm_vcpu *vcpu); > diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c > index 1eae05236347..c39c54afdb74 100644 > --- a/virt/kvm/kvm_main.c > +++ b/virt/kvm/kvm_main.c > @@ -2054,13 +2054,8 @@ out: > EXPORT_SYMBOL_GPL(kvm_vcpu_block); > > #ifndef CONFIG_S390 > -/* > - * Kick a sleeping VCPU, or a guest VCPU in guest mode, into host kernel mode. > - */ > -void kvm_vcpu_kick(struct kvm_vcpu *vcpu) > +void kvm_vcpu_wake_up(struct kvm_vcpu *vcpu) > { > - int me; > - int cpu = vcpu->cpu; > wait_queue_head_t *wqp; > > wqp = kvm_arch_vcpu_wq(vcpu); > @@ -2068,6 +2063,18 @@ void kvm_vcpu_kick(struct kvm_vcpu *vcpu) > wake_up_interruptible(wqp); > ++vcpu->stat.halt_wakeup; > } > +} > +EXPORT_SYMBOL_GPL(kvm_vcpu_wake_up); > + > +/* > + * Kick a sleeping VCPU, or a guest VCPU in guest mode, into host kernel mode. > + */ > +void kvm_vcpu_kick(struct kvm_vcpu *vcpu) > +{ > + int me; > + int cpu = vcpu->cpu; > + > + kvm_vcpu_wake_up(vcpu); > > me = get_cpu(); > if (cpu != me && (unsigned)cpu < nr_cpu_ids && cpu_online(cpu)) > Sure, I'll include this in my V3. Thanks, Suravee