Received: by 2002:a25:ad19:0:0:0:0:0 with SMTP id y25csp11772963ybi; Thu, 25 Jul 2019 23:16:23 -0700 (PDT) X-Google-Smtp-Source: APXvYqwtSZOlxICfxJYhZTYXsmHJ7HnU9Q3hrXBIUWsF2fMFPheA/OiYyJ0Jni/N9Di8ELpHLtXz X-Received: by 2002:a62:5c01:: with SMTP id q1mr20697692pfb.53.1564121783364; Thu, 25 Jul 2019 23:16:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1564121783; cv=none; d=google.com; s=arc-20160816; b=mGO8cv9MPMe3yMv49/VtYcmK4wQ5CsysQYpvwJEbnFwZsuVd7ZX65oloSC+a+1Pchl V6pmENljfW6nlm8bskg/Lm1QB55w1drxQR8uobSvfDcK6yHty5Lu5XPkXxx+Ad/5k92h 9J9A1eeT5AmzHqjkSmdRkFunOysG/F+OjPYP4LPjj2cPqaHnRSlJn5qYStPHIbkAwYr5 cxd/OIt48DsKdAqGmaT6Qq4/tWn4v4i0CypmPclpFLppOMLy8q+21h8kC0M/0Z38SzZG s7hJY3WYQDHNSTK4IY+yQmuwXIrEGp708yc6khY2sVZV72J5jLKlD140QyrHreMTfMMq aYEA== 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:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=2eXHJpIRWye4bPwuDirO2Zr+vPpMtK87LAgbJuPvgPM=; b=X0edTEzofG2A5iJKxPjLv7/qLs++g2wTX1toil7tzddJPUCOEyF8EchsJiTDgGVwfu quD/C9C5eULKFXun+q7yyh0HXaYV+jbLuCSzw/BbBz4nrEveH8hDT3pW/v+jZxaY6xIx bJmQayWUg6KL8SmzWdfdXs8d9mW6ybRUXGR1vOylgpQxWwt3Rt2lmoJad4cyv5E4NLqb J0p1/zGOBYDppe/mPJGUg2JvFMKYMB0yAJYVF0YHUruqFhJAKpgqTIR8k5LRHldV6WcJ ke2JbswKhxA7g3PjpyG95ySds6DQLoaOj4djc6et0igdlf3WJx4XESJa3vY530BfK8dr YL6Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=cpes4jrH; 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 a13si18831731pgw.81.2019.07.25.23.16.07; Thu, 25 Jul 2019 23:16:23 -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=cpes4jrH; 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 S1726005AbfGZGPd (ORCPT + 99 others); Fri, 26 Jul 2019 02:15:33 -0400 Received: from mail-pg1-f195.google.com ([209.85.215.195]:42909 "EHLO mail-pg1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725836AbfGZGPc (ORCPT ); Fri, 26 Jul 2019 02:15:32 -0400 Received: by mail-pg1-f195.google.com with SMTP id t132so24231270pgb.9; Thu, 25 Jul 2019 23:15:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=2eXHJpIRWye4bPwuDirO2Zr+vPpMtK87LAgbJuPvgPM=; b=cpes4jrHl6j/M0cf8Bec137LgnO2EY6+o1K0CEzzSHFjg3LzQ68/I5TU45zizvQcQR nG2BbuODPbsJkOogD74DbA7LbVjcLqTnGfuk+pMdaQ9EFf28/+4JWgbd7LU222xeJIW4 t/x5/inPW0qQ/FPmCJAgD2d276yrZScRDI3llv2TCJ4M8NHuWt4eiWg0wSU2Lifr8Bwd ZrEgS+UdmB7dNoIwnq01YU5/S07u+UP4FruzW7QCt0RCVu2/qL4RFwKjfuS3/aq98TyF A3gtE95/odxbuk7W12YWifHMTa1fJ3BwOob3h2ERVJ3P2X1CfOLvdxa7sfQ3+LfqaKgB 5vnw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=2eXHJpIRWye4bPwuDirO2Zr+vPpMtK87LAgbJuPvgPM=; b=McLvadzRj2bpRGaf3aFzctJ/3egLq8OngHowMdfLrk+qkAu3hip4Sy3XqwB9QlpByN t4ReuL2Sx5fKR3W60ij+NE0JDvkRNgndv/9tEzY9WYDOeu62hRLcBebCibzZqf+5sHsE Wn/xe6bKlKenMo5hE4tHqXvAwSpI1yzKeiwA+kWP8x/d4ahHRiLRZ4kOPNY5JPpb2rI/ T7Aitk7q5KbyImFVlgD1a4rCohxIyzcc9fdtTwOmN2cWuswjZ2S9fNOvMOWrjm6JsV7P Vyy6T8WiD4yMig+g9q/TAgf20D8oCAU1lnRk87Rnd6usPaRVM/sFrmLUkanJUfvXJdgu WjOA== X-Gm-Message-State: APjAAAVIZlwePrLWlwvT/VMjh3hcLb9ms60NExRSEjaQShqlS5dBYl11 SoE14L1NRV1hgfzW7KrqCZa5n0dQcoo= X-Received: by 2002:a62:1a8e:: with SMTP id a136mr20204870pfa.22.1564121732080; Thu, 25 Jul 2019 23:15:32 -0700 (PDT) Received: from localhost.localdomain ([203.205.141.123]) by smtp.googlemail.com with ESMTPSA id e189sm26690085pgc.15.2019.07.25.23.15.29 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 25 Jul 2019 23:15:31 -0700 (PDT) From: Wanpeng Li X-Google-Original-From: Wanpeng Li To: linux-kernel@vger.kernel.org, kvm@vger.kernel.org Cc: Paolo Bonzini , =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= , Thomas Gleixner , Sean Christopherson , Nadav Amit Subject: [PATCH RESEND] KVM: X86: Use IPI shorthands in kvm guest when support Date: Fri, 26 Jul 2019 14:15:27 +0800 Message-Id: <1564121727-30020-1-git-send-email-wanpengli@tencent.com> X-Mailer: git-send-email 2.7.4 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Wanpeng Li IPI shorthand is supported now by linux apic/x2apic driver, switch to IPI shorthand for all excluding self and all including self destination shorthand in kvm guest, to avoid splitting the target mask into serveral PV IPI hypercalls. Cc: Thomas Gleixner Cc: Paolo Bonzini Cc: Radim Krčmář Cc: Sean Christopherson Cc: Nadav Amit Signed-off-by: Wanpeng Li --- Note: rebase against tip tree's x86/apic branch arch/x86/kernel/kvm.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c index b7f34fe..87b73b8 100644 --- a/arch/x86/kernel/kvm.c +++ b/arch/x86/kernel/kvm.c @@ -34,7 +34,9 @@ #include #include +static struct apic orig_apic; static int kvmapf = 1; +DECLARE_STATIC_KEY_FALSE(apic_use_ipi_shorthand); static int __init parse_no_kvmapf(char *arg) { @@ -507,12 +509,18 @@ static void kvm_send_ipi_mask_allbutself(const struct cpumask *mask, int vector) static void kvm_send_ipi_allbutself(int vector) { - kvm_send_ipi_mask_allbutself(cpu_online_mask, vector); + if (static_branch_likely(&apic_use_ipi_shorthand)) + orig_apic.send_IPI_allbutself(vector); + else + kvm_send_ipi_mask_allbutself(cpu_online_mask, vector); } static void kvm_send_ipi_all(int vector) { - __send_ipi_mask(cpu_online_mask, vector); + if (static_branch_likely(&apic_use_ipi_shorthand)) + orig_apic.send_IPI_all(vector); + else + __send_ipi_mask(cpu_online_mask, vector); } /* @@ -520,6 +528,8 @@ static void kvm_send_ipi_all(int vector) */ static void kvm_setup_pv_ipi(void) { + orig_apic = *apic; + apic->send_IPI_mask = kvm_send_ipi_mask; apic->send_IPI_mask_allbutself = kvm_send_ipi_mask_allbutself; apic->send_IPI_allbutself = kvm_send_ipi_allbutself; -- 2.7.4