Skip to content

Commit b739012

Browse files
committed
Merge branch 'mlxsw-fixes'
Jiri Pirko says: ==================== mlxsw: couple of fixes Couple of unrelated fixes for mlxsw. --- v1->v2: -patch 2: - rebase on top of current -net tree - removed forgotten empty line -patch 3: - new patch -patch 4: - new patch ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
2 parents 7358799 + b3529af commit b739012

File tree

6 files changed

+76
-55
lines changed

6 files changed

+76
-55
lines changed

drivers/net/ethernet/mellanox/mlxsw/core_acl_flex_keys.h

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -107,20 +107,20 @@ static const struct mlxsw_afk_element_info mlxsw_afk_element_infos[] = {
107107
MLXSW_AFK_ELEMENT_INFO_U32(VID, 0x10, 8, 12),
108108
MLXSW_AFK_ELEMENT_INFO_U32(PCP, 0x10, 20, 3),
109109
MLXSW_AFK_ELEMENT_INFO_U32(TCP_FLAGS, 0x10, 23, 9),
110-
MLXSW_AFK_ELEMENT_INFO_U32(IP_TTL_, 0x14, 0, 8),
111-
MLXSW_AFK_ELEMENT_INFO_U32(IP_ECN, 0x14, 9, 2),
112-
MLXSW_AFK_ELEMENT_INFO_U32(IP_DSCP, 0x14, 11, 6),
113-
MLXSW_AFK_ELEMENT_INFO_U32(SRC_IP4, 0x18, 0, 32),
114-
MLXSW_AFK_ELEMENT_INFO_U32(DST_IP4, 0x1C, 0, 32),
115-
MLXSW_AFK_ELEMENT_INFO_BUF(SRC_IP6_HI, 0x18, 8),
116-
MLXSW_AFK_ELEMENT_INFO_BUF(SRC_IP6_LO, 0x20, 8),
117-
MLXSW_AFK_ELEMENT_INFO_BUF(DST_IP6_HI, 0x28, 8),
118-
MLXSW_AFK_ELEMENT_INFO_BUF(DST_IP6_LO, 0x30, 8),
119110
MLXSW_AFK_ELEMENT_INFO_U32(DST_L4_PORT, 0x14, 0, 16),
120111
MLXSW_AFK_ELEMENT_INFO_U32(SRC_L4_PORT, 0x14, 16, 16),
112+
MLXSW_AFK_ELEMENT_INFO_U32(IP_TTL_, 0x18, 0, 8),
113+
MLXSW_AFK_ELEMENT_INFO_U32(IP_ECN, 0x18, 9, 2),
114+
MLXSW_AFK_ELEMENT_INFO_U32(IP_DSCP, 0x18, 11, 6),
115+
MLXSW_AFK_ELEMENT_INFO_U32(SRC_IP4, 0x20, 0, 32),
116+
MLXSW_AFK_ELEMENT_INFO_U32(DST_IP4, 0x24, 0, 32),
117+
MLXSW_AFK_ELEMENT_INFO_BUF(SRC_IP6_HI, 0x20, 8),
118+
MLXSW_AFK_ELEMENT_INFO_BUF(SRC_IP6_LO, 0x28, 8),
119+
MLXSW_AFK_ELEMENT_INFO_BUF(DST_IP6_HI, 0x30, 8),
120+
MLXSW_AFK_ELEMENT_INFO_BUF(DST_IP6_LO, 0x38, 8),
121121
};
122122

123-
#define MLXSW_AFK_ELEMENT_STORAGE_SIZE 0x38
123+
#define MLXSW_AFK_ELEMENT_STORAGE_SIZE 0x40
124124

125125
struct mlxsw_afk_element_inst { /* element instance in actual block */
126126
const struct mlxsw_afk_element_info *info;

drivers/net/ethernet/mellanox/mlxsw/spectrum.c

Lines changed: 45 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1459,6 +1459,7 @@ mlxsw_sp_port_vlan_create(struct mlxsw_sp_port *mlxsw_sp_port, u16 vid)
14591459
}
14601460

14611461
mlxsw_sp_port_vlan->mlxsw_sp_port = mlxsw_sp_port;
1462+
mlxsw_sp_port_vlan->ref_count = 1;
14621463
mlxsw_sp_port_vlan->vid = vid;
14631464
list_add(&mlxsw_sp_port_vlan->list, &mlxsw_sp_port->vlans_list);
14641465

@@ -1486,8 +1487,10 @@ mlxsw_sp_port_vlan_get(struct mlxsw_sp_port *mlxsw_sp_port, u16 vid)
14861487
struct mlxsw_sp_port_vlan *mlxsw_sp_port_vlan;
14871488

