Thread (1 message) flat view 1 message, 1 author, 2024-09-04

Re: [PATCH iwl-next] ice: make ice_cfg_tx_topo() almost const-correct

From: Przemek Kitszel <przemyslaw.kitszel@intel.com>
Date: 2024-09-04 12:37:32
Also in: intel-wired-lan

On 9/4/24 11:31, Przemek Kitszel wrote:
Constify ice_cfg_tx_topo() @buf parameter.
This cascades further down to few more functions.

I set the boundary on ice_get_set_tx_topo(), which could not be easily
constified as it is get-or-set, but it's set variant does not change
provided data, the same holds for ice_aqc_opc_set_tx_topo() in particular.
That's why there is (u8 *) cast to loose const prior to entering into AQ
world of const-obliviousness.

Reviewed-by: Larysa Zaremba <redacted>
Signed-off-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
I've forgot to CC netdev, sorry :F
I think there is no need to repost though.
Original URL (content is quoted entriely here) if it is more helpful
https://lore.kernel.org/intel-wired-lan/20240904093135.8795-2-przemyslaw.kitszel@intel.com/ (local)

I will make an alias for my git-sent-email invocations ;)
quoted hunk
---
  drivers/net/ethernet/intel/ice/ice_ddp.h |  4 +-
  drivers/net/ethernet/intel/ice/ice_ddp.c | 48 ++++++++++++------------
  2 files changed, 26 insertions(+), 26 deletions(-)
