From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933897AbaJDAgc (ORCPT ); Fri, 3 Oct 2014 20:36:32 -0400 Received: from mx1.redhat.com ([209.132.183.28]:8909 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755097AbaJDAga (ORCPT ); Fri, 3 Oct 2014 20:36:30 -0400 Date: Sat, 4 Oct 2014 02:33:00 +0200 From: Oleg Nesterov To: Linus Torvalds Cc: Sasha Levin , Frederic Weisbecker , Ingo Molnar , Peter Anvin , Linux Kernel Mailing List , Peter Zijlstra , Andy Lutomirski , Denys Vlasenko , Thomas Gleixner , Chuck Ebbert Subject: Re: [tip:x86/asm] x86: Speed up ___preempt_schedule*() by using THUNK helpers Message-ID: <20141004003300.GA6297@redhat.com> References: <20140921184153.GA23727@redhat.com> <542E2B05.5080607@oracle.com> <20141003232631.GA3439@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.18 (2008-05-17) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 10/03, Linus Torvalds wrote: > > On Fri, Oct 3, 2014 at 5:01 PM, Linus Torvalds > wrote: > > > > The real fix would appear to be to use > > "preempt_enable_no_resched_notrace()", which your patch did, but > > without the loop. > > Actually, the real fix would be to not be stupid, and just make the > code do something like > > > if (likely(!preemptible())) > > return; > > > > __preempt_count_add(PREEMPT_ACTIVE); > > prev_ctx = exception_enter(); > > > > __schedule(); > > > > exception_exit(prev_ctx); > > __preempt_count_sub(PREEMPT_ACTIVE); > > and *not* enable preemption around the scheduling at all. The whole > enable and then re-disable seems entirely broken, and comes from the > code using "preempt_schedule()" which doesn't work while preemption is > disabled. So don't do that then. Again, it is too late for me... Most probably I am wrong, but somehow it seems to me that the real fix should try to kill preempt_schedule_context() altogether and teach preempt_schedule() to play well with CONTEXT_TRACKING. Oleg.