From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <stephen@networkplumber.org>
Received: from mail-ig0-f169.google.com (mail-ig0-f169.google.com
 [209.85.213.169]) by dpdk.org (Postfix) with ESMTP id 919D3B568
 for <dev@dpdk.org>; Sun, 15 Feb 2015 16:25:01 +0100 (CET)
Received: by mail-ig0-f169.google.com with SMTP id hl2so27688925igb.0
 for <dev@dpdk.org>; Sun, 15 Feb 2015 07:25:01 -0800 (PST)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20130820;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references;
 bh=4oo8OZJY9byd2u90SVHPg2psBtqOQOs6YPh+lcnpx7c=;
 b=hIql2nWu1af0IVLZi97i4FSwUNE5Heb+DB+lJ/+8DhG03rT/6lVZLeUkk0KHswChXn
 xDg+bY6aD6cMvY3lcTm4IsjGJNI3nDkpG82ZJn5W485urkFtAOnazvdrwe5hKou48Tu2
 QM54kxSQmpPLCsskhhbaUE0mCSxEN3lF0t5AhbmiaBq6tyl7V+szy0p3L1hdp6UClLWj
 tUgC0bn5CNui5IIq7kcSD5RawOuN66in2V259tYQAOKdyteSgsh0dUvDak31VZ+/o282
 EunWyZTmEAq2F0+N96gztSAklNKQ9ADNsAX672uRp5K40N7lkeGqbVjx5URIld8V0n3L
 c+1A==
X-Gm-Message-State: ALoCoQk8Jcg/WxSwkbGiAThwl4u7UvmlOts/IpFwKCEZ4J7BpZp7DEVZdHiT2YDvspqVVH4XYAP3
X-Received: by 10.107.8.213 with SMTP id h82mr23733243ioi.89.1424013901099;
 Sun, 15 Feb 2015 07:25:01 -0800 (PST)
Received: from uryu.home.lan ([67.210.173.2])
 by mx.google.com with ESMTPSA id i2sm7949373ioi.41.2015.02.15.07.25.00
 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128);
 Sun, 15 Feb 2015 07:25:00 -0800 (PST)
From: Stephen Hemminger <stephen@networkplumber.org>
X-Google-Original-From: Stephen Hemminger <shemming@brocade.com>
To: dev@dpdk.org
Date: Sun, 15 Feb 2015 10:24:47 -0500
Message-Id: <1424013889-2226-3-git-send-email-shemming@brocade.com>
X-Mailer: git-send-email 2.1.4
In-Reply-To: <1424013889-2226-1-git-send-email-shemming@brocade.com>
References: <1424013889-2226-1-git-send-email-shemming@brocade.com>
Cc: Stephen Hemminger <shemming@brocade.com>
Subject: [dpdk-dev] [PATCH 3/5] xen: add phys-addr command line argument
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: patches and discussions about DPDK <dev.dpdk.org>
List-Unsubscribe: <http://dpdk.org/ml/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://dpdk.org/ml/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <http://dpdk.org/ml/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
X-List-Received-Date: Sun, 15 Feb 2015 15:25:02 -0000

Allow overriding default Xen DOM0 behavior to
use physical addresses insted of mfn

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
v2 -- no changes

 lib/librte_eal/common/eal_common_options.c |  5 +++++
 lib/librte_eal/common/eal_internal_cfg.h   |  1 +
 lib/librte_eal/common/eal_options.h        |  2 ++
 lib/librte_eal/common/include/rte_memory.h |  3 +++
 lib/librte_eal/linuxapp/eal/eal_memory.c   |  5 +++++
 lib/librte_mempool/rte_dom0_mempool.c      | 10 ++++++++--
 6 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/lib/librte_eal/common/eal_common_options.c b/lib/librte_eal/common/eal_common_options.c
index 67e02dc..1742364 100644
--- a/lib/librte_eal/common/eal_common_options.c
+++ b/lib/librte_eal/common/eal_common_options.c
@@ -83,6 +83,7 @@ eal_long_options[] = {
 	{OPT_LOG_LEVEL, 1, NULL, OPT_LOG_LEVEL_NUM},
 	{OPT_BASE_VIRTADDR, 1, 0, OPT_BASE_VIRTADDR_NUM},
 	{OPT_XEN_DOM0, 0, 0, OPT_XEN_DOM0_NUM},
+	{OPT_XEN_PHYS_ADDR, 0, 0, OPT_XEN_PHYS_ADDR_NUM},
 	{OPT_CREATE_UIO_DEV, 1, NULL, OPT_CREATE_UIO_DEV_NUM},
 	{OPT_VFIO_INTR, 1, NULL, OPT_VFIO_INTR_NUM},
 	{0, 0, 0, 0}
@@ -491,6 +492,10 @@ eal_parse_common_option(int opt, const char *optarg,
 		}
 		conf->log_level = log;
 		break;
+
+	case OPT_XEN_PHYS_ADDR_NUM:
+		conf->xen_phys_addr_support = 1;
+		break;
 	}
 
 	/* don't know what to do, leave this to caller */