14881489
mlxsw_sp_port_vlan = mlxsw_sp_port_vlan_find_by_vid(mlxsw_sp_port, vid);
1489-
if (mlxsw_sp_port_vlan)
1490+
if (mlxsw_sp_port_vlan) {
1491+
mlxsw_sp_port_vlan->ref_count++;
14901492
return mlxsw_sp_port_vlan;
1493+
}
14911494

14921495
return mlxsw_sp_port_vlan_create(mlxsw_sp_port, vid);
14931496
}
@@ -1496,6 +1499,9 @@ void mlxsw_sp_port_vlan_put(struct mlxsw_sp_port_vlan *mlxsw_sp_port_vlan)
14961499
{
14971500
struct mlxsw_sp_fid *fid = mlxsw_sp_port_vlan->fid;
14981501

1502+
if (--mlxsw_sp_port_vlan->ref_count != 0)
1503+
return;
1504+
14991505
if (mlxsw_sp_port_vlan->bridge_port)
15001506
mlxsw_sp_port_vlan_bridge_leave(mlxsw_sp_port_vlan);
15011507
else if (fid)
@@ -4207,13 +4213,12 @@ static struct devlink_resource_ops mlxsw_sp_resource_kvd_hash_double_ops = {
42074213
.size_validate = mlxsw_sp_resource_kvd_hash_double_size_validate,
42084214
};
42094215

4210-
static struct devlink_resource_size_params mlxsw_sp_kvd_size_params;
4211-
static struct devlink_resource_size_params mlxsw_sp_linear_size_params;
4212-
static struct devlink_resource_size_params mlxsw_sp_hash_single_size_params;
4213-
static struct devlink_resource_size_params mlxsw_sp_hash_double_size_params;
4214-
42154216
static void
4216-
mlxsw_sp_resource_size_params_prepare(struct mlxsw_core *mlxsw_core)
4217+
mlxsw_sp_resource_size_params_prepare(struct mlxsw_core *mlxsw_core,
4218+
struct devlink_resource_size_params *kvd_size_params,
4219+
struct devlink_resource_size_params *linear_size_params,
4220+
struct devlink_resource_size_params *hash_double_size_params,
4221+
struct devlink_resource_size_params *hash_single_size_params)
42174222
{
42184223
u32 single_size_min = MLXSW_CORE_RES_GET(mlxsw_core,
42194224
KVD_SINGLE_MIN_SIZE);
@@ -4222,37 +4227,35 @@ mlxsw_sp_resource_size_params_prepare(struct mlxsw_core *mlxsw_core)
42224227
u32 kvd_size = MLXSW_CORE_RES_GET(mlxsw_core, KVD_SIZE);
42234228
u32 linear_size_min = 0;
42244229

4225-
/* KVD top resource */
4226-
mlxsw_sp_kvd_size_params.size_min = kvd_size;
4227-
mlxsw_sp_kvd_size_params.size_max = kvd_size;
4228-
mlxsw_sp_kvd_size_params.size_granularity = MLXSW_SP_KVD_GRANULARITY;
4229-
mlxsw_sp_kvd_size_params.unit = DEVLINK_RESOURCE_UNIT_ENTRY;
4230-
4231-
/* Linear part init */
4232-
mlxsw_sp_linear_size_params.size_min = linear_size_min;
4233-
mlxsw_sp_linear_size_params.size_max = kvd_size - single_size_min -
4234-
double_size_min;
4235-
mlxsw_sp_linear_size_params.size_granularity = MLXSW_SP_KVD_GRANULARITY;
4236-
mlxsw_sp_linear_size_params.unit = DEVLINK_RESOURCE_UNIT_ENTRY;
4237-
4238-
/* Hash double part init */
4239-
mlxsw_sp_hash_double_size_params.size_min = double_size_min;
4240-
mlxsw_sp_hash_double_size_params.size_max = kvd_size - single_size_min -
4241-
linear_size_min;
4242-
mlxsw_sp_hash_double_size_params.size_granularity = MLXSW_SP_KVD_GRANULARITY;
4243-
mlxsw_sp_hash_double_size_params.unit = DEVLINK_RESOURCE_UNIT_ENTRY;
4244-
4245-
/* Hash single part init */
4246-
mlxsw_sp_hash_single_size_params.size_min = single_size_min;
4247-
mlxsw_sp_hash_single_size_params.size_max = kvd_size - double_size_min -
4248-
linear_size_min;
4249-
mlxsw_sp_hash_single_size_params.size_granularity = MLXSW_SP_KVD_GRANULARITY;
4250-
mlxsw_sp_hash_single_size_params.unit = DEVLINK_RESOURCE_UNIT_ENTRY;
4230+
devlink_resource_size_params_init(kvd_size_params, kvd_size, kvd_size,
4231+
MLXSW_SP_KVD_GRANULARITY,
4232+
DEVLINK_RESOURCE_UNIT_ENTRY);
4233+
devlink_resource_size_params_init(linear_size_params, linear_size_min,
4234+
kvd_size - single_size_min -
4235+
double_size_min,
4236+
MLXSW_SP_KVD_GRANULARITY,
4237+
DEVLINK_RESOURCE_UNIT_ENTRY);
4238+
devlink_resource_size_params_init(hash_double_size_params,
4239+
double_size_min,
4240+
kvd_size - single_size_min -
4241+
linear_size_min,
4242+
MLXSW_SP_KVD_GRANULARITY,
4243+
DEVLINK_RESOURCE_UNIT_ENTRY);
4244+
devlink_resource_size_params_init(hash_single_size_params,
4245+
single_size_min,
4246+
kvd_size - double_size_min -
4247+
linear_size_min,
4248+
MLXSW_SP_KVD_GRANULARITY,
4249+
DEVLINK_RESOURCE_UNIT_ENTRY);
42514250
}
42524251

42534252
static int mlxsw_sp_resources_register(struct mlxsw_core *mlxsw_core)
42544253
{
42554254
struct devlink *devlink = priv_to_devlink(mlxsw_core);
4255+
struct devlink_resource_size_params hash_single_size_params;
4256+
struct devlink_resource_size_params hash_double_size_params;
4257+
struct devlink_resource_size_params linear_size_params;
4258+
struct devlink_resource_size_params kvd_size_params;
42564259
u32 kvd_size, single_size, double_size, linear_size;
42574260
const struct mlxsw_config_profile *profile;
42584261
int err;
@@ -4261,13 +4264,17 @@ static int mlxsw_sp_resources_register(struct mlxsw_core *mlxsw_core)
42614264
if (!MLXSW_CORE_RES_VALID(mlxsw_core, KVD_SIZE))
42624265
return -EIO;
42634266

4264-
mlxsw_sp_resource_size_params_prepare(mlxsw_core);
4267+
mlxsw_sp_resource_size_params_prepare(mlxsw_core, &kvd_size_params,
4268+
&linear_size_params,
4269+
&hash_double_size_params,
4270+
&hash_single_size_params);
4271+
42654272
kvd_size = MLXSW_CORE_RES_GET(mlxsw_core, KVD_SIZE);
42664273
err = devlink_resource_register(devlink, MLXSW_SP_RESOURCE_NAME_KVD,
42674274
true, kvd_size,
42684275
MLXSW_SP_RESOURCE_KVD,
42694276
DEVLINK_RESOURCE_ID_PARENT_TOP,
4270-
&mlxsw_sp_kvd_size_params,
4277+
&kvd_size_params,
42714278
&mlxsw_sp_resource_kvd_ops);
42724279
if (err)
42734280
return err;
@@ -4277,7 +4284,7 @@ static int mlxsw_sp_resources_register(struct mlxsw_core *mlxsw_core)
42774284
false, linear_size,
42784285
MLXSW_SP_RESOURCE_KVD_LINEAR,
42794286
MLXSW_SP_RESOURCE_KVD,
4280-
&mlxsw_sp_linear_size_params,
4287+
&linear_size_params,
42814288
&mlxsw_sp_resource_kvd_linear_ops);
42824289
if (err)
42834290
return err;
@@ -4291,7 +4298,7 @@ static int mlxsw_sp_resources_register(struct mlxsw_core *mlxsw_core)
42914298
false, double_size,
42924299
MLXSW_SP_RESOURCE_KVD_HASH_DOUBLE,
42934300
MLXSW_SP_RESOURCE_KVD,
4294-
&mlxsw_sp_hash_double_size_params,
4301+
&hash_double_size_params,
42954302
&mlxsw_sp_resource_kvd_hash_double_ops);
42964303
if (err)
42974304
return err;
@@ -4301,7 +4308,7 @@ static int mlxsw_sp_resources_register(struct mlxsw_core *mlxsw_core)
43014308
false, single_size,
43024309
MLXSW_SP_RESOURCE_KVD_HASH_SINGLE,
43034310
MLXSW_SP_RESOURCE_KVD,
4304-
&mlxsw_sp_hash_single_size_params,
4311+
&hash_single_size_params,
43054312
&mlxsw_sp_resource_kvd_hash_single_ops);
43064313
if (err)
43074314
return err;

drivers/net/ethernet/mellanox/mlxsw/spectrum.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,7 @@ struct mlxsw_sp_port_vlan {
211211
struct list_head list;
212212
struct mlxsw_sp_port *mlxsw_sp_port;
213213
struct mlxsw_sp_fid *fid;
214+
unsigned int ref_count;
214215
u16 vid;
215216
struct mlxsw_sp_bridge_port *bridge_port;
216217
struct list_head bridge_vlan_node;

drivers/net/ethernet/mellanox/mlxsw/spectrum_fid.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,11 +112,11 @@ static const int mlxsw_sp_sfgc_bc_packet_types[MLXSW_REG_SFGC_TYPE_MAX] = {
112112
[MLXSW_REG_SFGC_TYPE_UNREGISTERED_MULTICAST_NON_IP] = 1,
113113
[MLXSW_REG_SFGC_TYPE_IPV4_LINK_LOCAL] = 1,
114114
[MLXSW_REG_SFGC_TYPE_IPV6_ALL_HOST] = 1,
115+
[MLXSW_REG_SFGC_TYPE_UNREGISTERED_MULTICAST_IPV6] = 1,
115116
};
116117

117118
static const int mlxsw_sp_sfgc_mc_packet_types[MLXSW_REG_SFGC_TYPE_MAX] = {
118119
[MLXSW_REG_SFGC_TYPE_UNREGISTERED_MULTICAST_IPV4] = 1,
119-
[MLXSW_REG_SFGC_TYPE_UNREGISTERED_MULTICAST_IPV6] = 1,
120120
};
121121

122122
static const int *mlxsw_sp_packet_type_sfgc_types[] = {

include/net/devlink.h

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,18 @@ struct devlink_resource_size_params {
257257
enum devlink_resource_unit unit;
258258
};
259259

260+
static inline void
261+
devlink_resource_size_params_init(struct devlink_resource_size_params *size_params,
262+
u64 size_min, u64 size_max,
263+
u64 size_granularity,
264+
enum devlink_resource_unit unit)
265+
{
266+
size_params->size_min = size_min;
267+
size_params->size_max = size_max;
268+
size_params->size_granularity = size_granularity;
269+
size_params->unit = unit;
270+
}
271+
260272
/**
261273
* struct devlink_resource - devlink resource
262274
* @name: name of the resource
@@ -278,7 +290,7 @@ struct devlink_resource {
278290
u64 size_new;
279291
bool size_valid;
280292
struct devlink_resource *parent;
281-
struct devlink_resource_size_params *size_params;
293+
struct devlink_resource_size_params size_params;
282294
struct list_head list;
283295
struct list_head resource_list;
284296
const struct devlink_resource_ops *resource_ops;
@@ -402,7 +414,7 @@ int devlink_resource_register(struct devlink *devlink,
402414
u64 resource_size,
403415
u64 resource_id,
404416
u64 parent_resource_id,
405-
struct devlink_resource_size_params *size_params,
417+
const struct devlink_resource_size_params *size_params,
406418
const struct devlink_resource_ops *resource_ops);
407419
void devlink_resources_unregister(struct devlink *devlink,
408420
struct devlink_resource *resource);
@@ -556,7 +568,7 @@ devlink_resource_register(struct devlink *devlink,
556568
u64 resource_size,
557569
u64 resource_id,
558570
u64 parent_resource_id,
559-
struct devlink_resource_size_params *size_params,
571+
const struct devlink_resource_size_params *size_params,
560572
const struct devlink_resource_ops *resource_ops)
561573
{
562574
return 0;

net/core/devlink.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2379,7 +2379,7 @@ devlink_resource_size_params_put(struct devlink_resource *resource,
23792379
{
23802380
struct devlink_resource_size_params *size_params;
23812381

2382-
size_params = resource->size_params;
2382+
size_params = &resource->size_params;
23832383
if (nla_put_u64_64bit(skb, DEVLINK_ATTR_RESOURCE_SIZE_GRAN,
23842384
size_params->size_granularity, DEVLINK_ATTR_PAD) ||
23852385
nla_put_u64_64bit(skb, DEVLINK_ATTR_RESOURCE_SIZE_MAX,
@@ -3156,7 +3156,7 @@ int devlink_resource_register(struct devlink *devlink,
31563156
u64 resource_size,
31573157
u64 resource_id,
31583158
u64 parent_resource_id,
3159-
struct devlink_resource_size_params *size_params,
3159+
const struct devlink_resource_size_params *size_params,
31603160
const struct devlink_resource_ops *resource_ops)
31613161
{
31623162
struct devlink_resource *resource;
@@ -3199,7 +3199,8 @@ int devlink_resource_register(struct devlink *devlink,
31993199
resource->id = resource_id;
32003200
resource->resource_ops = resource_ops;
32013201
resource->size_valid = true;
3202-
resource->size_params = size_params;
3202+
memcpy(&resource->size_params, size_params,
3203+
sizeof(resource->size_params));
32033204
INIT_LIST_HEAD(&resource->resource_list);
32043205
list_add_tail(&resource->list, resource_list);
32053206
out:

0 commit comments

Comments
 (0)