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

From: Frederic Weisbecker <[email-masked]>
Date: Tue, 26 Jan 2010 03:35:43 +0100

On Tue, Jan 26, 2010 at 11:34:40AM +0900, Tejun Heo wrote:
> On 01/26/2010 11:22 AM, Frederic Weisbecker wrote:
> >> What about this? It doesn't use direct cast to scalar but should
> >> create a pointer type to kernel space datas:
> >>
> >>
> >> #define kernel_space_t(var)	\
> >> 	(typeof(var)	__kernel __force)
> > 
> > 
> > Should be typeof(*var)
> > 
> >>
> >> #define SHIFT_PERCPU_PTR(__p, __offset) ({                              \
> >>         __verify_pcpu_ptr((__p));                                       \
> >>         RELOC_HIDE((typeof(*(kernel_space_t(var)) __kernel __force *)(__p), (__offset)); \
> >> })
> 
> Can you balance ()'s here too?

#define kernel_space_t(var)        \
    (typeof(*(var))    __kernel __force)

/* Weird cast keeps both GCC and sparse happy. */
#define SHIFT_PERCPU_PTR(__p, __offset) ({                              \
        __verify_pcpu_ptr((__p));                                       \
        RELOC_HIDE((typeof(*(kernel_space_t(__p))) __kernel __force *)(__p), (__offset)); \
})

#define per_cpu(var, cpu) \
        (*SHIFT_PERCPU_PTR(&(var), per_cpu_offset(cpu)));

No guarantee that will build. I should pull your tree and install
sparse (yeah, shame on me, I've never installed it).