From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Daney Subject: Re: [PATCH v2 09/13] MIPS: Add functions for hypervisor call Date: Tue, 3 Jun 2014 09:40:01 -0700 Message-ID: <538DFA61.4080100@caviumnetworks.com> References: <1401313936-11867-1-git-send-email-andreas.herrmann@caviumnetworks.com> <1401313936-11867-10-git-send-email-andreas.herrmann@caviumnetworks.com> <20140603083031.GP17197@linux-mips.org> <20140603150337.GA28045@alberich> Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit Cc: , David Daney , "James Hogan" , , David Daney To: Andreas Herrmann , Ralf Baechle , "Pinski, Andrew" Return-path: In-Reply-To: <20140603150337.GA28045@alberich> Sender: linux-mips-bounce@linux-mips.org Errors-to: linux-mips-bounce@linux-mips.org List-help: List-unsubscribe: List-software: Ecartis version 1.0.0 List-subscribe: List-owner: List-post: List-archive: List-Id: kvm.vger.kernel.org In cases like this, I always wonder WWPD (What Would Pinski Do)... Let's get him to opine. Andrew, the patch in question is: http://www.linux-mips.org/archives/linux-mips/2014-05/msg00309.html Thanks, David Daney On 06/03/2014 08:03 AM, Andreas Herrmann wrote: > On Tue, Jun 03, 2014 at 10:30:31AM +0200, Ralf Baechle wrote: >> On Wed, May 28, 2014 at 11:52:12PM +0200, Andreas Herrmann wrote: >> >>> +/* >>> + * Hypercalls for KVM. >>> + * >>> + * Hypercall number is passed in v0. >>> + * Return value will be placed in v0. >>> + * Up to 3 arguments are passed in a0, a1, and a2. >>> + */ >>> +static inline unsigned long kvm_hypercall0(unsigned long num) >>> +{ >>> + register unsigned long n asm("v0"); >>> + register unsigned long r asm("v0"); >> >> Btw, is it safe to put two variables in the same register? > > I think it's safe. > > If we would have a matching constraint letter (say "v" for register v0) the > asm should translate to > > __asm__ __volatile__( > KVM_HYPERCALL > : "=v" (n) : "v" (r) : "memory" > ); > > which isn't unusual on other archs. (Or maybe I am just biased from > x86 ... or missed something else.) > >> The syscall wrappers that used to be in were occasionally >> hitting problems which eventually forced me to stop forcing variables >> into particular registers instead using a MOVE instruction to shove >> each variable into the right place. >> >> Of course they were being used from non-PIC and PIC code, kernel and userland >> so GCC had a much better chance to do evil than in the hypercall wrapper >> case - but it made me paranoid ... > > > > Andreas >