From patchwork Mon Mar 4 10:12:20 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Gleixner X-Patchwork-Id: 209479 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:fa17:b0:10a:f01:a869 with SMTP id ju23csp1326507dyc; Mon, 4 Mar 2024 02:15:02 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCX7W5EdycOw2SG0Hg0phrwmb6rxVd1NjypqgoUpPsgLyHtWIITHAhHzGGyqmKR0ongsifmio5nsUwEGWZ8rInx1ybWU8g== X-Google-Smtp-Source: AGHT+IGC9xjTnovm/jzGGQ7eilQ/+YA9kTeHvgI9rQ31H3NDNAbVofIZyFVQkXoHp+VXhPOrGPgM X-Received: by 2002:a17:902:d3c6:b0:1d9:b8bc:fd7 with SMTP id w6-20020a170902d3c600b001d9b8bc0fd7mr6454476plb.68.1709547302204; Mon, 04 Mar 2024 02:15:02 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1709547302; cv=pass; d=google.com; s=arc-20160816; b=Oc8nYf/TGt2T5SbdaAV9fulH99OXCrzPHGZeevexB+h5x6wzz6HW/PwoKEBaqt5xmg FIc94eZRS93NEjfc/o+6JpfpqQlekbQudeRMyZmM3IXK5tonJQYPa0Qlhs1QkjcJsisK Sqr/ZdSvNsuW3BTUD4L9aKiDTJTx8ZISvlOVumwWV5RS+aVth00+bMAe00dXEtZpnlNr 6jsVKD9fdw/7O/MFhEJJbP7qH5Oge+qG3ksyriGyTkTPOwqF6pRbRnFwsSZEh/ksQqUC LmDtdDx0mdrKQcxBbjgXqQgJo7pldaNNNKa6ZZtAriai4nRlBWpZdYEMzwTGDIDNGZlf miIA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=date:mime-version:list-unsubscribe:list-subscribe:list-id :precedence:references:subject:cc:to:from:dkim-signature :dkim-signature:message-id; bh=RyGbWjTAxec6UVxBRQI4/who5kTeC4Qetv+7IpOA3/s=; fh=XPJs5ZGCvlB7w9yfpC1hED1EJsKLDZjsVhRhMNCPkns=; b=mOMQjm9PVoTYvBPAlmV56ZAqF9cCeYtYr2nCEv6ndhTFHIR/4iJ0rpWaETs5oNLIW+ UlkqabEI4qhpUyWf9ARE6XnTAMiyP+6I648hoI+WbNCAVJ2Jwc7Fgw/3sDqdpExfgMak 30VgPEdFUVx4Tpca8yCUKNbM4BHvKn9XDlCqBH8ua/iFP5WPoOSCU3A5OnwTMFnBbv+O 3NAXGypdozBkYUMoUGT/kxkygIrwU8QDahxeN4HMLcLkXrjzaFXPAucrRx0ZJhxdxo9X wTLSf1ZYIhlpCE/GXO9317MCc5ubL1is+9HnH3kT/3z22m15f3TIsPjlKHk1+2ul86XU RKaA==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=EerkCNw2; dkim=neutral (no key) header.i=@linutronix.de header.s=2020e; arc=pass (i=1 spf=pass spfdomain=linutronix.de dkim=pass dkdomain=linutronix.de dmarc=pass fromdomain=linutronix.de); spf=pass (google.com: domain of linux-kernel+bounces-90392-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-90392-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=linutronix.de Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [2604:1380:45e3:2400::1]) by mx.google.com with ESMTPS id lq15-20020a170903144f00b001db78534cd4si8193245plb.256.2024.03.04.02.15.02 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Mar 2024 02:15:02 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-90392-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) client-ip=2604:1380:45e3:2400::1; Authentication-Results: mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=EerkCNw2; dkim=neutral (no key) header.i=@linutronix.de header.s=2020e; arc=pass (i=1 spf=pass spfdomain=linutronix.de dkim=pass dkdomain=linutronix.de dmarc=pass fromdomain=linutronix.de); spf=pass (google.com: domain of linux-kernel+bounces-90392-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-90392-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=linutronix.de Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id E5A0E281D78 for ; Mon, 4 Mar 2024 10:15:01 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id EFEC83B788; Mon, 4 Mar 2024 10:12:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="EerkCNw2"; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="v992CpVd" Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D7A6B3984B; Mon, 4 Mar 2024 10:12:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=193.142.43.55 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709547144; cv=none; b=YTPi9jpS7JUzoHYjkFMUv22q823RwmrQxa7YuKXPeDGtAs+Jtzl0xfZ3NE8w3oyTKpGoFN8Rqhrv9w7EOkmlCMGsa4AMBAbA0EiAYuHOoXubjr22VCHnQ489D7w98K1W+VGwDnvPkl9zJC/iS2wUBLAPGqRW14fp29d6kgJ+0Vc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709547144; c=relaxed/simple; bh=Xy2u0bRDImKld1wcyjYDGiVnq2irYEy02BmpMI3Gm/Q=; h=Message-ID:From:To:Cc:Subject:References:MIME-Version: Content-Type:Date; b=l7bX761oN/iIVR4BIP9EImAE1rvwNkdUXmAZCQPX5orayWIe+tORDDHzPckmser8HBBy1D1isG/4fdjHoqxMg/w5a/cJ6uyFcIGqP/604+weIgD7fk23Mcl3oqN5LbBXdRHM+thnWKYgyN3sH0dEYZB1EuJqkuq0jPHW+6K58Ts= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de; spf=pass smtp.mailfrom=linutronix.de; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=EerkCNw2; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=v992CpVd; arc=none smtp.client-ip=193.142.43.55 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linutronix.de Message-ID: <20240304005104.513181735@linutronix.de> DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1709547141; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: references:references; bh=RyGbWjTAxec6UVxBRQI4/who5kTeC4Qetv+7IpOA3/s=; b=EerkCNw2EwZUT050o6pD4jnPrRjHC0dtfkfhEJXshTi9754LlALEgL5ozins3+nZDYVXTE FVLnPMvBc7RjABDX20HQhDmSerXxDtyIGzj7vjIGuyQlJ04NgkAFV6MZp+e50vMFOuApx4 MLMqO4KQDoI24+J9RHw7P/0RRGGpvNG+ACxd6Bd0H4gwlcVKY2YqpjLkILIR3b4lbnGx3Q San6m7VeZOrFkPMLxfva4SuepYtthCTHL0X8fAGlI4F91oHsax7vsLp6KyKVmkSaGseYwG bSrsavRUUdm59sW8xTYGQLtAioAquQ0TfrwRYJZ+3ajzCyYtWL5CktwjAdWmhQ== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1709547141; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: references:references; bh=RyGbWjTAxec6UVxBRQI4/who5kTeC4Qetv+7IpOA3/s=; b=v992CpVd3cXVfweVPzJzcgmEsgJL48gP4m7p7DFZ5TdrFRRueI+GubKaP/CBnKfBOC9AX5 bl5+WhvPg9fdW2Dw== From: Thomas Gleixner To: LKML Cc: x86@kernel.org, Linus Torvalds , Uros Bizjak , linux-sparse@vger.kernel.org, lkp@intel.com, oe-kbuild-all@lists.linux.dev Subject: [patch 3/9] x86/msr: Add missing __percpu annotations References: <20240303235029.555787150@linutronix.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Date: Mon, 4 Mar 2024 11:12:20 +0100 (CET) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1792590271895451457 X-GMAIL-MSGID: 1792590271895451457 sparse complains rightfully about using a plain pointer for per CPU accessors: msr-smp.c:15:23: sparse: warning: incorrect type in initializer (different address spaces) msr-smp.c:15:23: sparse: expected void const [noderef] __percpu *__vpp_verify msr-smp.c:15:23: sparse: got struct msr * Add __percpu annotations to the related datastructure and function arguments to cure this. This also cures the related sparse warnings at the callsites in drivers/edac/amd64_edac.c. Signed-off-by: Thomas Gleixner --- arch/x86/include/asm/msr.h | 26 ++++++++++++++------------ arch/x86/include/asm/processor.h | 1 - arch/x86/include/asm/tsc.h | 3 ++- arch/x86/lib/msr-smp.c | 12 +++++------- arch/x86/lib/msr.c | 6 +++--- 5 files changed, 24 insertions(+), 24 deletions(-) --- a/arch/x86/include/asm/msr.h +++ b/arch/x86/include/asm/msr.h @@ -12,11 +12,13 @@ #include #include +#include + struct msr_info { - u32 msr_no; - struct msr reg; - struct msr *msrs; - int err; + u32 msr_no; + struct msr reg; + struct msr __percpu *msrs; + int err; }; struct msr_regs_info { @@ -323,8 +325,8 @@ static inline int wrmsrl_safe(u32 msr, u return wrmsr_safe(msr, (u32)val, (u32)(val >> 32)); } -struct msr *msrs_alloc(void); -void msrs_free(struct msr *msrs); +struct msr __percpu *msrs_alloc(void); +void msrs_free(struct msr __percpu *msrs); int msr_set_bit(u32 msr, u8 bit); int msr_clear_bit(u32 msr, u8 bit); @@ -333,8 +335,8 @@ int rdmsr_on_cpu(unsigned int cpu, u32 m int wrmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 l, u32 h); int rdmsrl_on_cpu(unsigned int cpu, u32 msr_no, u64 *q); int wrmsrl_on_cpu(unsigned int cpu, u32 msr_no, u64 q); -void rdmsr_on_cpus(const struct cpumask *mask, u32 msr_no, struct msr *msrs); -void wrmsr_on_cpus(const struct cpumask *mask, u32 msr_no, struct msr *msrs); +void rdmsr_on_cpus(const struct cpumask *mask, u32 msr_no, struct msr __percpu *msrs); +void wrmsr_on_cpus(const struct cpumask *mask, u32 msr_no, struct msr __percpu *msrs); int rdmsr_safe_on_cpu(unsigned int cpu, u32 msr_no, u32 *l, u32 *h); int wrmsr_safe_on_cpu(unsigned int cpu, u32 msr_no, u32 l, u32 h); int rdmsrl_safe_on_cpu(unsigned int cpu, u32 msr_no, u64 *q); @@ -363,14 +365,14 @@ static inline int wrmsrl_on_cpu(unsigned return 0; } static inline void rdmsr_on_cpus(const struct cpumask *m, u32 msr_no, - struct msr *msrs) + struct msr __percpu *msrs) { - rdmsr_on_cpu(0, msr_no, &(msrs[0].l), &(msrs[0].h)); + rdmsr_on_cpu(0, msr_no, raw_cpu_ptr(&msrs->l), raw_cpu_ptr(&msrs->h)); } static inline void wrmsr_on_cpus(const struct cpumask *m, u32 msr_no, - struct msr *msrs) + struct msr __percpu *msrs) { - wrmsr_on_cpu(0, msr_no, msrs[0].l, msrs[0].h); + wrmsr_on_cpu(0, msr_no, raw_cpu_read(msrs->l), raw_cpu_read(msrs->h)); } static inline int rdmsr_safe_on_cpu(unsigned int cpu, u32 msr_no, u32 *l, u32 *h) --- a/arch/x86/include/asm/processor.h +++ b/arch/x86/include/asm/processor.h @@ -20,7 +20,6 @@ struct vm86; #include #include #include -#include #include #include #include --- a/arch/x86/include/asm/tsc.h +++ b/arch/x86/include/asm/tsc.h @@ -5,8 +5,9 @@ #ifndef _ASM_X86_TSC_H #define _ASM_X86_TSC_H -#include #include +#include +#include /* * Standard way to access the cycle counter. --- a/arch/x86/lib/msr-smp.c +++ b/arch/x86/lib/msr-smp.c @@ -9,10 +9,9 @@ static void __rdmsr_on_cpu(void *info) { struct msr_info *rv = info; struct msr *reg; - int this_cpu = raw_smp_processor_id(); if (rv->msrs) - reg = per_cpu_ptr(rv->msrs, this_cpu); + reg = this_cpu_ptr(rv->msrs); else reg = &rv->reg; @@ -23,10 +22,9 @@ static void __wrmsr_on_cpu(void *info) { struct msr_info *rv = info; struct msr *reg; - int this_cpu = raw_smp_processor_id(); if (rv->msrs) - reg = per_cpu_ptr(rv->msrs, this_cpu); + reg = this_cpu_ptr(rv->msrs); else reg = &rv->reg; @@ -97,7 +95,7 @@ int wrmsrl_on_cpu(unsigned int cpu, u32 EXPORT_SYMBOL(wrmsrl_on_cpu); static void __rwmsr_on_cpus(const struct cpumask *mask, u32 msr_no, - struct msr *msrs, + struct msr __percpu *msrs, void (*msr_func) (void *info)) { struct msr_info rv; @@ -124,7 +122,7 @@ static void __rwmsr_on_cpus(const struct * @msrs: array of MSR values * */ -void rdmsr_on_cpus(const struct cpumask *mask, u32 msr_no, struct msr *msrs) +void rdmsr_on_cpus(const struct cpumask *mask, u32 msr_no, struct msr __percpu *msrs) { __rwmsr_on_cpus(mask, msr_no, msrs, __rdmsr_on_cpu); } @@ -138,7 +136,7 @@ EXPORT_SYMBOL(rdmsr_on_cpus); * @msrs: array of MSR values * */ -void wrmsr_on_cpus(const struct cpumask *mask, u32 msr_no, struct msr *msrs) +void wrmsr_on_cpus(const struct cpumask *mask, u32 msr_no, struct msr __percpu *msrs) { __rwmsr_on_cpus(mask, msr_no, msrs, __wrmsr_on_cpu); } --- a/arch/x86/lib/msr.c +++ b/arch/x86/lib/msr.c @@ -6,9 +6,9 @@ #define CREATE_TRACE_POINTS #include -struct msr *msrs_alloc(void) +struct msr __percpu *msrs_alloc(void) { - struct msr *msrs = NULL; + struct msr __percpu *msrs = NULL; msrs = alloc_percpu(struct msr); if (!msrs) { @@ -20,7 +20,7 @@ struct msr *msrs_alloc(void) } EXPORT_SYMBOL(msrs_alloc); -void msrs_free(struct msr *msrs) +void msrs_free(struct msr __percpu *msrs) { free_percpu(msrs); }