[Intel-wired-lan] [tnguy-next-queue:dev-queue 29/94] drivers/net/ethernet/intel/ice/ice_flow.c:1703:1: warning: the frame size of 4104 bytes is larger than 1024 bytes

kernel test robot lkp at intel.com
Wed Nov 18 13:43:18 UTC 2020


tree:   https://git.kernel.org/pub/scm/linux/kernel/git/tnguy/next-queue.git dev-queue
head:   de0223bde011b2f6da54bfb8e087ac6718a32c8a
commit: 8452a38dcac801e875b13334d886dcf404fb4d33 [29/94] ice: create ACL entry
config: csky-randconfig-p002-20201117 (attached as .config)
compiler: csky-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://git.kernel.org/pub/scm/linux/kernel/git/tnguy/next-queue.git/commit/?id=8452a38dcac801e875b13334d886dcf404fb4d33
        git remote add tnguy-next-queue https://git.kernel.org/pub/scm/linux/kernel/git/tnguy/next-queue.git
        git fetch --no-tags tnguy-next-queue dev-queue
        git checkout 8452a38dcac801e875b13334d886dcf404fb4d33
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=csky 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp at intel.com>

All warnings (new ones prefixed by >>):

   drivers/net/ethernet/intel/ice/ice_flow.c: In function 'ice_flow_acl_frmt_entry':
>> drivers/net/ethernet/intel/ice/ice_flow.c:1703:1: warning: the frame size of 4104 bytes is larger than 1024 bytes [-Wframe-larger-than=]
    1703 | }
         | ^

