Received: by 2002:a25:ad19:0:0:0:0:0 with SMTP id y25csp11767667ybi; Thu, 25 Jul 2019 23:11:21 -0700 (PDT) X-Google-Smtp-Source: APXvYqx9KAq1CezINycVJNZWVgbnsXtsEm0tA9ITMquJajNpnIXmeerTjwmtlPFf1vUQ2E5TkMIc X-Received: by 2002:a62:be0c:: with SMTP id l12mr20633906pff.224.1564121481287; Thu, 25 Jul 2019 23:11:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1564121481; cv=none; d=google.com; s=arc-20160816; b=YC5nj9sIeO4n0hipGn6xXe8MuSLMI3uHnpW+7t6xUeQ/pEm8MTtCNq1RoEM/5XWrrW 9397Ne5fMK6kcpaDCBbW9MvuW4vfeQhgh1JPdT1oc+1a9dI6kAnTjp2CsWb6ADYDAn05 pf5S9b0yemGTEOjwHARpGq9USUJI2DI8MEgLr3TaKA5/hBpIKfy77lSBGDHXXk23yCGW D17HDDJHicqrq90oyauNR86TWyKo+PMJti2HBorgU9acPmeST6X51tI0mh9I1eP0jW8l iy6dvXyj/73mlZB583f7rXOgr/Npty/LEEsaJ2jnzHoRXWnQF+g0XApz0bAKUpk/T4vM dQSg== 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=dsM74ng/+OcAlXBDq3JGUl8fa3U6dOaT9r2XMZw1hC4=; b=yVwpRqf1dqJhNwumuF5Jqk9EjXiGx/DtgQKO76i9/PKjI98ENO3TT7I9z6Ko6Rjxdn sxXIVmmFZWrcNzv8FTMWtZnZS42BRfK7DpYW9u8amLGXlodt7l1lLg/llZTsDYYXVuRG p96MYIaiYC8rQgalHKVKfVukfr9TYDeHkZLpZnT6QKjCs2cOGVthy/4J1zYg9NnIMS3T q1eJsS894GK1kYYUZZbwcTALGcqnHKUo1Pwaf20Mcr0cY0MK9Y8cfIHtp2kuXC1h3nhT 5SFpXRC8shtueCztxcBp8V0upQ7mUryVjf5ivwVhWyEBEuwPDIk1KwaGiAu7mrrjzamb 8WwQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=atboVViF; 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 o12si18490348pgl.448.2019.07.25.23.11.05; Thu, 25 Jul 2019 23:11:21 -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=atboVViF; 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 S1726065AbfGZGKZ (ORCPT + 99 others); Fri, 26 Jul 2019 02:10:25 -0400 Received: from mail-pg1-f194.google.com ([209.85.215.194]:45674 "EHLO mail-pg1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725842AbfGZGKZ (ORCPT ); Fri, 26 Jul 2019 02:10:25 -0400 Received: by mail-pg1-f194.google.com with SMTP id o13so24219772pgp.12; Thu, 25 Jul 2019 23:10:24 -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=dsM74ng/+OcAlXBDq3JGUl8fa3U6dOaT9r2XMZw1hC4=; b=atboVViFYZD+wIpeQVXz92sQVk1Nm/NYZtyb6YL/YVmJOYV94UfvjZpYbm2TQ1cja6 TOdLvh2i9mQdnaaTHy3xQzw9L7eC4dcRLlWhp1ofwHkcxN25HIxTvqYxFS3un342a14D y/F3r/ljq0yKTXGI/17G1Ms8cxCC9K6E5uHt6x04ujs1RmLqrR95kNTa+PXKBRkv2eix 9FewEza5ivvSqYPFXi9hh1E0OQnbwzTubcH/pWcRj/N5bkV9gMHEOMxj3NUSHW6mWwY/ nj33m3l8L1E5jqUcLmNTi8s6CIeU/2kSG5lwezvWVyOEjFgYvm3wlOzKkEbQTMZ0B2iy UbMg== 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=dsM74ng/+OcAlXBDq3JGUl8fa3U6dOaT9r2XMZw1hC4=; b=bSIkwFE+HLbhr4dFZDbEAZTB/PVN+itUTq0iWsYvTSJ0K4pzg6MzVDrRGJqC6Jc+4V B4NsetpHy5ANPA8MEMIeLmjhZLvVbJQPygjQ5CsQ744rgft9dLHu2qzgO5U5YqGtNlNq 8c/XsRrXnu90RNw0ZQNFGogrJHlcfJd4VwrS5B5gqDXGH/1yu7j+5sWXVq8tOQ+as2BP fCsZU7Rosj50O016Ypl03uKtp0vow5TvZimfCuP41Wt39vA7JdjWxQNY/bBtlyffmslE 98n/S+KUwh1EI4jY9SSHUzRbDrg31tGsCU9jogAkbGLzVEociexxsZ4rqev1mcIyh0fK b8ng== X-Gm-Message-State: APjAAAVlrPBMYQmez6Vc5nKbgVOOgFOO7yA+BVvMd6/lGm6fEPISniLx CPxQzQSqp2r9sB6L4HGugZ6nlU38FQU= X-Received: by 2002:a63:5920:: with SMTP id n32mr86699340pgb.352.1564121424041; Thu, 25 Jul 2019 23:10:24 -0700 (PDT) Received: from localhost.localdomain ([203.205.141.123]) by smtp.googlemail.com with ESMTPSA id m31sm58352070pjb.6.2019.07.25.23.10.21 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 25 Jul 2019 23:10:23 -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] KVM: X86: Use IPI shorthands in kvm guest when support Date: Fri, 26 Jul 2019 14:10:17 +0800 Message-Id: <1564121417-29375-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_allbutself(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