All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/5] Introduce the for_each_set_clump macro
@ 2020-12-26  6:41 ` Syed Nayyar Waris
  0 siblings, 0 replies; 50+ messages in thread
From: Syed Nayyar Waris @ 2020-12-26  6:41 UTC (permalink / raw)
  To: linus.walleij
  Cc: andriy.shevchenko, vilhelm.gray, michal.simek, arnd, rrichter,
	linus.walleij, bgolaszewski, yamada.masahiro, akpm, rui.zhang,
	daniel.lezcano, amit.kucheria, linux-arch, linux-gpio,
	linux-kernel, linux-arm-kernel, linux-pm

Hello Linus,

Since this patchset primarily affects GPIO drivers, would you like
to pick it up through your GPIO tree?

(Note: Patchset resent with the new macro and relevant
functions shifted to a new header clump_bits.h [Linus Torvalds])

Michal,
What do you think of [PATCH 5/5]? Is the conditional check needed? And
also does returning -EINVAL look good?

This patchset introduces a new generic version of for_each_set_clump.
The previous version of for_each_set_clump8 used a fixed size 8-bit
clump, but the new generic version can work with clump of any size but
less than or equal to BITS_PER_LONG. The patchset utilizes the new macro
in several GPIO drivers.

The earlier 8-bit for_each_set_clump8 facilitated 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.

But with the new for_each_set_clump the clump size can be different from 8 bits.
Moreover, the clump can be split at word boundary in situations where word
size is not multiple of clump size. Following are examples showing the working
of new macro for clump sizes of 24 bits and 6 bits.

Example 1:
clump size: 24 bits, Number of clumps (or ports): 10
bitmap stores the bit information from where successive clumps are retrieved.

     /* bitmap memory region */
        0x00aa0000ff000000;  /* Most significant bits */
        0xaaaaaa0000ff0000;
        0x000000aa000000aa;
        0xbbbbabcdeffedcba;  /* Least significant bits */

Different iterations of for_each_set_clump:-
'offset' is the bit position and 'clump' is the 24 bit clump from the
above bitmap.
Iteration first:        offset: 0 clump: 0xfedcba
Iteration second:       offset: 24 clump: 0xabcdef
Iteration third:        offset: 48 clump: 0xaabbbb
Iteration fourth:       offset: 96 clump: 0xaa
Iteration fifth:        offset: 144 clump: 0xff
Iteration sixth:        offset: 168 clump: 0xaaaaaa
Iteration seventh:      offset: 216 clump: 0xff
Loop breaks because in the end the remaining bits (0x00aa) size was less
than clump size of 24 bits.

In above example it can be seen that in iteration third, the 24 bit clump
that was retrieved was split between bitmap[0] and bitmap[1]. This example
also shows that 24 bit zeroes if present in between, were skipped (preserving
the previous for_each_set_macro8 behaviour).

Example 2:
clump size = 6 bits, Number of clumps (or ports) = 3.

     /* bitmap memory region */
        0x00aa0000ff000000;  /* Most significant bits */
        0xaaaaaa0000ff0000;
        0x0f00000000000000;
        0x0000000000000ac0;  /* Least significant bits */

Different iterations of for_each_set_clump:
'offset' is the bit position and 'clump' is the 6 bit clump from the
above bitmap.
Iteration first:        offset: 6 clump: 0x2b
Loop breaks because 6 * 3 = 18 bits traversed in bitmap.
Here 6 * 3 is clump size * no. of clumps.

GCC gives warning in bitmap_set_value(): https://godbolt.org/z/rjx34r
Add explicit check to see if the value being written into the bitmap
does not fall outside the bitmap.
The situation that it is falling outside would never be possible in the
code because the boundaries are required to be correct before the
function is called. The responsibility is on the caller for ensuring the
boundaries are correct.
The code change is simply to silence the GCC warning messages
because GCC is not aware that the boundaries have already been checked.
As such, we're better off using __builtin_unreachable() here because we
can avoid the latency of the conditional check entirely.

Syed Nayyar Waris (5):
  clump_bits: Introduce the for_each_set_clump macro
  lib/test_bitmap.c: Add for_each_set_clump test cases
  gpio: thunderx: Utilize for_each_set_clump macro
  gpio: xilinx: Utilize generic bitmap_get_value and _set_value
  gpio: xilinx: Add extra check if sum of widths exceed 64

 drivers/gpio/clump_bits.h    | 101 ++++++++++++++++++++++++
 drivers/gpio/gpio-thunderx.c |  12 ++-
 drivers/gpio/gpio-xilinx.c   |  72 ++++++++++--------
 lib/test_bitmap.c            | 144 +++++++++++++++++++++++++++++++++++
 4 files changed, 292 insertions(+), 37 deletions(-)
 create mode 100644 drivers/gpio/clump_bits.h


base-commit: bbe2ba04c5a92a49db8a42c850a5a2f6481e47eb
-- 
2.29.0


^ permalink raw reply	[flat|nested] 50+ messages in thread
* Re: [PATCH 4/5] gpio: xilinx: Utilize generic bitmap_get_value and _set_value
@ 2020-12-26 15:13 kernel test robot
  0 siblings, 0 replies; 50+ messages in thread
From: kernel test robot @ 2020-12-26 15:13 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 6908 bytes --]

CC: kbuild-all(a)lists.01.org
In-Reply-To: <5041c8cfc423f046ca9cf4f8f0a8bd03552ab6ea.1608963095.git.syednwaris@gmail.com>
References: <5041c8cfc423f046ca9cf4f8f0a8bd03552ab6ea.1608963095.git.syednwaris@gmail.com>
TO: Syed Nayyar Waris <syednwaris@gmail.com>

Hi Syed,

I love your patch! Perhaps something to improve:

[auto build test WARNING on bbe2ba04c5a92a49db8a42c850a5a2f6481e47eb]

url:    https://github.com/0day-ci/linux/commits/Syed-Nayyar-Waris/Introduce-the-for_each_set_clump-macro/20201226-144926
base:    bbe2ba04c5a92a49db8a42c850a5a2f6481e47eb
:::::: branch date: 8 hours ago
:::::: commit date: 8 hours ago
config: mips-randconfig-s032-20201226 (attached as .config)
compiler: mips64-linux-gcc (GCC) 9.3.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # apt-get install sparse
        # sparse version: v0.6.3-184-g1b896707-dirty
        # https://github.com/0day-ci/linux/commit/668f2f620cce361abead957de41153c84fbed6c9
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Syed-Nayyar-Waris/Introduce-the-for_each_set_clump-macro/20201226-144926
        git checkout 668f2f620cce361abead957de41153c84fbed6c9
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=mips 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>


"sparse warnings: (new ones prefixed by >>)"
   command-line: note: in included file:
   builtin:1:9: sparse: sparse: preprocessor token __ATOMIC_ACQUIRE redefined
   builtin:0:0: sparse: this was the original definition
   builtin:1:9: sparse: sparse: preprocessor token __ATOMIC_SEQ_CST redefined
   builtin:0:0: sparse: this was the original definition
   builtin:1:9: sparse: sparse: preprocessor token __ATOMIC_ACQ_REL redefined
   builtin:0:0: sparse: this was the original definition
   builtin:1:9: sparse: sparse: preprocessor token __ATOMIC_RELEASE redefined
   builtin:0:0: sparse: this was the original definition
   drivers/gpio/gpio-xilinx.c: note: in included file:
>> include/../drivers/gpio/clump_bits.h:48:30: sparse: sparse: invalid access past the end of 'new' (8 8)
   include/../drivers/gpio/clump_bits.h:49:63: sparse: sparse: shift too big (64) for type unsigned long

vim +/new +48 include/../drivers/gpio/clump_bits.h

d14f564f0d6c963 Syed Nayyar Waris 2020-12-26   5  
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26   6  /**
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26   7   * find_next_clump - find next clump with set bits in a memory region
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26   8   * @clump: location to store copy of found clump
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26   9   * @addr: address to base the search on
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  10   * @size: bitmap size in number of bits
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  11   * @offset: bit offset at which to start searching
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  12   * @clump_size: clump size in bits
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  13   *
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  14   * Returns the bit offset for the next set clump; the found clump value is
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  15   * copied to the location pointed by @clump. If no bits are set, returns @size.
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  16   */
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  17  extern unsigned long find_next_clump(unsigned long *clump,
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  18  				      const unsigned long *addr,
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  19  				      unsigned long size, unsigned long offset,
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  20  				      unsigned long clump_size);
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  21  
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  22  #define find_first_clump(clump, bits, size, clump_size) \
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  23  	find_next_clump((clump), (bits), (size), 0, (clump_size))
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  24  
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  25  /**
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  26   * bitmap_get_value - get a value of n-bits from the memory region
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  27   * @map: address to the bitmap memory region
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  28   * @start: bit offset of the n-bit value
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  29   * @nbits: size of value in bits (must be between 1 and BITS_PER_LONG inclusive).
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  30   *
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  31   * Returns value of nbits located at the @start bit offset within the @map
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  32   * memory region.
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  33   */
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  34  static inline unsigned long bitmap_get_value(const unsigned long *map,
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  35  					      unsigned long start,
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  36  					      unsigned long nbits)
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  37  {
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  38  	const size_t index = BIT_WORD(start);
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  39  	const unsigned long offset = start % BITS_PER_LONG;
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  40  	const unsigned long ceiling = round_up(start + 1, BITS_PER_LONG);
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  41  	const unsigned long space = ceiling - start;
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  42  	unsigned long value_low, value_high;
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  43  
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  44  	if (space >= nbits)
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  45  		return (map[index] >> offset) & GENMASK(nbits - 1, 0);
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  46  	else {
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  47  		value_low = map[index] & BITMAP_FIRST_WORD_MASK(start);
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26 @48  		value_high = map[index + 1] & BITMAP_LAST_WORD_MASK(start + nbits);
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  49  		return (value_low >> offset) | (value_high << space);
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  50  	}
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  51  }
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  52  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 26254 bytes --]

^ permalink raw reply	[flat|nested] 50+ messages in thread
* Re: [PATCH 4/5] gpio: xilinx: Utilize generic bitmap_get_value and _set_value
@ 2020-12-26 15:24 kernel test robot
  0 siblings, 0 replies; 50+ messages in thread
From: kernel test robot @ 2020-12-26 15:24 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 4889 bytes --]

CC: kbuild-all(a)lists.01.org
In-Reply-To: <5041c8cfc423f046ca9cf4f8f0a8bd03552ab6ea.1608963095.git.syednwaris@gmail.com>
References: <5041c8cfc423f046ca9cf4f8f0a8bd03552ab6ea.1608963095.git.syednwaris@gmail.com>
TO: Syed Nayyar Waris <syednwaris@gmail.com>

Hi Syed,

I love your patch! Perhaps something to improve:

[auto build test WARNING on bbe2ba04c5a92a49db8a42c850a5a2f6481e47eb]

url:    https://github.com/0day-ci/linux/commits/Syed-Nayyar-Waris/Introduce-the-for_each_set_clump-macro/20201226-144926
base:    bbe2ba04c5a92a49db8a42c850a5a2f6481e47eb
:::::: branch date: 9 hours ago
:::::: commit date: 9 hours ago
config: i386-randconfig-s002-20201226 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
reproduce:
        # apt-get install sparse
        # sparse version: v0.6.3-184-g1b896707-dirty
        # https://github.com/0day-ci/linux/commit/668f2f620cce361abead957de41153c84fbed6c9
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Syed-Nayyar-Waris/Introduce-the-for_each_set_clump-macro/20201226-144926
        git checkout 668f2f620cce361abead957de41153c84fbed6c9
        # save the attached .config to linux build tree
        make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=i386 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>


"sparse warnings: (new ones prefixed by >>)"
   drivers/gpio/gpio-xilinx.c: note: in included file:
>> include/../drivers/gpio/clump_bits.h:84:44: sparse: sparse: shift too big (32) for type unsigned long
   include/../drivers/gpio/clump_bits.h:49:63: sparse: sparse: shift too big (32) for type unsigned long

vim +84 include/../drivers/gpio/clump_bits.h

d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  52  
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  53  /**
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  54   * bitmap_set_value - set value within a memory region
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  55   * @map: address to the bitmap memory region
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  56   * @nbits: size of map in bits
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  57   * @value: value of clump
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  58   * @value_width: size of value in bits (must be between 1 and BITS_PER_LONG inclusive)
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  59   * @start: bit offset of the value
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  60   */
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  61  static inline void bitmap_set_value(unsigned long *map, unsigned long nbits,
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  62  				    unsigned long value, unsigned long value_width,
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  63  				    unsigned long start)
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  64  {
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  65  	const unsigned long index = BIT_WORD(start);
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  66  	const unsigned long length = BIT_WORD(nbits);
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  67  	const unsigned long offset = start % BITS_PER_LONG;
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  68  	const unsigned long ceiling = round_up(start + 1, BITS_PER_LONG);
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  69  	const unsigned long space = ceiling - start;
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  70  
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  71  	value &= GENMASK(value_width - 1, 0);
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  72  
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  73  	if (space >= value_width) {
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  74  		map[index] &= ~(GENMASK(value_width - 1, 0) << offset);
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  75  		map[index] |= value << offset;
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  76  	} else {
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  77  		map[index + 0] &= ~BITMAP_FIRST_WORD_MASK(start);
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  78  		map[index + 0] |= value << offset;
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  79  
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  80  		if (index + 1 >= length)
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  81  			__builtin_unreachable();
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  82  
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  83  		map[index + 1] &= ~BITMAP_LAST_WORD_MASK(start + value_width);
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26 @84  		map[index + 1] |= value >> space;
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  85  	}
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  86  }
d14f564f0d6c963 Syed Nayyar Waris 2020-12-26  87  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 32854 bytes --]

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

end of thread, other threads:[~2021-02-07  4:20 UTC | newest]

Thread overview: 50+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-12-26  6:41 [PATCH 0/5] Introduce the for_each_set_clump macro Syed Nayyar Waris
2020-12-26  6:41 ` Syed Nayyar Waris
2020-12-26  6:42 ` [PATCH 1/5] clump_bits: " Syed Nayyar Waris
2020-12-26  6:42   ` Syed Nayyar Waris
2020-12-27 22:03   ` Arnd Bergmann
2020-12-27 22:03     ` Arnd Bergmann
2020-12-28 12:10     ` William Breathitt Gray
2020-12-28 12:10       ` William Breathitt Gray
2020-12-26  6:43 ` [PATCH 2/5] lib/test_bitmap.c: Add for_each_set_clump test cases Syed Nayyar Waris
2020-12-26  6:43   ` Syed Nayyar Waris
2020-12-26 14:43   ` kernel test robot
2020-12-26 14:48   ` kernel test robot
2020-12-26 15:03   ` kernel test robot
     [not found]   ` <CAHp75VcSsfDKY3w4ufZktXzRB=GiObAV6voPfmeAHcbdwX0uqg@mail.gmail.com>
2021-02-04  8:55     ` Syed Nayyar Waris
2021-02-04  8:55       ` Syed Nayyar Waris
2021-02-07  4:18       ` Syed Nayyar Waris
2021-02-07  4:18         ` Syed Nayyar Waris
2020-12-26  6:43 ` [PATCH 3/5] gpio: thunderx: Utilize for_each_set_clump macro Syed Nayyar Waris
2020-12-26  6:43   ` Syed Nayyar Waris
2020-12-26 16:26   ` kernel test robot
2020-12-26 20:18   ` kernel test robot
2020-12-26  6:44 ` [PATCH 4/5] gpio: xilinx: Utilize generic bitmap_get_value and _set_value Syed Nayyar Waris
2020-12-26  6:44   ` Syed Nayyar Waris
2020-12-27 21:29   ` Linus Walleij
2020-12-27 21:29     ` Linus Walleij
2021-01-05 11:04     ` Michal Simek
2021-01-05 11:04       ` Michal Simek
2020-12-29  0:50   ` kernel test robot
2020-12-29  0:50   ` kernel test robot
2020-12-26  6:45 ` [PATCH 5/5] gpio: xilinx: Add extra check if sum of widths exceed 64 Syed Nayyar Waris
2020-12-26  6:45   ` Syed Nayyar Waris
2020-12-26  8:31   ` kernel test robot
2020-12-28 11:58   ` William Breathitt Gray
2020-12-28 11:58     ` William Breathitt Gray
2021-01-05 11:01   ` Michal Simek
2021-01-05 11:01     ` Michal Simek
2020-12-27 21:26 ` [PATCH 0/5] Introduce the for_each_set_clump macro Linus Walleij
2020-12-27 21:26   ` Linus Walleij
2021-01-05 14:19   ` Bartosz Golaszewski
2021-01-05 14:19     ` Bartosz Golaszewski
2021-01-05 14:39     ` Andy Shevchenko
2021-01-05 14:39       ` Andy Shevchenko
2021-01-06  7:27       ` Bartosz Golaszewski
2021-01-06  7:27         ` Bartosz Golaszewski
2021-01-06  8:19         ` William Breathitt Gray
2021-01-06  8:19           ` William Breathitt Gray
2021-01-05 11:09 ` Michal Simek
2021-01-05 11:09   ` Michal Simek
2020-12-26 15:13 [PATCH 4/5] gpio: xilinx: Utilize generic bitmap_get_value and _set_value kernel test robot
2020-12-26 15:24 kernel test robot

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.