On Fri, 21 Jun 2013, Stephen Boyd wrote: > On 06/21/13 08:56, Thomas Gleixner wrote: > > > >> +static irqreturn_t gt_clockevent_interrupt(int irq, void *dev_id) > >> +{ > >> + struct clock_event_device *evt = *(struct clock_event_device **)dev_id; > > What kind of construct is this? > > > > You are using request_percpu_irq() and the device id is pointing to > > per cpu memory. Why do you need this horrible pointer indirection? > > > > Because a lot of other ARM code uses the same broken construct? > > This is an artifact of the ARM local timer API. I have been trying for a No, it's not an artifact. It's a copy and paste issue. Looking at drivers/clocksource/arm_arch_timer.c arch_timer_evt = alloc_percpu(struct clock_event_device); ... err = request_percpu_irq(ppi, arch_timer_handler_virt, "arch_timer", arch_timer_evt); This code is correct and it does not need any of the changes. Doing it with the pointer madness is just wrong, nothing else. Even if there is a historic reason why the pointer juggling was necessary at some point, it's obviously not needed anymore. And historic crap is no justification for brainlessly copied code. Thanks, tglx -- To unsubscribe from this list: send the line "unsubscribe linux-doc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html