[PATCH] powerpc: replace ternary operator with min()

Subsystems: linux for powerpc (32-bit and 64-bit), the rest

STALE1408d

4 messages, 4 authors, 2022-11-02 · open the first message on its own page

[PATCH] powerpc: replace ternary operator with min()

From: KaiLong Wang <hidden>
Date: 2022-10-23 12:48:14

Fix the following coccicheck warning:

arch/powerpc/xmon/xmon.c:2987: WARNING opportunity for min()
arch/powerpc/xmon/xmon.c:2583: WARNING opportunity for min()

Signed-off-by: KaiLong Wang <redacted>
---
 arch/powerpc/xmon/xmon.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c
index f51c882bf902..a7751cd2cc9d 100644
--- a/arch/powerpc/xmon/xmon.c
+++ b/arch/powerpc/xmon/xmon.c
@@ -2580,7 +2580,7 @@ static void xmon_rawdump (unsigned long adrs, long ndump)
 	unsigned char temp[16];
 
 	for (n = ndump; n > 0;) {
-		r = n < 16? n: 16;
+		r = min(n, 16);
 		nr = mread(adrs, temp, r);
 		adrs += nr;
 		for (m = 0; m < r; ++m) {
@@ -2984,7 +2984,7 @@ prdump(unsigned long adrs, long ndump)
 	for (n = ndump; n > 0;) {
 		printf(REG, adrs);
 		putchar(' ');
-		r = n < 16? n: 16;
+		r = min(n, 16);
 		nr = mread(adrs, temp, r);
 		adrs += nr;
 		for (m = 0; m < r; ++m) {
-- 
2.25.1

Re: [PATCH] powerpc: replace ternary operator with min()

From: Russell Currey <hidden>
Date: 2022-10-24 04:33:42

On Sun, 2022-10-23 at 20:44 +0800, KaiLong Wang wrote:
Fix the following coccicheck warning:

arch/powerpc/xmon/xmon.c:2987: WARNING opportunity for min()
arch/powerpc/xmon/xmon.c:2583: WARNING opportunity for min()

Signed-off-by: KaiLong Wang <redacted>
Hello,

This fails to compile on some platforms/compilers since n is a long and
16 is an int, expanding to:

r = __builtin_choose_expr(
	((!!(sizeof((typeof(n) *)1 == (typeof(16) *)1))) &&
	 ((sizeof(int) ==
	   sizeof(*(8 ? ((void *)((long)(n)*0l)) : (int *)8))) &&
	  (sizeof(int) ==
	   sizeof(*(8 ? ((void *)((long)(16) * 0l)) :
			(int *)8))))),
	((n) < (16) ? (n) : (16)), ({
		typeof(n) __UNIQUE_ID___x0 = (n);
		typeof(16) __UNIQUE_ID___y1 = (16);
		((__UNIQUE_ID___x0) < (__UNIQUE_ID___y1) ?
			 (__UNIQUE_ID___x0) :
			 (__UNIQUE_ID___y1));
	}));

Here's the full build failure as found by snowpatch:
https://github.com/ruscur/linux-ci/actions/runs/3308880562/jobs/5461579048#step:4:89

You should use min_t(long, n, 16) instead.

- Russell
quoted hunk
---
 arch/powerpc/xmon/xmon.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c
index f51c882bf902..a7751cd2cc9d 100644
--- a/arch/powerpc/xmon/xmon.c
+++ b/arch/powerpc/xmon/xmon.c
@@ -2580,7 +2580,7 @@ static void xmon_rawdump (unsigned long adrs,
long ndump)
        unsigned char temp[16];
 
        for (n = ndump; n > 0;) {
-               r = n < 16? n: 16;
+               r = min(n, 16);
                nr = mread(adrs, temp, r);
                adrs += nr;
                for (m = 0; m < r; ++m) {
@@ -2984,7 +2984,7 @@ prdump(unsigned long adrs, long ndump)
        for (n = ndump; n > 0;) {
                printf(REG, adrs);
                putchar(' ');
-               r = n < 16? n: 16;
+               r = min(n, 16);
                nr = mread(adrs, temp, r);
                adrs += nr;
                for (m = 0; m < r; ++m) {

Re: [PATCH] powerpc: replace ternary operator with min()

From: kernel test robot <hidden>
Date: 2022-10-26 12:09:18

Hi KaiLong,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on powerpc/next]
[also build test ERROR on linus/master v6.1-rc2 next-20221026]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/KaiLong-Wang/powerpc-replace-ternary-operator-with-min/20221023-204906
base:   https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git next
patch link:    https://lore.kernel.org/r/4ebda26c.346.18404df6852.Coremail.wangkailong%40jari.cn
patch subject: [PATCH] powerpc: replace ternary operator with min()
config: powerpc-ppc64e_defconfig (attached as .config)
compiler: clang version 16.0.0 (https://github.com/llvm/llvm-project 791a7ae1ba3efd6bca96338e10ffde557ba83920)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # install powerpc cross compiling tool for clang build
        # apt-get install binutils-powerpc-linux-gnu
        # https://github.com/intel-lab-lkp/linux/commit/51fa624eb9fa01ea67de462263913ab61a68cbc5
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review KaiLong-Wang/powerpc-replace-ternary-operator-with-min/20221023-204906
        git checkout 51fa624eb9fa01ea67de462263913ab61a68cbc5
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=powerpc SHELL=/bin/bash

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot [off-list ref]

All errors (new ones prefixed by >>):
quoted
arch/powerpc/xmon/xmon.c:2583:7: error: comparison of distinct pointer types ('typeof (n) *' (aka 'long *') and 'typeof (16) *' (aka 'int *')) [-Werror,-Wcompare-distinct-pointer-types]
                   r = min(n, 16);
                       ^~~~~~~~~~
   include/linux/minmax.h:45:19: note: expanded from macro 'min'
   #define min(x, y)       __careful_cmp(x, y, <)
                           ^~~~~~~~~~~~~~~~~~~~~~
   include/linux/minmax.h:36:24: note: expanded from macro '__careful_cmp'
           __builtin_choose_expr(__safe_cmp(x, y), \
                                 ^~~~~~~~~~~~~~~~
   include/linux/minmax.h:26:4: note: expanded from macro '__safe_cmp'
                   (__typecheck(x, y) && __no_side_effects(x, y))
                    ^~~~~~~~~~~~~~~~~
   include/linux/minmax.h:20:28: note: expanded from macro '__typecheck'
           (!!(sizeof((typeof(x) *)1 == (typeof(y) *)1)))
                      ~~~~~~~~~~~~~~ ^  ~~~~~~~~~~~~~~
   arch/powerpc/xmon/xmon.c:2987:7: error: comparison of distinct pointer types ('typeof (n) *' (aka 'long *') and 'typeof (16) *' (aka 'int *')) [-Werror,-Wcompare-distinct-pointer-types]
                   r = min(n, 16);
                       ^~~~~~~~~~
   include/linux/minmax.h:45:19: note: expanded from macro 'min'
   #define min(x, y)       __careful_cmp(x, y, <)
                           ^~~~~~~~~~~~~~~~~~~~~~
   include/linux/minmax.h:36:24: note: expanded from macro '__careful_cmp'
           __builtin_choose_expr(__safe_cmp(x, y), \
                                 ^~~~~~~~~~~~~~~~
   include/linux/minmax.h:26:4: note: expanded from macro '__safe_cmp'
                   (__typecheck(x, y) && __no_side_effects(x, y))
                    ^~~~~~~~~~~~~~~~~
   include/linux/minmax.h:20:28: note: expanded from macro '__typecheck'
           (!!(sizeof((typeof(x) *)1 == (typeof(y) *)1)))
                      ~~~~~~~~~~~~~~ ^  ~~~~~~~~~~~~~~
   2 errors generated.


vim +2583 arch/powerpc/xmon/xmon.c

  2576	
  2577	static void xmon_rawdump (unsigned long adrs, long ndump)
  2578	{
  2579		long n, m, r, nr;
  2580		unsigned char temp[16];
  2581	
  2582		for (n = ndump; n > 0;) {
2583			r = min(n, 16);
  2584			nr = mread(adrs, temp, r);
  2585			adrs += nr;
  2586			for (m = 0; m < r; ++m) {
  2587				if (m < nr)
  2588					printf("%.2x", temp[m]);
  2589				else
  2590					printf("%s", fault_chars[fault_type]);
  2591			}
  2592			n -= r;
  2593			if (nr < r)
  2594				break;
  2595		}
  2596		printf("\n");
  2597	}
  2598	

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp

Re: [PATCH] powerpc: replace ternary operator with min()

From: Christophe Leroy <hidden>
Date: 2022-11-02 09:25:29


Le 24/10/2022 à 06:33, Russell Currey a écrit :
On Sun, 2022-10-23 at 20:44 +0800, KaiLong Wang wrote:
quoted
Fix the following coccicheck warning:

arch/powerpc/xmon/xmon.c:2987: WARNING opportunity for min()
arch/powerpc/xmon/xmon.c:2583: WARNING opportunity for min()

Signed-off-by: KaiLong Wang <redacted>
Hello,

This fails to compile on some platforms/compilers since n is a long and
16 is an int, expanding to:

r = __builtin_choose_expr(
	((!!(sizeof((typeof(n) *)1 == (typeof(16) *)1))) &&
	 ((sizeof(int) ==
	   sizeof(*(8 ? ((void *)((long)(n)*0l)) : (int *)8))) &&
	  (sizeof(int) ==
	   sizeof(*(8 ? ((void *)((long)(16) * 0l)) :
			(int *)8))))),
	((n) < (16) ? (n) : (16)), ({
		typeof(n) __UNIQUE_ID___x0 = (n);
		typeof(16) __UNIQUE_ID___y1 = (16);
		((__UNIQUE_ID___x0) < (__UNIQUE_ID___y1) ?
			 (__UNIQUE_ID___x0) :
			 (__UNIQUE_ID___y1));
	}));

Here's the full build failure as found by snowpatch:
https://github.com/ruscur/linux-ci/actions/runs/3308880562/jobs/5461579048#step:4:89

You should use min_t(long, n, 16) instead.
Wouldn't it work with 16L instead of 16 :

	min(n, 16L)

Christophe
- Russell
quoted
---
  arch/powerpc/xmon/xmon.c | 4 ++--
  1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c
index f51c882bf902..a7751cd2cc9d 100644
--- a/arch/powerpc/xmon/xmon.c
+++ b/arch/powerpc/xmon/xmon.c
@@ -2580,7 +2580,7 @@ static void xmon_rawdump (unsigned long adrs,
long ndump)
         unsigned char temp[16];
  
         for (n = ndump; n > 0;) {
-               r = n < 16? n: 16;
+               r = min(n, 16);
                 nr = mread(adrs, temp, r);
                 adrs += nr;
                 for (m = 0; m < r; ++m) {
@@ -2984,7 +2984,7 @@ prdump(unsigned long adrs, long ndump)
         for (n = ndump; n > 0;) {
                 printf(REG, adrs);
                 putchar(' ');
-               r = n < 16? n: 16;
+               r = min(n, 16);
                 nr = mread(adrs, temp, r);
                 adrs += nr;
                 for (m = 0; m < r; ++m) {
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help