Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/1725/?format=api
https://patches.dpdk.org/api/patches/1725/?format=api", "web_url": "https://patches.dpdk.org/project/dpdk/patch/1417513268-6040-1-git-send-email-xiaobo.chi@nsn.com/", "project": { "id": 1, "url": "https://patches.dpdk.org/api/projects/1/?format=api", "name": "DPDK", "link_name": "dpdk", "list_id": "dev.dpdk.org", "list_email": "dev@dpdk.org", "web_url": "http://core.dpdk.org", "scm_url": "git://dpdk.org/dpdk", "webscm_url": "http://git.dpdk.org/dpdk", "list_archive_url": "https://inbox.dpdk.org/dev", "list_archive_url_format": "https://inbox.dpdk.org/dev/{}", "commit_url_format": "" }, "msgid": "<1417513268-6040-1-git-send-email-xiaobo.chi@nsn.com>", "list_archive_url": "https://inbox.dpdk.org/dev/1417513268-6040-1-git-send-email-xiaobo.chi@nsn.com", "date": "2014-12-02T09:41:08", "name": "[dpdk-dev] add one option memory-only for those secondary PRBs", "commit_ref": null, "pull_url": null, "state": "changes-requested", "archived": true, "hash": "d782065f814939b7c0ddc8ee72d5cab3ffc01555", "submitter": { "id": 124, "url": "https://patches.dpdk.org/api/people/124/?format=api", "name": "chixiaobo", "email": "xiaobo.chi@nsn.com" }, "delegate": null, "mbox": "https://patches.dpdk.org/project/dpdk/patch/1417513268-6040-1-git-send-email-xiaobo.chi@nsn.com/mbox/", "series": [], "comments": "https://patches.dpdk.org/api/patches/1725/comments/", "check": "pending", "checks": "https://patches.dpdk.org/api/patches/1725/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<dev-bounces@dpdk.org>", "X-Original-To": "patchwork@dpdk.org", "Delivered-To": "patchwork@dpdk.org", "Received": [ "from [92.243.14.124] (localhost [IPv6:::1])\n\tby dpdk.org (Postfix) with ESMTP id 8323232A5;\n\tTue, 2 Dec 2014 10:41:15 +0100 (CET)", "from demumfd001.nsn-inter.net (demumfd001.nsn-inter.net\n\t[93.183.12.32]) by dpdk.org (Postfix) with ESMTP id 6EAEFDE0\n\tfor <dev@dpdk.org>; Tue, 2 Dec 2014 10:41:11 +0100 (CET)", "from demuprx017.emea.nsn-intra.net ([10.150.129.56])\n\tby demumfd001.nsn-inter.net (8.14.3/8.14.3) with ESMTP id\n\tsB29fAgx018918\n\t(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK)\n\tfor <dev@dpdk.org>; Tue, 2 Dec 2014 09:41:10 GMT", "from localhost ([10.140.132.118])\n\tby demuprx017.emea.nsn-intra.net (8.12.11.20060308/8.12.11) with\n\tESMTP id sB29f8oD009297; Tue, 2 Dec 2014 10:41:09 +0100" ], "From": "chixiaobo <xiaobo.chi@nsn.com>", "To": "dev@dpdk.org", "Date": "Tue, 2 Dec 2014 17:41:08 +0800", "Message-Id": "<1417513268-6040-1-git-send-email-xiaobo.chi@nsn.com>", "X-Mailer": "git-send-email 1.9.4.msysgit.2", "X-purgate-type": "clean", "X-purgate-Ad": "Categorized by eleven eXpurgate (R) http://www.eleven.de", "X-purgate": [ "clean", "This mail is considered clean (visit http://www.eleven.de for\n\tfurther information)" ], "X-purgate-size": "9637", "X-purgate-ID": "151667::1417513270-0000658F-D890E314/0/0", "Subject": "[dpdk-dev] [PATCH] add one option memory-only for those secondary\n\tPRBs", "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>,\n\t<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>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>", "Errors-To": "dev-bounces@dpdk.org", "Sender": "\"dev\" <dev-bounces@dpdk.org>" }, "content": "---\n lib/librte_eal/common/eal_common_options.c | 18 +++-\n lib/librte_eal/common/eal_internal_cfg.h | 1 +\n lib/librte_eal/common/eal_options.h | 4 +-\n lib/librte_eal/linuxapp/eal/eal.c | 137 +++++++++++++++--------------\n 4 files changed, 89 insertions(+), 71 deletions(-)\n mode change 100644 => 100755 lib/librte_eal/common/eal_common_options.c\n mode change 100644 => 100755 lib/librte_eal/common/eal_internal_cfg.h\n mode change 100644 => 100755 lib/librte_eal/common/eal_options.h\n mode change 100644 => 100755 lib/librte_eal/linuxapp/eal/eal.c", "diff": "diff --git a/lib/librte_eal/common/eal_common_options.c b/lib/librte_eal/common/eal_common_options.c\nold mode 100644\nnew mode 100755\nindex e2810ab..5ab4b87\n--- a/lib/librte_eal/common/eal_common_options.c\n+++ b/lib/librte_eal/common/eal_common_options.c\n@@ -85,6 +85,7 @@ eal_long_options[] = {\n \t{OPT_XEN_DOM0, 0, 0, OPT_XEN_DOM0_NUM},\n \t{OPT_CREATE_UIO_DEV, 1, NULL, OPT_CREATE_UIO_DEV_NUM},\n \t{OPT_VFIO_INTR, 1, NULL, OPT_VFIO_INTR_NUM},\n+ {OPT_MEMORY_ONLY, 0, NULL, OPT_MEMORY_ONLY_NUM},\n \t{0, 0, 0, 0}\n };\n \n@@ -126,6 +127,7 @@ eal_reset_internal_config(struct internal_config *internal_cfg)\n \tinternal_cfg->no_hpet = 1;\n #endif\n \tinternal_cfg->vmware_tsc_map = 0;\n+ internal_cfg->memory_only= 0;\n }\n \n /*\n@@ -454,6 +456,10 @@ eal_parse_common_option(int opt, const char *optarg,\n \t\tconf->process_type = eal_parse_proc_type(optarg);\n \t\tbreak;\n \n+\tcase OPT_MEMORY_ONLY_NUM:\n+\t\tconf->memory_only= 1;\n+\t\tbreak;\n+\n \tcase OPT_MASTER_LCORE_NUM:\n \t\tif (eal_parse_master_lcore(optarg) < 0) {\n \t\t\tRTE_LOG(ERR, EAL, \"invalid parameter for --\"\n@@ -525,9 +531,9 @@ eal_check_common_options(struct internal_config *internal_cfg)\n {\n \tstruct rte_config *cfg = rte_eal_get_configuration();\n \n-\tif (!lcores_parsed) {\n-\t\tRTE_LOG(ERR, EAL, \"CPU cores must be enabled with options \"\n-\t\t\t\"-c or -l\\n\");\n+\tif (!lcores_parsed && !(internal_cfg->process_type == RTE_PROC_SECONDARY&& internal_cfg->memory_only) ) {\n+\t\tRTE_LOG(ERR, EAL, \"For those processes without memory-only option, CPU cores \"\n+ \"must be enabled with options -c or -l\\n\");\n \t\treturn -1;\n \t}\n \tif (cfg->lcore_role[cfg->master_lcore] != ROLE_RTE) {\n@@ -545,6 +551,11 @@ eal_check_common_options(struct internal_config *internal_cfg)\n \t\t\t\"specified\\n\");\n \t\treturn -1;\n \t}\n+\tif ( internal_cfg->process_type != RTE_PROC_SECONDARY &&\n+\t\t\tinternal_cfg->memory_only) {\n+\t\tRTE_LOG(ERR, EAL, \"only secondary processes can specify memory-only option.\\n\");\n+\t\treturn -1;\n+\t}\n \tif (index(internal_cfg->hugefile_prefix, '%') != NULL) {\n \t\tRTE_LOG(ERR, EAL, \"Invalid char, '%%', in --\"OPT_FILE_PREFIX\" \"\n \t\t\t\"option\\n\");\n@@ -590,6 +601,7 @@ eal_common_usage(void)\n \t \" --\"OPT_SYSLOG\" : set syslog facility\\n\"\n \t \" --\"OPT_LOG_LEVEL\" : set default log level\\n\"\n \t \" --\"OPT_PROC_TYPE\" : type of this process\\n\"\n+ \" --\"OPT_MEMORY_ONLY\": only use shared memory, valid only for secondary process.\"\n \t \" --\"OPT_PCI_BLACKLIST\", -b: add a PCI device in black list.\\n\"\n \t \" Prevent EAL from using this PCI device. The argument\\n\"\n \t \" format is <domain:bus:devid.func>.\\n\"\ndiff --git a/lib/librte_eal/common/eal_internal_cfg.h b/lib/librte_eal/common/eal_internal_cfg.h\nold mode 100644\nnew mode 100755\nindex aac6abf..68b982c\n--- a/lib/librte_eal/common/eal_internal_cfg.h\n+++ b/lib/librte_eal/common/eal_internal_cfg.h\n@@ -85,6 +85,7 @@ struct internal_config {\n \n \tunsigned num_hugepage_sizes; /**< how many sizes on this system */\n \tstruct hugepage_info hugepage_info[MAX_HUGEPAGE_SIZES];\n+ volatile unsigned memory_only; /**<wheter the seconday process only need shared momory only or not */\n };\n extern struct internal_config internal_config; /**< Global EAL configuration. */\n \ndiff --git a/lib/librte_eal/common/eal_options.h b/lib/librte_eal/common/eal_options.h\nold mode 100644\nnew mode 100755\nindex e476f8d..6ddff1b\n--- a/lib/librte_eal/common/eal_options.h\n+++ b/lib/librte_eal/common/eal_options.h\n@@ -76,7 +76,9 @@ enum {\n #define OPT_CREATE_UIO_DEV \"create-uio-dev\"\n \tOPT_CREATE_UIO_DEV_NUM,\n #define OPT_VFIO_INTR \"vfio-intr\"\n-\tOPT_VFIO_INTR_NUM,\n+ OPT_VFIO_INTR_NUM,\n+#define OPT_MEMORY_ONLY \"memory-only\"\n+ OPT_MEMORY_ONLY_NUM,\n \tOPT_LONG_MAX_NUM\n };\n \ndiff --git a/lib/librte_eal/linuxapp/eal/eal.c b/lib/librte_eal/linuxapp/eal/eal.c\nold mode 100644\nnew mode 100755\nindex 89f3b5e..a03e511\n--- a/lib/librte_eal/linuxapp/eal/eal.c\n+++ b/lib/librte_eal/linuxapp/eal/eal.c\n@@ -752,14 +752,16 @@ rte_eal_init(int argc, char **argv)\n \n \trte_config_init();\n \n-\tif (rte_eal_pci_init() < 0)\n-\t\trte_panic(\"Cannot init PCI\\n\");\n+ /*with memory-only option, we need not cpu affinity, pci device, alarm, external devices, interrupt, etc. */\n+ if( !internal_config.memory_only ){\n+ \tif (rte_eal_pci_init() < 0)\n+ \t\trte_panic(\"Cannot init PCI\\n\");\n \n #ifdef RTE_LIBRTE_IVSHMEM\n \tif (rte_eal_ivshmem_init() < 0)\n \t\trte_panic(\"Cannot init IVSHMEM\\n\");\n #endif\n-\n+ }\n \tif (rte_eal_memory_init() < 0)\n \t\trte_panic(\"Cannot init memory\\n\");\n \n@@ -772,73 +774,73 @@ rte_eal_init(int argc, char **argv)\n \tif (rte_eal_tailqs_init() < 0)\n \t\trte_panic(\"Cannot init tail queues for objects\\n\");\n \n-#ifdef RTE_LIBRTE_IVSHMEM\n-\tif (rte_eal_ivshmem_obj_init() < 0)\n-\t\trte_panic(\"Cannot init IVSHMEM objects\\n\");\n-#endif\n-\n \tif (rte_eal_log_init(logid, internal_config.syslog_facility) < 0)\n \t\trte_panic(\"Cannot init logs\\n\");\n \n-\tif (rte_eal_alarm_init() < 0)\n-\t\trte_panic(\"Cannot init interrupt-handling thread\\n\");\n-\n-\tif (rte_eal_intr_init() < 0)\n-\t\trte_panic(\"Cannot init interrupt-handling thread\\n\");\n-\n-\tif (rte_eal_timer_init() < 0)\n-\t\trte_panic(\"Cannot init HPET or TSC timers\\n\");\n-\n-\teal_check_mem_on_local_socket();\n-\n-\trte_eal_mcfg_complete();\n-\n-\tTAILQ_FOREACH(solib, &solib_list, next) {\n-\t\tRTE_LOG(INFO, EAL, \"open shared lib %s\\n\", solib->name);\n-\t\tsolib->lib_handle = dlopen(solib->name, RTLD_NOW);\n-\t\tif (solib->lib_handle == NULL)\n-\t\t\tRTE_LOG(WARNING, EAL, \"%s\\n\", dlerror());\n-\t}\n-\n-\teal_thread_init_master(rte_config.master_lcore);\n-\n-\tRTE_LOG(DEBUG, EAL, \"Master core %u is ready (tid=%x)\\n\",\n-\t\trte_config.master_lcore, (int)thread_id);\n-\n-\tif (rte_eal_dev_init() < 0)\n-\t\trte_panic(\"Cannot init pmd devices\\n\");\n-\n-\tRTE_LCORE_FOREACH_SLAVE(i) {\n-\n-\t\t/*\n-\t\t * create communication pipes between master thread\n-\t\t * and children\n-\t\t */\n-\t\tif (pipe(lcore_config[i].pipe_master2slave) < 0)\n-\t\t\trte_panic(\"Cannot create pipe\\n\");\n-\t\tif (pipe(lcore_config[i].pipe_slave2master) < 0)\n-\t\t\trte_panic(\"Cannot create pipe\\n\");\n-\n-\t\tlcore_config[i].state = WAIT;\n-\n-\t\t/* create a thread for each lcore */\n-\t\tret = pthread_create(&lcore_config[i].thread_id, NULL,\n-\t\t\t\t eal_thread_loop, NULL);\n-\t\tif (ret != 0)\n-\t\t\trte_panic(\"Cannot create thread\\n\");\n-\t}\n-\n-\t/*\n-\t * Launch a dummy function on all slave lcores, so that master lcore\n-\t * knows they are all ready when this function returns.\n-\t */\n-\trte_eal_mp_remote_launch(sync_func, NULL, SKIP_MASTER);\n-\trte_eal_mp_wait_lcore();\n-\n-\t/* Probe & Initialize PCI devices */\n-\tif (rte_eal_pci_probe())\n-\t\trte_panic(\"Cannot probe PCI\\n\");\n-\n+ if( !internal_config.memory_only ){\n+#ifdef RTE_LIBRTE_IVSHMEM\n+ if (rte_eal_ivshmem_obj_init() < 0)\n+ rte_panic(\"Cannot init IVSHMEM objects\\n\");\n+#endif \n+ if (rte_eal_alarm_init() < 0)\n+ \t\trte_panic(\"Cannot init interrupt-handling thread\\n\");\n+\n+ \tif (rte_eal_intr_init() < 0)\n+ \t\trte_panic(\"Cannot init interrupt-handling thread\\n\");\n+\n+ \tif (rte_eal_timer_init() < 0)\n+ \t\trte_panic(\"Cannot init HPET or TSC timers\\n\");\n+\n+ \teal_check_mem_on_local_socket();\n+\n+ \trte_eal_mcfg_complete();\n+\n+ \tTAILQ_FOREACH(solib, &solib_list, next) {\n+ \t\tRTE_LOG(INFO, EAL, \"open shared lib %s\\n\", solib->name);\n+ \t\tsolib->lib_handle = dlopen(solib->name, RTLD_NOW);\n+ \t\tif (solib->lib_handle == NULL)\n+ \t\t\tRTE_LOG(WARNING, EAL, \"%s\\n\", dlerror());\n+ \t}\n+\n+ \teal_thread_init_master(rte_config.master_lcore);\n+\n+ \tRTE_LOG(DEBUG, EAL, \"Master core %u is ready (tid=%x)\\n\",\n+ \t\trte_config.master_lcore, (int)thread_id);\n+\n+ \tif (rte_eal_dev_init() < 0)\n+ \t\trte_panic(\"Cannot init pmd devices\\n\");\n+\n+ \tRTE_LCORE_FOREACH_SLAVE(i) {\n+\n+ \t\t/*\n+ \t\t * create communication pipes between master thread\n+ \t\t * and children\n+ \t\t */\n+ \t\tif (pipe(lcore_config[i].pipe_master2slave) < 0)\n+ \t\t\trte_panic(\"Cannot create pipe\\n\");\n+ \t\tif (pipe(lcore_config[i].pipe_slave2master) < 0)\n+ \t\t\trte_panic(\"Cannot create pipe\\n\");\n+\n+ \t\tlcore_config[i].state = WAIT;\n+\n+ \t\t/* create a thread for each lcore */\n+ \t\tret = pthread_create(&lcore_config[i].thread_id, NULL,\n+ \t\t\t\t eal_thread_loop, NULL);\n+ \t\tif (ret != 0)\n+ \t\t\trte_panic(\"Cannot create thread\\n\");\n+ \t}\n+\n+ \t/*\n+ \t * Launch a dummy function on all slave lcores, so that master lcore\n+ \t * knows they are all ready when this function returns.\n+ \t */\n+ \trte_eal_mp_remote_launch(sync_func, NULL, SKIP_MASTER);\n+ \trte_eal_mp_wait_lcore();\n+\n+ \t/* Probe & Initialize PCI devices */\n+ \tif (rte_eal_pci_probe())\n+ \t\trte_panic(\"Cannot probe PCI\\n\");\n+ }\n \treturn fctret;\n }\n \n@@ -859,3 +861,4 @@ int rte_eal_has_hugepages(void)\n {\n \treturn ! internal_config.no_hugetlbfs;\n }\n+\n", "prefixes": [ "dpdk-dev" ] }{ "id": 1725, "url": "