I think we can consider to have this patch series in Xen 4.19 release:
Release-acked-by: Oleksii Kurochko <oleksii.kurochko@gmail.com>
~ Oleksii
On Fri, 2024-05-24 at 21:03 +0100, Andrew Cooper wrote:
> bitops.h is a mess. It has grown organtically over many years, and
> forces
> unreasonable repsonsibilities out into the per-arch stubs.
>
> Start cleaning it up with ffs() and friends. Across the board, this
> adds:
>
> * Functioning bitops without arch-specific asm
> * An option for arches to provide more optimal code generation
> * Compile-time constant folding
> * Testing at both compile time and during init that the basic
> operations
> behave according to spec.
>
> and the only reason this series isn't a net reduction in code alone
> is the
> because of the new unit testing.
>
> This form is superior in many ways, including getting RISC-V support
> for free.
>
> v2:
> * Many changes. See patches for details
> * Include the fls() side of the infrastructure too.
>
> Testing:
>
> https://gitlab.com/xen-project/people/andyhhp/xen/-/pipelines/1304664544
> https://cirrus-ci.com/github/andyhhp/xen/
>
> Series-wide net bloat-o-meter:
>
> x86: up/down: 51/-247 (-196)
> ARM64: up/down: 40/-400 (-360)
>
> and PPC64 reproduced in full, just to demonstrate how absurd it was
> to have
> generic_f?s() as static inlines...
>
> add/remove: 1/0 grow/shrink: 1/11 up/down: 228/-4832 (-4604)
> Function old new delta
> init_constructors - 220 +220
> start_xen 92 100 +8
> alloc_heap_pages 1980 1744 -236
> xenheap_max_mfn 360 120 -240
> free_heap_pages 784 536 -248
> find_next_zero_bit 564 276 -288
> find_next_bit 548 260 -288
> find_first_zero_bit 444 148 -296
> find_first_bit 444 132 -312
> xmem_pool_free 1776 1440 -336
> __do_softirq 604 252 -352
> init_heap_pages 2328 1416 -912
> xmem_pool_alloc 2920 1596 -1324
>
>
> Andrew Cooper (12):
> ppc/boot: Run constructors on boot
> xen/bitops: Cleanup ahead of rearrangements
> ARM/bitops: Change find_first_set_bit() to be a define
> xen/page_alloc: Coerce min(flsl(), foo) expressions to being
> unsigned
> xen/bitops: Implement generic_f?sl() in lib/
> xen/bitops: Implement ffs() in common logic
> x86/bitops: Improve arch_ffs() in the general case
> xen/bitops: Implement ffsl() in common logic
> xen/bitops: Replace find_first_set_bit() with ffsl() - 1
> xen/bitops: Delete find_first_set_bit()
> xen/bitops: Clean up ffs64()/fls64() definitions
> xen/bitops: Rearrange the top of xen/bitops.h
>
> Oleksii Kurochko (1):
> xen/bitops: Implement fls()/flsl() in common logic
>
> xen/arch/arm/include/asm/arm32/bitops.h | 2 -
> xen/arch/arm/include/asm/arm64/bitops.h | 12 --
> xen/arch/arm/include/asm/bitops.h | 35 +---
> xen/arch/ppc/include/asm/bitops.h | 17 +-
> xen/arch/ppc/setup.c | 2 +
> xen/arch/x86/guest/xen/xen.c | 4 +-
> xen/arch/x86/hvm/dom0_build.c | 2 +-
> xen/arch/x86/hvm/hpet.c | 8 +-
> xen/arch/x86/include/asm/bitops.h | 114 +++++++------
> xen/arch/x86/include/asm/pt-contig-markers.h | 2 +-
> xen/arch/x86/mm.c | 2 +-
> xen/arch/x86/mm/p2m-pod.c | 4 +-
> xen/common/Makefile | 1 +
> xen/common/bitops.c | 89 +++++++++++
> xen/common/page_alloc.c | 6 +-
> xen/common/softirq.c | 2 +-
> xen/drivers/passthrough/amd/iommu_map.c | 2 +-
> xen/drivers/passthrough/iommu.c | 4 +-
> xen/drivers/passthrough/x86/iommu.c | 4 +-
> xen/include/xen/bitops.h | 159 ++++++++---------
> --
> xen/include/xen/boot-check.h | 60 +++++++
> xen/include/xen/compiler.h | 3 +-
> xen/lib/Makefile | 2 +
> xen/lib/generic-ffsl.c | 65 ++++++++
> xen/lib/generic-flsl.c | 68 ++++++++
> 25 files changed, 444 insertions(+), 225 deletions(-)
> create mode 100644 xen/common/bitops.c
> create mode 100644 xen/include/xen/boot-check.h
> create mode 100644 xen/lib/generic-ffsl.c
> create mode 100644 xen/lib/generic-flsl.c
>