git: ef2a82120fc1 - stable/14 - LinuxKPI: Add min_not_zero() to linux/minmax.h

From: Vladimir Kondratyev <wulf_at_FreeBSD.org>
Date: Thu, 01 Aug 2024 22:27:37 UTC
The branch stable/14 has been updated by wulf:

URL: https://cgit.FreeBSD.org/src/commit/?id=ef2a82120fc1a742236368d527bab8e864c40e60

commit ef2a82120fc1a742236368d527bab8e864c40e60
Author:     Vladimir Kondratyev <wulf@FreeBSD.org>
AuthorDate: 2024-06-06 20:42:06 +0000
Commit:     Vladimir Kondratyev <wulf@FreeBSD.org>
CommitDate: 2024-08-01 21:09:39 +0000

    LinuxKPI: Add min_not_zero() to linux/minmax.h
    
    It returns the minimum that is not zero, except both equals to zero.
    
    Sponsored by:   Serenity Cyber Security, LLC
    MFC after:      1 week
    Reviewed by:    bz, emaste, ssaxena
    Differential Revision:  https://reviews.freebsd.org/D45450
    Differential Revision:  https://reviews.freebsd.org/D45451
    
    (cherry picked from commit 07c7c41ca1e31c20c2e2d8fb68c148f521831e4d)
---
 sys/compat/linuxkpi/common/include/linux/minmax.h | 7 +++++++
 sys/dev/bnxt/bnxt_re/bnxt_re.h                    | 2 ++
 2 files changed, 9 insertions(+)

diff --git a/sys/compat/linuxkpi/common/include/linux/minmax.h b/sys/compat/linuxkpi/common/include/linux/minmax.h
index 465607371b9b..d48958f0899f 100644
--- a/sys/compat/linuxkpi/common/include/linux/minmax.h
+++ b/sys/compat/linuxkpi/common/include/linux/minmax.h
@@ -7,6 +7,7 @@
  * Copyright (c) 2014-2015 François Tigeot
  * Copyright (c) 2015 Hans Petter Selasky <hselasky@FreeBSD.org>
  * Copyright (c) 2016 Matt Macy <mmacy@FreeBSD.org>
+ * Copyright (c) 2023 Serenity Cyber Security, LLC.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -43,6 +44,12 @@
 #define	min3(a, b, c)	min(a, min(b, c))
 #define	max3(a, b, c)	max(a, max(b, c))
 
+#define min_not_zero(x, y) ({						\
+	__typeof(x) __min1 = (x);					\
+	__typeof(y) __min2 = (y);					\
+	__min1 == 0 ? __min2 : ((__min2 == 0) ? __min1 : min(__min1, __min2));\
+})
+
 #define	min_t(type, x, y) ({			\
 	type __min1 = (x);			\
 	type __min2 = (y);			\
diff --git a/sys/dev/bnxt/bnxt_re/bnxt_re.h b/sys/dev/bnxt/bnxt_re/bnxt_re.h
index 3bf0bbeb1061..56b3c8c0488c 100644
--- a/sys/dev/bnxt/bnxt_re/bnxt_re.h
+++ b/sys/dev/bnxt/bnxt_re/bnxt_re.h
@@ -100,10 +100,12 @@
  * @x: value1
  * @y: value2
  */
+#ifndef min_not_zero
 #define min_not_zero(x, y) ({			\
 	typeof(x) __x = (x);			\
 	typeof(y) __y = (y);			\
 	__x == 0 ? __y : ((__y == 0) ? __x : min(__x, __y)); })
+#endif
 
 struct ib_mr_init_attr {
 	int		max_reg_descriptors;