From e63becb7f30830ed142f889bb0894d76df56d3b4 Mon Sep 17 00:00:00 2001 From: Stefan Wahren Date: Thu, 3 Jun 2021 17:49:53 +0200 Subject: [PATCH] staging: vchiq_core: get the rid of IS_POW2 The macro IS_POW2 is only used to ensure some size are powers of 2. Better use BUILD_BUG_ON_NOT_POWER_OF_2 for this. Since this must be done in a function, merge all these checks in a new function. Signed-off-by: Stefan Wahren Link: https://lore.kernel.org/r/1622735405-9980-5-git-send-email-stefan.wahren@i2se.com Signed-off-by: Greg Kroah-Hartman --- .../interface/vchiq_arm/vchiq_core.c | 17 +++++++++++++---- .../interface/vchiq_arm/vchiq_core.h | 7 ------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c index b808f911a45d4..32016ea914b47 100644 --- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c +++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c @@ -124,12 +124,19 @@ enum { /* we require this for consistency between endpoints */ vchiq_static_assert(sizeof(struct vchiq_header) == 8); -vchiq_static_assert(IS_POW2(sizeof(struct vchiq_header))); -vchiq_static_assert(IS_POW2(VCHIQ_NUM_CURRENT_BULKS)); -vchiq_static_assert(IS_POW2(VCHIQ_NUM_SERVICE_BULKS)); -vchiq_static_assert(IS_POW2(VCHIQ_MAX_SERVICES)); vchiq_static_assert(VCHIQ_VERSION >= VCHIQ_VERSION_MIN); +static inline void check_sizes(void) +{ + BUILD_BUG_ON_NOT_POWER_OF_2(VCHIQ_SLOT_SIZE); + BUILD_BUG_ON_NOT_POWER_OF_2(VCHIQ_MAX_SLOTS); + BUILD_BUG_ON_NOT_POWER_OF_2(VCHIQ_MAX_SLOTS_PER_SIDE); + BUILD_BUG_ON_NOT_POWER_OF_2(sizeof(struct vchiq_header)); + BUILD_BUG_ON_NOT_POWER_OF_2(VCHIQ_NUM_CURRENT_BULKS); + BUILD_BUG_ON_NOT_POWER_OF_2(VCHIQ_NUM_SERVICE_BULKS); + BUILD_BUG_ON_NOT_POWER_OF_2(VCHIQ_MAX_SERVICES); +} + /* Run time control of log level, based on KERN_XXX level. */ int vchiq_core_log_level = VCHIQ_LOG_DEFAULT; int vchiq_core_msg_log_level = VCHIQ_LOG_DEFAULT; @@ -2206,6 +2213,8 @@ vchiq_init_slots(void *mem_base, int mem_size) int num_slots = (mem_size - mem_align)/VCHIQ_SLOT_SIZE; int first_data_slot = VCHIQ_SLOT_ZERO_SLOTS; + check_sizes(); + /* Ensure there is enough memory to run an absolutely minimum system */ num_slots -= first_data_slot; diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.h b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.h index db93495da04c2..df51418564492 100644 --- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.h +++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.h @@ -69,13 +69,6 @@ extern int vchiq_static_assert[(cond) ? 1 : -1] #endif -#define IS_POW2(x) (x && ((x & (x - 1)) == 0)) - -/* Ensure that the slot size and maximum number of slots are powers of 2 */ -vchiq_static_assert(IS_POW2(VCHIQ_SLOT_SIZE)); -vchiq_static_assert(IS_POW2(VCHIQ_MAX_SLOTS)); -vchiq_static_assert(IS_POW2(VCHIQ_MAX_SLOTS_PER_SIDE)); - #define VCHIQ_SLOT_MASK (VCHIQ_SLOT_SIZE - 1) #define VCHIQ_SLOT_QUEUE_MASK (VCHIQ_MAX_SLOTS_PER_SIDE - 1) #define VCHIQ_SLOT_ZERO_SLOTS DIV_ROUND_UP(sizeof(struct vchiq_slot_zero), \ -- 2.30.2