From: "Michael S. Tsirkin" <mst@redhat.com> To: Arnd Bergmann <arnd@arndb.de> Cc: linux-kernel@vger.kernel.org, Catalin Marinas <catalin.marinas@arm.com>, Will Deacon <will.deacon@arm.com>, David Howells <dhowells@redhat.com>, Hirokazu Takata <takata@linux-m32r.org>, Michal Simek <monstr@monstr.eu>, Koichi Yasutake <yasutake.koichi@jp.panasonic.com>, Benjamin Herrenschmidt <benh@kernel.crashing.org>, Paul Mackerras <paulus@samba.org>, Chris Metcalf <cmetcalf@tilera.com>, Thomas Gleixner <tglx@linutronix.de>, Ingo Molnar <mingo@redhat.com>, Peter Zijlstra <peterz@infradead.org>, "H. Peter Anvin" <hpa@zytor.com>, x86@kernel.org, linux-arm-kernel@lists.infradead.org, linux-m32r@ml.linux-m32r.org, linux-m32r-ja@ml.linux-m32r.org, microblaze-uclinux@itee.uq.edu.au, linux-am33-list@redhat.com, linuxppc-dev@lists.ozlabs.org, linux-arch@vger.kernel.org, linux-mm@kvack.o Subject: Re: [PATCH v2 07/10] powerpc: uaccess s/might_sleep/might_fault/ Date: Fri, 24 May 2013 16:11:04 +0300 [thread overview] Message-ID: <20130524131104.GA11462@redhat.com> (raw) In-Reply-To: <20130524130032.GA10167@redhat.com> On Fri, May 24, 2013 at 04:00:32PM +0300, Michael S. Tsirkin wrote: > On Wed, May 22, 2013 at 03:59:01PM +0200, Arnd Bergmann wrote: > > On Thursday 16 May 2013, Michael S. Tsirkin wrote: > > > @@ -178,7 +178,7 @@ do { \ > > > long __pu_err; \ > > > __typeof__(*(ptr)) __user *__pu_addr = (ptr); \ > > > if (!is_kernel_addr((unsigned long)__pu_addr)) \ > > > - might_sleep(); \ > > > + might_fault(); \ > > > __chk_user_ptr(ptr); \ > > > __put_user_size((x), __pu_addr, (size), __pu_err); \ > > > __pu_err; \ > > > > > > > Another observation: > > > > if (!is_kernel_addr((unsigned long)__pu_addr)) > > might_sleep(); > > > > is almost the same as > > > > might_fault(); > > > > except that it does not call might_lock_read(). > > > > The version above may have been put there intentionally and correctly, but > > if you want to replace it with might_fault(), you should remove the > > "if ()" condition. > > > > Arnd > > Well not exactly. The non-inline might_fault checks the > current segment, not the address. > I'm guessing this is trying to do the same just without > pulling in segment_eq, but I'd like a confirmation > from more PPC maintainers. > > Guys would you ack > > - if (!is_kernel_addr((unsigned long)__pu_addr)) > - might_fault(); > + might_fault(); > > on top of this patch? OK I spoke too fast: I found this: powerpc: Fix incorrect might_sleep in __get_user/__put_user on kernel addresses We have a case where __get_user and __put_user can validly be used on kernel addresses in interrupt context - namely, the alignment exception handler, as our get/put_unaligned just do a single access and rely on the alignment exception handler to fix things up in the rare cases where the cpu can't handle it in hardware. Thus we can get alignment exceptions in the network stack at interrupt level. The alignment exception handler does a __get_user to read the instruction and blows up in might_sleep(). Since a __get_user on a kernel address won't actually ever sleep, this makes the might_sleep conditional on the address being less than PAGE_OFFSET. Signed-off-by: Paul Mackerras <paulus@samba.org> So this won't work, unless we add the is_kernel_addr check to might_fault. That will become possible on top of this patchset but let's consider this carefully, and make this a separate patchset, OK? > Also, any volunteer to test this (not just test-build)? > > -- > MST -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
WARNING: multiple messages have this Message-ID (diff)
From: "Michael S. Tsirkin" <mst@redhat.com> To: Arnd Bergmann <arnd@arndb.de> Cc: linux-kernel@vger.kernel.org, Catalin Marinas <catalin.marinas@arm.com>, Will Deacon <will.deacon@arm.com>, David Howells <dhowells@redhat.com>, Hirokazu Takata <takata@linux-m32r.org>, Michal Simek <monstr@monstr.eu>, Koichi Yasutake <yasutake.koichi@jp.panasonic.com>, Benjamin Herrenschmidt <benh@kernel.crashing.org>, Paul Mackerras <paulus@samba.org>, Chris Metcalf <cmetcalf@tilera.com>, Thomas Gleixner <tglx@linutronix.de>, Ingo Molnar <mingo@redhat.com>, Peter Zijlstra <peterz@infradead.org>, "H. Peter Anvin" <hpa@zytor.com>, x86@kernel.org, linux-arm-kernel@lists.infradead.org, linux-m32r@ml.linux-m32r.org, linux-m32r-ja@ml.linux-m32r.org, microblaze-uclinux@itee.uq.edu.au, linux-am33-list@redhat.com, linuxppc-dev@lists.ozlabs.org, linux-arch@vger.kernel.org, linux-mm@kvack.org, kvm@vger.kernel.org Subject: Re: [PATCH v2 07/10] powerpc: uaccess s/might_sleep/might_fault/ Date: Fri, 24 May 2013 16:11:04 +0300 [thread overview] Message-ID: <20130524131104.GA11462@redhat.com> (raw) Message-ID: <20130524131104.cxRc8zcvwbpe6X9saB8AK4MqWt3B9_Rx1bOS58YorWI@z> (raw) In-Reply-To: <20130524130032.GA10167@redhat.com> On Fri, May 24, 2013 at 04:00:32PM +0300, Michael S. Tsirkin wrote: > On Wed, May 22, 2013 at 03:59:01PM +0200, Arnd Bergmann wrote: > > On Thursday 16 May 2013, Michael S. Tsirkin wrote: > > > @@ -178,7 +178,7 @@ do { \ > > > long __pu_err; \ > > > __typeof__(*(ptr)) __user *__pu_addr = (ptr); \ > > > if (!is_kernel_addr((unsigned long)__pu_addr)) \ > > > - might_sleep(); \ > > > + might_fault(); \ > > > __chk_user_ptr(ptr); \ > > > __put_user_size((x), __pu_addr, (size), __pu_err); \ > > > __pu_err; \ > > > > > > > Another observation: > > > > if (!is_kernel_addr((unsigned long)__pu_addr)) > > might_sleep(); > > > > is almost the same as > > > > might_fault(); > > > > except that it does not call might_lock_read(). > > > > The version above may have been put there intentionally and correctly, but > > if you want to replace it with might_fault(), you should remove the > > "if ()" condition. > > > > Arnd > > Well not exactly. The non-inline might_fault checks the > current segment, not the address. > I'm guessing this is trying to do the same just without > pulling in segment_eq, but I'd like a confirmation > from more PPC maintainers. > > Guys would you ack > > - if (!is_kernel_addr((unsigned long)__pu_addr)) > - might_fault(); > + might_fault(); > > on top of this patch? OK I spoke too fast: I found this: powerpc: Fix incorrect might_sleep in __get_user/__put_user on kernel addresses We have a case where __get_user and __put_user can validly be used on kernel addresses in interrupt context - namely, the alignment exception handler, as our get/put_unaligned just do a single access and rely on the alignment exception handler to fix things up in the rare cases where the cpu can't handle it in hardware. Thus we can get alignment exceptions in the network stack at interrupt level. The alignment exception handler does a __get_user to read the instruction and blows up in might_sleep(). Since a __get_user on a kernel address won't actually ever sleep, this makes the might_sleep conditional on the address being less than PAGE_OFFSET. Signed-off-by: Paul Mackerras <paulus@samba.org> So this won't work, unless we add the is_kernel_addr check to might_fault. That will become possible on top of this patchset but let's consider this carefully, and make this a separate patchset, OK? > Also, any volunteer to test this (not just test-build)? > > -- > MST
next prev parent reply other threads:[~2013-05-24 13:11 UTC|newest] Thread overview: 83+ messages / expand[flat|nested] mbox.gz Atom feed top 2013-05-16 11:07 [PATCH v2 00/10] uaccess: better might_sleep/might_fault behavior Michael S. Tsirkin 2013-05-16 11:07 ` Michael S. Tsirkin 2013-05-16 11:10 ` [PATCH v2 01/10] asm-generic: uaccess s/might_sleep/might_fault/ Michael S. Tsirkin 2013-05-16 11:10 ` Michael S. Tsirkin 2013-05-16 11:10 ` [PATCH v2 02/10] arm64: " Michael S. Tsirkin 2013-05-16 11:10 ` Michael S. Tsirkin 2013-05-16 13:29 ` Catalin Marinas 2013-05-16 13:29 ` Catalin Marinas 2013-05-16 11:10 ` [PATCH v2 03/10] frv: " Michael S. Tsirkin 2013-05-16 11:10 ` Michael S. Tsirkin 2013-05-16 11:11 ` [PATCH v2 04/10] m32r: " Michael S. Tsirkin 2013-05-16 11:11 ` Michael S. Tsirkin 2013-05-16 11:11 ` [PATCH v2 05/10] microblaze: " Michael S. Tsirkin 2013-05-16 11:11 ` Michael S. Tsirkin 2013-05-16 11:12 ` [PATCH v2 06/10] mn10300: " Michael S. Tsirkin 2013-05-16 11:12 ` Michael S. Tsirkin 2013-05-16 11:15 ` [PATCH v2 07/10] powerpc: " Michael S. Tsirkin 2013-05-16 11:15 ` Michael S. Tsirkin 2013-05-22 13:59 ` Arnd Bergmann 2013-05-22 13:59 ` Arnd Bergmann 2013-05-22 14:30 ` Michael S. Tsirkin 2013-05-22 14:30 ` Michael S. Tsirkin 2013-05-24 13:00 ` Michael S. Tsirkin 2013-05-24 13:00 ` Michael S. Tsirkin 2013-05-24 13:11 ` Michael S. Tsirkin [this message] 2013-05-24 13:11 ` Michael S. Tsirkin 2013-05-24 13:30 ` Arnd Bergmann 2013-05-24 13:30 ` Arnd Bergmann 2013-05-16 11:15 ` [PATCH v2 08/10] tile: " Michael S. Tsirkin 2013-05-16 11:15 ` Michael S. Tsirkin 2013-05-16 13:33 ` Chris Metcalf 2013-05-16 13:33 ` Chris Metcalf 2013-05-16 11:15 ` [PATCH v2 09/10] x86: " Michael S. Tsirkin 2013-05-16 11:15 ` Michael S. Tsirkin 2013-05-16 11:16 ` [PATCH v2 10/10] kernel: might_fault does not imply might_sleep Michael S. Tsirkin 2013-05-16 11:16 ` Michael S. Tsirkin 2013-05-16 18:40 ` Peter Zijlstra 2013-05-16 18:40 ` Peter Zijlstra 2013-05-19 9:35 ` Michael S. Tsirkin 2013-05-19 9:35 ` Michael S. Tsirkin 2013-05-19 12:34 ` Steven Rostedt 2013-05-19 12:34 ` Steven Rostedt 2013-05-19 13:34 ` Michael S. Tsirkin 2013-05-19 13:34 ` Michael S. Tsirkin 2013-05-19 16:06 ` Steven Rostedt 2013-05-19 16:06 ` Steven Rostedt 2013-05-19 16:40 ` Michael S. Tsirkin 2013-05-19 16:40 ` Michael S. Tsirkin 2013-05-19 20:23 ` Steven Rostedt 2013-05-19 20:23 ` Steven Rostedt 2013-05-19 20:35 ` Michael S. Tsirkin 2013-05-19 20:35 ` Michael S. Tsirkin 2013-05-21 11:18 ` Peter Zijlstra 2013-05-21 11:18 ` Peter Zijlstra 2013-05-21 11:21 ` Peter Zijlstra 2013-05-21 11:21 ` Peter Zijlstra 2013-05-21 11:57 ` Peter Zijlstra 2013-05-21 11:57 ` Peter Zijlstra 2013-05-21 13:28 ` Michael S. Tsirkin 2013-05-22 9:47 ` Michael S. Tsirkin 2013-05-22 9:47 ` Michael S. Tsirkin 2013-05-22 10:16 ` Peter Zijlstra 2013-05-22 10:16 ` Peter Zijlstra 2013-05-22 20:38 ` Michael S. Tsirkin 2013-05-22 20:38 ` Michael S. Tsirkin 2013-05-22 20:36 ` Michael S. Tsirkin 2013-05-22 20:36 ` Michael S. Tsirkin 2013-05-22 9:25 ` [PATCH v2 00/10] uaccess: better might_sleep/might_fault behavior Arnd Bergmann 2013-05-22 9:25 ` Arnd Bergmann 2013-05-22 9:58 ` Michael S. Tsirkin 2013-05-22 9:58 ` Michael S. Tsirkin 2013-05-22 10:19 ` Peter Zijlstra 2013-05-22 10:19 ` Peter Zijlstra 2013-05-22 11:07 ` Michael S. Tsirkin 2013-05-22 11:07 ` Michael S. Tsirkin 2013-05-22 11:27 ` Peter Zijlstra 2013-05-22 11:27 ` Peter Zijlstra 2013-05-22 13:41 ` Russell King - ARM Linux 2013-05-22 13:41 ` Russell King - ARM Linux 2013-05-22 14:04 ` Arnd Bergmann 2013-05-22 14:44 ` Michael S. Tsirkin 2013-05-22 14:44 ` Michael S. Tsirkin 2013-05-24 14:17 ` [PATCH v3 01/11] asm-generic: uaccess s/might_sleep/might_fault/ Michael S. Tsirkin
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20130524131104.GA11462@redhat.com \ --to=mst@redhat.com \ --cc=arnd@arndb.de \ --cc=benh@kernel.crashing.org \ --cc=catalin.marinas@arm.com \ --cc=cmetcalf@tilera.com \ --cc=dhowells@redhat.com \ --cc=hpa@zytor.com \ --cc=linux-am33-list@redhat.com \ --cc=linux-arch@vger.kernel.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-m32r-ja@ml.linux-m32r.org \ --cc=linux-m32r@ml.linux-m32r.org \ --cc=linux-mm@kvack.o \ --cc=linuxppc-dev@lists.ozlabs.org \ --cc=microblaze-uclinux@itee.uq.edu.au \ --cc=mingo@redhat.com \ --cc=monstr@monstr.eu \ --cc=paulus@samba.org \ --cc=peterz@infradead.org \ --cc=takata@linux-m32r.org \ --cc=tglx@linutronix.de \ --cc=will.deacon@arm.com \ --cc=x86@kernel.org \ --cc=yasutake.koichi@jp.panasonic.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).