Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1759948AbcLVLIr (ORCPT ); Thu, 22 Dec 2016 06:08:47 -0500 Received: from Galois.linutronix.de ([146.0.238.70]:33003 "EHLO Galois.linutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755438AbcLVLIq (ORCPT ); Thu, 22 Dec 2016 06:08:46 -0500 Date: Thu, 22 Dec 2016 12:05:49 +0100 (CET) From: Thomas Gleixner To: "Andrejczuk, Grzegorz" cc: "mingo@redhat.com" , "hpa@zytor.com" , "x86@kernel.org" , "linux-kernel@vger.kernel.org" , "Luc, Piotr" , "dave.hansen@linux.intel.com" Subject: RE: [Patch v11 4/5] x86/cpufeature: enable RING3MWAIT for Knights Landing In-Reply-To: Message-ID: References: <1482241726-27310-5-git-send-email-grzegorz.andrejczuk@intel.com> <1482258687-4582-1-git-send-email-grzegorz.andrejczuk@intel.com> User-Agent: Alpine 2.20 (DEB 67 2015-01-07) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1274 Lines: 36 On Thu, 22 Dec 2016, Andrejczuk, Grzegorz wrote: > > Handing a typecasted unsigned int pointer to a function which expects an > > unsigned long pointer is just broken and a clear sign of careless > > tinkering. > > I thought this to be 32 issue because it popped up in 32 build. It also warns on the 64bit build. > The reason for this is probably that sizeof(int) is equal to sizeof(long) > on x64. Huch? sizeof(int) is equal to sizeof(long) on 32bit, but definitely not on 64 bit. > I used the cast following set_cpu_cap define which does exactly the same > thing with u32* type. set_cpu_cap() operates on 'c->x86_capability', which is an array of u32 and the bit numbers are linear. That works because x86 is little endian. It's not pretty, but it's not a template for general abuse. > I used set_bit because I wanted to be sure that this operation to be > done atomically. There might be data race when multiple values of > ELF_HWCAP2 will be set by multiple threads. Touching ELF_HWCAP2 from anything else than the boot cpu is pointless anyway. This should be done once. Aside of that CPU bringup and therefor the call to init_intel() is serialized by the cpu hotplug code and if we lift that, then ELF_HWCAP2 will be the least of our worries. Thanks, tglx