Skip to content

Introduce the for_each_set_clump8 macro

William Breathitt Gray linux-arch linux-arm-kernel linux-gpio linux-pm lkml 20 versions – In review

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v18 Latest14 patches 5 repliesIn review
  2. v17 posting 2/20 of 14 patches 0 repliesSuperseded
  3. v17 posting 1/214 patches 14 repliesSuperseded
Earlier versions · 17
VersionPostedPatchesRepliesStatus
v1614 patches5 repliesSuperseded
v1514 patches2 repliesSuperseded
v1411 patches3 repliesSuperseded
v1311 patches7 repliesSuperseded
v1211 patches14 repliesSuperseded
v1111 patches0 repliesSuperseded
v1010 patches11 repliesSuperseded
v99 patches16 repliesSuperseded
v88 patches5 repliesSuperseded
v78 patches1 replySuperseded
v68 patches2 repliesSuperseded
v58 patches0 repliesSuperseded
v4 posting 2/28 patches11 repliesSuperseded
v4 posting 1/28 patches6 repliesSuperseded
v38 patches0 repliesSuperseded
v27 patches5 repliesSuperseded
v17 patches0 repliesSuperseded

Changes in v18 from the cover letter

- Apply style change on gpio-uniphier as suggested by Masahiro Yamada

Patches in v18 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/14bitops: Introduce the for_each_set_clump8 macroinclude/asm-generic/bitops/find.h include/linux/bitmap.h include/linux/bitops.h +1 more+71 -02 replies
2/14lib/test_bitmap.c: Add for_each_set_clump8 test caseslib/test_bitmap.c+65 -00 replies
3/14gpio: 104-dio-48e: Utilize for_each_set_clump8 macrodrivers/gpio/gpio-104-dio-48e.c+21 -520 replies
4/14gpio: 104-idi-48: Utilize for_each_set_clump8 macrodrivers/gpio/gpio-104-idi-48.c+7 -290 replies
5/14gpio: gpio-mm: Utilize for_each_set_clump8 macrodrivers/gpio/gpio-gpio-mm.c+21 -520 replies
6/14gpio: ws16c48: Utilize for_each_set_clump8 macrodrivers/gpio/gpio-ws16c48.c+20 -530 replies
7/14gpio: pci-idio-16: Utilize for_each_set_clump8 macrodrivers/gpio/gpio-pci-idio-16.c+27 -480 replies
8/14gpio: pcie-idio-24: Utilize for_each_set_clump8 macrodrivers/gpio/gpio-pcie-idio-24.c+40 -690 replies
9/14gpio: uniphier: Utilize for_each_set_clump8 macrodrivers/gpio/gpio-uniphier.c+3 -100 replies
10/14gpio: 74x164: Utilize the for_each_set_clump8 macrodrivers/gpio/gpio-74x164.c+9 -101 reply
11/14thermal: intel: intel_soc_dts_iosf: Utilize for_each_set_clump8 macrodrivers/thermal/intel/intel_soc_dts_iosf.c drivers/thermal/intel/intel_soc_dts_iosf.h+18 -150 replies
12/14gpio: pisosr: Utilize the for_each_set_clump8 macrodrivers/gpio/gpio-pisosr.c+6 -60 replies
13/14gpio: max3191x: Utilize the for_each_set_clump8 macrodrivers/gpio/gpio-max3191x.c+10 -90 replies
14/14gpio: pca953x: Utilize the for_each_set_clump8 macrodrivers/gpio/gpio-pca953x.c+7 -101 reply

Reviews trailers per patch

7 of 14 patches have a Reviewed-by or Acked-by.

PatchAndrew MortonAndy ShevchenkoLinus Walleij
1/14T-b
2/14A-b R-b R-b
3/14R-b
4/14R-b
5/14R-b
6/14R-b
7/14R-b
8/14R-b
9/14
10/14T-b
11/14
12/14
13/14
14/14T-b

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes. Scroll the table sideways for all 3 reviewers.

Read the v18 thread

Cover letter [PATCH v18 00/14] Introduce the for_each_set_clump8 macro

Changes in v18:
- Apply style change on gpio-uniphier as suggested by Masahiro Yamada

While adding GPIO get_multiple/set_multiple callback support for various drivers, I noticed a pattern of looping manifesting that would be useful standardized as a macro.

