Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Pull networking fixes from David Miller: 1) Fix excessive stack usage in cxgb4, from Arnd Bergmann. 2) Missing skb queue lock init in tipc, from Chris Packham. 3) Fix some regressions in ipv6 flow label handling, from Eric Dumazet. 4) Elide flow dissection of local packets in FIB rules, from Petar Penkov. 5) Fix TLS support build failure in mlx5, from Tariq Toukab. * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (36 commits) ppp: mppe: Revert "ppp: mppe: Add softdep to arc4" net: dsa: qca8k: replace legacy gpio include net: hisilicon: Use devm_platform_ioremap_resource cxgb4: reduce kernel stack usage in cudbg_collect_mem_region() tipc: ensure head->lock is initialised tc-tests: updated skbedit tests nfp: flower: ensure ip protocol is specified for L4 matches nfp: flower: fix ethernet check on match fields net/mlx5e: Provide cb_list pointer when setting up tc block on rep net: phy: make exported variables non-static net: sched: Fix NULL-pointer dereference in tc_indr_block_ing_cmd() davinci_cpdma: don't cast dma_addr_t to pointer net: openvswitch: do not update max_headroom if new headroom is equal to old headroom net/mlx5e: Convert single case statement switch statements into if statements net/mlx5: E-Switch, Reduce ingress acl modify metadata stack usage net/mlx5e: Fix unused variable warning when CONFIG_MLX5_ESWITCH is off net/mlx5e: Fix compilation error in TLS code ipv6: fix static key imbalance in fl_create() ipv6: fix potential crash in ip6_datagram_dst_update() ipv6: tcp: fix flowlabels reflection for RST packets ...
This commit is contained in:
@@ -1054,14 +1054,12 @@ static void cudbg_t4_fwcache(struct cudbg_init *pdbg_init,
|
||||
}
|
||||
}
|
||||
|
||||
static int cudbg_collect_mem_region(struct cudbg_init *pdbg_init,
|
||||
struct cudbg_buffer *dbg_buff,
|
||||
struct cudbg_error *cudbg_err,
|
||||
u8 mem_type)
|
||||
static unsigned long cudbg_mem_region_size(struct cudbg_init *pdbg_init,
|
||||
struct cudbg_error *cudbg_err,
|
||||
u8 mem_type)
|
||||
{
|
||||
struct adapter *padap = pdbg_init->adap;
|
||||
struct cudbg_meminfo mem_info;
|
||||
unsigned long size;
|
||||
u8 mc_idx;
|
||||
int rc;
|
||||
|
||||
@@ -1075,7 +1073,16 @@ static int cudbg_collect_mem_region(struct cudbg_init *pdbg_init,
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
size = mem_info.avail[mc_idx].limit - mem_info.avail[mc_idx].base;
|
||||
return mem_info.avail[mc_idx].limit - mem_info.avail[mc_idx].base;
|
||||
}
|
||||
|
||||
static int cudbg_collect_mem_region(struct cudbg_init *pdbg_init,
|
||||
struct cudbg_buffer *dbg_buff,
|
||||
struct cudbg_error *cudbg_err,
|
||||
u8 mem_type)
|
||||
{
|
||||
unsigned long size = cudbg_mem_region_size(pdbg_init, cudbg_err, mem_type);
|
||||
|
||||
return cudbg_read_fw_mem(pdbg_init, dbg_buff, mem_type, size,
|
||||
cudbg_err);
|
||||
}
|
||||
|
@@ -899,7 +899,6 @@ static int hip04_mac_probe(struct platform_device *pdev)
|
||||
struct of_phandle_args arg;
|
||||
struct net_device *ndev;
|
||||
struct hip04_priv *priv;
|
||||
struct resource *res;
|
||||
int irq;
|
||||
int ret;
|
||||
|
||||
@@ -912,16 +911,14 @@ static int hip04_mac_probe(struct platform_device *pdev)
|
||||
platform_set_drvdata(pdev, ndev);
|
||||
SET_NETDEV_DEV(ndev, &pdev->dev);
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
priv->base = devm_ioremap_resource(d, res);
|
||||
priv->base = devm_platform_ioremap_resource(pdev, 0);
|
||||
if (IS_ERR(priv->base)) {
|
||||
ret = PTR_ERR(priv->base);
|
||||
goto init_fail;
|
||||
}
|
||||
|
||||
#if defined(CONFIG_HI13X1_GMAC)
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
|
||||
priv->sysctrl_base = devm_ioremap_resource(d, res);
|
||||
priv->sysctrl_base = devm_platform_ioremap_resource(pdev, 1);
|
||||
if (IS_ERR(priv->sysctrl_base)) {
|
||||
ret = PTR_ERR(priv->sysctrl_base);
|
||||
goto init_fail;
|
||||
|
@@ -781,7 +781,6 @@ static int hisi_femac_drv_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct device *dev = &pdev->dev;
|
||||
struct device_node *node = dev->of_node;
|
||||
struct resource *res;
|
||||
struct net_device *ndev;
|
||||
struct hisi_femac_priv *priv;
|
||||
struct phy_device *phy;
|
||||
@@ -799,15 +798,13 @@ static int hisi_femac_drv_probe(struct platform_device *pdev)
|
||||
priv->dev = dev;
|
||||
priv->ndev = ndev;
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
priv->port_base = devm_ioremap_resource(dev, res);
|
||||
priv->port_base = devm_platform_ioremap_resource(pdev, 0);
|
||||
if (IS_ERR(priv->port_base)) {
|
||||
ret = PTR_ERR(priv->port_base);
|
||||
goto out_free_netdev;
|
||||
}
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
|
||||
priv->glb_base = devm_ioremap_resource(dev, res);
|
||||
priv->glb_base = devm_platform_ioremap_resource(pdev, 1);
|
||||
if (IS_ERR(priv->glb_base)) {
|
||||
ret = PTR_ERR(priv->glb_base);
|
||||
goto out_free_netdev;
|
||||
|
@@ -1097,7 +1097,6 @@ static int hix5hd2_dev_probe(struct platform_device *pdev)
|
||||
const struct of_device_id *of_id = NULL;
|
||||
struct net_device *ndev;
|
||||
struct hix5hd2_priv *priv;
|
||||
struct resource *res;
|
||||
struct mii_bus *bus;
|
||||
const char *mac_addr;
|
||||
int ret;
|
||||
@@ -1119,15 +1118,13 @@ static int hix5hd2_dev_probe(struct platform_device *pdev)
|
||||
}
|
||||
priv->hw_cap = (unsigned long)of_id->data;
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
priv->base = devm_ioremap_resource(dev, res);
|
||||
priv->base = devm_platform_ioremap_resource(pdev, 0);
|
||||
if (IS_ERR(priv->base)) {
|
||||
ret = PTR_ERR(priv->base);
|
||||
goto out_free_netdev;
|
||||
}
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
|
||||
priv->ctrl_base = devm_ioremap_resource(dev, res);
|
||||
priv->ctrl_base = devm_platform_ioremap_resource(pdev, 1);
|
||||
if (IS_ERR(priv->ctrl_base)) {
|
||||
ret = PTR_ERR(priv->ctrl_base);
|
||||
goto out_free_netdev;
|
||||
|
@@ -417,7 +417,6 @@ static int hns_mdio_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct hns_mdio_device *mdio_dev;
|
||||
struct mii_bus *new_bus;
|
||||
struct resource *res;
|
||||
int ret = -ENODEV;
|
||||
|
||||
if (!pdev) {
|
||||
@@ -442,8 +441,7 @@ static int hns_mdio_probe(struct platform_device *pdev)
|
||||
new_bus->priv = mdio_dev;
|
||||
new_bus->parent = &pdev->dev;
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
mdio_dev->vbase = devm_ioremap_resource(&pdev->dev, res);
|
||||
mdio_dev->vbase = devm_platform_ioremap_resource(pdev, 0);
|
||||
if (IS_ERR(mdio_dev->vbase)) {
|
||||
ret = PTR_ERR(mdio_dev->vbase);
|
||||
return ret;
|
||||
|
@@ -723,7 +723,7 @@ struct mtk_soc_data {
|
||||
#define MTK_MAX_DEVS 2
|
||||
|
||||
#define MTK_SGMII_PHYSPEED_AN BIT(31)
|
||||
#define MTK_SGMII_PHYSPEED_MASK GENMASK(0, 2)
|
||||
#define MTK_SGMII_PHYSPEED_MASK GENMASK(2, 0)
|
||||
#define MTK_SGMII_PHYSPEED_1000 BIT(0)
|
||||
#define MTK_SGMII_PHYSPEED_2500 BIT(1)
|
||||
#define MTK_HAS_FLAGS(flags, _x) (((flags) & (_x)) == (_x))
|
||||
|
@@ -82,7 +82,7 @@ int mtk_sgmii_setup_mode_force(struct mtk_sgmii *ss, int id)
|
||||
return -EINVAL;
|
||||
|
||||
regmap_read(ss->regmap[id], ss->ana_rgc3, &val);
|
||||
val &= ~GENMASK(2, 3);
|
||||
val &= ~GENMASK(3, 2);
|
||||
mode = ss->flags[id] & MTK_SGMII_PHYSPEED_MASK;
|
||||
val |= (mode == MTK_SGMII_PHYSPEED_1000) ? 0 : BIT(2);
|
||||
regmap_write(ss->regmap[id], ss->ana_rgc3, val);
|
||||
|
@@ -81,7 +81,6 @@ mlx5e_ktls_type_check(struct mlx5_core_dev *mdev,
|
||||
struct tls_crypto_info *crypto_info) { return false; }
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_MLX5_FPGA_TLS
|
||||
enum {
|
||||
MLX5_ACCEL_TLS_TX = BIT(0),
|
||||
MLX5_ACCEL_TLS_RX = BIT(1),
|
||||
@@ -103,6 +102,7 @@ struct mlx5_ifc_tls_flow_bits {
|
||||
u8 reserved_at_2[0x1e];
|
||||
};
|
||||
|
||||
#ifdef CONFIG_MLX5_FPGA_TLS
|
||||
int mlx5_accel_tls_add_flow(struct mlx5_core_dev *mdev, void *flow,
|
||||
struct tls_crypto_info *crypto_info,
|
||||
u32 start_offload_tcp_sn, u32 *p_swid,
|
||||
|
@@ -305,6 +305,7 @@ enum {
|
||||
MLX5E_RQ_STATE_ENABLED,
|
||||
MLX5E_RQ_STATE_AM,
|
||||
MLX5E_RQ_STATE_NO_CSUM_COMPLETE,
|
||||
MLX5E_RQ_STATE_CSUM_FULL, /* cqe_csum_full hw bit is set */
|
||||
};
|
||||
|
||||
struct mlx5e_cq {
|
||||
|
@@ -142,22 +142,20 @@ static int mlx5e_tx_reporter_timeout_recover(struct mlx5e_txqsq *sq)
|
||||
{
|
||||
struct mlx5_eq_comp *eq = sq->cq.mcq.eq;
|
||||
u32 eqe_count;
|
||||
int ret;
|
||||
|
||||
netdev_err(sq->channel->netdev, "EQ 0x%x: Cons = 0x%x, irqn = 0x%x\n",
|
||||
eq->core.eqn, eq->core.cons_index, eq->core.irqn);
|
||||
|
||||
eqe_count = mlx5_eq_poll_irq_disabled(eq);
|
||||
ret = eqe_count ? false : true;
|
||||
if (!eqe_count) {
|
||||
clear_bit(MLX5E_SQ_STATE_ENABLED, &sq->state);
|
||||
return ret;
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
netdev_err(sq->channel->netdev, "Recover %d eqes on EQ 0x%x\n",
|
||||
eqe_count, eq->core.eqn);
|
||||
sq->channel->stats->eq_rearm++;
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int mlx5e_tx_reporter_timeout(struct mlx5e_txqsq *sq)
|
||||
@@ -264,13 +262,13 @@ static int mlx5e_tx_reporter_diagnose(struct devlink_health_reporter *reporter,
|
||||
|
||||
err = mlx5_core_query_sq_state(priv->mdev, sq->sqn, &state);
|
||||
if (err)
|
||||
break;
|
||||
goto unlock;
|
||||
|
||||
err = mlx5e_tx_reporter_build_diagnose_output(fmsg, sq->sqn,
|
||||
state,
|
||||
netif_xmit_stopped(sq->txq));
|
||||
if (err)
|
||||
break;
|
||||
goto unlock;
|
||||
}
|
||||
err = devlink_fmsg_arr_pair_nest_end(fmsg);
|
||||
if (err)
|
||||
|
@@ -25,23 +25,17 @@ static void
|
||||
fill_static_params_ctx(void *ctx, struct mlx5e_ktls_offload_context_tx *priv_tx)
|
||||
{
|
||||
struct tls_crypto_info *crypto_info = priv_tx->crypto_info;
|
||||
struct tls12_crypto_info_aes_gcm_128 *info;
|
||||
char *initial_rn, *gcm_iv;
|
||||
u16 salt_sz, rec_seq_sz;
|
||||
char *salt, *rec_seq;
|
||||
u8 tls_version;
|
||||
|
||||
switch (crypto_info->cipher_type) {
|
||||
case TLS_CIPHER_AES_GCM_128: {
|
||||
struct tls12_crypto_info_aes_gcm_128 *info =
|
||||
(struct tls12_crypto_info_aes_gcm_128 *)crypto_info;
|
||||
|
||||
EXTRACT_INFO_FIELDS;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
WARN_ON(1);
|
||||
if (WARN_ON(crypto_info->cipher_type != TLS_CIPHER_AES_GCM_128))
|
||||
return;
|
||||
}
|
||||
|
||||
info = (struct tls12_crypto_info_aes_gcm_128 *)crypto_info;
|
||||
EXTRACT_INFO_FIELDS;
|
||||
|
||||
gcm_iv = MLX5_ADDR_OF(tls_static_params, ctx, gcm_iv);
|
||||
initial_rn = MLX5_ADDR_OF(tls_static_params, ctx, initial_record_number);
|
||||
@@ -234,24 +228,18 @@ tx_post_resync_params(struct mlx5e_txqsq *sq,
|
||||
u64 rcd_sn)
|
||||
{
|
||||
struct tls_crypto_info *crypto_info = priv_tx->crypto_info;
|
||||
struct tls12_crypto_info_aes_gcm_128 *info;
|
||||
__be64 rn_be = cpu_to_be64(rcd_sn);
|
||||
bool skip_static_post;
|
||||
u16 rec_seq_sz;
|
||||
char *rec_seq;
|
||||
|
||||
switch (crypto_info->cipher_type) {
|
||||
case TLS_CIPHER_AES_GCM_128: {
|
||||
struct tls12_crypto_info_aes_gcm_128 *info =
|
||||
(struct tls12_crypto_info_aes_gcm_128 *)crypto_info;
|
||||
|
||||
rec_seq = info->rec_seq;
|
||||
rec_seq_sz = sizeof(info->rec_seq);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
WARN_ON(1);
|
||||
if (WARN_ON(crypto_info->cipher_type != TLS_CIPHER_AES_GCM_128))
|
||||
return;
|
||||
}
|
||||
|
||||
info = (struct tls12_crypto_info_aes_gcm_128 *)crypto_info;
|
||||
rec_seq = info->rec_seq;
|
||||
rec_seq_sz = sizeof(info->rec_seq);
|
||||
|
||||
skip_static_post = !memcmp(rec_seq, &rn_be, rec_seq_sz);
|
||||
if (!skip_static_post)
|
||||
|
@@ -889,6 +889,9 @@ int mlx5e_open_rq(struct mlx5e_channel *c, struct mlx5e_params *params,
|
||||
if (err)
|
||||
goto err_destroy_rq;
|
||||
|
||||
if (MLX5_CAP_ETH(c->mdev, cqe_checksum_full))
|
||||
__set_bit(MLX5E_RQ_STATE_CSUM_FULL, &c->rq.state);
|
||||
|
||||
if (params->rx_dim_enabled)
|
||||
__set_bit(MLX5E_RQ_STATE_AM, &c->rq.state);
|
||||
|
||||
@@ -3390,10 +3393,9 @@ static int mlx5e_modify_channels_vsd(struct mlx5e_channels *chs, bool vsd)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mlx5e_setup_tc_mqprio(struct net_device *netdev,
|
||||
static int mlx5e_setup_tc_mqprio(struct mlx5e_priv *priv,
|
||||
struct tc_mqprio_qopt *mqprio)
|
||||
{
|
||||
struct mlx5e_priv *priv = netdev_priv(netdev);
|
||||
struct mlx5e_channels new_channels = {};
|
||||
u8 tc = mqprio->num_tc;
|
||||
int err = 0;
|
||||
@@ -3475,7 +3477,7 @@ static int mlx5e_setup_tc(struct net_device *dev, enum tc_setup_type type,
|
||||
priv, priv, true);
|
||||
#endif
|
||||
case TC_SETUP_QDISC_MQPRIO:
|
||||
return mlx5e_setup_tc_mqprio(dev, type_data);
|
||||
return mlx5e_setup_tc_mqprio(priv, type_data);
|
||||
default:
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
@@ -1175,6 +1175,8 @@ static int mlx5e_rep_setup_tc_cb(enum tc_setup_type type, void *type_data,
|
||||
}
|
||||
}
|
||||
|
||||
static LIST_HEAD(mlx5e_rep_block_cb_list);
|
||||
|
||||
static int mlx5e_rep_setup_tc(struct net_device *dev, enum tc_setup_type type,
|
||||
void *type_data)
|
||||
{
|
||||
@@ -1182,7 +1184,8 @@ static int mlx5e_rep_setup_tc(struct net_device *dev, enum tc_setup_type type,
|
||||
|
||||
switch (type) {
|
||||
case TC_SETUP_BLOCK:
|
||||
return flow_block_cb_setup_simple(type_data, NULL,
|
||||
return flow_block_cb_setup_simple(type_data,
|
||||
&mlx5e_rep_block_cb_list,
|
||||
mlx5e_rep_setup_tc_cb,
|
||||
priv, priv, true);
|
||||
default:
|
||||
|
@@ -923,8 +923,14 @@ static inline void mlx5e_handle_csum(struct net_device *netdev,
|
||||
if (unlikely(get_ip_proto(skb, network_depth, proto) == IPPROTO_SCTP))
|
||||
goto csum_unnecessary;
|
||||
|
||||
stats->csum_complete++;
|
||||
skb->ip_summed = CHECKSUM_COMPLETE;
|
||||
skb->csum = csum_unfold((__force __sum16)cqe->check_sum);
|
||||
|
||||
if (test_bit(MLX5E_RQ_STATE_CSUM_FULL, &rq->state))
|
||||
return; /* CQE csum covers all received bytes */
|
||||
|
||||
/* csum might need some fixups ...*/
|
||||
if (network_depth > ETH_HLEN)
|
||||
/* CQE csum is calculated from the IP header and does
|
||||
* not cover VLAN headers (if present). This will add
|
||||
@@ -935,7 +941,6 @@ static inline void mlx5e_handle_csum(struct net_device *netdev,
|
||||
skb->csum);
|
||||
|
||||
mlx5e_skb_padding_csum(skb, network_depth, proto, stats);
|
||||
stats->csum_complete++;
|
||||
return;
|
||||
}
|
||||
|
||||
|
@@ -1946,11 +1946,6 @@ int mlx5_eswitch_init(struct mlx5_core_dev *dev)
|
||||
esw->enabled_vports = 0;
|
||||
esw->mode = MLX5_ESWITCH_NONE;
|
||||
esw->offloads.inline_mode = MLX5_INLINE_MODE_NONE;
|
||||
if (MLX5_CAP_ESW_FLOWTABLE_FDB(dev, reformat) &&
|
||||
MLX5_CAP_ESW_FLOWTABLE_FDB(dev, decap))
|
||||
esw->offloads.encap = DEVLINK_ESWITCH_ENCAP_MODE_BASIC;
|
||||
else
|
||||
esw->offloads.encap = DEVLINK_ESWITCH_ENCAP_MODE_NONE;
|
||||
|
||||
dev->priv.eswitch = esw;
|
||||
return 0;
|
||||
|
@@ -1785,8 +1785,8 @@ static int esw_vport_add_ingress_acl_modify_metadata(struct mlx5_eswitch *esw,
|
||||
struct mlx5_vport *vport)
|
||||
{
|
||||
u8 action[MLX5_UN_SZ_BYTES(set_action_in_add_action_in_auto)] = {};
|
||||
static const struct mlx5_flow_spec spec = {};
|
||||
struct mlx5_flow_act flow_act = {};
|
||||
struct mlx5_flow_spec spec = {};
|
||||
int err = 0;
|
||||
|
||||
MLX5_SET(set_action_in, action, action_type, MLX5_ACTION_TYPE_SET);
|
||||
@@ -2131,6 +2131,12 @@ int esw_offloads_init(struct mlx5_eswitch *esw)
|
||||
{
|
||||
int err;
|
||||
|
||||
if (MLX5_CAP_ESW_FLOWTABLE_FDB(esw->dev, reformat) &&
|
||||
MLX5_CAP_ESW_FLOWTABLE_FDB(esw->dev, decap))
|
||||
esw->offloads.encap = DEVLINK_ESWITCH_ENCAP_MODE_BASIC;
|
||||
else
|
||||
esw->offloads.encap = DEVLINK_ESWITCH_ENCAP_MODE_NONE;
|
||||
|
||||
err = esw_offloads_steering_init(esw);
|
||||
if (err)
|
||||
return err;
|
||||
@@ -2187,6 +2193,7 @@ void esw_offloads_cleanup(struct mlx5_eswitch *esw)
|
||||
if (mlx5_eswitch_vport_match_metadata_enabled(esw))
|
||||
mlx5_eswitch_disable_passing_vport_metadata(esw);
|
||||
esw_offloads_steering_cleanup(esw);
|
||||
esw->offloads.encap = DEVLINK_ESWITCH_ENCAP_MODE_NONE;
|
||||
}
|
||||
|
||||
static int esw_mode_from_devlink(u16 mode, u16 *mlx5_mode)
|
||||
|
@@ -711,7 +711,9 @@ static int mlx5_rdma_setup_rn(struct ib_device *ibdev, u8 port_num,
|
||||
|
||||
prof->init(mdev, netdev, prof, ipriv);
|
||||
|
||||
mlx5e_attach_netdev(epriv);
|
||||
err = mlx5e_attach_netdev(epriv);
|
||||
if (err)
|
||||
goto detach;
|
||||
netif_carrier_off(netdev);
|
||||
|
||||
/* set rdma_netdev func pointers */
|
||||
@@ -727,6 +729,11 @@ static int mlx5_rdma_setup_rn(struct ib_device *ibdev, u8 port_num,
|
||||
|
||||
return 0;
|
||||
|
||||
detach:
|
||||
prof->cleanup(epriv);
|
||||
if (ipriv->sub_interface)
|
||||
return err;
|
||||
mlx5e_destroy_mdev_resources(mdev);
|
||||
destroy_ht:
|
||||
mlx5i_pkey_qpn_ht_cleanup(netdev);
|
||||
return err;
|
||||
|
@@ -98,27 +98,12 @@ static int mlx5_set_entropy(struct mlx5_tun_entropy *tun_entropy,
|
||||
*/
|
||||
if (entropy_flags.gre_calc_supported &&
|
||||
reformat_type == MLX5_REFORMAT_TYPE_L2_TO_NVGRE) {
|
||||
/* Other applications may change the global FW entropy
|
||||
* calculations settings. Check that the current entropy value
|
||||
* is the negative of the updated value.
|
||||
*/
|
||||
if (entropy_flags.force_enabled &&
|
||||
enable == entropy_flags.gre_calc_enabled) {
|
||||
mlx5_core_warn(tun_entropy->mdev,
|
||||
"Unexpected GRE entropy calc setting - expected %d",
|
||||
!entropy_flags.gre_calc_enabled);
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
err = mlx5_set_port_gre_tun_entropy_calc(tun_entropy->mdev, enable,
|
||||
entropy_flags.force_supported);
|
||||
if (!entropy_flags.force_supported)
|
||||
return 0;
|
||||
err = mlx5_set_port_gre_tun_entropy_calc(tun_entropy->mdev,
|
||||
enable, !enable);
|
||||
if (err)
|
||||
return err;
|
||||
/* if we turn on the entropy we don't need to force it anymore */
|
||||
if (entropy_flags.force_supported && enable) {
|
||||
err = mlx5_set_port_gre_tun_entropy_calc(tun_entropy->mdev, 1, 0);
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
} else if (entropy_flags.calc_supported) {
|
||||
/* Other applications may change the global FW entropy
|
||||
* calculations settings. Check that the current entropy value
|
||||
|
@@ -368,15 +368,12 @@ nfp_flower_calculate_key_layers(struct nfp_app *app,
|
||||
break;
|
||||
|
||||
default:
|
||||
/* Other ethtype - we need check the masks for the
|
||||
* remainder of the key to ensure we can offload.
|
||||
*/
|
||||
if (nfp_flower_check_higher_than_mac(flow)) {
|
||||
NL_SET_ERR_MSG_MOD(extack, "unsupported offload: non IPv4/IPv6 offload with L3/L4 matches not supported");
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
break;
|
||||
NL_SET_ERR_MSG_MOD(extack, "unsupported offload: match on given EtherType is not supported");
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
} else if (nfp_flower_check_higher_than_mac(flow)) {
|
||||
NL_SET_ERR_MSG_MOD(extack, "unsupported offload: cannot match above L2 without specified EtherType");
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
if (basic.mask && basic.mask->ip_proto) {
|
||||
@@ -389,18 +386,15 @@ nfp_flower_calculate_key_layers(struct nfp_app *app,
|
||||
key_layer |= NFP_FLOWER_LAYER_TP;
|
||||
key_size += sizeof(struct nfp_flower_tp_ports);
|
||||
break;
|
||||
default:
|
||||
/* Other ip proto - we need check the masks for the
|
||||
* remainder of the key to ensure we can offload.
|
||||
*/
|
||||
if (nfp_flower_check_higher_than_l3(flow)) {
|
||||
NL_SET_ERR_MSG_MOD(extack, "unsupported offload: unknown IP protocol with L4 matches not supported");
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!(key_layer & NFP_FLOWER_LAYER_TP) &&
|
||||
nfp_flower_check_higher_than_l3(flow)) {
|
||||
NL_SET_ERR_MSG_MOD(extack, "unsupported offload: cannot match on L4 information without specified IP protocol type");
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
if (flow_rule_match_key(rule, FLOW_DISSECTOR_KEY_TCP)) {
|
||||
struct flow_match_tcp tcp;
|
||||
u32 tcp_flags;
|
||||
|
@@ -123,7 +123,7 @@
|
||||
#define ETDES1_BUFFER2_SIZE_SHIFT 16
|
||||
|
||||
/* Extended Receive descriptor definitions */
|
||||
#define ERDES4_IP_PAYLOAD_TYPE_MASK GENMASK(2, 6)
|
||||
#define ERDES4_IP_PAYLOAD_TYPE_MASK GENMASK(6, 2)
|
||||
#define ERDES4_IP_HDR_ERR BIT(3)
|
||||
#define ERDES4_IP_PAYLOAD_ERR BIT(4)
|
||||
#define ERDES4_IP_CSUM_BYPASSED BIT(5)
|
||||
|
@@ -192,7 +192,7 @@ static const struct emac_variant emac_variant_h6 = {
|
||||
|
||||
/* Used in RX_CTL1*/
|
||||
#define EMAC_RX_MD BIT(1)
|
||||
#define EMAC_RX_TH_MASK GENMASK(4, 5)
|
||||
#define EMAC_RX_TH_MASK GENMASK(5, 4)
|
||||
#define EMAC_RX_TH_32 0
|
||||
#define EMAC_RX_TH_64 (0x1 << 4)
|
||||
#define EMAC_RX_TH_96 (0x2 << 4)
|
||||
@@ -203,7 +203,7 @@ static const struct emac_variant emac_variant_h6 = {
|
||||
/* Used in TX_CTL1*/
|
||||
#define EMAC_TX_MD BIT(1)
|
||||
#define EMAC_TX_NEXT_FRM BIT(2)
|
||||
#define EMAC_TX_TH_MASK GENMASK(8, 10)
|
||||
#define EMAC_TX_TH_MASK GENMASK(10, 8)
|
||||
#define EMAC_TX_TH_64 0
|
||||
#define EMAC_TX_TH_128 (0x1 << 8)
|
||||
#define EMAC_TX_TH_192 (0x2 << 8)
|
||||
|
@@ -138,8 +138,8 @@ struct submit_info {
|
||||
struct cpdma_chan *chan;
|
||||
int directed;
|
||||
void *token;
|
||||
void *data;
|
||||
int flags;
|
||||
void *data_virt;
|
||||
dma_addr_t data_dma;
|
||||
int len;
|
||||
};
|
||||
|
||||
@@ -1043,12 +1043,12 @@ static int cpdma_chan_submit_si(struct submit_info *si)
|
||||
mode = CPDMA_DESC_OWNER | CPDMA_DESC_SOP | CPDMA_DESC_EOP;
|
||||
cpdma_desc_to_port(chan, mode, si->directed);
|
||||
|
||||
if (si->flags & CPDMA_DMA_EXT_MAP) {
|
||||
buffer = (dma_addr_t)si->data;
|
||||
if (si->data_dma) {
|
||||
buffer = si->data_dma;
|
||||
dma_sync_single_for_device(ctlr->dev, buffer, len, chan->dir);
|
||||
swlen |= CPDMA_DMA_EXT_MAP;
|
||||
} else {
|
||||
buffer = dma_map_single(ctlr->dev, si->data, len, chan->dir);
|
||||
buffer = dma_map_single(ctlr->dev, si->data_virt, len, chan->dir);
|
||||
ret = dma_mapping_error(ctlr->dev, buffer);
|
||||
if (ret) {
|
||||
cpdma_desc_free(ctlr->pool, desc, 1);
|
||||
@@ -1086,10 +1086,10 @@ int cpdma_chan_idle_submit(struct cpdma_chan *chan, void *token, void *data,
|
||||
|
||||
si.chan = chan;
|
||||
si.token = token;
|
||||
si.data = data;
|
||||
si.data_virt = data;
|
||||
si.data_dma = 0;
|
||||
si.len = len;
|
||||
si.directed = directed;
|
||||
si.flags = 0;
|
||||
|
||||
spin_lock_irqsave(&chan->lock, flags);
|
||||
if (chan->state == CPDMA_STATE_TEARDOWN) {
|
||||
@@ -1111,10 +1111,10 @@ int cpdma_chan_idle_submit_mapped(struct cpdma_chan *chan, void *token,
|
||||
|
||||
si.chan = chan;
|
||||
si.token = token;
|
||||
si.data = (void *)data;
|
||||
si.data_virt = NULL;
|
||||
si.data_dma = data;
|
||||
si.len = len;
|
||||
si.directed = directed;
|
||||
si.flags = CPDMA_DMA_EXT_MAP;
|
||||
|
||||
spin_lock_irqsave(&chan->lock, flags);
|
||||
if (chan->state == CPDMA_STATE_TEARDOWN) {
|
||||
@@ -1136,10 +1136,10 @@ int cpdma_chan_submit(struct cpdma_chan *chan, void *token, void *data,
|
||||
|
||||
si.chan = chan;
|
||||
si.token = token;
|
||||
si.data = data;
|
||||
si.data_virt = data;
|
||||
si.data_dma = 0;
|
||||
si.len = len;
|
||||
si.directed = directed;
|
||||
si.flags = 0;
|
||||
|
||||
spin_lock_irqsave(&chan->lock, flags);
|
||||
if (chan->state != CPDMA_STATE_ACTIVE) {
|
||||
@@ -1161,10 +1161,10 @@ int cpdma_chan_submit_mapped(struct cpdma_chan *chan, void *token,
|
||||
|
||||
si.chan = chan;
|
||||
si.token = token;
|
||||
si.data = (void *)data;
|
||||
si.data_virt = NULL;
|
||||
si.data_dma = data;
|
||||
si.len = len;
|
||||
si.directed = directed;
|
||||
si.flags = CPDMA_DMA_EXT_MAP;
|
||||
|
||||
spin_lock_irqsave(&chan->lock, flags);
|
||||
if (chan->state != CPDMA_STATE_ACTIVE) {
|
||||
|
Reference in New Issue
Block a user