This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: atomisp: Replace COMPILATION_ERROR_IF() by static_assert()
Author:  Andy Shevchenko <andriy.shevche...@linux.intel.com>
Date:    Wed Apr 24 21:43:32 2024 +0300

Replace COMPILATION_ERROR_IF() by static_assert().

Signed-off-by: Andy Shevchenko <andriy.shevche...@linux.intel.com>
Link: 
https://lore.kernel.org/r/20240424184421.1737776-3-andriy.shevche...@linux.intel.com
Reviewed-by: Hans de Goede <hdego...@redhat.com>
Signed-off-by: Hans de Goede <hdego...@redhat.com>
Signed-off-by: Hans Verkuil <hverkuil-ci...@xs4all.nl>

 .../base/circbuf/interface/ia_css_circbuf_comm.h   |  6 ++++
 .../pci/hive_isp_css_include/assert_support.h      | 23 -------------
 .../pci/hive_isp_css_include/type_support.h        |  5 +--
 drivers/staging/media/atomisp/pci/ia_css_3a.h      |  4 +++
 drivers/staging/media/atomisp/pci/ia_css_dvs.h     |  4 +++
 .../staging/media/atomisp/pci/ia_css_metadata.h    |  4 +++
 drivers/staging/media/atomisp/pci/ia_css_types.h   |  2 ++
 .../runtime/spctrl/interface/ia_css_spctrl_comm.h  |  4 +++
 drivers/staging/media/atomisp/pci/sh_css.c         | 38 ----------------------
 .../staging/media/atomisp/pci/sh_css_internal.h    | 15 +++++++--
 10 files changed, 40 insertions(+), 65 deletions(-)

---

diff --git 
a/drivers/staging/media/atomisp/pci/base/circbuf/interface/ia_css_circbuf_comm.h
 
b/drivers/staging/media/atomisp/pci/base/circbuf/interface/ia_css_circbuf_comm.h
index 6fa6da859158..b0f20563c3a3 100644
--- 
a/drivers/staging/media/atomisp/pci/base/circbuf/interface/ia_css_circbuf_comm.h
+++ 
b/drivers/staging/media/atomisp/pci/base/circbuf/interface/ia_css_circbuf_comm.h
@@ -16,6 +16,8 @@
 #ifndef _IA_CSS_CIRCBUF_COMM_H
 #define _IA_CSS_CIRCBUF_COMM_H
 
+#include <linux/build_bug.h>
+
 #include <type_support.h>  /* uint8_t, uint32_t */
 
 #define IA_CSS_CIRCBUF_PADDING 1 /* The circular buffer is implemented in 
