Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2992862AbbHICaX (ORCPT ); Sat, 8 Aug 2015 22:30:23 -0400 Received: from gate.crashing.org ([63.228.1.57]:56513 "EHLO gate.crashing.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2992828AbbHICaV (ORCPT ); Sat, 8 Aug 2015 22:30:21 -0400 Message-ID: <1439087389.3715.55.camel@kernel.crashing.org> Subject: Re: powerpc: Add an inline function to update HID0 From: Benjamin Herrenschmidt To: Michael Ellerman Cc: "Gautham R. Shenoy" , Paul Mackerras , linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, mikey@neuling.org Date: Sun, 09 Aug 2015 12:29:49 +1000 In-Reply-To: <20150804100858.1F272140306@ozlabs.org> References: <20150804100858.1F272140306@ozlabs.org> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.12.11-0ubuntu3 Mime-Version: 1.0 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2280 Lines: 61 On Tue, 2015-08-04 at 20:08 +1000, 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 ? > > > 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 ? It depends on the processor, I'd rather we make this out of line in misc.S or similar and use the appropriate CPU table bits and pieces. Some older CPUs require whacking it N times for example. Cheers, Ben. > 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/