* 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-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
* 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
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.