Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965216AbbHDOGd (ORCPT ); Tue, 4 Aug 2015 10:06:33 -0400 Received: from e28smtp04.in.ibm.com ([122.248.162.4]:34507 "EHLO e28smtp04.in.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934215AbbHDOGa (ORCPT ); Tue, 4 Aug 2015 10:06:30 -0400 X-Helo: d28dlp01.in.ibm.com X-MailFrom: maddy@linux.vnet.ibm.com X-RcptTo: linux-kernel@vger.kernel.org Message-ID: <55C0C6C8.3030403@linux.vnet.ibm.com> Date: Tue, 04 Aug 2015 19:36:00 +0530 From: Madhavan Srinivasan User-Agent: Mozilla/5.0 (X11; Linux i686 on x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: Michael Ellerman , "Gautham R. Shenoy" , Paul Mackerras , linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, mikey@neuling.org Subject: Re: powerpc: Add an inline function to update HID0 References: <20150804100858.1F272140306@ozlabs.org> In-Reply-To: <20150804100858.1F272140306@ozlabs.org> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-TM-AS-MML: disable X-Content-Scanned: Fidelis XPS MAILER x-cbid: 15080414-0013-0000-0000-0000069EC9EB Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2334 Lines: 63 On Tuesday 04 August 2015 03:38 PM, Michael Ellerman wrote: > On Tue, 2015-04-08 at 08:30:58 UTC, "Gautham R. Shenoy" wrote: >> Section 3.7 of Version 1.2 of the Power8 Processor User's Manual >> prescribes that updates to HID0 be preceded by a SYNC instruction and >> followed by an ISYNC instruction (Page 91). >> >> Create a function name update_hid0() which follows this recipe and >> invoke it from the static split core path. >> >> Signed-off-by: Gautham R. Shenoy >> --- >> arch/powerpc/include/asm/kvm_ppc.h | 11 +++++++++++ > Why is it in there? It's not KVM related per se. > > Where should it go? I think reg.h would be best, ideally near the definition > for HID0, though that's probably not possible because of ASSEMBLY requirements. > So at the bottom of reg.h ? just to understand, Something like this will not do? #define update_hid0(x) __asm__ __volatile__( "sync\n"\ "mtspr " __stringify(SPRN_HID0)", %0\n"\ "isync"::"r"(x)); Maddy > >> diff --git a/arch/powerpc/include/asm/kvm_ppc.h b/arch/powerpc/include/asm/kvm_ppc.h >> index c6ef05b..325f1d6 100644 >> --- a/arch/powerpc/include/asm/kvm_ppc.h >> +++ b/arch/powerpc/include/asm/kvm_ppc.h >> @@ -685,4 +685,15 @@ static inline ulong kvmppc_get_ea_indexed(struct kvm_vcpu *vcpu, int ra, int rb) >> >> extern void xics_wake_cpu(int cpu); >> >> +static inline void update_hid0(unsigned long hid0) >> +{ >> + /* >> + * The HID0 update should at the very least be preceded by a >> + * a SYNC instruction followed by an ISYNC instruction >> + */ >> + mb(); >> + mtspr(SPRN_HID0, hid0); >> + isync(); > That's going to turn into three separate inline asm blocks, which is maybe a > bit unfortunate. Have you checked the generated code is what we want, ie. just > sync, mtspr, isync ? > > cheers > _______________________________________________ > Linuxppc-dev mailing list > Linuxppc-dev@lists.ozlabs.org > https://lists.ozlabs.org/listinfo/linuxppc-dev -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/