All of lore.kernel.org
 help / color / mirror / Atom feed
* [tglx-devel:x86/l1dflush 7/9] arch/x86/mm/tlb.c:354:13: sparse: sparse: incorrect type in initializer (different address spaces)
@ 2021-04-27  3:00 kernel test robot
  2021-04-27  6:37   ` Thomas Gleixner
  0 siblings, 1 reply; 9+ messages in thread
From: kernel test robot @ 2021-04-27  3:00 UTC (permalink / raw)
  To: kbuild-all

[-- Attachment #1: Type: text/plain, Size: 5576 bytes --]

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/tglx/devel.git x86/l1dflush
head:   6955fbfdad4241331d1e33362306aec3a410803a
commit: 193cb89595f7f3f4549b03ab9392fb9838d123e3 [7/9] x86/mm: Prepare for opt-in based L1D flush in switch_mm()
config: i386-randconfig-s032-20210426 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
reproduce:
        # apt-get install sparse
        # sparse version: v0.6.3-341-g8af24329-dirty
        # https://git.kernel.org/pub/scm/linux/kernel/git/tglx/devel.git/commit/?id=193cb89595f7f3f4549b03ab9392fb9838d123e3
        git remote add tglx-devel https://git.kernel.org/pub/scm/linux/kernel/git/tglx/devel.git
        git fetch --no-tags tglx-devel x86/l1dflush
        git checkout 193cb89595f7f3f4549b03ab9392fb9838d123e3
        # save the attached .config to linux build tree
        make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' W=1 ARCH=i386 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>


sparse warnings: (new ones prefixed by >>)
>> arch/x86/mm/tlb.c:354:13: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected void const [noderef] __percpu *__vpp_verify @@     got bool * @@
   arch/x86/mm/tlb.c:354:13: sparse:     expected void const [noderef] __percpu *__vpp_verify
   arch/x86/mm/tlb.c:354:13: sparse:     got bool *
>> arch/x86/mm/tlb.c:354:13: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected void const [noderef] __percpu *__vpp_verify @@     got bool * @@
   arch/x86/mm/tlb.c:354:13: sparse:     expected void const [noderef] __percpu *__vpp_verify
   arch/x86/mm/tlb.c:354:13: sparse:     got bool *
>> arch/x86/mm/tlb.c:354:13: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected void const [noderef] __percpu *__vpp_verify @@     got bool * @@
   arch/x86/mm/tlb.c:354:13: sparse:     expected void const [noderef] __percpu *__vpp_verify
   arch/x86/mm/tlb.c:354:13: sparse:     got bool *
>> arch/x86/mm/tlb.c:354:13: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected void const [noderef] __percpu *__vpp_verify @@     got bool * @@
   arch/x86/mm/tlb.c:354:13: sparse:     expected void const [noderef] __percpu *__vpp_verify
   arch/x86/mm/tlb.c:354:13: sparse:     got bool *
>> arch/x86/mm/tlb.c:354:13: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected void const [noderef] __percpu *__vpp_verify @@     got bool * @@
   arch/x86/mm/tlb.c:354:13: sparse:     expected void const [noderef] __percpu *__vpp_verify
   arch/x86/mm/tlb.c:354:13: sparse:     got bool *
>> arch/x86/mm/tlb.c:354:13: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected void const [noderef] __percpu *__vpp_verify @@     got bool * @@
   arch/x86/mm/tlb.c:354:13: sparse:     expected void const [noderef] __percpu *__vpp_verify
   arch/x86/mm/tlb.c:354:13: sparse:     got bool *
>> arch/x86/mm/tlb.c:354:13: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected void const [noderef] __percpu *__vpp_verify @@     got bool * @@
   arch/x86/mm/tlb.c:354:13: sparse:     expected void const [noderef] __percpu *__vpp_verify
   arch/x86/mm/tlb.c:354:13: sparse:     got bool *
>> arch/x86/mm/tlb.c:354:13: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected void const [noderef] __percpu *__vpp_verify @@     got bool * @@
   arch/x86/mm/tlb.c:354:13: sparse:     expected void const [noderef] __percpu *__vpp_verify
   arch/x86/mm/tlb.c:354:13: sparse:     got bool *
>> arch/x86/mm/tlb.c:354:13: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected void const [noderef] __percpu *__vpp_verify @@     got bool * @@
   arch/x86/mm/tlb.c:354:13: sparse:     expected void const [noderef] __percpu *__vpp_verify
   arch/x86/mm/tlb.c:354:13: sparse:     got bool *
>> arch/x86/mm/tlb.c:354:13: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected void const [noderef] __percpu *__vpp_verify @@     got bool * @@
   arch/x86/mm/tlb.c:354:13: sparse:     expected void const [noderef] __percpu *__vpp_verify
   arch/x86/mm/tlb.c:354:13: sparse:     got bool *

vim +354 arch/x86/mm/tlb.c

   336	
   337	static void l1d_flush_evaluate(unsigned long prev_mm, unsigned long next_mm,
   338					struct task_struct *next)
   339	{
   340		/* Flush L1D if the outgoing task requests it */
   341		if (prev_mm & LAST_USER_MM_L1D_FLUSH)
   342			wrmsrl(MSR_IA32_FLUSH_CMD, L1D_FLUSH);
   343	
   344		/* Check whether the incoming task opted in for L1D flush */
   345		if (likely(!(next_mm & LAST_USER_MM_L1D_FLUSH)))
   346			return;
   347	
   348		/*
   349		 * Validate that it is not running on an SMT sibling as this would
   350		 * make the excercise pointless because the siblings share L1D. If
   351		 * it runs on a SMT sibling, notify it with SIGBUS on return to
   352		 * user/guest
   353		 */
 > 354		if (this_cpu_read(cpu_info.smt_active)) {
   355			clear_ti_thread_flag(&next->thread_info, TIF_SPEC_L1D_FLUSH);
   356			next->l1d_flush_kill.func = l1d_flush_force_sigbus;
   357			task_work_add(next, &next->l1d_flush_kill, TWA_RESUME);
   358		}
   359	}
   360	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 31630 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [tglx-devel:x86/l1dflush 7/9] arch/x86/mm/tlb.c:354:13: sparse: sparse: incorrect type in initializer (different address spaces)
  2021-04-27  3:00 [tglx-devel:x86/l1dflush 7/9] arch/x86/mm/tlb.c:354:13: sparse: sparse: incorrect type in initializer (different address spaces) kernel test robot
@ 2021-04-27  6:37   ` Thomas Gleixner
  0 siblings, 0 replies; 9+ messages in thread
From: Thomas Gleixner @ 2021-04-27  6:37 UTC (permalink / raw)
  To: kernel test robot, Balbir Singh
  Cc: kbuild-all, linux-sparse, luc.vanoostenryck

On Tue, Apr 27 2021 at 11:00, kernel test robot wrote:

Cc+ sparse folks

> tree:   https://git.kernel.org/pub/scm/linux/kernel/git/tglx/devel.git x86/l1dflush
> head:   6955fbfdad4241331d1e33362306aec3a410803a
> commit: 193cb89595f7f3f4549b03ab9392fb9838d123e3 [7/9] x86/mm: Prepare for opt-in based L1D flush in switch_mm()
> config: i386-randconfig-s032-20210426 (attached as .config)
> compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
> reproduce:
>         # apt-get install sparse
>         # sparse version: v0.6.3-341-g8af24329-dirty
>         # https://git.kernel.org/pub/scm/linux/kernel/git/tglx/devel.git/commit/?id=193cb89595f7f3f4549b03ab9392fb9838d123e3
>         git remote add tglx-devel https://git.kernel.org/pub/scm/linux/kernel/git/tglx/devel.git
>         git fetch --no-tags tglx-devel x86/l1dflush
>         git checkout 193cb89595f7f3f4549b03ab9392fb9838d123e3
>         # save the attached .config to linux build tree
>         make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' W=1 ARCH=i386 
>
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kernel test robot <lkp@intel.com>
>
>
> sparse warnings: (new ones prefixed by >>)
>>> arch/x86/mm/tlb.c:354:13: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected void const [noderef] __percpu *__vpp_verify @@     got bool * @@
>    arch/x86/mm/tlb.c:354:13: sparse:     expected void const [noderef] __percpu *__vpp_verify
>    arch/x86/mm/tlb.c:354:13: sparse:     got bool *
>>> arch/x86/mm/tlb.c:354:13: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected void const [noderef] __percpu *__vpp_verify @@     got bool * @@
>    arch/x86/mm/tlb.c:354:13: sparse:     expected void const [noderef] __percpu *__vpp_verify
>    arch/x86/mm/tlb.c:354:13: sparse:     got bool *
>>> arch/x86/mm/tlb.c:354:13: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected void const [noderef] __percpu *__vpp_verify @@     got bool * @@
>    arch/x86/mm/tlb.c:354:13: sparse:     expected void const [noderef] __percpu *__vpp_verify
>    arch/x86/mm/tlb.c:354:13: sparse:     got bool *
>>> arch/x86/mm/tlb.c:354:13: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected void const [noderef] __percpu *__vpp_verify @@     got bool * @@
>    arch/x86/mm/tlb.c:354:13: sparse:     expected void const [noderef] __percpu *__vpp_verify
>    arch/x86/mm/tlb.c:354:13: sparse:     got bool *
>>> arch/x86/mm/tlb.c:354:13: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected void const [noderef] __percpu *__vpp_verify @@     got bool * @@
>    arch/x86/mm/tlb.c:354:13: sparse:     expected void const [noderef] __percpu *__vpp_verify
>    arch/x86/mm/tlb.c:354:13: sparse:     got bool *
>>> arch/x86/mm/tlb.c:354:13: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected void const [noderef] __percpu *__vpp_verify @@     got bool * @@
>    arch/x86/mm/tlb.c:354:13: sparse:     expected void const [noderef] __percpu *__vpp_verify
>    arch/x86/mm/tlb.c:354:13: sparse:     got bool *
>>> arch/x86/mm/tlb.c:354:13: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected void const [noderef] __percpu *__vpp_verify @@     got bool * @@
>    arch/x86/mm/tlb.c:354:13: sparse:     expected void const [noderef] __percpu *__vpp_verify
>    arch/x86/mm/tlb.c:354:13: sparse:     got bool *
>>> arch/x86/mm/tlb.c:354:13: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected void const [noderef] __percpu *__vpp_verify @@     got bool * @@
>    arch/x86/mm/tlb.c:354:13: sparse:     expected void const [noderef] __percpu *__vpp_verify
>    arch/x86/mm/tlb.c:354:13: sparse:     got bool *
>>> arch/x86/mm/tlb.c:354:13: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected void const [noderef] __percpu *__vpp_verify @@     got bool * @@
>    arch/x86/mm/tlb.c:354:13: sparse:     expected void const [noderef] __percpu *__vpp_verify
>    arch/x86/mm/tlb.c:354:13: sparse:     got bool *
>>> arch/x86/mm/tlb.c:354:13: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected void const [noderef] __percpu *__vpp_verify @@     got bool * @@
>    arch/x86/mm/tlb.c:354:13: sparse:     expected void const [noderef] __percpu *__vpp_verify
>    arch/x86/mm/tlb.c:354:13: sparse:     got bool *
>
> vim +354 arch/x86/mm/tlb.c
>
>    336	
>    337	static void l1d_flush_evaluate(unsigned long prev_mm, unsigned long next_mm,
>    338					struct task_struct *next)
>    339	{
>    340		/* Flush L1D if the outgoing task requests it */
>    341		if (prev_mm & LAST_USER_MM_L1D_FLUSH)
>    342			wrmsrl(MSR_IA32_FLUSH_CMD, L1D_FLUSH);
>    343	
>    344		/* Check whether the incoming task opted in for L1D flush */
>    345		if (likely(!(next_mm & LAST_USER_MM_L1D_FLUSH)))
>    346			return;
>    347	
>    348		/*
>    349		 * Validate that it is not running on an SMT sibling as this would
>    350		 * make the excercise pointless because the siblings share L1D. If
>    351		 * it runs on a SMT sibling, notify it with SIGBUS on return to
>    352		 * user/guest
>    353		 */
>  > 354		if (this_cpu_read(cpu_info.smt_active)) {

That's a valid construct and the kernel of full of percpuvar.member reads/writes.

>    355			clear_ti_thread_flag(&next->thread_info, TIF_SPEC_L1D_FLUSH);
>    356			next->l1d_flush_kill.func = l1d_flush_force_sigbus;
>    357			task_work_add(next, &next->l1d_flush_kill, TWA_RESUME);
>    358		}
>    359	}
>    360	

