From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754234AbbFOKz6 (ORCPT ); Mon, 15 Jun 2015 06:55:58 -0400 Received: from casper.infradead.org ([85.118.1.10]:39141 "EHLO casper.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754074AbbFOKzw (ORCPT ); Mon, 15 Jun 2015 06:55:52 -0400 Date: Mon, 15 Jun 2015 12:55:42 +0200 From: Peter Zijlstra To: Huang Rui Cc: Borislav Petkov , Andy Lutomirski , Thomas Gleixner , Ingo Molnar , "Rafael J. Wysocki" , Len Brown , John Stultz , =?iso-8859-1?Q?Fr=E9d=E9ric?= Weisbecker , linux-kernel@vger.kernel.org, x86@kernel.org, Fengguang Wu , Aaron Lu , Suravee Suthikulanit , Tony Li , Ken Xue Subject: Re: [PATCH v5 1/2] x86, mwaitt: add monitorx and mwaitx instruction Message-ID: <20150615105542.GV3644@twins.programming.kicks-ass.net> References: <1434365284-1495-1-git-send-email-ray.huang@amd.com> <1434365284-1495-2-git-send-email-ray.huang@amd.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1434365284-1495-2-git-send-email-ray.huang@amd.com> User-Agent: Mutt/1.5.21 (2012-12-30) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Jun 15, 2015 at 06:48:03PM +0800, Huang Rui wrote: > +/* > + * MWAITT allows for both a timer value to get you out of the MWAIT as > + * well as the normal exit conditions. > + * > + * MWAITX ECX[1]: enable timer if set > + * MWAITX EBX[31:0]: max wait time expressed in SW P0 clocks > + * > + * Below is the compared data between MWAIT and MWAITX on AMD > + * processors: > + * MWAIT MWAITX > + * opcode 0f 01 c9 | 0f 01 fb > + * ECX[0] value of RFLAGS.IF seen by instruction > + * ECX[1] unused/#GP if set | enable timer if set > + * ECX[31:2] unused/#GP if set > + * EAX unused (reserve for hint) Seeing how you're stuffing a !0 value in here in the next patch, the above comment seems slightly incorrect, no? > + * EBX[31:0] unused | max wait time (loops) > + * > + * MONITOR MONITORX > + * opcode 0f 01 c8 | 0f 01 fa > + * EAX (logical) address to monitor > + * ECX #GP if not zero > + * > + * The software P0 frequency is the same as the TSC frequency. > + */ > +static inline void __mwaitx(unsigned long eax, unsigned long ebx, > + unsigned long ecx) > +{ > + /* "mwaitx %eax, %ebx, %ecx;" */ > + asm volatile(".byte 0x0f, 0x01, 0xfb;" > + :: "a" (eax), "b" (ebx), "c" (ecx)); > +} > + > static inline void __sti_mwait(unsigned long eax, unsigned long ecx) > { > trace_hardirqs_on(); > -- > 1.9.1 >