[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH v2 for-4.19 00/13] xen/bitops: Untangle ffs()/fls() infrastructure
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 -- 2.30.2
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |