[dpdk-dev] [PATCH v4] eal: remove non-thread panic calls from init sequence
Arnon Warshavsky
arnon at qwilt.com
Wed Jun 5 17:43:43 CEST 2019
On Wed, Jun 5, 2019 at 10:50 AM David Marchand <david.marchand at redhat.com>
wrote:
>
>
> On Tue, Jun 4, 2019 at 5:45 PM Arnon Warshavsky <arnon at qwilt.com> wrote:
>
>> This patch changes some void functions to return a value,
>> so that the init sequence may tear down orderly
>> instead of calling panic.
>>
>
> All we care about in this patch are the panics wrt the shared
> configuration init.
> Can the commit title and description refer to this ?
>
Will remove the non-thread from the title.
Can you be more specific/ offer your view per the description?
>
>
>> Signed-off-by: Arnon Warshavsky <arnon at qwilt.com>
>> ---
>>
>> The calls for launching core messaging threads were left in tact
>> in all 3 eal implementations.
>>
>>
> retval = ftruncate(mem_cfg_fd, sizeof(*rte_config.mem_config));
>> if (retval < 0){
>> close(mem_cfg_fd);
>> - rte_panic("Cannot resize '%s' for rte_mem_config\n",
>> pathname);
>> + mem_cfg_id = -1;
>>
>
> I bet you did not compile FreeBSD :-).
> Yup...Not only haste is from the devil..Getting myself a fbsd vm now..
>
> + RTE_LOG(ERR, EAL, "Cannot resize '%s' for
>> rte_mem_config\n",
>> + pathname);
>> + return -1;
>> }
>>
>> retval = fcntl(mem_cfg_fd, F_SETLK, &wr_lock);
>> if (retval < 0){
>> close(mem_cfg_fd);
>> - rte_exit(EXIT_FAILURE, "Cannot create lock on '%s'. Is
>> another primary "
>> + mem_cfg_fd = -1;
>> + RTE_LOG(ERR, EAL, "Cannot create lock on '%s'. Is another
>> primary "
>> "process running?\n", pathname);
>>
>
> Indent.
>
Ack
>
> Not relevant to this patch, but I find it odd to truncate before trying to
> take the lock.
> Might be something to look at some day, anyway.. :-)
>
>
> + return -1;
>> }
>>
>> rte_mem_cfg_addr = mmap(NULL, sizeof(*rte_config.mem_config),
>> PROT_READ | PROT_WRITE, MAP_SHARED,
>> mem_cfg_fd, 0);
>>
>> if (rte_mem_cfg_addr == MAP_FAILED){
>> - rte_panic("Cannot mmap memory for rte_config\n");
>> + RTE_LOG(ERR, EAL, "Cannot mmap memory for rte_config\n");
>> + return -1;
>>
>
> We failed to mmap.
> Since eal init is going to fail, we should not leave this fd open.
>
Ok. In general I tried to stick with previous functionality by just
replacing the panic with the exit path,
rather than improve it, but this one is indeed straight forward.
>
>> + }
>> }
>>
>> rte_mem_cfg_addr = mmap(NULL, sizeof(*rte_config.mem_config),
>> PROT_READ | PROT_WRITE, MAP_SHARED,
>> mem_cfg_fd, 0);
>> close(mem_cfg_fd);
>>
>
> At this point, we are in a secondary process.
> We don't need to keep this fd open which is fine.
> But at least for consistency, we should reset it to -1.
>
Ack. Same as above
>
>
>> if (rte_mem_cfg_addr == MAP_FAILED){
>> - rte_panic("Cannot mmap memory for rte_config\n");
>> + RTE_LOG(ERR, EAL, "Cannot mmap memory for rte_config\n");
>> + return -1;
>>
>
> Same comment than FreeBSD, mmap failed, we can close/reset mem_cfg_fd.
>
> Ack
>
>
>> + }
>>
>
> We can close/reset mem_cfg_fd but in the error path _only_: we are going
> to reuse it in rte_eal_config_reattach.
>
>
>> rte_config.mem_config = mem_config;
>> +
>> + return 0;
>> }
>>
>> /* reattach the shared config at exact memory location primary process
>> has it */
>> -static void
>> +static int
>> rte_eal_config_reattach(void)
>> {
>> struct rte_mem_config *mem_config;
>> void *rte_mem_cfg_addr;
>>
>> if (internal_config.no_shconf)
>> - return;
>> + return 0;
>>
>> /* save the address primary process has mapped shared config to */
>> rte_mem_cfg_addr = (void *) (uintptr_t)
>> rte_config.mem_config->mem_cfg_addr;
>> @@ -403,18 +420,22 @@ enum rte_iova_mode
>> sizeof(*mem_config), PROT_READ | PROT_WRITE,
>> MAP_SHARED,
>> mem_cfg_fd, 0);
>> if (mem_config == MAP_FAILED || mem_config != rte_mem_cfg_addr) {
>> - if (mem_config != MAP_FAILED)
>> + if (mem_config != MAP_FAILED) {
>> /* errno is stale, don't use */
>> - rte_panic("Cannot mmap memory for rte_config at
>> [%p], got [%p]"
>> - " - please use '--base-virtaddr'
>> option\n",
>> - rte_mem_cfg_addr, mem_config);
>> - else
>> - rte_panic("Cannot mmap memory for rte_config!
>> error %i (%s)\n",
>> - errno, strerror(errno));
>> + RTE_LOG(ERR, EAL, "Cannot mmap memory for
>> rte_config at [%p], got [%p]"
>> + " - please use '--base-virtaddr'
>> option\n",
>> + rte_mem_cfg_addr, mem_config);
>> + return -1;
>> + }
>> + RTE_LOG(ERR, EAL, "Cannot mmap memory for rte_config!
>> error %i (%s)\n",
>> + errno, strerror(errno));
>> + return -1;
>> }
>> close(mem_cfg_fd);
>>
>
> Let's move this close and add a reset to -1 before the branch.
>
Ack
>
>
>> - rte_config_init();
>> + if (rte_config_init() < 0) {
>> + rte_eal_init_alert("Cannot init config");
>> + return -1;
>> + }
>>
>
> This hunk is missing for FreeBSD.
>
> mmmmm , not enough coffee in the process :-/
>
thanks
More information about the dev
mailing list