Thanks,

        tglx

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [tglx-devel:x86/l1dflush 7/9] arch/x86/mm/tlb.c:354:13: sparse: sparse: incorrect type in initializer (different address spaces)
@ 2021-04-27  6:37   ` Thomas Gleixner
  0 siblings, 0 replies; 9+ messages in thread
From: Thomas Gleixner @ 2021-04-27  6:37 UTC (permalink / raw)
  To: kbuild-all

[-- Attachment #1: Type: text/plain, Size: 5787 bytes --]

On Tue, Apr 27 2021 at 11:00, kernel test robot wrote:

Cc+ sparse folks

> tree:   https://git.kernel.org/pub/scm/linux/kernel/git/tglx/devel.git x86/l1dflush
> head:   6955fbfdad4241331d1e33362306aec3a410803a
> commit: 193cb89595f7f3f4549b03ab9392fb9838d123e3 [7/9] x86/mm: Prepare for opt-in based L1D flush in switch_mm()
> config: i386-randconfig-s032-20210426 (attached as .config)
> compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
> reproduce:
>         # apt-get install sparse
>         # sparse version: v0.6.3-341-g8af24329-dirty
>         # https://git.kernel.org/pub/scm/linux/kernel/git/tglx/devel.git/commit/?id=193cb89595f7f3f4549b03ab9392fb9838d123e3
>         git remote add tglx-devel https://git.kernel.org/pub/scm/linux/kernel/git/tglx/devel.git
>         git fetch --no-tags tglx-devel x86/l1dflush
>         git checkout 193cb89595f7f3f4549b03ab9392fb9838d123e3
>         # save the attached .config to linux build tree
>         make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' W=1 ARCH=i386 
>
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kernel test robot <lkp@intel.com>
>
>
> sparse warnings: (new ones prefixed by >>)
>>> arch/x86/mm/tlb.c:354:13: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected void const [noderef] __percpu *__vpp_verify @@     got bool * @@
>    arch/x86/mm/tlb.c:354:13: sparse:     expected void const [noderef] __percpu *__vpp_verify
>    arch/x86/mm/tlb.c:354:13: sparse:     got bool *
>>> arch/x86/mm/tlb.c:354:13: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected void const [noderef] __percpu *__vpp_verify @@     got bool * @@
>    arch/x86/mm/tlb.c:354:13: sparse:     expected void const [noderef] __percpu *__vpp_verify
>    arch/x86/mm/tlb.c:354:13: sparse:     got bool *
>>> arch/x86/mm/tlb.c:354:13: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected void const [noderef] __percpu *__vpp_verify @@     got bool * @@
>    arch/x86/mm/tlb.c:354:13: sparse:     expected void const [noderef] __percpu *__vpp_verify
>    arch/x86/mm/tlb.c:354:13: sparse:     got bool *
>>> arch/x86/mm/tlb.c:354:13: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected void const [noderef] __percpu *__vpp_verify @@     got bool * @@
>    arch/x86/mm/tlb.c:354:13: sparse:     expected void const [noderef] __percpu *__vpp_verify
>    arch/x86/mm/tlb.c:354:13: sparse:     got bool *
>>> arch/x86/mm/tlb.c:354:13: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected void const [noderef] __percpu *__vpp_verify @@     got bool * @@
>    arch/x86/mm/tlb.c:354:13: sparse:     expected void const [noderef] __percpu *__vpp_verify
>    arch/x86/mm/tlb.c:354:13: sparse:     got bool *
>>> arch/x86/mm/tlb.c:354:13: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected void const [noderef] __percpu *__vpp_verify @@     got bool * @@
>    arch/x86/mm/tlb.c:354:13: sparse:     expected void const [noderef] __percpu *__vpp_verify
>    arch/x86/mm/tlb.c:354:13: sparse:     got bool *
>>> arch/x86/mm/tlb.c:354:13: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected void const [noderef] __percpu *__vpp_verify @@     got bool * @@
>    arch/x86/mm/tlb.c:354:13: sparse:     expected void const [noderef] __percpu *__vpp_verify
>    arch/x86/mm/tlb.c:354:13: sparse:     got bool *
>>> arch/x86/mm/tlb.c:354:13: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected void const [noderef] __percpu *__vpp_verify @@     got bool * @@
>    arch/x86/mm/tlb.c:354:13: sparse:     expected void const [noderef] __percpu *__vpp_verify
>    arch/x86/mm/tlb.c:354:13: sparse:     got bool *
>>> arch/x86/mm/tlb.c:354:13: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected void const [noderef] __percpu *__vpp_verify @@     got bool * @@
>    arch/x86/mm/tlb.c:354:13: sparse:     expected void const [noderef] __percpu *__vpp_verify
>    arch/x86/mm/tlb.c:354:13: sparse:     got bool *
>>> arch/x86/mm/tlb.c:354:13: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected void const [noderef] __percpu *__vpp_verify @@     got bool * @@
>    arch/x86/mm/tlb.c:354:13: sparse:     expected void const [noderef] __percpu *__vpp_verify
>    arch/x86/mm/tlb.c:354:13: sparse:     got bool *
>
> vim +354 arch/x86/mm/tlb.c
>
>    336	
>    337	static void l1d_flush_evaluate(unsigned long prev_mm, unsigned long next_mm,
>    338					struct task_struct *next)
>    339	{
>    340		/* Flush L1D if the outgoing task requests it */
>    341		if (prev_mm & LAST_USER_MM_L1D_FLUSH)
>    342			wrmsrl(MSR_IA32_FLUSH_CMD, L1D_FLUSH);
>    343	
>    344		/* Check whether the incoming task opted in for L1D flush */
>    345		if (likely(!(next_mm & LAST_USER_MM_L1D_FLUSH)))
>    346			return;
>    347	
>    348		/*
>    349		 * Validate that it is not running on an SMT sibling as this would
>    350		 * make the excercise pointless because the siblings share L1D. If
>    351		 * it runs on a SMT sibling, notify it with SIGBUS on return to
>    352		 * user/guest
>    353		 */
>  > 354		if (this_cpu_read(cpu_info.smt_active)) {

That's a valid construct and the kernel of full of percpuvar.member reads/writes.

>    355			clear_ti_thread_flag(&next->thread_info, TIF_SPEC_L1D_FLUSH);
>    356			next->l1d_flush_kill.func = l1d_flush_force_sigbus;
>    357			task_work_add(next, &next->l1d_flush_kill, TWA_RESUME);
>    358		}
>    359	}
>    360	

Thanks,

        tglx

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [tglx-devel:x86/l1dflush 7/9] arch/x86/mm/tlb.c:354:13: sparse: sparse: incorrect type in initializer (different address spaces)
  2021-04-27  6:37   ` Thomas Gleixner
