Messages in this thread | | | Date | Fri, 25 Jun 2010 11:23:33 +0200 | Subject | Re: [RFC][PATCH] irq_work | From | Frederic Weisbecker <> |
| |
2010/6/25 Huang Ying <ying.huang@intel.com>: > On Fri, 2010-06-25 at 15:48 +0800, Peter Zijlstra wrote: >> On Fri, 2010-06-25 at 10:12 +0800, Huang Ying wrote: >> > >> > It is better to add "void *data" field in this struct to allow same >> > function can be used for multiple struct irq_work. >> >> No, simply do: >> >> struct my_foo { >> struct irq_work work; >> /* my extra data */ >> } >> >> void my_func(struct irq_work *work) >> { >> struct my_foo *foo = container_of(work, struct my_foo, work); >> >> /* tada! */ >> } > > Yes. This works too. But Adding "void *data" field is helpful if you do > not embed struct irq_work into another struct.
That's what makes most sense. If you use work->data to put foo, then you can also do the opposite. Now the best is to pick the choice that gives you a real type and a typechecking, and not an error-prone and obfuscated void *
This is the way things are made in the kernel. struct work_struct, struct list, struct rcu_head, etc... are all embedded into a container, so that we can use container_of. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |