On 12/04/2021 10:51, Leon Romanovsky wrote: > On Mon, Apr 12, 2021 at 09:41:50AM +0300, Gal Pressman wrote: >> 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: >> 70e806e4e645 ("mm: Do early cow for pinned pages during fork() for ptes") >> and 4eae4efa2c29 ("hugetlb: do early cow when page pinned on src mm"). >> >> Fixes: 70e806e4e645 ("mm: Do early cow for pinned pages during fork() for ptes") >> Fixes: 4eae4efa2c29 ("hugetlb: do early cow when page pinned on src mm") >> Signed-off-by: Gal Pressman <galpress@xxxxxxxxxx> >> --- >> PR was sent: >> https://github.com/linux-rdma/rdma-core/pull/975 >> >> Changelog - >> v2->v3: https://lore.kernel.org/linux-rdma/21317d2c-9a8e-0dd7-3678-d2933c5053c4@xxxxxxxxxx/ >> * Remove check if copy-on-fork attribute was provided from nldev_set_sys_set_doit() >> >> v1->v2: https://lore.kernel.org/linux-rdma/20210405114722.98904-1-galpress@xxxxxxxxxx/ >> * Remove nla_put_u8() return value check >> * Add commit hashes to commit message and code comment >> --- >> drivers/infiniband/core/nldev.c | 11 +++++++++++ >> include/uapi/rdma/rdma_netlink.h | 2 ++ >> 2 files changed, 13 insertions(+) >> >> diff --git a/drivers/infiniband/core/nldev.c b/drivers/infiniband/core/nldev.c >> index b8dc002a2478..4889e06a581a 100644 >> --- a/drivers/infiniband/core/nldev.c >> +++ b/drivers/infiniband/core/nldev.c >> @@ -146,6 +146,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, >> @@ -1697,6 +1698,16 @@ 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. >> + */ >> + nla_put_u8(msg, RDMA_NLDEV_SYS_ATTR_COPY_ON_FORK, 1); >> + > > Nit, it is good to write here that we don't check nla_put_u8() on purpose. > > Thanks, > Reviewed-by: Leon Romanovsky <leonro@xxxxxxxxxx> Thanks Leon!