Message ID | 20240524200338.1232391-1-andrew.cooper3@citrix.com (mailing list archive) |
---|---|
Headers | show |
Series | xen/bitops: Untangle ffs()/fls() infrastructure | expand |
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 >