From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matt Evans Subject: Re: [PATCH 05/28] kvm tools: 64-bit tidy; use PRIx64 when printf'ing u64s and link appropriately Date: Thu, 08 Dec 2011 16:47:24 +1100 Message-ID: <4EE04F6C.6090100@ozlabs.org> References: <4EDD8E4D.5000309@ozlabs.org> <1323159238.3882.6.camel@lappy> <20111206082827.GA30062@elte.hu> <20111206100538.GA8178@bloggs.ozlabs.ibm.com> <20111206102428.GB15966@elte.hu> <4EDF0F60.8080301@ozlabs.org> <20111207081602.GA8023@elte.hu> <4EE02BB2.5090908@ozlabs.org> <20111208044944.GB9485@elte.hu> <4EE0437F.5060505@ozlabs.org> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Cc: Pekka Enberg , Paul Mackerras , Sasha Levin , kvm@vger.kernel.org, kvm-ppc@vger.kernel.org, Pekka Enberg To: Ingo Molnar Return-path: In-Reply-To: <4EE0437F.5060505@ozlabs.org> Sender: kvm-ppc-owner@vger.kernel.org List-Id: kvm.vger.kernel.org On 08/12/11 15:56, Matt Evans wrote: > On 08/12/11 15:49, Ingo Molnar wrote: >> >> * Matt Evans wrote: >> >>> On 08/12/11 04:14, Pekka Enberg wrote: >>>> On Wed, 7 Dec 2011, Ingo Molnar wrote: >>>> >>>>> >>>>> * Matt Evans wrote: >>>>> >>>>>>>> [...] I haven't looked closely at Matt's >>>>>>>> patches, but it should be possible to use [un]signed long long >>>>>>>> for the u64/s64 types, I would think. >>>>>>> >>>>>>> In tools/kvm/ we are using our own u64/s64 definitions, not >>>>>>> glibc's, so i think it should be fine - as long as we don't pick >>>>>>> up int-l64.h accidentally via the >>>>>>> arch/powerpc/include/asm/types.h exception for user-space. >>>>>> >>>>>> That's what's happening here; we're __powerpc64__ and >>>>>> !__KERNEL__, tools/kvm/include/linux/types.h includes >>>>>> asm/types.h so gets the int-l64.h definition of __u64, as >>>>>> above. :/ >>>>>> >>>>>> builtin-run.c:389: error: format `%llx' expects type `long >>>>>> long unsigned int', but argument 2 has type `u64' >>>>> >>>>> So either define __KERNEL__ or patch a __NEW_USERSPACE__ define >>>>> into power/asm/types.h and use it - if the PowerPC folks agree >>>>> with that approach. >>>>> >>>>> Sane userspace should not be prevented from using the same sane >>>>> types the kernel is already using :-) >>>> >>>> How does perf handle this? I'm sure it has the exact same >>>> issue, doesn't it? >>> >>> It does; ironically it uses PRIblah, so I had followed its >>> example. >> >> Sadly it regressed lately in that area - it was certainly >> PRIblah-less in the early stages :-) > > Oh dear :-) > >> Pekka, how do the headers react if we define __KERNEL__? >> Alternatively, allowing an override in powerpc/types.h beyond >> __KERNEL__ looks sensible as well. > > Well, I just tried it and it ended in tears; various things bring in tons more > (ppc) stuff from asm/, quite a few conflicts. > > I've resorted to defining __KERNEL__ in linux/types.h *only* around #include > (i.e. undefining it afterwards). This picks up the correct > int-ll64.h on PPC64 and doesn't break everything else. I spoke too soon; this screws x86 (who?), in that BITS_PER_LONG's redefined as ../../include/asm-generic/bitsperlong.h now kicks in if __KERNEL__'s defined. Defining __KERNEL__ feels a bit nasty, esp. considering these knock-on effects. Since tools/kvm/include/linux/types.h only requires __u32, __u64 et al from , wouldn't it be most straightforward to just #include ? This avoids #define __KERNEL__ breaking other includes brought into userland, avoids changing system headers/distros, and includes the file we're really interested in on both x86 & PPC. Cheers, Matt