All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 for-4.19 00/13] xen/bitops: Untangle ffs()/fls() infrastructure
@ 2024-05-24 20:03 Andrew Cooper
  2024-05-24 20:03 ` [PATCH v2 01/13] ppc/boot: Run constructors on boot Andrew Cooper
                   ` (14 more replies)
  0 siblings, 15 replies; 50+ messages in thread
From: Andrew Cooper @ 2024-05-24 20:03 UTC (permalink / raw)
  To: Xen-devel
  Cc: Andrew Cooper, Jan Beulich, Roger Pau Monné, Wei Liu,
	Stefano Stabellini, Julien Grall, Volodymyr Babchuk,
	Bertrand Marquis, Michal Orzel, Oleksii Kurochko, Shawn Anastasio,
	consulting @ bugseng . com, Simone Ballarin, Federico Serafini,
	Nicola Vetrini

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



^ permalink raw reply	[flat|nested] 50+ messages in thread

end of thread, other threads:[~2024-06-03  6:24 UTC | newest]

Thread overview: 50+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-05-24 20:03 [PATCH v2 for-4.19 00/13] xen/bitops: Untangle ffs()/fls() infrastructure Andrew Cooper
2024-05-24 20:03 ` [PATCH v2 01/13] ppc/boot: Run constructors on boot Andrew Cooper
2024-05-29 19:35   ` Shawn Anastasio
2024-05-24 20:03 ` [PATCH v2 02/13] xen/bitops: Cleanup ahead of rearrangements Andrew Cooper
2024-05-27  8:24   ` Jan Beulich
2024-05-31 22:41     ` Andrew Cooper
2024-05-24 20:03 ` [PATCH v2 03/13] ARM/bitops: Change find_first_set_bit() to be a define Andrew Cooper
2024-05-31  0:57   ` Stefano Stabellini
2024-05-24 20:03 ` [PATCH v2 04/13] xen/page_alloc: Coerce min(flsl(), foo) expressions to being unsigned Andrew Cooper
2024-05-27  6:26   ` Jan Beulich
2024-05-29 19:07     ` Andrew Cooper
2024-05-29 19:19       ` Andrew Cooper
2024-05-24 20:03 ` [PATCH v2 05/13] xen/bitops: Implement generic_f?sl() in lib/ Andrew Cooper
2024-05-27  8:44   ` Jan Beulich
2024-05-28 13:20     ` Andrew Cooper
2024-05-31  1:03     ` Stefano Stabellini
2024-05-24 20:03 ` [PATCH v2 06/13] xen/bitops: Implement ffs() in common logic Andrew Cooper
2024-05-27 12:33   ` Jan Beulich
2024-05-31  1:14   ` Stefano Stabellini
2024-05-31  6:56     ` Nicola Vetrini
2024-05-31  8:34       ` Andrew Cooper
2024-05-31  8:48         ` Andrew Cooper
2024-06-01  7:51           ` Nicola Vetrini
2024-05-24 20:03 ` [PATCH v2 07/13] x86/bitops: Improve arch_ffs() in the general case Andrew Cooper
2024-05-27 12:40   ` Jan Beulich
2024-05-27 13:27   ` Jan Beulich
2024-05-27 13:37     ` Jan Beulich
2024-05-28 12:30       ` Andrew Cooper
2024-05-28 13:12         ` Jan Beulich
2024-06-01  1:47           ` Andrew Cooper
2024-06-03  6:24             ` Jan Beulich
2024-05-24 20:03 ` [PATCH v2 08/13] xen/bitops: Implement ffsl() in common logic Andrew Cooper
2024-05-27 12:43   ` Jan Beulich
2024-05-31  1:15     ` Stefano Stabellini
2024-05-24 20:03 ` [PATCH v2 09/13] xen/bitops: Replace find_first_set_bit() with ffsl() - 1 Andrew Cooper
2024-05-27 12:57   ` Jan Beulich
2024-05-24 20:03 ` [PATCH v2 10/13] xen/bitops: Delete find_first_set_bit() Andrew Cooper
2024-05-27 12:58   ` Jan Beulich
2024-05-29 22:17     ` Andrew Cooper
2024-05-24 20:03 ` [PATCH v2 11/13] xen/bitops: Implement fls()/flsl() in common logic Andrew Cooper
2024-05-27 13:38   ` Jan Beulich
2024-05-24 20:03 ` [PATCH v2 12/13] xen/bitops: Clean up ffs64()/fls64() definitions Andrew Cooper
2024-05-27 13:44   ` Jan Beulich
2024-06-01 12:57     ` Andrew Cooper
2024-05-24 20:03 ` [PATCH v2 13/13] xen/bitops: Rearrange the top of xen/bitops.h Andrew Cooper
2024-05-27 13:50   ` Jan Beulich
2024-05-27 13:51 ` [PATCH v2 for-4.19 00/13] xen/bitops: Untangle ffs()/fls() infrastructure Oleksii K.
2024-05-28 14:22 ` [PATCH v2 for-4.19 0.5/13] xen: Introduce CONFIG_SELF_TESTS Andrew Cooper
2024-05-29  7:13   ` Jan Beulich
2024-05-29  7:30   ` Oleksii K.

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.