Message ID | 20240618141157.1881093-4-marcin.szycik@linux.intel.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | Switch API optimizations | expand |
From: Marcin Szycik <marcin.szycik@linux.intel.com> Date: Tue, 18 Jun 2024 16:11:54 +0200 > From: Michal Swiatkowski <michal.swiatkowski@linux.intel.com> > > Remove unnecessary size checks when copying bitmaps in ice_add_sw_recipe() > and replace them with compile time assert. Check if the bitmaps are equal > size, as they are copied both ways. > > Signed-off-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com> > Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com> > Co-developed-by: Marcin Szycik <marcin.szycik@linux.intel.com> > Signed-off-by: Marcin Szycik <marcin.szycik@linux.intel.com> > --- > drivers/net/ethernet/intel/ice/ice_switch.c | 24 ++++++++------------- > 1 file changed, 9 insertions(+), 15 deletions(-) > > diff --git a/drivers/net/ethernet/intel/ice/ice_switch.c b/drivers/net/ethernet/intel/ice/ice_switch.c > index da065512889d..2f67fbb73fd1 100644 > --- a/drivers/net/ethernet/intel/ice/ice_switch.c > +++ b/drivers/net/ethernet/intel/ice/ice_switch.c > @@ -5067,6 +5067,10 @@ ice_find_free_recp_res_idx(struct ice_hw *hw, const unsigned long *profiles, > return (u16)bitmap_weight(free_idx, ICE_MAX_FV_WORDS); > } > > +/* For memcpy in ice_add_sw_recipe. */ > +static_assert(sizeof(((struct ice_aqc_recipe_data_elem *)0)->recipe_bitmap) == > + sizeof(((struct ice_sw_recipe *)0)->r_bitmap)); sizeof_field(struct ice_aqc_recipe_data_elem, recipe_bitmap) etc. > + > /** > * ice_add_sw_recipe - function to call AQ calls to create switch recipe > * @hw: pointer to hardware structure > @@ -5187,13 +5191,9 @@ ice_add_sw_recipe(struct ice_hw *hw, struct ice_sw_recipe *rm, > rm->root_rid = buf[0].recipe_indx; > set_bit(buf[0].recipe_indx, rm->r_bitmap); > buf[0].content.rid = rm->root_rid | ICE_AQ_RECIPE_ID_IS_ROOT; > - if (sizeof(buf[0].recipe_bitmap) >= sizeof(rm->r_bitmap)) { > - memcpy(buf[0].recipe_bitmap, rm->r_bitmap, > - sizeof(buf[0].recipe_bitmap)); > - } else { > - status = -EINVAL; > - goto err_unroll; > - } > + memcpy(buf[0].recipe_bitmap, rm->r_bitmap, > + sizeof(buf[0].recipe_bitmap)); > + > /* Applicable only for ROOT_RECIPE, set the fwd_priority for > * the recipe which is getting created if specified > * by user. Usually any advanced switch filter, which results > @@ -5256,14 +5256,8 @@ ice_add_sw_recipe(struct ice_hw *hw, struct ice_sw_recipe *rm, > set_bit(entry->rid, rm->r_bitmap); > } > list_add(&last_chain_entry->l_entry, &rm->rg_list); > - if (sizeof(buf[recps].recipe_bitmap) >= > - sizeof(rm->r_bitmap)) { > - memcpy(buf[recps].recipe_bitmap, rm->r_bitmap, > - sizeof(buf[recps].recipe_bitmap)); > - } else { > - status = -EINVAL; > - goto err_unroll; > - } > + memcpy(buf[recps].recipe_bitmap, rm->r_bitmap, > + sizeof(buf[recps].recipe_bitmap)); > content->act_ctrl_fwd_priority = rm->priority; > > recps++; Thanks, Olek
diff --git a/drivers/net/ethernet/intel/ice/ice_switch.c b/drivers/net/ethernet/intel/ice/ice_switch.c index da065512889d..2f67fbb73fd1 100644 --- a/drivers/net/ethernet/intel/ice/ice_switch.c +++ b/drivers/net/ethernet/intel/ice/ice_switch.c @@ -5067,6 +5067,10 @@ ice_find_free_recp_res_idx(struct ice_hw *hw, const unsigned long *profiles, return (u16)bitmap_weight(free_idx, ICE_MAX_FV_WORDS); } +/* For memcpy in ice_add_sw_recipe. */ +static_assert(sizeof(((struct ice_aqc_recipe_data_elem *)0)->recipe_bitmap) == + sizeof(((struct ice_sw_recipe *)0)->r_bitmap)); + /** * ice_add_sw_recipe - function to call AQ calls to create switch recipe * @hw: pointer to hardware structure @@ -5187,13 +5191,9 @@ ice_add_sw_recipe(struct ice_hw *hw, struct ice_sw_recipe *rm, rm->root_rid = buf[0].recipe_indx; set_bit(buf[0].recipe_indx, rm->r_bitmap); buf[0].content.rid = rm->root_rid | ICE_AQ_RECIPE_ID_IS_ROOT; - if (sizeof(buf[0].recipe_bitmap) >= sizeof(rm->r_bitmap)) { - memcpy(buf[0].recipe_bitmap, rm->r_bitmap, - sizeof(buf[0].recipe_bitmap)); - } else { - status = -EINVAL; - goto err_unroll; - } + memcpy(buf[0].recipe_bitmap, rm->r_bitmap, + sizeof(buf[0].recipe_bitmap)); + /* Applicable only for ROOT_RECIPE, set the fwd_priority for * the recipe which is getting created if specified * by user. Usually any advanced switch filter, which results @@ -5256,14 +5256,8 @@ ice_add_sw_recipe(struct ice_hw *hw, struct ice_sw_recipe *rm, set_bit(entry->rid, rm->r_bitmap); } list_add(&last_chain_entry->l_entry, &rm->rg_list); - if (sizeof(buf[recps].recipe_bitmap) >= - sizeof(rm->r_bitmap)) { - memcpy(buf[recps].recipe_bitmap, rm->r_bitmap, - sizeof(buf[recps].recipe_bitmap)); - } else { - status = -EINVAL; - goto err_unroll; - } + memcpy(buf[recps].recipe_bitmap, rm->r_bitmap, + sizeof(buf[recps].recipe_bitmap)); content->act_ctrl_fwd_priority = rm->priority; recps++;