diff --git a/lib/librte_eal/common/eal_internal_cfg.h b/lib/librte_eal/common/eal_internal_cfg.h
index e2ecb0d..41b4169 100644
--- a/lib/librte_eal/common/eal_internal_cfg.h
+++ b/lib/librte_eal/common/eal_internal_cfg.h
@@ -65,6 +65,7 @@ struct internal_config {
 	volatile unsigned force_nrank;    /**< force number of ranks */
 	volatile unsigned no_hugetlbfs;   /**< true to disable hugetlbfs */
 	volatile unsigned xen_dom0_support; /**< support app running on Xen Dom0*/
+	volatile unsigned xen_phys_addr_support; /**< support phys addr */
 	volatile unsigned no_pci;         /**< true to disable PCI */
 	volatile unsigned no_hpet;        /**< true to disable HPET */
 	volatile unsigned vmware_tsc_map; /**< true to use VMware TSC mapping
diff --git a/lib/librte_eal/common/eal_options.h b/lib/librte_eal/common/eal_options.h
index e476f8d..8aee959 100644
--- a/lib/librte_eal/common/eal_options.h
+++ b/lib/librte_eal/common/eal_options.h
@@ -73,6 +73,8 @@ enum {
 	OPT_BASE_VIRTADDR_NUM,
 #define OPT_XEN_DOM0    "xen-dom0"
 	OPT_XEN_DOM0_NUM,
+#define OPT_XEN_PHYS_ADDR "xen-phys-addr"
+	OPT_XEN_PHYS_ADDR_NUM,
 #define OPT_CREATE_UIO_DEV "create-uio-dev"
 	OPT_CREATE_UIO_DEV_NUM,
 #define OPT_VFIO_INTR    "vfio-intr"
diff --git a/lib/librte_eal/common/include/rte_memory.h b/lib/librte_eal/common/include/rte_memory.h
index ab6c1ff..c3b8a98 100644
--- a/lib/librte_eal/common/include/rte_memory.h
+++ b/lib/librte_eal/common/include/rte_memory.h
@@ -180,6 +180,9 @@ unsigned rte_memory_get_nrank(void);
 /**< Internal use only - should DOM0 memory mapping be used */
 extern int is_xen_dom0_supported(void);
 
+/**< Internal use only - should DOM0 use physical addresses insted of mfn */
+extern int is_xen_phys_addr_supported(void);
+
 /**
  * Return the physical address of elt, which is an element of the pool mp.
  *
diff --git a/lib/librte_eal/linuxapp/eal/eal_memory.c b/lib/librte_eal/linuxapp/eal/eal_memory.c
index 4afda2a..a759ac9 100644
--- a/lib/librte_eal/linuxapp/eal/eal_memory.c
+++ b/lib/librte_eal/linuxapp/eal/eal_memory.c
@@ -103,6 +103,11 @@ int is_xen_dom0_supported(void)
 {
 	return internal_config.xen_dom0_support;
 }
+
+int is_xen_phys_addr_supported(void)
+{
+	return internal_config.xen_phys_addr_support;
+}
 #endif
 
 /**
diff --git a/lib/librte_mempool/rte_dom0_mempool.c b/lib/librte_mempool/rte_dom0_mempool.c
index 9ec68fb..ab35826 100644
--- a/lib/librte_mempool/rte_dom0_mempool.c
+++ b/lib/librte_mempool/rte_dom0_mempool.c
@@ -74,8 +74,14 @@ get_phys_map(void *va, phys_addr_t pa[], uint32_t pg_num,
     virt_addr =(uintptr_t) mcfg->memseg[memseg_id].addr;
 
     for (i = 0; i != pg_num; i++) {
-        mfn_id = ((uintptr_t)va + i * pg_sz - virt_addr) / RTE_PGSIZE_2M;
-        pa[i] = mcfg->memseg[memseg_id].mfn[mfn_id] * page_size;
+	if (!is_xen_phys_addr_supported()) {
+		mfn_id = ((uintptr_t)va + i * pg_sz -
+				virt_addr) / RTE_PGSIZE_2M;
+		pa[i] = mcfg->memseg[memseg_id].mfn[mfn_id] * page_size;
+	} else {
+		pa[i] = mcfg->memseg[memseg_id].phys_addr + i * pg_sz +
+			(uintptr_t)va - virt_addr;
+	}
     }
 }
 
-- 
2.1.4