Re: [PATCH 7/8] percpu: add __percpu sparse annotations to hw_breakpoint

Tejun Heo
2010-01-26T02:08:34Z

Hello,

On 01/26/2010 11:01 AM, Frederic Weisbecker wrote:
> So, may be it considers you are applying the address space overriding
> to the pointer to the type and not to the type itself.
>
> Consider:
>
> int __percpu i;
>
> What you do above *might* be considered as if SHIFT_PERCPU_PTR
> returns something of a type:
>
> int * __percpu i;
>
> So the pointer is in the normal address space, but its content is in
> __percpu address space.
>
> What if you do this:
>
>
> #define SHIFT_PERCPU_PTR(__p, __offset) ({ \
> __verify_pcpu_ptr((__p)); \
> RELOC_HIDE((__p), (__offset)); \
> })
>
> #define per_cpu(var, cpu) \
> (typeof(var) __kernel __force)(*SHIFT_PERCPU_PTR(&(var), per_cpu_offset(cpu)))

arch/x86/kernel/cpu/common.c:1149:20: warning: cast to non-scalar
arch/x86/kernel/cpu/common.c:1149:20: error: strange non-value function or array
CC arch/x86/kernel/cpu/common.o
arch/x86/kernel/cpu/common.c: In function 'cpu_init':
arch/x86/kernel/cpu/common.c:1149: error: cast specifies array type

Can't cast that way. :-(

--
tejun