On Wed, 10 Jun 2020 16:48:58 +0100
"Burakov, Anatoly" <anatoly.bura...@intel.com> wrote:

> On 10-Jun-20 3:31 PM, Dmitry Kozlyuk wrote:
> > On Wed, 10 Jun 2020 11:26:22 +0100
> > "Burakov, Anatoly" <anatoly.bura...@intel.com> wrote:
> > 
> > [snip]  
> >>>>> +       addr = eal_get_virtual_area(
> >>>>> +               msl->base_va, &mem_sz, page_sz, 0, reserve_flags);
> >>>>> +       if (addr == NULL) {
> >>>>> +#ifndef RTE_EXEC_ENV_WINDOWS
> >>>>> +               /* The hint would be misleading on Windows, but this 
> >>>>> function
> >>>>> +                * is called from many places, including common code,
> >>>>> +                * so don't duplicate the message.
> >>>>> +                */
> >>>>> +               if (rte_errno == EADDRNOTAVAIL)
> >>>>> +                       RTE_LOG(ERR, EAL, "Cannot reserve %llu bytes at 
> >>>>> [%p] - "
> >>>>> +                               "please use '--" OPT_BASE_VIRTADDR "' 
> >>>>> option\n",
> >>>>> +                               (unsigned long long)mem_sz, 
> >>>>> msl->base_va);
> >>>>> +               else
> >>>>> +                       RTE_LOG(ERR, EAL, "Cannot reserve memory\n");
> >>>>> +#endif  
> >>>>
> >>>> You're left without any error messages on Windows. How about:
> >>>>
> >>>> const char *err_str = "Cannot reserve memory\n";
> >>>> #ifndef RTE_EXEC_ENV_WINDOWS
> >>>> if (rte_errno == EADDRNOTAVAIL)
> >>>>       err_str = ...
> >>>> #endif
> >>>> RTE_LOG(ERR, EAL, err_str);
> >>>>
> >>>> or something like that?
> >>>>     
> >>>
> >>> How about removing generic error message here completely and printing more
> >>> specific messages at call sites? In fact, almost all of them already do 
> >>> this.
> >>> It would be more helpful in tracking down errors.
> >>>      
> >>
> >> Agreed, let's do that :) We do pass up the rte_errno, correct? So, we
> >> should be able to do that.  
> > 
> > Actually, callers don't need rte_errno, because we only have to distinguish
> > EADDRNOTAVAIL here, and eal_get_virtual_area() already prints precise
> > diagnostics at WARNING and ERR level. rte_errno is preserved, however.
> >   
> 
> Not sure i agree, we still need the "--base-virtaddr" hint, and we can 
> only do that from the caller (without #ifdef-ery here), so we do need 
> rte_errno for that.

Maybe we're talking about different things. The "--base-virtaddr" hint is
printed from eal_memseg_list_alloc() on Unices for EADDRNOTAVAIL.
This is handy to avoid duplicating the hint and to provide context, so let's
keep it despite #ifndef.

Otherwise, a generic error is printed from the same function (mistakenly not
on Windows in v6). This generic error adds nothing to eal_get_virtual_area()
logs and also doesn't help to known which exact eal_memseg_list_alloc()
failed. If instead callers printed their own messages, it would be clear
which call failed and in which context. Generic error can than be removed,
eal_memseg_list_alloc() code simplified. Callers can inspect rte_errno if they
ever need it, but really they don't, because hint is printed by
eal_memseg_list_alloc() and eal_get_virtual_area() prints even more precise
logs. This is what I did in v8.

-- 
Dmitry Kozlyuk

Reply via email to