From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pa0-f42.google.com (mail-pa0-f42.google.com [209.85.220.42]) by dpdk.org (Postfix) with ESMTP id A50C9378B for ; Wed, 9 Mar 2016 09:33:53 +0100 (CET) Received: by mail-pa0-f42.google.com with SMTP id fe3so18040458pab.1 for ; Wed, 09 Mar 2016 00:33:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=igel-co-jp.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=EJBf31ippwqG4IJ/olt4xPHSecm2jMm8EdUKuDqAb2A=; b=lQ0WNrvuJWUiqFbxPNQ4zk2JWxXy6TOVIHSyE2+N8buRcmp36MW5VKRQ+u28Si8EVx kI6iiqK5AqzID1ooBhv66De27UGVf4OnheqSjm4XPegrUzhMSEUEGOOorBEWn21Gqlcn tU0oIE2eJnbnmUL4uBwCWkumjdjbU3tCHRGSuN1q+44+4UXu+kWcwLYO5FfB4HiCen6U yKSXxGL6XZQEFVYkoVzSUl4yrHQnRCdGUb0xzGZrfvvYEEvSIbtVsLCodreMn63XTmb+ ZMdwe+7xHC1MAO1zkBT4y7mlZGBGG3EcMev0axOfy7MHi9jh5QWhLNz3w/lVRNiIc18o pcKQ== 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:in-reply-to:references; bh=EJBf31ippwqG4IJ/olt4xPHSecm2jMm8EdUKuDqAb2A=; b=QxrrHzJ6tWvJqdFSskCGG0fSpzVsrkUhwGwSdsIDtFrFQniqhxiJs0WKhdkmzisJWj gKxBKLg7W0kpo544FBZS2z3EIrFMjrxZ9H8cwYV8kijMZgrBkpm+nYi1eSS+lUTokZzj XfPOTtWxkp0iUMnXy7VMb3g2pHFsb1kh0pNcajIE+a84Ht0LXmw72vuLMwUR7HIOjEG2 suHoaYmF4A9zL7CyaKleLv7pz04jkWVDFuGca0WZd6qpWfScBIOUVebpwpxtZncx79R2 oXB5HzxfRIB/Z+JCrSWE8NbCMHwPnQlZJQO7TmZtQyy5rEr6AOhIRwG0wfiudZQcn5Lu Xl5Q== X-Gm-Message-State: AD7BkJL0C2oY/QTNm+g+TFYtrE/r6zyEbWaqQLFFs6j57SNUcJKyzSfSoft9mH5wkqbRFw== X-Received: by 10.66.102.37 with SMTP id fl5mr48628198pab.32.1457512433129; Wed, 09 Mar 2016 00:33:53 -0800 (PST) Received: from localhost.localdomain (napt.igel.co.jp. [219.106.231.132]) by smtp.gmail.com with ESMTPSA id qh8sm10350238pac.40.2016.03.09.00.33.51 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 09 Mar 2016 00:33:52 -0800 (PST) From: Tetsuya Mukawa To: dev@dpdk.org, jianfeng.tan@intel.com, huawei.xie@intel.com, yuanhan.liu@linux.intel.com Date: Wed, 9 Mar 2016 17:33:21 +0900 Message-Id: <1457512409-24403-5-git-send-email-mukawa@igel.co.jp> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1457512409-24403-1-git-send-email-mukawa@igel.co.jp> References: <1457512409-24403-1-git-send-email-mukawa@igel.co.jp> In-Reply-To: <1456129075-14909-4-git-send-email-mukawa@igel.co.jp> References: <1456129075-14909-4-git-send-email-mukawa@igel.co.jp> Subject: [dpdk-dev] [PATCH v4 04/12] EAL: Add a new "--align-memsize" option X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 09 Mar 2016 08:33:54 -0000 The option will work with "--range-virtaddr", and if the option is specified, mapped address will be align by EAL memory size. Such an alignment is required for using virtio-net PMD extension on container that uses QEMU QTest framework. Signed-off-by: Tetsuya Mukawa --- lib/librte_eal/common/eal_common_options.c | 8 ++++++++ lib/librte_eal/common/eal_internal_cfg.h | 1 + lib/librte_eal/common/eal_options.h | 2 ++ lib/librte_eal/linuxapp/eal/eal.c | 4 ++++ lib/librte_eal/linuxapp/eal/eal_memory.c | 9 +++++++++ 5 files changed, 24 insertions(+) diff --git a/lib/librte_eal/common/eal_common_options.c b/lib/librte_eal/common/eal_common_options.c index 3b4f789..853420a 100644 --- a/lib/librte_eal/common/eal_common_options.c +++ b/lib/librte_eal/common/eal_common_options.c @@ -75,6 +75,7 @@ const struct option eal_long_options[] = { {OPT_BASE_VIRTADDR, 1, NULL, OPT_BASE_VIRTADDR_NUM }, {OPT_RANGE_VIRTADDR, 1, NULL, OPT_RANGE_VIRTADDR_NUM }, + {OPT_ALIGN_MEMSIZE, 0, NULL, OPT_ALIGN_MEMSIZE_NUM }, {OPT_CREATE_UIO_DEV, 0, NULL, OPT_CREATE_UIO_DEV_NUM }, {OPT_FILE_PREFIX, 1, NULL, OPT_FILE_PREFIX_NUM }, {OPT_HELP, 0, NULL, OPT_HELP_NUM }, @@ -140,6 +141,7 @@ eal_reset_internal_config(struct internal_config *internal_cfg) internal_cfg->base_virtaddr = 0; internal_cfg->range_virtaddr_start = 0; internal_cfg->range_virtaddr_end = 0; + internal_cfg->align_memsize = 0; internal_cfg->syslog_facility = LOG_DAEMON; /* default value from build option */ @@ -994,6 +996,12 @@ eal_check_common_options(struct internal_config *internal_cfg) return -1; } + if (internal_cfg->range_virtaddr_end == 0 && internal_cfg->align_memsize) { + RTE_LOG(ERR, EAL, "Option --"OPT_RANGE_VIRTADDR" should be " + "specified together with --"OPT_ALIGN_MEMSIZE"\n"); + return -1; + } + return 0; } diff --git a/lib/librte_eal/common/eal_internal_cfg.h b/lib/librte_eal/common/eal_internal_cfg.h index 0734630..df33a9f 100644 --- a/lib/librte_eal/common/eal_internal_cfg.h +++ b/lib/librte_eal/common/eal_internal_cfg.h @@ -80,6 +80,7 @@ struct internal_config { uintptr_t base_virtaddr; /**< base address to try and reserve memory from */ uintptr_t range_virtaddr_start; /**< start address of mappable region */ uintptr_t range_virtaddr_end; /**< end address of mappable region */ + volatile unsigned align_memsize; /**< true to align virtaddr by memory size */ volatile int syslog_facility; /**< facility passed to openlog() */ volatile uint32_t log_level; /**< default log level */ /** default interrupt mode for VFIO */ diff --git a/lib/librte_eal/common/eal_options.h b/lib/librte_eal/common/eal_options.h index 8e4cf1d..9e36f68 100644 --- a/lib/librte_eal/common/eal_options.h +++ b/lib/librte_eal/common/eal_options.h @@ -49,6 +49,8 @@ enum { OPT_BASE_VIRTADDR_NUM, #define OPT_RANGE_VIRTADDR "range-virtaddr" OPT_RANGE_VIRTADDR_NUM, +#define OPT_ALIGN_MEMSIZE "align-memsize" + OPT_ALIGN_MEMSIZE_NUM, #define OPT_CREATE_UIO_DEV "create-uio-dev" OPT_CREATE_UIO_DEV_NUM, #define OPT_FILE_PREFIX "file-prefix" diff --git a/lib/librte_eal/linuxapp/eal/eal.c b/lib/librte_eal/linuxapp/eal/eal.c index 62b7a57..e2a0096 100644 --- a/lib/librte_eal/linuxapp/eal/eal.c +++ b/lib/librte_eal/linuxapp/eal/eal.c @@ -643,6 +643,10 @@ eal_parse_args(int argc, char **argv) } break; + case OPT_ALIGN_MEMSIZE_NUM: + internal_config.align_memsize = 1; + break; + case OPT_VFIO_INTR_NUM: if (eal_parse_vfio_intr(optarg) < 0) { RTE_LOG(ERR, EAL, "invalid parameters for --" diff --git a/lib/librte_eal/linuxapp/eal/eal_memory.c b/lib/librte_eal/linuxapp/eal/eal_memory.c index e15bf4c..1c9eb3c 100644 --- a/lib/librte_eal/linuxapp/eal/eal_memory.c +++ b/lib/librte_eal/linuxapp/eal/eal_memory.c @@ -272,6 +272,15 @@ rte_eal_get_free_region(uint64_t pagesz) return 0; } + if (internal_config.align_memsize) { + /* + * Typically, BAR register of PCI device requiers such + * an alignment. + */ + low_limit = RTE_ALIGN_CEIL(low_limit, alloc_size); + high_limit = RTE_ALIGN_FLOOR(high_limit, alloc_size); + } + fp = fopen("/proc/self/maps", "r"); if (fp == NULL) { rte_panic("Cannot open /proc/self/maps\n"); -- 2.1.4