@ 2021-04-27 17:00     ` Linus Torvalds
  -1 siblings, 0 replies; 9+ messages in thread
From: Linus Torvalds @ 2021-04-27 17:00 UTC (permalink / raw)
  To: Thomas Gleixner
  Cc: kernel test robot, Balbir Singh, kbuild-all, Sparse Mailing-list,
	Luc Van Oostenryck

On Mon, Apr 26, 2021 at 11:37 PM Thomas Gleixner <tglx@linutronix.de> wrote:
>
> >  > 354                if (this_cpu_read(cpu_info.smt_active)) {
>
> That's a valid construct and the kernel of full of percpuvar.member reads/writes.

Hmm. "cpu_info" doesn't seem to be marked as a percpu data structure.

Is this perhaps a UP config? Because we have:

  extern struct cpuinfo_x86       boot_cpu_data;
    ...
  #ifdef CONFIG_SMP
  DECLARE_PER_CPU_READ_MOSTLY(struct cpuinfo_x86, cpu_info);
  #define cpu_data(cpu)           per_cpu(cpu_info, cpu)
  #else
  #define cpu_info                boot_cpu_data
  #define cpu_data(cpu)           boot_cpu_data
  #endif

and notice how if CONFIG_SMP isn't set, 'cpu_info' just turns into a
regular non-percpu thing.

But the sparse checking doesn't go away just because it's compiled for UP.

              Linus

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [tglx-devel:x86/l1dflush 7/9] arch/x86/mm/tlb.c:354:13: sparse: sparse: incorrect type in initializer (different address spaces)
@ 2021-04-27 17:00     ` Linus Torvalds
  0 siblings, 0 replies; 9+ messages in thread
