OSDN Git Service

i40e: Replace one-element array with flexible-array member
authorGustavo A. R. Silva <gustavoars@kernel.org>
Tue, 25 May 2021 23:00:38 +0000 (18:00 -0500)
committerTony Nguyen <anthony.l.nguyen@intel.com>
Wed, 26 May 2021 23:16:17 +0000 (16:16 -0700)
There is a regular need in the kernel to provide a way to declare having a
dynamically sized set of trailing elements in a structure. Kernel code
should always use “flexible array members”[1] for these cases. The older
style of one-element or zero-length arrays should no longer be used[2].

Refactor the code according to the use of a flexible-array member in struct
i40e_qvlist_info instead of one-element array, and use the struct_size()
helper.

[1] https://en.wikipedia.org/wiki/Flexible_array_member
[2] https://www.kernel.org/doc/html/v5.10/process/deprecated.html#zero-length-and-one-element-arrays

Link: https://github.com/KSPP/linux/issues/79
Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
Acked-by: Shiraz Saleem <shiraz.saleem@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
drivers/infiniband/hw/i40iw/i40iw_main.c
drivers/net/ethernet/intel/i40e/i40e_client.c
include/linux/net/intel/i40e_client.h

index b496f30..364f69c 100644 (file)
@@ -1423,7 +1423,7 @@ static enum i40iw_status_code i40iw_save_msix_info(struct i40iw_device *iwdev,
        struct i40e_qv_info *iw_qvinfo;
        u32 ceq_idx;
        u32 i;
-       u32 size;
+       size_t size;
 
        if (!ldev->msix_count) {
                i40iw_pr_err("No MSI-X vectors\n");
@@ -1433,8 +1433,7 @@ static enum i40iw_status_code i40iw_save_msix_info(struct i40iw_device *iwdev,
        iwdev->msix_count = ldev->msix_count;
 
        size = sizeof(struct i40iw_msix_vector) * iwdev->msix_count;
-       size += sizeof(struct i40e_qvlist_info);
-       size +=  sizeof(struct i40e_qv_info) * iwdev->msix_count - 1;
+       size += struct_size(iw_qvlist, qv_info, iwdev->msix_count);
        iwdev->iw_msixtbl = kzalloc(size, GFP_KERNEL);
 
        if (!iwdev->iw_msixtbl)
index 32f3fac..63eab14 100644 (file)
@@ -579,7 +579,7 @@ static int i40e_client_setup_qvlist(struct i40e_info *ldev,
        u32 v_idx, i, reg_idx, reg;
 
        ldev->qvlist_info = kzalloc(struct_size(ldev->qvlist_info, qv_info,
-                                   qvlist_info->num_vectors - 1), GFP_KERNEL);
+                                   qvlist_info->num_vectors), GFP_KERNEL);
        if (!ldev->qvlist_info)
                return -ENOMEM;
        ldev->qvlist_info->num_vectors = qvlist_info->num_vectors;
index f41387a..fd7bc86 100644 (file)
@@ -48,7 +48,7 @@ struct i40e_qv_info {
 
 struct i40e_qvlist_info {
        u32 num_vectors;
-       struct i40e_qv_info qv_info[1];
+       struct i40e_qv_info qv_info[];
 };