vim +1703 drivers/net/ethernet/intel/ice/ice_flow.c

  1544	
  1545	/**
  1546	 * ice_flow_acl_frmt_entry - Format ACL entry
  1547	 * @hw: pointer to the hardware structure
  1548	 * @prof: pointer to flow profile
  1549	 * @e: pointer to the flow entry
  1550	 * @data: pointer to a data buffer containing flow entry's match values/masks
  1551	 * @acts: array of actions to be performed on a match
  1552	 * @acts_cnt: number of actions
  1553	 *
  1554	 * Formats the key (and key_inverse) to be matched from the data passed in,
  1555	 * along with data from the flow profile. This key/key_inverse pair makes up
  1556	 * the 'entry' for an ACL flow entry.
  1557	 */
  1558	static enum ice_status
  1559	ice_flow_acl_frmt_entry(struct ice_hw *hw, struct ice_flow_prof *prof,
  1560				struct ice_flow_entry *e, u8 *data,
  1561				struct ice_flow_action *acts, u8 acts_cnt)
  1562	{
  1563		u8 *buf = NULL, *dontcare = NULL, *key = NULL, range = 0, dir_flag_msk;
  1564		struct ice_aqc_acl_profile_ranges *range_buf = NULL;
  1565		enum ice_status status;
  1566		bool cnt_alloc;
  1567		u8 prof_id = 0;
  1568		u16 i, buf_sz;
  1569	
  1570		status = ice_flow_get_hw_prof(hw, ICE_BLK_ACL, prof->id, &prof_id);
  1571		if (status)
  1572			return status;
  1573	
  1574		/* Format the result action */
  1575	
  1576		status = ice_flow_acl_check_actions(hw, acts, acts_cnt, &cnt_alloc);
  1577		if (status)
  1578			return status;
  1579	
  1580		status = ICE_ERR_NO_MEMORY;
  1581	
  1582		e->acts = devm_kmemdup(ice_hw_to_dev(hw), acts,
  1583				       acts_cnt * sizeof(*acts), GFP_KERNEL);
  1584		if (!e->acts)
  1585			goto out;
  1586	
  1587		e->acts_cnt = acts_cnt;
  1588	
  1589		/* Format the matching data */
  1590		buf_sz = prof->cfg.scen->width;
  1591		buf = kzalloc(buf_sz, GFP_KERNEL);
  1592		if (!buf)
  1593			goto out;
  1594	
  1595		dontcare = kzalloc(buf_sz, GFP_KERNEL);
  1596		if (!dontcare)
  1597			goto out;
  1598	
  1599		/* 'key' buffer will store both key and key_inverse, so must be twice
  1600		 * size of buf
  1601		 */
  1602		key = devm_kzalloc(ice_hw_to_dev(hw), buf_sz * 2, GFP_KERNEL);
  1603		if (!key)
  1604			goto out;
  1605	
  1606		range_buf = devm_kzalloc(ice_hw_to_dev(hw),
  1607					 sizeof(struct ice_aqc_acl_profile_ranges),
  1608					 GFP_KERNEL);
  1609		if (!range_buf)
  1610			goto out;
  1611	
  1612		/* Set don't care mask to all 1's to start, will zero out used bytes */
  1613		memset(dontcare, 0xff, buf_sz);
  1614	
  1615		for (i = 0; i < prof->segs_cnt; i++) {
  1616			struct ice_flow_seg_info *seg = &prof->segs[i];
  1617			u8 j;
  1618	
  1619			for_each_set_bit(j, (unsigned long *)&seg->match,
  1620					 ICE_FLOW_FIELD_IDX_MAX) {
  1621				struct ice_flow_fld_info *info = &seg->fields[j];
  1622	
  1623				if (info->type == ICE_FLOW_FLD_TYPE_RANGE)
  1624					ice_flow_acl_frmt_entry_range(j, info,
  1625								      range_buf, data,
  1626								      &range);
  1627				else
  1628					ice_flow_acl_frmt_entry_fld(j, info, buf,
  1629								    dontcare, data);
  1630			}
  1631	
  1632			for (j = 0; j < seg->raws_cnt; j++) {
  1633				struct ice_flow_fld_info *info = &seg->raws[j].info;
  1634				u16 dst, src, mask, k;
  1635				bool use_mask = false;
  1636	
  1637				src = info->src.val;
  1638				dst = info->entry.val -
  1639						ICE_AQC_ACL_PROF_BYTE_SEL_START_IDX;
  1640				mask = info->src.mask;
  1641	
  1642				if (mask != ICE_FLOW_FLD_OFF_INVAL)
  1643					use_mask = true;
  1644	
  1645				for (k = 0; k < info->entry.last; k++, dst++) {
  1646					buf[dst] = data[src++];
  1647					if (use_mask)
  1648						dontcare[dst] = ~data[mask++];
  1649					else
  1650						dontcare[dst] = 0;
  1651				}
  1652			}
  1653		}
  1654	
  1655		buf[prof->cfg.scen->pid_idx] = (u8)prof_id;
  1656		dontcare[prof->cfg.scen->pid_idx] = 0;
  1657	
  1658		/* Format the buffer for direction flags */
  1659		dir_flag_msk = BIT(ICE_FLG_PKT_DIR);
  1660	
  1661		if (prof->dir == ICE_FLOW_RX)
  1662			buf[prof->cfg.scen->pkt_dir_idx] = dir_flag_msk;
  1663	
  1664		if (range) {
  1665			buf[prof->cfg.scen->rng_chk_idx] = range;
  1666			/* Mark any unused range checkers as don't care */
  1667			dontcare[prof->cfg.scen->rng_chk_idx] = ~range;
  1668			e->range_buf = range_buf;
  1669		} else {
  1670			devm_kfree(ice_hw_to_dev(hw), range_buf);
  1671		}
  1672	
  1673		status = ice_set_key(key, buf_sz * 2, buf, NULL, dontcare, NULL, 0,
  1674				     buf_sz);
  1675		if (status)
  1676			goto out;
  1677	
  1678		e->entry = key;
  1679		e->entry_sz = buf_sz * 2;
  1680	
  1681	out:
  1682		kfree(buf);
  1683		kfree(dontcare);
  1684	
  1685		if (status && key)
  1686			devm_kfree(ice_hw_to_dev(hw), key);
  1687	
  1688		if (status && range_buf) {
  1689			devm_kfree(ice_hw_to_dev(hw), range_buf);
  1690			e->range_buf = NULL;
  1691		}
  1692	
  1693		if (status && e->acts) {
  1694			devm_kfree(ice_hw_to_dev(hw), e->acts);
  1695			e->acts = NULL;
  1696			e->acts_cnt = 0;
  1697		}
  1698	
  1699		if (status && cnt_alloc)
  1700			ice_flow_acl_free_act_cntr(hw, acts, acts_cnt);
  1701	
  1702		return status;
> 1703	}
  1704	/**
  1705	 * ice_flow_add_entry - Add a flow entry
  1706	 * @hw: pointer to the HW struct
  1707	 * @blk: classification stage
  1708	 * @prof_id: ID of the profile to add a new flow entry to
  1709	 * @entry_id: unique ID to identify this flow entry
  1710	 * @vsi_handle: software VSI handle for the flow entry
  1711	 * @prio: priority of the flow entry
  1712	 * @data: pointer to a data buffer containing flow entry's match values/masks
  1713	 * @acts: arrays of actions to be performed on a match
  1714	 * @acts_cnt: number of actions
  1715	 * @entry_h: pointer to buffer that receives the new flow entry's handle
  1716	 */
  1717	enum ice_status
  1718	ice_flow_add_entry(struct ice_hw *hw, enum ice_block blk, u64 prof_id,
  1719			   u64 entry_id, u16 vsi_handle, enum ice_flow_priority prio,
  1720			   void *data, struct ice_flow_action *acts, u8 acts_cnt,
  1721			   u64 *entry_h)
  1722	{
  1723		struct ice_flow_entry *e = NULL;
  1724		struct ice_flow_prof *prof;
  1725		enum ice_status status;
  1726	
  1727		/* ACL entries must indicate an action */
  1728		if (blk == ICE_BLK_ACL && (!acts || !acts_cnt))
  1729			return ICE_ERR_PARAM;
  1730	
  1731		/* No flow entry data is expected for RSS */
  1732		if (!entry_h || (!data && blk != ICE_BLK_RSS))
  1733			return ICE_ERR_BAD_PTR;
  1734	
  1735		if (!ice_is_vsi_valid(hw, vsi_handle))
  1736			return ICE_ERR_PARAM;
  1737	
  1738		mutex_lock(&hw->fl_profs_locks[blk]);
  1739	
  1740		prof = ice_flow_find_prof_id(hw, blk, prof_id);
  1741		if (!prof) {
  1742			status = ICE_ERR_DOES_NOT_EXIST;
  1743		} else {
  1744			/* Allocate memory for the entry being added and associate
  1745			 * the VSI to the found flow profile
  1746			 */
  1747			e = devm_kzalloc(ice_hw_to_dev(hw), sizeof(*e), GFP_KERNEL);
  1748			if (!e)
  1749				status = ICE_ERR_NO_MEMORY;
  1750			else
  1751				status = ice_flow_assoc_prof(hw, blk, prof, vsi_handle);
  1752		}
  1753	
  1754		mutex_unlock(&hw->fl_profs_locks[blk]);
  1755		if (status)
  1756			goto out;
  1757	
  1758		e->id = entry_id;
  1759		e->vsi_handle = vsi_handle;
  1760		e->prof = prof;
  1761		e->priority = prio;
  1762	
  1763		switch (blk) {
  1764		case ICE_BLK_FD:
  1765		case ICE_BLK_RSS:
  1766			break;
  1767		case ICE_BLK_ACL:
  1768			/* ACL will handle the entry management */
  1769			status = ice_flow_acl_frmt_entry(hw, prof, e, (u8 *)data, acts,
  1770							 acts_cnt);
  1771			if (status)
  1772				goto out;
  1773			break;
  1774		default:
  1775			status = ICE_ERR_NOT_IMPL;
  1776			goto out;
  1777		}
  1778	
  1779		if (blk != ICE_BLK_ACL) {
  1780			/* ACL will handle the entry management */
  1781			mutex_lock(&prof->entries_lock);
  1782			list_add(&e->l_entry, &prof->entries);
  1783			mutex_unlock(&prof->entries_lock);
  1784		}
  1785	
  1786		*entry_h = ICE_FLOW_ENTRY_HNDL(e);
  1787	
  1788	out:
  1789		if (status && e) {
  1790			if (e->entry)
  1791				devm_kfree(ice_hw_to_dev(hw), e->entry);
  1792			devm_kfree(ice_hw_to_dev(hw), e);
  1793		}
  1794	
  1795		return status;
  1796	}
  1797	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 33155 bytes
Desc: not available
URL: <http://lists.osuosl.org/pipermail/intel-wired-lan/attachments/20201118/1885283d/attachment-0001.bin>


More information about the Intel-wired-lan mailing list