diff --git a/drivers/net/ethernet/intel/ice/ice_ddp.h b/drivers/net/ethernet/intel/ice/ice_ddp.h
index 97f272317475..79551da2a4b0 100644
--- a/drivers/net/ethernet/intel/ice/ice_ddp.h
+++ b/drivers/net/ethernet/intel/ice/ice_ddp.h
@@ -438,7 +438,7 @@ struct ice_pkg_enum {
  	u32 buf_idx;
  
  	u32 type;
-	struct ice_buf_hdr *buf;
+	const struct ice_buf_hdr *buf;
  	u32 sect_idx;
  	void *sect;
  	u32 sect_type;
@@ -467,6 +467,6 @@ ice_pkg_enum_entry(struct ice_seg *ice_seg, struct ice_pkg_enum *state,
  void *ice_pkg_enum_section(struct ice_seg *ice_seg, struct ice_pkg_enum *state,
  			   u32 sect_type);
  
-int ice_cfg_tx_topo(struct ice_hw *hw, u8 *buf, u32 len);
+int ice_cfg_tx_topo(struct ice_hw *hw, const void *buf, u32 len);
  
  #endif
diff --git a/drivers/net/ethernet/intel/ice/ice_ddp.c b/drivers/net/ethernet/intel/ice/ice_ddp.c
index 953262b88a58..f2ac1d265510 100644
--- a/drivers/net/ethernet/intel/ice/ice_ddp.c
+++ b/drivers/net/ethernet/intel/ice/ice_ddp.c
@@ -31,7 +31,7 @@ static const struct ice_tunnel_type_scan tnls[] = {
   * Verifies various attributes of the package file, including length, format
   * version, and the requirement of at least one segment.
   */
-static enum ice_ddp_state ice_verify_pkg(struct ice_pkg_hdr *pkg, u32 len)
+static enum ice_ddp_state ice_verify_pkg(const struct ice_pkg_hdr *pkg, u32 len)
  {
  	u32 seg_count;
  	u32 i;
@@ -57,13 +57,13 @@ static enum ice_ddp_state ice_verify_pkg(struct ice_pkg_hdr *pkg, u32 len)
  	/* all segments must fit within length */
  	for (i = 0; i < seg_count; i++) {
  		u32 off = le32_to_cpu(pkg->seg_offset[i]);
-		struct ice_generic_seg_hdr *seg;
+		const struct ice_generic_seg_hdr *seg;
  
  		/* segment header must fit */
  		if (len < off + sizeof(*seg))
  			return ICE_DDP_PKG_INVALID_FILE;
  
-		seg = (struct ice_generic_seg_hdr *)((u8 *)pkg + off);
+		seg = (void *)pkg + off;
  
  		/* segment body must fit */
  		if (len < off + le32_to_cpu(seg->seg_size))
@@ -119,13 +119,13 @@ static enum ice_ddp_state ice_chk_pkg_version(struct ice_pkg_ver *pkg_ver)
   *
   * This helper function validates a buffer's header.
   */
-static struct ice_buf_hdr *ice_pkg_val_buf(struct ice_buf *buf)
+static const struct ice_buf_hdr *ice_pkg_val_buf(const struct ice_buf *buf)
  {
-	struct ice_buf_hdr *hdr;
+	const struct ice_buf_hdr *hdr;
  	u16 section_count;
  	u16 data_end;
  
-	hdr = (struct ice_buf_hdr *)buf->buf;
+	hdr = (const struct ice_buf_hdr *)buf->buf;
  	/* verify data */
  	section_count = le16_to_cpu(hdr->section_count);
  	if (section_count < ICE_MIN_S_COUNT || section_count > ICE_MAX_S_COUNT)
@@ -165,8 +165,8 @@ static struct ice_buf_table *ice_find_buf_table(struct ice_seg *ice_seg)
   * unexpected value has been detected (for example an invalid section count or
   * an invalid buffer end value).
   */
-static struct ice_buf_hdr *ice_pkg_enum_buf(struct ice_seg *ice_seg,
-					    struct ice_pkg_enum *state)
+static const struct ice_buf_hdr *ice_pkg_enum_buf(struct ice_seg *ice_seg,
+						  struct ice_pkg_enum *state)
  {
  	if (ice_seg) {
  		state->buf_table = ice_find_buf_table(ice_seg);
@@ -1800,9 +1800,9 @@ int ice_update_pkg(struct ice_hw *hw, struct ice_buf *bufs, u32 count)
   * success it returns a pointer to the segment header, otherwise it will
   * return NULL.
   */
-static struct ice_generic_seg_hdr *
+static const struct ice_generic_seg_hdr *
  ice_find_seg_in_pkg(struct ice_hw *hw, u32 seg_type,
-		    struct ice_pkg_hdr *pkg_hdr)
+		    const struct ice_pkg_hdr *pkg_hdr)
  {
  	u32 i;
  
@@ -1813,11 +1813,9 @@ ice_find_seg_in_pkg(struct ice_hw *hw, u32 seg_type,
  
  	/* Search all package segments for the requested segment type */
  	for (i = 0; i < le32_to_cpu(pkg_hdr->seg_count); i++) {
-		struct ice_generic_seg_hdr *seg;
+		const struct ice_generic_seg_hdr *seg;
  
-		seg = (struct ice_generic_seg_hdr
-			       *)((u8 *)pkg_hdr +
-				  le32_to_cpu(pkg_hdr->seg_offset[i]));
+		seg = (void *)pkg_hdr + le32_to_cpu(pkg_hdr->seg_offset[i]);
  
  		if (le32_to_cpu(seg->seg_type) == seg_type)
  			return seg;
@@ -2354,14 +2352,15 @@ ice_get_set_tx_topo(struct ice_hw *hw, u8 *buf, u16 buf_size,
   *
   * Return: zero when update was successful, negative values otherwise.
   */
-int ice_cfg_tx_topo(struct ice_hw *hw, u8 *buf, u32 len)
+int ice_cfg_tx_topo(struct ice_hw *hw, const void *buf, u32 len)
  {
-	u8 *current_topo, *new_topo = NULL;
-	struct ice_run_time_cfg_seg *seg;
-	struct ice_buf_hdr *section;
-	struct ice_pkg_hdr *pkg_hdr;
+	const struct ice_run_time_cfg_seg *seg;
+	const struct ice_buf_hdr *section;
+	const struct ice_pkg_hdr *pkg_hdr;
+	const u8 *new_topo = NULL;
  	enum ice_ddp_state state;
  	u16 offset, size = 0;
+	u8 *current_topo;
  	u32 reg = 0;
  	int status;
  	u8 flags;
@@ -2379,7 +2378,7 @@ int ice_cfg_tx_topo(struct ice_hw *hw, u8 *buf, u32 len)
  	if (!current_topo)
  		return -ENOMEM;
  
-	/* Get the current Tx topology */
+	/* Get the current Tx topology flags */
  	status = ice_get_set_tx_topo(hw, current_topo, ICE_AQ_MAX_BUF_LEN, NULL,
  				     &flags, false);
  
@@ -2419,16 +2418,16 @@ int ice_cfg_tx_topo(struct ice_hw *hw, u8 *buf, u32 len)
  		goto update_topo;
  	}
  
-	pkg_hdr = (struct ice_pkg_hdr *)buf;
+	pkg_hdr = (const struct ice_pkg_hdr *)buf;
  	state = ice_verify_pkg(pkg_hdr, len);
  	if (state) {
  		ice_debug(hw, ICE_DBG_INIT, "Failed to verify pkg (err: %d)\n",
  			  state);
  		return -EIO;
  	}
  
  	/* Find runtime configuration segment */
-	seg = (struct ice_run_time_cfg_seg *)
+	seg = (const struct ice_run_time_cfg_seg *)
  	      ice_find_seg_in_pkg(hw, SEGMENT_TYPE_ICE_RUN_TIME_CFG, pkg_hdr);
  	if (!seg) {
  		ice_debug(hw, ICE_DBG_INIT, "5 layer topology segment is missing\n");
@@ -2462,7 +2461,7 @@ int ice_cfg_tx_topo(struct ice_hw *hw, u8 *buf, u32 len)
  	}
  
  	/* Get the new topology buffer */
-	new_topo = ((u8 *)section) + offset;
+	new_topo = (const u8 *)section + offset;
  
  update_topo:
  	/* Acquire global lock to make sure that set topology issued
@@ -2485,7 +2484,8 @@ int ice_cfg_tx_topo(struct ice_hw *hw, u8 *buf, u32 len)
  	}
  
  	/* Set new topology */
-	status = ice_get_set_tx_topo(hw, new_topo, size, NULL, NULL, true);
+	status = ice_get_set_tx_topo(hw, (u8 *)new_topo, size, NULL, NULL,
+				     true);
  	if (status) {
  		ice_debug(hw, ICE_DBG_INIT, "Failed setting Tx topology\n");
  		return status;
base-commit: d6f75d86aa786740ef7a7607685e9e1039e30aab
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help