lock-less manner, wherein
@@ -45,6 +47,8 @@ struct ia_css_circbuf_desc_s {
 #define SIZE_OF_IA_CSS_CIRCBUF_DESC_S_STRUCT                           \
        (4 * sizeof(uint8_t))
 
+static_assert(sizeof(struct ia_css_circbuf_desc_s) == 
SIZE_OF_IA_CSS_CIRCBUF_DESC_S_STRUCT);
+
 /**
  * @brief Data structure for the circular buffer element.
  */
@@ -56,4 +60,6 @@ struct ia_css_circbuf_elem_s {
 #define SIZE_OF_IA_CSS_CIRCBUF_ELEM_S_STRUCT                           \
        (sizeof(uint32_t))
 
+static_assert(sizeof(struct ia_css_circbuf_elem_s) == 
SIZE_OF_IA_CSS_CIRCBUF_ELEM_S_STRUCT);
+
 #endif /*_IA_CSS_CIRCBUF_COMM_H*/
diff --git 
a/drivers/staging/media/atomisp/pci/hive_isp_css_include/assert_support.h 
b/drivers/staging/media/atomisp/pci/hive_isp_css_include/assert_support.h
index 7382c0bbf7cb..d294ac402de8 100644
--- a/drivers/staging/media/atomisp/pci/hive_isp_css_include/assert_support.h
+++ b/drivers/staging/media/atomisp/pci/hive_isp_css_include/assert_support.h
@@ -16,29 +16,6 @@
 #ifndef __ASSERT_SUPPORT_H_INCLUDED__
 #define __ASSERT_SUPPORT_H_INCLUDED__
 
-/**
- * The following macro can help to test the size of a struct at compile
- * time rather than at run-time. It does not work for all compilers; see
- * below.
- *
- * Depending on the value of 'condition', the following macro is expanded to:
- * - condition==true:
- *     an expression containing an array declaration with negative size,
- *     usually resulting in a compilation error
- * - condition==false:
- *     (void) 1; // C statement with no effect
- *
- * example:
- *  COMPILATION_ERROR_IF( sizeof(struct host_sp_queues) != 
SIZE_OF_HOST_SP_QUEUES_STRUCT);
- *
- * verify that the macro indeed triggers a compilation error with your 
compiler:
- *  COMPILATION_ERROR_IF( sizeof(struct host_sp_queues) != (sizeof(struct 
host_sp_queues)+1) );
- *
- * Not all compilers will trigger an error with this macro; use a search 
engine to search for
- * BUILD_BUG_ON to find other methods.
- */
-#define COMPILATION_ERROR_IF(condition) ((void)sizeof(char[1 - 2 * 
!!(condition)]))
-
 /* Compile time assertion */
 #ifndef CT_ASSERT
 #define CT_ASSERT(cnd) ((void)sizeof(char[(cnd) ? 1 :  -1]))
diff --git 
a/drivers/staging/media/atomisp/pci/hive_isp_css_include/type_support.h 
b/drivers/staging/media/atomisp/pci/hive_isp_css_include/type_support.h
index b996ee54d4a5..9a640f18eed9 100644
--- a/drivers/staging/media/atomisp/pci/hive_isp_css_include/type_support.h
+++ b/drivers/staging/media/atomisp/pci/hive_isp_css_include/type_support.h
@@ -33,9 +33,10 @@
 
 #define CHAR_BIT (8)
 
-#include <linux/types.h>
-#include <linux/limits.h>
 #include <linux/errno.h>
+#include <linux/limits.h>
+#include <linux/types.h>
+
 #define HOST_ADDRESS(x) (unsigned long)(x)
 
 #endif /* __TYPE_SUPPORT_H_INCLUDED__ */
diff --git a/drivers/staging/media/atomisp/pci/ia_css_3a.h 
b/drivers/staging/media/atomisp/pci/ia_css_3a.h
index 506910dd5c18..fc2075c7bd01 100644
--- a/drivers/staging/media/atomisp/pci/ia_css_3a.h
+++ b/drivers/staging/media/atomisp/pci/ia_css_3a.h
@@ -20,6 +20,8 @@
  * This file contains types used for 3A statistics
  */
 
+#include <linux/build_bug.h>
+
 #include <math_support.h>
 #include <type_support.h>
 #include "ia_css_types.h"
@@ -80,6 +82,8 @@ struct ia_css_isp_3a_statistics {
         SIZE_OF_IA_CSS_PTR +                                           \
         4 * sizeof(uint32_t))
 
+static_assert(sizeof(struct ia_css_isp_3a_statistics) == 
SIZE_OF_IA_CSS_ISP_3A_STATISTICS_STRUCT);
+
 /* Map with host-side pointers to ISP-format statistics.
  * These pointers can either be copies of ISP data or memory mapped
  * ISP pointers.
diff --git a/drivers/staging/media/atomisp/pci/ia_css_dvs.h 
b/drivers/staging/media/atomisp/pci/ia_css_dvs.h
index 3367dfd64050..41a81561bbef 100644
--- a/drivers/staging/media/atomisp/pci/ia_css_dvs.h
+++ b/drivers/staging/media/atomisp/pci/ia_css_dvs.h
@@ -20,6 +20,8 @@
  * This file contains types for DVS statistics
  */
 