From: Linus Torvalds @ 2021-04-27 17:00 UTC (permalink / raw)
  To: kbuild-all

[-- Attachment #1: Type: text/plain, Size: 877 bytes --]

On Mon, Apr 26, 2021 at 11:37 PM Thomas Gleixner <tglx@linutronix.de> wrote:
>
> >  > 354                if (this_cpu_read(cpu_info.smt_active)) {
>
> That's a valid construct and the kernel of full of percpuvar.member reads/writes.

Hmm. "cpu_info" doesn't seem to be marked as a percpu data structure.

Is this perhaps a UP config? Because we have:

  extern struct cpuinfo_x86       boot_cpu_data;
    ...
  #ifdef CONFIG_SMP
  DECLARE_PER_CPU_READ_MOSTLY(struct cpuinfo_x86, cpu_info);
  #define cpu_data(cpu)           per_cpu(cpu_info, cpu)
  #else
  #define cpu_info                boot_cpu_data
  #define cpu_data(cpu)           boot_cpu_data
  #endif

and notice how if CONFIG_SMP isn't set, 'cpu_info' just turns into a
regular non-percpu thing.

But the sparse checking doesn't go away just because it's compiled for UP.

              Linus

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [tglx-devel:x86/l1dflush 7/9] arch/x86/mm/tlb.c:354:13: sparse: sparse: incorrect type in initializer (different address spaces)
  2021-04-27 17:00     ` Linus Torvalds
@ 2021-04-27 19:23       ` Luc Van Oostenryck
  -1 siblings, 0 replies; 9+ messages in thread
From: Luc Van Oostenryck @ 2021-04-27 19:23 UTC (permalink / raw)
  To: Linus Torvalds
  Cc: Thomas Gleixner, kernel test robot, Balbir Singh, kbuild-all,
	Sparse Mailing-list

On Tue, Apr 27, 2021 at 10:00:48AM -0700, Linus Torvalds wrote:
> On Mon, Apr 26, 2021 at 11:37 PM Thomas Gleixner <tglx@linutronix.de> wrote:
> >
> > >  > 354                if (this_cpu_read(cpu_info.smt_active)) {
> >
> > That's a valid construct and the kernel of full of percpuvar.member reads/writes.
> 
> Hmm. "cpu_info" doesn't seem to be marked as a percpu data structure.
> 
> Is this perhaps a UP config? Because we have:

Yes, most probably.
Just to be sure, I checked with i386_defconfig (which is SMP) and
sparse doesn't complain (but then does if CONFIG_SMP is set to 'n').

-- Luc

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [tglx-devel:x86/l1dflush 7/9] arch/x86/mm/tlb.c:354:13: sparse: sparse: incorrect type in initializer (different address spaces)
@ 2021-04-27 19:23       ` Luc Van Oostenryck
  0 siblings, 0 replies; 9+ messages in thread
From: Luc Van Oostenryck @ 2021-04-27 19:23 UTC (permalink / raw)
  To: kbuild-all

[-- Attachment #1: Type: text/plain, Size: 611 bytes --]

On Tue, Apr 27, 2021 at 10:00:48AM -0700, Linus Torvalds wrote:
> On Mon, Apr 26, 2021 at 11:37 PM Thomas Gleixner <tglx@linutronix.de> wrote:
> >
> > >  > 354                if (this_cpu_read(cpu_info.smt_active)) {
> >
> > That's a valid construct and the kernel of full of percpuvar.member reads/writes.
> 
> Hmm. "cpu_info" doesn't seem to be marked as a percpu data structure.
> 
> Is this perhaps a UP config? Because we have:

Yes, most probably.
Just to be sure, I checked with i386_defconfig (which is SMP) and
sparse doesn't complain (but then does if CONFIG_SMP is set to 'n').

-- Luc

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [tglx-devel:x86/l1dflush 7/9] arch/x86/mm/tlb.c:354:13: sparse: sparse: incorrect type in initializer (different address spaces)
  2021-04-27 17:00     ` Linus Torvalds
@ 2021-04-27 19:54       ` Thomas Gleixner
  -1 siblings, 0 replies; 9+ messages in thread
From: Thomas Gleixner @ 2021-04-27 19:54 UTC (permalink / raw)
  To: Linus Torvalds
  Cc: kernel test robot, Balbir Singh, kbuild-all, Sparse Mailing-list,
	Luc Van Oostenryck

On Tue, Apr 27 2021 at 10:00, Linus Torvalds wrote:
> On Mon, Apr 26, 2021 at 11:37 PM Thomas Gleixner <tglx@linutronix.de> wrote:
>>
>> >  > 354                if (this_cpu_read(cpu_info.smt_active)) {
>>
>> That's a valid construct and the kernel of full of percpuvar.member reads/writes.
>
> Hmm. "cpu_info" doesn't seem to be marked as a percpu data structure.
>
> Is this perhaps a UP config? Because we have:
>
>   extern struct cpuinfo_x86       boot_cpu_data;
>     ...
>   #ifdef CONFIG_SMP
>   DECLARE_PER_CPU_READ_MOSTLY(struct cpuinfo_x86, cpu_info);
>   #define cpu_data(cpu)           per_cpu(cpu_info, cpu)
>   #else
>   #define cpu_info                boot_cpu_data
>   #define cpu_data(cpu)           boot_cpu_data
>   #endif
>
> and notice how if CONFIG_SMP isn't set, 'cpu_info' just turns into a
> regular non-percpu thing.
>
> But the sparse checking doesn't go away just because it's compiled for UP.

Duh yes. I'm a moron.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [tglx-devel:x86/l1dflush 7/9] arch/x86/mm/tlb.c:354:13: sparse: sparse: incorrect type in initializer (different address spaces)
@ 2021-04-27 19:54       ` Thomas Gleixner
  0 siblings, 0 replies; 9+ messages in thread
From: Thomas Gleixner @ 2021-04-27 19:54 UTC (permalink / raw)
  To: kbuild-all

[-- Attachment #1: Type: text/plain, Size: 971 bytes --]

On Tue, Apr 27 2021 at 10:00, Linus Torvalds wrote:
> On Mon, Apr 26, 2021 at 11:37 PM Thomas Gleixner <tglx@linutronix.de> wrote:
>>
>> >  > 354                if (this_cpu_read(cpu_info.smt_active)) {
>>
>> That's a valid construct and the kernel of full of percpuvar.member reads/writes.
>
> Hmm. "cpu_info" doesn't seem to be marked as a percpu data structure.
>
> Is this perhaps a UP config? Because we have:
>
>   extern struct cpuinfo_x86       boot_cpu_data;
>     ...
>   #ifdef CONFIG_SMP
>   DECLARE_PER_CPU_READ_MOSTLY(struct cpuinfo_x86, cpu_info);
>   #define cpu_data(cpu)           per_cpu(cpu_info, cpu)
>   #else
>   #define cpu_info                boot_cpu_data
>   #define cpu_data(cpu)           boot_cpu_data
>   #endif
>
> and notice how if CONFIG_SMP isn't set, 'cpu_info' just turns into a
> regular non-percpu thing.
>
> But the sparse checking doesn't go away just because it's compiled for UP.

Duh yes. I'm a moron.

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2021-04-27 19:54 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-04-27  3:00 [tglx-devel:x86/l1dflush 7/9] arch/x86/mm/tlb.c:354:13: sparse: sparse: incorrect type in initializer (different address spaces) kernel test robot
2021-04-27  6:37 ` Thomas Gleixner
2021-04-27  6:37   ` Thomas Gleixner
2021-04-27 17:00   ` Linus Torvalds
2021-04-27 17:00     ` Linus Torvalds
2021-04-27 19:23     ` Luc Van Oostenryck
2021-04-27 19:23       ` Luc Van Oostenryck
2021-04-27 19:54     ` Thomas Gleixner
2021-04-27 19:54       ` Thomas Gleixner

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.