From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752603AbbFMIsw (ORCPT ); Sat, 13 Jun 2015 04:48:52 -0400 Received: from cantor2.suse.de ([195.135.220.15]:46407 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752012AbbFMIsp (ORCPT ); Sat, 13 Jun 2015 04:48:45 -0400 Date: Sat, 13 Jun 2015 10:48:40 +0200 From: Borislav Petkov To: Andy Lutomirski Cc: Thomas Gleixner , John Stultz , Aaron Lu , X86 ML , Tony Li , "Rafael J. Wysocki" , Suravee Suthikulanit , =?utf-8?B?RnLDqWTDqXJpYw==?= Weisbecker , Fengguang Wu , Len Brown , Ken Xue , Huang Rui , "linux-kernel@vger.kernel.org" , Peter Zijlstra Subject: Re: [PATCH v2 3/4] x86, mwaitt: introduce mwaix delay with a configurable timer Message-ID: <20150613084840.GA3796@pd.tnic> References: <1433819621-15093-1-git-send-email-ray.huang@amd.com> <1433819621-15093-4-git-send-email-ray.huang@amd.com> <20150609092952.GR3644@twins.programming.kicks-ass.net> <20150612084251.GB9257@pd.tnic> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Jun 12, 2015 at 04:15:23PM -0700, Andy Lutomirski wrote: > > How about this: > > > > /* > > * This should be a memory location in a cache line which is > > * unlikely to be touched by other processors. The actual > > * content is immaterial as it is not actually modified in any way. > > */ > > mwait_ptr = ¤t_thread_info()->flags; > > > > and then > > > > __monitor(mwait_ptr, 0, 0); > > > > We already do this in mwait_play_dead(). > > > > However, am I even correct in assuming that ->flags won't really be > > touched as we're doing delay() and nothing pokes into current anyway? > > We poke flags remotely, but not frequently enough for this to be a > problem. However, I don't know that touching current in udelay is > okay. > > How about some read-mostly percpu variable, such as cpu_tss? Yeah, those look much safer since they're static and are ____cacheline_aligned_in_smp, which is exactly what we want. I guess we can do __monitorx(this_cpu_ptr(&cpu_tss), 0, 0); with a nice comment ontop why we're doing it. asm looks ok too: movq $cpu_tss, %rax #, tcp_ptr__ add %gs:this_cpu_off(%rip), %rax # this_cpu_off, tcp_ptr__ xorl %edx, %edx # tmp248 movq %rdx, %rcx # tmp248, tmp248 #APP # 22 "./arch/x86/include/asm/mwait.h" 1 .byte 0x0f, 0x01, 0xc8; # 0 "" 2 #NO_APP Thanks. -- Regards/Gruss, Boris. ECO tip #101: Trim your mails when you reply. --