All of lore.kernel.org
 help / color / mirror / Atom feed
* MISRA: Compatible declarations for sort and bsearch
@ 2023-11-24  9:40 Nicola Vetrini
  2023-11-27 14:32 ` Nicola Vetrini
  2023-11-28  8:56 ` Jan Beulich
  0 siblings, 2 replies; 9+ messages in thread
From: Nicola Vetrini @ 2023-11-24  9:40 UTC (permalink / raw)
  To: Xen Devel
  Cc: Stefano Stabellini, Jbeulich, Andrew Cooper3, Julien Grall,
	George Dunlap, Wei Liu

Hi all,

in xen/lib.h and xen/sort.h there are definitions of the functions 
bsearch and sort that have no prior declarations, and therefore are 
subject to a violation of MISRA C Rule 8.4.

I'm wondering whether it would be preferred

1. to put a declaration just before the definition, in lib.h and sort.h
2. deviate these functions, as their signatures are well-known and 
somewhat standardized

other resolution strategies are possible, but I think these are the main 
ones.

-- 
Nicola Vetrini, BSc
Software Engineer, BUGSENG srl (https://bugseng.com)


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: MISRA: Compatible declarations for sort and bsearch
  2023-11-24  9:40 MISRA: Compatible declarations for sort and bsearch Nicola Vetrini
@ 2023-11-27 14:32 ` Nicola Vetrini
  2023-11-27 14:59   ` Jan Beulich
  2023-11-28  8:56 ` Jan Beulich
  1 sibling, 1 reply; 9+ messages in thread
From: Nicola Vetrini @ 2023-11-27 14:32 UTC (permalink / raw)
  To: Xen Devel
  Cc: Stefano Stabellini, Jbeulich, Andrew Cooper3, Julien Grall,
	George Dunlap, Wei Liu

On 2023-11-24 10:40, Nicola Vetrini wrote:
> Hi all,
> 
> in xen/lib.h and xen/sort.h there are definitions of the functions 
> bsearch and sort that have no prior declarations, and therefore are 
> subject to a violation of MISRA C Rule 8.4.
> 
> I'm wondering whether it would be preferred
> 
> 1. to put a declaration just before the definition, in lib.h and sort.h
> 2. deviate these functions, as their signatures are well-known and 
> somewhat standardized
> 
> other resolution strategies are possible, but I think these are the 
> main ones.

Still on the matter of Rule 8.4, though not related to bsearch or sort:

- the definition of do_mca in x86/cpu/mcheck/mca.c has the following 
header:
   #include <xen/hypercall.h> /* for do_mca */
   which in turn leads to x86/include/asm/hypercall.h, which includes the 
following:
   #include <public/arch-x86/xen-mca.h> /* for do_mca */

   where I can't see a declaration for do_mca, as I would have expected. 
I'd like to understand what's going on here, since I may be missing some 
piece of information (perhaps something is generated during the build).

- x86/traps.c do_general_protection may want a declaration in 
x86/include/asm/traps.h, or perhaps it should gain the asmlinkage 
attribute, given that it's used only by asm and the TU that defines it.

- function test and variable data in x86/efi/check.c look like they 
should not be MISRA compliant, so they may be added to the 
exclude-list.json

- given the comment in xen/common/page_alloc.c for first_valid_mfn

/*
  * first_valid_mfn is exported because it is use in ARM specific NUMA
  * helpers. See comment in arch/arm/include/asm/numa.h.
  */
mfn_t first_valid_mfn = INVALID_MFN_INITIALIZER;

and the related ARM comment

/*
  * TODO: make first_valid_mfn static when NUMA is supported on Arm, this
  * is required because the dummy helpers are using it.
  */
extern mfn_t first_valid_mfn;

it should probably be deviated.

- compat_set_{px,cx}_pminfo in x86/x86_64/cpufreq.c are perhaps declared 
with an autogenerated header?

-- 
Nicola Vetrini, BSc
Software Engineer, BUGSENG srl (https://bugseng.com)


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: MISRA: Compatible declarations for sort and bsearch
  2023-11-27 14:32 ` Nicola Vetrini
@ 2023-11-27 14:59   ` Jan Beulich
  2023-11-27 17:57     ` Nicola Vetrini
  0 siblings, 1 reply; 9+ messages in thread
From: Jan Beulich @ 2023-11-27 14:59 UTC (permalink / raw)
  To: Nicola Vetrini
  Cc: Stefano Stabellini, Andrew Cooper3, Julien Grall, George Dunlap,
	Wei Liu, Xen Devel

On 27.11.2023 15:32, Nicola Vetrini wrote:
> Still on the matter of Rule 8.4, though not related to bsearch or sort:
> 
> - the definition of do_mca in x86/cpu/mcheck/mca.c has the following 
> header:
>    #include <xen/hypercall.h> /* for do_mca */
>    which in turn leads to x86/include/asm/hypercall.h, which includes the 
> following:
>    #include <public/arch-x86/xen-mca.h> /* for do_mca */
> 
>    where I can't see a declaration for do_mca, as I would have expected. 
> I'd like to understand what's going on here, since I may be missing some 
> piece of information (perhaps something is generated during the build).

It can't possibly live in the public header. The comment simply went
stale with the auto-generation of headers; the decl is in hypercall-defs.h
now.

> - x86/traps.c do_general_protection may want a declaration in 
> x86/include/asm/traps.h, or perhaps it should gain the asmlinkage 
> attribute, given that it's used only by asm and the TU that defines it.

Neither is really attractive imo.

> - function test and variable data in x86/efi/check.c look like they 
> should not be MISRA compliant, so they may be added to the 
> exclude-list.json

This file isn't contributing to the final binary.

> - given the comment in xen/common/page_alloc.c for first_valid_mfn
> 
> /*
>   * first_valid_mfn is exported because it is use in ARM specific NUMA
>   * helpers. See comment in arch/arm/include/asm/numa.h.
>   */
> mfn_t first_valid_mfn = INVALID_MFN_INITIALIZER;
> 
> and the related ARM comment
> 
> /*
>   * TODO: make first_valid_mfn static when NUMA is supported on Arm, this
>   * is required because the dummy helpers are using it.
>   */
> extern mfn_t first_valid_mfn;
> 
> it should probably be deviated.

NUMA work is still in progress for Arm, I think, so I'd rather wait with
deviating.

> - compat_set_{px,cx}_pminfo in x86/x86_64/cpufreq.c are perhaps declared 
> with an autogenerated header?

I don't think so. Only top-level hypercall handlers would be. This works by
(perhaps even unintentional) trickery: xen/pmstat.h is included only after
set_{c,p}x_pminfo are re-defined to compat_set_{c,p}x_pminfo, so the same
declarations happen to serve two purposes (but of course don't provide the
intended caller/callee agreement).

Jan


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: MISRA: Compatible declarations for sort and bsearch
  2023-11-27 14:59   ` Jan Beulich
@ 2023-11-27 17:57     ` Nicola Vetrini
  2023-11-28  8:54       ` Jan Beulich
  2023-11-29  3:26       ` Stefano Stabellini
  0 siblings, 2 replies; 9+ messages in thread
From: Nicola Vetrini @ 2023-11-27 17:57 UTC (permalink / raw)
  To: Jan Beulich, Stefano Stabellini
  Cc: Stefano Stabellini, Andrew Cooper3, Julien Grall, George Dunlap,
	Wei Liu, Xen Devel

On 2023-11-27 15:59, Jan Beulich wrote:
> On 27.11.2023 15:32, Nicola Vetrini wrote:
>> Still on the matter of Rule 8.4, though not related to bsearch or 
>> sort:
>> 
>> - the definition of do_mca in x86/cpu/mcheck/mca.c has the following
>> header:
>>    #include <xen/hypercall.h> /* for do_mca */
>>    which in turn leads to x86/include/asm/hypercall.h, which includes 
>> the
>> following:
>>    #include <public/arch-x86/xen-mca.h> /* for do_mca */
>> 
>>    where I can't see a declaration for do_mca, as I would have 
>> expected.
>> I'd like to understand what's going on here, since I may be missing 
>> some
>> piece of information (perhaps something is generated during the 
>> build).
> 
> It can't possibly live in the public header. The comment simply went
> stale with the auto-generation of headers; the decl is in 
> hypercall-defs.h
> now.
> 

Ok, thanks.

>> - x86/traps.c do_general_protection may want a declaration in
>> x86/include/asm/traps.h, or perhaps it should gain the asmlinkage
>> attribute, given that it's used only by asm and the TU that defines 
>> it.
> 
> Neither is really attractive imo.
> 
>> - function test and variable data in x86/efi/check.c look like they
>> should not be MISRA compliant, so they may be added to the
>> exclude-list.json
> 
> This file isn't contributing to the final binary.
> 

Then I'll exclude them

>> - given the comment in xen/common/page_alloc.c for first_valid_mfn
>> 
>> /*
>>   * first_valid_mfn is exported because it is use in ARM specific NUMA
>>   * helpers. See comment in arch/arm/include/asm/numa.h.
>>   */
>> mfn_t first_valid_mfn = INVALID_MFN_INITIALIZER;
>> 
>> and the related ARM comment
>> 
>> /*
>>   * TODO: make first_valid_mfn static when NUMA is supported on Arm, 
>> this
>>   * is required because the dummy helpers are using it.
>>   */
>> extern mfn_t first_valid_mfn;
>> 
>> it should probably be deviated.
> 
> NUMA work is still in progress for Arm, I think, so I'd rather wait 
> with
> deviating.
> 

+Stefano

I can leave it as is, if that's indeed going to become static at some 
point.

>> - compat_set_{px,cx}_pminfo in x86/x86_64/cpufreq.c are perhaps 
>> declared
>> with an autogenerated header?
> 
> I don't think so. Only top-level hypercall handlers would be. This 
> works by
> (perhaps even unintentional) trickery: xen/pmstat.h is included only 
> after
> set_{c,p}x_pminfo are re-defined to compat_set_{c,p}x_pminfo, so the 
> same
> declarations happen to serve two purposes (but of course don't provide 
> the
> intended caller/callee agreement).
> 

I didn't understand your explanation fully; I see xen/pmstat.h in 
cpufreq.c included before
compat/platform.h which, as I understand it, redefines set_{c,p}x_pminfo 
to compat_set_{c,p}x_pminfo, therefore down below no declaration for 
compat_set_{c,p}x_pminfo is visible, triggering the violation.

-- 
Nicola Vetrini, BSc
Software Engineer, BUGSENG srl (https://bugseng.com)


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: MISRA: Compatible declarations for sort and bsearch
  2023-11-27 17:57     ` Nicola Vetrini
@ 2023-11-28  8:54       ` Jan Beulich
  2023-11-29  3:26       ` Stefano Stabellini
  1 sibling, 0 replies; 9+ messages in thread
From: Jan Beulich @ 2023-11-28  8:54 UTC (permalink / raw)
  To: Nicola Vetrini
  Cc: Andrew Cooper3, Julien Grall, George Dunlap, Wei Liu,
	Stefano Stabellini, Xen Devel

On 27.11.2023 18:57, Nicola Vetrini wrote:
> On 2023-11-27 15:59, Jan Beulich wrote:
>> On 27.11.2023 15:32, Nicola Vetrini wrote:
>>> - compat_set_{px,cx}_pminfo in x86/x86_64/cpufreq.c are perhaps 
>>> declared
>>> with an autogenerated header?
>>
>> I don't think so. Only top-level hypercall handlers would be. This 
>> works by
>> (perhaps even unintentional) trickery: xen/pmstat.h is included only 
>> after
>> set_{c,p}x_pminfo are re-defined to compat_set_{c,p}x_pminfo, so the 
>> same
>> declarations happen to serve two purposes (but of course don't provide 
>> the
>> intended caller/callee agreement).
>>
> 
> I didn't understand your explanation fully; I see xen/pmstat.h in 
> cpufreq.c included before
> compat/platform.h which, as I understand it, redefines set_{c,p}x_pminfo 
> to compat_set_{c,p}x_pminfo, therefore down below no declaration for 
> compat_set_{c,p}x_pminfo is visible, triggering the violation.

May I suggest that you do what I also did in order to answer your original
question (and which imo you could have done up front): Generate the
preprocessed file(s) and check where the declaration(s) are? After all I
assume you understand that the compiler would choke if indeed there was no
declaration before use. The issue here is that there is a declaration
before use, but there is no (suitable) declaration before the definition.
Hence figuring out where the declaration is and why it won't be possible
to also use it for the definition (simply because there's nothing you can
include to achieve that effect) is the first step.

The (as said imo unintended) trickery can actually also be broken, by
simply adding an explicit inclusion of xen/pmstat.h to
x86_64/platform_hypercall.c near the top of the file. And it looks to me
as if adding this #include there is going to want to be part of the
eventual change (to deliberately make said trickery not work anymore).

Jan


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: MISRA: Compatible declarations for sort and bsearch
  2023-11-24  9:40 MISRA: Compatible declarations for sort and bsearch Nicola Vetrini
  2023-11-27 14:32 ` Nicola Vetrini
@ 2023-11-28  8:56 ` Jan Beulich
  2023-11-28 11:17   ` Nicola Vetrini
  1 sibling, 1 reply; 9+ messages in thread
From: Jan Beulich @ 2023-11-28  8:56 UTC (permalink / raw)
  To: Nicola Vetrini
  Cc: Stefano Stabellini, Andrew Cooper3, Julien Grall, George Dunlap,
	Wei Liu, Xen Devel

On 24.11.2023 10:40, Nicola Vetrini wrote:
> in xen/lib.h and xen/sort.h there are definitions of the functions 
> bsearch and sort that have no prior declarations, and therefore are 
> subject to a violation of MISRA C Rule 8.4.
> 
> I'm wondering whether it would be preferred
> 
> 1. to put a declaration just before the definition, in lib.h and sort.h
> 2. deviate these functions, as their signatures are well-known and 
> somewhat standardized

Seeing that so far no-one else has replied to this: My take is "neither".
It is the very nature of extern gnu_inline functions to work like this.

Jan


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: MISRA: Compatible declarations for sort and bsearch
  2023-11-28  8:56 ` Jan Beulich
@ 2023-11-28 11:17   ` Nicola Vetrini
  0 siblings, 0 replies; 9+ messages in thread
From: Nicola Vetrini @ 2023-11-28 11:17 UTC (permalink / raw)
  To: Jan Beulich
  Cc: Stefano Stabellini, Andrew Cooper3, Julien Grall, George Dunlap,
	Wei Liu, Xen Devel

On 2023-11-28 09:56, Jan Beulich wrote:
> On 24.11.2023 10:40, Nicola Vetrini wrote:
>> in xen/lib.h and xen/sort.h there are definitions of the functions
>> bsearch and sort that have no prior declarations, and therefore are
>> subject to a violation of MISRA C Rule 8.4.
>> 
>> I'm wondering whether it would be preferred
>> 
>> 1. to put a declaration just before the definition, in lib.h and 
>> sort.h
>> 2. deviate these functions, as their signatures are well-known and
>> somewhat standardized
> 
> Seeing that so far no-one else has replied to this: My take is 
> "neither".
> It is the very nature of extern gnu_inline functions to work like this.
> 

This could well be a justification text: violations of required rules 
need either to be fixed or justified.

-- 
Nicola Vetrini, BSc
Software Engineer, BUGSENG srl (https://bugseng.com)


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: MISRA: Compatible declarations for sort and bsearch
  2023-11-27 17:57     ` Nicola Vetrini
  2023-11-28  8:54       ` Jan Beulich
@ 2023-11-29  3:26       ` Stefano Stabellini
  2023-11-29  9:07         ` Nicola Vetrini
  1 sibling, 1 reply; 9+ messages in thread
From: Stefano Stabellini @ 2023-11-29  3:26 UTC (permalink / raw)
  To: Nicola Vetrini
  Cc: Jan Beulich, Stefano Stabellini, Andrew Cooper3, Julien Grall,
	George Dunlap, Wei Liu, Xen Devel

On Mon, 27 Nov 2023, Nicola Vetrini wrote:
> > > /*
> > >   * TODO: make first_valid_mfn static when NUMA is supported on Arm, this
> > >   * is required because the dummy helpers are using it.
> > >   */
> > > extern mfn_t first_valid_mfn;
> > > 
> > > it should probably be deviated.
> > 
> > NUMA work is still in progress for Arm, I think, so I'd rather wait with
> > deviating.
> > 
> 
> +Stefano
> 
> I can leave it as is, if that's indeed going to become static at some point.

I see the point in waiting given the TODO comment, but I wouldn't want
this issue to be the only thing standing between us and zero violation
of Rule 8.4 on ARM. So I think we should add SAF to the comment and
remove it when not necessary any longer. 


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: MISRA: Compatible declarations for sort and bsearch
  2023-11-29  3:26       ` Stefano Stabellini
@ 2023-11-29  9:07         ` Nicola Vetrini
  0 siblings, 0 replies; 9+ messages in thread
From: Nicola Vetrini @ 2023-11-29  9:07 UTC (permalink / raw)
  To: Stefano Stabellini
  Cc: Jan Beulich, Andrew Cooper3, Julien Grall, George Dunlap, Wei Liu,
	Xen Devel

On 2023-11-29 04:26, Stefano Stabellini wrote:
> On Mon, 27 Nov 2023, Nicola Vetrini wrote:
>> > > /*
>> > >   * TODO: make first_valid_mfn static when NUMA is supported on Arm, this
>> > >   * is required because the dummy helpers are using it.
>> > >   */
>> > > extern mfn_t first_valid_mfn;
>> > >
>> > > it should probably be deviated.
>> >
>> > NUMA work is still in progress for Arm, I think, so I'd rather wait with
>> > deviating.
>> >
>> 
>> +Stefano
>> 
>> I can leave it as is, if that's indeed going to become static at some 
>> point.
> 
> I see the point in waiting given the TODO comment, but I wouldn't want
> this issue to be the only thing standing between us and zero violation
> of Rule 8.4 on ARM. So I think we should add SAF to the comment and
> remove it when not necessary any longer.

Ok, thanks.

-- 
Nicola Vetrini, BSc
Software Engineer, BUGSENG srl (https://bugseng.com)


^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2023-11-29  9:07 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-11-24  9:40 MISRA: Compatible declarations for sort and bsearch Nicola Vetrini
2023-11-27 14:32 ` Nicola Vetrini
2023-11-27 14:59   ` Jan Beulich
2023-11-27 17:57     ` Nicola Vetrini
2023-11-28  8:54       ` Jan Beulich
2023-11-29  3:26       ` Stefano Stabellini
2023-11-29  9:07         ` Nicola Vetrini
2023-11-28  8:56 ` Jan Beulich
2023-11-28 11:17   ` Nicola Vetrini

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.