+#include <linux/build_bug.h>
+
 #include <type_support.h>
 #include "ia_css_types.h"
 #include "ia_css_err.h"
@@ -55,6 +57,8 @@ struct ia_css_isp_skc_dvs_statistics;
        ((3 * SIZE_OF_IA_CSS_PTR) +                                     \
         (4 * sizeof(uint32_t)))
 
+static_assert(sizeof(struct ia_css_isp_dvs_statistics) == 
SIZE_OF_IA_CSS_ISP_DVS_STATISTICS_STRUCT);
+
 /* Map with host-side pointers to ISP-format statistics.
  * These pointers can either be copies of ISP data or memory mapped
  * ISP pointers.
diff --git a/drivers/staging/media/atomisp/pci/ia_css_metadata.h 
b/drivers/staging/media/atomisp/pci/ia_css_metadata.h
index 9eb1b76a3b2a..a3e759a3eee7 100644
--- a/drivers/staging/media/atomisp/pci/ia_css_metadata.h
+++ b/drivers/staging/media/atomisp/pci/ia_css_metadata.h
@@ -20,6 +20,8 @@
  * This file contains structure for processing sensor metadata.
  */
 
+#include <linux/build_bug.h>
+
 #include <type_support.h>
 #include "ia_css_types.h"
 #include "ia_css_stream_format.h"
