From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [119.145.14.64]) by dpdk.org (Postfix) with ESMTP id D90337F31 for ; Wed, 29 Oct 2014 07:31:42 +0100 (CET) Received: from 172.24.2.119 (EHLO szxeml406-hub.china.huawei.com) ([172.24.2.119]) by szxrg01-dlp.huawei.com (MOS 4.3.7-GA FastPath queued) with ESMTP id CDP32349; Wed, 29 Oct 2014 14:40:29 +0800 (CST) Received: from [127.0.0.1] (10.177.19.115) by szxeml406-hub.china.huawei.com (10.82.67.93) with Microsoft SMTP Server id 14.3.158.1; Wed, 29 Oct 2014 14:40:25 +0800 Message-ID: <54508BD3.1080001@huawei.com> Date: Wed, 29 Oct 2014 14:40:19 +0800 From: Linhaifeng User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:31.0) Gecko/20100101 Thunderbird/31.1.0 MIME-Version: 1.0 To: "Qiu, Michael" , "dev@dpdk.org" References: <1414561659-7408-1-git-send-email-haifeng.lin@huawei.com> <533710CFB86FA344BFBF2D6802E60286C7CBAE@SHSMSX101.ccr.corp.intel.com> In-Reply-To: <533710CFB86FA344BFBF2D6802E60286C7CBAE@SHSMSX101.ccr.corp.intel.com> Content-Type: text/plain; charset="iso-2022-jp" Content-Transfer-Encoding: 7bit X-Originating-IP: [10.177.19.115] X-CFilter-Loop: Reflected Subject: Re: [dpdk-dev] [PATCH v2] support free hugepages 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, 29 Oct 2014 06:31:44 -0000 On 2014/10/29 14:14, Qiu, Michael wrote: > 在 10/29/2014 1:49 PM, linhaifeng 写道: >> rte_eal_hugepage_free() is used for unlink all hugepages.If you want to >> free all hugepages you must make sure that you have stop to use it,and you >> must call this function before exit process. >> >> Signed-off-by: linhaifeng >> --- >> .../lib/librte_eal/common/include/rte_memory.h | 11 ++++++++ >> .../lib/librte_eal/linuxapp/eal/eal_memory.c | 31 ++++++++++++++++++++++ >> 2 files changed, 42 insertions(+) >> >> diff --git a/dpdk/dpdk-1.7.0/lib/librte_eal/common/include/rte_memory.h b/dpdk/dpdk-1.7.0/lib/librte_eal/common/include/rte_memory.h >> index 4cf8ea9..f6ad95f 100644 >> --- a/dpdk/dpdk-1.7.0/lib/librte_eal/common/include/rte_memory.h >> +++ b/dpdk/dpdk-1.7.0/lib/librte_eal/common/include/rte_memory.h >> @@ -172,6 +172,17 @@ unsigned rte_memory_get_nchannel(void); >> */ >> unsigned rte_memory_get_nrank(void); >> >> +/** >> + * Unlink all hugepages which created by dpdk. >> + * >> + * @param void >> + * >> + * @return >> + * 0: successfully >> + * negative: error >> + */ >> +int rte_eal_hugepage_free(void); >> + >> #ifdef RTE_LIBRTE_XEN_DOM0 >> /** >> * Return the physical address of elt, which is an element of the pool mp. >> diff --git a/dpdk/dpdk-1.7.0/lib/librte_eal/linuxapp/eal/eal_memory.c b/dpdk/dpdk-1.7.0/lib/librte_eal/linuxapp/eal/eal_memory.c >> index f2454f4..109207c 100644 >> --- a/dpdk/dpdk-1.7.0/lib/librte_eal/linuxapp/eal/eal_memory.c >> +++ b/dpdk/dpdk-1.7.0/lib/librte_eal/linuxapp/eal/eal_memory.c >> @@ -98,6 +98,13 @@ >> #include "eal_filesystem.h" >> #include "eal_hugepages.h" >> >> +struct hugepage_table { >> + struct hugepage_file *hugepg_tbl; >> + unsigned nr_hugefiles; >> +}; >> + >> +static struct hugepage_table g_hugepage_table; >> + >> /** >> * @file >> * Huge page mapping under linux >> @@ -1202,6 +1209,7 @@ rte_eal_hugepage_init(void) >> (unsigned) >> (used_hp[i].hugepage_sz / 0x100000), >> j); >> + g_hugepage_table.nr_hugefiles += used_hp[i].num_pages[j]; >> } >> } >> } >> @@ -1237,6 +1245,8 @@ rte_eal_hugepage_init(void) >> goto fail; >> } >> >> + g_hugepage_table.hugepg_tbl = hugepage; >> + >> /* free the temporary hugepage table */ >> free(tmp_hp); >> tmp_hp = NULL; >> @@ -1487,6 +1497,27 @@ error: >> return -1; >> } >> >> +int >> +rte_eal_hugepage_free(void) >> +{ >> + struct hugepage_file *hugepg_tbl = g_hugepage_table.hugepg_tbl; >> + unsigned i; >> + unsigned nr_hugefiles = g_hugepage_table.nr_hugefiles; >> + int ret = 0; >> + >> + for (i = 0; i < nr_hugefiles; i++) { >> + ret = unlink(hugepg_tbl[i].filepath); >> + if (ret != 0) { >> + RTE_LOG(ERR, EAL, "Failed to unlink %s", hugepg_tbl[i].filepath); >> + return ret; >> + } >> + hugepg_tbl[i].orig_va = NULL; > > BTW, is it better to first set hugepg_tbl[i].orig_vato NULL, then unlink > filepath? > It may be not a good idea to first remove then set to NULL. > > Thanks, > Michael > If first set hugepg_tbl[i].orig_va to NULL,then failed to unlink you have to restore hugepg_tbl[i].orig_va. So I first to unlink for less codes. >> + } >> + >> + RTE_LOG(INFO, EAL, "unlink %u hugepage files\n", nr_hugefiles); >> + return ret; >> +} >> + >> static int >> rte_eal_memdevice_init(void) >> { > > > . > -- Regards, Haifeng