This patchset introduces the for_each_set_clump8 macro and utilizes it in several GPIO drivers. The for_each_set_clump macro8 facilitates a for-loop syntax that iterates over a memory region entire groups of set bits at a time.

For example, suppose you would like to iterate over a 32-bit integer 8 bits at a time, skipping over 8-bit groups with no set bit, where XXXXXXXX represents the current 8-bit group:

    Example:        10111110 00000000 11111111 00110011
    First loop:     10111110 00000000 11111111 XXXXXXXX
    Second loop:    10111110 00000000 XXXXXXXX 00110011
    Third loop:     XXXXXXXX 00000000 11111111 00110011

Each iteration of the loop returns the next 8-bit group that has at least one set bit.

The for_each_set_clump8 macro has four parameters:

* start: set to the bit offset of the current clump
* clump: set to the current clump value
* bits: bitmap to search within
* size: bitmap size in number of bits

In this version of the patchset, the for_each_set_clump macro has been reimplemented and simplified based on the suggestions provided by Rasmus Villemoes and Andy Shevchenko in the version 4 submission.

In particular, the function of the for_each_set_clump macro has been restricted to handle only 8-bit clumps; the drivers that use the for_each_set_clump macro only handle 8-bit ports so a generic for_each_set_clump implementation is not necessary. Thus, a solution for large clumps (i.e. those larger than the width of a bitmap word) can be postponed until a driver appears that actually requires such a generic for_each_set_clump implementation.

For what it's worth, a semi-generic for_each_set_clump (i.e. for clumps smaller than the width of a bitmap word) can be implemented by simply replacing the hardcoded '8' and '0xFF' instances with respective variables. I have not yet had a need for such an implementation, and since it falls short of a true generic for_each_set_clump function, I have decided to forgo such an implementation for now.

In addition, the bitmap_get_value8 and bitmap_set_value8 functions are introduced to get and set 8-bit values respectively. Their use is based on the behavior suggested in the patchset version 4 review.

William Breathitt Gray (14):
bitops: Introduce the for_each_set_clump8 macro lib/test_bitmap.c: Add for_each_set_clump8 test cases
gpio: 104-dio-48e: Utilize for_each_set_clump8 macro
gpio: 104-idi-48: Utilize for_each_set_clump8 macro
gpio: gpio-mm: Utilize for_each_set_clump8 macro
gpio: ws16c48: Utilize for_each_set_clump8 macro
gpio: pci-idio-16: Utilize for_each_set_clump8 macro
gpio: pcie-idio-24: Utilize for_each_set_clump8 macro
gpio: uniphier: Utilize for_each_set_clump8 macro
gpio: 74x164: Utilize the for_each_set_clump8 macro
thermal: intel: intel_soc_dts_iosf: Utilize for_each_set_clump8 macro
gpio: pisosr: Utilize the for_each_set_clump8 macro
gpio: max3191x: Utilize the for_each_set_clump8 macro
gpio: pca953x: Utilize the for_each_set_clump8 macro

 drivers/gpio/gpio-104-dio-48e.c            |  73 ++++----------
 drivers/gpio/gpio-104-idi-48.c             |  36 ++-----
 drivers/gpio/gpio-74x164.c                 |  19 ++--
 drivers/gpio/gpio-gpio-mm.c                |  73 ++++----------
 drivers/gpio/gpio-max3191x.c               |  19 ++--
 drivers/gpio/gpio-pca953x.c                |  17 ++--
 drivers/gpio/gpio-pci-idio-16.c            |  75 +++++---------
 drivers/gpio/gpio-pcie-idio-24.c           | 109 ++++++++-------------
 drivers/gpio/gpio-pisosr.c                 |  12 +--
 drivers/gpio/gpio-uniphier.c               |  13 +--
 drivers/gpio/gpio-ws16c48.c                |  73 ++++----------
 drivers/thermal/intel/intel_soc_dts_iosf.c |  31 +++---
 drivers/thermal/intel/intel_soc_dts_iosf.h |   2 -
 include/asm-generic/bitops/find.h          |  17 ++++
 include/linux/bitmap.h                     |  35 +++++++
 include/linux/bitops.h                     |   5 +
 lib/find_bit.c                             |  14 +++
 lib/test_bitmap.c                          |  65 ++++++++++++
 18 files changed, 325 insertions(+), 363 deletions(-)

base-commit: 8c550e94b8835170593169a45b5ba30d3fc72a70

Signature · 1 line
2.23.0