From patchwork Thu May 11 06:04:08 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chao Gao X-Patchwork-Id: 9720989 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 50BA9601E7 for ; Thu, 11 May 2017 06:05:37 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4A6A928637 for ; Thu, 11 May 2017 06:05:37 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 3F1EE28667; Thu, 11 May 2017 06:05:37 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id CFA362866D for ; Thu, 11 May 2017 06:05:35 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1d8hBb-0007g5-6I; Thu, 11 May 2017 06:02:51 +0000 Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1d8hBa-0007fe-4t for xen-devel@lists.xen.org; Thu, 11 May 2017 06:02:50 +0000 Received: from [85.158.143.35] by server-11.bemta-6.messagelabs.com id BA/5B-03587-98EF3195; Thu, 11 May 2017 06:02:49 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrJLMWRWlGSWpSXmKPExsVywNwkQrfzn3C kwfx3jBZLPi5mcWD0OLr7N1MAYxRrZl5SfkUCa8b2L92sBbM1Ks68X8DawPhHvouRi0NIYDqj xIfDM5i6GDk5JAR4JY4sm8EKYftL9D/ezAxiCwmUS/TdXs8GYrMJKEtc/NoLZosISEtc+3yZE WQQs8BmJokDC26zdzFycAgLWEr034kCqWERUJV4vXQXO4jNK+AksXbFfDaI+QoSUx6+B5vPKe AssXntE1aIXU4SVy62sE5g5F3AyLCKUb04tagstUjXWC+pKDM9oyQ3MTNH19DATC83tbg4MT0 1JzGpWC85P3cTIzAYGIBgB2PHP6dDjJIcTEqivO1/hCOF+JLyUyozEosz4otKc1KLDzHKcHAo SfD+AMkJFqWmp1akZeYAwxImLcHBoyTCuw0kzVtckJhbnJkOkTrFqMvxbumH90xCLHn5ealS4 rxmf4GKBECKMkrz4EbAYuQSo6yUMC8j0FFCPAWpRbmZJajyrxjFORiVhHm/g6ziycwrgdv0Cu gIJqAj+iGOKElESEk1MHIqzX8muSXZ+Nne3c+YNdUv/98oxrLuoJukxurk05q6q9pOGx3+eP3 QY2eJGaJSU+fGuPu69D/ocG/w4T/Jyt5QnHDv/GYOgX8Tj1iIrA0QiU+/1OsQtHSpxoPFli8L vRjEfl5O9ngWxtB3L0ePoUZV3qFufjjjyvOrU+LMbKe95fMKDsyJUmIpzkg01GIuKk4EAEEkC WWMAgAA X-Env-Sender: chao.gao@intel.com X-Msg-Ref: server-9.tower-21.messagelabs.com!1494482564!67706057!2 X-Originating-IP: [192.55.52.88] X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: VHJ1c3RlZCBJUDogMTkyLjU1LjUyLjg4ID0+IDM3NDcyNQ==\n X-StarScan-Received: X-StarScan-Version: 9.4.12; banners=-,-,- X-VirusChecked: Checked Received: (qmail 799 invoked from network); 11 May 2017 06:02:48 -0000 Received: from mga01.intel.com (HELO mga01.intel.com) (192.55.52.88) by server-9.tower-21.messagelabs.com with DHE-RSA-AES256-GCM-SHA384 encrypted SMTP; 11 May 2017 06:02:48 -0000 Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 10 May 2017 23:02:46 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.38,322,1491289200"; d="scan'208";a="259765495" Received: from skl-2s3.sh.intel.com ([10.239.48.51]) by fmsmga004.fm.intel.com with ESMTP; 10 May 2017 23:02:44 -0700 From: Chao Gao To: xen-devel@lists.xen.org Date: Thu, 11 May 2017 14:04:08 +0800 Message-Id: <1494482652-42356-2-git-send-email-chao.gao@intel.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1494482652-42356-1-git-send-email-chao.gao@intel.com> References: <1494482652-42356-1-git-send-email-chao.gao@intel.com> Cc: Kevin Tian , Wei Liu , Jan Beulich , George Dunlap , Andrew Cooper , Ian Jackson , Jun Nakajima , Chao Gao Subject: [Xen-devel] [PATCH v2 1/5] xentrace: add TRC_HVM_PI_LIST_ADD X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" X-Virus-Scanned: ClamAV using ClamSMTP This patch adds TRC_HVM_PI_LIST_ADD to track adding one entry to the per-pcpu blocking list. Also introduce a 'counter' to track the number of entries in the list. Signed-off-by: Chao Gao --- tools/xentrace/formats | 1 + xen/arch/x86/hvm/vmx/vmx.c | 12 +++++++++++- xen/include/asm-x86/hvm/trace.h | 1 + xen/include/public/trace.h | 1 + 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/tools/xentrace/formats b/tools/xentrace/formats index 8b31780..999ca8c 100644 --- a/tools/xentrace/formats +++ b/tools/xentrace/formats @@ -125,6 +125,7 @@ 0x00082020 CPU%(cpu)d %(tsc)d (+%(reltsc)8d) INTR_WINDOW [ value = 0x%(1)08x ] 0x00082021 CPU%(cpu)d %(tsc)d (+%(reltsc)8d) NPF [ gpa = 0x%(2)08x%(1)08x mfn = 0x%(4)08x%(3)08x qual = 0x%(5)04x p2mt = 0x%(6)04x ] 0x00082023 CPU%(cpu)d %(tsc)d (+%(reltsc)8d) TRAP [ vector = 0x%(1)02x ] +0x00082026 CPU%(cpu)d %(tsc)d (+%(reltsc)8d) PI_LIST_ADD [ domid = 0x%(1)04x vcpu = 0x%(2)04x, pcpu = 0x%(3)04x, #entry = 0x%(4)04x ] 0x0010f001 CPU%(cpu)d %(tsc)d (+%(reltsc)8d) page_grant_map [ domid = %(1)d ] 0x0010f002 CPU%(cpu)d %(tsc)d (+%(reltsc)8d) page_grant_unmap [ domid = %(1)d ] diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c index c8ef18a..efff6cd 100644 --- a/xen/arch/x86/hvm/vmx/vmx.c +++ b/xen/arch/x86/hvm/vmx/vmx.c @@ -82,6 +82,7 @@ static int vmx_vmfunc_intercept(struct cpu_user_regs *regs); struct vmx_pi_blocking_vcpu { struct list_head list; spinlock_t lock; + atomic_t counter; }; /* @@ -119,6 +120,9 @@ static void vmx_vcpu_block(struct vcpu *v) */ ASSERT(old_lock == NULL); + atomic_inc(&per_cpu(vmx_pi_blocking, v->processor).counter); + HVMTRACE_4D(PI_LIST_ADD, v->domain->domain_id, v->vcpu_id, v->processor, + atomic_read(&per_cpu(vmx_pi_blocking, v->processor).counter)); list_add_tail(&v->arch.hvm_vmx.pi_blocking.list, &per_cpu(vmx_pi_blocking, v->processor).list); spin_unlock_irqrestore(pi_blocking_list_lock, flags); @@ -186,6 +190,8 @@ static void vmx_pi_unblock_vcpu(struct vcpu *v) { ASSERT(v->arch.hvm_vmx.pi_blocking.lock == pi_blocking_list_lock); list_del(&v->arch.hvm_vmx.pi_blocking.list); + atomic_dec(&container_of(pi_blocking_list_lock, + struct vmx_pi_blocking_vcpu, lock)->counter); v->arch.hvm_vmx.pi_blocking.lock = NULL; } @@ -234,6 +240,7 @@ void vmx_pi_desc_fixup(unsigned int cpu) if ( pi_test_on(&vmx->pi_desc) ) { list_del(&vmx->pi_blocking.list); + atomic_dec(&per_cpu(vmx_pi_blocking, cpu).counter); vmx->pi_blocking.lock = NULL; vcpu_unblock(container_of(vmx, struct vcpu, arch.hvm_vmx)); } @@ -258,6 +265,8 @@ void vmx_pi_desc_fixup(unsigned int cpu) list_move(&vmx->pi_blocking.list, &per_cpu(vmx_pi_blocking, new_cpu).list); + atomic_dec(&per_cpu(vmx_pi_blocking, cpu).counter); + atomic_inc(&per_cpu(vmx_pi_blocking, new_cpu).counter); vmx->pi_blocking.lock = new_lock; spin_unlock(new_lock); @@ -2360,7 +2369,7 @@ static void pi_wakeup_interrupt(struct cpu_user_regs *regs) struct arch_vmx_struct *vmx, *tmp; spinlock_t *lock = &per_cpu(vmx_pi_blocking, smp_processor_id()).lock; struct list_head *blocked_vcpus = - &per_cpu(vmx_pi_blocking, smp_processor_id()).list; + &per_cpu(vmx_pi_blocking, smp_processor_id()).list; ack_APIC_irq(); this_cpu(irq_count)++; @@ -2377,6 +2386,7 @@ static void pi_wakeup_interrupt(struct cpu_user_regs *regs) if ( pi_test_on(&vmx->pi_desc) ) { list_del(&vmx->pi_blocking.list); + atomic_dec(&per_cpu(vmx_pi_blocking, smp_processor_id()).counter); ASSERT(vmx->pi_blocking.lock == lock); vmx->pi_blocking.lock = NULL; vcpu_unblock(container_of(vmx, struct vcpu, arch.hvm_vmx)); diff --git a/xen/include/asm-x86/hvm/trace.h b/xen/include/asm-x86/hvm/trace.h index de802a6..b74ffdd 100644 --- a/xen/include/asm-x86/hvm/trace.h +++ b/xen/include/asm-x86/hvm/trace.h @@ -54,6 +54,7 @@ #define DO_TRC_HVM_TRAP DEFAULT_HVM_MISC #define DO_TRC_HVM_TRAP_DEBUG DEFAULT_HVM_MISC #define DO_TRC_HVM_VLAPIC DEFAULT_HVM_MISC +#define DO_TRC_HVM_PI_LIST_ADD DEFAULT_HVM_MISC #define TRC_PAR_LONG(par) ((par)&0xFFFFFFFF),((par)>>32) diff --git a/xen/include/public/trace.h b/xen/include/public/trace.h index 7f2e891..c716d57 100644 --- a/xen/include/public/trace.h +++ b/xen/include/public/trace.h @@ -234,6 +234,7 @@ #define TRC_HVM_TRAP (TRC_HVM_HANDLER + 0x23) #define TRC_HVM_TRAP_DEBUG (TRC_HVM_HANDLER + 0x24) #define TRC_HVM_VLAPIC (TRC_HVM_HANDLER + 0x25) +#define TRC_HVM_PI_LIST_ADD (TRC_HVM_HANDLER + 0x26) #define TRC_HVM_IOPORT_WRITE (TRC_HVM_HANDLER + 0x216) #define TRC_HVM_IOMEM_WRITE (TRC_HVM_HANDLER + 0x217)