From patchwork Tue Mar 21 02:52:49 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yu Zhang X-Patchwork-Id: 9635879 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 E811160327 for ; Tue, 21 Mar 2017 03:14:02 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id DDC7226E97 for ; Tue, 21 Mar 2017 03:14:02 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D29FC2780C; Tue, 21 Mar 2017 03:14:02 +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.1 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_MED,T_DKIM_INVALID 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 4821F26E97 for ; Tue, 21 Mar 2017 03:14:02 +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 1cqAD9-0001q7-Li; Tue, 21 Mar 2017 03:11: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 1cqAD8-0001pj-7b for xen-devel@lists.xen.org; Tue, 21 Mar 2017 03:11:50 +0000 Received: from [193.109.254.147] by server-4.bemta-6.messagelabs.com id 36/AF-25093-5F990D85; Tue, 21 Mar 2017 03:11:49 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmplkeJIrShJLcpLzFFi42Jpa+tw1P0680K EwcpX7BZLPi5mcWD0OLr7N1MAYxRrZl5SfkUCa8a1rUuYCs7yVSxqy2tgvMndxcjFwSJwi0mi /+8fli5GTg4hgWmMEgf+S4PYEgK8EkeWzWCFsP0kXszawg7SICTQzigx8flWsASbgLbEj9W/G UFsEQFpiWufLzOCFDEL9DNKzHvUBFYkLBAq0f35DdAGDqB1qhIr9hiChHkFvCS+HJrKDrFATu Lksclg5ZwC3hJdz4+xg5QLAdU8n107gZFvASPDKkaN4tSistQiXUNDvaSizPSMktzEzBxdQwM zvdzU4uLE9NScxKRiveT83E2MwCBhAIIdjJ+WBRxilORgUhLlrfK9ECHEl5SfUpmRWJwRX1Sa k1p8iFGDg0Ogd83qC4xSLHn5ealKErzNM4DqBItS01Mr0jJzgGEMUyrBwaMkwjsZJM1bXJCYW 5yZDpE6xagoJc6bDJIQAElklObBtcFi5xKjrJQwLyPQUUI8BalFuZklqPKvGMU5GJWEeeeBTO HJzCuBm/4KaDET0OJlN86ALC5JREhJNTDOu+Gy3vgCr1xqulGoLP8mdSnrzF3+6eL1t7xa9iW sdROayv9ftafCvmnXLKeGh8/zlr17axR4L1Wp6s68Ge/Yuq443iiYan29vu6R7pYj2ju60huy r0310Psa8Fhzs4e5KNesZx7cRitn9f1ckhquorfOZ7a3ls65G7Pf8r+p25fj+YTVNF2JpTgj0 VCLuag4EQB8zBb0mAIAAA== X-Env-Sender: yu.c.zhang@linux.intel.com X-Msg-Ref: server-7.tower-27.messagelabs.com!1490065906!88202235!1 X-Originating-IP: [134.134.136.65] X-SpamReason: No, hits=0.0 required=7.0 tests= X-StarScan-Received: X-StarScan-Version: 9.2.3; banners=-,-,- X-VirusChecked: Checked Received: (qmail 58252 invoked from network); 21 Mar 2017 03:11:48 -0000 Received: from mga03.intel.com (HELO mga03.intel.com) (134.134.136.65) by server-7.tower-27.messagelabs.com with DHE-RSA-AES256-GCM-SHA384 encrypted SMTP; 21 Mar 2017 03:11:48 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=intel.com; i=@intel.com; q=dns/txt; s=intel; t=1490065908; x=1521601908; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=AYhiDFannB3QdbtL52ZkTFeN3WRGqcaHo82xvHRI9/g=; b=mY/F+vnKA82/6f3b1SmFon9FSYRTafZlVRE31JB67ZhJObuZ14myx2UW QSvWWjePT14HALDm27ZCj2+42TydRg==; Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 20 Mar 2017 20:11:46 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.36,197,1486454400"; d="scan'208";a="69242941" Received: from zhangyu-optiplex-9020.bj.intel.com ([10.238.135.159]) by orsmga004.jf.intel.com with ESMTP; 20 Mar 2017 20:11:44 -0700 From: Yu Zhang To: xen-devel@lists.xen.org Date: Tue, 21 Mar 2017 10:52:49 +0800 Message-Id: <1490064773-26751-2-git-send-email-yu.c.zhang@linux.intel.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1490064773-26751-1-git-send-email-yu.c.zhang@linux.intel.com> References: <1490064773-26751-1-git-send-email-yu.c.zhang@linux.intel.com> Cc: Andrew Cooper , Paul Durrant , zhiyuan.lv@intel.com, Jan Beulich Subject: [Xen-devel] [PATCH v9 1/5] x86/ioreq server: Release the p2m lock after mmio is handled. 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 Routine hvmemul_do_io() may need to peek the p2m type of a gfn to select the ioreq server. For example, operations on gfns with p2m_ioreq_server type will be delivered to a corresponding ioreq server, and this requires that the p2m type not be switched back to p2m_ram_rw during the emulation process. To avoid this race condition, we delay the release of p2m lock in hvm_hap_nested_page_fault() until mmio is handled. Note: previously in hvm_hap_nested_page_fault(), put_gfn() was moved before the handling of mmio, due to a deadlock risk between the p2m lock and the event lock(in commit 77b8dfe). Later, a per-event channel lock was introduced in commit de6acb7, to send events. So we do not need to worry about the deadlock issue. Signed-off-by: Yu Zhang Reviewed-by: Jan Beulich --- Cc: Paul Durrant Cc: Jan Beulich Cc: Andrew Cooper changes in v4: - According to comments from Jan: remove the redundant "rc = 0" code. --- xen/arch/x86/hvm/hvm.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c index 0282986..bd18d8e 100644 --- a/xen/arch/x86/hvm/hvm.c +++ b/xen/arch/x86/hvm/hvm.c @@ -1815,15 +1815,10 @@ int hvm_hap_nested_page_fault(paddr_t gpa, unsigned long gla, (npfec.write_access && (p2m_is_discard_write(p2mt) || (p2mt == p2m_ioreq_server))) ) { - __put_gfn(p2m, gfn); - if ( ap2m_active ) - __put_gfn(hostp2m, gfn); - - rc = 0; if ( !handle_mmio_with_translation(gla, gpa >> PAGE_SHIFT, npfec) ) hvm_inject_hw_exception(TRAP_gp_fault, 0); rc = 1; - goto out; + goto out_put_gfn; } /* Check if the page has been paged out */