Using the ARRAY_SIZE macro improves the readability of the code. Also,
it is not always useful to use a variable to store this constant
calculated at compile time.

Found with Coccinelle with the following semantic patch:
@r depends on (org || report)@
type T;
T[] E;
position p;
@@
(
 (sizeof(E)@p /sizeof(*E))
|
 (sizeof(E)@p /sizeof(E[...]))
|
 (sizeof(E)@p /sizeof(T))
)

Signed-off-by: Jérémy Lefaure <jeremy.lefa...@lse.epita.fr>
---
Changes in v2:
This patch was part of bigger patch (wrongly sent in a series, sorry).
The previous patch has been split to all changes in drivers/net/wireless
are in a separate patch sent to Kalle Valo.

 drivers/net/ethernet/emulex/benet/be_cmds.c     |  4 ++--
 drivers/net/ethernet/intel/i40e/i40e_adminq.h   |  3 ++-
 drivers/net/ethernet/intel/i40evf/i40e_adminq.h |  3 ++-
 drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c   |  3 ++-
 drivers/net/ethernet/intel/ixgbevf/vf.c         | 17 ++++++++---------
 drivers/net/usb/kalmia.c                        |  9 +++++----
 include/net/bond_3ad.h                          |  3 ++-
 net/ipv6/seg6_local.c                           |  6 +++---
 8 files changed, 26 insertions(+), 22 deletions(-)

diff --git a/drivers/net/ethernet/emulex/benet/be_cmds.c 
b/drivers/net/ethernet/emulex/benet/be_cmds.c
index 02dd5246dfae..ec39363afd5f 100644
--- a/drivers/net/ethernet/emulex/benet/be_cmds.c
+++ b/drivers/net/ethernet/emulex/benet/be_cmds.c
@@ -15,6 +15,7 @@
  * Costa Mesa, CA 92626
  */
 
+#include <linux/kernel.h>
 #include <linux/module.h>
 #include "be.h"
 #include "be_cmds.h"
