Received: by 2002:ac0:a582:0:0:0:0:0 with SMTP id m2-v6csp3324785imm; Mon, 8 Oct 2018 01:56:54 -0700 (PDT) X-Google-Smtp-Source: ACcGV61ZTsaf+VIyPQhXTd1HZK9A1nerAJuoCBSi3XicGA0wREvfPGunnCyeQ5SgAGH1aTOpP4gm X-Received: by 2002:a62:8c93:: with SMTP id m141-v6mr24723195pfd.16.1538989014010; Mon, 08 Oct 2018 01:56:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1538989013; cv=none; d=google.com; s=arc-20160816; b=ZYFBTudRKww66xz9kT7Ixmk3f/K4WQgPYb+lK6efvDen80iq64jY9ZNRr2chA3O+LE ZErkx/0JUZosOVm6Maux1fFvyx+igh2PZ2g/NWMVcgCNaJTTM1H4smCjNwWzE1ZmomaY lX5Zrx9ZwYzaHZ4BkeSdVCWQxU9K4n2xmLZMnmfKuKE7gm/qcf6tAYKje1fcVTgJYhy3 /m3FGYW+0ERoP0A3/hocHXbsDAJYDwPpGEH37cTADRSDp2uhjvPUaAQn8PkMAJwNLToN DfyNhnFGXVS4BGmNRJCcofnFBAe8fRg3nm39plJedaFhX0o+vF1PrUVVgrrEYdOZCaKm gFDQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from; bh=UyyADnUauNixsgNrFEZ8J8rRoXcQlct8fNzLkpzm1Jk=; b=FmI95LU0LWYYBAxWaH5CZy8KU3TgRNcwruulzXmPyNaoMSF5/kEOl/3OjL0nqmFksu GL2yGemCxDQOzfretpAFwH/KFOfS4qpi6JaqpPkslC+y4D971Q0kZj5iuG3v78gJHA5X guqCOgE0l9kaRtL/lxY3DcDU0T3Mu6xlZlBFKyKNG4N54LsLFaZfIc2oimv62Am07VVq PYNHCR2dC0WN9VacysW7Xakgzer7D1ssAOLKLCWSzQgCGPnMBdm7gLGt8y7w7npH1vhY pJpGo/yVnwGMVwUoCrDMuQfCaMHgGbvKHm97PWkvYdG09YAiepnOfEc0rpn69c/F+P81 9T0w== 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=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a11-v6si20101933pll.185.2018.10.08.01.56.39; Mon, 08 Oct 2018 01:56:53 -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=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727526AbeJHQGP (ORCPT + 99 others); Mon, 8 Oct 2018 12:06:15 -0400 Received: from mga14.intel.com ([192.55.52.115]:6001 "EHLO mga14.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726096AbeJHQFu (ORCPT ); Mon, 8 Oct 2018 12:05:50 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 08 Oct 2018 01:55:11 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.54,356,1534834800"; d="scan'208";a="93194658" Received: from svm-s2600wft.bj.intel.com ([10.240.193.45]) by fmsmga002.fm.intel.com with ESMTP; 08 Oct 2018 01:54:55 -0700 From: Yi Sun To: linux-kernel@vger.kernel.org Cc: x86@kernel.org, tglx@linutronix.de, jgross@suse.com, chao.p.peng@intel.com, chao.gao@intel.com, isaku.yamahata@intel.com, michael.h.kelley@microsoft.com, tianyu.lan@microsoft.com, Yi Sun , "K. Y. Srinivasan" , Haiyang Zhang , Stephen Hemminger , Jonathan Corbet , "Michael Kelley (EOSG)" Subject: [PATCH v4 0/2] Enable PV qspinlock for Hyper-V Date: Mon, 8 Oct 2018 16:29:32 +0800 Message-Id: <1538987374-51217-1-git-send-email-yi.y.sun@linux.intel.com> X-Mailer: git-send-email 1.9.1 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org v3->v4: - To avoid possible hang issue (if hv_qlock_wait can be interrupted, kick may happen before reading HV_X64_MSR_GUEST_IDLE so that hang happens), disable interrupt before READ_ONCE, then restore it after reading HV_X64_MSR_GUEST_IDLE. v2->v3: - use "Hyper-V: " as the message prefix - remove unnecessary header files - remove unnecessary check in 'hv_qlock_wait' - fix compilation error on different platforms v1->v2: - compile hv_spinlock.c only when CONFIG_PARAVIRT_SPINLOCKS enabled - merge v1 patch 2/3 to single patch - remove part of the boilerplate in hv_spinlock.c - declare hv_pvspin as __initdata - remove spin_wait_info and hv_notify_long_spin_wait because SpinWaitInfo is a standalone feature. - add comments for reading HV_X64_MSR_GUEST_IDLE - replace pr_warn to pr_info - use pr_fmt instead of the 'hv:' prefix - register callback function for smp_ops.smp_prepare_boot_cpu to initialize hyper-v spinlock This patch adds the necessary Hyper-V specific code to allow PV qspinlock work on Hyper-V. In wait callback function, read HV_X64_MSR_GUEST_IDLE MSR to trigger the guest's transition to the idle power state which can be exited by an IPI even if IF flag is disabled. In kick callback function, just send platform IPI to make waiting vcpu exit idle state. In vcpu_is_preempted callback function, return false directly because Hyper-V does not provide such interface so far. Cc: "K. Y. Srinivasan" Cc: Haiyang Zhang Cc: Stephen Hemminger Cc: Jonathan Corbet Cc: Thomas Gleixner Cc: Michael Kelley (EOSG) Cc: Juergen Gross Yi Sun (2): X86/Hyper-V: Add Guest IDLE MSR support locking/pvqspinlock, hv: Enable PV qspinlock for Hyper-V Documentation/admin-guide/kernel-parameters.txt | 5 ++ arch/x86/hyperv/Makefile | 4 ++ arch/x86/hyperv/hv_spinlock.c | 85 +++++++++++++++++++++++++ arch/x86/include/asm/hyperv-tlfs.h | 5 ++ arch/x86/include/asm/mshyperv.h | 1 + arch/x86/kernel/cpu/mshyperv.c | 14 ++++ 6 files changed, 114 insertions(+) create mode 100644 arch/x86/hyperv/hv_spinlock.c -- 1.9.1