mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-07 14:32:23 +00:00
RDMA/nldev: Add copy-on-fork attribute to get sys command
The new attribute indicates that the kernel copies DMA pages on fork, hence libibverbs' fork support through madvise and MADV_DONTFORK is not needed. The introduced attribute is always reported as supported since the kernel has the patch that added the copy-on-fork behavior. This allows the userspace library to identify older vs newer kernel versions. Extra care should be taken when backporting this patch as it relies on the fact that the copy-on-fork patch is merged, hence no check for support is added. Don't backport this patch unless you also have the following series: commit70e806e4e6
("mm: Do early cow for pinned pages during fork() for ptes") and commit4eae4efa2c
("hugetlb: do early cow when page pinned on src mm"). Fixes:70e806e4e6
("mm: Do early cow for pinned pages during fork() for ptes") Fixes:4eae4efa2c
("hugetlb: do early cow when page pinned on src mm") Link: https://lore.kernel.org/r/20210418121025.66849-1-galpress@amazon.com Signed-off-by: Gal Pressman <galpress@amazon.com> Reviewed-by: Leon Romanovsky <leonro@nvidia.com> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
This commit is contained in:
parent
34b39efa5a
commit
6cc9e215eb
@ -153,6 +153,7 @@ static const struct nla_policy nldev_policy[RDMA_NLDEV_ATTR_MAX] = {
|
||||
[RDMA_NLDEV_ATTR_UVERBS_DRIVER_ID] = { .type = NLA_U32 },
|
||||
[RDMA_NLDEV_NET_NS_FD] = { .type = NLA_U32 },
|
||||
[RDMA_NLDEV_SYS_ATTR_NETNS_MODE] = { .type = NLA_U8 },
|
||||
[RDMA_NLDEV_SYS_ATTR_COPY_ON_FORK] = { .type = NLA_U8 },
|
||||
};
|
||||
|
||||
static int put_driver_name_print_type(struct sk_buff *msg, const char *name,
|
||||
@ -1849,6 +1850,19 @@ static int nldev_sys_get_doit(struct sk_buff *skb, struct nlmsghdr *nlh,
|
||||
nlmsg_free(msg);
|
||||
return err;
|
||||
}
|
||||
|
||||
/*
|
||||
* Copy-on-fork is supported.
|
||||
* See commits:
|
||||
* 70e806e4e645 ("mm: Do early cow for pinned pages during fork() for ptes")
|
||||
* 4eae4efa2c29 ("hugetlb: do early cow when page pinned on src mm")
|
||||
* for more details. Don't backport this without them.
|
||||
*
|
||||
* Return value ignored on purpose, assume copy-on-fork is not
|
||||
* supported in case of failure.
|
||||
*/
|
||||
nla_put_u8(msg, RDMA_NLDEV_SYS_ATTR_COPY_ON_FORK, 1);
|
||||
|
||||
nlmsg_end(msg, nlh);
|
||||
return rdma_nl_unicast(sock_net(skb->sk), msg, NETLINK_CB(skb).portid);
|
||||
}
|
||||
|
@ -546,6 +546,9 @@ enum rdma_nldev_attr {
|
||||
|
||||
RDMA_NLDEV_ATTR_MIN_RANGE, /* u32 */
|
||||
RDMA_NLDEV_ATTR_MAX_RANGE, /* u32 */
|
||||
|
||||
RDMA_NLDEV_SYS_ATTR_COPY_ON_FORK, /* u8 */
|
||||
|
||||
/*
|
||||
* Always the end
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user