mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-14 12:37:32 +00:00
openvswitch: add OVS_DP_ATTR_PER_CPU_PIDS to get requests
CRIU needs OVS_DP_ATTR_PER_CPU_PIDS to checkpoint/restore newest openvswitch versions. Add pids to generic datapath reply. Limit exported pids amount to nr_cpu_ids. Signed-off-by: Andrey Zhadchenko <andrey.zhadchenko@virtuozzo.com> Acked-by: Christian Brauner (Microsoft) <brauner@kernel.org> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
54c4ef34c4
commit
347541e299
1 changed files with 9 additions and 1 deletions
|
@ -1523,6 +1523,7 @@ static size_t ovs_dp_cmd_msg_size(void)
|
||||||
msgsize += nla_total_size_64bit(sizeof(struct ovs_dp_megaflow_stats));
|
msgsize += nla_total_size_64bit(sizeof(struct ovs_dp_megaflow_stats));
|
||||||
msgsize += nla_total_size(sizeof(u32)); /* OVS_DP_ATTR_USER_FEATURES */
|
msgsize += nla_total_size(sizeof(u32)); /* OVS_DP_ATTR_USER_FEATURES */
|
||||||
msgsize += nla_total_size(sizeof(u32)); /* OVS_DP_ATTR_MASKS_CACHE_SIZE */
|
msgsize += nla_total_size(sizeof(u32)); /* OVS_DP_ATTR_MASKS_CACHE_SIZE */
|
||||||
|
msgsize += nla_total_size(sizeof(u32) * nr_cpu_ids); /* OVS_DP_ATTR_PER_CPU_PIDS */
|
||||||
|
|
||||||
return msgsize;
|
return msgsize;
|
||||||
}
|
}
|
||||||
|
@ -1534,7 +1535,8 @@ static int ovs_dp_cmd_fill_info(struct datapath *dp, struct sk_buff *skb,
|
||||||
struct ovs_header *ovs_header;
|
struct ovs_header *ovs_header;
|
||||||
struct ovs_dp_stats dp_stats;
|
struct ovs_dp_stats dp_stats;
|
||||||
struct ovs_dp_megaflow_stats dp_megaflow_stats;
|
struct ovs_dp_megaflow_stats dp_megaflow_stats;
|
||||||
int err;
|
struct dp_nlsk_pids *pids = ovsl_dereference(dp->upcall_portids);
|
||||||
|
int err, pids_len;
|
||||||
|
|
||||||
ovs_header = genlmsg_put(skb, portid, seq, &dp_datapath_genl_family,
|
ovs_header = genlmsg_put(skb, portid, seq, &dp_datapath_genl_family,
|
||||||
flags, cmd);
|
flags, cmd);
|
||||||
|
@ -1564,6 +1566,12 @@ static int ovs_dp_cmd_fill_info(struct datapath *dp, struct sk_buff *skb,
|
||||||
ovs_flow_tbl_masks_cache_size(&dp->table)))
|
ovs_flow_tbl_masks_cache_size(&dp->table)))
|
||||||
goto nla_put_failure;
|
goto nla_put_failure;
|
||||||
|
|
||||||
|
if (dp->user_features & OVS_DP_F_DISPATCH_UPCALL_PER_CPU && pids) {
|
||||||
|
pids_len = min(pids->n_pids, nr_cpu_ids) * sizeof(u32);
|
||||||
|
if (nla_put(skb, OVS_DP_ATTR_PER_CPU_PIDS, pids_len, &pids->pids))
|
||||||
|
goto nla_put_failure;
|
||||||
|
}
|
||||||
|
|
||||||
genlmsg_end(skb, ovs_header);
|
genlmsg_end(skb, ovs_header);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue