[dpdk-dev,v3,1/5] eal: bring forward multi-process channel init
Checks
Commit Message
Adjust the init sequence: put mp channel init before bus scan
so that we can init the vdev bus through mp channel in the
secondary process before the bus scan.
Signed-off-by: Jianfeng Tan <jianfeng.tan@intel.com>
Reviewed-by: Qi Zhang <qi.z.zhang@intel.com>
---
lib/librte_eal/bsdapp/eal/eal.c | 23 +++++++++++++----------
lib/librte_eal/linuxapp/eal/eal.c | 23 +++++++++++++----------
2 files changed, 26 insertions(+), 20 deletions(-)
Comments
On 19-Apr-18 5:50 PM, Jianfeng Tan wrote:
> Adjust the init sequence: put mp channel init before bus scan
> so that we can init the vdev bus through mp channel in the
> secondary process before the bus scan.
>
> Signed-off-by: Jianfeng Tan <jianfeng.tan@intel.com>
> Reviewed-by: Qi Zhang <qi.z.zhang@intel.com>
> ---
Hi Jianfeng,
Just a general question. I can't recall if we've discussed this
internally, but does this new IPC-based vdev bus scan trigger any memory
allocations? So far bus scans were well-behaved and didn't do that.
On 4/20/2018 4:16 PM, Burakov, Anatoly wrote:
> On 19-Apr-18 5:50 PM, Jianfeng Tan wrote:
>> Adjust the init sequence: put mp channel init before bus scan
>> so that we can init the vdev bus through mp channel in the
>> secondary process before the bus scan.
>>
>> Signed-off-by: Jianfeng Tan <jianfeng.tan@intel.com>
>> Reviewed-by: Qi Zhang <qi.z.zhang@intel.com>
>> ---
>
> Hi Jianfeng,
>
> Just a general question. I can't recall if we've discussed this
> internally,
I don't think we once discussed this.
> but does this new IPC-based vdev bus scan trigger any memory allocations?
No, we don't.
> So far bus scans were well-behaved and didn't do that.
>
I think it's due to that even in the master branch implementation, bus
scan is ahead of memory init. So we don't use any rte_malloc in bus scan.
Thanks,
Jianfeng
@@ -552,6 +552,19 @@ rte_eal_init(int argc, char **argv)
return -1;
}
+ rte_config_init();
+
+ /* Put mp channel init before bus scan so that we can init the vdev
+ * bus through mp channel in the secondary process before the bus scan.
+ */
+ if (rte_mp_channel_init() < 0) {
+ rte_eal_init_alert("failed to init mp channel\n");
+ if (rte_eal_process_type() == RTE_PROC_PRIMARY) {
+ rte_errno = EFAULT;
+ return -1;
+ }
+ }
+
if (rte_bus_scan()) {
rte_eal_init_alert("Cannot scan the buses for devices\n");
rte_errno = ENODEV;
@@ -595,16 +608,6 @@ rte_eal_init(int argc, char **argv)
rte_srand(rte_rdtsc());
- rte_config_init();
-
- if (rte_mp_channel_init() < 0) {
- rte_eal_init_alert("failed to init mp channel\n");
- if (rte_eal_process_type() == RTE_PROC_PRIMARY) {
- rte_errno = EFAULT;
- return -1;
- }
- }
-
/* in secondary processes, memory init may allocate additional fbarrays
* not present in primary processes, so to avoid any potential issues,
* initialize memzones first.
@@ -770,6 +770,19 @@ rte_eal_init(int argc, char **argv)
return -1;
}
+ rte_config_init();
+
+ /* Put mp channel init before bus scan so that we can init the vdev
+ * bus through mp channel in the secondary process before the bus scan.
+ */
+ if (rte_mp_channel_init() < 0) {
+ rte_eal_init_alert("failed to init mp channel\n");
+ if (rte_eal_process_type() == RTE_PROC_PRIMARY) {
+ rte_errno = EFAULT;
+ return -1;
+ }
+ }
+
if (rte_bus_scan()) {
rte_eal_init_alert("Cannot scan the buses for devices\n");
rte_errno = ENODEV;
@@ -820,8 +833,6 @@ rte_eal_init(int argc, char **argv)
rte_srand(rte_rdtsc());
- rte_config_init();
-
if (rte_eal_log_init(logid, internal_config.syslog_facility) < 0) {
rte_eal_init_alert("Cannot init logging.");
rte_errno = ENOMEM;
@@ -829,14 +840,6 @@ rte_eal_init(int argc, char **argv)
return -1;
}
- if (rte_mp_channel_init() < 0) {
- rte_eal_init_alert("failed to init mp channel\n");
- if (rte_eal_process_type() == RTE_PROC_PRIMARY) {
- rte_errno = EFAULT;
- return -1;
- }
- }
-
#ifdef VFIO_PRESENT
if (rte_eal_vfio_setup() < 0) {
rte_eal_init_alert("Cannot init VFIO\n");