[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [RFC PATCH 0/5] clang-format for Xen
On Fri, 28 Jul 2023, Luca Fancellu wrote: > ## Introduction > ################################################################ > > In this serie, I would like to get feedbacks on the output generated by the > configuration of clang-format, unfortunately we can't use only clang-format, > but > we need to call it using a wrapper, because we need the information of what > files need to be excluded from the tool. > > Another reason is that clang-format has some limitation when formatting asm() > instruction and most of the time it format them in a very ugly way or it > breaks > the code for example removing spaces that were there for a reason (I don't > think > it's a tool to format asm), so in the wrapper script we protect all asm() > invocation or macros where there are asm() invocation with in-code comments > that > stops clang-format to act on that section: > > /* clang-format off */section/* clang-format on */ > > I've read the past threads about the brave people who dared to try to > introduce > clang-format for the xen codebase, some of them from 5 years ago, two points > were clear: 1) goto label needs to be indented and 2) do-while loops have the > braket in the same line. > While point 1) was quite a blocker, it seemd to me that point 2) was less > controversial to be changed in the Xen codestyle, so the current wrapper > script > handles only the point 1 (which is easy), the point 2 can be more tricky to > handle. Are these the only 2 points to discuss? I think as a next step it would be worth listing all the code style decision points we need to make as a group and then go over them during one of the next calls. > ## The clang-format configuration > ############################################## > > In my clang-format configuration I've taken inspiration from EPAM's work, then > from the configuration in Linux and finally from the clang-format manual, to > try > to produce a comprehensive configuration. > > Every configuration parameter has on top a comment with the description and > when it was supported, finally I've added also a [not specified] if that > behavior is not clearly specified in the Xen coding style, I've done that so > we could discuss about adding more specification in our CODING_STYLE. > Every comment can be stripped out in the final release of the file, but I > think > that now they are useful for the discussion. > > The minimum clang-format version for the file is 15, my ubuntu 22.04 comes > with > it, we can reason if it's too high, or if we could also use the latest version > maybe shipped inside a docker image. > > For every [not specified] behavior, I've tried to guess it from the codebase, > I've seen that also in that case it's not easy as there is (sometimes) low > consistency between modules, so we can discuss on every configurable. > > Worth to mention, the public header are all excluded from the format tool, > because formatting them breaks the build on X86, because there are scripts for > auto-generation that don't handle the formatted headers, I didn't investigate > on it, maybe it can be added as technical debt. > > So I've tried building arm32, arm64 and x86_64 with the formatted output and > they build, I've used Yocto for that. > > ## How to try it? > ############################################################## > > So how to generate everything? Just invoke the codestyle.py script without > parameter and it will format every .c and .h file in the hypervisor codebase. > > ./xen/scripts/codestyle.py > > Optionally you can also pass one or more relative path from the folder you are > invoking the script and it will format only them. Thanks for the amazing work Luca. I did as described above and generate a 9MB diff patch :-) I scrolled through it and most of it makes sense but a few things look weird. Copy/pasting them here individually not to add a 9MB diff in attachment. > diff --git a/xen/arch/arm/acpi/boot.c b/xen/arch/arm/acpi/boot.c > index db5085e15d..398dea92e6 100644 > --- a/xen/arch/arm/acpi/boot.c > +++ b/xen/arch/arm/acpi/boot.c > @@ -52,7 +52,7 @@ acpi_map_gic_cpu_interface(struct > acpi_madt_generic_interrupt *processor) > { > int i; > int rc; > - u64 mpidr = processor->arm_mpidr & MPIDR_HWID_MASK; > + u64 mpidr = processor->arm_mpidr & MPIDR_HWID_MASK; > bool enabled = processor->flags & ACPI_MADT_ENABLED; > > if ( mpidr == MPIDR_INVALID ) Do we need the = alignment? It is causing other weird looking changes: > rsdp = (struct acpi_table_rsdp *)base_ptr; > /* Replace xsdt_physical_address */ > rsdp->xsdt_physical_address = tbl_add[TBL_XSDT].start; >- checksum = acpi_tb_checksum(ACPI_CAST_PTR(u8, rsdp), table_size); >+ checksum = acpi_tb_checksum(ACPI_CAST_PTR(u8, rsdp), table_size); > rsdp->checksum = rsdp->checksum - checksum; [...] > #ifdef CONFIG_MULTIBOOT > -int __init xsm_multiboot_policy_init( > - unsigned long *module_map, const multiboot_info_t *mbi, > - void **policy_buffer, size_t *policy_size) > +int __init xsm_multiboot_policy_init(unsigned long *module_map, > + const multiboot_info_t *mbi, > + void **policy_buffer, size_t > *policy_size) > { > int i; > module_t *mod = (module_t *)__va(mbi->mods_addr); > - int rc = 0; > + int rc = 0; > u32 *_policy_start; > unsigned long _policy_len; Can we take the = alignment out? Without it, most other things look good, at least at first glance. Also this looks a bit unnecessary, but not a blocker for me: > @@ -908,8 +895,7 @@ static int __init efi_check_dt_boot(const > EFI_LOADED_IMAGE *loaded_image) > } > > static void __init efi_arch_cpu(void) > -{ > -} > +{} > I think we should: - identify "weird" changes like the above - discuss them as a group, like we do with MISRA, and decide how to address them - once everyone is happy with the new format, come up with a plan on how to merge a 9MB patch
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |