From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6DE71C25B74 for ; Mon, 27 May 2024 20:43:13 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E08CA6B0089; Mon, 27 May 2024 16:43:12 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id DB78B6B008A; Mon, 27 May 2024 16:43:12 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id CA7FB6B008C; Mon, 27 May 2024 16:43:12 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id AFC8E6B0089 for ; Mon, 27 May 2024 16:43:12 -0400 (EDT) Received: from smtpin04.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 17C04A310C for ; Mon, 27 May 2024 20:43:12 +0000 (UTC) X-FDA: 82165350624.04.EF856A4 Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by imf26.hostedemail.com (Postfix) with ESMTP id 05BA4140008 for ; Mon, 27 May 2024 20:43:09 +0000 (UTC) Authentication-Results: imf26.hostedemail.com; dkim=pass header.d=inria.fr header.s=dc header.b=uZDXkaD6; spf=pass (imf26.hostedemail.com: domain of julia.lawall@inria.fr designates 192.134.164.83 as permitted sender) smtp.mailfrom=julia.lawall@inria.fr; dmarc=pass (policy=none) header.from=inria.fr ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1716842590; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=I/DuBF9NBFZ7X+t6+KQw1LGWaST/A5P+IZjO18Zd+KM=; b=7UoJesIZ2WtyG+MkMqDmKQZRHP1gxjKwO4ZddEO/vsi9jSqj2AwlrK9C1GYQItjnjOpEsN SjJ4vyfA9VTV7/S56ImO6CO8OTKyJ5rZRUxD3yInuus7xmA6rlW/vUJiRGbBZ0vcwgJStv B9zU2tJKlpbY60V30mdJjLoj3Pq9iTY= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1716842590; a=rsa-sha256; cv=none; b=CExMfJhiKmbQRyG/riWyj9+AVDJr5fMAEgwHHxEeHAXKrbTU1n43TGu/JEO9kCwb3niAsm DftELcJzxMKvA+pKU4/tjA7W5YWfCXnXkJ8a8MwNLJ9V61GYF8XYi7aiNpYXFoZ6Am1SbY Mux1Zd0F4nWn+ib+I4KpCiU+J+n3FlI= ARC-Authentication-Results: i=1; imf26.hostedemail.com; dkim=pass header.d=inria.fr header.s=dc header.b=uZDXkaD6; spf=pass (imf26.hostedemail.com: domain of julia.lawall@inria.fr designates 192.134.164.83 as permitted sender) smtp.mailfrom=julia.lawall@inria.fr; dmarc=pass (policy=none) header.from=inria.fr DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=inria.fr; s=dc; h=date:from:to:cc:subject:in-reply-to:message-id: references:mime-version; bh=I/DuBF9NBFZ7X+t6+KQw1LGWaST/A5P+IZjO18Zd+KM=; b=uZDXkaD6dB3fe4+5zfYi4BPUNeyJVOeWKk6UstUBbnhmJtEpGVFSoWwg anZW48tJebnlQuq148qnrgQ6Bs/porzsW4+Mlo25BjgF6gXq5W+3nnVfQ 6zlJJP1Pge9m/TJf6t4ARNPwJ0Rb7sAMVOhCW+au1lQ4DWT386H7Wv9AK w=; X-IronPort-AV: E=Sophos;i="6.08,193,1712613600"; d="scan'208";a="167688958" Received: from 231.85.89.92.rev.sfr.net (HELO hadrien) ([92.89.85.231]) by mail2-relais-roc.national.inria.fr with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 May 2024 22:43:08 +0200 Date: Mon, 27 May 2024 22:43:08 +0200 (CEST) From: Julia Lawall X-X-Sender: jll@hadrien To: "Paul E. McKenney" cc: Vlastimil Babka , "linux-mm@kvack.org" , RCU , cocci@inria.fr Subject: Re: [cocci] patch idea: convert trivial call_rcu users to kfree_rcu In-Reply-To: Message-ID: References: <68b85796-c674-4691-936a-2051849f4692@suse.cz> <6b7e3ed9-d974-cb3b-6839-a6b7cf5f5a36@inria.fr> User-Agent: Alpine 2.22 (DEB 394 2020-01-19) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII X-Rspam-User: X-Stat-Signature: 8krz8d6ga6egz678geabr1grdi7kjhuj X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 05BA4140008 X-HE-Tag: 1716842589-96200 X-HE-Meta: U2FsdGVkX18k3xaFlfgZJul/HgLhvWrwrCXhTMq862vHlujIwSLZrEnn7XnNQaXjLkgbbKXtPMKKNeiG+6fOzeVbeH7WsBky16vWhAwTIrLoR+76X+Df/aiDMKElE219Qf2h38rvD8XtkpaDi9qwrIaubudsh1hoojIFYcZCuFOb8i5YFdbR+qaIDyXtePBHZe55RSHxxaSHg/YCOqRNrlMM5IcY5y3AwA6WRKeb0BXqO0scBUKLAFGxDPHB2mp029YonQgO4E1+kqIX1M9bVeGyUScMMQTtpuCFg5I4ZnZ7zTXp1VGU+RserHG7Xawa5fEjhckCfWa3XoqCJszqo9dDvJXOTJs+fN+8h52l4u4CWAgVWPZCFXasNk0BhokqsoUAfFmh5XmAaiN2a5LmfD6/fLm7LJLzrLOSHdEdLWQEWyqWmcFpCkbL51CqDN9rVEgU2RhVlU0vGINSbKWgaJUpM1zArVSwM9sZk3/vEjJKYV81FURMTb0E3S/zmxRSCfSaXh7z3d8M51e/lV8kBWF0Jqwr66y605fqYsO/vPu2/ge2ujbxAPVgPV45qr0NPd0V6CXCdJb2QWIDZlR49uIJuOyrHmOVpiDfyDCsoOVMwOvn1oO4CCX7fKQFK64KXGxQySjbsKUt8N/4tF8TwQanEGnzku34ViKC7rjMwU5g6oZWz+hvXgkIpjHQXarlIWliDKjD3gdpgysokGO+78YI92ExIfC5lzHsEPVQ2heVdMQ9gO8ZL1HV7FOBJExRv1ZQhrumYUM/nXBpgjVhq8KEszLm+bpbuqEquYjvO4xgrPADBuHVILk4mJl3FWu+acb6RrXPDqx+kTHItwpbgxbP/kJK02F2e5pwr40dy+OPqZWki65qpFnnp/Edd6e5bliKlSpHh2/AMQO91Uc2fRYupnoweyMKNwRiT5zHLze9g9+kkCfbiiB9Ewp1QeYI6r+e/EGHdlWIKmQn4fn s9jqnNls OPgQuNAPcIquRnl967rApfrR9D+eWFVMKeufQukpHTKmYjGhG4jLN84WEJq6ZJtsPf0Udrl+nHTyAedFSABQEjTi0MDXcWNHVeLYi7MnO4znNIiL/fN5rDjS0VW6i3xlZKLH3GdevgMa+nFRjF5hpHOxeZUR3niPwEkfALJux3va9TTpFfvei6VyHoXDq9/Erij7pPojirFdyLLwS/92AWPur/g== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Mon, 27 May 2024, Paul E. McKenney wrote: > On Mon, May 27, 2024 at 10:13:40AM +0200, Julia Lawall wrote: > > > > > > On Mon, 27 May 2024, Vlastimil Babka wrote: > > > > > Hi, > > > > > > one bit from LSF/MM discussions is that there might be call_rcu users with a > > > callback that only does a kmem_cache_free() to a specific cache. Since SLOB > > > was removed, it's always ok to use kfree() and thus also kfree_rcu() on > > > allocations from kmem_cache_alloc() in addition to kmalloc(). Thus, such > > > call_rcu() users might be simplified to kfree_rcu(). I found some cases > > > semi-manually, but I'd expect coccinelle could help here so if anyone wants > > > to take this task, feel free to. > > > > Thanks for the suggestion! I will try to look into it. > > Thank you both! I found the following functions. Do you want some other information, such as where they are called from? Ignore the -s at the beginning of some lines. Those are for emphasis. not to suggest to remove the code. I checked that the functions are only used in calls to call_rcu. Without more effort, Coccinelle only looks for functions defined in the same file. Here are the functions that are passed to call_rcu where the function is not defined in the same file: need definition for audit_free_rule_rcu need definition for __i915_gem_free_object_rcu need definition for io_eventfd_ops need definition for ip_vs_dest_dst_rcu_free need definition for __put_task_struct_rcu_cb need definition for radix_tree_node_rcu_free They all do something more, although radix_tree_node_rcu_free doesn't do much more (some memsets). julia diff -u -p /home/jll/linux/drivers/net/wireguard/allowedips.c /tmp/nothing/drivers/net/wireguard/allowedips.c --- /home/jll/linux/drivers/net/wireguard/allowedips.c +++ /tmp/nothing/drivers/net/wireguard/allowedips.c @@ -50,7 +50,6 @@ static void push_rcu(struct allowedips_n static void node_free_rcu(struct rcu_head *rcu) { - kmem_cache_free(node_cache, container_of(rcu, struct allowedips_node, rcu)); } static void root_free_rcu(struct rcu_head *rcu) diff -u -p /home/jll/linux/fs/ecryptfs/dentry.c /tmp/nothing/fs/ecryptfs/dentry.c --- /home/jll/linux/fs/ecryptfs/dentry.c +++ /tmp/nothing/fs/ecryptfs/dentry.c @@ -53,8 +53,6 @@ struct kmem_cache *ecryptfs_dentry_info_ static void ecryptfs_dentry_free_rcu(struct rcu_head *head) { - kmem_cache_free(ecryptfs_dentry_info_cache, - container_of(head, struct ecryptfs_dentry_info, rcu)); } /** diff -u -p /home/jll/linux/kernel/fork.c /tmp/nothing/kernel/fork.c --- /home/jll/linux/kernel/fork.c +++ /tmp/nothing/kernel/fork.c @@ -378,7 +378,6 @@ static struct kmem_cache *thread_stack_c static void thread_stack_free_rcu(struct rcu_head *rh) { - kmem_cache_free(thread_stack_cache, rh); } static void thread_stack_delayed_free(struct task_struct *tsk) diff -u -p /home/jll/linux/kernel/workqueue.c /tmp/nothing/kernel/workqueue.c --- /home/jll/linux/kernel/workqueue.c +++ /tmp/nothing/kernel/workqueue.c @@ -5024,8 +5024,6 @@ fail: static void rcu_free_pwq(struct rcu_head *rcu) { - kmem_cache_free(pwq_cache, - container_of(rcu, struct pool_workqueue, rcu)); } /* diff -u -p /home/jll/linux/net/ipv4/inetpeer.c /tmp/nothing/net/ipv4/inetpeer.c --- /home/jll/linux/net/ipv4/inetpeer.c +++ /tmp/nothing/net/ipv4/inetpeer.c @@ -130,7 +130,6 @@ static struct inet_peer *lookup(const st static void inetpeer_free_rcu(struct rcu_head *head) { - kmem_cache_free(peer_cachep, container_of(head, struct inet_peer, rcu)); } /* perform garbage collect on all items stacked during a lookup */ diff -u -p /home/jll/linux/net/ipv6/xfrm6_tunnel.c /tmp/nothing/net/ipv6/xfrm6_tunnel.c --- /home/jll/linux/net/ipv6/xfrm6_tunnel.c +++ /tmp/nothing/net/ipv6/xfrm6_tunnel.c @@ -180,8 +180,6 @@ EXPORT_SYMBOL(xfrm6_tunnel_alloc_spi); static void x6spi_destroy_rcu(struct rcu_head *head) { - kmem_cache_free(xfrm6_tunnel_spi_kmem, - container_of(head, struct xfrm6_tunnel_spi, rcu_head)); } static void xfrm6_tunnel_free_spi(struct net *net, xfrm_address_t *saddr) diff -u -p /home/jll/linux/security/security.c /tmp/nothing/security/security.c --- /home/jll/linux/security/security.c +++ /tmp/nothing/security/security.c @@ -1599,7 +1599,6 @@ static void inode_free_by_rcu(struct rcu /* * The rcu head is at the start of the inode blob */ - kmem_cache_free(lsm_inode_cache, head); } /**