Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp6779584ybi; Wed, 5 Jun 2019 06:19:33 -0700 (PDT) X-Google-Smtp-Source: APXvYqytSqO6OO2b42z3bt+y4BvBtZmUOthHfJeNC85tk90RSUIKg3B1NJMAhTcCU0Z2UmeR+xrz X-Received: by 2002:a63:8bc7:: with SMTP id j190mr4340874pge.104.1559740773405; Wed, 05 Jun 2019 06:19:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1559740773; cv=none; d=google.com; s=arc-20160816; b=yTN8y1l0lurnlbQPsHKRUlyf8wlL9VgEGAgWdq3CLKtfJNISG1WnkfDi4f/E21H4Kq RvQQaHpZBlM92x2EV0C0sf2poFmabnrcyE43iogWR0z8hjjkUZWx2+Ci14Pf2Wud46FZ FhQu6OGtRbmCVqGLQ4LAc+vn9vJ3fqmDy5LvB9AAYxCXrd+dR5hz8ssxW8kzCG7LTud7 s59WyYZv2o6BWxB36V9zMnya/aifeeUvsC+ajtTVD26eA5qoXHbJTWXRnIuoEknYha9j HPhpwsjkPXXbQ+JhxROqdujfuc4qNRInBL8fXOFJADjTAng1dRSl5vs/0dPzE3F2WLTA uhZw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject; bh=E10Uq/CKstRqDPNkNzGX3FpBcikgtSLsGRUBR28/US4=; b=DiISzg+t2nN98+oWpHp90sIiuyBpJGQR2CA12xmYDwutbmZpPbjZbzppX+e6v1E8BM sfespMKOE12asWxt3l3doJzs9E13AEqjWk1tUoYBdF2Oy+lx5cEVo5YmmB65JsYOdG+s wtvN+iSVvQMREKk4qPVde42SHknxnzIWDCUVNyvbJ4eUmj9n5eXuKlE9vmkkHZOyVXCA Nv66by87JtRj7q1iXxSViyntyZrj3uY6rJkrtNscgj2Qk8zuLJqrauTxqCHbUKHzxsA1 PYTqVAcSu/Nm3u0Go/OWuYsSXMsGAE1qRBMFZMovyDkdtLHfzmO4iF2sn7oVoqKxiU69 WCoQ== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id o3si26082875plk.167.2019.06.05.06.19.15; Wed, 05 Jun 2019 06:19:33 -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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727864AbfFENEI (ORCPT + 99 others); Wed, 5 Jun 2019 09:04:08 -0400 Received: from mail-wr1-f67.google.com ([209.85.221.67]:42460 "EHLO mail-wr1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727744AbfFENEI (ORCPT ); Wed, 5 Jun 2019 09:04:08 -0400 Received: by mail-wr1-f67.google.com with SMTP id x17so1335299wrl.9 for ; Wed, 05 Jun 2019 06:04:07 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=E10Uq/CKstRqDPNkNzGX3FpBcikgtSLsGRUBR28/US4=; b=EqVLve8XhQbtB4zYS4QrGtem6w4tlk7U1e8plkiMVRTiSXknVP2b2aaSfqw1tN3yrV /qU2WOD6m2jBf5LZR8GcNidS71yHpdzFTuzdlVH8i9z6ATgejR50qmUqP9vBPbjiAwF4 ag8mk3uzf2suDQvV1fH72oJ5YO8mjlN9KegckwBOclX00zl+/BADPSZLjO1b7AU8bneK g2B5mvk6xf/K3lg8B58UiWo1mNWdKAi+O3IlVpLk2KVaFeU0Xfswfz5yjES0eiT/Gv2z RmnHhmqgqASXIsLpaBJsq6zr1ZEGWgMwmpvUPhuWom0Ur+vRShza4xAxs1HKzHu9Q3zz gBWA== X-Gm-Message-State: APjAAAWqpz3lpAEJbEY6UmkrWjy4KImzdhc3RBOR9ZNRM6y9kq3vA4sy 8qllfBqBv0lAqVObaubSRg6NXA== X-Received: by 2002:adf:cd8c:: with SMTP id q12mr9193934wrj.103.1559739846327; Wed, 05 Jun 2019 06:04:06 -0700 (PDT) Received: from ?IPv6:2001:b07:6468:f312:657f:501:149f:5617? ([2001:b07:6468:f312:657f:501:149f:5617]) by smtp.gmail.com with ESMTPSA id d10sm24821024wrh.91.2019.06.05.06.04.05 (version=TLS1_3 cipher=AEAD-AES128-GCM-SHA256 bits=128/128); Wed, 05 Jun 2019 06:04:05 -0700 (PDT) Subject: Re: [PATCH 1/3] KVM: LAPIC: Make lapic timer unpinned when timer is injected by posted-interrupt To: Wanpeng Li , linux-kernel@vger.kernel.org, kvm@vger.kernel.org Cc: =?UTF-8?B?UmFkaW0gS3LEjW3DocWZ?= References: <1559729351-20244-1-git-send-email-wanpengli@tencent.com> <1559729351-20244-2-git-send-email-wanpengli@tencent.com> From: Paolo Bonzini Message-ID: <505fc388-2223-146f-ae8a-824169078a17@redhat.com> Date: Wed, 5 Jun 2019 15:04:04 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 MIME-Version: 1.0 In-Reply-To: <1559729351-20244-2-git-send-email-wanpengli@tencent.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 05/06/19 12:09, Wanpeng Li wrote: > +static inline bool posted_interrupt_inject_timer(struct kvm_vcpu *vcpu) > +{ > + return (kvm_x86_ops->pi_inject_timer_enabled(vcpu) && > + kvm_mwait_in_guest(vcpu->kvm)); > +} > + Here you need to check kvm_halt_in_guest, not kvm_mwait_in_guest, because you need to go through kvm_apic_expired if the guest needs to be woken up from kvm_vcpu_block. There is a case when you get to kvm_vcpu_block with kvm_halt_in_guest, which is when the guest disables asynchronous page faults. Currently, timer interrupts are delivered while apf.halted = true, with this change they wouldn't. I would just disable KVM_REQ_APF_HALT in kvm_can_do_async_pf if kvm_halt_in_guest is true, let me send a patch for that later. When you do this, I think you don't need the kvm_x86_ops->pi_inject_timer_enabled check at all, because if we know that the vCPU cannot be asleep in kvm_vcpu_block, then we can inject the timer interrupt immediately with __apic_accept_irq (if APICv is disabled, it will set IRR and do kvm_make_request + kvm_vcpu_kick). You can keep the module parameter, mostly for debugging reasons, but please move it from kvm-intel to kvm, and add something like diff --git a/kernel/sched/isolation.c b/kernel/sched/isolation.c index 123ea07a3f3b..1cc7973c382e 100644 --- a/kernel/sched/isolation.c +++ b/kernel/sched/isolation.c @@ -14,6 +14,11 @@ static cpumask_var_t housekeeping_mask; static unsigned int housekeeping_flags; +bool housekeeping_enabled(enum hk_flags flags) +{ + return !!(housekeeping_flags & flags); +} + int housekeeping_any_cpu(enum hk_flags flags) { if (static_branch_unlikely(&housekeeping_overridden)) so that the default for the module parameter can be housekeeping_enabled(HK_FLAG_TIMER). Thanks, Paolo