Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp682948ybi; Fri, 7 Jun 2019 15:10:39 -0700 (PDT) X-Google-Smtp-Source: APXvYqySy6Oq3Y0YpJONBOSaaQc7nQJGORLzU9Xdtbuyb6MwtkmkEB3Z/Ho5b0NOEJaoY+re0W22 X-Received: by 2002:a17:902:15c5:: with SMTP id a5mr59159620plh.39.1559945439725; Fri, 07 Jun 2019 15:10:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1559945439; cv=none; d=google.com; s=arc-20160816; b=0oDLchJBiQpgAu3wm575ebuA8BuTDiBvl7lY2q44iz36X3Weix7MOnnQYqJ0rlT9L8 s77Y4jkKfPYjEg40Hbuf3PdQ7WQPU8Nor7HyiR4ehGJiWnO9vhVmxbp/vGTefRYsIPoD 8vBOubSvp9l4h8uvNQ433DBndPqtJHy7mqUGw481gWICsaAGzfTfu0UIhbBaqMRE/9MU MWLkj1UYl4FNJfdrBxnwQbbKa9Pbw7HOKGQBj6o3tkRMekiGSBto3PfrmesTq8uvsb2/ yB54YSXj+wLxwIP5zI15gM5ahDVZI8Ytfy9nictfxin9TQ++rtwA765d0dKum7taH6HN lGDg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature; bh=V+gSVnIv9QBKq1mZboB8NpBLa64Y8lrKysJJF3r5Di4=; b=MkyMSX0E982FPAJdVcGk7jAJvp166sTq+odamJqNSVhjYHta2ly2W5vFNdkDEyrCp7 hBmO77U6UKrMQHrtmNptavkOjaFhKGmfsJI3UfdxQcmJFOarbkPUBUKRCxm8z0d1mMd9 Khivf19NfbI39OTLBhxC6MEfklVvrig9/2zOXLIMxgmHFV0AyVF8OOwAPL6B5sMVaaB4 mW/prErxMwcu03LHlOCSeEn3Zf00c2NmlCOZB3nulrzV4yM0yABGlfQEEBoSdp0uqEvt xjuDSxKXMyg1moX428ebLRY2chQ1/SxghHL37Q/I2zmIQWxJRsm79969SS1v4emsql22 uEfQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@infradead.org header.s=bombadil.20170209 header.b=G2TH77zw; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id w10si3020961pgs.50.2019.06.07.15.10.22; Fri, 07 Jun 2019 15:10:39 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=fail header.i=@infradead.org header.s=bombadil.20170209 header.b=G2TH77zw; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730138AbfFGUMH (ORCPT + 99 others); Fri, 7 Jun 2019 16:12:07 -0400 Received: from bombadil.infradead.org ([198.137.202.133]:47690 "EHLO bombadil.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728724AbfFGUMH (ORCPT ); Fri, 7 Jun 2019 16:12:07 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20170209; h=In-Reply-To:Content-Type:MIME-Version :References:Message-ID:Subject:Cc:To:From:Date:Sender:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=V+gSVnIv9QBKq1mZboB8NpBLa64Y8lrKysJJF3r5Di4=; b=G2TH77zwcRW+ghgSutS9pXWwx q06PFG90kLdW9nSZ8eT0zhsmJkCONTk9ihOiwCD/vOWRCH7+RiVotuRpO+PXMPtB8viY749wFWiHD e35WP8ojqL7BLHfJjBicKoWZKTv7dWog/hIuqMTYYTk2e38Bi6ed1zJgJ9LV8EZFY6S7kzQtNbxWR dq2EVJjEtvyg+7uncwjU/GfOave+g4SmAyk4QaIqVw/cBAp5JROl4fss5kOmhhd48m/zKN/BT2Kne 4r7aT25INlQYUt07MKB6e3JiljH56Bv5dF61FNPZ9GAePTzIrq6vFfaE5EIdtGfqYacXVUhZ0+nnV aWTdDN8VA==; Received: from willy by bombadil.infradead.org with local (Exim 4.92 #3 (Red Hat Linux)) id 1hZLDX-0002mb-5b; Fri, 07 Jun 2019 20:12:03 +0000 Date: Fri, 7 Jun 2019 13:12:03 -0700 From: Matthew Wilcox To: Anshuman Khandual Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-arm-kernel@lists.infradead.org, linux-ia64@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-s390@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, x86@kernel.org, Andrew Morton , Michal Hocko , Mark Rutland , Christophe Leroy , Stephen Rothwell , Andrey Konovalov , Michael Ellerman , Paul Mackerras , Russell King , Catalin Marinas , Will Deacon , Tony Luck , Fenghua Yu , Martin Schwidefsky , Heiko Carstens , Yoshinori Sato , "David S. Miller" , Thomas Gleixner , Peter Zijlstra , Ingo Molnar , Andy Lutomirski , Dave Hansen Subject: Re: [RFC V3] mm: Generalize and rename notify_page_fault() as kprobe_page_fault() Message-ID: <20190607201202.GA32656@bombadil.infradead.org> References: <1559903655-5609-1-git-send-email-anshuman.khandual@arm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1559903655-5609-1-git-send-email-anshuman.khandual@arm.com> User-Agent: Mutt/1.9.2 (2017-12-15) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Before: > @@ -46,23 +46,6 @@ kmmio_fault(struct pt_regs *regs, unsigned long addr) > return 0; > } > > -static nokprobe_inline int kprobes_fault(struct pt_regs *regs) > -{ > - if (!kprobes_built_in()) > - return 0; > - if (user_mode(regs)) > - return 0; > - /* > - * To be potentially processing a kprobe fault and to be allowed to call > - * kprobe_running(), we have to be non-preemptible. > - */ > - if (preemptible()) > - return 0; > - if (!kprobe_running()) > - return 0; > - return kprobe_fault_handler(regs, X86_TRAP_PF); > -} After: > +++ b/include/linux/kprobes.h > @@ -458,4 +458,20 @@ static inline bool is_kprobe_optinsn_slot(unsigned long addr) > } > #endif > > +static nokprobe_inline bool kprobe_page_fault(struct pt_regs *regs, > + unsigned int trap) > +{ > + int ret = 0; > + > + /* > + * To be potentially processing a kprobe fault and to be allowed > + * to call kprobe_running(), we have to be non-preemptible. > + */ > + if (kprobes_built_in() && !preemptible() && !user_mode(regs)) { > + if (kprobe_running() && kprobe_fault_handler(regs, trap)) > + ret = 1; > + } > + return ret; > +} Do you really think this is easier to read? Why not just move the x86 version to include/linux/kprobes.h, and replace the int with bool? On Fri, Jun 07, 2019 at 04:04:15PM +0530, Anshuman Khandual wrote: > Very similar definitions for notify_page_fault() are being used by multiple > architectures duplicating much of the same code. This attempts to unify all > of them into a generic implementation, rename it as kprobe_page_fault() and > then move it to a common header. I think this description suffers from having been written for v1 of this patch. It describes what you _did_, but it's not what this patch currently _is_. Why not something like: Architectures which support kprobes have very similar boilerplate around calling kprobe_fault_handler(). Use a helper function in kprobes.h to unify them, based on the x86 code. This changes the behaviour for other architectures when preemption is enabled. Previously, they would have disabled preemption while calling the kprobe handler. However, preemption would be disabled if this fault was due to a kprobe, so we know the fault was not due to a kprobe handler and can simply return failure. This behaviour was introduced in commit a980c0ef9f6d ("x86/kprobes: Refactor kprobes_fault() like kprobe_exceptions_notify()") > arch/arm/mm/fault.c | 24 +----------------------- > arch/arm64/mm/fault.c | 24 +----------------------- > arch/ia64/mm/fault.c | 24 +----------------------- > arch/powerpc/mm/fault.c | 23 ++--------------------- > arch/s390/mm/fault.c | 16 +--------------- > arch/sh/mm/fault.c | 18 ++---------------- > arch/sparc/mm/fault_64.c | 16 +--------------- > arch/x86/mm/fault.c | 21 ++------------------- > include/linux/kprobes.h | 16 ++++++++++++++++ What about arc and mips?