All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tony Nguyen <anthony.l.nguyen@intel.com>
To: davem@davemloft.net, kuba@kernel.org
Cc: "Gustavo A. R. Silva" <gustavoars@kernel.org>,
	netdev@vger.kernel.org, sassmann@redhat.com,
	anthony.l.nguyen@intel.com, kernel test robot <lkp@intel.com>,
	Tony Brelinski <tonyx.brelinski@intel.com>
Subject: [PATCH net-next v2 09/11] ice: Replace one-element array with flexible-array member
Date: Fri,  5 Feb 2021 20:40:59 -0800	[thread overview]
Message-ID: <20210206044101.636242-10-anthony.l.nguyen@intel.com> (raw)
In-Reply-To: <20210206044101.636242-1-anthony.l.nguyen@intel.com>

From: "Gustavo A. R. Silva" <gustavoars@kernel.org>

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 ice_res_tracker, instead of a one-element array and use the
struct_size() helper to calculate the size for the allocations.

Also, notice that the code below suggests that, currently, two too many
bytes are being allocated with devm_kzalloc(), as the total number of
entries (pf->irq_tracker->num_entries) for pf->irq_tracker->list[] is
_vectors_ and sizeof(*pf->irq_tracker) also includes the size of the
one-element array _list_ in struct ice_res_tracker.

drivers/net/ethernet/intel/ice/ice_main.c:3511:
3511         /* populate SW interrupts pool with number of OS granted IRQs. */
3512         pf->num_avail_sw_msix = (u16)vectors;
3513         pf->irq_tracker->num_entries = (u16)vectors;
3514         pf->irq_tracker->end = pf->irq_tracker->num_entries;

With this change, the right amount of dynamic memory is now allocated
because, contrary to one-element arrays which occupy at least as much
space as a single object of the type, flexible-array members don't
occupy such space in the containing structure.

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

Built-tested-by: kernel test robot <lkp@intel.com>
Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
Tested-by: Tony Brelinski <tonyx.brelinski@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
---
 drivers/net/ethernet/intel/ice/ice.h      | 2 +-
 drivers/net/ethernet/intel/ice/ice_main.c | 6 +++---
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/intel/ice/ice.h b/drivers/net/ethernet/intel/ice/ice.h
index fa1e128c24ec..fca428c879ec 100644
--- a/drivers/net/ethernet/intel/ice/ice.h
+++ b/drivers/net/ethernet/intel/ice/ice.h
@@ -166,7 +166,7 @@ struct ice_tc_cfg {
 struct ice_res_tracker {
 	u16 num_entries;
 	u16 end;
-	u16 list[1];
+	u16 list[];
 };
 
 struct ice_qs_cfg {
diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c
index 643fbc8d6b6a..f6177591978d 100644
--- a/drivers/net/ethernet/intel/ice/ice_main.c
+++ b/drivers/net/ethernet/intel/ice/ice_main.c
@@ -3495,9 +3495,9 @@ static int ice_init_interrupt_scheme(struct ice_pf *pf)
 		return vectors;
 
 	/* set up vector assignment tracking */
-	pf->irq_tracker =
-		devm_kzalloc(ice_pf_to_dev(pf), sizeof(*pf->irq_tracker) +
-			     (sizeof(u16) * vectors), GFP_KERNEL);
+	pf->irq_tracker = devm_kzalloc(ice_pf_to_dev(pf),
+				       struct_size(pf->irq_tracker, list, vectors),
+				       GFP_KERNEL);
 	if (!pf->irq_tracker) {
 		ice_dis_msix(pf);
 		return -ENOMEM;
-- 
2.26.2


  parent reply	other threads:[~2021-02-06  4:50 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-06  4:40 [PATCH net-next v2 00/11][pull request] 100GbE Intel Wired LAN Driver Updates 2021-02-05 Tony Nguyen
2021-02-06  4:40 ` [PATCH net-next v2 01/11] ice: report timeout length for erasing during devlink flash Tony Nguyen
2021-02-06  4:40 ` [PATCH net-next v2 02/11] ice: create flash_info structure and separate NVM version Tony Nguyen
2021-02-06  4:40 ` [PATCH net-next v2 03/11] ice: introduce context struct for info report Tony Nguyen
2021-02-06  4:40 ` [PATCH net-next v2 04/11] ice: cache NVM module bank information Tony Nguyen
2021-02-06  4:40 ` [PATCH net-next v2 05/11] ice: introduce function for reading from flash modules Tony Nguyen
2021-02-06  4:40 ` [PATCH net-next v2 06/11] ice: display some stored NVM versions via devlink info Tony Nguyen
2021-02-06  4:40 ` [PATCH net-next v2 07/11] ice: display stored netlist " Tony Nguyen
2021-02-06  4:40 ` [PATCH net-next v2 08/11] ice: display stored UNDI firmware version " Tony Nguyen
2021-02-06  4:40 ` Tony Nguyen [this message]
2021-02-06  4:41 ` [PATCH net-next v2 10/11] ice: use flex_array_size where possible Tony Nguyen
2021-02-06  4:41 ` [PATCH net-next v2 11/11] ice: remove dead code Tony Nguyen
2021-02-07  0:20 ` [PATCH net-next v2 00/11][pull request] 100GbE Intel Wired LAN Driver Updates 2021-02-05 patchwork-bot+netdevbpf

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210206044101.636242-10-anthony.l.nguyen@intel.com \
    --to=anthony.l.nguyen@intel.com \
    --cc=davem@davemloft.net \
    --cc=gustavoars@kernel.org \
    --cc=kuba@kernel.org \
    --cc=lkp@intel.com \
    --cc=netdev@vger.kernel.org \
    --cc=sassmann@redhat.com \
    --cc=tonyx.brelinski@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.