From patchwork Tue Mar 4 15:48:43 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Hildenbrand X-Patchwork-Id: 14000998 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 AC07EC021B8 for ; Tue, 4 Mar 2025 15:48:55 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 25778280001; Tue, 4 Mar 2025 10:48:55 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 1DF516B0088; Tue, 4 Mar 2025 10:48:55 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 03105280001; Tue, 4 Mar 2025 10:48:54 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id D64236B0085 for ; Tue, 4 Mar 2025 10:48:54 -0500 (EST) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 8D0E9A17CC for ; Tue, 4 Mar 2025 15:48:54 +0000 (UTC) X-FDA: 83184301788.23.EE239E3 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by imf14.hostedemail.com (Postfix) with ESMTP id 65F3A10000B for ; Tue, 4 Mar 2025 15:48:52 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=NHALMDpK; dmarc=pass (policy=none) header.from=redhat.com; spf=pass (imf14.hostedemail.com: domain of dhildenb@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=dhildenb@redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1741103332; a=rsa-sha256; cv=none; b=fQ/DQgxmFU8Zr5acodJmo8EjLaTQ8KmhCPIMD5Ab/oEYx6rMg1kjpiIEeCkltzToLBMGef m8yvwjUyKYOKF4eV2kHBdPYC4bX0QCssYHozFsdywQbwzTf5e0wy6Yp4mR74DmQ+euh4u5 XVFmRazmMuEbuPymrdaUxj02FQYbDcc= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=NHALMDpK; dmarc=pass (policy=none) header.from=redhat.com; spf=pass (imf14.hostedemail.com: domain of dhildenb@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=dhildenb@redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1741103332; 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:content-transfer-encoding:in-reply-to: references:dkim-signature; bh=p2Pxjq3EDch+A/Cg612+l2rXRgJSHzOfWsjrEl5gKfw=; b=OHDsdwOajZ/ScuEBEIu92YxEk2Mw7AM+bVXzbah68fWwUgkULNdtQOZ5aMeyaaacLgmHiF jGLeA4iwczMFxxMvDWRRtLNZSeQwmLmswEopvSIGZwrx62GK6gJz9/C7Wew+tMEKOeFp0f nDH74VlRHLGZp3TCnekAPMa8TZPh34s= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1741103331; h=from:from: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:content-transfer-encoding; bh=p2Pxjq3EDch+A/Cg612+l2rXRgJSHzOfWsjrEl5gKfw=; b=NHALMDpKoOMOchwIMI4KbDYNWPH6Y/tASiyNc+sh4MVcs2rB53FamX123JDinyQupRPuVU mLtRl3dO5ymcVPikVH5Nnsj8AJQwqHxH5ZkMntrVUaWggNB+DE6nt8weeRnVfbTeTq35XF Kz4iUwAEsh7JyXKwU9O+rICe487HSow= Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-629-Mds0eR70PRG9SGHxiSrPxw-1; Tue, 04 Mar 2025 10:48:50 -0500 X-MC-Unique: Mds0eR70PRG9SGHxiSrPxw-1 X-Mimecast-MFC-AGG-ID: Mds0eR70PRG9SGHxiSrPxw_1741103329 Received: by mail-wm1-f72.google.com with SMTP id 5b1f17b1804b1-43942e82719so42452915e9.2 for ; Tue, 04 Mar 2025 07:48:50 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741103329; x=1741708129; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=p2Pxjq3EDch+A/Cg612+l2rXRgJSHzOfWsjrEl5gKfw=; b=OtIqqdgQS+p8VLc2PFkZG0NYbNq3n87SUCsuO6UxmOdlAKdNdHT78P0GZujidF1hbE Uu0oBg0C2fD9kn9VReE311ufHyx6386iJHUV+weVQ+xS8oV+9gXStNk0Gs1BoJegKbEe 6n/YOvQIK/aejFkgEGxJhu7unKS402FG3w1tgB1UI2K8SBxtSHJ8b0sT2gIh8QYXSjsW aZuZ0/AUQwCKSMduvxdB9+UD1GOz5o5eEBLgqzj+1VUCTDu7InegOJHAXYe8TZkN0OLF 00fBbimV1FYmD1JwhiFk91BAqWO0jpTt3utI3csYFaOCRMOtgYqKNVnKkMriI/9gs3Vx A+Ag== X-Gm-Message-State: AOJu0YwgZmeytyHyWm+Csy3MabQnnVJvZlDM7606ZZM8tYvPtGUbN2M5 rIkPJCfCLHctdDSEGUPfgMM4QSUgTFWvBHI31pX8WbixvG1cmIjBVv+FekAt0gNuMglcJxjBRh2 9P/rOhdIGvO7r9ycsj0KT5xE+jM0Ijkq2qjNOba/7C9+eOKb8PJhnaXF38F0= X-Gm-Gg: ASbGncvQWKfLmPkK0360kcGwSmbPpuO82++8AxADx6ozNdrksB3VQNh0/6XZsoEmTge tWauGGU1sayNek9KIMOmORLQLN6SMTF6YVIQ7r0Lg5h3EtoQlfPhyNEJGFkUP44K+qAmI8eR4Mj 89GmaQT9708ln0nZqYK5DXXXWe3I4l4K85i20jBuP34bWsAJky0JGF4ynOopsWNPY9vtqLgdQC6 0MVInJx6rslXwYhy57Kc0s5Jj3Sf7wEDdWc2b/Xd29xw/bk1gRYI6CD9kos9o9AZx8ffllTDHWO DCQA8oXkPyxKuFNfdvfKE5QZEBqYbNaRCUxsRVG0TbB2I9K3DgVYAlerGiV6K1yoURA5LWW37Dr j X-Received: by 2002:a05:600c:1ca3:b0:439:985b:17d6 with SMTP id 5b1f17b1804b1-43ba6a84156mr139614995e9.27.1741103329001; Tue, 04 Mar 2025 07:48:49 -0800 (PST) X-Google-Smtp-Source: AGHT+IHjd2+i+XCDKVaF6WffRx7pSoxLHgB+maZpDEGPGTkxHNk1T3itxVJ3f3AFoBMJYSPfmfvO7g== X-Received: by 2002:a05:600c:1ca3:b0:439:985b:17d6 with SMTP id 5b1f17b1804b1-43ba6a84156mr139614845e9.27.1741103328593; Tue, 04 Mar 2025 07:48:48 -0800 (PST) Received: from localhost (p200300cbc73610009e302a8acd3d419c.dip0.t-ipconnect.de. [2003:cb:c736:1000:9e30:2a8a:cd3d:419c]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-390e47a7868sm17932287f8f.24.2025.03.04.07.48.46 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 04 Mar 2025 07:48:48 -0800 (PST) From: David Hildenbrand To: linux-kernel@vger.kernel.org Cc: linux-mm@kvack.org, linux-arm-kernel@lists.infradead.org, linux-trace-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, David Hildenbrand , Andrew Morton , Matthew Wilcox , Russell King , Masami Hiramatsu , Oleg Nesterov , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , "Liang, Kan" , Tong Tiangen Subject: [PATCH -next v1 0/3] kernel/events/uprobes: uprobe_write_opcode() rewrite Date: Tue, 4 Mar 2025 16:48:43 +0100 Message-ID: <20250304154846.1937958-1-david@redhat.com> X-Mailer: git-send-email 2.48.1 MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: zkEeIiO_j-h5FmwO5gEFRX-rbWdO4_JygqTvwm2LrTY_1741103329 X-Mimecast-Originator: redhat.com content-type: text/plain; charset="US-ASCII"; x-default=true X-Rspamd-Server: rspam08 X-Rspamd-Queue-Id: 65F3A10000B X-Stat-Signature: jd5p1dfgoweup6c1dm8khypetyxqa1he X-Rspam-User: X-HE-Tag: 1741103332-106183 X-HE-Meta: U2FsdGVkX18rgS3qNFXztKJjk2Vms/ejjUeClm/aiftVuNDIsxDQp8bh6pI0vLrWwIMiqBQ5jti+hlIDwcFtNtcfpNbVKRBKq8M6bQtfrjU/v8tJNBj6qmIF9T3a50D3Hiyjct4SLWgV973100lY5WfhzxtkQ1FEXPSzu23jqRGfByHsgfGZuWpH6UpCMEZ5lUjmQvJauHh7Mv3L5OHr5HT0fiJJwkC9VJhZ7QhYUQWuFvtjt0IiYNyA0GRYr9y9gym6pt7uCxp/f7knBDqrDNpMQuCRkjmK6cOnWY7Wwjza7TfkvJSRLD5R/DHP3rGUtKAmxgu9p5RLcyMJV2RmArCCMqgh7dydrNhZcmwYZbxBOH/gkUJ6hVWrA5462lsyTZlEM4DpIH+FLZW0RtCsDAY/B/XPH2KkuYtqTavXMPX9nQWkYbkFTvKG4cOEtnGOf1HgMkNsYVIkakJRxbVSUerRbMZDkf31OroS5Z8zCjPB5g6MBAjnDttbNYRSzyk40KrJxA6xThJ5j+x4BuNH5yyry8Of229A8z0oF0riD5G44kBGimwM8i+UD5Ce3PFmr9pK5H7Cmi8pYMOYhKor4WkNJBLvK9I0tX36aG+7Dg6oWA6Km4CK1Q+YIR1YAoAPUdjP4/CpoNi2xIlX82bNZkocRTfU+PETYSaZWoNAf8PeX5PNayPYz0LbtoO+woUhb413XZcnCabjVx4bj/yFmt3DSHKLxpl2YkQAdarbujHe38B/tECnn/CP9G1i0nidxFVAZWYizlJAbUJpbAbBGupshZEU2gRGeiA1T+jU6aQs1scad2aRlb4//e+3Xp4a9ka+sZjQbAj3E1xRiqE/4os6yQ1UGdN4pVgHR8JS+nDT90Dlca+2cYlx96QxHKxcDpEJ/wgA9ZBJyhgOTgeoaWUW6/R2biz+HNBnqxZkb9P50j4Pqxje624YtSkzWzdX23t0DRQxJ1Q1Cz2wJYp TCrlQ11r ZY7/g9IlIDANmNooAY0jSA/svtsAVbhHXhj2wQGYJWssVdzRh1olJ33g7bGwe9GuzyCEDvwK9HvosCAcgB/9NC8Ph4FrDRbkw0kchWzpNU+XBhEm1VkbVLWjpe8J60Y+xisPdASN6DYCQpGrwZiO87zBAk0rqMSumFHh7Rys9gy1CzgW34/TrPbiH5qSYD9r0+t2LxQ8hKoFRzgHLf+AqXunPlKFd4ESfHTk1SU7UBQWevNYLWjgdzU8U+GqRciztuEr025/1xnthGgfwTzHv5cTRqSu1agF+pafp3KUYabtqJIwNSQqGyLzWnS1Gv900kYF/k2z11XYewMXvxlPOYUErtJMZA49RBB/4FFh7uKY/EJcKUtqZKesiZ1B7MbT2RJ3yVHygbp8OMhrrnPfibyiWLWjvI7r4tEL2CKmJkey0JVpL5AcVclxifvwFsi8dR9SF1C4rqVhYpqcQWkQ74h0EnFNCvIhpEfGPLCkMGowq7SYoGDjksqFoPZjoMwcEEQwUAXdN/YRjWfjQXI+DuKe5mtzRI6O1czUhgd4dMYD2Jbq+nzXNpNZew3e9sFOmw8odcW1wCYxISUew1ndXDFuOfBx9QN+8KulGZn2e47XLp3i/IRpxmBJFQgTooOsR1PVWTL1DGMq2ho1HsinXU2Mbm8nWmytg+y6PmB38B8jPHJR/FaieFSyaOnbPWTRDeftOMet0OdXoDhASIN3NUPXCBtUn4PvKOMp7g5unjed8fL6wStDnF+F8KznfCppYI/iBA5hHnF2SUdhaDn+swjfhwjEqmnOii4THOpj8Y8PRp8rcRcAwak49TvKtCkuNfuTi4p+jnrWM00LBzuMmmxGFYgHvTxwsn9RZJU5EEt032vR3+q+vMcUJsLqEF6Tp5uTWcIS6o7iUX56Qlje1ghoKOL4jeN7UjALI 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: Based on -next, because a related fix [1] is not in mm.git. This is the follow-up to [2] (later than I wanted to send it out), now that Willy also stumbled over this [3]. Since the RFC, I rewrote it once again, now using a folio_walk instead of our old pagewalk infrastructure. Currently, uprobe_write_opcode() implements COW-breaking manually, which is really far from ideal. Further, there is interest in supporting uprobes on hugetlb pages [1], and leaving at least the COW-breaking to the core will make this much easier. Also, I think the current code doesn't really handle some things properly (see patch #3) when replacing/zapping pages. Let's rewrite it, to leave COW-breaking to the fault handler, and handle registration/unregistration by temporarily unmapping the anonymous page, modifying it, and mapping it again. We still have to implement zapping of anonymous pages ourselves, unfortunately. We could look into not performing the temporary unmapping if we can perform the write atomically, which would likely also make adding hugetlb support a lot easier. But, limited (e.g., only PMD/PUD) hugetlb support could be added on top of this with some tweaking. Note that we now won't have to allocate another anonymous folio when unregistering (which will be beneficial for hugetlb as well), we can simply modify the already-mapped one from the registration (if any). When registering a uprobe, we'll first trigger a ptrace-like write fault to break COW, to then modify the already-mapped page. Briefly sanity tested with perf: [root@localhost ~]# perf probe -x /usr/bin/bash -a main ... [root@localhost ~]# perf record -e probe_bash:main -aR sleep 10 & [1] 2196 [root@localhost ~]# bash [root@localhost ~]# exit exit [root@localhost ~]# bash [root@localhost ~]# exit exit [root@localhost ~]# [ perf record: Woken up 1 times to write data ] [ perf record: Captured and wrote 0.287 MB perf.data (8 samples) ] ... [root@localhost ~]# perf report --stdio # To display the perf.data header info, please use --header/--header-only optio> # # # Total Lost Samples: 0 # # Samples: 8 of event 'probe_bash:main' # Event count (approx.): 8 # # Overhead Command Shared Object Symbol # ........ ........... ............. ........ # 75.00% grepconf.sh bash [.] main 25.00% bash bash [.] main ... Are there any uprobe tests / benchmarks that are worth running? RFC -> v1: * Use folio_walk and simplify the logic Cc: Andrew Morton Cc: Matthew Wilcox Cc: Russell King Cc: Masami Hiramatsu Cc: Oleg Nesterov Cc: Peter Zijlstra Cc: Ingo Molnar Cc: Arnaldo Carvalho de Melo Cc: Namhyung Kim Cc: Mark Rutland Cc: Alexander Shishkin Cc: Jiri Olsa Cc: Ian Rogers Cc: Adrian Hunter Cc: "Liang, Kan" Cc: Tong Tiangen [1] https://lkml.kernel.org/r/20250224031149.1598949-1-tongtiangen@huawei.com [2] https://lore.kernel.org/linux-mm/20240604122548.359952-2-david@redhat.com/T/ [3] https://lore.kernel.org/all/d7971673-19ed-448a-9e54-8ffbde5059dc@redhat.com/T/ [4] https://lkml.kernel.org/r/ZiK50qob9yl5e0Xz@bender.morinfr.org David Hildenbrand (3): kernel/events/uprobes: pass VMA instead of MM to remove_breakpoint() kernel/events/uprobes: pass VMA to set_swbp(), set_orig_insn() and uprobe_write_opcode() kernel/events/uprobes: uprobe_write_opcode() rewrite arch/arm/probes/uprobes/core.c | 4 +- include/linux/uprobes.h | 6 +- kernel/events/uprobes.c | 363 +++++++++++++++++---------------- 3 files changed, 190 insertions(+), 183 deletions(-) base-commit: cd3215bbcb9d4321def93fea6cfad4d5b42b9d1d