Received: by 2002:a05:7412:e794:b0:fa:551:50a7 with SMTP id o20csp2170467rdd; Fri, 12 Jan 2024 01:12:03 -0800 (PST) X-Google-Smtp-Source: AGHT+IGibzkkKWVZWaR/5vKoxZzPc8OIQNDeVBQkT0xN287rneK9Jptq2xCleC+iEealbUIuifzP X-Received: by 2002:a17:907:c306:b0:a2c:babf:33e with SMTP id tl6-20020a170907c30600b00a2cbabf033emr616923ejc.15.1705050723671; Fri, 12 Jan 2024 01:12:03 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1705050723; cv=none; d=google.com; s=arc-20160816; b=N+L5ynrjhFxvtflKvdkpxi1Ty8peJkMuf3Nj5SC8jtSNuBSitbhtMm3DAOQowM5tuk jCLLkNp6ETXGFoaookKoBtWv35zn6Za8BRi0fHS5aVqAhOLyLBqZ51QS8Eqj3ySZ4YPx 6f6foeZZgSOnxlIG3QtJTMRN3jlT9XP3MjFl81NFbsYFTX98EEcbr5wT3pydElaqhmTi tVkfjNgDPMPYdgjsjYS0i0VfkDuWeC3+zqIweYwT7Xb9rYhzpFQO129YlYBNyhTNKTkg XRW7Y8xFKGLm0nvP9/n8hwZkPNPLHi62lSGy7Oh/TSd/kn/D4U7xhgwDuJewaS2ZU4lM Lqrg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:message-id:date:subject:cc:to :from:dkim-signature; bh=qMuJxodUd9VV3Qxl91WTHBtCJuBuWwNcEvUDQ+YaOzU=; fh=YEDxjqjBZRx3YTvBO7AmWLWQAwMroTvSvvbq768g1jQ=; b=hnQtQUVR23LDBZ6YQV02lNk1AC8WS49/xxolujuMzBAfSrJbuErCoayPy0TsiQgmDd rGUoB5aSpUs6JR16A7naHS5ssT5tkcxio4PCYp/HzT+JmUaaDiKcEmwes3jGcjOQ6pXy QPc4cgjm6RWMvoSm/HR52R0+yrNLZa/vROzvqDYx6zsGz6fNa8dINpztTBOVxfIUtocD 5MDqoEl8IwpHLhpOoE33cUMIrlXCcKy6XJcfRBgLJOgY2eXyaWOuz2fnru7dQ928Pp/j k4vWlo0lBnGhmnLz5rzCpeh+itSsTivhIC+cbb3TI7PkFPsbNujitwMylOhvjAIpUyyf UOHQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=Jhr2AQNI; spf=pass (google.com: domain of linux-kernel+bounces-24448-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-24448-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [2604:1380:4601:e00::3]) by mx.google.com with ESMTPS id c15-20020a170906694f00b00a26d564a660si1204331ejs.196.2024.01.12.01.12.03 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Jan 2024 01:12:03 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-24448-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) client-ip=2604:1380:4601:e00::3; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=Jhr2AQNI; spf=pass (google.com: domain of linux-kernel+bounces-24448-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-24448-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id 671411F248F8 for ; Fri, 12 Jan 2024 09:12:03 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 7B5D755C0B; Fri, 12 Jan 2024 09:11:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Jhr2AQNI" Received: from mail-pl1-f177.google.com (mail-pl1-f177.google.com [209.85.214.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 74CBD53E23; Fri, 12 Jan 2024 09:11:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-pl1-f177.google.com with SMTP id d9443c01a7336-1d542701796so34974145ad.1; Fri, 12 Jan 2024 01:11:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1705050708; x=1705655508; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=qMuJxodUd9VV3Qxl91WTHBtCJuBuWwNcEvUDQ+YaOzU=; b=Jhr2AQNIP+nM5qzASgypn9itQ6hU+1SBYA1QjzFkFA0I/ds8ey2MIPyiTN1YY61clQ kvUZyYDUcXgow0I6TBbZfAOA1hJVYn2jU34x0hHWOY5nxmuLd3J8lfU+FDKBSa7iwRzl Yfnf89eiI/wGr3hsJ7GbtrN9qkd7E3qKCjmN9rIBbNpostnTN3/7gFuOSPDKCsNLjEpk hLfgQokmr4CzTNeq3ORvL0eT6Ub+j5szbd6E/8/sb3PjrvuWlB/aIkeQOH6+8y3aaMnf xgqDMtB6GThIrHMdOrg5ADOqlWKRQcRVCzSsMCKudlT/GdJPsEL5pSc4Ef7yneT3Y2ac XFiw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705050708; x=1705655508; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=qMuJxodUd9VV3Qxl91WTHBtCJuBuWwNcEvUDQ+YaOzU=; b=WpSD2y6rKLK4/SIwV8cgQJ0v8dv59Bet2D+n2Qa9X7qmfSaW+gpFj3KdW51CCfjRAT FpLgWMdxzEHB868ZLkXSKjnXyq5dc7YdvEHTg6SPC8wSPtvEpiAAyGIWzNa/UoLDMOTm Y19HfG6fLT9yON1PZaRFeHPXcSvdF8g4qImNIKK+wnuGtzvRz4WlFdTwpH35IHNFWj6v 4wXG25aiBYZiF/Al3+uVr+b8+EoWWuprVzWOCJO3jUr475THFz24UxXQDvu2ZctRAGYJ vgGGhrlOoHiHahEhwxo0WjKL4/bJiIMXbroVDo8MLYA0dzd735iAP37xsBOMatT8du1R VdTA== X-Gm-Message-State: AOJu0YyMAxjfKyPnOlLigJKwPRFDxoCWvXVJyRAyA7kS2HSOawWMybj4 tJDXy3S6/Jz6QYOOQoFMm44= X-Received: by 2002:a17:903:298f:b0:1d4:1ee8:869d with SMTP id lm15-20020a170903298f00b001d41ee8869dmr634978plb.37.1705050707646; Fri, 12 Jan 2024 01:11:47 -0800 (PST) Received: from localhost.localdomain ([43.132.141.8]) by smtp.gmail.com with ESMTPSA id li4-20020a170903294400b001d59f73a0b5sm1416918plb.75.2024.01.12.01.11.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Jan 2024 01:11:47 -0800 (PST) From: Yi Wang X-Google-Original-From: Yi Wang To: seanjc@google.com, pbonzini@redhat.com, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, kvm@vger.kernel.org, linux-kernel@vger.kernel.org Cc: wanpengli@tencent.com, up2wing@gmail.com, Yi Wang Subject: [PATCH] KVM: irqchip: synchronize srcu only if needed Date: Fri, 12 Jan 2024 17:11:28 +0800 Message-Id: <20240112091128.3868059-1-foxywang@tencent.com> X-Mailer: git-send-email 2.39.3 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: Yi Wang We found that it may cost more than 20 milliseconds very accidentally to enable cap of KVM_CAP_SPLIT_IRQCHIP on a host which has many vms already. The reason is that when vmm(qemu/CloudHypervisor) invokes KVM_CAP_SPLIT_IRQCHIP kvm will call synchronize_srcu_expedited() and might_sleep and kworker of srcu may cost some delay during this period. Since this happens during creating vm, it's no need to synchronize srcu now 'cause everything is not ready(vcpu/irqfd) and none uses irq_srcu now. Signed-off-by: Yi Wang --- arch/x86/kvm/irq_comm.c | 2 +- include/linux/kvm_host.h | 2 ++ virt/kvm/irqchip.c | 3 ++- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/arch/x86/kvm/irq_comm.c b/arch/x86/kvm/irq_comm.c index 16d076a1b91a..37c92b7486c7 100644 --- a/arch/x86/kvm/irq_comm.c +++ b/arch/x86/kvm/irq_comm.c @@ -394,7 +394,7 @@ static const struct kvm_irq_routing_entry empty_routing[] = {}; int kvm_setup_empty_irq_routing(struct kvm *kvm) { - return kvm_set_irq_routing(kvm, empty_routing, 0, 0); + return kvm_set_irq_routing(kvm, empty_routing, 0, NONEED_SYNC_SRCU); } void kvm_arch_post_irq_routing_update(struct kvm *kvm) diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 4944136efaa2..a46370cca355 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -1995,6 +1995,8 @@ static inline int mmu_invalidate_retry_hva(struct kvm *kvm, #define KVM_MAX_IRQ_ROUTES 4096 /* might need extension/rework in the future */ +#define NONEED_SYNC_SRCU (1U << 0) + bool kvm_arch_can_set_irq_routing(struct kvm *kvm); int kvm_set_irq_routing(struct kvm *kvm, const struct kvm_irq_routing_entry *entries, diff --git a/virt/kvm/irqchip.c b/virt/kvm/irqchip.c index 1e567d1f6d3d..cea5c43c1a49 100644 --- a/virt/kvm/irqchip.c +++ b/virt/kvm/irqchip.c @@ -224,7 +224,8 @@ int kvm_set_irq_routing(struct kvm *kvm, kvm_arch_post_irq_routing_update(kvm); - synchronize_srcu_expedited(&kvm->irq_srcu); + if (!(flags & NONEED_SYNC_SRCU)) + synchronize_srcu_expedited(&kvm->irq_srcu); new = old; r = 0; -- 2.39.3