Revision a6f74333548f56afb413fc928ae1aefc4fe7608f authored by Dmytro Linkin on 25 August 2021, 14:51:26 UTC, committed by Saeed Mahameed on 20 October 2021, 17:42:49 UTC
Dan Carpenter report: The patch f47e04eb96e0: "net/mlx5: E-switch, Allow setting share/max tx rate limits of rate groups" from May 31, 2021, leads to the following Smatch static checker warning: drivers/net/ethernet/mellanox/mlx5/core/esw/qos.c:483 esw_qos_create_rate_group() warn: passing zero to 'ERR_PTR' If min rate normalization failed then error code may be overwritten to 0 if scheduling element destruction succeed. Ignore this value and always return initial one. Fixes: f47e04eb96e0 ("net/mlx5: E-switch, Allow setting share/max tx rate limits of rate groups") Reported-by: Dan Carpenter <dan.carpenter@oracle.com> Signed-off-by: Dmytro Linkin <dlinkin@nvidia.com> Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
1 parent 14fe247
br_private_cfm.h
/* SPDX-License-Identifier: GPL-2.0-or-later */
#ifndef _BR_PRIVATE_CFM_H_
#define _BR_PRIVATE_CFM_H_
#include "br_private.h"
#include <uapi/linux/cfm_bridge.h>
struct br_cfm_mep_create {
enum br_cfm_domain domain; /* Domain for this MEP */
enum br_cfm_mep_direction direction; /* Up or Down MEP direction */
u32 ifindex; /* Residence port */
};
int br_cfm_mep_create(struct net_bridge *br,
const u32 instance,
struct br_cfm_mep_create *const create,
struct netlink_ext_ack *extack);
int br_cfm_mep_delete(struct net_bridge *br,
const u32 instance,
struct netlink_ext_ack *extack);
struct br_cfm_mep_config {
u32 mdlevel;
u32 mepid; /* MEPID for this MEP */
struct mac_addr unicast_mac; /* The MEP unicast MAC */
};
int br_cfm_mep_config_set(struct net_bridge *br,
const u32 instance,
const struct br_cfm_mep_config *const config,
struct netlink_ext_ack *extack);
struct br_cfm_maid {
u8 data[CFM_MAID_LENGTH];
};
struct br_cfm_cc_config {
/* Expected received CCM PDU MAID. */
struct br_cfm_maid exp_maid;
/* Expected received CCM PDU interval. */
/* Transmitting CCM PDU interval when CCM tx is enabled. */
enum br_cfm_ccm_interval exp_interval;
bool enable; /* Enable/disable CCM PDU handling */
};
int br_cfm_cc_config_set(struct net_bridge *br,
const u32 instance,
const struct br_cfm_cc_config *const config,
struct netlink_ext_ack *extack);
int br_cfm_cc_peer_mep_add(struct net_bridge *br, const u32 instance,
u32 peer_mep_id,
struct netlink_ext_ack *extack);
int br_cfm_cc_peer_mep_remove(struct net_bridge *br, const u32 instance,
u32 peer_mep_id,
struct netlink_ext_ack *extack);
/* Transmitted CCM Remote Defect Indication status set.
* This RDI is inserted in transmitted CCM PDUs if CCM transmission is enabled.
* See br_cfm_cc_ccm_tx() with interval != BR_CFM_CCM_INTERVAL_NONE
*/
int br_cfm_cc_rdi_set(struct net_bridge *br, const u32 instance,
const bool rdi, struct netlink_ext_ack *extack);
/* OAM PDU Tx information */
struct br_cfm_cc_ccm_tx_info {
struct mac_addr dmac;
/* The CCM will be transmitted for this period in seconds.
* Call br_cfm_cc_ccm_tx before timeout to keep transmission alive.
* When period is zero any ongoing transmission will be stopped.
*/
u32 period;
bool seq_no_update; /* Update Tx CCM sequence number */
bool if_tlv; /* Insert Interface Status TLV */
u8 if_tlv_value; /* Interface Status TLV value */
bool port_tlv; /* Insert Port Status TLV */
u8 port_tlv_value; /* Port Status TLV value */
/* Sender ID TLV ??
* Organization-Specific TLV ??
*/
};
int br_cfm_cc_ccm_tx(struct net_bridge *br, const u32 instance,
const struct br_cfm_cc_ccm_tx_info *const tx_info,
struct netlink_ext_ack *extack);
struct br_cfm_mep_status {
/* Indications that an OAM PDU has been seen. */
bool opcode_unexp_seen; /* RX of OAM PDU with unexpected opcode */
bool version_unexp_seen; /* RX of OAM PDU with unexpected version */
bool rx_level_low_seen; /* Rx of OAM PDU with level low */
};
struct br_cfm_cc_peer_status {
/* This CCM related status is based on the latest received CCM PDU. */
u8 port_tlv_value; /* Port Status TLV value */
u8 if_tlv_value; /* Interface Status TLV value */
/* CCM has not been received for 3.25 intervals */
u8 ccm_defect:1;
/* (RDI == 1) for last received CCM PDU */
u8 rdi:1;
/* Indications that a CCM PDU has been seen. */
u8 seen:1; /* CCM PDU received */
u8 tlv_seen:1; /* CCM PDU with TLV received */
/* CCM PDU with unexpected sequence number received */
u8 seq_unexp_seen:1;
};
struct br_cfm_mep {
/* list header of MEP instances */
struct hlist_node head;
u32 instance;
struct br_cfm_mep_create create;
struct br_cfm_mep_config config;
struct br_cfm_cc_config cc_config;
struct br_cfm_cc_ccm_tx_info cc_ccm_tx_info;
/* List of multiple peer MEPs */
struct hlist_head peer_mep_list;
struct net_bridge_port __rcu *b_port;
unsigned long ccm_tx_end;
struct delayed_work ccm_tx_dwork;
u32 ccm_tx_snumber;
u32 ccm_rx_snumber;
struct br_cfm_mep_status status;
bool rdi;
struct rcu_head rcu;
};
struct br_cfm_peer_mep {
struct hlist_node head;
struct br_cfm_mep *mep;
struct delayed_work ccm_rx_dwork;
u32 mepid;
struct br_cfm_cc_peer_status cc_status;
u32 ccm_rx_count_miss;
struct rcu_head rcu;
};
#endif /* _BR_PRIVATE_CFM_H_ */
![swh spinner](/static/img/swh-spinner.gif)
Computing file changes ...