@@ -50,6 +52,8 @@ struct ia_css_metadata {
 
 #define SIZE_OF_IA_CSS_METADATA_STRUCT sizeof(struct ia_css_metadata)
 
+static_assert(sizeof(struct ia_css_metadata) == 
SIZE_OF_IA_CSS_METADATA_STRUCT);
+
 /* @brief Allocate a metadata buffer.
  * @param[in]   metadata_info Metadata info struct, contains details on 
metadata buffers.
  * @return      Pointer of metadata buffer or NULL (if error)
diff --git a/drivers/staging/media/atomisp/pci/ia_css_types.h 
b/drivers/staging/media/atomisp/pci/ia_css_types.h
index 6e34d401f9df..f5df564c86e8 100644
--- a/drivers/staging/media/atomisp/pci/ia_css_types.h
+++ b/drivers/staging/media/atomisp/pci/ia_css_types.h
@@ -84,6 +84,8 @@ struct ia_css_state_memory_offsets;
 /* Virtual address within the CSS address space. */
 typedef u32 ia_css_ptr;
 
+#define SIZE_OF_IA_CSS_PTR             sizeof(uint32_t)
+
 /* Generic resolution structure.
  */
 struct ia_css_resolution {
diff --git 
a/drivers/staging/media/atomisp/pci/runtime/spctrl/interface/ia_css_spctrl_comm.h
 
b/drivers/staging/media/atomisp/pci/runtime/spctrl/interface/ia_css_spctrl_comm.h
index 78e0f3096f60..de68616482f0 100644
--- 
a/drivers/staging/media/atomisp/pci/runtime/spctrl/interface/ia_css_spctrl_comm.h
+++ 
b/drivers/staging/media/atomisp/pci/runtime/spctrl/interface/ia_css_spctrl_comm.h
@@ -16,6 +16,8 @@
 #ifndef __IA_CSS_SPCTRL_COMM_H__
 #define __IA_CSS_SPCTRL_COMM_H__
 
+#include <linux/build_bug.h>
+
 #include <type_support.h>
 
 /* state of SP */
@@ -43,4 +45,6 @@ struct ia_css_sp_init_dmem_cfg {
        (4 * sizeof(uint32_t)) +                \
        (1 * sizeof(sp_ID_t))
 
+static_assert(sizeof(struct ia_css_sp_init_dmem_cfg) == 
SIZE_OF_IA_CSS_SP_INIT_DMEM_CFG_STRUCT);
+
 #endif /* __IA_CSS_SPCTRL_COMM_H__ */
diff --git a/drivers/staging/media/atomisp/pci/sh_css.c 
b/drivers/staging/media/atomisp/pci/sh_css.c
index 42a69b26db01..e2497fc4dfc9 100644
--- a/drivers/staging/media/atomisp/pci/sh_css.c
+++ b/drivers/staging/media/atomisp/pci/sh_css.c
@@ -1345,47 +1345,9 @@ ia_css_init(struct device *dev, const struct ia_css_env 
*env,
 {
        int err;
        ia_css_spctrl_cfg spctrl_cfg;
-
        void (*flush_func)(struct ia_css_acc_fw *fw);
        hrt_data select, enable;
 
-       /*
-        * The C99 standard does not specify the exact object representation of 
structs;
-        * the representation is compiler dependent.
-        *
-        * The structs that are communicated between host and SP/ISP should 
have the
-        * exact same object representation. The compiler that is used to 
compile the
-        * firmware is hivecc.
-        *
-        * To check if a different compiler, used to compile a host 
application, uses
-        * another object representation, macros are defined specifying the 
size of
-        * the structs as expected by the firmware.
-        *
-        * A host application shall verify that a sizeof( ) of the struct is 
equal to
-        * the SIZE_OF_XXX macro of the corresponding struct. If they are not
-        * equal, functionality will break.
-        */
-
-       /* Check struct sh_css_ddr_address_map */
-       COMPILATION_ERROR_IF(sizeof(struct sh_css_ddr_address_map)              
!= SIZE_OF_SH_CSS_DDR_ADDRESS_MAP_STRUCT);
-       /* Check struct host_sp_queues */
-       COMPILATION_ERROR_IF(sizeof(struct host_sp_queues)                      
!= SIZE_OF_HOST_SP_QUEUES_STRUCT);
-       COMPILATION_ERROR_IF(sizeof(struct ia_css_circbuf_desc_s)               
!= SIZE_OF_IA_CSS_CIRCBUF_DESC_S_STRUCT);
-       COMPILATION_ERROR_IF(sizeof(struct ia_css_circbuf_elem_s)               
!= SIZE_OF_IA_CSS_CIRCBUF_ELEM_S_STRUCT);
-
-       /* Check struct host_sp_communication */
-       COMPILATION_ERROR_IF(sizeof(struct host_sp_communication)               
!= SIZE_OF_HOST_SP_COMMUNICATION_STRUCT);
-       COMPILATION_ERROR_IF(sizeof(struct sh_css_event_irq_mask)               
!= SIZE_OF_SH_CSS_EVENT_IRQ_MASK_STRUCT);
-
-       /* Check struct sh_css_hmm_buffer */
-       COMPILATION_ERROR_IF(sizeof(struct sh_css_hmm_buffer)                   
!= SIZE_OF_SH_CSS_HMM_BUFFER_STRUCT);
-       COMPILATION_ERROR_IF(sizeof(struct ia_css_isp_3a_statistics)            
!= SIZE_OF_IA_CSS_ISP_3A_STATISTICS_STRUCT);
-       COMPILATION_ERROR_IF(sizeof(struct ia_css_isp_dvs_statistics)           
!= SIZE_OF_IA_CSS_ISP_DVS_STATISTICS_STRUCT);
-       COMPILATION_ERROR_IF(sizeof(struct ia_css_metadata)                     
!= SIZE_OF_IA_CSS_METADATA_STRUCT);
-
-       /* Check struct ia_css_init_dmem_cfg */
-       COMPILATION_ERROR_IF(sizeof(struct ia_css_sp_init_dmem_cfg)             
!= SIZE_OF_IA_CSS_SP_INIT_DMEM_CFG_STRUCT);
-
        if (!env)
                return -EINVAL;
 
diff --git a/drivers/staging/media/atomisp/pci/sh_css_internal.h 
b/drivers/staging/media/atomisp/pci/sh_css_internal.h
index bef2b8c5132b..1501046cebb9 100644
--- a/drivers/staging/media/atomisp/pci/sh_css_internal.h
+++ b/drivers/staging/media/atomisp/pci/sh_css_internal.h
@@ -16,11 +16,13 @@
 #ifndef _SH_CSS_INTERNAL_H_
 #define _SH_CSS_INTERNAL_H_
 
+#include <linux/build_bug.h>
+#include <linux/stdarg.h>
+
 #include <system_global.h>
 #include <math_support.h>
 #include <type_support.h>
 #include <platform_support.h>
-#include <linux/stdarg.h>
 
 #include "input_formatter.h"
 #include "input_system.h"
@@ -104,7 +106,6 @@
  */
 #define CALC_ALIGNMENT_MEMBER(x, y)    (CEIL_MUL(x, y) - x)
 #define SIZE_OF_HRT_VADDRESS           sizeof(hive_uint32)
-#define SIZE_OF_IA_CSS_PTR             sizeof(uint32_t)
 
 /* Number of SP's */
 #define NUM_OF_SPS 1
@@ -202,6 +203,8 @@ struct sh_css_ddr_address_map {
        (SH_CSS_MAX_STAGES * IA_CSS_NUM_MEMORIES * SIZE_OF_HRT_VADDRESS) +      
\
        (16 * SIZE_OF_HRT_VADDRESS))
 
+static_assert(sizeof(struct sh_css_ddr_address_map) == 
SIZE_OF_SH_CSS_DDR_ADDRESS_MAP_STRUCT);
+
 /* xmem address map allocation per pipeline */
 struct sh_css_ddr_address_map_size {
        size_t isp_param;
@@ -705,6 +708,8 @@ struct sh_css_hmm_buffer {
        SIZE_OF_IA_CSS_CLOCK_TICK_STRUCT +                      \
        CALC_ALIGNMENT_MEMBER(SIZE_OF_IA_CSS_CLOCK_TICK_STRUCT, 8))
 
+static_assert(sizeof(struct sh_css_hmm_buffer) == 
SIZE_OF_SH_CSS_HMM_BUFFER_STRUCT);
+
 enum sh_css_queue_type {
        sh_css_invalid_queue_type = -1,
        sh_css_host2sp_buffer_queue,
@@ -724,6 +729,8 @@ struct sh_css_event_irq_mask {
 #define SIZE_OF_SH_CSS_EVENT_IRQ_MASK_STRUCT                           \
        (2 * sizeof(uint16_t))
 
+static_assert(sizeof(struct sh_css_event_irq_mask) == 
SIZE_OF_SH_CSS_EVENT_IRQ_MASK_STRUCT);
+
 struct host_sp_communication {
        /*
         * Don't use enum host2sp_commands, because the sizeof an enum is
@@ -761,6 +768,8 @@ struct host_sp_communication {
        ((3 + N_CSI_PORTS) * sizeof(uint32_t)) +                                
                \
        (NR_OF_PIPELINES * SIZE_OF_SH_CSS_EVENT_IRQ_MASK_STRUCT))
 
+static_assert(sizeof(struct host_sp_communication) == 
SIZE_OF_HOST_SP_COMMUNICATION_STRUCT);
+
 struct host_sp_queues {
        /*
         * Queues for the dynamic frame information,
@@ -831,6 +840,8 @@ struct host_sp_queues {
 #define SIZE_OF_HOST_SP_QUEUES_STRUCT          \
        (SIZE_OF_QUEUES_ELEMS + SIZE_OF_QUEUES_DESC)
 
+static_assert(sizeof(struct host_sp_queues) == SIZE_OF_HOST_SP_QUEUES_STRUCT);
+
 extern int  __printf(1, 0) (*sh_css_printf)(const char *fmt, va_list args);
 
 static inline void  __printf(1, 2) sh_css_print(const char *fmt, ...)

Reply via email to