@@ -103,10 +104,9 @@ static struct be_cmd_priv_map cmd_priv_map[] = {
 static bool be_cmd_allowed(struct be_adapter *adapter, u8 opcode, u8 subsystem)
 {
        int i;
-       int num_entries = sizeof(cmd_priv_map)/sizeof(struct be_cmd_priv_map);
        u32 cmd_privileges = adapter->cmd_privileges;
 
-       for (i = 0; i < num_entries; i++)
+       for (i = 0; i < ARRAY_SIZE(cmd_priv_map); i++)
                if (opcode == cmd_priv_map[i].opcode &&
                    subsystem == cmd_priv_map[i].subsystem)
                        if (!(cmd_privileges & cmd_priv_map[i].priv_mask))
diff --git a/drivers/net/ethernet/intel/i40e/i40e_adminq.h 
b/drivers/net/ethernet/intel/i40e/i40e_adminq.h
index 2349fbe04bd2..892083b65b91 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_adminq.h
+++ b/drivers/net/ethernet/intel/i40e/i40e_adminq.h
@@ -27,6 +27,7 @@
 #ifndef _I40E_ADMINQ_H_
 #define _I40E_ADMINQ_H_
 
+#include <linux/kernel.h>
 #include "i40e_osdep.h"
 #include "i40e_status.h"
 #include "i40e_adminq_cmd.h"
@@ -143,7 +144,7 @@ static inline int i40e_aq_rc_to_posix(int aq_ret, int aq_rc)
        if (aq_ret == I40E_ERR_ADMIN_QUEUE_TIMEOUT)
                return -EAGAIN;
 
-       if (!((u32)aq_rc < (sizeof(aq_to_posix) / sizeof((aq_to_posix)[0]))))
+       if (!((u32)aq_rc < ARRAY_SIZE(aq_to_posix)))
                return -ERANGE;
 
        return aq_to_posix[aq_rc];
diff --git a/drivers/net/ethernet/intel/i40evf/i40e_adminq.h 
b/drivers/net/ethernet/intel/i40evf/i40e_adminq.h
index e0bfaa3d4a21..5622a24cc74d 100644
--- a/drivers/net/ethernet/intel/i40evf/i40e_adminq.h
+++ b/drivers/net/ethernet/intel/i40evf/i40e_adminq.h
@@ -27,6 +27,7 @@
 #ifndef _I40E_ADMINQ_H_
 #define _I40E_ADMINQ_H_
 
+#include <linux/kernel.h>
 #include "i40e_osdep.h"
 #include "i40e_status.h"
 #include "i40e_adminq_cmd.h"
@@ -143,7 +144,7 @@ static inline int i40e_aq_rc_to_posix(int aq_ret, int aq_rc)
        if (aq_ret == I40E_ERR_ADMIN_QUEUE_TIMEOUT)
                return -EAGAIN;
 
-       if (!((u32)aq_rc < (sizeof(aq_to_posix) / sizeof((aq_to_posix)[0]))))
+       if (!((u32)aq_rc < ARRAY_SIZE(aq_to_posix)))
                return -ERANGE;
 
        return aq_to_posix[aq_rc];
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c 
b/drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c
index cb7da5f9c4da..0b804790256e 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c
@@ -21,6 +21,7 @@
  *  Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
  *
  
******************************************************************************/
+#include <linux/kernel.h>
 #include "ixgbe_x540.h"
 #include "ixgbe_type.h"
 #include "ixgbe_common.h"
@@ -949,7 +950,7 @@ static s32 ixgbe_checksum_ptr_x550(struct ixgbe_hw *hw, u16 
ptr,
        u16 length, bufsz, i, start;
        u16 *local_buffer;
 
-       bufsz = sizeof(buf) / sizeof(buf[0]);
+       bufsz = ARRAY_SIZE(buf);
 
        /* Read a chunk at the pointer location */
        if (!buffer) {
diff --git a/drivers/net/ethernet/intel/ixgbevf/vf.c 
b/drivers/net/ethernet/intel/ixgbevf/vf.c
index 0c25006ce9af..96bfef92fb4c 100644
--- a/drivers/net/ethernet/intel/ixgbevf/vf.c
+++ b/drivers/net/ethernet/intel/ixgbevf/vf.c
@@ -24,6 +24,7 @@
 
 
*******************************************************************************/
 
+#include <linux/kernel.h>
 #include "vf.h"
 #include "ixgbevf.h"
 
@@ -285,7 +286,7 @@ static s32 ixgbevf_set_uc_addr_vf(struct ixgbe_hw *hw, u32 
index, u8 *addr)
                ether_addr_copy(msg_addr, addr);
 
        ret_val = ixgbevf_write_msg_read_ack(hw, msgbuf, msgbuf,
-                                            sizeof(msgbuf) / sizeof(u32));
+                                            ARRAY_SIZE(msgbuf));
        if (!ret_val) {
                msgbuf[0] &= ~IXGBE_VT_MSGTYPE_CTS;
 
@@ -455,7 +456,7 @@ static s32 ixgbevf_set_rar_vf(struct ixgbe_hw *hw, u32 
index, u8 *addr,
        ether_addr_copy(msg_addr, addr);
 
        ret_val = ixgbevf_write_msg_read_ack(hw, msgbuf, msgbuf,
-                                            sizeof(msgbuf) / sizeof(u32));
+                                            ARRAY_SIZE(msgbuf));
 
        msgbuf[0] &= ~IXGBE_VT_MSGTYPE_CTS;
 
@@ -571,7 +572,7 @@ static s32 ixgbevf_update_xcast_mode(struct ixgbe_hw *hw, 
int xcast_mode)
        msgbuf[1] = xcast_mode;
 
        err = ixgbevf_write_msg_read_ack(hw, msgbuf, msgbuf,
-                                        sizeof(msgbuf) / sizeof(u32));
+                                        ARRAY_SIZE(msgbuf));
        if (err)
                return err;
 
@@ -609,7 +610,7 @@ static s32 ixgbevf_set_vfta_vf(struct ixgbe_hw *hw, u32 
vlan, u32 vind,
        msgbuf[0] |= vlan_on << IXGBE_VT_MSGINFO_SHIFT;
 
        err = ixgbevf_write_msg_read_ack(hw, msgbuf, msgbuf,
-                                        sizeof(msgbuf) / sizeof(u32));
+                                        ARRAY_SIZE(msgbuf));
        if (err)
                goto mbx_err;
 
@@ -813,7 +814,7 @@ static s32 ixgbevf_set_rlpml_vf(struct ixgbe_hw *hw, u16 
max_size)
        msgbuf[1] = max_size;
 
        ret_val = ixgbevf_write_msg_read_ack(hw, msgbuf, msgbuf,
-                                            sizeof(msgbuf) / sizeof(u32));
+                                            ARRAY_SIZE(msgbuf));
        if (ret_val)
                return ret_val;
        if ((msgbuf[0] & IXGBE_VF_SET_LPE) &&
@@ -859,8 +860,7 @@ static int ixgbevf_negotiate_api_version_vf(struct ixgbe_hw 
*hw, int api)
        msg[1] = api;
        msg[2] = 0;
 
-       err = ixgbevf_write_msg_read_ack(hw, msg, msg,
-                                        sizeof(msg) / sizeof(u32));
+       err = ixgbevf_write_msg_read_ack(hw, msg, msg, ARRAY_SIZE(msg));
        if (!err) {
                msg[0] &= ~IXGBE_VT_MSGTYPE_CTS;
 
@@ -911,8 +911,7 @@ int ixgbevf_get_queues(struct ixgbe_hw *hw, unsigned int 
*num_tcs,
        msg[0] = IXGBE_VF_GET_QUEUE;
        msg[1] = msg[2] = msg[3] = msg[4] = 0;
 
-       err = ixgbevf_write_msg_read_ack(hw, msg, msg,
-                                        sizeof(msg) / sizeof(u32));
+       err = ixgbevf_write_msg_read_ack(hw, msg, msg, ARRAY_SIZE(msg));
        if (!err) {
                msg[0] &= ~IXGBE_VT_MSGTYPE_CTS;
 
diff --git a/drivers/net/usb/kalmia.c b/drivers/net/usb/kalmia.c
index ce0b0b4e3a57..6976003d64db 100644
--- a/drivers/net/usb/kalmia.c
+++ b/drivers/net/usb/kalmia.c
@@ -26,6 +26,7 @@
 #include <linux/usb/cdc.h>
 #include <linux/usb/usbnet.h>
 #include <linux/gfp.h>
+#include <linux/kernel.h>
 
 /*
  * The Samsung Kalmia based LTE USB modems have a CDC ACM port for modem 
control
@@ -114,14 +115,14 @@ kalmia_init_and_get_ethernet_addr(struct usbnet *dev, u8 
*ethernet_addr)
                return -ENOMEM;
 
        memcpy(usb_buf, init_msg_1, 12);
-       status = kalmia_send_init_packet(dev, usb_buf, sizeof(init_msg_1)
-               / sizeof(init_msg_1[0]), usb_buf, 24);
+       status = kalmia_send_init_packet(dev, usb_buf, ARRAY_SIZE(init_msg_1),
+                                        usb_buf, 24);
        if (status != 0)
                return status;
 
        memcpy(usb_buf, init_msg_2, 12);
-       status = kalmia_send_init_packet(dev, usb_buf, sizeof(init_msg_2)
-               / sizeof(init_msg_2[0]), usb_buf, 28);
+       status = kalmia_send_init_packet(dev, usb_buf, ARRAY_SIZE(init_msg_2),
+                                        usb_buf, 28);
        if (status != 0)
                return status;
 
diff --git a/include/net/bond_3ad.h b/include/net/bond_3ad.h
index f358ad5e4214..7a06fa295814 100644
--- a/include/net/bond_3ad.h
+++ b/include/net/bond_3ad.h
@@ -27,6 +27,7 @@
 #include <linux/skbuff.h>
 #include <linux/netdevice.h>
 #include <linux/if_ether.h>
+#include <linux/kernel.h>
 
 /* General definitions */
 #define PKT_TYPE_LACPDU         cpu_to_be16(ETH_P_SLOW)
@@ -283,7 +284,7 @@ static inline const char *bond_3ad_churn_desc(churn_state_t 
state)
                "none",
                "unknown"
        };
-       int max_size = sizeof(churn_description) / sizeof(churn_description[0]);
+       int max_size = ARRAY_SIZE(churn_description);
 
        if (state >= max_size)
                state = max_size - 1;
diff --git a/net/ipv6/seg6_local.c b/net/ipv6/seg6_local.c
index 825b8e01f947..9e4e1dc89e29 100644
--- a/net/ipv6/seg6_local.c
+++ b/net/ipv6/seg6_local.c
@@ -31,6 +31,7 @@
 #include <net/seg6_hmac.h>
 #endif
 #include <linux/etherdevice.h>
+#include <linux/kernel.h>
 
 struct seg6_local_lwt;
 
@@ -499,10 +500,9 @@ static struct seg6_action_desc seg6_action_table[] = {
 static struct seg6_action_desc *__get_action_desc(int action)
 {
        struct seg6_action_desc *desc;
-       int i, count;
+       int i;
 
-       count = sizeof(seg6_action_table) / sizeof(struct seg6_action_desc);
-       for (i = 0; i < count; i++) {
+       for (i = 0; i < ARRAY_SIZE(seg6_action_table); i++) {
                desc = &seg6_action_table[i];
                if (desc->action == action)
                        return desc;
-- 
2.15.0

Reply via email to